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