[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Cluster-devel] [PATCH 2/3] fence_ipmilan: option --method and new option --ipmitool-path



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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]