d60eac9bc4
* 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
(cherry picked from commit 5a6b893240
)
313 lines
7.3 KiB
YAML
313 lines
7.3 KiB
YAML
---
|
|
|
|
- name: setup - remove vrf
|
|
eos_vrf:
|
|
name: "{{ item }}"
|
|
state: absent
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
with_items:
|
|
- test
|
|
- test1
|
|
- test2
|
|
- test3
|
|
- test4
|
|
- test5
|
|
|
|
- name: Create vrf
|
|
eos_vrf:
|
|
name: test
|
|
rd: 1:200
|
|
state: present
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vrf definition test' in result.commands"
|
|
- "'rd 1:200' in result.commands"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "'ansible_1' in result.session_name"
|
|
|
|
- name: Create vrf again (idempotent)
|
|
eos_vrf:
|
|
name: test
|
|
rd: 1:200
|
|
state: present
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
- "result.commands | length == 0"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "result.session_name is not defined"
|
|
|
|
- name: Modify rd
|
|
eos_vrf:
|
|
name: test
|
|
rd: 1:201
|
|
state: present
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vrf definition test' in result.commands"
|
|
- "'rd 1:201' in result.commands"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "'ansible_1' in result.session_name"
|
|
|
|
- name: Modify rd again (idempotent)
|
|
eos_vrf:
|
|
name: test
|
|
rd: 1:201
|
|
state: present
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
- "result.commands | length == 0"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "result.session_name is not defined"
|
|
|
|
- name: Add Ethernet2 to vrf and check interface assigned state
|
|
eos_vrf:
|
|
name: test
|
|
rd: 1:201
|
|
state: present
|
|
authorize: yes
|
|
interfaces:
|
|
- Ethernet2
|
|
associated_interfaces:
|
|
- Ethernet2
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'interface ethernet2' in result.commands"
|
|
- "'vrf forwarding test' in result.commands"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "'ansible_1' in result.session_name"
|
|
|
|
- name: Add Ethernet2 to vrf again (idempotent)
|
|
eos_vrf:
|
|
name: test
|
|
rd: 1:201
|
|
state: present
|
|
authorize: yes
|
|
interfaces:
|
|
- ethernet 2 # interface name modified to test case insensitive and space scenario
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
- "result.commands | length == 0"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "'session_name' not in result.commands"
|
|
|
|
- name: vrf interface intent fail
|
|
eos_vrf:
|
|
name: test
|
|
state: present
|
|
authorize: yes
|
|
associated_interfaces:
|
|
- test
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
ignore_errors: yes
|
|
|
|
- assert:
|
|
that:
|
|
- "result.failed == True"
|
|
|
|
- name: Add multiple interfaces to vrf
|
|
eos_vrf:
|
|
name: test1
|
|
rd: 1:202
|
|
state: present
|
|
authorize: yes
|
|
interfaces:
|
|
- loopback10
|
|
- loopback11
|
|
- loopback12
|
|
- loopback13
|
|
- loopback14
|
|
- loopback15
|
|
- loopback1000
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'interface loopback10' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'interface loopback11' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'interface loopback12' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'interface loopback13' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'interface loopback14' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'interface loopback15' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'interface loopback1000' in result.commands"
|
|
- "'vrf forwarding test1' in result.commands"
|
|
- "'ansible_1' in result.session_name"
|
|
|
|
- name: Add multiple interfaces to vrf (idempotent)
|
|
eos_vrf:
|
|
name: test1
|
|
rd: 1:202
|
|
state: present
|
|
authorize: yes
|
|
interfaces:
|
|
- loopback10
|
|
- loopback11
|
|
- loopback12
|
|
- loopback13
|
|
- loopback14
|
|
- loopback15
|
|
- loopback1000
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
- "result.commands | length == 0"
|
|
|
|
- name: Create aggregate of VRFs
|
|
eos_vrf:
|
|
aggregate:
|
|
- { name: test2, rd: "1:202" }
|
|
- { name: test3, rd: "1:203" }
|
|
state: present
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vrf definition test2' in result.commands"
|
|
- "'rd 1:202' in result.commands"
|
|
- "'vrf definition test3' in result.commands"
|
|
- "'rd 1:203' in result.commands"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "'ansible_1' in result.session_name"
|
|
|
|
- name: Create aggregate of VRFs again (idempotent)
|
|
eos_vrf:
|
|
aggregate:
|
|
- { name: test2, rd: "1:202" }
|
|
- { name: test3, rd: "1:203" }
|
|
state: present
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == false"
|
|
- "result.commands | length == 0"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "result.session_name is not defined"
|
|
|
|
- name: Create aggregate of VRFs with purge
|
|
eos_vrf:
|
|
aggregate:
|
|
- { name: test4, rd: "1:204" }
|
|
- { name: test5, rd: "1:205" }
|
|
state: present
|
|
purge: yes
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
register: result
|
|
|
|
- assert:
|
|
that:
|
|
- "result.changed == true"
|
|
- "'vrf definition test4' in result.commands"
|
|
- "'rd 1:204' in result.commands"
|
|
- "'vrf definition test5' in result.commands"
|
|
- "'rd 1:205' in result.commands"
|
|
- "'no vrf definition test' in result.commands"
|
|
- "'no vrf definition test2' in result.commands"
|
|
- "'no vrf definition test3' in result.commands"
|
|
# Ensure sessions contains epoc. Will fail after 18th May 2033
|
|
- "'ansible_1' in result.session_name"
|
|
|
|
- name: Delete VRFs
|
|
eos_vrf:
|
|
name: test
|
|
state: absent
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
|
|
- name: Delete VRFs again (idempotent)
|
|
eos_vrf:
|
|
name: test
|
|
state: absent
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
|
|
- name: Delete aggregate of VRFs
|
|
eos_vrf:
|
|
aggregate:
|
|
- { name: test1 }
|
|
- { name: test2 }
|
|
- { name: test3 }
|
|
- { name: test4 }
|
|
- { name: test5 }
|
|
state: absent
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
|
|
- name: Delete VRFs again (idempotent)
|
|
eos_vrf:
|
|
aggregate:
|
|
- { name: test1 }
|
|
- { name: test2 }
|
|
- { name: test3 }
|
|
- { name: test4 }
|
|
- { name: test5 }
|
|
state: absent
|
|
authorize: yes
|
|
provider: "{{ cli }}"
|
|
become: yes
|
|
|
|
# FIXME add in tests for everything defined in docs
|
|
# FIXME Test state:absent + test:
|
|
# FIXME Without powers ensure "privileged mode required"
|