From: Ondrej Lichtner <olichtne(a)redhat.com>
VirtUtils are only used by the controller and there is no use case in
which we would want to use it on slaves. Therefore it makes more sense
to move it to the lnst/Controller directory.
Signed-off-by: Ondrej Lichtner <olichtne(a)redhat.com>
---
lnst/Common/VirtUtils.py | 262 -----------------------------------
lnst/Controller/Machine.py | 2 +-
lnst/Controller/NetTestController.py | 2 +-
lnst/Controller/VirtUtils.py | 262 +++++++++++++++++++++++++++++++++++
4 files changed, 264 insertions(+), 264 deletions(-)
delete mode 100644 lnst/Common/VirtUtils.py
create mode 100644 lnst/Controller/VirtUtils.py
diff --git a/lnst/Common/VirtUtils.py b/lnst/Common/VirtUtils.py
deleted file mode 100644
index f602c99..0000000
--- a/lnst/Common/VirtUtils.py
+++ /dev/null
@@ -1,262 +0,0 @@
-"""
-Utilities for manipulating virtualization host, its guests and
-connections between them
-
-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(a)redhat.com (Radek Pazdera)
-"""
-
-import logging
-import libvirt
-from libvirt import libvirtError
-from lnst.Common.ExecCmd import exec_cmd, ExecCmdFail
-from lnst.Common.NetUtils import normalize_hwaddr, scan_netdevs
-
-#this is a global object because opening the connection to libvirt in every
-#object instance that uses it sometimes fails - the libvirt server probably
-#can't handle that many connections at a time
-_libvirt_conn = libvirt.open(None)
-
-class VirtUtilsError(Exception):
- pass
-
-def _ip(cmd):
- try:
- exec_cmd("ip %s" % cmd)
- except ExecCmdFail as err:
- raise VirtUtilsError("ip command error: %s" % err)
-
-def _brctl(cmd):
- try:
- exec_cmd("brctl %s" % cmd)
- except ExecCmdFail as err:
- raise VirtUtilsError("brctl error: %s" % err)
-
-def _iptables(cmd):
- try:
- exec_cmd("iptables %s" % cmd)
- except ExecCmdFail as err:
- raise VirtUtilsError("iptables error: %s" % err)
-
-def _ip6tables(cmd):
- try:
- exec_cmd("ip6tables %s" % cmd)
- except ExecCmdFail as err:
- raise VirtUtilsError("ip6tables error: %s" % err)
-
-def _virsh(cmd):
- try:
- exec_cmd("virsh %s" % cmd, log_outputs=False)
- except ExecCmdFail as err:
- raise VirtUtilsError("virsh error: %s" % err)
-
-class VirtDomainCtl:
- _name = None
- _net_device_template = """
- <interface type='network'>
- <mac address='{0}'/>
- <source network='{1}'/>
- <model type='{2}'/>
- </interface>
- """
- _net_device_bare_template = """
- <interface>
- <mac address='{0}'/>
- </interface>
- """
-
- def __init__(self, domain_name):
- self._name = domain_name
- self._created_interfaces = {}
-
- try:
- self._domain = _libvirt_conn.lookupByName(domain_name)
- except:
- raise VirtUtilsError("Domain '%s' doesn't exist!" %
domain_name)
-
- def start(self):
- self._domain.create()
-
- def stop(self):
- self._domain.destroy()
-
- def restart(self):
- self._domain.reboot()
-
- def attach_interface(self, hw_addr, net_name, driver="rtl8139"):
- try:
- device_xml = self._net_device_template.format(hw_addr,
- net_name,
- driver)
- self._domain.attachDevice(device_xml)
- logging.debug("libvirt device with hwaddr '%s' attached" %
hw_addr)
- self._created_interfaces[hw_addr] = device_xml
- return True
- except libvirtError as e:
- raise VirtUtilsError(str(e))
-
- def detach_interface(self, hw_addr):
- if hw_addr in self._created_interfaces:
- device_xml = self._created_interfaces[hw_addr]
- else:
- device_xml = self._net_device_bare_template.format(hw_addr)
-
- try:
- self._domain.detachDevice(device_xml)
- logging.debug("libvirt device with hwaddr '%s' detached" %
hw_addr)
- return True
- except libvirtError as e:
- raise VirtUtilsError(str(e))
-
- @classmethod
- def domain_exist(cls, domain_name):
- try:
- _libvirt_conn.lookupByName(domain_name)
- return True
- except:
- return False
-
-class NetCtl(object):
- _name = None
-
- def __init__(self, name):
- self._name = name
-
- def get_name(self):
- return self._name
-
- def init(self):
- pass
-
- def cleanup(self):
- pass
-
-class VirtNetCtl(NetCtl):
- _network_template = """
- <network ipv6='yes'>
- <name>{0}</name>
- <bridge name='virbr_{0}' stp='off' delay='0' />
- <domain name='{0}'/>
- </network>
- """
-
- def __init__(self, name=None):
- if not name:
- name = self._generate_name()
- self._name = name
-
- def _generate_name(self):
- devs = _libvirt_conn.listNetworks()
-
- index = 0
- while True:
- name = "lnst_net%d" % index
- index += 1
- if name not in devs:
- return name
-
- def init(self):
- try:
- network_xml = self._network_template.format(self._name)
- _libvirt_conn.networkCreateXML(network_xml)
- logging.debug("libvirt network '%s' created" % self._name)
- return True
- except libvirtError as e:
- raise VirtUtilsError(str(e))
-
- def cleanup(self):
- try:
- network = _libvirt_conn.networkLookupByName(self._name)
- network.destroy()
- logging.debug("libvirt network '%s' destroyed" %
self._name)
- return True
- except libvirtError as e:
- raise VirtUtilsError(str(e))
-
- @classmethod
- def network_exist(cls, net_name):
- try:
- _libvirt_conn.networkLookupByName(net_name)
- return True
- except:
- return False
-
-class BridgeCtl(NetCtl):
- _remove = False
-
- def __init__(self, name=None):
- if not name:
- name = self._generate_name()
-
- self._check_name(name)
- self._name = name
-
- def get_name(self):
- return self._name
-
- def set_remove(self, remove):
- self._remove = remove
-
- @staticmethod
- def _check_name(name):
- if len(name) > 16:
- msg = "Bridge name '%s' longer than 16 characters" % name
- raise VirtUtilsError(msg)
-
- @staticmethod
- def _generate_name():
- devs = scan_netdevs()
-
- index = 0
- while True:
- name = "lnstbr%d" % index
- index += 1
- unique = True
- for dev in devs:
- if name == dev["name"]:
- unique = False
- break
-
- if unique:
- return name
-
- def _exists(self):
- devs = scan_netdevs()
- for dev in devs:
- if self._name == dev["name"]:
- return True
-
- return False
-
- def init(self):
- if not self._exists():
- _brctl("addbr %s" % self._name)
- _iptables("-I FORWARD 1 -j REJECT -i %s -o any" % self._name)
- _iptables("-I FORWARD 1 -j REJECT -i any -o %s" % self._name)
- _iptables("-I FORWARD 1 -j ACCEPT -i %s -o %s" %
- (self._name, self._name))
- _ip6tables("-I FORWARD 1 -j REJECT -i %s -o any" % self._name)
- _ip6tables("-I FORWARD 1 -j REJECT -i any -o %s" % self._name)
- _ip6tables("-I FORWARD 1 -j ACCEPT -i %s -o %s" %
- (self._name, self._name))
- self._remove = True
-
- _ip("link set %s up" % self._name)
-
- def cleanup(self):
- if self._remove:
- _ip("link set %s down" % self._name)
- _brctl("delbr %s" % self._name)
- _iptables("-D FORWARD -j REJECT -i %s -o any" % self._name)
- _iptables("-D FORWARD -j REJECT -i any -o %s" % self._name)
- _iptables("-D FORWARD -j ACCEPT -i %s -o %s" %
- (self._name, self._name))
- _ip6tables("-D FORWARD -j REJECT -i %s -o any" % self._name)
- _ip6tables("-D FORWARD -j REJECT -i any -o %s" % self._name)
- _ip6tables("-D FORWARD -j ACCEPT -i %s -o %s" %
- (self._name, self._name))
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 25749e0..d73aedd 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -31,7 +31,7 @@ from lnst.Common.ConnectionHandler import ConnectionHandler
# conditional support for libvirt
if check_process_running("libvirtd"):
- from lnst.Common.VirtUtils import VirtNetCtl, VirtDomainCtl
+ from lnst.Controller.VirtUtils import VirtNetCtl, VirtDomainCtl
DEFAULT_TIMEOUT = 60
diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py
index 39bc83a..c5e3fec 100644
--- a/lnst/Controller/NetTestController.py
+++ b/lnst/Controller/NetTestController.py
@@ -38,7 +38,7 @@ import lnst.Controller.Task as Task
# conditional support for libvirt
if check_process_running("libvirtd"):
- from lnst.Common.VirtUtils import VirtNetCtl, VirtDomainCtl
+ from lnst.Controller.VirtUtils import VirtNetCtl, VirtDomainCtl
class NetTestError(Exception):
pass
diff --git a/lnst/Controller/VirtUtils.py b/lnst/Controller/VirtUtils.py
new file mode 100644
index 0000000..f602c99
--- /dev/null
+++ b/lnst/Controller/VirtUtils.py
@@ -0,0 +1,262 @@
+"""
+Utilities for manipulating virtualization host, its guests and
+connections between them
+
+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(a)redhat.com (Radek Pazdera)
+"""
+
+import logging
+import libvirt
+from libvirt import libvirtError
+from lnst.Common.ExecCmd import exec_cmd, ExecCmdFail
+from lnst.Common.NetUtils import normalize_hwaddr, scan_netdevs
+
+#this is a global object because opening the connection to libvirt in every
+#object instance that uses it sometimes fails - the libvirt server probably
+#can't handle that many connections at a time
+_libvirt_conn = libvirt.open(None)
+
+class VirtUtilsError(Exception):
+ pass
+
+def _ip(cmd):
+ try:
+ exec_cmd("ip %s" % cmd)
+ except ExecCmdFail as err:
+ raise VirtUtilsError("ip command error: %s" % err)
+
+def _brctl(cmd):
+ try:
+ exec_cmd("brctl %s" % cmd)
+ except ExecCmdFail as err:
+ raise VirtUtilsError("brctl error: %s" % err)
+
+def _iptables(cmd):
+ try:
+ exec_cmd("iptables %s" % cmd)
+ except ExecCmdFail as err:
+ raise VirtUtilsError("iptables error: %s" % err)
+
+def _ip6tables(cmd):
+ try:
+ exec_cmd("ip6tables %s" % cmd)
+ except ExecCmdFail as err:
+ raise VirtUtilsError("ip6tables error: %s" % err)
+
+def _virsh(cmd):
+ try:
+ exec_cmd("virsh %s" % cmd, log_outputs=False)
+ except ExecCmdFail as err:
+ raise VirtUtilsError("virsh error: %s" % err)
+
+class VirtDomainCtl:
+ _name = None
+ _net_device_template = """
+ <interface type='network'>
+ <mac address='{0}'/>
+ <source network='{1}'/>
+ <model type='{2}'/>
+ </interface>
+ """
+ _net_device_bare_template = """
+ <interface>
+ <mac address='{0}'/>
+ </interface>
+ """
+
+ def __init__(self, domain_name):
+ self._name = domain_name
+ self._created_interfaces = {}
+
+ try:
+ self._domain = _libvirt_conn.lookupByName(domain_name)
+ except:
+ raise VirtUtilsError("Domain '%s' doesn't exist!" %
domain_name)
+
+ def start(self):
+ self._domain.create()
+
+ def stop(self):
+ self._domain.destroy()
+
+ def restart(self):
+ self._domain.reboot()
+
+ def attach_interface(self, hw_addr, net_name, driver="rtl8139"):
+ try:
+ device_xml = self._net_device_template.format(hw_addr,
+ net_name,
+ driver)
+ self._domain.attachDevice(device_xml)
+ logging.debug("libvirt device with hwaddr '%s' attached" %
hw_addr)
+ self._created_interfaces[hw_addr] = device_xml
+ return True
+ except libvirtError as e:
+ raise VirtUtilsError(str(e))
+
+ def detach_interface(self, hw_addr):
+ if hw_addr in self._created_interfaces:
+ device_xml = self._created_interfaces[hw_addr]
+ else:
+ device_xml = self._net_device_bare_template.format(hw_addr)
+
+ try:
+ self._domain.detachDevice(device_xml)
+ logging.debug("libvirt device with hwaddr '%s' detached" %
hw_addr)
+ return True
+ except libvirtError as e:
+ raise VirtUtilsError(str(e))
+
+ @classmethod
+ def domain_exist(cls, domain_name):
+ try:
+ _libvirt_conn.lookupByName(domain_name)
+ return True
+ except:
+ return False
+
+class NetCtl(object):
+ _name = None
+
+ def __init__(self, name):
+ self._name = name
+
+ def get_name(self):
+ return self._name
+
+ def init(self):
+ pass
+
+ def cleanup(self):
+ pass
+
+class VirtNetCtl(NetCtl):
+ _network_template = """
+ <network ipv6='yes'>
+ <name>{0}</name>
+ <bridge name='virbr_{0}' stp='off' delay='0' />
+ <domain name='{0}'/>
+ </network>
+ """
+
+ def __init__(self, name=None):
+ if not name:
+ name = self._generate_name()
+ self._name = name
+
+ def _generate_name(self):
+ devs = _libvirt_conn.listNetworks()
+
+ index = 0
+ while True:
+ name = "lnst_net%d" % index
+ index += 1
+ if name not in devs:
+ return name
+
+ def init(self):
+ try:
+ network_xml = self._network_template.format(self._name)
+ _libvirt_conn.networkCreateXML(network_xml)
+ logging.debug("libvirt network '%s' created" % self._name)
+ return True
+ except libvirtError as e:
+ raise VirtUtilsError(str(e))
+
+ def cleanup(self):
+ try:
+ network = _libvirt_conn.networkLookupByName(self._name)
+ network.destroy()
+ logging.debug("libvirt network '%s' destroyed" %
self._name)
+ return True
+ except libvirtError as e:
+ raise VirtUtilsError(str(e))
+
+ @classmethod
+ def network_exist(cls, net_name):
+ try:
+ _libvirt_conn.networkLookupByName(net_name)
+ return True
+ except:
+ return False
+
+class BridgeCtl(NetCtl):
+ _remove = False
+
+ def __init__(self, name=None):
+ if not name:
+ name = self._generate_name()
+
+ self._check_name(name)
+ self._name = name
+
+ def get_name(self):
+ return self._name
+
+ def set_remove(self, remove):
+ self._remove = remove
+
+ @staticmethod
+ def _check_name(name):
+ if len(name) > 16:
+ msg = "Bridge name '%s' longer than 16 characters" % name
+ raise VirtUtilsError(msg)
+
+ @staticmethod
+ def _generate_name():
+ devs = scan_netdevs()
+
+ index = 0
+ while True:
+ name = "lnstbr%d" % index
+ index += 1
+ unique = True
+ for dev in devs:
+ if name == dev["name"]:
+ unique = False
+ break
+
+ if unique:
+ return name
+
+ def _exists(self):
+ devs = scan_netdevs()
+ for dev in devs:
+ if self._name == dev["name"]:
+ return True
+
+ return False
+
+ def init(self):
+ if not self._exists():
+ _brctl("addbr %s" % self._name)
+ _iptables("-I FORWARD 1 -j REJECT -i %s -o any" % self._name)
+ _iptables("-I FORWARD 1 -j REJECT -i any -o %s" % self._name)
+ _iptables("-I FORWARD 1 -j ACCEPT -i %s -o %s" %
+ (self._name, self._name))
+ _ip6tables("-I FORWARD 1 -j REJECT -i %s -o any" % self._name)
+ _ip6tables("-I FORWARD 1 -j REJECT -i any -o %s" % self._name)
+ _ip6tables("-I FORWARD 1 -j ACCEPT -i %s -o %s" %
+ (self._name, self._name))
+ self._remove = True
+
+ _ip("link set %s up" % self._name)
+
+ def cleanup(self):
+ if self._remove:
+ _ip("link set %s down" % self._name)
+ _brctl("delbr %s" % self._name)
+ _iptables("-D FORWARD -j REJECT -i %s -o any" % self._name)
+ _iptables("-D FORWARD -j REJECT -i any -o %s" % self._name)
+ _iptables("-D FORWARD -j ACCEPT -i %s -o %s" %
+ (self._name, self._name))
+ _ip6tables("-D FORWARD -j REJECT -i %s -o any" % self._name)
+ _ip6tables("-D FORWARD -j REJECT -i any -o %s" % self._name)
+ _ip6tables("-D FORWARD -j ACCEPT -i %s -o %s" %
+ (self._name, self._name))
--
1.8.5.3