コード例 #1
0
    def _get_fabric_interconnects(self):
        if self._inventory.load_from == "live":
            equipment_switch_io_card_list = []
            ucs_system_fi_list = []
            if "equipmentSwitchIOCard" in self._inventory.sdk_objects.keys():
                if self._inventory.sdk_objects[
                        "equipmentSwitchIOCard"] is not None:
                    # We filter out SDK objects that are not under this Dn
                    for sdk_object in self._inventory.sdk_objects[
                            "equipmentSwitchIOCard"]:
                        if self.dn + "/" in sdk_object.dn:
                            equipment_switch_io_card_list.append(sdk_object)

                    # We create a list of UcsSystemFi objects from the equipmentSwitchIOCard objects list
                    for equipment_switch_io_card in equipment_switch_io_card_list:
                        # We need to get the networkElement object corresponding to the equipmentSwitchIOCard
                        list_fi = [
                            network_element for network_element in
                            self._inventory.sdk_objects["networkElement"]
                            if equipment_switch_io_card.serial ==
                            network_element.serial
                        ]
                        if len(list_fi) == 1:
                            ucs_system_fi_list.append(
                                UcsSystemFi(parent=self,
                                            network_element=list_fi[0]))

            return ucs_system_fi_list
        elif self._inventory.load_from == "file" and "fabric_interconnects" in self._ucs_sdk_object:
            return [
                UcsSystemFi(self, fi)
                for fi in self._ucs_sdk_object["fabric_interconnects"]
            ]
        else:
            return []
コード例 #2
0
 def _get_fabric_interconnects(self):
     if self._inventory.load_from == "live":
         return self._inventory.get_inventory_objects_under_dn(dn=self.dn, object_class=UcsSystemFi, parent=self)
     elif self._inventory.load_from == "file" and "fabric_interconnects" in self._ucs_sdk_object:
         return [UcsSystemFi(self, fi) for fi in self._ucs_sdk_object["fabric_interconnects"]]
     else:
         return []
コード例 #3
0
    def _fill_inventory_from_json(self, inventory=None, inventory_json=None):
        """
        Fills inventory using parsed JSON inventory file
        :param inventory: inventory to be filled
        :param inventory_json: parsed JSON content containing inventory
        :return: True if successful, False otherwise
        """
        if inventory is None or inventory_json is None:
            self.logger(
                level="debug",
                message="Missing inventory or inventory_json parameter!")
            return False

        if "device_connector" in inventory_json:
            for device_connector in inventory_json["device_connector"]:
                inventory.device_connector.append(
                    UcsSystemDeviceConnector(
                        parent=inventory, device_connector=device_connector))

        if "fabric_interconnects" in inventory_json:
            for network_element in inventory_json["fabric_interconnects"]:
                inventory.fabric_interconnects.append(
                    UcsSystemFi(parent=inventory,
                                network_element=network_element))

            # Fetch LAN & SAN neighbors
            inventory.lan_neighbors = inventory._get_lan_neighbors()
            inventory.san_neighbors = inventory._get_san_neighbors()

        if "chassis" in inventory_json:
            for equipment_chassis in inventory_json["chassis"]:
                inventory.chassis.append(
                    UcsSystemChassis(parent=inventory,
                                     equipment_chassis=equipment_chassis))

        if "fabric_extenders" in inventory_json:
            for equipment_fex in inventory_json["fabric_extenders"]:
                inventory.fabric_extenders.append(
                    UcsSystemFex(parent=inventory,
                                 equipment_fex=equipment_fex))

        if "rack_enclosures" in inventory_json:
            for equipment_rack_enclosure in inventory_json["rack_enclosures"]:
                inventory.rack_enclosures.append(
                    UcsSystemRackEnclosure(
                        parent=inventory,
                        equipment_rack_enclosure=equipment_rack_enclosure))

        if "rack_units" in inventory_json:
            for compute_rack_unit in inventory_json["rack_units"]:
                inventory.rack_units.append(
                    UcsSystemRack(parent=inventory,
                                  compute_rack_unit=compute_rack_unit))
        return True
