[PATCH] lnst-ctl: Adding disable_pool_checks option

Radek Pazdera rpazdera at redhat.com
Fri May 3 22:00:14 UTC 2013


This commit adds a new option to the controller. Using this option will
disable the checks that are performed by LNST during startup on pool
machines.

Option:

    -o
    --disable-pool-checks

Some minor cleanup has been done on a few places nearby.
---
 lnst-ctl                             |   29 ++++++++++++-------
 lnst/Controller/NetTestController.py |    4 +-
 lnst/Controller/SlavePool.py         |   50 +++++++++++++++++++---------------
 3 files changed, 48 insertions(+), 35 deletions(-)

diff --git a/lnst-ctl b/lnst-ctl
index 26b15e1..de74c65 100755
--- a/lnst-ctl
+++ b/lnst-ctl
@@ -36,21 +36,26 @@ def usage():
           "                                  network communication during\n" \
           "                                  the test"
     print "  -h, --help                      print this message"
+    print "  -o, --disable-pool-checks       don't check the availability of\n"\
+          "                                  machines in the pool"
     print "  -c, --cleanup                   perform config cleanup\n" \
           "                                  machines"
     print "  -x, --result=FILE               file to write xml_result"
     sys.exit()
 
 def process_recipe(action, file_path, cleanup, res_serializer,
-                   packet_capture, config, log_ctl):
+                   packet_capture, config, log_ctl, pool_checks):
     nettestctl = NetTestController(file_path, log_ctl, cleanup=cleanup,
-                                   res_serializer=res_serializer, config=config)
+                                   res_serializer=res_serializer,
+                                   config=config, pool_checks=pool_checks)
     if action == "run":
         return nettestctl.run_recipe(packet_capture)
     elif action == "dump":
         return nettestctl.dump_recipe()
     elif action == "config_only":
         return nettestctl.config_only_recipe()
+    elif action == "match_setup":
+        return nettestctl.match_setup()
     else:
         logging.error("Unknown action \"%s\"" % action)
         usage();
@@ -65,15 +70,15 @@ def print_summary(summary):
         logging.info("*%s* %s" % (res, recipe_file))
     logging.info("=====================================================")
 
-def get_recipe_result(args, file_path, cleanup,
-                      res_serializer, packet_capture, config, log_ctl):
+def get_recipe_result(args, file_path, cleanup, res_serializer, packet_capture,
+                      config, log_ctl, pool_checks):
     res_serializer.add_recipe(file_path)
     log_ctl.set_recipe(file_path)
 
     res = None
     try:
         res = process_recipe(args, file_path, cleanup, res_serializer,
-                             packet_capture, config, log_ctl)
+                             packet_capture, config, log_ctl, pool_checks)
     except Exception as err:
         log_exc_traceback()
         logging.error(err)
@@ -87,9 +92,9 @@ def main():
     try:
         opts, args = getopt.getopt(
             sys.argv[1:],
-            "dhr:cx:p",
+            "dhr:cx:po",
             ["debug", "help", "recipe=", "cleanup", "result=",
-             "packet_capture"]
+             "packet_capture", "disable-pool-checks"]
         )
     except getopt.GetoptError as err:
         print str(err)
@@ -113,12 +118,12 @@ def main():
         with open(usr_cfg, 'w') as f:
             f.write(config.dump_config())
 
-
     debug = 0
     recipe_path = None
     cleanup = False
     result_path = None
     packet_capture = False
+    pool_checks = True
     for opt, arg in opts:
         if opt in ("-d", "--debug"):
             debug += 1
@@ -130,7 +135,8 @@ def main():
             result_path = arg
         elif opt in ("-p", "--packet_capture"):
             packet_capture = True
-
+        elif opt in ("-o", "--disable-pool-checks"):
+            pool_checks = False
 
     date = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S")
     log_ctl = LoggingCtl(debug,
@@ -162,12 +168,13 @@ def main():
                                                      cleanup,
                                                      res_serializer,
                                                      packet_capture,
-                                                     config, log_ctl))
+                                                     config, log_ctl,
+                                                     pool_checks))
         else:
             summary.append(get_recipe_result(action, recipe_path,
                                              cleanup, res_serializer,
                                              packet_capture,
-                                             config, log_ctl))
+                                             config, log_ctl, pool_checks))
 
     log_ctl.set_recipe("", clean=False)
 
diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py
index 62600ca..1f47de5 100644
--- a/lnst/Controller/NetTestController.py
+++ b/lnst/Controller/NetTestController.py
@@ -41,7 +41,7 @@ def ignore_event(**kwarg):
 
 class NetTestController:
     def __init__(self, recipe_path, log_ctl, cleanup=False,
-                 res_serializer=None, config=None):
+                 res_serializer=None, config=None, pool_checks=True):
         self._docleanup = cleanup
         self._res_serializer = res_serializer
         self._remote_capture_files = {}
@@ -51,7 +51,7 @@ class NetTestController:
         self._msg_dispatcher = MessageDispatcher(log_ctl)
 
         sp = SlavePool(config.get_option('environment', 'pool_dirs'),
-                       check_process_running("libvirtd"), config)
+                       check_process_running("libvirtd"), config, pool_checks)
         self._slave_pool = sp
 
         self._machines = {}
diff --git a/lnst/Controller/SlavePool.py b/lnst/Controller/SlavePool.py
index 80a357c..b875d59 100644
--- a/lnst/Controller/SlavePool.py
+++ b/lnst/Controller/SlavePool.py
@@ -35,11 +35,14 @@ class SlavePool:
     _machine_matches = []
     _network_matches = []
 
-    _allow_virtual = False
+    _allow_virt = False
+    _pool_checks = True
 
-    def __init__(self, pool_dirs, allow_virtual=False, config=None):
+    def __init__(self, pool_dirs, allow_virtual=False, config=None,
+                 pool_checks=True):
         self._config = config
-        self._allow_virtual = allow_virtual
+        self._allow_virt = allow_virtual
+        self._pool_checks = pool_checks
         for pool_dir in pool_dirs:
             self.add_dir(pool_dir)
 
@@ -61,30 +64,33 @@ class SlavePool:
             parser.disable_events()
 
             machine = {"params": {}, "interfaces": {}}
-            machine_id = re.sub("\.[xX][mM][lL]$", "", basename)
-            parser.set_machine(machine_id, machine)
+            m_id = re.sub("\.[xX][mM][lL]$", "", basename)
+            parser.set_machine(m_id, machine)
 
             slavemachine = dom.getElementsByTagName("slavemachine")[0]
 
             parser.parse(slavemachine)
 
-            hostname = machine["params"]["hostname"]
-            if "rpcport" in machine:
-                port = machine["params"]["rpcport"]
-            else:
-                port = self._config.get_option('environment', 'rpcport')
-            logging.info("Querying slave machine %s." % machine_id)
-            if not test_tcp_connection(hostname, port):
-                return
-
-            if 'libvirt_domain' not in machine['params'] \
-                                   or self._allow_virtual:
-                logging.info("Adding slave machine %s to slave pool."
-                             % machine_id)
-                self._pool[machine_id] = machine
-            else:
-                logging.warning("libvirtd not found- Machine Pool skipping "\
-                                "machine %s" % machine_id)
+            if self._pool_checks:
+                hostname = machine["params"]["hostname"]
+                if "rpcport" in machine:
+                    port = machine["params"]["rpcport"]
+                else:
+                    port = self._config.get_option('environment', 'rpcport')
+
+                logging.info("Querying slave machine %s." % m_id)
+                if not test_tcp_connection(hostname, port):
+                    msg = "Machine '%s' not responding. Skipping." % m_id
+                    logging.warning(msg)
+                    return
+
+                if 'libvirt_domain' in machine['params'] and \
+                   not self._allow_virt:
+                    msg = "libvird not running. Skipping machine '%s'." % m_id
+                    logging.warning(msg)
+
+            logging.info("Adding slave machine %s to slave pool." % m_id)
+            self._pool[m_id] = machine
 
     def provision_machines(self, mreqs):
         """
-- 
1.7.7.6



More information about the LNST-developers mailing list