commit 2a56e0b3fd7ce168afb33b57685a6b1a59a0efe6 Author: Marek 'marx' Grac Date: Mon Sep 19 10:21:41 2016 +0200 fence_lpar: Add support for IVM diff --git a/fence/agents/lpar/fence_lpar.py b/fence/agents/lpar/fence_lpar.py index 31b0521..de8ce0d 100644 --- a/fence/agents/lpar/fence_lpar.py +++ b/fence/agents/lpar/fence_lpar.py @@ -32,7 +32,7 @@ def get_power_status(conn, options): re.IGNORECASE | re.MULTILINE).search(conn.before).group(1) except AttributeError: fail(EC_STATUS_HMC) - elif options["--hmc-version"] == "4": + elif options["--hmc-version"] in ["4", "IVM"]: conn.send("lssyscfg -r lpar -m "+ options["--managed"] + " --filter 'lpar_names=" + options["--plug"] + "'\n") conn.log_expect(options, options["--command-prompt"], int(options["--power-timeout"])) @@ -56,7 +56,7 @@ def set_power_status(conn, options): conn.send("chsysstate -o " + options["--action"] + " -r lpar -m " + options["--managed"] + " -n " + options["--plug"] + "\n") conn.log_expect(options, options["--command-prompt"], int(options["--power-timeout"])) - elif options["--hmc-version"] == "4": + elif options["--hmc-version"] in ["4", "IVM"]: if options["--action"] == "on": conn.send("chsysstate -o on -r lpar -m " + options["--managed"] + " -n " + options["--plug"] + @@ -98,7 +98,29 @@ def get_lpar_list(conn, options): lines = res.group(1).split("\n") for outlet_line in lines: - (port, status) = outlet_line.split(":") + try: + (port, status) = outlet_line.split(":") + except ValueError: + fail_usage('Output does not match expected HMC version, try different one'); + outlets[port] = ("", status) + elif options["--hmc-version"] == "IVM": + conn.send("lssyscfg -r lpar -m " + options["--managed"] + + " -F name,state\n") + conn.log_expect(options, options["--command-prompt"], int(options["--power-timeout"])) + + ## We have to remove first line (command) and last line (part of new prompt) + #### + res = re.search("^.+?\n(.*)\n.*$", conn.before, re.S) + + if res == None: + fail_usage("Unable to parse output of list command") + + lines = res.group(1).split("\n") + for outlet_line in lines: + try: + (port, status) = outlet_line.split(",") + except ValueError: + fail_usage('Output does not match expected HMC version, try different one'); outlets[port] = ("", status) return outlets @@ -114,11 +136,11 @@ def define_new_opts(): all_opt["hmc_version"] = { "getopt" : "H:", "longopt" : "hmc-version", - "help" : "-H, --hmc-version=[version] Force HMC version to use: 3, 4 (default)", + "help" : "-H, --hmc-version=[version] Force HMC version to use: 3, 4 (default), ivm", "required" : "0", - "shortdesc" : "Force HMC version to use (3 or 4)", + "shortdesc" : "Force HMC version to use (3, 4 or IVM)", "default" : "4", - "choices" : ["3", "4"], + "choices" : ["3", "4", "ivm"], "order" : 1} def main(): diff --git a/tests/data/metadata/fence_lpar.xml b/tests/data/metadata/fence_lpar.xml index 8c82925..199ca4e 100644 --- a/tests/data/metadata/fence_lpar.xml +++ b/tests/data/metadata/fence_lpar.xml @@ -48,8 +48,9 @@ - Force HMC version to use (3 or 4) + Force HMC version to use (3, 4 or IVM)