Revision 2cc673a3 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
721 | 721 |
return params_copy |
722 | 722 |
|
723 | 723 |
|
724 |
def _GetUpdatedIPolicy(old_ipolicy, new_ipolicy, group_policy=False): |
|
725 |
"""Return the new version of a instance policy. |
|
726 |
|
|
727 |
@param group_policy: whether this policy applies to a group and thus |
|
728 |
we should support removal of policy entries |
|
729 |
|
|
730 |
""" |
|
731 |
use_none = use_default = group_policy |
|
732 |
ipolicy = copy.deepcopy(old_ipolicy) |
|
733 |
for key, value in new_ipolicy.items(): |
|
734 |
if key in constants.IPOLICY_PARAMETERS: |
|
735 |
utils.ForceDictType(value, constants.ISPECS_PARAMETER_TYPES) |
|
736 |
ipolicy[key] = _GetUpdatedParams(old_ipolicy.get(key, {}), value, |
|
737 |
use_none=use_none, |
|
738 |
use_default=use_default) |
|
739 |
else: |
|
740 |
# FIXME: we assume all others are lists; this should be redone |
|
741 |
# in a nicer way |
|
742 |
if not value or value == [constants.VALUE_DEFAULT]: |
|
743 |
if group_policy: |
|
744 |
del ipolicy[key] |
|
745 |
else: |
|
746 |
raise errors.OpPrereqError("Can't unset ipolicy attribute '%s'" |
|
747 |
" on the cluster'" % key, |
|
748 |
errors.ECODE_INVAL) |
|
749 |
else: |
|
750 |
logging.info("Setting %s to %s", key, value) |
|
751 |
ipolicy[key] = list(value) |
|
752 |
try: |
|
753 |
objects.InstancePolicy.CheckParameterSyntax(ipolicy) |
|
754 |
except errors.ConfigurationError, err: |
|
755 |
raise errors.OpPrereqError("Invalid instance policy: %s" % err, |
|
756 |
errors.ECODE_INVAL) |
|
757 |
return ipolicy |
|
758 |
|
|
759 |
|
|
724 | 760 |
def _UpdateAndVerifySubDict(base, updates, type_check): |
725 | 761 |
"""Updates and verifies a dict with sub dicts of the same type. |
726 | 762 |
|
... | ... | |
3830 | 3866 |
for storage, svalues in new_disk_state.items()) |
3831 | 3867 |
|
3832 | 3868 |
if self.op.ipolicy: |
3833 |
ipolicy = {} |
|
3834 |
for key, value in self.op.ipolicy.items(): |
|
3835 |
utils.ForceDictType(value, constants.ISPECS_PARAMETER_TYPES) |
|
3836 |
ipolicy[key] = _GetUpdatedParams(cluster.ipolicy.get(key, {}), |
|
3837 |
value) |
|
3838 |
try: |
|
3839 |
objects.InstancePolicy.CheckParameterSyntax(ipolicy) |
|
3840 |
except errors.ConfigurationError, err: |
|
3841 |
raise errors.OpPrereqError("Invalid instance policy: %s" % err, |
|
3842 |
errors.ECODE_INVAL) |
|
3843 |
self.new_ipolicy = ipolicy |
|
3869 |
self.new_ipolicy = _GetUpdatedIPolicy(cluster.ipolicy, self.op.ipolicy, |
|
3870 |
group_policy=False) |
|
3844 | 3871 |
|
3845 | 3872 |
if self.op.nicparams: |
3846 | 3873 |
utils.ForceDictType(self.op.nicparams, constants.NICS_PARAMETER_TYPES) |
... | ... | |
13306 | 13333 |
self.group.disk_state_static) |
13307 | 13334 |
|
13308 | 13335 |
if self.op.ipolicy: |
13309 |
g_ipolicy = {} |
|
13310 |
for key, value in self.op.ipolicy.iteritems(): |
|
13311 |
g_ipolicy[key] = _GetUpdatedParams(self.group.ipolicy.get(key, {}), |
|
13312 |
value, |
|
13313 |
use_none=True) |
|
13314 |
utils.ForceDictType(g_ipolicy[key], constants.ISPECS_PARAMETER_TYPES) |
|
13315 |
self.new_ipolicy = g_ipolicy |
|
13316 |
try: |
|
13317 |
objects.InstancePolicy.CheckParameterSyntax(self.new_ipolicy) |
|
13318 |
except errors.ConfigurationError, err: |
|
13319 |
raise errors.OpPrereqError("Invalid instance policy: %s" % err, |
|
13320 |
errors.ECODE_INVAL) |
|
13336 |
self.new_ipolicy = _GetUpdatedIPolicy(self.group.ipolicy, |
|
13337 |
self.op.ipolicy, |
|
13338 |
group_policy=True) |
|
13321 | 13339 |
|
13322 | 13340 |
def BuildHooksEnv(self): |
13323 | 13341 |
"""Build hooks env. |
Also available in: Unified diff