10863 |
10863 |
all_changes = [
|
10864 |
10864 |
self.op.ndparams,
|
10865 |
10865 |
self.op.alloc_policy,
|
|
10866 |
self.op.network,
|
10866 |
10867 |
]
|
10867 |
10868 |
|
10868 |
10869 |
if all_changes.count(None) == len(all_changes):
|
... | ... | |
10877 |
10878 |
locking.LEVEL_NODEGROUP: [self.group_uuid],
|
10878 |
10879 |
}
|
10879 |
10880 |
|
|
10881 |
if self.op.network:
|
|
10882 |
(self.network_action, self.network_name,
|
|
10883 |
self.network_link) = self.op.network
|
|
10884 |
self.network_uuid = self.cfg.LookupNetwork(self.network_name)
|
|
10885 |
|
10880 |
10886 |
def CheckPrereq(self):
|
10881 |
10887 |
"""Check prerequisites.
|
10882 |
10888 |
|
... | ... | |
10887 |
10893 |
raise errors.OpExecError("Could not retrieve group '%s' (UUID: %s)" %
|
10888 |
10894 |
(self.op.group_name, self.group_uuid))
|
10889 |
10895 |
|
|
10896 |
if self.op.network:
|
|
10897 |
self.network = self.cfg.GetNetwork(self.network_uuid)
|
|
10898 |
if self.network_action == constants.DDM_ADD:
|
|
10899 |
if self.network_uuid in self.group.networks:
|
|
10900 |
raise errors.OpPrereqError("Network '%s' is already mapped"
|
|
10901 |
" to group '%s'" % (self.network_name,
|
|
10902 |
self.group.name),
|
|
10903 |
errors.ECODE_INVAL)
|
|
10904 |
other_networks = [n for n, link in self.group.networks.items()
|
|
10905 |
if link == self.network_link]
|
|
10906 |
for other_uuid in other_networks:
|
|
10907 |
net = self.cfg.GetNetwork(other_uuid)
|
|
10908 |
if net.family == self.network.family:
|
|
10909 |
raise errors.OpPrereqError("There is already another IPv%d network"
|
|
10910 |
" mapped to group '%s': %s" %
|
|
10911 |
(net.family, self.group.name, net.name),
|
|
10912 |
errors.ECODE_INVAL)
|
|
10913 |
elif (self.network_action == constants.DDM_REMOVE and
|
|
10914 |
self.network_uuid not in self.group.networks):
|
|
10915 |
raise errors.OpPrereqError("Network '%s' is not mapped"
|
|
10916 |
" to group '%s'" % (self.network_name,
|
|
10917 |
self.group.name),
|
|
10918 |
errors.ECODE_INVAL)
|
|
10919 |
|
10890 |
10920 |
if self.op.ndparams:
|
10891 |
10921 |
new_ndparams = _GetUpdatedParams(self.group.ndparams, self.op.ndparams)
|
10892 |
10922 |
utils.ForceDictType(self.op.ndparams, constants.NDS_PARAMETER_TYPES)
|
... | ... | |
10899 |
10929 |
env = {
|
10900 |
10930 |
"GROUP_NAME": self.op.group_name,
|
10901 |
10931 |
"NEW_ALLOC_POLICY": self.op.alloc_policy,
|
|
10932 |
"NETWORK": self.op.network,
|
10902 |
10933 |
}
|
10903 |
10934 |
mn = self.cfg.GetMasterNode()
|
10904 |
10935 |
return env, [mn], [mn]
|
... | ... | |
10916 |
10947 |
if self.op.alloc_policy:
|
10917 |
10948 |
self.group.alloc_policy = self.op.alloc_policy
|
10918 |
10949 |
|
|
10950 |
if self.op.network:
|
|
10951 |
if self.network_action == constants.DDM_ADD:
|
|
10952 |
self.group.networks[self.network_uuid] = self.network_link
|
|
10953 |
try:
|
|
10954 |
self.cfg.CommitGroupInstanceIps(self.group.uuid, self.network_uuid,
|
|
10955 |
self.network_link, feedback_fn)
|
|
10956 |
except errors.AddressPoolError, e:
|
|
10957 |
raise errors.OpExecError("Failed to commit existing"
|
|
10958 |
" instance IPs: %s" % str(e))
|
|
10959 |
elif self.network_action == constants.DDM_REMOVE:
|
|
10960 |
network_link = self.group.networks[self.network_uuid]
|
|
10961 |
self.cfg.ReleaseGroupInstanceIps(self.group.uuid, self.network_uuid,
|
|
10962 |
network_link, feedback_fn)
|
|
10963 |
del self.group.networks[self.network_uuid]
|
|
10964 |
|
10919 |
10965 |
self.cfg.Update(self.group, feedback_fn)
|
10920 |
10966 |
return result
|
10921 |
10967 |
|