diff --git a/lib/ansible/modules/network/nxos/nxos_vlan.py b/lib/ansible/modules/network/nxos/nxos_vlan.py index 347d0cc480cf0b..94eded7192b5ca 100644 --- a/lib/ansible/modules/network/nxos/nxos_vlan.py +++ b/lib/ansible/modules/network/nxos/nxos_vlan.py @@ -83,6 +83,7 @@ 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 @@ 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 3d4fc4b515563b..07d95de6b5ea77 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