Revision c121d42f lib/client/gnt_cluster.py

b/lib/client/gnt_cluster.py
76 76
    return 1
77 77

  
78 78

  
79
def _InitEnabledDiskTemplates(opts):
80
  """Initialize the list of enabled disk templates.
81

  
82
  """
83
  if opts.enabled_disk_templates:
84
    return opts.enabled_disk_templates.split(",")
85
  else:
86
    return constants.DEFAULT_ENABLED_DISK_TEMPLATES
87

  
88

  
89
def _InitVgName(opts, enabled_disk_templates):
90
  """Initialize the volume group name.
91

  
92
  @type enabled_disk_templates: list of strings
93
  @param enabled_disk_templates: cluster-wide enabled disk templates
94

  
95
  """
96
  vg_name = None
97
  if opts.vg_name is not None:
98
    vg_name = opts.vg_name
99
    if vg_name:
100
      if not utils.IsLvmEnabled(enabled_disk_templates):
101
        ToStdout("You specified a volume group with --vg-name, but you did not"
102
                 " enable any disk template that uses lvm.")
103
    elif utils.IsLvmEnabled(enabled_disk_templates):
104
      raise errors.OpPrereqError(
105
          "LVM disk templates are enabled, but vg name not set.")
106
  elif utils.IsLvmEnabled(enabled_disk_templates):
107
    vg_name = constants.DEFAULT_VG
108
  return vg_name
109

  
110

  
111
def _InitDrbdHelper(opts):
112
  """Initialize the DRBD usermode helper.
113

  
114
  """
115
  if not opts.drbd_storage and opts.drbd_helper:
116
    raise errors.OpPrereqError(
117
        "Options --no-drbd-storage and --drbd-usermode-helper conflict.")
118

  
119
  if opts.drbd_storage and not opts.drbd_helper:
120
    return constants.DEFAULT_DRBD_HELPER
121

  
122
  return opts.drbd_helper
123

  
124

  
79 125
@UsesRPC
80 126
def InitCluster(opts, args):
81 127
  """Initialize the cluster.
......
90 136
  """
91 137
  if _CheckNoLvmStorageOptDeprecated(opts):
92 138
    return 1
93
  enabled_disk_templates = opts.enabled_disk_templates
94
  if enabled_disk_templates:
95
    enabled_disk_templates = enabled_disk_templates.split(",")
96
  else:
97
    enabled_disk_templates = constants.DEFAULT_ENABLED_DISK_TEMPLATES
98 139

  
99
  vg_name = None
100
  if opts.vg_name is not None:
101
    vg_name = opts.vg_name
102
    if vg_name:
103
      if not utils.IsLvmEnabled(enabled_disk_templates):
104
        ToStdout("You specified a volume group with --vg-name, but you did not"
105
                 " enable any disk template that uses lvm.")
106
    else:
107
      if utils.IsLvmEnabled(enabled_disk_templates):
108
        ToStderr("LVM disk templates are enabled, but vg name not set.")
109
        return 1
110
  else:
111
    if utils.IsLvmEnabled(enabled_disk_templates):
112
      vg_name = constants.DEFAULT_VG
140
  enabled_disk_templates = _InitEnabledDiskTemplates(opts)
113 141

  
114
  if not opts.drbd_storage and opts.drbd_helper:
115
    ToStderr("Options --no-drbd-storage and --drbd-usermode-helper conflict.")
142
  try:
143
    vg_name = _InitVgName(opts, enabled_disk_templates)
144
    drbd_helper = _InitDrbdHelper(opts)
145
  except errors.OpPrereqError, e:
146
    ToStderr(str(e))
116 147
    return 1
117 148

  
118
  drbd_helper = opts.drbd_helper
119
  if opts.drbd_storage and not opts.drbd_helper:
120
    drbd_helper = constants.DEFAULT_DRBD_HELPER
121

  
122 149
  master_netdev = opts.master_netdev
123 150
  if master_netdev is None:
124 151
    nic_mode = opts.nicparams.get(constants.NIC_MODE, None)
......
971 998
                      opts.force)
972 999

  
973 1000

  
1001
def _GetEnabledDiskTemplates(opts):
1002
  """Determine the list of enabled disk templates.
1003

  
1004
  """
1005
  if opts.enabled_disk_templates:
1006
    return opts.enabled_disk_templates.split(",")
1007
  else:
1008
    return None
1009

  
1010

  
1011
def _GetVgName(opts, enabled_disk_templates):
1012
  """Determine the volume group name.
1013

  
1014
  @type enabled_disk_templates: list of strings
1015
  @param enabled_disk_templates: cluster-wide enabled disk-templates
1016

  
1017
  """
1018
  # consistency between vg name and enabled disk templates
1019
  vg_name = None
1020
  if opts.vg_name is not None:
1021
    vg_name = opts.vg_name
1022
  if enabled_disk_templates:
1023
    if vg_name and not utils.IsLvmEnabled(enabled_disk_templates):
1024
      ToStdout("You specified a volume group with --vg-name, but you did not"
1025
               " enable any of the following lvm-based disk templates: %s" %
1026
               utils.CommaJoin(utils.GetLvmDiskTemplates()))
1027
  return vg_name
1028

  
1029

  
1030
def _GetDrbdHelper(opts):
1031
  """Determine the DRBD usermode helper.
1032

  
1033
  """
1034
  drbd_helper = opts.drbd_helper
1035
  if not opts.drbd_storage and opts.drbd_helper:
1036
    raise errors.OpPrereqError(
1037
        "Options --no-drbd-storage and --drbd-usermode-helper conflict.")
1038

  
1039
  if not opts.drbd_storage:
1040
    drbd_helper = ""
1041
  return drbd_helper
1042

  
1043

  
974 1044
def SetClusterParams(opts, args):
975 1045
  """Modify the cluster.
976 1046

  
......
1012 1082
  if _CheckNoLvmStorageOptDeprecated(opts):
1013 1083
    return 1
1014 1084

  
1015
  enabled_disk_templates = None
1016
  if opts.enabled_disk_templates:
1017
    enabled_disk_templates = opts.enabled_disk_templates.split(",")
1018

  
1019
  # consistency between vg name and enabled disk templates
1020
  vg_name = None
1021
  if opts.vg_name is not None:
1022
    vg_name = opts.vg_name
1023
  if enabled_disk_templates:
1024
    if vg_name and not utils.IsLvmEnabled(enabled_disk_templates):
1025
      ToStdout("You specified a volume group with --vg-name, but you did not"
1026
               " enable any of the following lvm-based disk templates: %s" %
1027
               utils.CommaJoin(utils.GetLvmDiskTemplates()))
1085
  enabled_disk_templates = _GetEnabledDiskTemplates(opts)
1086
  vg_name = _GetVgName(opts, enabled_disk_templates)
1028 1087

  
1029
  drbd_helper = opts.drbd_helper
1030
  if not opts.drbd_storage and opts.drbd_helper:
1031
    ToStderr("Options --no-drbd-storage and --drbd-usermode-helper conflict.")
1088
  try:
1089
    drbd_helper = _GetDrbdHelper(opts)
1090
  except errors.OpPrereqError, e:
1091
    ToStderr(str(e))
1032 1092
    return 1
1033 1093

  
1034
  if not opts.drbd_storage:
1035
    drbd_helper = ""
1036

  
1037 1094
  hvlist = opts.enabled_hypervisors
1038 1095
  if hvlist is not None:
1039 1096
    hvlist = hvlist.split(",")

Also available in: Unified diff