Revision fb644e77

b/lib/client/gnt_group.py
146 146
  @return: the desired exit code
147 147

  
148 148
  """
149
  if (opts.ndparams is None and opts.alloc_policy is None
150
      and not opts.diskparams and not opts.hv_state and not opts.disk_state):
149
  allmods = [opts.ndparams, opts.alloc_policy, opts.diskparams, opts.hv_state,
150
             opts.disk_state, opts.ispecs_mem_size, opts.ispecs_cpu_count,
151
             opts.ispecs_disk_count, opts.ispecs_disk_size,
152
             opts.ispecs_nic_count, opts.diskparams]
153
  if allmods.count(None) == len(allmods):
151 154
    ToStderr("Please give at least one of the parameters.")
152 155
    return 1
153 156

  
......
159 162
  hv_state = dict(opts.hv_state)
160 163

  
161 164
  diskparams = dict(opts.diskparams)
165

  
166
  # set the default values
167
  to_ipolicy = [
168
    opts.ispecs_mem_size,
169
    opts.ispecs_cpu_count,
170
    opts.ispecs_disk_count,
171
    opts.ispecs_disk_size,
172
    opts.ispecs_nic_count,
173
    ]
174
  for ispec in to_ipolicy:
175
    for param in ispec:
176
      if isinstance(ispec[param], basestring):
177
        if ispec[param].lower() == "default":
178
          ispec[param] = constants.VALUE_DEFAULT
179
  # create ipolicy object
180
  ipolicy = objects.CreateIPolicyFromOpts(\
181
    ispecs_mem_size=opts.ispecs_mem_size,
182
    ispecs_cpu_count=opts.ispecs_cpu_count,
183
    ispecs_disk_count=opts.ispecs_disk_count,
184
    ispecs_disk_size=opts.ispecs_disk_size,
185
    ispecs_nic_count=opts.ispecs_nic_count,
186
    group_ipolicy=True,
187
    allowed_values=[constants.VALUE_DEFAULT])
188
  for key in ipolicy.keys():
189
    utils.ForceDictType(ipolicy[key], constants.ISPECS_PARAMETER_TYPES,
190
                        allowed_values=[constants.VALUE_DEFAULT])
191

  
162 192
  op = opcodes.OpGroupSetParams(group_name=args[0],
163 193
                                ndparams=opts.ndparams,
164 194
                                alloc_policy=opts.alloc_policy,
165 195
                                hv_state=hv_state,
166 196
                                disk_state=disk_state,
167
                                diskparams=diskparams)
197
                                diskparams=diskparams,
198
                                ipolicy=ipolicy)
199

  
168 200
  result = SubmitOrSend(op, opts)
169 201

  
170 202
  if result:
......
266 298
  "modify": (
267 299
    SetGroupParams, ARGS_ONE_GROUP,
268 300
    [DRY_RUN_OPT, SUBMIT_OPT, ALLOC_POLICY_OPT, NODE_PARAMS_OPT, HV_STATE_OPT,
269
     DISK_STATE_OPT, DISK_PARAMS_OPT],
301
     DISK_STATE_OPT, DISK_PARAMS_OPT] + INSTANCE_POLICY_OPTS,
270 302
    "<group_name>", "Alters the parameters of a node group"),
271 303
  "remove": (
272 304
    RemoveGroup, ARGS_ONE_GROUP, [DRY_RUN_OPT],
b/lib/cmdlib.py
13068 13068
      self.op.diskparams,
13069 13069
      self.op.alloc_policy,
13070 13070
      self.op.hv_state,
13071
      self.op.disk_state
13071
      self.op.disk_state,
13072
      self.op.ipolicy,
13072 13073
      ]
13073 13074

  
13074 13075
    if all_changes.count(None) == len(all_changes):
......
13117 13118
        _MergeAndVerifyDiskState(self.op.disk_state,
13118 13119
                                 self.group.disk_state_static)
13119 13120

  
13121
    if self.op.ipolicy:
13122
      g_ipolicy = {}
13123
      for key, value in self.op.ipolicy.iteritems():
13124
        g_ipolicy[key] = _GetUpdatedParams(self.group.ipolicy.get(key, {}),
13125
                                           value,
13126
                                           use_none=True)
13127
        utils.ForceDictType(g_ipolicy[key], constants.ISPECS_PARAMETER_TYPES)
13128
      self.new_ipolicy = g_ipolicy
13129
      objects.InstancePolicy.CheckParameterSyntax(self.new_ipolicy)
13130

  
13120 13131
  def BuildHooksEnv(self):
13121 13132
    """Build hooks env.
13122 13133

  
......
13156 13167
    if self.op.disk_state:
13157 13168
      self.group.disk_state_static = self.new_disk_state
13158 13169

  
13170
    if self.op.ipolicy:
13171
      self.group.ipolicy = self.new_ipolicy
13172

  
13159 13173
    self.cfg.Update(self.group, feedback_fn)
13160 13174
    return result
13161 13175

  
b/lib/opcodes.py
1446 1446
    _PDiskParams,
1447 1447
    _PHvState,
1448 1448
    _PDiskState,
1449
    ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"),
1449 1450
    ]
1450 1451
  OP_RESULT = _TSetParamsResult
1451 1452

  

Also available in: Unified diff