From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fabio M. Di Nitto Date: Fri, 29 Nov 2013 22:36:29 +0100 Subject: [Cluster-devel] [PATCH 2/3] fence_ipmilan: option --method and new option --ipmitool-path In-Reply-To: <602750918.3048711.1385742741085.JavaMail.root@redhat.com> References: <602750918.3048711.1385742741085.JavaMail.root@redhat.com> Message-ID: <529908DD.9090904@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On 11/29/2013 05:32 PM, Ondrej Mular wrote: > Add support for option --method and new option --ipmitool-path > > --- > fence/agents/ipmilan/fence_ipmilan.py | 80 +++++++++++++++++++++++------------ > 1 file changed, 54 insertions(+), 26 deletions(-) > > diff --git a/fence/agents/ipmilan/fence_ipmilan.py b/fence/agents/ipmilan/fence_ipmilan.py > index 5c32690..4d33234 100644 > --- a/fence/agents/ipmilan/fence_ipmilan.py > +++ b/fence/agents/ipmilan/fence_ipmilan.py > @@ -11,14 +11,6 @@ REDHAT_COPYRIGHT="" > BUILD_DATE="" > #END_VERSION_GENERATION > > -PATHS = ["/usr/local/bull/NSMasterHW/bin/ipmitool", > - "/usr/bin/ipmitool", > - "/usr/sbin/ipmitool", > - "/bin/ipmitool", > - "/sbin/ipmitool", > - "/usr/local/bin/ipmitool", > - "/usr/local/sbin/ipmitool"] > - > def get_power_status(_, options): > > cmd = create_command(options, "status") > @@ -28,9 +20,8 @@ def get_power_status(_, options): > > try: > process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE) > - except OSError, ex: > - print ex > - fail(EC_TOOL_FAIL) > + except OSError: > + fail_usage("Ipmitool not found or not accessible") > > process.wait() > > @@ -54,13 +45,31 @@ def set_power_status(_, options): > process = subprocess.Popen(shlex.split(cmd), stdout=null, stderr=null) > except OSError: > null.close() > - fail(EC_TOOL_FAIL) > + fail_usage("Ipmitool not found or not accessible") > > process.wait() > null.close() > > return > > +def reboot_cycle(_, options): > + cmd = create_command(options, "cycle") > + > + if options["log"] >= LOG_MODE_VERBOSE: > + options["debug_fh"].write("executing: " + cmd + "\n") > + > + try: > + process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE) > + except OSError: > + fail_usage("Ipmitool not found or not accessible") > + > + process.wait() > + > + out = process.communicate() > + process.stdout.close() > + > + return bool(re.search('chassis power control: cycle', str(out).lower())) > + > def is_executable(path): > if os.path.exists(path): > stats = os.stat(path) > @@ -68,13 +77,17 @@ def is_executable(path): > return True > return False > > -def get_ipmitool_path(): > - for path in PATHS: > - if is_executable(path): > - return path > +def get_ipmitool_path(options): > + if type(options["--ipmitool-path"]) == type(list()): > + for path in options["--ipmitool-path"]: > + if is_executable(path): > + return path > + else: > + if is_executable(options["--ipmitool-path"]): > + return options["--ipmitool-path"] > return None > > -def create_command(options, action): > +def create_command(options, action): > cmd = options["ipmitool_path"] > > # --lanplus / -L > @@ -120,7 +133,7 @@ def define_new_opts(): > all_opt["lanplus"] = { > "getopt" : "L", > "longopt" : "lanplus", > - "help" : "-L, --lanplus Use Lanplus to improve security of connection", > + "help" : "-L, --lanplus Use Lanplus to improve security of connection", > "required" : "0", > "shortdesc" : "Use Lanplus to improve security of connection", > "order": 1 > @@ -128,7 +141,7 @@ def define_new_opts(): > all_opt["auth"] = { > "getopt" : "A:", > "longopt" : "auth", > - "help" : "-A, --auth=[auth] IPMI Lan Auth type (md5|password|none)", > + "help" : "-A, --auth=[auth] IPMI Lan Auth type (md5|password|none)", > "required" : "0", > "shortdesc" : "IPMI Lan Auth type.", > "default" : "none", > @@ -138,7 +151,7 @@ def define_new_opts(): > all_opt["cipher"] = { > "getopt" : "C:", > "longopt" : "cipher", > - "help" : "-C, --cipher=[cipher] Ciphersuite to use (same as ipmitool -C parameter)", > + "help" : "-C, --cipher=[cipher] Ciphersuite to use (same as ipmitool -C parameter)", > "required" : "0", > "shortdesc" : "Ciphersuite to use (same as ipmitool -C parameter)", > "default" : "0", > @@ -147,28 +160,44 @@ def define_new_opts(): > all_opt["privlvl"] = { > "getopt" : "P:", > "longopt" : "privlvl", > - "help" : "-P, --privlvl=[level] Privilege level on IPMI device (callback|user|operator|administrator)", > + "help" : "-P, --privlvl=[level] Privilege level on IPMI device (callback|user|operator|administrator)", > "required" : "0", > "shortdesc" : "Privilege level on IPMI device", > "default" : "administrator", > "choices" : ["callback", "user", "operator", "administrator"], > "order": 1 > } > + all_opt["ipmitool_path"] = { > + "getopt" : "i:", > + "longopt" : "ipmitool-path", > + "help" : "--ipmitool-path=[path] Path to ipmitool binary", > + "required" : "0", > + "shortdesc" : "Path to ipmitool binary", > + "default" : ["/usr/local/bull/NSMasterHW/bin/ipmitool", > + "/usr/bin/ipmitool", > + "/usr/sbin/ipmitool", > + "/bin/ipmitool", > + "/sbin/ipmitool", > + "/usr/local/bin/ipmitool", > + "/usr/local/sbin/ipmitool"], Ondrej, this search path must go away and you should only use the OS defined PATH. Fabio