From 88a6b806b18e0573c0853ad4175289ab9b2d9e5f Mon Sep 17 00:00:00 2001 From: eshulman Date: Wed, 21 Aug 2024 12:23:43 +0300 Subject: [PATCH] Replace configuration for switch interfaces - merge to replace - For most of the usecases merge is good enough but certain edge cases might be effected due to certain configuration. changed some merge statments to replaced. - allow reusing ae members --- roles/switch_config/tasks/ios_config.yml | 2 +- roles/switch_config/tasks/junos_config.yml | 71 ++++++++++++++++------ 2 files changed, 52 insertions(+), 21 deletions(-) diff --git a/roles/switch_config/tasks/ios_config.yml b/roles/switch_config/tasks/ios_config.yml index 3f5eded3b3..7ba49831b2 100644 --- a/roles/switch_config/tasks/ios_config.yml +++ b/roles/switch_config/tasks/ios_config.yml @@ -103,7 +103,7 @@ {% endfor %} cisco.ios.ios_l2_interfaces: config: "{{ interface_config | from_yaml }}" - state: merged + state: replaced - name: Save configuration cisco.ios.ios_config: diff --git a/roles/switch_config/tasks/junos_config.yml b/roles/switch_config/tasks/junos_config.yml index fd21715b34..f4176cdeac 100644 --- a/roles/switch_config/tasks/junos_config.yml +++ b/roles/switch_config/tasks/junos_config.yml @@ -65,7 +65,7 @@ {% endfor %} junipernetworks.junos.junos_l2_interfaces: config: "{{ interface_config | from_yaml }}" - state: merged + state: replaced - name: Set MTU and description for the interfaces vars: @@ -78,24 +78,55 @@ junipernetworks.junos.junos_interfaces: config: '{{ interface_config | from_yaml }}' state: merged + - name: Configure AE + when: switch_vars['interfaces'] | selectattr('aggr_members', 'defined') | list != [] + block: + - name: Empty nic config before adding to ae + vars: + interface_config: | + {% for interface in switch_vars['interfaces'] %} + {% if interface.aggr_members is defined %} + {% for member in interface.aggr_members %} + - name: "{{ member }}" + trunk: {} + {% endfor %} + {% endif %} + {% endfor %} + junipernetworks.junos.junos_l2_interfaces: + config: '{{ interface_config | from_yaml }}' + state: replaced - - name: Set aggregation for the interface - when: switch_vars['interfaces'] | selectattr('aggr_members', 'defined') != [] - vars: - interface_config: | - {% for interface in switch_vars['interfaces'] %} - {% if interface.aggr_members is defined %} - - name: "{{ interface.iface }}" - members: - {% for member in interface.aggr_members %} - - member: "{{ member }}" - {% endfor %} - mode: active - {% endif %} - {% endfor %} - junipernetworks.junos.junos_lag_interfaces: - config: '{{ interface_config | from_yaml }}' - state: merged + # eshulman: Due to module issue resorted to commands :( + - name: Clear interfaces MTU before adding to ae + vars: + interface_config: | + {% for interface in switch_vars['interfaces'] %} + {% if interface.aggr_members is defined %} + {% for member in interface.aggr_members %} + - delete interfaces "{{ member }}" mtu + - delete interfaces "{{ member }}" unit 0 + {% endfor %} + {% endif %} + {% endfor %} + junipernetworks.junos.junos_config: + lines: '{{ interface_config | from_yaml }}' + + - name: Set aggregation for the interface + vars: + interface_config: | + {% for interface in switch_vars['interfaces'] %} + {% if interface.aggr_members is defined %} + - name: "{{ interface.iface }}" + members: + {% for member in interface.aggr_members %} + - member: "{{ member }}" + {% endfor %} + mode: active + {% endif %} + {% endfor %} + junipernetworks.junos.junos_lag_interfaces: + config: '{{ interface_config | from_yaml }}' + state: replaced # For each vlan for which igmp snooping is configured, remove previous @@ -144,7 +175,7 @@ {% endfor %} junipernetworks.junos.junos_l3_interfaces: config: "{{ irb_interfaces | from_yaml }}" - state: merged + state: replaced - name: Assign irb Interface To VLAN Interface vars: @@ -156,7 +187,7 @@ {% endfor %} junipernetworks.junos.junos_vlans: config: "{{ vlan_interfaces | from_yaml }}" - state: merged + state: replaced - name: Save configuration junipernetworks.junos.junos_config: