commit 1a487a1bbda9a5a5a0bcfd8cc9d95decb0847ed2 Author: Radek Pazdera rpazdera@redhat.com Date: Fri Jun 8 12:19:28 2012 +0200
NetConfig: Adding libteam/teamdev support
This commit introduces team device support to LNST. Example net configuration to demonstrate usage of team with LNST was added as well.
Signed-off-by: Radek Pazdera rpazdera@redhat.com
NetConfig/NetConfigDevNames.py | 6 ++++ NetConfig/NetConfigDevice.py | 36 +++++++++++++++++++++++++++- NetConfig/NetConfigParse.py | 2 +- example_recipes/net_configs/team1.xml | 42 +++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 2 deletions(-) --- diff --git a/NetConfig/NetConfigDevNames.py b/NetConfig/NetConfigDevNames.py index a8636f6..8522e00 100644 --- a/NetConfig/NetConfigDevNames.py +++ b/NetConfig/NetConfigDevNames.py @@ -76,6 +76,9 @@ class NetConfigDevNames: def _assign_name_macvlan(self, netdev, config): self._assign_name_generic("t_macvlan", netdev, config)
+ def _assign_name_team(self, netdev, config): + self._assign_name_generic("t_team", netdev, config) + def _assign_name_vlan(self, netdev, config): real_netdev = config[netdev["slaves"][0]] vlan_tci = get_option(netdev, "vlan_tci") @@ -95,6 +98,9 @@ class NetConfigDevNames: self._assign_name_bridge(netdev, config) elif dev_type == "macvlan": self._assign_name_macvlan(netdev, config) + elif dev_type == "team": + self._assign_name_team(netdev, config) + ''' In second round assign names for vlans as they use previously assigned names diff --git a/NetConfig/NetConfigDevice.py b/NetConfig/NetConfigDevice.py index e024db7..be8e673 100644 --- a/NetConfig/NetConfigDevice.py +++ b/NetConfig/NetConfigDevice.py @@ -212,12 +212,46 @@ class NetConfigDeviceVlan(NetConfigDeviceGeneric): else: exec_cmd("vconfig rem %s" % dev_name)
+class NetConfigDeviceTeam(NetConfigDeviceGeneric): + _pidfile = None + + def _slaves_up(self): + for slaveid in get_slaves(self._netdev): + slavenetdev = self._config[slaveid] + NetConfigDevice(slavenetdev, self._config).up() + + def _slaves_down(self): + for slaveid in get_slaves(self._netdev): + slavenetdev = self._config[slaveid] + NetConfigDevice(slavenetdev, self._config).down() + + def configure(self): + self._slaves_down() + + teamd_config = get_option(self._netdev, "teamd_config") + teamd_config = teamd_config.replace('"', '\"') + + dev_name = self._netdev["name"] + pidfile = "/var/run/teamd_%s.pid" % dev_name + + exec_cmd("teamd -r -d -c "%s" -t %s -p %s" % (teamd_config, dev_name, pidfile)) + + self._pidfile = pidfile + + def deconfigure(self): + dev_name = self._netdev["name"] + pidfile = "/var/run/teamd_%s.pid" % dev_name + + exec_cmd("teamd -k -p %s" % pidfile) + self._slaves_up() + type_class_mapping = { "eth": NetConfigDeviceEth, "bond": NetConfigDeviceBond, "bridge": NetConfigDeviceBridge, "macvlan": NetConfigDeviceMacvlan, - "vlan": NetConfigDeviceVlan + "vlan": NetConfigDeviceVlan, + "team": NetConfigDeviceTeam }
def NetConfigDevice(netdev, config): diff --git a/NetConfig/NetConfigParse.py b/NetConfig/NetConfigParse.py index ff148e5..9097e88 100644 --- a/NetConfig/NetConfigParse.py +++ b/NetConfig/NetConfigParse.py @@ -192,7 +192,7 @@ class NetConfigParse:
if dev_type == "eth": pass - elif dev_type in ["bond", "bridge", "vlan", "macvlan"]: + elif dev_type in ["bond", "bridge", "vlan", "macvlan", "team"]: self._parse_options(netdev, dom_netdev, config) self._parse_slaves(netdev, dom_netdev, config) else: diff --git a/example_recipes/net_configs/team1.xml b/example_recipes/net_configs/team1.xml new file mode 100644 index 0000000..4bebf13 --- /dev/null +++ b/example_recipes/net_configs/team1.xml @@ -0,0 +1,42 @@ +<netconfig> + <netdevice id="1" type="eth" phys_id="1" /> + <netdevice id="2" type="eth" phys_id="2" /> + <netdevice id="5" type="team"> + <options> + <!-- Team device name can be omitted from teamd config, + because it will be overridden by LNST anyway. --> + <option name="teamd_config"> + { + "runner": {"name": "roundrobin"}, + "ports": {"eth1": {}, "eth2": {}} + } + </option> + </options> + <slaves> + <slave id="1" /> + <slave id="2" /> + </slaves> + <addresses> + <address value="192.168.122.200/24" /> + </addresses> + </netdevice> + <netdevice id="3" type="eth" phys_id="3" /> + <netdevice id="4" type="eth" phys_id="4" /> + <netdevice id="6" type="team"> + <options> + <option name="teamd_config"> + { + "runner": {"name": "roundrobin"}, + "ports": {"eth3": {}, "eth4": {}} + } + </option> + </options> + <slaves> + <slave id="3" /> + <slave id="4" /> + </slaves> + <addresses> + <address value="192.168.122.210/24" /> + </addresses> + </netdevice> +</netconfig>
lnst-developers@lists.fedorahosted.org