5a6b893240
* Decouple config and state check in {network_os }_vlan and { network_os }_vrf modules Fixes #35567 Fixes #34754 `interfaces` option is used for configuration as well as operational state check. If interface is configured to given vlan or vrf but if operational state of interface is disabled it results in module failure. Fix is to decouple same option usage for config and state. With this fix `interfaces` is used as config option and a new option named `associated_interfaces` will be used for intent check for assigned interfaces. * Fix CI failures * Fix review comment * Fixed integration test failure
238 lines
5.5 KiB
YAML
238 lines
5.5 KiB
YAML
---
|
|
- debug: msg="START cli/basic.yaml on connection={{ ansible_connection }}"
|
|
|
|
- set_fact: switch_type="{{ switch_type }}"
|
|
|
|
- block:
|
|
|
|
- name: setup - remove vlan used in test
|
|
ios_config:
|
|
lines:
|
|
- no vlan 100
|
|
- no vlan 200
|
|
- no vlan 300
|
|
provider: "{{ cli }}"
|
|
|
|
- name: setup - remove switchport settings on interfaces used in test
|
|
ios_config:
|
|
lines:
|
|
- switchport mode access
|
|
- no switchport access vlan 100
|
|
provider: "{{ cli }}"
|
|
parents: "{{ item }}"
|
|
loop:
|
|
- interface GigabitEthernet0/1
|
|
- interface GigabitEthernet0/2
|
|
|
|
- name: create vlan
|
|
ios_vlan: &create
|
|
vlan_id: 100
|
|
name: test-vlan
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vlan 100' in result.commands"
|
|
- "'name test-vlan' in result.commands"
|
|
|
|
- name: create vlan(idempotence)
|
|
ios_vlan: *create
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
|
|
- name: Add interfaces to vlan
|
|
ios_vlan: &interfaces
|
|
vlan_id: 100
|
|
interfaces:
|
|
- GigabitEthernet0/1
|
|
- GigabitEthernet0/2
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'interface GigabitEthernet0/1' in result.commands"
|
|
- "'switchport mode access' in result.commands"
|
|
- "'switchport access vlan 100' in result.commands"
|
|
- "'interface GigabitEthernet0/2' in result.commands"
|
|
- "'switchport mode access' in result.commands"
|
|
- "'switchport access vlan 100' in result.commands"
|
|
|
|
- name: Add interfaces to vlan(idempotence)
|
|
ios_vlan: *interfaces
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
|
|
- name: Check interface assigned to vrf (intent)
|
|
ios_vlan:
|
|
vlan_id: 100
|
|
associated_interfaces:
|
|
- GigabitEthernet0/1
|
|
- GigabitEthernet0/2
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.failed == false"
|
|
|
|
- name: Check interface assigned to vrf (fail)
|
|
ios_vlan:
|
|
vlan_id: 100
|
|
associated_interfaces:
|
|
- test
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.failed == True"
|
|
|
|
- name: Remove interface from vlan
|
|
ios_vlan: &single_int
|
|
vlan_id: 100
|
|
interfaces:
|
|
- GigabitEthernet0/1
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vlan 100' in result.commands"
|
|
- "'interface GigabitEthernet0/2' in result.commands"
|
|
- "'switchport mode access' in result.commands"
|
|
- "'no switchport access vlan 100' in result.commands"
|
|
|
|
- name: Remove interface from vlan(idempotence)
|
|
ios_vlan: *single_int
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
|
|
- name: Suspend vlan
|
|
ios_vlan:
|
|
vlan_id: 100
|
|
state: suspend
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vlan 100' in result.commands"
|
|
- "'state suspend' in result.commands"
|
|
|
|
- name: Unsuspend vlan
|
|
ios_vlan:
|
|
vlan_id: 100
|
|
state: active
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vlan 100' in result.commands"
|
|
- "'state active' in result.commands"
|
|
|
|
- name: delete vlan
|
|
ios_vlan: &delete
|
|
vlan_id: 100
|
|
provider: "{{ cli }}"
|
|
state: absent
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'no vlan 100' in result.commands"
|
|
|
|
- name: delete vlan(idempotence)
|
|
ios_vlan: *delete
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
|
|
- name: create vlans using aggregate
|
|
ios_vlan: &create_aggregate
|
|
aggregate:
|
|
- { vlan_id: 200, name: vlan-200 }
|
|
- { vlan_id: 300, name: vlan-300 }
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vlan 200' in result.commands"
|
|
- "'name vlan-200' in result.commands"
|
|
- "'vlan 300' in result.commands"
|
|
- "'name vlan-300' in result.commands"
|
|
|
|
- name: create vlans using aggregate(idempotence)
|
|
ios_vlan: *create_aggregate
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
|
|
- name: delete vlans using aggregate
|
|
ios_vlan: &delete_aggregate
|
|
aggregate:
|
|
- { vlan_id: 200, name: vlan-200 }
|
|
- { vlan_id: 300, name: vlan-300 }
|
|
state: absent
|
|
provider: "{{ cli }}"
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'no vlan 200' in result.commands"
|
|
- "'no vlan 300' in result.commands"
|
|
|
|
- name: delete vlans using aggregate(idempotence)
|
|
ios_vlan: *delete_aggregate
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
|
|
- name: teardown(part1)
|
|
ios_config:
|
|
lines:
|
|
- no vlan 100
|
|
- no vlan 200
|
|
- no vlan 300
|
|
provider: "{{ cli }}"
|
|
|
|
- name: teardown(part2)
|
|
ios_config:
|
|
lines:
|
|
- switchport mode access
|
|
- no switchport access vlan 100
|
|
provider: "{{ cli }}"
|
|
parents: "{{ item }}"
|
|
loop:
|
|
- interface GigabitEthernet0/1
|
|
- interface GigabitEthernet0/2
|
|
|
|
when: switch_type == 'L2'
|
|
|
|
- debug: msg="END cli/basic.yaml on connection={{ ansible_connection }}"
|