Revision 32017174

b/lib/cli.py
166 166
  "SHOWCMD_OPT",
167 167
  "SHUTDOWN_TIMEOUT_OPT",
168 168
  "SINGLE_NODE_OPT",
169
  "SPECS_CPU_COUNT_OPT",
170
  "SPECS_DISK_COUNT_OPT",
171
  "SPECS_DISK_SIZE_OPT",
172
  "SPECS_MEM_SIZE_OPT",
173
  "SPECS_NIC_COUNT_OPT",
169 174
  "SPICE_CACERT_OPT",
170 175
  "SPICE_CERT_OPT",
171 176
  "SRC_DIR_OPT",
......
760 765
                             " template:option=value,option=value,...",
761 766
                             type="identkeyval", action="append", default=[])
762 767

  
768
SPECS_MEM_SIZE_OPT = cli_option("--specs-mem-size", dest="ispecs_mem_size",
769
                                 type="keyval", default={},
770
                                 help="Memory count specs: min, max, std"
771
                                 " (in MB)")
772

  
773
SPECS_CPU_COUNT_OPT = cli_option("--specs-cpu-count", dest="ispecs_cpu_count",
774
                                 type="keyval", default={},
775
                                 help="CPU count specs: min, max, std")
776

  
777
SPECS_DISK_COUNT_OPT = cli_option("--specs-disk-count",
778
                                  dest="ispecs_disk_count",
779
                                  type="keyval", default={},
780
                                  help="Disk count specs: min, max, std")
781

  
782
SPECS_DISK_SIZE_OPT = cli_option("--specs-disk-size", dest="ispecs_disk_size",
783
                                 type="keyval", default={},
784
                                 help="Disk size specs: min, max, std (in MB)")
785

  
786
SPECS_NIC_COUNT_OPT = cli_option("--specs-nic-count", dest="ispecs_nic_count",
787
                                 type="keyval", default={},
788
                                 help="NIC count specs: min, max, std")
789

  
763 790
HYPERVISOR_OPT = cli_option("-H", "--hypervisor-parameters", dest="hypervisor",
764 791
                            help="Hypervisor and hypervisor options, in the"
765 792
                            " format hypervisor:option=value,option=value,...",
b/lib/client/gnt_cluster.py
1403 1403
  else:
1404 1404
    return _EpoOff(opts, node_list, inst_map)
1405 1405

  
1406
INSTANCE_POLICY_OPTS = [
1407
  SPECS_CPU_COUNT_OPT,
1408
  SPECS_DISK_COUNT_OPT,
1409
  SPECS_DISK_SIZE_OPT,
1410
  SPECS_MEM_SIZE_OPT,
1411
  SPECS_NIC_COUNT_OPT,
1412
  ]
1406 1413

  
1407 1414
commands = {
1408 1415
  "init": (
......
1414 1421
     MAINTAIN_NODE_HEALTH_OPT, UIDPOOL_OPT, DRBD_HELPER_OPT, NODRBD_STORAGE_OPT,
1415 1422
     DEFAULT_IALLOCATOR_OPT, PRIMARY_IP_VERSION_OPT, PREALLOC_WIPE_DISKS_OPT,
1416 1423
     NODE_PARAMS_OPT, GLOBAL_SHARED_FILEDIR_OPT, USE_EXTERNAL_MIP_SCRIPT,
1417
     DISK_PARAMS_OPT],
1424
     DISK_PARAMS_OPT] + INSTANCE_POLICY_OPTS,
1418 1425
    "[opts...] <cluster_name>", "Initialises a new cluster configuration"),
1419 1426
  "destroy": (
1420 1427
    DestroyCluster, ARGS_NONE, [YES_DOIT_OPT],
......
1492 1499
     DRBD_HELPER_OPT, NODRBD_STORAGE_OPT, DEFAULT_IALLOCATOR_OPT,
1493 1500
     RESERVED_LVS_OPT, DRY_RUN_OPT, PRIORITY_OPT, PREALLOC_WIPE_DISKS_OPT,
1494 1501
     NODE_PARAMS_OPT, USE_EXTERNAL_MIP_SCRIPT, DISK_PARAMS_OPT, HV_STATE_OPT,
1495
     DISK_STATE_OPT],
1502
     DISK_STATE_OPT] +
1503
    INSTANCE_POLICY_OPTS,
1496 1504
    "[opts...]",
1497 1505
    "Alters the parameters of the cluster"),
1498 1506
  "renew-crypto": (
b/lib/objects.py
44 44
from ganeti import errors
45 45
from ganeti import constants
46 46
from ganeti import netutils
47
from ganeti import utils
47 48

  
48 49
from socket import AF_INET
49 50

  
......
54 55
_TIMESTAMPS = ["ctime", "mtime"]
55 56
_UUID = ["uuid"]
56 57

  
58
# constants used to create InstancePolicy dictionary
59
TISPECS_GROUP_TYPES = {
60
  constants.MIN_ISPECS: constants.VTYPE_INT,
61
  constants.MAX_ISPECS: constants.VTYPE_INT,
62
}
63

  
64
TISPECS_CLUSTER_TYPES = {
65
  constants.MIN_ISPECS: constants.VTYPE_INT,
66
  constants.MAX_ISPECS: constants.VTYPE_INT,
67
  constants.STD_ISPECS: constants.VTYPE_INT,
68
  }
69

  
57 70

  
58 71
def FillDict(defaults_dict, custom_dict, skip_keys=None):
59 72
  """Basic function to apply settings on top a default dict.
......
159 172
    ])
160 173

  
161 174

  
175
def CreateIPolicyFromOpts(ispecs_mem_size=None,
176
                          ispecs_cpu_count=None,
177
                          ispecs_disk_count=None,
178
                          ispecs_disk_size=None,
179
                          ispecs_nic_count=None,
180
                          group_ipolicy=False,
181
                          allowed_values=None):
182
  """Creation of instane policy based on command line options.
183

  
184

  
185
  """
186
  # prepare ipolicy dict
187
  ipolicy_transposed = {
188
    constants.MEM_SIZE_SPEC: ispecs_mem_size,
189
    constants.CPU_COUNT_SPEC: ispecs_cpu_count,
190
    constants.DISK_COUNT_SPEC: ispecs_disk_count,
191
    constants.DISK_SIZE_SPEC: ispecs_disk_size,
192
    constants.NIC_COUNT_SPEC: ispecs_nic_count,
193
    }
194

  
195
  # first, check that the values given are correct
196
  if group_ipolicy:
197
    forced_type = TISPECS_GROUP_TYPES
198
  else:
199
    forced_type = TISPECS_CLUSTER_TYPES
200

  
201
  for specs in ipolicy_transposed.values():
202
    utils.ForceDictType(specs, forced_type, allowed_values=allowed_values)
203

  
204
  # then transpose
205
  ipolicy_out = MakeEmptyIPolicy()
206
  for name, specs in ipolicy_transposed.iteritems():
207
    assert name in constants.ISPECS_PARAMETERS
208
    for key, val in specs.items(): # {min: .. ,max: .., std: ..}
209
      ipolicy_out[key][name] = val
210

  
211
  return ipolicy_out
212

  
213

  
162 214
class ConfigObject(object):
163 215
  """A generic config object.
164 216

  

Also available in: Unified diff