def _MergeValidateOsParams(self, instance): "Handle the OS parameter merging and validation for the target instance." node_uuids = list(self.cfg.GetInstanceNodes(instance.uuid)) self.op.osparams = self.op.osparams or {} self.op.osparams_private = self.op.osparams_private or {} self.op.osparams_secret = self.op.osparams_secret or {} # Handle the use of 'default' values. params_public = GetUpdatedParams(instance.osparams, self.op.osparams) params_private = GetUpdatedParams(instance.osparams_private, self.op.osparams_private) params_secret = self.op.osparams_secret # Handle OS parameters if self.op.os_type is not None: instance_os = self.op.os_type else: instance_os = instance.os cluster = self.cfg.GetClusterInfo() self.osparams = cluster.SimpleFillOS(instance_os, params_public, os_params_private=params_private, os_params_secret=params_secret) self.osparams_private = params_private self.osparams_secret = params_secret CheckOSParams(self, True, node_uuids, instance_os, self.osparams, self.op.force_variant)
def _MergeValidateOsParams(self, instance): "Handle the OS parameter merging and validation for the target instance." node_uuids = list(self.cfg.GetInstanceNodes(instance.uuid)) self.op.osparams = self.op.osparams or {} self.op.osparams_private = self.op.osparams_private or {} self.op.osparams_secret = self.op.osparams_secret or {} self.op.remove_osparams = self.op.remove_osparams or [] self.op.remove_osparams_private = self.op.remove_osparams_private or [] # Handle the use of 'default' values. if self.op.clear_osparams: instance.osparams.clear() if self.op.clear_osparams_private: instance.osparams_private.clear() params_public = GetUpdatedParams(instance.osparams, self.op.osparams) params_private = GetUpdatedParams(instance.osparams_private, self.op.osparams_private) params_secret = self.op.osparams_secret for osp in self.op.remove_osparams: if osp in params_public: del params_public[osp] else: self.LogWarning( "Trying to remove OS parameter %s but parameter" " does not exist" % osp) for osp in self.op.remove_osparams_private: if osp in params_private: del params_private[osp] else: self.LogWarning("Trying to remove private OS parameter %s but" " parameter does not exist" % osp) # Handle OS parameters if self.op.os_type is not None: instance_os = self.op.os_type else: instance_os = instance.os cluster = self.cfg.GetClusterInfo() self.osparams = cluster.SimpleFillOS(instance_os, params_public, os_params_private=params_private, os_params_secret=params_secret) self.osparams_private = params_private self.osparams_secret = params_secret CheckOSParams(self, True, node_uuids, instance_os, self.osparams, self.op.force_variant)
def _UpdateAndVerifyDiskParams(old, new): """Updates and verifies disk parameters. """ new_params = GetUpdatedParams(old, new) utils.ForceDictType(new_params, constants.DISK_DT_TYPES) return new_params
def CheckPrereq(self): """Check prerequisites. """ owned_instance_names = frozenset( self.owned_locks(locking.LEVEL_INSTANCE)) # Check if locked instances are still correct CheckNodeGroupInstances(self.cfg, self.group_uuid, owned_instance_names) self.group = self.cfg.GetNodeGroup(self.group_uuid) cluster = self.cfg.GetClusterInfo() if self.group is None: raise errors.OpExecError( "Could not retrieve group '%s' (UUID: %s)" % (self.op.group_name, self.group_uuid)) if self.op.ndparams: new_ndparams = GetUpdatedParams(self.group.ndparams, self.op.ndparams) utils.ForceDictType(new_ndparams, constants.NDS_PARAMETER_TYPES) self.new_ndparams = new_ndparams if self.op.diskparams: diskparams = self.group.diskparams uavdp = self._UpdateAndVerifyDiskParams # For each disktemplate subdict update and verify the values new_diskparams = dict( (dt, uavdp(diskparams.get(dt, {}), self.op.diskparams[dt])) for dt in constants.DISK_TEMPLATES if dt in self.op.diskparams) # As we've all subdicts of diskparams ready, lets merge the actual # dict with all updated subdicts self.new_diskparams = objects.FillDict(diskparams, new_diskparams) try: utils.VerifyDictOptions(self.new_diskparams, constants.DISK_DT_DEFAULTS) CheckDiskAccessModeConsistency(self.new_diskparams, self.cfg, group=self.group) except errors.OpPrereqError as err: raise errors.OpPrereqError( "While verify diskparams options: %s" % err, errors.ECODE_INVAL) if self.op.hv_state: self.new_hv_state = MergeAndVerifyHvState( self.op.hv_state, self.group.hv_state_static) if self.op.disk_state: self.new_disk_state = \ MergeAndVerifyDiskState(self.op.disk_state, self.group.disk_state_static) self._CheckIpolicy(cluster, owned_instance_names)