Exemplo n.º 1
0
    def __init__(self, parent=None, parent_draw=None):
        self.picture = None
        self.parent_draw = parent_draw
        self.width = None
        self.orientation = None

        if not parent.sku:
            parent_draw.logger(
                level="error",
                message="No SKU found, this adaptor will not be created")
            return None

        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return

        self.ports = []

        self.parent_draw.paste_layer(self.picture, self.picture_offset)
        if "UcsImc" not in parent.__class__.__name__:
            if self.parent_draw.color_ports:
                if self._parent.sku not in [
                        "UCSC-PCIE-C25Q-04"
                ]:  #TODO Workaround until fixed on inventory as the port of the PCIe card are not correct and appears as active even when should not
                    self.draw_ports()
                elif "Rack" in self._parent._parent.__class__.__name__:  #TODO Workaround until above problem fixed
                    self.draw_ports()
                # self.draw_ports()

        # We drop the picture in order to save on memory
        self.picture = None
Exemplo n.º 2
0
    def __init__(self, parent=None, parent_draw=None):
        self.parent_draw = parent_draw
        GenericUcsDrawEquipment.__init__(self,
                                         parent=parent,
                                         orientation="front")
        if not self.picture:
            return

        self.disk_slots_used = []

        if not self.parent_draw:
            self.background = self._create_background(self.canvas_width,
                                                      self.canvas_height,
                                                      self.canvas_color)
            self.draw = self._create_draw()

        self.parent_draw.paste_layer(self.picture, self.picture_offset)

        self.storage_controllers = self._get_storage_controllers()

        self.nvme_disks = []
        if hasattr(self._parent,
                   "nvme_drives") and "disks_slots" in self.json_file:
            self.nvme_disks = self._get_nvme_disks()
            for disk in self.nvme_disks:
                self.parent_draw.paste_layer(disk.picture, disk.picture_offset)

        self.fill_blanks()

        # We drop the picture in order to save on memory
        self.picture = None
Exemplo n.º 3
0
    def __init__(self, parent=None, parent_draw=None, color_ports=True):
        self.parent_draw = parent_draw
        self.color_ports = color_ports
        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return

        if not self.parent_draw:
            self.background = self._create_background(self.canvas_width, self.canvas_height, self.canvas_color)
            self.draw = self._create_draw()
        else:
            self.background = self.parent_draw.background
            self.draw = self.parent_draw.draw

        self.paste_layer(self.picture, self.picture_offset)

        self.legend_items = []
        self.ports = []
        if color_ports:
            self.draw_ports()
        self.expansion_modules = self.get_expansion_modules()
        self.fill_blanks()

        self._file_name = None
        if not self.parent_draw:
            self._file_name = self._device_target + "_fi_" + self._parent.id + "_rear"
            if not self.color_ports:
                self._file_name = self._device_target + "_fi_" + self._parent.id + "_rear_clear"

        if color_ports:
            self.clear_version = UcsSystemDrawFiRear(parent=parent, parent_draw=parent_draw, color_ports=False)
Exemplo n.º 4
0
    def __init__(self, parent=None, color_ports=True):
        GenericUcsDrawEquipment.__init__(self, parent=parent)
        self.color_ports = color_ports
        if not self.picture:
            return

        self.background = self._create_background(self.canvas_width, self.canvas_height, self.canvas_color)
        self.draw = self._create_draw()

        self.paste_layer(self.picture, self.picture_offset)

        self.fabric_port_list = []
        self.host_port_list = []

        if color_ports:
            self.draw_ports()

        self._file_name = self._device_target + "_fex_" + self._parent.id + "_rear"
        if not self.color_ports:
            self._file_name = self._device_target + "_fex_" + self._parent.id + "_rear_clear"

        if color_ports:
            self.clear_version = UcsSystemDrawFexRear(parent=parent, color_ports=False)

        # We drop the picture in order to save on memory
        self.picture = None
Exemplo n.º 5
0
    def __init__(self, parent=None, parent_draw=None):
        self.parent_draw = parent_draw
        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return

        self.ports = []
        self.parent_draw.paste_layer(self.picture, self.picture_offset)

        if self.parent_draw.color_ports:
            self.draw_ports()
Exemplo n.º 6
0
    def __init__(self, parent=None, parent_draw=None):
        self.parent_draw = parent_draw
        self.module_id = int(parent.id) // 2 + int(parent.id) % 2
        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return
        if not self.parent_draw:
            self.background = self._create_background(self.canvas_width,
                                                      self.canvas_height,
                                                      self.canvas_color)
            self.draw = self._create_draw()

        self.parent_draw.paste_layer(self.picture, self.picture_offset)
