From 6e21be23be126af259f07bb23e4893470b5cb2fb Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Thu, 19 Sep 2019 22:20:46 +0200
Subject: Python/ifconfig: T1666: re-activate physical interfaces on bond
 deletion

When a bond member gets deleted, all members are placed in A/D state even when
they are enabled in the CLI.
---
 python/vyos/ifconfig.py | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

(limited to 'python')

diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py
index 0793fad39..750a7cc70 100644
--- a/python/vyos/ifconfig.py
+++ b/python/vyos/ifconfig.py
@@ -1057,6 +1057,36 @@ class BondIf(EthernetIf):
     def __init__(self, ifname):
         super().__init__(ifname, type='bond')
 
+    def remove(self):
+        """
+        Remove interface from operating system. Removing the interface
+        deconfigures all assigned IP addresses and clear possible DHCP(v6)
+        client processes.
+        Example:
+        >>> from vyos.ifconfig import Interface
+        >>> i = Interface('eth0')
+        >>> i.remove()
+        """
+        # when a bond member gets deleted, all members are placed in A/D state
+        # even when they are enabled inside CLI. This will make the config
+        # and system look async.
+        slave_list = []
+        for s in self.get_slaves():
+            slave = {
+                'ifname' : s,
+                'state': Interface(s).state
+            }
+            slave_list.append(slave)
+
+        # remove bond master which places members in disabled state
+        super().remove()
+
+        # replicate previous interface state before bond destruction back to
+        # physical interface
+        for slave in slave_list:
+             i = Interface(slave['ifname'])
+             i.state = slave['state']
+
     @property
     def xmit_hash_policy(self):
         """
-- 
cgit v1.2.3