[lnst] recipe format: <options> under <eth> moved under <slave>
Jiří Pírko
jirka at fedoraproject.org
Thu May 23 19:09:15 UTC 2013
commit aeb59d84f8258e572b80b68b506ded03649b8dbd
Author: Ondrej Lichtner <olichtne at redhat.com>
Date: Thu May 23 15:57:04 2013 +0200
recipe format: <options> under <eth> moved under <slave>
Until now when setting options of team interface slaves the options had
to be specified under the <netdevice> or <eth> tag (in the new format).
However the new format didn't accept any <options> tags under the <eth>
tag. This commit fixes that by moving the <options> tag under its
respective <slave> tag. The team configuration now looks something like
this:
<eth id="1" network="A"/>
<team id="testiface">
<options>
<option>...</option>
</options>
<slaves>
<slave id="1">
<options>
<option name="teamd_port_config">
{
"prio": -10,
"sticky": true
}
</option>
</options>
</slave>
</slaves>
<addresses>
<address>...</address>
</addresses>
</team>
This doesn't change the behaviour of <options> tag that are under the
not-eth tags.
Signed-off-by: Ondrej Lichtner <olichtne at redhat.com>
Signed-off-by: Jiri Pirko <jiri at resnulli.us>
lnst/Controller/Machine.py | 10 +++++++++-
lnst/Controller/NetTestController.py | 1 +
lnst/Controller/RecipeParse.py | 21 +++++++++++++++++++++
lnst/Slave/NetConfigCommon.py | 10 ++++++++++
lnst/Slave/NetConfigDevice.py | 5 +++--
5 files changed, 44 insertions(+), 3 deletions(-)
---
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 78f4c70..d8162fc 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -309,6 +309,7 @@ class Interface(object):
self._network = None
self._slaves = {}
+ self._slave_options = {}
self._addresses = []
self._options = []
@@ -351,6 +352,12 @@ class Interface(object):
def add_slave(self, iface):
self._slaves[iface.get_id()] = iface
+ def set_slave_options(self, slave_options):
+ self._slave_options = slave_options
+
+ def get_slave_options(self):
+ return self._slave_options
+
def add_address(self, addr):
self._addresses.append(addr)
@@ -360,7 +367,8 @@ class Interface(object):
def _get_config(self):
config = {"hwaddr": self._hwaddr, "type": self._type,
"addresses": self._addresses, "slaves": self._slaves.keys(),
- "options": self._options}
+ "options": self._options,
+ "slave_options": self._slave_options}
if self._type == "eth":
config["phys_id"] = self.get_id()
return config
diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py
index 9f1c9fa..a43c299 100644
--- a/lnst/Controller/NetTestController.py
+++ b/lnst/Controller/NetTestController.py
@@ -153,6 +153,7 @@ class NetTestController:
if "slaves" in ifconfig:
for slave_id in ifconfig["slaves"]:
iface.add_slave(machine.get_interface(slave_id))
+ iface.set_slave_options(ifconfig["slave_options"])
if "addresses" in ifconfig:
for addr in ifconfig["addresses"]:
diff --git a/lnst/Controller/RecipeParse.py b/lnst/Controller/RecipeParse.py
index 9a91a7c..8cac525 100644
--- a/lnst/Controller/RecipeParse.py
+++ b/lnst/Controller/RecipeParse.py
@@ -296,6 +296,7 @@ class InterfaceParse(LnstParser):
self._iface["options"].append((name, value))
def _slaves(self, node, params):
+ self._iface["slave_options"] = {}
self._list_init(node, params, "slaves", {"slave": self._slave})
def _slave(self, node, params):
@@ -306,6 +307,26 @@ class InterfaceParse(LnstParser):
self._iface["slaves"].append(slave_id)
+ self._iface["slave_options"][slave_id] = []
+ self._slave_opts = self._iface["slave_options"][slave_id]
+
+ scheme = {"options": self._slave_options}
+ self._process_child_nodes(node, scheme, params)
+
+ def _slave_options(self, node, params):
+ scheme = {"option": self._slave_option}
+ self._process_child_nodes(node, scheme, params)
+
+ def _slave_option(self, node, params):
+ name = self._get_attribute(node, "name")
+
+ if self._has_attribute(node, "value"):
+ value = self._get_attribute(node, "value")
+ else:
+ value = self._get_text_content(node)
+
+ self._slave_opts.append((name, value))
+
def _list_init(self, node, params, node_name, scheme):
self._iface[node_name] = []
diff --git a/lnst/Slave/NetConfigCommon.py b/lnst/Slave/NetConfigCommon.py
index f3f2f5d..c60419b 100644
--- a/lnst/Slave/NetConfigCommon.py
+++ b/lnst/Slave/NetConfigCommon.py
@@ -25,3 +25,13 @@ def get_option(netdev, opt_name):
if option == opt_name:
return value
return None
+
+def get_slave_option(netdev, slave_id, opt_name):
+ try:
+ options = netdev["slave_options"][slave_id]
+ except KeyError:
+ return None
+ for option, value in options:
+ if option == opt_name:
+ return value
+ return None
diff --git a/lnst/Slave/NetConfigDevice.py b/lnst/Slave/NetConfigDevice.py
index c781e83..d9806db 100644
--- a/lnst/Slave/NetConfigDevice.py
+++ b/lnst/Slave/NetConfigDevice.py
@@ -15,7 +15,7 @@ import logging
import re
import sys
from lnst.Common.ExecCmd import exec_cmd
-from lnst.Slave.NetConfigCommon import get_slaves, get_option
+from lnst.Slave.NetConfigCommon import get_slaves, get_option, get_slave_option
from lnst.Common.Utils import kmod_in_use, bool_it
class NetConfigDeviceGeneric:
@@ -270,7 +270,8 @@ class NetConfigDeviceTeam(NetConfigDeviceGeneric):
dev_name = self._netdev["name"]
port_netdev = self._config[slaveid]
port_name = port_netdev["name"]
- teamd_port_config = get_option(port_netdev, "teamd_port_config")
+ teamd_port_config = get_slave_option(self._netdev,
+ slaveid, "teamd_port_config")
dbus_option = "-D" if self._should_enable_dbus() else ""
if teamd_port_config:
teamd_port_config = prepare_json_str(teamd_port_config)
More information about the LNST-developers
mailing list