Revision 779c15bb lib/cmdlib.py

b/lib/cmdlib.py
1151 1151
    """
1152 1152
    # FIXME: This only works because there is only one parameter that can be
1153 1153
    # changed or removed.
1154
    if not self.op.vg_name:
1154
    if self.op.vg_name is not None and not self.op.vg_name:
1155 1155
      instances = self.cfg.GetAllInstancesInfo().values()
1156 1156
      for inst in instances:
1157 1157
        for disk in inst.disks:
......
1159 1159
            raise errors.OpPrereqError("Cannot disable lvm storage while"
1160 1160
                                       " lvm-based instances exist")
1161 1161

  
1162
    node_list = self.acquired_locks[locking.LEVEL_NODE]
1163

  
1162 1164
    # if vg_name not None, checks given volume group on all nodes
1163 1165
    if self.op.vg_name:
1164
      node_list = self.acquired_locks[locking.LEVEL_NODE]
1165 1166
      vglist = self.rpc.call_vg_list(node_list)
1166 1167
      for node in node_list:
1167 1168
        vgstatus = utils.CheckVolumeGroupSize(vglist[node], self.op.vg_name,
......
1170 1171
          raise errors.OpPrereqError("Error on node '%s': %s" %
1171 1172
                                     (node, vgstatus))
1172 1173

  
1174
    self.cluster = cluster = self.cfg.GetClusterInfo()
1175
    # beparams changes do not need validation (we can't validate?),
1176
    # but we still process here
1177
    if self.op.beparams:
1178
      self.new_beparams = cluster.FillDict(
1179
        cluster.beparams[constants.BEGR_DEFAULT], self.op.beparams)
1180

  
1181
    # hypervisor list/parameters
1182
    self.new_hvparams = cluster.FillDict(cluster.hvparams, {})
1183
    if self.op.hvparams:
1184
      if not isinstance(self.op.hvparams, dict):
1185
        raise errors.OpPrereqError("Invalid 'hvparams' parameter on input")
1186
      for hv_name, hv_dict in self.op.hvparams.items():
1187
        if hv_name not in self.new_hvparams:
1188
          self.new_hvparams[hv_name] = hv_dict
1189
        else:
1190
          self.new_hvparams[hv_name].update(hv_dict)
1191

  
1192
    if self.op.enabled_hypervisors is not None:
1193
      self.hv_list = self.op.enabled_hypervisors
1194
    else:
1195
      self.hv_list = cluster.enabled_hypervisors
1196

  
1197
    if self.op.hvparams or self.op.enabled_hypervisors is not None:
1198
      # either the enabled list has changed, or the parameters have, validate
1199
      for hv_name, hv_params in self.new_hvparams.items():
1200
        if ((self.op.hvparams and hv_name in self.op.hvparams) or
1201
            (self.op.enabled_hypervisors and
1202
             hv_name in self.op.enabled_hypervisors)):
1203
          # either this is a new hypervisor, or its parameters have changed
1204
          hv_class = hypervisor.GetHypervisor(hv_name)
1205
          hv_class.CheckParameterSyntax(hv_params)
1206
          _CheckHVParams(self, node_list, hv_name, hv_params)
1207

  
1173 1208
  def Exec(self, feedback_fn):
1174 1209
    """Change the parameters of the cluster.
1175 1210

  
1176 1211
    """
1177
    if self.op.vg_name != self.cfg.GetVGName():
1178
      self.cfg.SetVGName(self.op.vg_name)
1179
    else:
1180
      feedback_fn("Cluster LVM configuration already in desired"
1181
                  " state, not changing")
1212
    if self.op.vg_name is not None:
1213
      if self.op.vg_name != self.cfg.GetVGName():
1214
        self.cfg.SetVGName(self.op.vg_name)
1215
      else:
1216
        feedback_fn("Cluster LVM configuration already in desired"
1217
                    " state, not changing")
1218
    if self.op.hvparams:
1219
      self.cluster.hvparams = self.new_hvparams
1220
    if self.op.enabled_hypervisors is not None:
1221
      self.cluster.enabled_hypervisors = self.op.enabled_hypervisors
1222
    if self.op.beparams:
1223
      self.cluster.beparams[constants.BEGR_DEFAULT] = self.new_beparams
1224
    self.cfg.Update(self.cluster)
1182 1225

  
1183 1226

  
1184 1227
def _WaitForSync(lu, instance, oneshot=False, unlock=False):

Also available in: Unified diff