commit 7c2c3c38167f240e58c167894b798201fd3fa518 Author: Ondrej Lichtner olichtne@redhat.com Date: Fri Oct 17 16:15:59 2014 +0200
NetTestController: make machine provisioning public
This patch makes machine provisioning done by the NetTestController class be accessible by a public method provision_machines. This makes it possible to use a NetTestController object multiple times with different machine setup.
Signed-off-by: Ondrej Lichtner olichtne@redhat.com Signed-off-by: Jiri Pirko jiri@resnulli.us
lnst/Controller/NetTestController.py | 39 +++++++++++++++++++++++---------- 1 files changed, 27 insertions(+), 12 deletions(-) --- diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py index c68eb97..005aa09 100644 --- a/lnst/Controller/NetTestController.py +++ b/lnst/Controller/NetTestController.py @@ -45,6 +45,9 @@ if check_process_running("libvirtd"): class NetTestError(Exception): pass
+class NoMatchError(NetTestError): + pass + def ignore_event(**kwarg): pass
@@ -80,6 +83,9 @@ class NetTestController: self._parser.set_aliases(defined_aliases, overriden_aliases) self._recipe = self._parser.parse()
+ mreq = self._get_machine_requirements() + sp.set_machine_requirements(mreq) + modules_dirs = lnst_config.get_option('environment', 'module_dirs') tools_dirs = lnst_config.get_option('environment', 'tool_dirs')
@@ -201,13 +207,12 @@ class NetTestController: for iface in ifaces: iface.up()
- def _prepare_provisioning(self): - mreq = self._get_machine_requirements() + def provision_machines(self): sp = self._slave_pool machines = self._machines - if not sp.provision_machines(mreq, machines): + if not sp.provision_machines(machines): msg = "This setup cannot be provisioned with the current pool." - raise NetTestError(msg) + raise NoMatchError(msg)
if sp.is_setup_virtual() and os.geteuid() != 0: msg = "Provisioning this setup requires additional configuration "\ @@ -215,10 +220,20 @@ class NetTestController: "priviledges so it can connect to qemu." raise NetTestError(msg)
- logging.info("Provisioning initialized") - for m_id in machines.keys(): - provisioner = sp.get_provisioner_id(m_id) - logging.info(" host %s uses %s" % (m_id, provisioner)) + def print_match_description(self): + sp = self._slave_pool + match = sp.get_match() + logging.info("Pool match description:") + if sp.is_setup_virtual(): + logging.info(" Setup is using virtual machines.") + for m_id, m in match["machines"].iteritems(): + logging.info(" host "%s" uses "%s"" % (m_id, m["target"])) + for if_id, pool_id in m["interfaces"].iteritems(): + logging.info(" interface "%s" matched to "%s"" %\ + (if_id, pool_id)) + + def get_pool_match(self): + return self._slave_pool.get_match()
def _prepare_machine(self, m_id, resource_sync=True): machine = self._machines[m_id] @@ -497,10 +512,14 @@ class NetTestController: #clean-up slave logger self._log_ctl.remove_slave(machine_id)
+ for m_id in list(self._machines.keys()): + del self._machines[m_id] + # remove dynamically created bridges if deconfigure: for bridge in self._network_bridges.itervalues(): bridge.cleanup() + self._network_bridges = {}
def _save_machine_config(self): #saves current virtual configuration to a file, after pickling it @@ -578,13 +597,10 @@ class NetTestController: os.remove("/tmp/.lnst_machine_conf")
def match_setup(self): - self._prepare_provisioning() - return {"passed": True}
def config_only_recipe(self): try: - self._prepare_provisioning() self._prepare_network(resource_sync=False) except (KeyboardInterrupt, Exception) as exc: msg = "Exception raised during configuration." @@ -599,7 +615,6 @@ class NetTestController:
def run_recipe(self): try: - self._prepare_provisioning() self._prepare_tasks() self._prepare_network() except (KeyboardInterrupt, Exception) as exc:
lnst-developers@lists.fedorahosted.org