Revision d2d3935a lib/cli.py
b/lib/cli.py | ||
---|---|---|
188 | 188 |
"SPECS_DISK_SIZE_OPT", |
189 | 189 |
"SPECS_MEM_SIZE_OPT", |
190 | 190 |
"SPECS_NIC_COUNT_OPT", |
191 |
"IPOLICY_STD_SPECS_OPT", |
|
191 | 192 |
"IPOLICY_DISK_TEMPLATES", |
192 | 193 |
"IPOLICY_VCPU_RATIO", |
193 | 194 |
"SPICE_CACERT_OPT", |
... | ... | |
957 | 958 |
help="NIC count specs: list of key=value," |
958 | 959 |
" where key is one of min, max, std") |
959 | 960 |
|
961 |
IPOLICY_BOUNDS_SPECS_STR = "--ipolicy-bounds-specs" |
|
962 |
IPOLICY_BOUNDS_SPECS_OPT = cli_option(IPOLICY_BOUNDS_SPECS_STR, |
|
963 |
dest="ipolicy_bounds_specs", |
|
964 |
type="listidentkeyval", default=None, |
|
965 |
help="Complete instance specs limits") |
|
966 |
|
|
967 |
IPOLICY_STD_SPECS_STR = "--ipolicy-std-specs" |
|
968 |
IPOLICY_STD_SPECS_OPT = cli_option(IPOLICY_STD_SPECS_STR, |
|
969 |
dest="ipolicy_std_specs", |
|
970 |
type="keyval", default=None, |
|
971 |
help="Complte standard instance specs") |
|
972 |
|
|
960 | 973 |
IPOLICY_DISK_TEMPLATES = cli_option("--ipolicy-disk-templates", |
961 | 974 |
dest="ipolicy_disk_templates", |
962 | 975 |
type="list", default=None, |
... | ... | |
1643 | 1656 |
SPECS_DISK_SIZE_OPT, |
1644 | 1657 |
SPECS_MEM_SIZE_OPT, |
1645 | 1658 |
SPECS_NIC_COUNT_OPT, |
1659 |
IPOLICY_BOUNDS_SPECS_OPT, |
|
1646 | 1660 |
IPOLICY_DISK_TEMPLATES, |
1647 | 1661 |
IPOLICY_VCPU_RATIO, |
1648 | 1662 |
IPOLICY_SPINDLE_RATIO, |
... | ... | |
3789 | 3803 |
return parsed |
3790 | 3804 |
|
3791 | 3805 |
|
3792 |
def _InitIspecsFromOpts(ipolicy, ispecs_mem_size, ispecs_cpu_count,
|
|
3793 |
ispecs_disk_count, ispecs_disk_size, ispecs_nic_count,
|
|
3794 |
group_ipolicy, allowed_values): |
|
3806 |
def _InitISpecsFromSplitOpts(ipolicy, ispecs_mem_size, ispecs_cpu_count,
|
|
3807 |
ispecs_disk_count, ispecs_disk_size,
|
|
3808 |
ispecs_nic_count, group_ipolicy, allowed_values):
|
|
3795 | 3809 |
try: |
3796 | 3810 |
if ispecs_mem_size: |
3797 | 3811 |
ispecs_mem_size = _MaybeParseUnit(ispecs_mem_size) |
... | ... | |
3818 | 3832 |
else: |
3819 | 3833 |
forced_type = TISPECS_CLUSTER_TYPES |
3820 | 3834 |
for specs in ispecs_transposed.values(): |
3835 |
assert type(specs) is dict |
|
3821 | 3836 |
utils.ForceDictType(specs, forced_type, allowed_values=allowed_values) |
3822 | 3837 |
|
3823 | 3838 |
# then transpose |
... | ... | |
3836 | 3851 |
ipolicy[constants.ISPECS_STD] = ispecs[constants.ISPECS_STD] |
3837 | 3852 |
|
3838 | 3853 |
|
3854 |
def _ParseSpecUnit(spec, keyname): |
|
3855 |
ret = spec.copy() |
|
3856 |
for k in [constants.ISPEC_DISK_SIZE, constants.ISPEC_MEM_SIZE]: |
|
3857 |
if k in ret and ret[k] != constants.VALUE_DEFAULT: |
|
3858 |
try: |
|
3859 |
ret[k] = utils.ParseUnit(ret[k]) |
|
3860 |
except (TypeError, ValueError, errors.UnitParseError), err: |
|
3861 |
raise errors.OpPrereqError(("Invalid parameter %s (%s) in %s instance" |
|
3862 |
" specs: %s" % (k, ret[k], keyname, err)), |
|
3863 |
errors.ECODE_INVAL) |
|
3864 |
return ret |
|
3865 |
|
|
3866 |
|
|
3867 |
def _ParseISpec(spec, keyname, allowed_values): |
|
3868 |
ret = _ParseSpecUnit(spec, keyname) |
|
3869 |
utils.ForceDictType(ret, constants.ISPECS_PARAMETER_TYPES, |
|
3870 |
allowed_values=allowed_values) |
|
3871 |
return ret |
|
3872 |
|
|
3873 |
|
|
3874 |
def _InitISpecsFromFullOpts(ipolicy_out, minmax_ispecs, std_ispecs, |
|
3875 |
group_ipolicy, allowed_values): |
|
3876 |
if minmax_ispecs is not None: |
|
3877 |
minmax_out = {} |
|
3878 |
for (key, spec) in minmax_ispecs.items(): |
|
3879 |
if key not in constants.ISPECS_MINMAX_KEYS: |
|
3880 |
msg = "Invalid key in bounds instance specifications: %s" % key |
|
3881 |
raise errors.OpPrereqError(msg, errors.ECODE_INVAL) |
|
3882 |
minmax_out[key] = _ParseISpec(spec, key, allowed_values) |
|
3883 |
ipolicy_out[constants.ISPECS_MINMAX] = minmax_out |
|
3884 |
if std_ispecs is not None: |
|
3885 |
assert not group_ipolicy # This is not an option for gnt-group |
|
3886 |
ipolicy_out[constants.ISPECS_STD] = _ParseISpec(std_ispecs, "std", |
|
3887 |
allowed_values) |
|
3888 |
|
|
3889 |
|
|
3839 | 3890 |
def CreateIPolicyFromOpts(ispecs_mem_size=None, |
3840 | 3891 |
ispecs_cpu_count=None, |
3841 | 3892 |
ispecs_disk_count=None, |
3842 | 3893 |
ispecs_disk_size=None, |
3843 | 3894 |
ispecs_nic_count=None, |
3895 |
minmax_ispecs=None, |
|
3896 |
std_ispecs=None, |
|
3844 | 3897 |
ipolicy_disk_templates=None, |
3845 | 3898 |
ipolicy_vcpu_ratio=None, |
3846 | 3899 |
ipolicy_spindle_ratio=None, |
... | ... | |
3854 | 3907 |
|
3855 | 3908 |
|
3856 | 3909 |
""" |
3910 |
if ((ispecs_mem_size or ispecs_cpu_count or ispecs_disk_count or |
|
3911 |
ispecs_disk_size or ispecs_nic_count) and |
|
3912 |
(minmax_ispecs is not None or std_ispecs is not None)): |
|
3913 |
raise errors.OpPrereqError("A --specs-xxx option cannot be specified" |
|
3914 |
" together with any --ipolicy-xxx-specs option", |
|
3915 |
errors.ECODE_INVAL) |
|
3857 | 3916 |
|
3858 | 3917 |
ipolicy_out = objects.MakeEmptyIPolicy() |
3859 |
_InitIspecsFromOpts(ipolicy_out, ispecs_mem_size, ispecs_cpu_count, |
|
3860 |
ispecs_disk_count, ispecs_disk_size, ispecs_nic_count, |
|
3861 |
group_ipolicy, allowed_values) |
|
3918 |
if minmax_ispecs is None and std_ispecs is None: |
|
3919 |
_InitISpecsFromSplitOpts(ipolicy_out, ispecs_mem_size, ispecs_cpu_count, |
|
3920 |
ispecs_disk_count, ispecs_disk_size, |
|
3921 |
ispecs_nic_count, group_ipolicy, allowed_values) |
|
3922 |
else: |
|
3923 |
_InitISpecsFromFullOpts(ipolicy_out, minmax_ispecs, std_ispecs, |
|
3924 |
group_ipolicy, allowed_values) |
|
3862 | 3925 |
|
3863 | 3926 |
if ipolicy_disk_templates is not None: |
3864 | 3927 |
if allowed_values and ipolicy_disk_templates in allowed_values: |
Also available in: Unified diff