Revision 6488e5bc lib/cmdlib/common.py

b/lib/cmdlib/common.py
1142 1142
  @raise errors.OpPrereqError: if the check fails.
1143 1143

  
1144 1144
  """
1145
  if constants.DT_RBD in parameters:
1146
    access = parameters[constants.DT_RBD].get(constants.RBD_ACCESS,
1147
                                              constants.DISK_KERNELSPACE)
1145
  for disk_template in parameters:
1146
    access = parameters[disk_template].get(constants.LDP_ACCESS,
1147
                                           constants.DISK_KERNELSPACE)
1148 1148
    if access not in constants.DISK_VALID_ACCESS_MODES:
1149 1149
      valid_vals_str = utils.CommaJoin(constants.DISK_VALID_ACCESS_MODES)
1150 1150
      raise errors.OpPrereqError("Invalid value of '{d}:{a}': '{v}' (expected"
1151
                                 " one of {o})".format(d=constants.DT_RBD,
1152
                                                       a=constants.RBD_ACCESS,
1151
                                 " one of {o})".format(d=disk_template,
1152
                                                       a=constants.LDP_ACCESS,
1153 1153
                                                       v=access,
1154 1154
                                                       o=valid_vals_str))
1155 1155

  
......
1170 1170
  """
1171 1171
  CheckDiskAccessModeValidity(parameters)
1172 1172

  
1173
  if constants.DT_RBD in parameters:
1174
    access = parameters[constants.DT_RBD].get(constants.RBD_ACCESS,
1175
                                              constants.DISK_KERNELSPACE)
1173
  for disk_template in parameters:
1174
    access = parameters[disk_template].get(constants.LDP_ACCESS,
1175
                                           constants.DISK_KERNELSPACE)
1176

  
1177
    if dt not in constants.DTS_HAVE_ACCESS
1178
      continue
1176 1179

  
1177 1180
    #Check the combination of instance hypervisor, disk template and access
1178 1181
    #protocol is sane.
......
1180 1183
                 cfg.GetInstanceList()
1181 1184

  
1182 1185
    for entry in inst_uuids:
1183
      #hyp, disk, access
1184 1186
      inst = cfg.GetInstanceInfo(entry)
1185 1187
      hv = inst.hypervisor
1186 1188
      dt = inst.disk_template
1187 1189

  
1188
      #do not check for disk types that don't have this setting.
1189
      if dt != constants.DT_RBD:
1190
        continue
1191

  
1192 1190
      if not IsValidDiskAccessModeCombination(hv, dt, access):
1193 1191
        raise errors.OpPrereqError("Instance {i}: cannot use '{a}' access"
1194 1192
                                   " setting with {h} hypervisor and {d} disk"
......
1212 1210
    return True
1213 1211

  
1214 1212
  if (hv == constants.HT_KVM and
1215
      disk_template == constants.DT_RBD and
1213
      disk_template in (constants.DT_RBD, constants.DT_GLUSTER) and
1216 1214
      mode == constants.DISK_USERSPACE):
1217 1215
    return True
1218 1216

  

Also available in: Unified diff