示例#1
0
    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)
示例#2
0
    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)
示例#3
0
文件: group.py 项目: sajalcody/ganeti
    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
示例#4
0
文件: group.py 项目: sajalcody/ganeti
    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)