Revision 39e27230

b/lib/client/gnt_group.py
1 1
#
2 2
#
3 3

  
4
# Copyright (C) 2010, 2011, 2012, 2013 Google Inc.
4
# Copyright (C) 2010, 2011, 2012, 2013, 2014 Google Inc.
5 5
#
6 6
# This program is free software; you can redistribute it and/or modify
7 7
# it under the terms of the GNU General Public License as published by
......
31 31
from ganeti import opcodes
32 32
from ganeti import utils
33 33
from ganeti import compat
34
from ganeti.client import base
34 35

  
35 36

  
36 37
#: default list of fields for L{ListGroups}
......
70 71
                          diskparams=diskparams, ipolicy=ipolicy,
71 72
                          hv_state=hv_state,
72 73
                          disk_state=disk_state)
73
  SubmitOrSend(op, opts)
74
  return base.GetResult(None, opts, SubmitOrSend(op, opts))
74 75

  
75 76

  
76 77
def AssignNodes(opts, args):
b/lib/cmdlib/group.py
1 1
#
2 2
#
3 3

  
4
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
4
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Google Inc.
5 5
#
6 6
# This program is free software; you can redistribute it and/or modify
7 7
# it under the terms of the GNU General Public License as published by
......
28 28
from ganeti import errors
29 29
from ganeti import locking
30 30
from ganeti import objects
31
from ganeti import opcodes
31 32
from ganeti import utils
32 33
from ganeti.masterd import iallocator
33 34
from ganeti.cmdlib.base import LogicalUnit, NoHooksLU, ResultWithJobs
......
134 135
    mn = self.cfg.GetMasterNode()
135 136
    return ([mn], [mn])
136 137

  
138
  @staticmethod
139
  def _ConnectInstanceCommunicationNetwork(cfg, group_uuid, network_name):
140
    """Connect a node group to the instance communication network.
141

  
142
    The group is connected to the instance communication network via
143
    the Opcode 'OpNetworkConnect'.
144

  
145
    @type cfg: L{ganeti.config.ConfigWriter}
146
    @param cfg: Ganeti configuration
147

  
148
    @type group_uuid: string
149
    @param group_uuid: UUID of the group to connect
150

  
151
    @type network_name: string
152
    @param network_name: name of the network to connect to
153

  
154
    @rtype: L{ganeti.cmdlib.ResultWithJobs} or L{None}
155
    @return: L{ganeti.cmdlib.ResultWithJobs} if the group needs to be
156
             connected, otherwise (the group is already connected)
157
             L{None}
158

  
159
    """
160
    jobs = []
161

  
162
    try:
163
      cfg.LookupNetwork(network_name)
164
      network_exists = True
165
    except errors.OpPrereqError:
166
      network_exists = False
167

  
168
    if network_exists:
169
      op = opcodes.OpNetworkConnect(
170
        group_name=group_uuid,
171
        network_name=network_name,
172
        network_mode=constants.NIC_MODE_ROUTED,
173
        network_link=constants.INSTANCE_COMMUNICATION_NETWORK_LINK,
174
        conflicts_check=True)
175
      jobs.append(op)
176

  
177
    if jobs:
178
      return ResultWithJobs([jobs])
179
    else:
180
      return None
181

  
137 182
  def Exec(self, feedback_fn):
138 183
    """Add the node group to the cluster.
139 184

  
......
150 195
    self.cfg.AddNodeGroup(group_obj, self.proc.GetECId(), check_uuid=False)
151 196
    del self.remove_locks[locking.LEVEL_NODEGROUP]
152 197

  
198
    network_name = self.cfg.GetClusterInfo().instance_communication_network
199
    if network_name:
200
      return self._ConnectInstanceCommunicationNetwork(self.cfg,
201
                                                       self.group_uuid,
202
                                                       network_name)
203

  
153 204

  
154 205
class LUGroupAssignNodes(NoHooksLU):
155 206
  """Logical unit for assigning nodes to groups.
b/src/Ganeti/OpCodes.hs
684 684
     ],
685 685
     "instance_name")
686 686
  , ("OpGroupAdd",
687
     [t| () |],
687
     [t| Either () JobIdListOnly |],
688 688
     OpDoc.opGroupAdd,
689 689
     [ pGroupName
690 690
     , pNodeGroupAllocPolicy

Also available in: Unified diff