Exemplo n.º 7
0
    def __init__(self, parent=None):
        GenericUcsDrawEquipment.__init__(self, parent=parent, orientation="front")
        if not self.picture:
            return

        self.background = self._create_background(self.canvas_width, self.canvas_height, self.canvas_color)
        self.draw = self._create_draw()

        self.paste_layer(self.picture, self.picture_offset)

        if "psus_slots" in self.json_file:
            self.power_supplies = self.get_power_supplies()

        self._file_name = self._device_target + "_fex_" + self._parent.id + "_front"
Exemplo n.º 8
0
    def __init__(self, parent=None, parent_draw=None):
        self.parent_draw = parent_draw
        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return

        self.ports = []
        self.parent_draw.paste_layer(self.picture, self.picture_offset)

        if self.parent_draw.color_ports:
            self.draw_ports()

        # We drop the picture in order to save on memory
        self.picture = None
Exemplo n.º 9
0
    def __init__(self, parent=None, parent_draw=None):
        self.parent_draw = parent_draw
        self._parent = parent

        self.id = int(self._parent.id)

        if hasattr(self._parent, 'sku'):
            self.sku = self._parent.sku
        else:
            self.sku = None

        if self._parent.connection_protocol == "NVME":
            self.device_type = self._parent.connection_protocol + " " + self._parent.drive_type
        elif self._parent.rotational_speed_marketing:
            self.device_type = str(self._parent.rotational_speed_marketing
                                   ) + " " + self._parent.connection_protocol
        else:
            self.device_type = self._parent.drive_type + " " + self._parent.connection_protocol
        self.disk_size = self._parent.size_marketing

        self.disk_info = self._get_disk_info()
        if self.disk_info is not None:
            self.size = self.disk_info["size"]
            self.orientation = self.disk_info["orientation"]
            self.format = self.disk_info["format"]

            # Special case for M5 NVMe disks
            if self._parent.connection_protocol == "NVME" and self.format == "sff_m5":
                self.format = self.format + "_nvme"

            GenericUcsDrawEquipment.__init__(self, parent=parent)

            self.background = self._create_background(self.canvas_width,
                                                      self.canvas_height,
                                                      self.canvas_color)
            self.draw = self._create_draw()

            self.paste_layer(self.picture, (0, 0))

            self.draw_disk_information()

        else:
            self.size = None
            self.orientation = None
            self.format = None
            self.background = None
            self.draw = None
            self.picture = None
            self.picture_offset = None
Exemplo n.º 10
0
 def fill_blanks(self):
     if not self.storage_controllers:
         if "disks_slots" in self.json_file:
             # Fill blank for disks slots
             disks_slots = [
                 *range(1,
                        len(self.json_file["disks_slots"]) + 1)
             ]
             disks_slots = set(disks_slots) - set(self.disk_slots_used)
             for slot_id in disks_slots:
                 blank_name = None
                 orientation = "horizontal"
                 disk_format = None
                 for disk_slot in self.json_file["disks_slots"]:
                     if disk_slot['id'] == slot_id:
                         orientation = disk_slot['orientation']
                         disk_format = disk_slot['format']
                 for model in self.json_file["disks_models"]:
                     if "type" in model and not blank_name:
                         if model["type"] == "blank" and model[
                                 "format"] == disk_format:
                             blank_name = model["name"]
                             img = Image.open(
                                 "catalog/drives/img/" + blank_name +
                                 ".png", 'r')
                             if orientation == "vertical":
                                 img = GenericUcsDrawEquipment.rotate_object(
                                     picture=img)
                 if blank_name:
                     for slot in self.json_file["disks_slots"]:
                         if slot["id"] == slot_id:
                             coord = slot["coord"]
                     coord_offset = self.picture_offset[0] + coord[
                         0], self.picture_offset[1] + coord[1]
                     self.parent_draw.paste_layer(img, coord_offset)
Exemplo n.º 11
0
    def __init__(self, parent=None, parent_draw=None):
        self.parent_draw = parent_draw
        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return

        if not self.parent_draw:
            self.background = self._create_background(self.canvas_width, self.canvas_height, self.canvas_color)
            self.draw = self._create_draw()

        self.parent_draw.paste_layer(self.picture, self.picture_offset)

        # self.save_image(self._device_target + "__" + self._parent.id)

        # We drop the picture in order to save on memory
        self.picture = None
