diff options
| -rw-r--r-- | python/vyos/ifconfig/vpp/bond.py | 18 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_bonding.py | 13 |
2 files changed, 26 insertions, 5 deletions
diff --git a/python/vyos/ifconfig/vpp/bond.py b/python/vyos/ifconfig/vpp/bond.py index b3bcce449..cece5560d 100644 --- a/python/vyos/ifconfig/vpp/bond.py +++ b/python/vyos/ifconfig/vpp/bond.py @@ -17,6 +17,7 @@ from vyos.ifconfig import Interface from vyos.ifconfig.vpp.interface import VPPInterface +from vyos.utils.dict import dict_search class VPPBondInterface(Interface, VPPInterface): @@ -135,13 +136,24 @@ class VPPBondInterface(Interface, VPPInterface): # Delete bonding interface self.delete_bond() + self.index = None + def update(self, config): # Add bond interface - self.add_bond() + if self.index is None: + self.add_bond() + + # Delete removed members + members = self.get_members() + config_members = dict_search('member.interface', config, default=[]) + for member in members: + if member not in config_members: + self.detach_member(interface=member) # Add members to bond - for member in config.get('member', {}).get('interface', []): - self.add_member(interface=member) + for member in config_members: + if member not in members: + self.add_member(interface=member) # Apply VPP-specific interface settings VPPInterface.update(self, config) diff --git a/src/conf_mode/vpp_interfaces_bonding.py b/src/conf_mode/vpp_interfaces_bonding.py index c7fd43bb4..932287a03 100644 --- a/src/conf_mode/vpp_interfaces_bonding.py +++ b/src/conf_mode/vpp_interfaces_bonding.py @@ -18,6 +18,7 @@ from vyos.config import Config from vyos.configdict import get_interface_dict +from vyos.configdict import is_node_changed from vyos.configdep import set_dependents, call_dependents from vyos.configverify import verify_mtu_ipv6 from vyos import ConfigError @@ -108,6 +109,12 @@ def get_config(config=None) -> dict: no_tag_node_value_mangle=True, ) + iface_path = ['interfaces', 'vpp', 'bonding', ifname] + rebuild_required_nodes = ['mode', 'hash-policy', 'mac'] + for node in rebuild_required_nodes: + if is_node_changed(conf, iface_path + [node]): + config.update({'rebuild_required': {}}) + config['bond_members'] = deps_bond_dict(conf) # Dependency @@ -225,10 +232,12 @@ def apply(config): ifname = config.get('ifname') bond = VPPBondInterface(ifname, config) - bond.remove() + + if 'deleted' in config or 'rebuild_required' in config: + bond.remove() if 'deleted' in config: - return + return None bond.update(config) |
