def get_ip_addr_output_inet6(self): """ Get list of strings containing ipv6 addresses for a given interface """ f = subprocess.Popen( ["ip", "addr", "show", self.ifname.encode("utf-8")], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) out, err = f.communicate() self.assertNotEqual( len(out), 0, "Device " + str(self.ifname) + " does not exist [FAILED]") self.assertEqual( len(err), 0, "Device " + str(self.ifname) + " does not exist [FAILED]") if len(out) == 0 or len(err) != 0: Logger.error("Device " + str(self.ifname) + " does not exist [FAILED]") return 1 # raise Exception("Device " + self.ifname.encode('utf-8') + " does not exist [FAILED]") out = out.decode("utf-8") if "inet6 " not in out: raise Exception( "Device " + str(self.ifname) + " does not have an IPv6 address [FAILED]\ncommand output:" + out) return out.split("inet6 ")
def parse_sensors(self): self.set_sensors_cmd() data = run_shell_cmd(self.sensors_cmd) if "not present" in data: return {"present": False} result = {"present": True} # VCCGBE VR Vol (0x54) : 1.05 Volts | (ok) # SOC DIMMA1 Temp (0xB5) : NA | (na) name_regex = re.compile(r"^(.+)\s+\(0x.+\)\s*") for edata in data.split("\n"): try: adata = edata.split(" : ") sensor_name = name_regex.match(adata[0]).group(1).strip() value_group = adata[1].split(" | ") value_units = value_group[0].strip().split(" ") sensor_value = value_units[0].strip() if sensor_value == "NA": sensor_value = str(0) result[sensor_name] = sensor_value # Save for future use. # sensor_status = value_group[1] # sensor_units = "NA" # if len(value_units) == 2: # sensor_units = value_units[1].strip() except Exception: Logger.error("Cannot parse: {}".format(edata)) return result
def get_ipv6_address(self): """ Get IPv6 address of a given interface """ f = subprocess.Popen( ["ip", "addr", "show", self.ifname.encode("utf-8")], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) out, err = f.communicate() self.assertNotEqual( len(out), 0, "Device " + str(self.ifname) + " does not exist [FAILED]") self.assertEqual( len(err), 0, "Device " + str(self.ifname) + " does not exist [FAILED]") if len(out) == 0 or len(err) != 0: Logger.error("Device " + str(self.ifname) + " does not exist [FAILED]") return 1 # raise Exception("Device " + self.ifname.encode('utf-8') + " does not exist [FAILED]") out = out.decode("utf-8") ipv6 = out.split("inet6 ")[1].split("/")[0] Logger.debug("Got ip address for " + str(self.ifname)) return ipv6
def upgrade_components(self, components_to_upgrade, logging=False): """ main method to check and upgrade the components """ for component in components_to_upgrade: # Start timestamp start = time.perf_counter() entity = component["entity"] ret = -1 if component["upgrade_needed"]: try: if not self.bmc_ssh_session.session.isalive(): self.fail("remote ssh session broke!") filename = self.remote_bin_path + "/" + self.json[entity][UFW_NAME] cmd_to_execute = self.json[entity][UFW_CMD] cmd_to_execute = cmd_to_execute.format(filename=filename) if logging: self.print_line( "Updating: {} ".format(entity), "left", ".", endline=" ", has_append=True, ) self.send_command_to_UUT(self.STOP_FSCD) self.send_command_to_UUT(self.STOP_WDT) self.send_command_to_UUT(cmd_to_execute, prompt=False) ret = self.bmc_ssh_session.session.expect_exact( self.expected_keyword, timeout=self.upgrading_timeout[entity] ) except pexpect.exceptions.TIMEOUT: ret = -1 if logging: print("Timed out") except Exception as e: print(e) # End timestamp end = time.perf_counter() component["execution_time"] = end - start if ret >= 0 and ret <= self.num_last_failed_expected_key: if logging: print("Failed") component["upgrade_status"] = False component["result"] = self.receive_command_output_from_UUT() Logger.error("{}: Upgrading failed!".format(component)) else: if logging: print("Done") # flush the rest log. self.flush_session_contents() time.sleep(10) # delay for the current process to be done