X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=ta%2Fipa-deployer.git;a=blobdiff_plain;f=work%2Fdib-ipa-element%2Fvirtmedia-netconf%2Fironic-bmc-hardware-manager%2Fsrc%2Fironic_bmc_hardware_manager%2Fbmc.py;fp=work%2Fdib-ipa-element%2Fvirtmedia-netconf%2Fironic-bmc-hardware-manager%2Fsrc%2Fironic_bmc_hardware_manager%2Fbmc.py;h=292271c92e27cc20ceca6c25b6dec338877c3ea5;hp=0000000000000000000000000000000000000000;hb=ffee968ccc39318c855aa9ac2b161c06681a6b5a;hpb=6e5eddd9cf62a88c185572465393f7d5dd7d0e11 diff --git a/work/dib-ipa-element/virtmedia-netconf/ironic-bmc-hardware-manager/src/ironic_bmc_hardware_manager/bmc.py b/work/dib-ipa-element/virtmedia-netconf/ironic-bmc-hardware-manager/src/ironic_bmc_hardware_manager/bmc.py new file mode 100644 index 0000000..292271c --- /dev/null +++ b/work/dib-ipa-element/virtmedia-netconf/ironic-bmc-hardware-manager/src/ironic_bmc_hardware_manager/bmc.py @@ -0,0 +1,82 @@ +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os + +from ironic_python_agent import hardware +from ironic_python_agent import utils + +from oslo_log import log +from oslo_concurrency import processutils + + +LOG = log.getLogger() + + +class BMCHardwareManager(hardware.GenericHardwareManager): + HARDWARE_MANAGER_NAME = 'BMCHardwareManager' + HARDWARE_MANAGER_VERSION = '1' + + def evaluate_hardware_support(self): + """Declare level of hardware support provided.""" + + LOG.info('Running in BMC environment') + return hardware.HardwareSupport.SERVICE_PROVIDER + + def list_network_interfaces(self): + network_interfaces_list = [] + + bmc_mac = self.get_ipmi_info().get('MAC Address', False) + if bmc_mac: + LOG.info("Adding MAC address net interfaces %s", bmc_mac) + bmc_address = self.get_bmc_address() + network_interfaces_list.append(hardware.NetworkInterface( + name="BMC_INTERFACE", + mac_addr=bmc_mac, + ipv4_address=bmc_address, + has_carrier=True, + vendor="BMC", + product="Akraino")) + + else: + network_interfaces_list = super(BMCHardwareManager, self).list_network_interfaces() + return network_interfaces_list + + def get_ipmi_info(self): + # These modules are rarely loaded automatically + utils.try_execute('modprobe', 'ipmi_msghandler') + utils.try_execute('modprobe', 'ipmi_devintf') + utils.try_execute('modprobe', 'ipmi_si') + + try: + out, _e = utils.execute( + "ipmitool lan print", shell=True, attempts=2) + except (processutils.ProcessExecutionError, OSError) as e: + # Not error, because it's normal in virtual environment + LOG.warning("Cannot get BMC info: %s", e) + return {} + + info = {} + for line in out.split('\n'): + spl = line.find(':') + if spl == -1: + continue + else: + key = line[0:spl].strip() + if key == '': + continue + info[line[0:spl].strip()] = line[spl+1:].strip() + return info +