[PATCH] NetTest: Adding MachinePool module

Radek Pazdera rpazdera at redhat.com
Thu Aug 30 13:02:42 UTC 2012


This commit introduces MachinePool into NetTestController.

MachinePool will be responsible for managing local machine configs
at controller. NetTestController will search for available configs
on startup and then be able to use the machines for testing. Template
matching of test setups against the pool should be done in the future.

Signed-off-by: Radek Pazdera <rpazdera at redhat.com>
---
 NetTest/MachinePool.py       |   61 ++++++++++++++++++++++++++++++++++++++++++
 NetTest/NetTestController.py |    3 ++
 2 files changed, 64 insertions(+), 0 deletions(-)
 create mode 100644 NetTest/MachinePool.py

diff --git a/NetTest/MachinePool.py b/NetTest/MachinePool.py
new file mode 100644
index 0000000..2712f09
--- /dev/null
+++ b/NetTest/MachinePool.py
@@ -0,0 +1,61 @@
+"""
+This module contains implementaion of MachinePool class that
+can be used to maintain a cluster of test machines.
+
+Copyright 2012 Red Hat, Inc.
+Licensed under the GNU General Public License, version 2 as
+published by the Free Software Foundation; see COPYING for details.
+"""
+
+__author__ = """
+rpazdera at redhat.com (Radek Pazdera)
+"""
+
+import logging
+import os
+import re
+from Common.XmlProcessing import XmlDomTreeInit
+from NetTestParse import MachineConfigParse
+
+class MachinePool:
+    """ This class is responsible for managing test machines
+        that are available at controler and can be used for
+        testing via template matching
+    """
+
+    _machines = {}
+
+    def __init__(self, pool_dirs):
+        for pool_dir in pool_dirs:
+            self.add_dir(pool_dir)
+
+    def add_dir(self, pool_dir):
+        dentries = os.listdir(pool_dir)
+
+        for dirent in dentries:
+            self.add_file("%s/%s" % (pool_dir, dirent))
+
+    def add_file(self, filepath):
+        if os.path.isfile(filepath) and re.search("\.xml$", filepath, re.I):
+            dom_init = XmlDomTreeInit()
+            dom = dom_init.parse_file(filepath)
+
+            dirname, basename = os.path.split(filepath)
+
+            parser = MachineConfigParse()
+            parser.set_include_root(dirname)
+            parser.disable_events()
+
+            machine = {"info": {}, "netdevices": {}}
+            machine_id = re.sub("\.xml$", "", basename, flags=re.I)
+            parser.set_machine(machine_id, machine)
+
+            machineconfig = dom.getElementsByTagName("machineconfig")[0]
+            parser.parse(machineconfig)
+            self._machines[machine_id] = machine
+
+    def get_machines(self):
+        return self._machines
+
+    def match_setup(self, templates):
+        pass
diff --git a/NetTest/NetTestController.py b/NetTest/NetTestController.py
index 41707c5..b028e35 100644
--- a/NetTest/NetTestController.py
+++ b/NetTest/NetTestController.py
@@ -26,6 +26,7 @@ from NetTest.NetTestCommand import NetTestCommand, str_command
 from Common.LoggingServer import LoggingServer
 from Common.VirtUtils import VirtNetCtl, VirtDomainCtl, BridgeCtl
 from Common.Utils import wait_for
+from NetTest.MachinePool import MachinePool
 
 MAC_POOL_RANGE = {"start": "52:54:01:00:00:01", "end": "52:54:01:FF:FF:FF"}
 
@@ -43,6 +44,8 @@ class NetTestController:
         self._res_serializer = res_serializer
         self._remote_capture_files = {}
 
+        self._machine_pool = MachinePool([])
+
         self._recipe = {}
         definitions = {"recipe": self._recipe}
 
-- 
1.7.7.6



More information about the LNST-developers mailing list