コード例 #4
0
    def fetch_inventory(self):
        self.logger(
            message=
            "Fetching inventory from live device (can take several minutes)")
        inventory = UcsSystemInventory(parent=self)
        inventory.origin = "live"
        inventory.load_from = "live"
        inventory._fetch_sdk_objects()
        self.logger(level="debug",
                    message="Finished fetching UCS SDK objects for inventory")

        # add device connector
        if True:  # todo add condition of version?
            inventory.device_connector.append(
                UcsSystemDeviceConnector(parent=inventory))

        if "networkElement" in inventory.sdk_objects.keys():
            for network_element in sorted(
                    inventory.sdk_objects["networkElement"],
                    key=lambda fi: fi.dn):
                inventory.fabric_interconnects.append(
                    UcsSystemFi(parent=inventory,
                                network_element=network_element))

            # Verifying that Info Policy is enabled before trying to fetch neighbors
            self.logger(level="debug",
                        message="Verifying that Info Policy is enabled")
            info_policy_state = None
            try:
                info_policy = self.parent.handle.query_dn("sys/info-policy")
                info_policy_state = info_policy.state

                if info_policy_state == "disabled":
                    self.logger(
                        level="warning",
                        message=
                        "Info Policy is disabled. No neighbors can be found")
                else:
                    # Fetch LAN & SAN neighbors
                    inventory.lan_neighbors = inventory._get_lan_neighbors()
                    inventory.san_neighbors = inventory._get_san_neighbors()

            except Exception:
                self.logger(level="warning",
                            message="Unable to get Info Policy State")

        if "equipmentChassis" in inventory.sdk_objects.keys():
            for equipment_chassis in sorted(
                    inventory.sdk_objects["equipmentChassis"],
                    key=lambda chassis: [
                        int(t) if t.isdigit() else t.lower()
                        for t in re.split('(\d+)', chassis.id)
                    ]):
                inventory.chassis.append(
                    UcsSystemChassis(parent=inventory,
                                     equipment_chassis=equipment_chassis))

        if "equipmentFex" in inventory.sdk_objects.keys():
            for equipment_fex in sorted(inventory.sdk_objects["equipmentFex"],
                                        key=lambda fex: [
                                            int(t)
                                            if t.isdigit() else t.lower()
                                            for t in re.split('(\d+)', fex.id)
                                        ]):
                inventory.fabric_extenders.append(
                    UcsSystemFex(parent=inventory,
                                 equipment_fex=equipment_fex))

        if "equipmentRackEnclosure" in inventory.sdk_objects.keys():
            for equipment_rack_enclosure in sorted(
                    inventory.sdk_objects["equipmentRackEnclosure"],
                    key=lambda enclosure: [
                        int(t) if t.isdigit() else t.lower()
                        for t in re.split('(\d+)', enclosure.id)
                    ]):
                inventory.rack_enclosures.append(
                    UcsSystemRackEnclosure(
                        parent=inventory,
                        equipment_rack_enclosure=equipment_rack_enclosure))

        if "computeRackUnit" in inventory.sdk_objects.keys():
            for compute_rack_unit in sorted(
                    inventory.sdk_objects["computeRackUnit"],
                    key=lambda rack: [
                        int(t) if t.isdigit() else t.lower()
                        for t in re.split('(\d+)', rack.id)
                    ]):
                # We filter out rack servers that are inside enclosures (e.g. for UCS C4200)
                if compute_rack_unit.enclosure_id in ["0", None]:
                    inventory.rack_units.append(
                        UcsSystemRack(parent=inventory,
                                      compute_rack_unit=compute_rack_unit))

        # Removing the list of SDK objects fetched from the live UCS device
        inventory.sdk_objects = None
        self.inventory_list.append(inventory)
        self.logger(message="Finished fetching inventory with UUID " +
                    str(inventory.uuid) + " from live device")
        return inventory.uuid