commit 5daab9280c60ff8a13f0997ac8b72b7f327aadcc
Author: Radek Pazdera <rpazdera(a)redhat.com>
Date: Fri May 3 14:14:02 2013 +0200
XML: Changing the 'interface' tag
This commit removes the <interface> tag from both the recipe and the
slavemachine config files. Now the interface tag's names are based
on their type.
For example an interface with type="bond" will now be represented by
a tag <bond ...>.
A slight cleanup of the slavemachine parser was done along with this
patch.
lnst/Controller/RecipeParse.py | 18 ++++++++--
lnst/Controller/SlaveMachineParse.py | 62 ++++++++-------------------------
2 files changed, 29 insertions(+), 51 deletions(-)
---
diff --git a/lnst/Controller/RecipeParse.py b/lnst/Controller/RecipeParse.py
index fe155cb..8445a0e 100644
--- a/lnst/Controller/RecipeParse.py
+++ b/lnst/Controller/RecipeParse.py
@@ -97,7 +97,12 @@ class FirstPass(LnstParser):
def _interfaces(self, node, params):
params = {"id": params["id"]}
- scheme = {"interface": self._interface}
+ scheme = {"eth": self._interface,
+ "bond": self._interface,
+ "team": self._interface,
+ "vlan": self._interface,
+ "macvlan": self._interface,
+ "bridge": self._interface}
self._process_child_nodes(node, scheme, params)
def _interface(self, node, params):
@@ -105,7 +110,7 @@ class FirstPass(LnstParser):
machine = self._data["machines"][m_id]
if_id = self._get_attribute(node, "id")
- if_type = self._get_attribute(node, "type")
+ if_type = node.tagName
if if_id in machine["interfaces"]:
msg = "Two interfaces with the same id '%s', " % if_id
@@ -205,7 +210,12 @@ class MachineParse(LnstParser):
self._process_child_nodes(node, scheme)
def _interfaces(self, node, params):
- scheme = {"interface": self._interface}
+ scheme = {"eth": self._interface,
+ "bond": self._interface,
+ "team": self._interface,
+ "vlan": self._interface,
+ "macvlan": self._interface,
+ "bridge": self._interface}
self._process_child_nodes(node, scheme)
def _interface(self, node, params):
@@ -232,7 +242,7 @@ class InterfaceParse(LnstParser):
self._machine["interfaces"][if_id] = {}
self._iface = iface = self._machine["interfaces"][if_id]
- iface["type"] = self._get_attribute(node, "type")
+ iface["type"] = node.tagName
scheme = {"addresses": self._addresses}
if iface["type"] in ["bond", "bridge",
"vlan", "macvlan", "team"]:
diff --git a/lnst/Controller/SlaveMachineParse.py b/lnst/Controller/SlaveMachineParse.py
index 20915c4..4be2dc5 100644
--- a/lnst/Controller/SlaveMachineParse.py
+++ b/lnst/Controller/SlaveMachineParse.py
@@ -47,67 +47,35 @@ class SlaveMachineParse(LnstParser):
subparser.parse(node)
def _interfaces(self, node, params):
- scheme = {"interface": self._interface,
- "libvirt_create": self._libvirt_create}
+ scheme = {"eth": self._eth}
- new_params = {"create": None}
- self._process_child_nodes(node, scheme, new_params)
+ try:
+ self._process_child_nodes(node, scheme)
+ except XmlProcessingError as err:
+ msg = "Interface type other than 'eth' is not allowed here.
" \
+ "Other types must be configured in LNST recipes directly."
+ logging.error(msg)
+ raise
- def _libvirt_create(self, node, params):
- scheme = {"interface": self._interface}
-
- new_params = {"create": "libvirt"}
- self._process_child_nodes(node, scheme, new_params)
-
- def _interface(self, node, params):
+ def _eth(self, node, params):
machine = self._machine
iface_id = self._get_attribute(node, "id")
iface = machine["interfaces"][iface_id] = {}
- iface["create"] = params["create"]
iface["network"] = self._get_attribute(node, "network")
iface["params"] = {}
+ iface["type"] = "eth"
# parse interface parameters
scheme = {"params": self._params}
params = {"target": iface["params"]}
self._process_child_nodes(node, scheme, params)
- if "type" not in iface["params"]:
- msg = "Missing required parameter 'type'"
- raise XmlProcessingError(msg, node)
-
- iface["type"] = iface["params"]["type"]
- if iface["type"] not in ["eth"]:
- msg = "Interface type '%s' is not allowed here. " \
- "Interface types other than 'eth' mus be configured "
\
- "in LNST recipes directly." % iface["type"]
- raise XmlProcessingError(msg, node)
-
- # hwaddr parameter is optional for dynamic interface,
- # but it is required by non-dynamic interfaces
- if iface["create"] and "hwaddr" in
iface["params"]:
- iface["hwaddr"] =
normalize_hwaddr(iface["params"]["hwaddr"])
+ if "hwaddr" in iface["params"]:
+ iface["hwaddr"] =
normalize_hwaddr(iface["params"]["hwaddr"])
else:
- if "hwaddr" in iface["params"]:
- iface["hwaddr"] =
normalize_hwaddr(iface["params"]["hwaddr"])
- else:
- msg = "Missing required parameter 'hwaddr'"
- raise XmlProcessingError(msg, node)
+ msg = "Missing required parameter 'hwaddr'"
+ raise XmlProcessingError(msg, node)
- # name parameter is only valid when the interface is not dynamic
if "name" in iface["params"]:
- if iface["create"]:
- msg = "'name' parameter is not valid with dynamic
interfaces"
- raise XmlProcessingError(msg, node)
- else:
- iface["name"] = iface["params"]["name"]
-
- # bridge parameter is valid only when the interface is dynamic
- if "libvirt_bridge" in iface["params"]:
- if iface["create"] == "libvirt":
- iface["libvirt_bridge"] =
iface["params"]["libvirt_bridge"]
- else:
- msg = "'libvirt_bridge' parameter is not valid with" \
- "dynamic ifaceices"
- raise XmlProcessingError(msg, node)
+ iface["name"] = iface["params"]["name"]