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