This commit removes the support for accessing the recipe dictionary
using the $recipe template variable.
These are implementation details and we should not allow users to
access them directly.
Additionally, we will do a major refactoring of the NetTestController
class in the near future and this variable might even no longer exist
after that.
Signed-off-by: Radek Pazdera <rpazdera(a)redhat.com>
---
lnst/Common/XmlProcessing.py | 1 +
lnst/Common/XmlTemplates.py | 52 +++++++++++++---------------------
lnst/Controller/NetTestController.py | 13 ++++----
lnst/Controller/NetTestParse.py | 5 ---
4 files changed, 28 insertions(+), 43 deletions(-)
diff --git a/lnst/Common/XmlProcessing.py b/lnst/Common/XmlProcessing.py
index 839495d..80e9aca 100644
--- a/lnst/Common/XmlProcessing.py
+++ b/lnst/Common/XmlProcessing.py
@@ -237,6 +237,7 @@ class RecipeParser(XmlParser):
def set_recipe(self, recipe):
self._recipe = recipe
+ self._template_proc.set_machines(recipe["machines"])
def set_definitions(self, defs):
self._template_proc.set_definitions(defs)
diff --git a/lnst/Common/XmlTemplates.py b/lnst/Common/XmlTemplates.py
index 8f0d6e3..218031d 100644
--- a/lnst/Common/XmlTemplates.py
+++ b/lnst/Common/XmlTemplates.py
@@ -29,7 +29,7 @@ class XmlTemplateError(Exception):
class XmlTemplates:
""" This class serves as template processor """
- _alias_re = "\{\$([a-zA-Z0-9_]+)(\[[^{}]+\])?\}"
+ _alias_re = "\{\$([a-zA-Z0-9_]+)\}"
_func_re = "\{([a-zA-Z0-9_]+)\(([^\(\)]*)\)\}"
def __init__(self, definitions=None):
@@ -38,7 +38,8 @@ class XmlTemplates:
else:
self._definitions = [{}]
- self._reserved_aliases = ["recipe"]
+ self._machines = {}
+ self._reserved_aliases = []
def set_definitions(self, defs):
""" Set alias definitions
@@ -63,6 +64,14 @@ class XmlTemplates:
return defs
+ def set_machines(self, machines):
+ """ Assign machine information
+
+ XmlTemplates use these information about the machines
+ to resolve template functions within the recipe.
+ """
+ self._machines = machines
+
def define_alias(self, name, value, skip_reserved_check=False):
""" Associate an alias name with some value
@@ -163,20 +172,8 @@ class XmlTemplates:
alias_match = re.match(self._alias_re, string)
if alias_match:
alias_name = alias_match.group(1)
- array_subscript = alias_match.group(2)
-
alias_obj = self._find_definition(alias_name)
- if array_subscript != None:
- try:
- result = str(eval("alias_obj%s" % array_subscript))
- except (KeyError, IndexError):
- err = "Wrong array subscript in '%s%s'" \
- % (alias_name, array_subscript)
- raise XmlTemplateError(err)
- else:
- result = alias_obj
-
return result
def _process_func_template(self, string):
@@ -217,17 +214,17 @@ class XmlTemplates:
def _ip_func(self, params):
self._validate_func_params("ip", params, 2, 1)
- recipe = self._get_recipe_data("ip")
+ machines = self._machines
m_id = params[0]
if_id = params[1]
ip_id = int(params[2]) if len(params) == 3 else 0
- if 'machines' not in recipe or m_id not in recipe['machines']:
+ if m_id not in machines:
msg = "First parameter of function ip() is invalid: "\
"Machine %s does not exist." % m_id
raise XmlTemplateError(msg)
- machine = recipe["machines"][m_id]
+ machine = machines[m_id]
if if_id not in machine['netconfig']:
@@ -245,15 +242,15 @@ class XmlTemplates:
def _hwaddr_func(self, params):
self._validate_func_params("hwaddr", params, 2, 0)
- recipe = self._get_recipe_data("hwaddr")
+ machines = self._machines
m_id = params[0]
if_id = params[1]
- if 'machines' not in recipe or m_id not in recipe['machines']:
+ if m_id not in machines:
msg = "First parameter of function hwaddr() is invalid: "\
"Machine %s does not exist." % m_id
raise XmlTemplateError(msg)
- machine = recipe["machines"][m_id]
+ machine = machines[m_id]
if if_id not in machine['netconfig']:
msg = "Second parameter of function hwaddr() is invalid: "\
@@ -266,15 +263,15 @@ class XmlTemplates:
def _devname_func(self, params):
self._validate_func_params("devname", params, 2, 0)
- recipe = self._get_recipe_data("devname")
+ machines = self._machines
m_id = params[0]
if_id = params[1]
- if 'machines' not in recipe or m_id not in recipe['machines']:
+ if m_id not in machines:
msg = "First parameter of function devname() is invalid: "\
"Machine %s does not exist." % m_id
raise XmlTemplateError(msg)
- machine = recipe["machines"][m_id]
+ machine = machine[m_id]
if if_id not in machine['netconfig']:
msg = "Second parameter of function devname() is invalid: "\
@@ -301,12 +298,3 @@ class XmlTemplates:
except ValueError:
err = "Non-integer parameter passed to '%s'" % name
raise XmlTemplateError(err)
-
- def _get_recipe_data(self, template_name):
- try:
- recipe = self._find_definition("recipe")
- return recipe
- except XmlTemplateError as err:
- msg = "Cannot resolve %s(): " % template_name
- msg += str(err)
- raise XmlTemplateError(msg)
diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py
index d686475..80a132d 100644
--- a/lnst/Controller/NetTestController.py
+++ b/lnst/Controller/NetTestController.py
@@ -51,10 +51,11 @@ class NetTestController:
check_process_running("libvirtd"))
self._slave_pool = sp
- self._recipe = {}
- definitions = {"recipe": self._recipe}
-
- self._recipe["networks"] = {}
+ self._recipe = recipe = {}
+ recipe["networks"] = {}
+ recipe["machines"] = {}
+ recipe["provisioning"] = {}
+ recipe["switches"] = {}
mac_pool_range = config.get_option('environment',
'mac_pool_range')
self._mac_pool = MacPool(mac_pool_range[0],
@@ -62,7 +63,6 @@ class NetTestController:
ntparse = NetTestParse(recipe_path)
ntparse.set_recipe(self._recipe)
- ntparse.set_definitions(definitions)
ntparse.register_event_handler("provisioning_requirements_ready",
self._prepare_provisioning)
@@ -115,7 +115,8 @@ class NetTestController:
msg = "This setup cannot be provisioned with the current pool."
raise NetTestError(msg)
- self._recipe["machines"] = machines
+ for m_id, machine in machines.iteritems():
+ self._recipe["machines"][m_id] = machine
provisioning["map"] = {}
logging.info("Provisioning initialized")
diff --git a/lnst/Controller/NetTestParse.py b/lnst/Controller/NetTestParse.py
index 39d23bd..257fe77 100644
--- a/lnst/Controller/NetTestParse.py
+++ b/lnst/Controller/NetTestParse.py
@@ -28,9 +28,6 @@ class NetTestParse(RecipeParser):
self._rp = RecipePath(None, self._filepath)
self._include_root = self._rp.get_root()
- self._recipe = {}
- self._template_proc.set_definitions({"recipe": self._recipe})
-
def parse_recipe(self):
dom_init = XmlDomTreeInit()
rp = self._rp
@@ -58,7 +55,6 @@ class FirstPass(RecipeParser):
"""
def parse(self, node):
- self._recipe["provisioning"] = {}
self._recipe["provisioning"]["setup_requirements"] = {}
if node.nodeType == node.DOCUMENT_NODE:
@@ -132,7 +128,6 @@ class SecondPass(RecipeParser):
subparser.parse(node)
def _switches(self, node, params):
- self._recipe["switches"] = {}
scheme = {"switch": self._switch}
self._process_child_nodes(node, scheme)
--
1.7.7.6