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