Greetings everyone, I am having another problem that I was hoping to get some 
assistance with.  

I have created my own custom fence agent for some tasmota-flashed wifi smart 
plugs, that can control plug power input to ovirt nodes. This works great; 
however I am running into a problem getting it added to ovirt as a power 
manager. I got the custom fence agent added with engine-config -s, and it shows 
up in the webui to select as a power management agent, then I put in the 
details for the plug, IP address, login, password, and press the "test" button, 
which passes, and shows the status as power=on.  Once I save the settings, 
however, it is logged in the engine.log file that fencing will fail, because 
there is no node available to proxy the operation.  When I go back into the 
power management settings, and press "test" again, then I get the error: "Test 
failed: Failed to run fence status-check on host 'ovirt1'. No other host was 
available to serve as proxy for the operation."

I have the agent script in /usr/sbin/ on all nodes, execute permissions set, 
and I can run it manually at the command line just fine, so I am really at a 
loss here as what to check.  What am I missing here? Please help.

Thank you for your time. 

Script:
#!/usr/libexec/platform-python -tt

from urllib.parse import quote
import requests
import sys
import atexit
sys.path.append("/usr/share/fence")
from fencing import *

def set_power_status(conn, options):
        if "on" in options["--action"]:
            response = requests.get(buildUrl(options, "on"))
        elif "off" in options["--action"]:
            response = requests.get(buildUrl(options, "off"))
        return

def get_power_status(conn, options):
        response = requests.get(buildUrl(options, "status"))
        if "\"Power\":0" in response.text:
            return "off"
        elif "\"Power\":1" in response.text:
            return "on"

def buildUrl(options, action):
        cmnd = {
            'on' : 'Power On',
            'off' : 'Power Off',
            'status' : 'Status'
        }
        return "http://" + options["--ip"] + "/cm?user=" + 
quote(options["--username"]) + "&password=" + quote(options["--password"]) + 
"&cmnd=" + quote(cmnd.get(action, "Error"))

def main():
        device_opt = ["ipaddr", "login", "passwd", "web"]

        atexit.register(atexit_handler)

        all_opt["power_wait"]["default"] = 5

        options = check_input(device_opt, process_input(device_opt))

        docs = {}
        docs["shortdesc"] = "Fence agent for Tasmota-flashed Smarthome Plugs"
        docs["longdesc"] = ""
        docs["vendorurl"] = ""
        show_docs(options, docs)

        ##
        ## Fence operations
        ####
        result = fence_action(None, options, set_power_status, get_power_status)
        sys.exit(result)

if __name__ == "__main__":
        main()
_______________________________________________
Users mailing list -- users@ovirt.org
To unsubscribe send an email to users-le...@ovirt.org
Privacy Statement: https://www.ovirt.org/privacy-policy.html
oVirt Code of Conduct: 
https://www.ovirt.org/community/about/community-guidelines/
List Archives: 
https://lists.ovirt.org/archives/list/users@ovirt.org/message/5CPYEXCOJWRXKFJ2CFBTKOWVX5MHRKHB/

Reply via email to