Exemplo n.º 12
0
    def __init__(self, parent=None, parent_draw=None):
        self.picture = None
        self.parent_draw = parent_draw
        self.width = None
        self.orientation = None

        if not parent.sku:
            parent_draw.logger(
                level="error",
                message="No SKU found, this adaptor will not be created")
            return None

        GenericUcsDrawEquipment.__init__(self, parent=parent)
        if not self.picture:
            return

        self.ports = []

        self.parent_draw.paste_layer(self.picture, self.picture_offset)
        if "UcsImc" not in parent.__class__.__name__:
            if self.parent_draw.color_ports:
                self.draw_ports()
Exemplo n.º 13
0
    def fill_blanks(self):
        if "disks_slots" in self.parent_draw.json_file:
            # For rack front or blade only
            if "Front" in self.parent_draw.__class__.__name__ or "Blade" in self.parent_draw.__class__.__name__:
                if len(self.disks) < len(
                        self.parent_draw.json_file["disks_slots"]
                ):  # Fill blank for disks slots
                    used_slot = []
                    potential_slot = []
                    unused_slot = []
                    for disk in self.disks:
                        used_slot.append(int(disk._parent.id))
                    # We add to the list of used slots, the slot of potential other Storage Controllers
                    used_slot = list(
                        set(used_slot + self.parent_draw.disk_slots_used))

                    for disk in self.parent_draw.json_file["disks_slots"]:
                        potential_slot.append(disk["id"])
                    for blank_id in set(potential_slot) - set(used_slot):
                        unused_slot.append(blank_id)
                    for slot_id in unused_slot:
                        blank_name = None
                        orientation = "horizontal"
                        disk_format = None
                        for disk_slot in self.parent_draw.json_file[
                                'disks_slots']:
                            if disk_slot['id'] == slot_id:
                                orientation = disk_slot['orientation']
                                disk_format = disk_slot['format']
                        for model in self.parent_draw.json_file[
                                "disks_models"]:
                            if "type" in model and not blank_name:
                                if model["type"] == "blank" and model[
                                        "format"] == disk_format:
                                    blank_name = model["name"]
                                    img = Image.open(
                                        "catalog/drives/img/" + blank_name +
                                        ".png", 'r')
                                    if orientation == "vertical":
                                        img = GenericUcsDrawEquipment.rotate_object(
                                            picture=img)

                        if blank_name:
                            for slot in self.parent_draw.json_file[
                                    "disks_slots"]:
                                if slot["id"] == int(slot_id):
                                    coord = slot["coord"]
                            coord_offset = self.parent_draw.picture_offset[0] + coord[0],\
                                           self.parent_draw.picture_offset[1] + coord[1]
                            if self.parent_draw.__class__.__name__ == "GenericUcsDrawBlade":
                                self.parent_draw.parent_draw.paste_layer(
                                    img, coord_offset)
                            else:
                                self.parent_draw.paste_layer(img, coord_offset)

        if "disks_slots_rear" in self.parent_draw.json_file:
            # For rack rear only
            if "Rear" in self.parent_draw.__class__.__name__:
                if len(self.disks) < len(
                        self.parent_draw.json_file["disks_slots_rear"]
                ):  # Fill blank for disks slots
                    used_slot = []
                    potential_slot = []
                    unused_slot = []
                    for disk in self.disks:
                        disk_id = int(disk._parent.id)
                        used_slot.append(disk_id)

                    for disk in self.parent_draw.json_file["disks_slots_rear"]:
                        potential_slot.append(disk["id"])
                    for blank_id in set(potential_slot) - set(used_slot):
                        unused_slot.append(blank_id)
                    for slot_id in unused_slot:
                        blank_name = None
                        orientation = "horizontal"
                        disk_format = None
                        for disk_slot in self.parent_draw.json_file[
                                'disks_slots_rear']:
                            if disk_slot['id'] == slot_id:
                                orientation = disk_slot['orientation']
                                disk_format = disk_slot['format']
                        for model in self.parent_draw.json_file[
                                "disks_models"]:
                            if "type" in model and not blank_name:
                                if model["type"] == "blank" and model[
                                        "format"] == disk_format:
                                    blank_name = model["name"]
                                    img = Image.open(
                                        "catalog/drives/img/" + blank_name +
                                        ".png", 'r')
                                    if orientation == "vertical":
                                        img = GenericUcsDrawEquipment.rotate_object(
                                            picture=img)

                        if blank_name:
                            for slot in self.parent_draw.json_file[
                                    "disks_slots_rear"]:
                                if slot["id"] == int(slot_id):
                                    coord = slot["coord"]
                            coord_offset = self.parent_draw.picture_offset[0] + coord[0],\
                                           self.parent_draw.picture_offset[1] + coord[1]
                            self.parent_draw.paste_layer(img, coord_offset)