From 703fa9ab473a15c68f0d11cb9bdf07f359e0c59b Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Mon, 14 May 2012 16:39:57 +0200 Subject: [PATCH] Move some ipolicy functions from objects to cli These are only used in CLI programs to parse command line options and such they do not belong in object.py (I will change them more and I don't want to add more code in objects.py). Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/cli.py | 74 +++++++++++++++++++++++++++++++++++++++ lib/client/gnt_cluster.py | 4 +-- lib/client/gnt_group.py | 17 +++++---- lib/objects.py | 71 ------------------------------------- 4 files changed, 84 insertions(+), 82 deletions(-) diff --git a/lib/cli.py b/lib/cli.py index 2d292ec6b..1a3926aa7 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -43,6 +43,7 @@ from ganeti import ssh from ganeti import compat from ganeti import netutils from ganeti import qlang +from ganeti import objects from optparse import (OptionParser, TitledHelpFormatter, Option, OptionValueError) @@ -201,6 +202,7 @@ __all__ = [ "INSTANCE_POLICY_OPTS", # Generic functions for CLI programs "ConfirmOperation", + "CreateIPolicyFromOpts", "GenericMain", "GenericInstanceCreate", "GenericList", @@ -285,6 +287,19 @@ _PRIONAME_TO_VALUE = dict(_PRIORITY_NAMES) _CHOOSE_BATCH = 25 +# constants used to create InstancePolicy dictionary +TISPECS_GROUP_TYPES = { + constants.ISPECS_MIN: constants.VTYPE_INT, + constants.ISPECS_MAX: constants.VTYPE_INT, + } + +TISPECS_CLUSTER_TYPES = { + constants.ISPECS_MIN: constants.VTYPE_INT, + constants.ISPECS_MAX: constants.VTYPE_INT, + constants.ISPECS_STD: constants.VTYPE_INT, + } + + class _Argument: def __init__(self, min=0, max=None): # pylint: disable=W0622 self.min = min @@ -3393,3 +3408,62 @@ def ConfirmOperation(names, list_type, text, extra=""): choices.pop(1) choice = AskUser(msg + affected, choices) return choice + + +def CreateIPolicyFromOpts(ispecs_mem_size=None, + ispecs_cpu_count=None, + ispecs_disk_count=None, + ispecs_disk_size=None, + ispecs_nic_count=None, + ipolicy_disk_templates=None, + ipolicy_vcpu_ratio=None, + group_ipolicy=False, + allowed_values=None, + fill_all=False): + """Creation of instance policy based on command line options. + + @param fill_all: whether for cluster policies we should ensure that + all values are filled + + + """ + # prepare ipolicy dict + ipolicy_transposed = { + constants.ISPEC_MEM_SIZE: ispecs_mem_size, + constants.ISPEC_CPU_COUNT: ispecs_cpu_count, + constants.ISPEC_DISK_COUNT: ispecs_disk_count, + constants.ISPEC_DISK_SIZE: ispecs_disk_size, + constants.ISPEC_NIC_COUNT: ispecs_nic_count, + } + + # first, check that the values given are correct + if group_ipolicy: + forced_type = TISPECS_GROUP_TYPES + else: + forced_type = TISPECS_CLUSTER_TYPES + + for specs in ipolicy_transposed.values(): + utils.ForceDictType(specs, forced_type, allowed_values=allowed_values) + + # then transpose + ipolicy_out = objects.MakeEmptyIPolicy() + for name, specs in ipolicy_transposed.iteritems(): + assert name in constants.ISPECS_PARAMETERS + for key, val in specs.items(): # {min: .. ,max: .., std: ..} + ipolicy_out[key][name] = val + + # no filldict for non-dicts + if not group_ipolicy and fill_all: + if ipolicy_disk_templates is None: + ipolicy_disk_templates = constants.DISK_TEMPLATES + if ipolicy_vcpu_ratio is None: + ipolicy_vcpu_ratio = \ + constants.IPOLICY_DEFAULTS[constants.IPOLICY_VCPU_RATIO] + if ipolicy_disk_templates is not None: + ipolicy_out[constants.IPOLICY_DTS] = list(ipolicy_disk_templates) + if ipolicy_vcpu_ratio is not None: + ipolicy_out[constants.IPOLICY_VCPU_RATIO] = ipolicy_vcpu_ratio + + assert not (frozenset(ipolicy_out.keys()) - constants.IPOLICY_ALL_KEYS) + + return ipolicy_out diff --git a/lib/client/gnt_cluster.py b/lib/client/gnt_cluster.py index d821af5ae..6866b6728 100644 --- a/lib/client/gnt_cluster.py +++ b/lib/client/gnt_cluster.py @@ -143,7 +143,7 @@ def InitCluster(opts, args): utils.ForceDictType(diskparams[templ], constants.DISK_DT_TYPES) # prepare ipolicy dict - ipolicy_raw = objects.CreateIPolicyFromOpts( + ipolicy_raw = CreateIPolicyFromOpts( ispecs_mem_size=opts.ispecs_mem_size, ispecs_cpu_count=opts.ispecs_cpu_count, ispecs_disk_count=opts.ispecs_disk_count, @@ -1002,7 +1002,7 @@ def SetClusterParams(opts, args): if ndparams is not None: utils.ForceDictType(ndparams, constants.NDS_PARAMETER_TYPES) - ipolicy = objects.CreateIPolicyFromOpts( + ipolicy = CreateIPolicyFromOpts( ispecs_mem_size=opts.ispecs_mem_size, ispecs_cpu_count=opts.ispecs_cpu_count, ispecs_disk_count=opts.ispecs_disk_count, diff --git a/lib/client/gnt_group.py b/lib/client/gnt_group.py index 0e9284810..3937db902 100644 --- a/lib/client/gnt_group.py +++ b/lib/client/gnt_group.py @@ -26,7 +26,6 @@ from ganeti.cli import * from ganeti import constants -from ganeti import objects from ganeti import opcodes from ganeti import utils from cStringIO import StringIO @@ -49,13 +48,13 @@ def AddGroup(opts, args): @return: the desired exit code """ - ipolicy = \ - objects.CreateIPolicyFromOpts(ispecs_mem_size=opts.ispecs_mem_size, - ispecs_cpu_count=opts.ispecs_cpu_count, - ispecs_disk_count=opts.ispecs_disk_count, - ispecs_disk_size=opts.ispecs_disk_size, - ispecs_nic_count=opts.ispecs_nic_count, - group_ipolicy=True) + ipolicy = CreateIPolicyFromOpts( + ispecs_mem_size=opts.ispecs_mem_size, + ispecs_cpu_count=opts.ispecs_cpu_count, + ispecs_disk_count=opts.ispecs_disk_count, + ispecs_disk_size=opts.ispecs_disk_size, + ispecs_nic_count=opts.ispecs_nic_count, + group_ipolicy=True) (group_name,) = args diskparams = dict(opts.diskparams) @@ -185,7 +184,7 @@ def SetGroupParams(opts, args): if ispec[param].lower() == "default": ispec[param] = constants.VALUE_DEFAULT # create ipolicy object - ipolicy = objects.CreateIPolicyFromOpts(\ + ipolicy = CreateIPolicyFromOpts( ispecs_mem_size=opts.ispecs_mem_size, ispecs_cpu_count=opts.ispecs_cpu_count, ispecs_disk_count=opts.ispecs_disk_count, diff --git a/lib/objects.py b/lib/objects.py index 9b086ded9..5ba4a1bc3 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -55,18 +55,6 @@ __all__ = ["ConfigObject", "ConfigData", "NIC", "Disk", "Instance", _TIMESTAMPS = ["ctime", "mtime"] _UUID = ["uuid"] -# constants used to create InstancePolicy dictionary -TISPECS_GROUP_TYPES = { - constants.ISPECS_MIN: constants.VTYPE_INT, - constants.ISPECS_MAX: constants.VTYPE_INT, - } - -TISPECS_CLUSTER_TYPES = { - constants.ISPECS_MIN: constants.VTYPE_INT, - constants.ISPECS_MAX: constants.VTYPE_INT, - constants.ISPECS_STD: constants.VTYPE_INT, - } - def FillDict(defaults_dict, custom_dict, skip_keys=None): """Basic function to apply settings on top a default dict. @@ -199,65 +187,6 @@ def MakeEmptyIPolicy(): ]) -def CreateIPolicyFromOpts(ispecs_mem_size=None, - ispecs_cpu_count=None, - ispecs_disk_count=None, - ispecs_disk_size=None, - ispecs_nic_count=None, - ipolicy_disk_templates=None, - ipolicy_vcpu_ratio=None, - group_ipolicy=False, - allowed_values=None, - fill_all=False): - """Creation of instance policy based on command line options. - - @param fill_all: whether for cluster policies we should ensure that - all values are filled - - - """ - # prepare ipolicy dict - ipolicy_transposed = { - constants.ISPEC_MEM_SIZE: ispecs_mem_size, - constants.ISPEC_CPU_COUNT: ispecs_cpu_count, - constants.ISPEC_DISK_COUNT: ispecs_disk_count, - constants.ISPEC_DISK_SIZE: ispecs_disk_size, - constants.ISPEC_NIC_COUNT: ispecs_nic_count, - } - - # first, check that the values given are correct - if group_ipolicy: - forced_type = TISPECS_GROUP_TYPES - else: - forced_type = TISPECS_CLUSTER_TYPES - - for specs in ipolicy_transposed.values(): - utils.ForceDictType(specs, forced_type, allowed_values=allowed_values) - - # then transpose - ipolicy_out = MakeEmptyIPolicy() - for name, specs in ipolicy_transposed.iteritems(): - assert name in constants.ISPECS_PARAMETERS - for key, val in specs.items(): # {min: .. ,max: .., std: ..} - ipolicy_out[key][name] = val - - # no filldict for non-dicts - if not group_ipolicy and fill_all: - if ipolicy_disk_templates is None: - ipolicy_disk_templates = constants.DISK_TEMPLATES - if ipolicy_vcpu_ratio is None: - ipolicy_vcpu_ratio = \ - constants.IPOLICY_DEFAULTS[constants.IPOLICY_VCPU_RATIO] - if ipolicy_disk_templates is not None: - ipolicy_out[constants.IPOLICY_DTS] = list(ipolicy_disk_templates) - if ipolicy_vcpu_ratio is not None: - ipolicy_out[constants.IPOLICY_VCPU_RATIO] = ipolicy_vcpu_ratio - - assert not (frozenset(ipolicy_out.keys()) - constants.IPOLICY_ALL_KEYS) - - return ipolicy_out - - class ConfigObject(object): """A generic config object. -- GitLab