X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/9d276e937c7fcb453a47f43f41cd7bb13706282f..6869f673b058cc58cf4b7a023f0220d0d047de55:/lib/cmdlib/instance.py diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py index 77c4488..653ae60 100644 --- a/lib/cmdlib/instance.py +++ b/lib/cmdlib/instance.py @@ -562,7 +562,7 @@ class LUInstanceCreate(LogicalUnit): if self.needed_locks[locking.LEVEL_NODE] is not locking.ALL_SET: self.needed_locks[locking.LEVEL_NODE].append(self.op.src_node_uuid) if not os.path.isabs(src_path): - self.op.src_path = src_path = \ + self.op.src_path = \ utils.PathJoin(pathutils.EXPORT_DIR, src_path) self.needed_locks[locking.LEVEL_NODE_RES] = \ @@ -670,13 +670,13 @@ class LUInstanceCreate(LogicalUnit): locked_nodes = self.owned_locks(locking.LEVEL_NODE) exp_list = self.rpc.call_export_list(locked_nodes) found = False - for node in exp_list: - if exp_list[node].fail_msg: + for node_uuid in exp_list: + if exp_list[node_uuid].fail_msg: continue - if self.op.src_path in exp_list[node].payload: + if self.op.src_path in exp_list[node_uuid].payload: found = True - self.op.src_node = node - self.op.src_node_uuid = self.cfg.GetNodeInfoByName(node).uuid + self.op.src_node = self.cfg.GetNodeInfo(node_uuid).name + self.op.src_node_uuid = node_uuid self.op.src_path = utils.PathJoin(pathutils.EXPORT_DIR, self.op.src_path) break @@ -730,8 +730,10 @@ class LUInstanceCreate(LogicalUnit): if einfo.has_option(constants.INISECT_INS, "nic%d_mac" % idx): ndict = {} for name in list(constants.NICS_PARAMETERS) + ["ip", "mac"]: - v = einfo.get(constants.INISECT_INS, "nic%d_%s" % (idx, name)) - ndict[name] = v + nic_param_name = "nic%d_%s" % (idx, name) + if einfo.has_option(constants.INISECT_INS, nic_param_name): + v = einfo.get(constants.INISECT_INS, nic_param_name) + ndict[name] = v nics.append(ndict) else: break @@ -1639,7 +1641,7 @@ class LUInstanceMove(LogicalUnit): (self.op.target_node_uuid, self.op.target_node) = \ ExpandNodeUuidAndName(self.cfg, self.op.target_node_uuid, self.op.target_node) - self.needed_locks[locking.LEVEL_NODE] = [self.op.target_node] + self.needed_locks[locking.LEVEL_NODE] = [self.op.target_node_uuid] self.needed_locks[locking.LEVEL_NODE_RES] = [] self.recalculate_locks[locking.LEVEL_NODE] = constants.LOCKS_APPEND @@ -1852,9 +1854,9 @@ class LUInstanceMultiAlloc(NoHooksLU): " pnode/snode while others do not", errors.ECODE_INVAL) - if self.op.iallocator is None: + if not has_nodes and self.op.iallocator is None: default_iallocator = self.cfg.GetDefaultIAllocator() - if default_iallocator and has_nodes: + if default_iallocator: self.op.iallocator = default_iallocator else: raise errors.OpPrereqError("No iallocator or nodes on the instances" @@ -1894,11 +1896,11 @@ class LUInstanceMultiAlloc(NoHooksLU): for inst in self.op.instances: (inst.pnode_uuid, inst.pnode) = \ ExpandNodeUuidAndName(self.cfg, inst.pnode_uuid, inst.pnode) - nodeslist.append(inst.pnode) + nodeslist.append(inst.pnode_uuid) if inst.snode is not None: (inst.snode_uuid, inst.snode) = \ ExpandNodeUuidAndName(self.cfg, inst.snode_uuid, inst.snode) - nodeslist.append(inst.snode) + nodeslist.append(inst.snode_uuid) self.needed_locks[locking.LEVEL_NODE] = nodeslist # Lock resources of instance's primary and secondary nodes (copy to @@ -1909,36 +1911,37 @@ class LUInstanceMultiAlloc(NoHooksLU): """Check prerequisite. """ - cluster = self.cfg.GetClusterInfo() - default_vg = self.cfg.GetVGName() - ec_id = self.proc.GetECId() + if self.op.iallocator: + cluster = self.cfg.GetClusterInfo() + default_vg = self.cfg.GetVGName() + ec_id = self.proc.GetECId() - if self.op.opportunistic_locking: - # Only consider nodes for which a lock is held - node_whitelist = self.cfg.GetNodeNames( - list(self.owned_locks(locking.LEVEL_NODE))) - else: - node_whitelist = None + if self.op.opportunistic_locking: + # Only consider nodes for which a lock is held + node_whitelist = self.cfg.GetNodeNames( + list(self.owned_locks(locking.LEVEL_NODE))) + else: + node_whitelist = None - insts = [_CreateInstanceAllocRequest(op, ComputeDisks(op, default_vg), - _ComputeNics(op, cluster, None, - self.cfg, ec_id), - _ComputeFullBeParams(op, cluster), - node_whitelist) - for op in self.op.instances] + insts = [_CreateInstanceAllocRequest(op, ComputeDisks(op, default_vg), + _ComputeNics(op, cluster, None, + self.cfg, ec_id), + _ComputeFullBeParams(op, cluster), + node_whitelist) + for op in self.op.instances] - req = iallocator.IAReqMultiInstanceAlloc(instances=insts) - ial = iallocator.IAllocator(self.cfg, self.rpc, req) + req = iallocator.IAReqMultiInstanceAlloc(instances=insts) + ial = iallocator.IAllocator(self.cfg, self.rpc, req) - ial.Run(self.op.iallocator) + ial.Run(self.op.iallocator) - if not ial.success: - raise errors.OpPrereqError("Can't compute nodes using" - " iallocator '%s': %s" % - (self.op.iallocator, ial.info), - errors.ECODE_NORES) + if not ial.success: + raise errors.OpPrereqError("Can't compute nodes using" + " iallocator '%s': %s" % + (self.op.iallocator, ial.info), + errors.ECODE_NORES) - self.ia_result = ial.result + self.ia_result = ial.result if self.op.dry_run: self.dry_run_result = objects.FillDict(self._ConstructPartialResult(), { @@ -1949,35 +1952,44 @@ class LUInstanceMultiAlloc(NoHooksLU): """Contructs the partial result. """ - (allocatable, failed) = self.ia_result + if self.op.iallocator: + (allocatable, failed_insts) = self.ia_result + allocatable_insts = map(compat.fst, allocatable) + else: + allocatable_insts = [op.instance_name for op in self.op.instances] + failed_insts = [] + return { - opcodes.OpInstanceMultiAlloc.ALLOCATABLE_KEY: - map(compat.fst, allocatable), - opcodes.OpInstanceMultiAlloc.FAILED_KEY: failed, + opcodes.OpInstanceMultiAlloc.ALLOCATABLE_KEY: allocatable_insts, + opcodes.OpInstanceMultiAlloc.FAILED_KEY: failed_insts, } def Exec(self, feedback_fn): """Executes the opcode. """ - op2inst = dict((op.instance_name, op) for op in self.op.instances) - (allocatable, failed) = self.ia_result - jobs = [] - for (name, node_names) in allocatable: - op = op2inst.pop(name) + if self.op.iallocator: + op2inst = dict((op.instance_name, op) for op in self.op.instances) + (allocatable, failed) = self.ia_result - (op.pnode_uuid, op.pnode) = \ - ExpandNodeUuidAndName(self.cfg, None, node_names[0]) - if len(node_names) > 1: - (op.snode_uuid, op.snode) = \ - ExpandNodeUuidAndName(self.cfg, None, node_names[1]) + for (name, node_names) in allocatable: + op = op2inst.pop(name) - jobs.append([op]) + (op.pnode_uuid, op.pnode) = \ + ExpandNodeUuidAndName(self.cfg, None, node_names[0]) + if len(node_names) > 1: + (op.snode_uuid, op.snode) = \ + ExpandNodeUuidAndName(self.cfg, None, node_names[1]) - missing = set(op2inst.keys()) - set(failed) - assert not missing, \ - "Iallocator did return incomplete result: %s" % utils.CommaJoin(missing) + jobs.append([op]) + + missing = set(op2inst.keys()) - set(failed) + assert not missing, \ + "Iallocator did return incomplete result: %s" % \ + utils.CommaJoin(missing) + else: + jobs.extend([op] for op in self.op.instances) return ResultWithJobs(jobs, **self._ConstructPartialResult()) @@ -2337,8 +2349,8 @@ class LUInstanceSetParams(LogicalUnit): def CheckArguments(self): if not (self.op.nics or self.op.disks or self.op.disk_template or self.op.hvparams or self.op.beparams or self.op.os_name or - self.op.offline is not None or self.op.runtime_mem or - self.op.pnode): + self.op.osparams or self.op.offline is not None or + self.op.runtime_mem or self.op.pnode): raise errors.OpPrereqError("No changes submitted", errors.ECODE_INVAL) if self.op.hvparams: