From: Alexandru Avadanii Date: Mon, 23 May 2016 22:06:09 +0200 Subject: [PATCH] deploy: ipmi adapter: Add config support. Sometimes the IPMI lanplus protocol listens on a non-standard remote port, e.g. when target nodes are interfaced through a fake IPMI BMC application that listens on multiple ports on the same IP address. Therefore, allow setting IPMI port in the DHA using a new property named `ipmiPort`, and pass it along to `ipmitool` when set. CHANGE: get_access_info now also supports specifying the IPMI port to use with `ipmitool` by configuring the `ipmiPort` property in the DHA. hp_adapter.py: updated `get_access_info` return signature with the new (unused there) `ipmiport`. Signed-off-by: Alexandru Avadanii --- deploy/dha_adapters/hp_adapter.py | 2 +- deploy/dha_adapters/ipmi_adapter.py | 7 +++++-- deploy/reap.py | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/deploy/dha_adapters/hp_adapter.py b/deploy/dha_adapters/hp_adapter.py index 13bb349..6434da8 100644 --- a/deploy/dha_adapters/hp_adapter.py +++ b/deploy/dha_adapters/hp_adapter.py @@ -29,7 +29,7 @@ class HpAdapter(IpmiAdapter): def node_set_boot_order(self, node_id, boot_order_list): log('Set boot order %s on Node %s' % (boot_order_list, node_id)) - ip, username, password = self.get_access_info(node_id) + ip, username, password, ipmiport = self.get_access_info(node_id) ssh = SSHClient(ip, username, password) with ssh as s: for order, dev in enumerate(boot_order_list): diff --git a/deploy/dha_adapters/ipmi_adapter.py b/deploy/dha_adapters/ipmi_adapter.py index 283bd57..f4f2e6a 100644 --- a/deploy/dha_adapters/ipmi_adapter.py +++ b/deploy/dha_adapters/ipmi_adapter.py @@ -30,12 +30,15 @@ class IpmiAdapter(HardwareAdapter): ip = self.get_node_property(node_id, 'ipmiIp') username = self.get_node_property(node_id, 'ipmiUser') password = self.get_node_property(node_id, 'ipmiPass') - return ip, username, password + ipmiport = self.get_node_property(node_id, 'ipmiPort') + return ip, username, password, ipmiport def ipmi_cmd(self, node_id): - ip, username, password = self.get_access_info(node_id) + ip, username, password, ipmiport = self.get_access_info(node_id) cmd = 'ipmitool -I lanplus -A password' cmd += ' -H %s -U %s -P %s' % (ip, username, password) + if ipmiport: + cmd += ' -p %d' % int(ipmiport) return cmd def get_node_pxe_mac(self, node_id): diff --git a/deploy/reap.py b/deploy/reap.py index 6feaf17..9933d1d 100755 --- a/deploy/reap.py +++ b/deploy/reap.py @@ -59,6 +59,8 @@ adapter: # ipmiIp # ipmiUser # ipmiPass +# and you *MAY* provide (optional, not added by reap.py): +# ipmiPort # - libvirt adapter you need to provide: # libvirtName: # libvirtTemplate: [libvirt/vms/controller.xml | libvirt/vms/compute.xml]