1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

fix nxos_vlan and nxos_switchport issues (#27505)

This commit is contained in:
saichint 2017-08-01 13:27:12 -07:00 committed by Nathaniel Case
parent a52a4332fd
commit 37392318a6
19 changed files with 378 additions and 5 deletions

View file

@ -307,7 +307,7 @@ def get_switchport_config_commands(interface, existing, proposed, module):
commands.append(command) commands.append(command)
if proposed_mode == 'access': if proposed_mode == 'access':
av_check = existing.get('access_vlan') == proposed.get('access_vlan') av_check = str(existing.get('access_vlan')) == str(proposed.get('access_vlan'))
if not av_check: if not av_check:
command = 'switchport access vlan {0}'.format(proposed.get('access_vlan')) command = 'switchport access vlan {0}'.format(proposed.get('access_vlan'))
commands.append(command) commands.append(command)
@ -328,7 +328,7 @@ def get_switchport_config_commands(interface, existing, proposed, module):
command = 'switchport trunk allowed vlan add {0}'.format(proposed.get('trunk_vlans')) command = 'switchport trunk allowed vlan add {0}'.format(proposed.get('trunk_vlans'))
commands.append(command) commands.append(command)
native_check = existing.get('native_vlan') == proposed.get('native_vlan') native_check = str(existing.get('native_vlan')) == str(proposed.get('native_vlan'))
if not native_check and proposed.get('native_vlan'): if not native_check and proposed.get('native_vlan'):
command = 'switchport trunk native vlan {0}'.format(proposed.get('native_vlan')) command = 'switchport trunk native vlan {0}'.format(proposed.get('native_vlan'))
commands.append(command) commands.append(command)
@ -347,8 +347,8 @@ def is_switchport_default(existing):
vlan 1 and trunk all and mode is access vlan 1 and trunk all and mode is access
""" """
c1 = existing['access_vlan'] == '1' c1 = str(existing['access_vlan']) == '1'
c2 = existing['native_vlan'] == '1' c2 = str(existing['native_vlan']) == '1'
c3 = existing['trunk_vlans'] == '1-4094' c3 = existing['trunk_vlans'] == '1-4094'
c4 = existing['mode'] == 'access' c4 = existing['mode'] == 'access'
@ -578,5 +578,6 @@ def main():
module.exit_json(**results) module.exit_json(**results)
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View file

@ -370,6 +370,9 @@ def main():
if existing.get('mapped_vni'): if existing.get('mapped_vni'):
if (existing.get('mapped_vni') != proposed.get('mapped_vni') and if (existing.get('mapped_vni') != proposed.get('mapped_vni') and
existing.get('mapped_vni') != '0' and proposed.get('mapped_vni') != 'default'): existing.get('mapped_vni') != '0' and proposed.get('mapped_vni') != 'default'):
if state == 'absent':
commands = ['vlan ' + vlan_id, 'no vn-segment', 'no vlan ' + vlan_id]
else:
commands.insert(1, 'no vn-segment') commands.insert(1, 'no vn-segment')
if module.check_mode: if module.check_mode:
module.exit_json(changed=True, commands=commands) module.exit_json(changed=True, commands=commands)

View file

@ -213,6 +213,24 @@
failed_modules: "{{ failed_modules }} + [ 'nxos_portchannel' ]" failed_modules: "{{ failed_modules }} + [ 'nxos_portchannel' ]"
test_failed: true test_failed: true
- block:
- include_role:
name: nxos_vlan
when: "limit_to in ['*', 'nxos_vlan']"
rescue:
- set_fact:
failed_modules: "{{ failed_modules }} + [ 'nxos_vlan' ]"
test_failed: true
- block:
- include_role:
name: nxos_switchport
when: "limit_to in ['*', 'nxos_switchport']"
rescue:
- set_fact:
failed_modules: "{{ failed_modules }} + [ 'nxos_switchport' ]"
test_failed: true
- block: - block:
- include_role: - include_role:
name: nxos_vxlan_vtep name: nxos_vxlan_vtep

View file

@ -0,0 +1,2 @@
---
testcase: "*"

View file

@ -0,0 +1,2 @@
dependencies:
- prepare_nxos_tests

View file

@ -0,0 +1,15 @@
---
- name: collect all cli test cases
find:
paths: "{{ role_path }}/tests/cli"
patterns: "{{ testcase }}.yaml"
register: test_cases
- name: set test_items
set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
- name: run test case
include: "{{ test_case_to_run }}"
with_items: "{{ test_items }}"
loop_control:
loop_var: test_case_to_run

View file

@ -0,0 +1,3 @@
---
- { include: cli.yaml, tags: ['cli'] }
- { include: nxapi.yaml, tags: ['nxapi'] }

View file

@ -0,0 +1,28 @@
---
- name: collect all nxapi test cases
find:
paths: "{{ role_path }}/tests/nxapi"
patterns: "{{ testcase }}.yaml"
register: test_cases
- name: set test_items
set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
- name: enable nxapi
nxos_config:
lines:
- feature nxapi
- nxapi http port 80
provider: "{{ cli }}"
- name: run test case
include: "{{ test_case_to_run }}"
with_items: "{{ test_items }}"
loop_control:
loop_var: test_case_to_run
- name: disable nxapi
nxos_config:
lines:
- no feature nxapi
provider: "{{ cli }}"

View file

@ -0,0 +1,4 @@
---
- set_fact: connection="{{ cli }}"
- import_tasks: targets/nxos_switchport/tests/common/sanity.yaml

View file

@ -0,0 +1,130 @@
---
- debug: msg="START TRANSPORT:{{ connection.transport }} nxos_switchport sanity test"
# Select interface for test
- set_fact: intname="{{ nxos_int1 }}"
- name: "Interface selected for this test"
debug: msg="{{ intname }}"
- name: "Setup interface"
nxos_config: &default
lines:
- "default interface {{ intname }}"
provider: "{{ connection }}"
ignore_errors: yes
- name: "Setup vlans"
nxos_vlan:
vlan_range: "5-10,20"
provider: "{{ connection }}"
- block:
- name: Ensure interface is in L2 state
nxos_interface:
interface: "{{ intname }}"
mode: 'layer2'
provider: "{{ connection }}"
- name: Ensure interface is in its default switchport state
nxos_switchport: &def_swi
interface: "{{ intname }}"
state: unconfigured
provider: "{{ connection }}"
- name: Ensure interface is configured for access vlan 20
nxos_switchport: &acc_vl
interface: "{{ intname }}"
mode: access
access_vlan: 20
provider: "{{ connection }}"
register: result
- assert: &true
that:
- "result.changed == true"
- name: "access vlan Idempotence"
nxos_switchport: *acc_vl
register: result
- assert: &false
that:
- "result.changed == false"
- name: Ensure interface only has vlans 5-10 as trunk vlans
nxos_switchport: &tr_vl
interface: "{{ intname }}"
mode: trunk
native_vlan: 10
trunk_allowed_vlans: 5-10
provider: "{{ connection }}"
register: result
- assert: *true
- name: "trunk vlan Idempotence"
nxos_switchport: *tr_vl
register: result
- assert: *false
- name: Ensure interface is a trunk port and ensure 2-50 are being tagged (doesn't mean others aren't also being tagged)
nxos_switchport: &tag
interface: "{{ intname }}"
mode: trunk
native_vlan: 10
trunk_vlans: 2-50
provider: "{{ connection }}"
register: result
- assert: *true
- name: "tag vlan Idempotence"
nxos_switchport: *tag
register: result
- assert: *false
- name: Ensure these VLANs are not being tagged on the trunk
nxos_switchport: &no_tag
interface: "{{ intname }}"
mode: trunk
trunk_vlans: 30-4094
state: absent
provider: "{{ connection }}"
register: result
- assert: *true
- name: "no tag vlan Idempotence"
nxos_switchport: *no_tag
register: result
- assert: *false
- name: put interface default state
nxos_switchport: *def_swi
register: result
- assert: *true
- name: "default state idempotence"
nxos_switchport: *def_swi
register: result
- assert: *false
always:
- name: "remove vlans"
nxos_vlan:
vlan_range: "5-10,20"
state: absent
provider: "{{ connection }}"
ignore_errors: yes
- name: "default interface"
nxos_config: *default
ignore_errors: yes
- debug: msg="END TRANSPORT:{{ connection.transport }} nxos_switchport sanity test"

View file

@ -0,0 +1,4 @@
---
- set_fact: connection="{{ nxapi }}"
- import_tasks: targets/nxos_switchport/tests/common/sanity.yaml

View file

@ -0,0 +1,2 @@
---
testcase: "*"

View file

@ -0,0 +1,2 @@
dependencies:
- prepare_nxos_tests

View file

@ -0,0 +1,15 @@
---
- name: collect all cli test cases
find:
paths: "{{ role_path }}/tests/cli"
patterns: "{{ testcase }}.yaml"
register: test_cases
- name: set test_items
set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
- name: run test case
include: "{{ test_case_to_run }}"
with_items: "{{ test_items }}"
loop_control:
loop_var: test_case_to_run

View file

@ -0,0 +1,3 @@
---
- { include: cli.yaml, tags: ['cli'] }
- { include: nxapi.yaml, tags: ['nxapi'] }

View file

@ -0,0 +1,28 @@
---
- name: collect all nxapi test cases
find:
paths: "{{ role_path }}/tests/nxapi"
patterns: "{{ testcase }}.yaml"
register: test_cases
- name: set test_items
set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
- name: enable nxapi
nxos_config:
lines:
- feature nxapi
- nxapi http port 80
provider: "{{ cli }}"
- name: run test case
include: "{{ test_case_to_run }}"
with_items: "{{ test_items }}"
loop_control:
loop_var: test_case_to_run
- name: disable nxapi
nxos_config:
lines:
- no feature nxapi
provider: "{{ cli }}"

View file

@ -0,0 +1,4 @@
---
- set_fact: connection="{{ cli }}"
- import_tasks: targets/nxos_vlan/tests/common/sanity.yaml

View file

@ -0,0 +1,105 @@
---
- debug: msg="START TRANSPORT:{{ connection.transport }} nxos_vlan sanity test"
- block:
- name: "Enable feature vn segment"
nxos_config:
commands:
- feature vn-segment-vlan-based
provider: "{{ connection }}"
match: none
when: platform | search('N9K')
- name: Ensure a range of VLANs are present on the switch
nxos_vlan: &conf_vlan
vlan_range: "2-10,20,50,55-60,100-150"
provider: "{{ connection }}"
register: result
- assert: &true
that:
- "result.changed == true"
- name: "Vlan Idempotence"
nxos_vlan: *conf_vlan
register: result
- assert: &false
that:
- "result.changed == false"
- name: Ensure VLAN 50 exists with the name WEB and is in the shutdown state
nxos_vlan: &web1
vlan_id: 50
vlan_state: suspend
admin_state: down
name: WEB
mapped_vni: 5555
provider: "{{ connection }}"
register: result
when: platform | search('N9K')
- assert: *true
when: platform | search('N9K')
- name: "web Idempotence"
nxos_vlan: *web1
register: result
when: platform | search('N9K')
- assert: *false
when: platform | search('N9K')
- name: Ensure VLAN 50 exists with the name WEB and is in the shutdown state
nxos_vlan: &web2
vlan_id: 50
vlan_state: suspend
admin_state: down
name: WEB
provider: "{{ connection }}"
register: result
when: platform | search('N3K|N7K')
- assert: *true
when: platform | search('N3K|N7K')
- name: "web Idempotence"
nxos_vlan: *web2
register: result
when: platform | search('N3K|N7K')
- assert: *false
when: platform | search('N3K|N7K')
- name: Ensure VLAN is NOT on the device
nxos_vlan: &no_vlan
vlan_id: 50
state: absent
provider: "{{ connection }}"
register: result
- assert: *true
- name: "no vlan Idempotence"
nxos_vlan: *no_vlan
register: result
- assert: *false
always:
- name: remove vlans
nxos_vlan:
vlan_range: "2-10,20,50,55-60,100-150"
state: absent
provider: "{{ connection }}"
ignore_errors: yes
- name: "Disable feature vn segement"
nxos_feature:
feature: vn-segment-vlan-based
state: disabled
provider: "{{ connection }}"
ignore_errors: yes
when: platform | search('N9K')
- debug: msg="END TRANSPORT:{{ connection.transport }} nxos_vlan sanity test"

View file

@ -0,0 +1,4 @@
---
- set_fact: connection="{{ nxapi }}"
- import_tasks: targets/nxos_vlan/tests/common/sanity.yaml