Exemplo n.º 1
0
    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 ")
Exemplo n.º 2
0
    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
Exemplo n.º 4
0
    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