commit 2599992e2798423fe80540e779f132818278914e
Author: Ondrej Lichtner <olichtne(a)redhat.com>
Date: Thu Aug 21 14:25:32 2014 +0200
*ConfigDevice: split device creation and configuration
This patch splits the device creation (destruction) part of configure
(deconfigure) method of ConfigDevice objects into it's own separate
method create (destroy). This split is usefull mostly for configuring
veth devices, however to keep the code consistent I changed all other
device types as well.
Signed-off-by: Ondrej Lichtner <olichtne(a)redhat.com>
Signed-off-by: Jiri Pirko <jiri(a)resnulli.us>
lnst/Slave/InterfaceManager.py | 18 +++++++++++-
lnst/Slave/NetConfigDevice.py | 58 +++++++++++++++++++++++++--------------
lnst/Slave/NetTestSlave.py | 5 +++-
lnst/Slave/NmConfigDevice.py | 6 ++++
4 files changed, 64 insertions(+), 23 deletions(-)
---
diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py
index 16eba2d..3695fe2 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -151,7 +151,7 @@ class InterfaceManager(object):
device = Device(self)
device.set_configuration(config)
- device.configure()
+ device.create()
self._tmp_mapping[if_id] = device
return config["name"]
@@ -198,6 +198,7 @@ class Device(object):
def __init__(self, if_manager):
self._initialized = False
self._configured = False
+ self._created = False
self._if_index = None
self._hwaddr = None
@@ -320,6 +321,7 @@ class Device(object):
if self._conf != None:
self.down()
self.deconfigure()
+ self.destroy()
self._conf = None
self._conf_dict = None
@@ -354,6 +356,20 @@ class Device(object):
if if_index in self._slaves:
self._slaves.remove(if_index)
+ def create(self):
+ if self._conf != None and not self._created:
+ self._conf.create()
+ self._created = True
+ return True
+ return False
+
+ def destroy(self):
+ if self._conf != None and self._created:
+ self._conf.destroy()
+ self._created = False
+ return True
+ return False
+
def configure(self):
if self._conf != None and not self._configured:
self._conf.configure()
diff --git a/lnst/Slave/NetConfigDevice.py b/lnst/Slave/NetConfigDevice.py
index 86744db..d64c471 100644
--- a/lnst/Slave/NetConfigDevice.py
+++ b/lnst/Slave/NetConfigDevice.py
@@ -50,6 +50,12 @@ class NetConfigDeviceGeneric(object):
def slave_del(self, slave_id):
pass
+ def create(self):
+ pass
+
+ def destroy(self):
+ pass
+
def up(self):
config = self._dev_config
if "addresses" in config:
@@ -120,14 +126,18 @@ class NetConfigDeviceBond(NetConfigDeviceGeneric):
exec_cmd('echo "%s%s" > %s/slaves' % (mark, slave_name,
self._get_bond_dir()))
- def configure(self):
+ def create(self):
self._add_rm_bond("+")
+
+ def destroy(self):
+ self._add_rm_bond("-")
+
+ def configure(self):
self._setup_options()
self._add_rm_slaves("+")
def deconfigure(self):
self._add_rm_slaves("-")
- self._add_rm_bond("-")
class NetConfigDeviceBridge(NetConfigDeviceGeneric):
_modulename = "bridge"
@@ -144,13 +154,17 @@ class NetConfigDeviceBridge(NetConfigDeviceGeneric):
for slave_id in get_slaves(self._dev_config):
self._add_rm_port(prefix, slave_id)
- def configure(self):
+ def create(self):
self._add_rm_bridge("add")
+
+ def destroy(self):
+ self._add_rm_bridge("del")
+
+ def configure(self):
self._add_rm_ports("add")
def deconfigure(self):
self._add_rm_ports("del")
- self._add_rm_bridge("del")
def slave_add(self, slave_id):
self._add_rm_port("add", slave_id)
@@ -161,7 +175,7 @@ class NetConfigDeviceBridge(NetConfigDeviceGeneric):
class NetConfigDeviceMacvlan(NetConfigDeviceGeneric):
_modulename = "macvlan"
- def configure(self):
+ def create(self):
config = self._dev_config;
realdev_id = config["slaves"][0]
realdev_name = self._if_manager.get_mapped_device(realdev_id).get_name()
@@ -175,7 +189,7 @@ class NetConfigDeviceMacvlan(NetConfigDeviceGeneric):
exec_cmd("ip link add link %s %s%s type macvlan"
% (realdev_name, dev_name, hwaddr))
- def deconfigure(self):
+ def destroy(self):
dev_name = self._dev_config["name"]
exec_cmd("ip link del %s" % dev_name)
@@ -198,7 +212,7 @@ class NetConfigDeviceVlan(NetConfigDeviceGeneric):
vlan_tci = int(get_option(config, "vlan_tci"))
return dev_name, realdev_name, vlan_tci
- def configure(self):
+ def create(self):
dev_name, realdev_name, vlan_tci = self._get_vlan_info()
if self._check_ip_link_add():
exec_cmd("ip link add link %s %s type vlan id %d"
@@ -210,7 +224,7 @@ class NetConfigDeviceVlan(NetConfigDeviceGeneric):
raise Exception("Bad vlan device name")
exec_cmd("vconfig add %s %d" % (realdev_name, vlan_tci))
- def deconfigure(self):
+ def destroy(self):
dev_name = self._get_vlan_info()[0]
if self._check_ip_link_add():
exec_cmd("ip link del %s" % dev_name)
@@ -252,9 +266,7 @@ class NetConfigDeviceTeam(NetConfigDeviceGeneric):
port_dev = self._if_manager.get_mapped_device(slave_id)
port_dev.up()
- def configure(self):
- self._ports_down()
-
+ def create(self):
teamd_config = get_option(self._dev_config, "teamd_config")
teamd_config = prepare_json_str(teamd_config)
@@ -263,6 +275,13 @@ class NetConfigDeviceTeam(NetConfigDeviceGeneric):
dbus_option = " -D" if self._should_enable_dbus() else ""
exec_cmd("teamd -r -d -c \"%s\" -t %s %s" % (teamd_config,
dev_name, dbus_option))
+ def destroy(self):
+ dev_name = self._dev_config["name"]
+ exec_cmd("teamd -k -t %s" % dev_name)
+
+ def configure(self):
+ self._ports_down()
+
for slave_id in get_slaves(self._dev_config):
self.slave_add(slave_id)
self._ports_up()
@@ -271,10 +290,6 @@ class NetConfigDeviceTeam(NetConfigDeviceGeneric):
for slave_id in get_slaves(self._dev_config):
self.slave_del(slave_id)
- dev_name = self._dev_config["name"]
-
- exec_cmd("teamd -k -t %s" % dev_name)
-
def slave_add(self, slave_id):
dev_name = self._dev_config["name"]
port_dev = self._if_manager.get_mapped_device(slave_id)
@@ -359,25 +374,26 @@ class NetConfigDeviceOvsBridge(NetConfigDeviceGeneric):
for bond_id, bond in bonds.iteritems():
exec_cmd("ovs-vsctl del-port %s %s" % (br_name, bond_id))
- def configure(self):
+ def create(self):
dev_cfg = self._dev_config
-
br_name = dev_cfg["name"]
exec_cmd("ovs-vsctl add-br %s" % br_name)
+ def destroy(self):
+ dev_cfg = self._dev_config
+ br_name = dev_cfg["name"]
+ exec_cmd("ovs-vsctl del-br %s" % br_name)
+
+ def configure(self):
self._add_ports()
self._add_bonds()
def deconfigure(self):
- dev_cfg = self._dev_config
-
self._del_bonds()
self._del_ports()
- br_name = dev_cfg["name"]
- exec_cmd("ovs-vsctl del-br %s" % br_name)
type_class_mapping = {
"eth": NetConfigDeviceEth,
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index d331818..ca714e2 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -161,7 +161,10 @@ class SlaveMethods:
return True
def create_soft_interface(self, if_id, config):
- return self._if_manager.create_device_from_config(if_id, config)
+ dev_name = self._if_manager.create_device_from_config(if_id, config)
+ dev = self._if_manager.get_mapped_device(if_id)
+ dev.configure()
+ return dev_name
def deconfigure_interface(self, if_id):
device = self._if_manager.get_mapped_device(if_id)
diff --git a/lnst/Slave/NmConfigDevice.py b/lnst/Slave/NmConfigDevice.py
index e07c0ba..718bd9f 100644
--- a/lnst/Slave/NmConfigDevice.py
+++ b/lnst/Slave/NmConfigDevice.py
@@ -105,6 +105,12 @@ class NmConfigDeviceGeneric(object):
def deconfigure(self):
pass
+ def create(self):
+ pass
+
+ def destroy(self):
+ pass
+
def slave_add(self, slave_id):
pass