Greetings,
The attached patches add support for power cycling systems controlled by the /sbin/fence_lpar command (provided by the cman package). Since Hardware Management Consoles (HMC) typically manage more than one system, the power-id must be a colon delimited string consisting of: <system>:<partition>. Where <system> specifies the name of the managed system to control, and <partition> is the name of the desired logical partition on <system>.
An example execution can be observed below (note that the modules/cli*py patch must be applied for the --power-pass and --power-id arguments to be properly parsed).
# cobbler system edit --name ibm-505-lp1 --power-type lpar --power-address ibm-p5-hmc.test.redhat.com --power-user hscroot --power-pass XXXXXXX --power-id 505:lp1
# cobbler system reboot --name ibm-505-lp1 cobbler power configuration is:
type : lpar address: ibm-p5-hmc.test.redhat.com user : hscroot id : 505:lp1
- /sbin/fence_lpar -a ibm-p5-hmc.test.redhat.com -l hscroot -p abc1234 -x -s 505 -n lp1 -o off Success: Powered OFF cobbler power configuration is:
type : lpar address: ibm-p5-hmc.test.redhat.com user : hscroot id : 505:lp1
- /sbin/fence_lpar -a ibm-p5-hmc.test.redhat.com -l hscroot -p abc1234 -x -s 505 -n lp1 -o on Success: Powered ON
Comments welcome!
Thanks, James
--- cobbler/modules/cli_system.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/cobbler/modules/cli_system.py b/cobbler/modules/cli_system.py index 220822c..96d6c3b 100644 --- a/cobbler/modules/cli_system.py +++ b/cobbler/modules/cli_system.py @@ -150,7 +150,7 @@ class SystemFunction(commands.CobblerFunction):
if self.options.power_address: obj.set_power_address(self.options.power_address) if self.options.power_pass: obj.set_power_pass(self.options.power_pass) - if self.options.power_id: obj.set_power_pass(self.options.power_id) + if self.options.power_id: obj.set_power_id(self.options.power_id) if self.options.power_type: obj.set_power_type(self.options.power_type) if self.options.power_user: obj.set_power_user(self.options.power_user)
--- cobbler/action_power.py | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/cobbler/action_power.py b/cobbler/action_power.py index 39f279f..9934d8d 100644 --- a/cobbler/action_power.py +++ b/cobbler/action_power.py @@ -106,7 +106,7 @@ class PowerTool:
rc = sub_process.call(cmd, shell=False) if not rc == 0: - raise CX("command failed (rc=%s), please validate the physical setup and cobler config" % rc) + raise CX("command failed (rc=%s), please validate the physical setup and cobbler config" % rc)
return rc
@@ -130,7 +130,8 @@ class PowerTool: "ipmitool" : "/etc/cobbler/power_ipmitool.template", "ipmilan" : "/etc/cobbler/power_ipmilan.template", "ilo" : "/etc/cobbler/power_ilo.template", - "rsa" : "/etc/cobbler/power_rsa.template" + "rsa" : "/etc/cobbler/power_rsa.template", + "lpar" : "/etc/cobbler/power_lpar.template", }
result = map.get(self.system.power_type, "")
--- templates/power_lpar.template | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 templates/power_lpar.template
diff --git a/templates/power_lpar.template b/templates/power_lpar.template new file mode 100644 index 0000000..e7ce89e --- /dev/null +++ b/templates/power_lpar.template @@ -0,0 +1,3 @@ +#set ($power_sys, $power_lpar) = $power_id.split(':') + +/sbin/fence_lpar -a $power_address -l $power_user -p $power_pass -x -s $power_sys -n $power_lpar -o $power_mode
--- cobbler/item_system.py | 2 +- cobbler/modules/cli_system.py | 2 +- installer_templates/settings.template | 1 + setup.py | 1 + webui_templates/system_edit.tmpl | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/cobbler/item_system.py b/cobbler/item_system.py index ff46764..520e3c0 100644 --- a/cobbler/item_system.py +++ b/cobbler/item_system.py @@ -503,7 +503,7 @@ class System(item.Item):
def set_power_type(self, power_type): power_type = power_type.lower() - valid = "bullpap wti apc_snmp ether-wake ipmilan drac ipmitool ilo rsai none" + valid = "bullpap wti apc_snmp ether-wake ipmilan drac ipmitool ilo rsai lpar none" choices = valid.split(" ") choices.sort() if power_type not in choices: diff --git a/cobbler/modules/cli_system.py b/cobbler/modules/cli_system.py index 96d6c3b..c8c6428 100644 --- a/cobbler/modules/cli_system.py +++ b/cobbler/modules/cli_system.py @@ -97,7 +97,7 @@ class SystemFunction(commands.CobblerFunction): if not self.matches_args(args,["dumpvars","remove","report","getks","list"]): p.add_option("--power-pass", dest="power_pass", help="password for power management interface") if not self.matches_args(args,["dumpvars","poweron","poweroff","reboot","remove","report","getks","list"]): - p.add_option("--power-type", dest="power_type", help="one of: none, apc_snmp, bullpap, drac, ether-wake, ilo, ipmilan, ipmitool, wti") + p.add_option("--power-type", dest="power_type", help="one of: none, apc_snmp, bullpap, drac, ether-wake, ilo, ipmilan, ipmitool, wti, lpar")
if not self.matches_args(args,["dumpvars","remove","report","getks","list"]): p.add_option("--power-user", dest="power_user", help="username for power management interface, if required") diff --git a/installer_templates/settings.template b/installer_templates/settings.template index 5143d27..5572431 100644 --- a/installer_templates/settings.template +++ b/installer_templates/settings.template @@ -161,6 +161,7 @@ omshell_bin: /usr/bin/omshell # ipmitool # ilo # rsa +# lpar
power_management_default_type: 'ipmitool'
diff --git a/setup.py b/setup.py index f7bf3f2..51df55b 100644 --- a/setup.py +++ b/setup.py @@ -219,6 +219,7 @@ if __name__ == "__main__": (etcpath, ['templates/power_ether_wake.template']), (etcpath, ['templates/power_wti.template']), (etcpath, ['templates/power_ilo.template']), + (etcpath, ['templates/power_lpar.template']),
# templates for /usr/bin/cobbler-setup (itemplates, ['installer_templates/modules.conf.template']), diff --git a/webui_templates/system_edit.tmpl b/webui_templates/system_edit.tmpl index 9f7a4a4..c99b01e 100644 --- a/webui_templates/system_edit.tmpl +++ b/webui_templates/system_edit.tmpl @@ -643,7 +643,7 @@ function page_onload() { </td> <td class="poweredit"> <select name="power_type" id="power_type"> - #set valid_power = [ "bullpap", "wti", "apc_snmp", "ether-wake", "ipmilan", "drac", "ipmitool", "ilo", "rsa" ] + #set valid_power = [ "bullpap", "wti", "apc_snmp", "ether-wake", "ipmilan", "drac", "ipmitool", "ilo", "rsa", "lpar" ] #set nothing = valid_power.sort()
#for $value in $valid_power:
cobbler@lists.fedorahosted.org