X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=ta%2Fremote-installer.git;a=blobdiff_plain;f=src%2Fremoteinstaller%2Finstaller%2Fbmc_management%2Fbmctools.py;h=b5be98d3b9298fb6c3ae72504f9f0006848bebcd;hp=4a6e383aadc4aa79d5a9c815653681f50c2855ae;hb=c00954e51458e1d24015dfd09ffb0051963cf3bf;hpb=a772a381a84dd9b906a06c314b113b997bce71f4 diff --git a/src/remoteinstaller/installer/bmc_management/bmctools.py b/src/remoteinstaller/installer/bmc_management/bmctools.py index 4a6e383..b5be98d 100644 --- a/src/remoteinstaller/installer/bmc_management/bmctools.py +++ b/src/remoteinstaller/installer/bmc_management/bmctools.py @@ -1,5 +1,6 @@ # Copyright 2019 Nokia - +# Copyright 2020 ENEA +# # 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 @@ -22,10 +23,11 @@ class BMCException(Exception): pass class BMC(object): - def __init__(self, host, user, passwd, log_path=None): + def __init__(self, host, user, passwd, priv_level='ADMINISTRATOR', log_path=None): self._host = host self._user = user self._passwd = passwd + self._priv_level = priv_level if log_path: self._log_path = log_path else: @@ -52,6 +54,9 @@ class BMC(object): def get_passwd(self): return self._passwd + def get_priv_level(self): + return self._priv_level + def reset(self): logging.info('Reset BMC of %s: %s', self.get_host_name(), self.get_host()) @@ -197,18 +202,16 @@ class BMC(object): @staticmethod def _convert_to_hex(ascii_string, padding=False, length=0): - hex_value = ''.join('0x{} '.format(c.encode('hex')) for c in ascii_string).strip() - if padding and (len(ascii_string) < length): - hex_value += ''.join(' 0x00' for _ in range(len(ascii_string), length)) - - return hex_value + if padding: + ascii_string = ascii_string.ljust(length, '\0') + return ' '.join('0x{}'.format(c.encode('hex')) for c in ascii_string) @staticmethod def _convert_to_ascii(hex_string): - return ''.join('{}'.format(c.decode('hex')) for c in hex_string) + return hex_string.replace('0x','').replace(' ','').decode('hex') def _execute_ipmitool_command(self, ipmi_command): - command = 'ipmitool -I lanplus -H {} -U {} -P {} {}'.format(self._host, self._user, self._passwd, ipmi_command) + command = 'ipmitool -I lanplus -H {} -U {} -P {} -L {} {}'.format(self._host, self._user, self._passwd, self._priv_level, ipmi_command) p = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, _ = p.communicate() @@ -257,12 +260,12 @@ class BMC(object): def _open_console(self): logging.debug('Open SOL console (log in %s)', self._log_path) - expect_session = pexpect.spawn('ipmitool -I lanplus -H {} -U {} -P {} sol deactivate'.format(self._host, self._user, self._passwd)) + expect_session = pexpect.spawn('ipmitool -I lanplus -H {} -U {} -P {} -L {} sol deactivate'.format(self._host, self._user, self._passwd, self._priv_level)) expect_session.expect(pexpect.EOF) logfile = open(self._log_path, 'ab') - expect_session = pexpect.spawn('ipmitool -I lanplus -H {} -U {} -P {} sol activate'.format(self._host, self._user, self._passwd), timeout=None, logfile=logfile) + expect_session = pexpect.spawn('ipmitool -I lanplus -H {} -U {} -P {} -L {} sol activate'.format(self._host, self._user, self._passwd, self._priv_level), timeout=None, logfile=logfile) return expect_session