From 8e36626e3ed41793c79d95951be6000d9b1e480e Mon Sep 17 00:00:00 2001
From: Maksim Malchuk <maksim.malchuk@gmail.com>
Date: Thu, 2 Dec 2021 16:09:28 +0300
Subject: [PATCH] Add the bonding 802.3ad aggregation selection option

Change-Id: I863e18841924e88c8943c1df0c6753fd90c90ef3
Signed-off-by: Maksim Malchuk <maksim.malchuk@gmail.com>
---
 doc/source/configuration/reference/network.rst          | 4 ++++
 kayobe/plugins/filter/networkd.py                       | 2 ++
 kayobe/plugins/filter/networks.py                       | 3 +++
 releasenotes/notes/bond-ad-select-8fc711dcd54e9cea.yaml | 4 ++++
 requirements.yml                                        | 2 +-
 5 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 releasenotes/notes/bond-ad-select-8fc711dcd54e9cea.yaml

diff --git a/doc/source/configuration/reference/network.rst b/doc/source/configuration/reference/network.rst
index 0149a574..2ec400e2 100644
--- a/doc/source/configuration/reference/network.rst
+++ b/doc/source/configuration/reference/network.rst
@@ -355,6 +355,10 @@ The following attributes are supported:
     bridge.
 ``bond_mode``
     For bond interfaces, the bond's mode, e.g. 802.3ad.
+``bond_ad_select``
+    For bond interfaces, the 802.3ad aggregation selection logic to use. Valid
+    values are ``stable`` (default selection logic if not configured),
+    ``bandwidth`` or ``count``.
 ``bond_slaves``
     For bond interfaces, a list of names of network interfaces to act as slaves
     for the bond.
diff --git a/kayobe/plugins/filter/networkd.py b/kayobe/plugins/filter/networkd.py
index fc9203ab..3abb742c 100644
--- a/kayobe/plugins/filter/networkd.py
+++ b/kayobe/plugins/filter/networkd.py
@@ -139,6 +139,7 @@ def _bond_netdev(context, name, inventory_hostname):
     device = networks.net_interface(context, name, inventory_hostname)
     mtu = networks.net_mtu(context, name, inventory_hostname)
     mode = networks.net_bond_mode(context, name, inventory_hostname)
+    ad_select = networks.net_bond_ad_select(context, name, inventory_hostname)
     miimon = networks.net_bond_miimon(context, name, inventory_hostname)
     updelay = networks.net_bond_updelay(context, name, inventory_hostname)
     downdelay = networks.net_bond_downdelay(context, name, inventory_hostname)
@@ -156,6 +157,7 @@ def _bond_netdev(context, name, inventory_hostname):
         {
             'Bond': [
                 {'Mode': mode},
+                {'AdSelect': ad_select},
                 {'TransmitHashPolicy': xmit_hash_policy},
                 {'LACPTransmitRate': lacp_rate},
                 {'MIIMonitorSec': _ms_to_s(miimon)},
diff --git a/kayobe/plugins/filter/networks.py b/kayobe/plugins/filter/networks.py
index f7681e72..178d1d7e 100644
--- a/kayobe/plugins/filter/networks.py
+++ b/kayobe/plugins/filter/networks.py
@@ -276,6 +276,7 @@ def net_bridge_ports(context, name, inventory_hostname=None):
 
 
 net_bond_mode = _make_attr_filter('bond_mode')
+net_bond_ad_select = _make_attr_filter('bond_ad_select')
 net_bond_slaves = _make_attr_filter('bond_slaves')
 net_bond_miimon = _make_attr_filter('bond_miimon')
 net_bond_updelay = _make_attr_filter('bond_updelay')
@@ -448,6 +449,7 @@ def net_bond_obj(context, name, inventory_hostname=None):
     vlan = net_vlan(context, name, inventory_hostname)
     mtu = net_mtu(context, name, inventory_hostname)
     mode = net_bond_mode(context, name, inventory_hostname)
+    ad_select = net_bond_ad_select(context, name, inventory_hostname)
     slaves = net_bond_slaves(context, name, inventory_hostname)
     miimon = net_bond_miimon(context, name, inventory_hostname)
     updelay = net_bond_updelay(context, name, inventory_hostname)
@@ -475,6 +477,7 @@ def net_bond_obj(context, name, inventory_hostname=None):
         'mtu': mtu,
         'bond_slaves': slaves,
         'bond_mode': mode,
+        'bond_ad_select': ad_select,
         'bond_miimon': miimon,
         'bond_updelay': updelay,
         'bond_downdelay': downdelay,
diff --git a/releasenotes/notes/bond-ad-select-8fc711dcd54e9cea.yaml b/releasenotes/notes/bond-ad-select-8fc711dcd54e9cea.yaml
new file mode 100644
index 00000000..65a0d7e2
--- /dev/null
+++ b/releasenotes/notes/bond-ad-select-8fc711dcd54e9cea.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Add the bonding 802.3ad aggregation selection option.
diff --git a/requirements.yml b/requirements.yml
index 691240d4..db7c3d7c 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -14,7 +14,7 @@ roles:
     # There are no versioned releases of this role.
     version: 29871bf3279ef95fc8f7339b9abd13f869980750
   - src: MichaelRigart.interfaces
-    version: v1.12.0
+    version: v1.13.0
   - src: mrlesmithjr.chrony
     version: v0.1.4
   - src: mrlesmithjr.manage-lvm
-- 
GitLab