Revision 1f5d9bf8

b/lib/client/gnt_group.py
26 26

  
27 27
from ganeti.cli import *
28 28
from ganeti import constants
29
from ganeti import objects
29 30
from ganeti import opcodes
30 31
from ganeti import utils
31 32

  
......
47 48
  @return: the desired exit code
48 49

  
49 50
  """
51
  ipolicy = \
52
    objects.CreateIPolicyFromOpts(ispecs_mem_size=opts.ispecs_mem_size,
53
                                  ispecs_cpu_count=opts.ispecs_cpu_count,
54
                                  ispecs_disk_count=opts.ispecs_disk_count,
55
                                  ispecs_disk_size=opts.ispecs_disk_size,
56
                                  ispecs_nic_count=opts.ispecs_nic_count,
57
                                  group_ipolicy=True)
58
  for key in ipolicy.keys():
59
    utils.ForceDictType(ipolicy[key], constants.ISPECS_PARAMETER_TYPES)
60

  
50 61
  (group_name,) = args
51 62
  diskparams = dict(opts.diskparams)
52 63
  op = opcodes.OpGroupAdd(group_name=group_name, ndparams=opts.ndparams,
53 64
                          alloc_policy=opts.alloc_policy,
54
                          diskparams=diskparams)
65
                          diskparams=diskparams, ipolicy=ipolicy)
55 66
  SubmitOpCode(op, opts=opts)
56 67

  
57 68

  
......
225 236

  
226 237
  return rcode
227 238

  
239
INSTANCE_POLICY_OPTS = [
240
  SPECS_CPU_COUNT_OPT,
241
  SPECS_DISK_COUNT_OPT,
242
  SPECS_DISK_SIZE_OPT,
243
  SPECS_MEM_SIZE_OPT,
244
  SPECS_NIC_COUNT_OPT,
245
  ]
228 246

  
229 247
commands = {
230 248
  "add": (
231 249
    AddGroup, ARGS_ONE_GROUP,
232
    [DRY_RUN_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, DISK_PARAMS_OPT],
250
    [DRY_RUN_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, DISK_PARAMS_OPT] +
251
    INSTANCE_POLICY_OPTS,
233 252
    "<group_name>", "Add a new node group to the cluster"),
234 253
  "assign-nodes": (
235 254
    AssignNodes, ARGS_ONE_GROUP + ARGS_MANY_NODES, [DRY_RUN_OPT, FORCE_OPT],
b/lib/cmdlib.py
12788 12788
    else:
12789 12789
      self.op.diskparams = self.cfg.GetClusterInfo().diskparams
12790 12790

  
12791
    cluster = self.cfg.GetClusterInfo()
12792
    full_ipolicy = cluster.SimpleFillIpolicy(self.op.ipolicy)
12793
    objects.InstancePolicy.CheckParameterSyntax(full_ipolicy)
12794

  
12791 12795
  def BuildHooksEnv(self):
12792 12796
    """Build hooks env.
12793 12797

  
......
12811 12815
                                  uuid=self.group_uuid,
12812 12816
                                  alloc_policy=self.op.alloc_policy,
12813 12817
                                  ndparams=self.op.ndparams,
12814
                                  diskparams=self.op.diskparams)
12818
                                  diskparams=self.op.diskparams,
12819
                                  ipolicy=self.op.ipolicy)
12815 12820

  
12816 12821
    self.cfg.AddNodeGroup(group_obj, self.proc.GetECId(), check_uuid=False)
12817 12822
    del self.remove_locks[locking.LEVEL_NODEGROUP]
b/lib/opcodes.py
1412 1412
    _PNodeGroupAllocPolicy,
1413 1413
    _PGroupNodeParams,
1414 1414
    _PDiskParams,
1415
    ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"),
1415 1416
    ]
1416 1417

  
1417 1418

  

Also available in: Unified diff