From 119352b53886fe411434248ecdac2e5d1816442b Mon Sep 17 00:00:00 2001 From: Trishna Guha Date: Tue, 3 Apr 2018 02:53:44 -0400 Subject: [PATCH] nxos_vlan purge (#38202) Signed-off-by: Trishna Guha --- lib/ansible/modules/network/nxos/nxos_vlan.py | 16 ++++++++++++++ .../targets/nxos_vlan/tests/common/agg.yaml | 21 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/ansible/modules/network/nxos/nxos_vlan.py b/lib/ansible/modules/network/nxos/nxos_vlan.py index 347d0cc480c..94eded7192b 100644 --- a/lib/ansible/modules/network/nxos/nxos_vlan.py +++ b/lib/ansible/modules/network/nxos/nxos_vlan.py @@ -83,6 +83,7 @@ options: purge: description: - Purge VLANs not defined in the I(aggregate) parameter. + This parameter can be used without aggregate as well. type: bool default: 'no' delay: @@ -131,6 +132,14 @@ EXAMPLES = ''' aggregate: - { vlan_id: 4000, mode: ce } - { vlan_id: 4001, name: vlan-4001 } + +- name: purge vlans - removes all other vlans except the ones mentioned in aggregate) + nxos_vlan: + aggregate: + - vlan_id: 1 + - vlan_id: 4001 + purge: yes + ''' RETURN = ''' @@ -184,6 +193,7 @@ def is_default_name(obj, vlan_id): def map_obj_to_commands(updates, module, os_platform): commands = list() + purge = module.params['purge'] want, have = updates for w in want: @@ -307,6 +317,12 @@ def map_obj_to_commands(updates, module, os_platform): commands.append('switchport mode access') commands.append('no switchport access vlan {0}'.format(vlan_id)) + if purge: + for h in have: + obj_in_want = search_obj_in_list(h['vlan_id'], want) + if not obj_in_want: + commands.append('no vlan {0}'.format(h['vlan_id'])) + return commands diff --git a/test/integration/targets/nxos_vlan/tests/common/agg.yaml b/test/integration/targets/nxos_vlan/tests/common/agg.yaml index 3d4fc4b5155..07d95de6b5e 100644 --- a/test/integration/targets/nxos_vlan/tests/common/agg.yaml +++ b/test/integration/targets/nxos_vlan/tests/common/agg.yaml @@ -63,6 +63,27 @@ that: - 'result.changed == false' +- name: purge + nxos_vlan: &purge + vlan_id: 1 + purge: yes + provider: "{{ connection }}" + register: result + +- assert: + that: + - 'result.changed == true' + - '"no vlan 102" in result.commands' + - '"no vlan 103" in result.commands' + +- name: purge - Idempotence + nxos_vlan: *purge + register: result + +- assert: + that: + - 'result.changed == false' + - name: teardown nxos_config: *rm ignore_errors: yes