Exemplo n.º 1
0
    def GetRequest(self, cfg):
        """Requests a new instance.

    The checks for the completeness of the opcode must have already been
    done.

    """
        for d in self.disks:
            d[constants.IDISK_TYPE] = self.disk_template
        disk_space = gmi.ComputeDiskSize(self.disks)

        return {
            "name": self.name,
            "disk_template": self.disk_template,
            "group_name": self.group_name,
            "tags": self.tags,
            "os": self.os,
            "vcpus": self.vcpus,
            "memory": self.memory,
            "spindle_use": self.spindle_use,
            "disks": self.disks,
            "disk_space_total": disk_space,
            "nics": self.nics,
            "required_nodes": self.RequiredNodes(),
            "hypervisor": self.hypervisor,
        }
Exemplo n.º 2
0
  def GetRequest(self, cfg):
    """Request an relocation of an instance

    The checks for the completeness of the opcode must have already been
    done.

    """
    instance = cfg.GetInstanceInfo(self.inst_uuid)
    disks = cfg.GetInstanceDisks(self.inst_uuid)
    if instance is None:
      raise errors.ProgrammerError("Unknown instance '%s' passed to"
                                   " IAllocator" % self.inst_uuid)

    if not utils.AllDiskOfType(disks, constants.DTS_MIRRORED):
      raise errors.OpPrereqError("Can't relocate non-mirrored instances",
                                 errors.ECODE_INVAL)

    secondary_nodes = cfg.GetInstanceSecondaryNodes(instance.uuid)
    if (utils.AnyDiskOfType(disks, constants.DTS_INT_MIRROR) and
        len(secondary_nodes) != 1):
      raise errors.OpPrereqError("Instance has not exactly one secondary node",
                                 errors.ECODE_STATE)

    disk_sizes = [{constants.IDISK_SIZE: disk.size,
                   constants.IDISK_TYPE: disk.dev_type} for disk in disks]
    disk_space = gmi.ComputeDiskSize(disk_sizes)

    return {
      "name": instance.name,
      "disk_space_total": disk_space,
      "required_nodes": 1,
      "relocate_from": cfg.GetNodeNames(self.relocate_from_node_uuids),
      }
Exemplo n.º 3
0
    def _ComputeInstanceData(cfg, cluster_info, i_list):
        """Compute global instance data.

    """
        instance_data = {}
        for iinfo, beinfo in i_list:
            nic_data = []
            for nic in iinfo.nics:
                filled_params = cluster_info.SimpleFillNIC(nic.nicparams)
                nic_dict = {
                    "mac": nic.mac,
                    "ip": nic.ip,
                    "mode": filled_params[constants.NIC_MODE],
                    "link": filled_params[constants.NIC_LINK],
                }
                if filled_params[
                        constants.NIC_MODE] == constants.NIC_MODE_BRIDGED:
                    nic_dict["bridge"] = filled_params[constants.NIC_LINK]
                nic_data.append(nic_dict)
            inst_disks = cfg.GetInstanceDisks(iinfo.uuid)
            inst_disktemplate = cfg.GetInstanceDiskTemplate(iinfo.uuid)
            pir = {
                "tags":
                list(iinfo.GetTags()),
                "admin_state":
                iinfo.admin_state,
                "vcpus":
                beinfo[constants.BE_VCPUS],
                "memory":
                beinfo[constants.BE_MAXMEM],
                "spindle_use":
                beinfo[constants.BE_SPINDLE_USE],
                "os":
                iinfo.os,
                "nodes": [cfg.GetNodeName(iinfo.primary_node)] +
                cfg.GetNodeNames(cfg.GetInstanceSecondaryNodes(iinfo.uuid)),
                "nics":
                nic_data,
                "disks": [{
                    constants.IDISK_TYPE: dsk.dev_type,
                    constants.IDISK_SIZE: dsk.size,
                    constants.IDISK_MODE: dsk.mode,
                    constants.IDISK_SPINDLES: dsk.spindles
                } for dsk in inst_disks],
                "disk_template":
                inst_disktemplate,
                "disks_active":
                iinfo.disks_active,
                "hypervisor":
                iinfo.hypervisor,
            }
            pir["disk_space_total"] = gmi.ComputeDiskSize(pir["disks"])
            instance_data[iinfo.name] = pir

        return instance_data