commit 686c68611e430f6ed08fdb7a1c6d919230df5530
Author: Jan Tluka <jtluka(a)redhat.com>
Date: Wed Sep 11 12:56:03 2013 +0200
Adding prefix template function
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
Signed-off-by: Jiri Pirko <jiri(a)resnulli.us>
lnst/Common/XmlTemplates.py | 53 ++++++++++++++++++++++++++++++++++++++++++-
lnst/Controller/Machine.py | 11 ++++++++-
2 files changed, 62 insertions(+), 2 deletions(-)
---
diff --git a/lnst/Common/XmlTemplates.py b/lnst/Common/XmlTemplates.py
index 57acf00..41dbc0d 100644
--- a/lnst/Common/XmlTemplates.py
+++ b/lnst/Common/XmlTemplates.py
@@ -120,6 +120,56 @@ class DevnameFunc(TemplateFunc):
% (m_id, if_id)
raise XmlTemplateError(msg)
+class PrefixFunc(TemplateFunc):
+ def _check_args(self, args):
+ if len(args) > 3:
+ msg = "Function prefix() takes at most 3 arguments, %d passed" \
+ % len(args)
+ raise XmlTemplateError(msg)
+ if len(args) < 2:
+ msg = "Function prefix() must have at least 2 arguments, %d " \
+ "passed" % len(args)
+ raise XmlTemplateError(msg)
+
+ if len(args) == 3:
+ try:
+ int(args[2])
+ except ValueError:
+ msg = "The third argument of prefix() function must be an " \
+ "integer"
+ raise XmlTemplateError(msg)
+
+ def _implementation(self):
+ m_id = self._args[0]
+ if_id = self._args[1]
+ addr = 0
+ if len(self._args) == 3:
+ addr = self._args[2]
+
+ try:
+ machine = self._machines[m_id]
+ except KeyError:
+ msg = "First parameter of function prefix() is invalid: " \
+ "Machine %s does not exist." % m_id
+ raise XmlTemplateError(msg)
+
+ try:
+ iface = machine.get_interface(if_id)
+ except MachineError:
+ msg = "Second parameter of function prefix() is invalid: "\
+ "Interface %s does not exist." % if_id
+ raise XmlTemplateError(msg)
+
+ try:
+ return iface.get_prefix(int(addr))
+ except IndexError:
+ msg = "There is no address with index %s on machine %s, " \
+ "interface %s." % (addr, m_id, if_id)
+ raise XmlTemplateError(msg)
+ except PrefixMissingError:
+ msg = "Address with the index %s for the interface %s on machine"
\
+ "%s does not contain any prefix" % (addr, m_id, if_id)
+
class HwaddrFunc(TemplateFunc):
def _check_args(self, args):
if len(args) != 2:
@@ -157,7 +207,8 @@ class XmlTemplates:
_alias_re = "\{\$([a-zA-Z0-9_]+)\}"
_func_re = "\{([a-zA-Z0-9_]+)\(([^\(\)]*)\)\}"
- _func_map = {"ip": IpFunc, "hwaddr": HwaddrFunc,
"devname": DevnameFunc}
+ _func_map = {"ip": IpFunc, "hwaddr": HwaddrFunc,
"devname": DevnameFunc, \
+ "prefix": PrefixFunc }
def __init__(self, definitions=None):
if definitions:
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index f212824..96f3657 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -32,6 +32,9 @@ from lnst.Common.ConnectionHandler import ConnectionHandler
class MachineError(Exception):
pass
+class PrefixMissingError(Exception):
+ pass
+
class Machine(object):
""" Slave machine abstraction
@@ -384,7 +387,13 @@ class Interface(object):
self._addresses.append(addr)
def get_address(self, num):
- return self._addresses[num]
+ return self._addresses[num].split('/')[0]
+
+ def get_prefix(self, num):
+ try:
+ return self._addresses[num].split('/')[1]
+ except IndexError:
+ raise PrefixMissingError
def _get_config(self):
config = {"hwaddr": self._hwaddr, "type": self._type,
Show replies by date