Revision 427746af lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
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 |
|
Also available in: Unified diff