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, }
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), }
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