Add aggregate for junos modules and sub spec validation (#27726)

* Add aggregate for junos modules and sub spec validation

*  aggregate support of junos modules
*  aggregate sub spec validation
*  relevant changes to junos integration test
*  junos module boilerplate changes

* Add new boilerplate for junos modules

* Fix CI issues
This commit is contained in:
Ganesh Nalawade 2017-08-04 14:55:58 +05:30 committed by GitHub
commit d3e5d30f7c
32 changed files with 1696 additions and 508 deletions

View file

@ -147,13 +147,141 @@
provider: "{{ netconf }}"
register: config
- name: Get running configuration
junos_rpc:
rpc: get-configuration
provider: "{{ netconf }}"
register: config
- assert:
that:
- "result.changed == true"
- "'<name>ge-0/0/1</name>' not in config.xml"
- name: Aggregate setup- delete interface ge-0/0/1
junos_interface:
name: ge-0/0/1
state: absent
provider: "{{ netconf }}"
register: result
- name: Aggregate setup- delete interface ge-0/0/2
junos_interface:
name: ge-0/0/2
state: absent
provider: "{{ netconf }}"
register: result
- name: Set interface on aggregate
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *ge-0/0/1")
- result.diff.prepared | search("\+ *description test-interface-1")
- result.diff.prepared | search("\+ *speed 1g")
- result.diff.prepared | search("\+ *mtu 512")
- result.diff.prepared | search("\+ *link-mode half-duplex")
- result.diff.prepared | search("\+ *description test-interface-2")
- result.diff.prepared | search("\+ *speed 10m")
- result.diff.prepared | search("\+ * mtu 256")
- result.diff.prepared | search("\+ *link-mode full-duplex")
- name: Set interface on aggregate (idempotent)
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'
- name: Disable interface on aggregate
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: down}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: down}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *disable")
- name: Enable interface on aggregate
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: up}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: up}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *disable")
- name: Deactivate interface configuration on aggregate
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, active: False}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, active: False}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *inactive[:] ge-0/0/1")
- result.diff.prepared | search("! *inactive[:] ge-0/0/2")
- name: Activate interface configuration on aggregate
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, active: True}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, active: True}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *active[:] ge-0/0/1")
- result.diff.prepared | search("! *active[:] ge-0/0/2")
- name: Delete interface on aggregate
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: absent}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *ge-0/0/1")
- result.diff.prepared | search("\- *description test-interface-1")
- result.diff.prepared | search("\- *speed 1g")
- result.diff.prepared | search("\- *mtu 512")
- result.diff.prepared | search("\- *link-mode half-duplex")
- result.diff.prepared | search("\- *description test-interface-2")
- result.diff.prepared | search("\- *speed 10m")
- result.diff.prepared | search("\- * mtu 256")
- result.diff.prepared | search("\- *link-mode full-duplex")
- name: Delete interface aggregate (idempotent)
junos_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: absent}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'

View file

@ -110,3 +110,151 @@
- assert:
that:
- "result.changed == false"
- name: Aggregate setup- delete interface ge-0/0/1
junos_l3_interface:
name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
state: absent
provider: "{{ netconf }}"
register: result
- name: Aggregate setup- delete interface ge-0/0/2
junos_l3_interface:
name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
state: absent
provider: "{{ netconf }}"
register: result
- name: Configure l3 interface in aggregate
junos_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- "'edit interfaces ge-0/0/1 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\+ *address 1.1.1.1/32")
- "'edit interfaces ge-0/0/1 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\+ *address fd5d:12c9:2201:1::1/128")
- "'edit interfaces ge-0/0/2 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\+ *address 2.2.2.2/32")
- "'edit interfaces ge-0/0/2 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\+ *address fd5d:12c9:2201:2::2/128")
- name: Configure l3 interface in aggregate (idempotent)
junos_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
active: True
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
active: True
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'
- name: Deactivate l3 interface configuration
junos_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
active: False
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
active: False
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *inactive[:] address 1.1.1.1/32")
- result.diff.prepared | search("! *inactive[:] address fd5d:12c9:2201:1::1/128")
- result.diff.prepared | search("! *inactive[:] address 2.2.2.2/32")
- result.diff.prepared | search("! *inactive[:] address fd5d:12c9:2201:2::2/128")
- name: Activate l3 interface configuration
junos_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
active: True
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
active: True
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *active[:] address 1.1.1.1/32")
- result.diff.prepared | search("! *active[:] address fd5d:12c9:2201:1::1/128")
- result.diff.prepared | search("! *active[:] address 2.2.2.2/32")
- result.diff.prepared | search("! *active[:] address fd5d:12c9:2201:2::2/128")
- name: Delete l3 interface configuration
junos_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
state: absent
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- "'edit interfaces ge-0/0/1 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\- *address 1.1.1.1/32")
- "'edit interfaces ge-0/0/1 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\- *address fd5d:12c9:2201:1::1/128")
- "'edit interfaces ge-0/0/2 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\- *address 2.2.2.2/32")
- "'edit interfaces ge-0/0/2 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\- *address fd5d:12c9:2201:2::2/128")
- name: Delete l3 interface configuration (idempotent)
junos_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
state: absent
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'

View file

@ -296,3 +296,87 @@
- "'<size>64k</size>' not in config.xml"
- "'<files>40</files>' not in config.xml"
- "'<log-rotate-frequency>20</log-rotate-frequency>' not in config.xml"
- name: Seup file logging using aggregate
junos_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, state: absent}
- {dest: file, name: test-2, facility: kernel, level: emergency, state: absent}
provider: "{{ netconf }}"
register: result
- name: Configure file logging using aggregate
junos_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, active: True}
- {dest: file, name: test-2, facility: kernel, level: emergency, active: True}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *file test-1")
- result.diff.prepared | search("\+ *pfe critical")
- result.diff.prepared | search("\+ *file test-2")
- result.diff.prepared | search("\+ *kernel emergency")
- name: Deactivate file logging configuration using aggregate
junos_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, active: False}
- {dest: file, name: test-2, facility: kernel, level: emergency, active: False}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *inactive[:] file test-1")
- result.diff.prepared | search("! *inactive[:] pfe")
- result.diff.prepared | search("! *inactive[:] file test-2")
- result.diff.prepared | search("! *inactive[:] kernel")
- name: activate file logging configuration using aggregate
junos_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, active: True}
- {dest: file, name: test-2, facility: kernel, level: emergency, active: True}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *active[:] file test-1")
- result.diff.prepared | search("! *active[:] pfe")
- result.diff.prepared | search("! *active[:] file test-2")
- result.diff.prepared | search("! *active[:] kernel")
- name: Delete file logging using aggregate
junos_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, state: absent}
- {dest: file, name: test-2, facility: kernel, level: emergency, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *file test-1")
- result.diff.prepared | search("\- *pfe critical")
- result.diff.prepared | search("\- *file test-2")
- result.diff.prepared | search("\- *kernel emergency")
- name: Delete file logging using aggregate (idempotent)
junos_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, state: absent}
- {dest: file, name: test-2, facility: kernel, level: emergency, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == false"

View file

@ -140,3 +140,102 @@
- assert:
that:
- "result.changed == false"
- name: Setup static route for aggegrate
junos_static_route:
aggregate:
- {address: 4.4.4.0/24, state: absent}
- {address: 5.5.5.0/24, state: absent}
provider: "{{ netconf }}"
- name: Confgiure static route using aggegrate
junos_static_route:
aggregate:
- {address: 4.4.4.0/24, next_hop: 3.3.3.3, preference: 10, qualified_next_hop: 5.5.5.5, qualified_preference: 30}
- {address: 5.5.5.0/24, next_hop: 6.6.6.6, preference: 11, qualified_next_hop: 7.7.7.7, qualified_preference: 12}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *route 4.4.4.0/24")
- result.diff.prepared | search("\+ *next-hop 3.3.3.3")
- result.diff.prepared | search("\+ *qualified-next-hop 5.5.5.5")
- result.diff.prepared | search("\+ *preference 30")
- result.diff.prepared | search("\+ *preference 10")
- result.diff.prepared | search("\+ *route 5.5.5.0/24")
- result.diff.prepared | search("\+ *next-hop 6.6.6.6")
- result.diff.prepared | search("\+ *qualified-next-hop 7.7.7.7")
- result.diff.prepared | search("\+ *preference 12")
- result.diff.prepared | search("\+ *preference 11")
- name: Deactivate static route configuration using aggegrate
junos_static_route:
aggregate:
- {address: 4.4.4.0/24, next_hop: 3.3.3.3, preference: 10, qualified_next_hop: 5.5.5.5, qualified_preference: 30, active: False}
- {address: 5.5.5.0/24, next_hop: 6.6.6.6, preference: 11, qualified_next_hop: 7.7.7.7, qualified_preference: 12, active: False}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *inactive[:] route 4.4.4.0/24")
- result.diff.prepared | search("! *inactive[:] qualified-next-hop 5.5.5.5")
- result.diff.prepared | search("! *inactive[:] preference")
- result.diff.prepared | search("! *inactive[:] route 5.5.5.0/24")
- result.diff.prepared | search("! *inactive[:] qualified-next-hop 7.7.7.7")
- result.diff.prepared | search("! *inactive[:] preference")
- name: Activate static route configuration using aggegrate
junos_static_route:
aggregate:
- {address: 4.4.4.0/24, next_hop: 3.3.3.3, preference: 10, qualified_next_hop: 5.5.5.5, qualified_preference: 30, active: True}
- {address: 5.5.5.0/24, next_hop: 6.6.6.6, preference: 11, qualified_next_hop: 7.7.7.7, qualified_preference: 12, active: True}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *active[:] route 4.4.4.0/24")
- result.diff.prepared | search("! *active[:] qualified-next-hop 5.5.5.5")
- result.diff.prepared | search("! *active[:] preference")
- result.diff.prepared | search("! *active[:] route 5.5.5.0/24")
- result.diff.prepared | search("! *active[:] qualified-next-hop 7.7.7.7")
- result.diff.prepared | search("! *active[:] preference")
- name: Delete static route configuration using aggegrate
junos_static_route:
aggregate:
- {address: 4.4.4.0/24, state: absent}
- {address: 5.5.5.0/24, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *route 4.4.4.0/24")
- result.diff.prepared | search("\- *next-hop 3.3.3.3")
- result.diff.prepared | search("\- *qualified-next-hop 5.5.5.5")
- result.diff.prepared | search("\- *preference 30")
- result.diff.prepared | search("\- *preference 10")
- result.diff.prepared | search("\- *route 5.5.5.0/24")
- result.diff.prepared | search("\- *next-hop 6.6.6.6")
- result.diff.prepared | search("\- *qualified-next-hop 7.7.7.7")
- result.diff.prepared | search("\- *preference 12")
- result.diff.prepared | search("\- *preference 11")
- name: Delete static route configuration using aggegrate (idempotent)
junos_static_route:
aggregate:
- {address: 4.4.4.0/24, state: absent}
- {address: 5.5.5.0/24, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == false"

View file

@ -102,3 +102,83 @@
that:
- "result.changed == true"
- "'<name>test-vlan</name>' not in config.xml"
- name: Setup vlan configuration for aggregate
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, state: absent }
- { vlan_id: 160, name: test_vlan_2, state: absent }
provider: "{{ netconf }}"
- name: Create vlan configuration using aggregate
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, description: test vlan-1, state: present }
- { vlan_id: 160, name: test_vlan_2, description: test vlan-2, state: present }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *vlans")
- result.diff.prepared | search("\+ *test_vlan_1")
- result.diff.prepared | search("\+ *vlan-id 159")
- result.diff.prepared | search("\+ *test_vlan_2")
- result.diff.prepared | search("\+ *vlan-id 160")
- name: Deactivate vlan configuration using aggregate
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, description: test vlan-1, active: False }
- { vlan_id: 160, name: test_vlan_2, description: test vlan-2, active: False }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *inactive[:] test_vlan_1")
- result.diff.prepared | search("! *inactive[:] test_vlan_2")
- name: activate vlan configuration using aggregate
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, description: test vlan-1, active: True }
- { vlan_id: 160, name: test_vlan_2, description: test vlan-2, active: True }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("! *active[:] test_vlan_1")
- result.diff.prepared | search("! *active[:] test_vlan_2")
- name: Delete vlan configuration using aggregate
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, state: absent }
- { vlan_id: 160, name: test_vlan_2, state: absent }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *test_vlan_1")
- result.diff.prepared | search("\- *vlan-id 159")
- result.diff.prepared | search("\- *test_vlan_2")
- result.diff.prepared | search("\- *vlan-id 160")
- name: Delete vlan configuration using aggregate (idempotent)
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, state: absent }
- { vlan_id: 160, name: test_vlan_2, state: absent }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'

View file

@ -167,3 +167,171 @@
- assert:
that:
- "result.changed == false"
- name: Setup vrf using aggregate
junos_vrf:
aggregate:
- name: test-1
state: absent
- name: test-2
state: absent
provider: "{{ netconf }}"
register: result
- name: Create vrf using aggregate
junos_vrf:
aggregate:
- name: test-1
description: test-vrf-1
interfaces:
- ge-0/0/3
- ge-0/0/2
rd: 1.1.1.1:10
target: target:65514:113
state: present
- name: test-2
description: test-vrf-2
interfaces:
- ge-0/0/4
- ge-0/0/5
rd: 2.2.2.2:10
target: target:65515:114
state: present
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- result.diff.prepared | search("\+ *test-1")
- result.diff.prepared | search("\+ *description test-vrf-1")
- result.diff.prepared | search("\+ *instance-type vrf")
- result.diff.prepared | search("\+ *interface ge-0/0/2.0")
- result.diff.prepared | search("\+ *interface ge-0/0/3.0")
- result.diff.prepared | search("\+ *route-distinguisher 1.1.1.1:10")
- result.diff.prepared | search("\+ *vrf-target target:65514:113")
- result.diff.prepared | search("\+ *test-2")
- result.diff.prepared | search("\+ *description test-vrf-2")
- result.diff.prepared | search("\+ *instance-type vrf")
- result.diff.prepared | search("\+ *interface ge-0/0/4.0")
- result.diff.prepared | search("\+ *interface ge-0/0/5.0")
- result.diff.prepared | search("\+ *route-distinguisher 2.2.2.2:10")
- result.diff.prepared | search("\+ *vrf-target target:65515:114")
- name: Deactivate vrf configuration using aggregate
junos_vrf:
aggregate:
- name: test-1
description: test-vrf-1
interfaces:
- ge-0/0/3
- ge-0/0/2
rd: 1.1.1.1:10
target: target:65514:113
state: present
active: False
- name: test-2
description: test-vrf-2
interfaces:
- ge-0/0/4
- ge-0/0/5
rd: 2.2.2.2:10
target: target:65515:114
state: present
active: False
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- "'edit routing-instances test-1' in result.diff.prepared"
- result.diff.prepared | search("! *inactive[:] interface ge-0/0/2.0")
- result.diff.prepared | search("! *inactive[:] interface ge-0/0/3.0")
- result.diff.prepared | search("! *inactive[:] route-distinguisher")
- result.diff.prepared | search("! *inactive[:] vrf-target")
- "'edit routing-instances test-2' in result.diff.prepared"
- result.diff.prepared | search("! *inactive[:] interface ge-0/0/4.0")
- result.diff.prepared | search("! *inactive[:] interface ge-0/0/5.0")
- result.diff.prepared | search("! *inactive[:] route-distinguisher")
- result.diff.prepared | search("! *inactive[:] vrf-target")
- name: Deactivate vrf configuration using aggregate
junos_vrf:
aggregate:
- name: test-1
description: test-vrf-1
interfaces:
- ge-0/0/3
- ge-0/0/2
rd: 1.1.1.1:10
target: target:65514:113
state: present
active: True
- name: test-2
description: test-vrf-2
interfaces:
- ge-0/0/4
- ge-0/0/5
rd: 2.2.2.2:10
target: target:65515:114
state: present
active: True
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- "'edit routing-instances test-1' in result.diff.prepared"
- result.diff.prepared | search("! *active[:] interface ge-0/0/2.0")
- result.diff.prepared | search("! *active[:] interface ge-0/0/3.0")
- result.diff.prepared | search("! *active[:] route-distinguisher")
- result.diff.prepared | search("! *active[:] vrf-target")
- "'edit routing-instances test-2' in result.diff.prepared"
- result.diff.prepared | search("! *active[:] interface ge-0/0/4.0")
- result.diff.prepared | search("! *active[:] interface ge-0/0/5.0")
- result.diff.prepared | search("! *active[:] route-distinguisher")
- result.diff.prepared | search("! *active[:] vrf-target")
- name: Delete vrf configuration using aggregate
junos_vrf:
aggregate:
- name: test-1
state: absent
- name: test-2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- result.diff.prepared | search("\- *test-1")
- result.diff.prepared | search("\- *description test-vrf-1")
- result.diff.prepared | search("\- *instance-type vrf")
- result.diff.prepared | search("\- *interface ge-0/0/2.0")
- result.diff.prepared | search("\- *interface ge-0/0/3.0")
- result.diff.prepared | search("\- *route-distinguisher 1.1.1.1:10")
- result.diff.prepared | search("\- *vrf-target target:65514:113")
- result.diff.prepared | search("\- *test-2")
- result.diff.prepared | search("\- *description test-vrf-2")
- result.diff.prepared | search("\- *instance-type vrf")
- result.diff.prepared | search("\- *interface ge-0/0/4.0")
- result.diff.prepared | search("\- *interface ge-0/0/5.0")
- result.diff.prepared | search("\- *route-distinguisher 2.2.2.2:10")
- result.diff.prepared | search("\- *vrf-target target:65515:114")
- name: Delete vrf configuration using aggregate (idempotent)
junos_vrf:
aggregate:
- name: test-1
state: absent
- name: test-2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == false"

View file

@ -83,7 +83,7 @@
- assert:
that:
- "result.changed == true"
- "'<disable/>' in config.xml"
- result.diff.prepared | search("\+ *disable")
- "'<name>ge-0/0/1</name>' in config.xml"
- name: Enable interface
@ -103,7 +103,7 @@
- assert:
that:
- "result.changed == true"
- "'<disable/>' not in config.xml"
- result.diff.prepared | search("\- *disable")
- "'<name>ge-0/0/1</name>' in config.xml"
- name: Delete interface
@ -124,3 +124,109 @@
that:
- "result.changed == true"
- "'<name>ge-0/0/1</name>' not in config.xml"
- name: Aggregate setup- delete interface ge-0/0/1
net_interface:
name: ge-0/0/1
state: absent
provider: "{{ netconf }}"
register: result
- name: Aggregate setup- delete interface ge-0/0/2
net_interface:
name: ge-0/0/2
state: absent
provider: "{{ netconf }}"
register: result
- name: Set interface on aggregate
net_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *ge-0/0/1")
- result.diff.prepared | search("\+ *description test-interface-1")
- result.diff.prepared | search("\+ *speed 1g")
- result.diff.prepared | search("\+ *mtu 512")
- result.diff.prepared | search("\+ *link-mode half-duplex")
- result.diff.prepared | search("\+ *description test-interface-2")
- result.diff.prepared | search("\+ *speed 10m")
- result.diff.prepared | search("\+ * mtu 256")
- result.diff.prepared | search("\+ *link-mode full-duplex")
- name: Set interface on aggregate (idempotent)
net_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'
- name: Disable interface on aggregate
net_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: down}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: down}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *disable")
- name: Enable interface on aggregate
net_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: up}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: up}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *disable")
- name: Delete interface on aggregate
net_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: absent}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *ge-0/0/1")
- result.diff.prepared | search("\- *description test-interface-1")
- result.diff.prepared | search("\- *speed 1g")
- result.diff.prepared | search("\- *mtu 512")
- result.diff.prepared | search("\- *link-mode half-duplex")
- result.diff.prepared | search("\- *description test-interface-2")
- result.diff.prepared | search("\- *speed 10m")
- result.diff.prepared | search("\- * mtu 256")
- result.diff.prepared | search("\- *link-mode full-duplex")
- name: Delete interface aggregate (idempotent)
net_interface:
aggregate:
- { name: ge-0/0/1, description: test-interface-1, speed: 1g, duplex: half, mtu: 512, state: absent}
- { name: ge-0/0/2, description: test-interface-2, speed: 10m, duplex: full, mtu: 256, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'

View file

@ -80,3 +80,107 @@
- assert:
that:
- "result.changed == false"
- name: Aggregate setup- delete interface ge-0/0/1
net_l3_interface:
name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
state: absent
provider: "{{ netconf }}"
register: result
- name: Aggregate setup- delete interface ge-0/0/2
net_l3_interface:
name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
state: absent
provider: "{{ netconf }}"
register: result
- name: Configure l3 interface in aggregate
net_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- "'edit interfaces ge-0/0/1 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\+ *address 1.1.1.1/32")
- "'edit interfaces ge-0/0/1 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\+ *address fd5d:12c9:2201:1::1/128")
- "'edit interfaces ge-0/0/2 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\+ *address 2.2.2.2/32")
- "'edit interfaces ge-0/0/2 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\+ *address fd5d:12c9:2201:2::2/128")
- name: Configure l3 interface in aggregate (idempotent)
net_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
active: True
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
active: True
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'
- name: Delete l3 interface configuration
net_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
state: absent
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- "'edit interfaces ge-0/0/1 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\- *address 1.1.1.1/32")
- "'edit interfaces ge-0/0/1 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\- *address fd5d:12c9:2201:1::1/128")
- "'edit interfaces ge-0/0/2 unit 0 family inet' in result.diff.prepared"
- result.diff.prepared | search("\- *address 2.2.2.2/32")
- "'edit interfaces ge-0/0/2 unit 0 family inet6' in result.diff.prepared"
- result.diff.prepared | search("\- *address fd5d:12c9:2201:2::2/128")
- name: Delete l3 interface configuration (idempotent)
net_l3_interface:
aggregate:
- name: ge-0/0/1
ipv4: 1.1.1.1
ipv6: fd5d:12c9:2201:1::1
state: absent
- name: ge-0/0/2
ipv4: 2.2.2.2
ipv6: fd5d:12c9:2201:2::2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'

View file

@ -122,3 +122,35 @@
that:
- "result.changed == true"
- "'<console>' not in config.xml"
- name: Configure file logging using aggregate
net_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, active: True}
- {dest: file, name: test-2, facility: kernel, level: emergency, active: True}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *file test-1")
- result.diff.prepared | search("\+ *pfe critical")
- result.diff.prepared | search("\+ *file test-2")
- result.diff.prepared | search("\+ *kernel emergency")
- name: Delete file logging using aggregate
net_logging:
aggregate:
- {dest: file, name: test-1, facility: pfe, level: critical, state: absent}
- {dest: file, name: test-2, facility: kernel, level: emergency, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *file test-1")
- result.diff.prepared | search("\- *pfe critical")
- result.diff.prepared | search("\- *file test-2")
- result.diff.prepared | search("\- *kernel emergency")

View file

@ -69,3 +69,66 @@
- assert:
that:
- "result.changed == false"
- name: Setup static route for aggegrate
net_static_route:
aggregate:
- {address: 4.4.4.0/24, state: absent}
- {address: 5.5.5.0/24, state: absent}
provider: "{{ netconf }}"
- name: Confgiure static route using aggegrate
net_static_route:
aggregate:
- {address: 4.4.4.0/24, next_hop: 3.3.3.3, preference: 10, qualified_next_hop: 5.5.5.5, qualified_preference: 30}
- {address: 5.5.5.0/24, next_hop: 6.6.6.6, preference: 11, qualified_next_hop: 7.7.7.7, qualified_preference: 12}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *route 4.4.4.0/24")
- result.diff.prepared | search("\+ *next-hop 3.3.3.3")
- result.diff.prepared | search("\+ *qualified-next-hop 5.5.5.5")
- result.diff.prepared | search("\+ *preference 30")
- result.diff.prepared | search("\+ *preference 10")
- result.diff.prepared | search("\+ *route 5.5.5.0/24")
- result.diff.prepared | search("\+ *next-hop 6.6.6.6")
- result.diff.prepared | search("\+ *qualified-next-hop 7.7.7.7")
- result.diff.prepared | search("\+ *preference 12")
- result.diff.prepared | search("\+ *preference 11")
- name: Delete static route configuration using aggegrate
net_static_route:
aggregate:
- {address: 4.4.4.0/24, state: absent}
- {address: 5.5.5.0/24, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *route 4.4.4.0/24")
- result.diff.prepared | search("\- *next-hop 3.3.3.3")
- result.diff.prepared | search("\- *qualified-next-hop 5.5.5.5")
- result.diff.prepared | search("\- *preference 30")
- result.diff.prepared | search("\- *preference 10")
- result.diff.prepared | search("\- *route 5.5.5.0/24")
- result.diff.prepared | search("\- *next-hop 6.6.6.6")
- result.diff.prepared | search("\- *qualified-next-hop 7.7.7.7")
- result.diff.prepared | search("\- *preference 12")
- result.diff.prepared | search("\- *preference 11")
- name: Delete static route configuration using aggegrate (idempotent)
net_static_route:
aggregate:
- {address: 4.4.4.0/24, state: absent}
- {address: 5.5.5.0/24, state: absent}
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == false"

View file

@ -25,7 +25,7 @@
that:
- "result.changed == true"
- "'<name>test_user</name>' in config.xml"
- "'<class>read-only</class>' in config.xml"
- "'<class>operator</class>' in config.xml"
- name: Create user again (idempotent)
net_user:

View file

@ -58,3 +58,55 @@
that:
- "result.changed == true"
- "'<name>test-vlan</name>' not in config.xml"
- name: Setup vlan configuration for aggregate
net_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, state: absent }
- { vlan_id: 160, name: test_vlan_2, state: absent }
provider: "{{ netconf }}"
- name: Create vlan configuration using aggregate
net_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, description: test vlan-1, state: present }
- { vlan_id: 160, name: test_vlan_2, description: test vlan-2, state: present }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\+ *vlans")
- result.diff.prepared | search("\+ *test_vlan_1")
- result.diff.prepared | search("\+ *vlan-id 159")
- result.diff.prepared | search("\+ *test_vlan_2")
- result.diff.prepared | search("\+ *vlan-id 160")
- name: Delete vlan configuration using aggregate
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, state: absent }
- { vlan_id: 160, name: test_vlan_2, state: absent }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == true'
- result.diff.prepared | search("\- *test_vlan_1")
- result.diff.prepared | search("\- *vlan-id 159")
- result.diff.prepared | search("\- *test_vlan_2")
- result.diff.prepared | search("\- *vlan-id 160")
- name: Delete vlan configuration using aggregate (idempotent)
junos_vlan:
aggregate:
- { vlan_id: 159, name: test_vlan_1, state: absent }
- { vlan_id: 160, name: test_vlan_2, state: absent }
provider: "{{ netconf }}"
register: result
- assert:
that:
- 'result.changed == false'

View file

@ -23,13 +23,13 @@
- assert:
that:
- "result.changed == true"
- "'+ test-1' in result.diff.prepared"
- "'+ description test-vrf-1;' in result.diff.prepared"
- "'+ instance-type vrf;' in result.diff.prepared"
- "'+ interface ge-0/0/5.0;' in result.diff.prepared"
- "'+ interface ge-0/0/6.0;' in result.diff.prepared"
- "'+ route-distinguisher 3.3.3.3:10;' in result.diff.prepared"
- "'+ vrf-target target:65513:111;' in result.diff.prepared"
- result.diff.prepared | search("\+ *test-1")
- result.diff.prepared | search("\+ *description test-vrf-1")
- result.diff.prepared | search("\+ *instance-type vrf")
- result.diff.prepared | search("\+ *interface ge-0/0/5.0")
- result.diff.prepared | search("\+ *interface ge-0/0/6.0")
- result.diff.prepared | search("\+ *route-distinguisher 3.3.3.3:10")
- result.diff.prepared | search("\+ *vrf-target target:65513:111")
- name: Configure vrf and its parameter (idempotent)
net_vrf:
@ -65,69 +65,17 @@
that:
- "result.changed == true"
- "'[edit routing-instances test-1]' in result.diff.prepared"
- "'+ interface ge-0/0/2.0;' in result.diff.prepared"
- "'+ interface ge-0/0/3.0;' in result.diff.prepared"
- "'- interface ge-0/0/5.0;' in result.diff.prepared"
- "'- interface ge-0/0/6.0;' in result.diff.prepared"
- result.diff.prepared | search("\+ *interface ge-0/0/2.0")
- result.diff.prepared | search("\+ *interface ge-0/0/3.0")
- result.diff.prepared | search("\- *interface ge-0/0/5.0")
- result.diff.prepared | search("\- *interface ge-0/0/6.0")
- "'[edit routing-instances test-1]' in result.diff.prepared"
- "'- route-distinguisher 3.3.3.3:10;' in result.diff.prepared"
- "'+ route-distinguisher 1.1.1.1:10;' in result.diff.prepared"
- "'- vrf-target target:65513:111;' in result.diff.prepared"
- "'+ vrf-target target:65514:113;' in result.diff.prepared"
- result.diff.prepared | search("\- *route-distinguisher 3.3.3.3:10")
- result.diff.prepared | search("\+ *route-distinguisher 1.1.1.1:10")
- result.diff.prepared | search("\- *vrf-target target:65513:111")
- result.diff.prepared | search("\+ *vrf-target target:65514:113")
- name: Deactivate vrf
net_vrf:
name: test-1
description: test-vrf-1
interfaces:
- ge-0/0/3
- ge-0/0/2
rd: 1.1.1.1:10
target: target:65514:113
state: present
active: False
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- "'[edit routing-instances]' in result.diff.prepared"
- "'! inactive: test-1' in result.diff.prepared"
- "'[edit routing-instances test-1]' in result.diff.prepared"
- "'! inactive: interface ge-0/0/2.0' in result.diff.prepared"
- "'! inactive: interface ge-0/0/3.0' in result.diff.prepared"
- "'[edit routing-instances test-1]' in result.diff.prepared"
- "'! inactive: route-distinguisher' in result.diff.prepared"
- "'! inactive: vrf-target' in result.diff.prepared"
- name: Activate vrf
net_vrf:
name: test-1
description: test-vrf-1
interfaces:
- ge-0/0/3
- ge-0/0/2
rd: 1.1.1.1:10
target: target:65514:113
state: present
active: True
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- "'[edit routing-instances]' in result.diff.prepared"
- "'! active: test-1' in result.diff.prepared"
- "'[edit routing-instances test-1]' in result.diff.prepared"
- "'! active: interface ge-0/0/2.0' in result.diff.prepared"
- "'! active: interface ge-0/0/3.0' in result.diff.prepared"
- "'[edit routing-instances test-1]' in result.diff.prepared"
- "'! active: route-distinguisher' in result.diff.prepared"
- "'! active: vrf-target' in result.diff.prepared"
- name: Delete vrf
net_vrf:
name: test-1
@ -144,14 +92,13 @@
- assert:
that:
- "result.changed == true"
- "'[edit routing-instances]' in result.diff.prepared"
- "'- test-1' in result.diff.prepared"
- "'- description test-vrf-1;' in result.diff.prepared"
- "'- instance-type vrf;' in result.diff.prepared"
- "'- interface ge-0/0/2.0;' in result.diff.prepared"
- "'- interface ge-0/0/3.0;' in result.diff.prepared"
- "'- route-distinguisher 1.1.1.1:10;' in result.diff.prepared"
- "'- vrf-target target:65514:113;' in result.diff.prepared"
- result.diff.prepared | search("\- *test-1")
- result.diff.prepared | search("\- *description test-vrf-1")
- result.diff.prepared | search("\- *instance-type vrf")
- result.diff.prepared | search("\- *interface ge-0/0/2.0")
- result.diff.prepared | search("\- *interface ge-0/0/3.0")
- result.diff.prepared | search("\- *route-distinguisher 1.1.1.1:10")
- result.diff.prepared | search("\- *vrf-target target:65514:113")
- name: Delete vrf (idempotent)
net_vrf:
@ -169,3 +116,95 @@
- assert:
that:
- "result.changed == false"
- name: Setup vrf using aggregate
net_vrf:
aggregate:
- name: test-1
state: absent
- name: test-2
state: absent
provider: "{{ netconf }}"
register: result
- name: Create vrf using aggregate
net_vrf:
aggregate:
- name: test-1
description: test-vrf-1
interfaces:
- ge-0/0/3
- ge-0/0/2
rd: 1.1.1.1:10
target: target:65514:113
state: present
- name: test-2
description: test-vrf-2
interfaces:
- ge-0/0/4
- ge-0/0/5
rd: 2.2.2.2:10
target: target:65515:114
state: present
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- result.diff.prepared | search("\+ *test-1")
- result.diff.prepared | search("\+ *description test-vrf-1")
- result.diff.prepared | search("\+ *instance-type vrf")
- result.diff.prepared | search("\+ *interface ge-0/0/2.0")
- result.diff.prepared | search("\+ *interface ge-0/0/3.0")
- result.diff.prepared | search("\+ *route-distinguisher 1.1.1.1:10")
- result.diff.prepared | search("\+ *vrf-target target:65514:113")
- result.diff.prepared | search("\+ *test-2")
- result.diff.prepared | search("\+ *description test-vrf-2")
- result.diff.prepared | search("\+ *instance-type vrf")
- result.diff.prepared | search("\+ *interface ge-0/0/4.0")
- result.diff.prepared | search("\+ *interface ge-0/0/5.0")
- result.diff.prepared | search("\+ *route-distinguisher 2.2.2.2:10")
- result.diff.prepared | search("\+ *vrf-target target:65515:114")
- name: Delete vrf configuration using aggregate
net_vrf:
aggregate:
- name: test-1
state: absent
- name: test-2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == true"
- result.diff.prepared | search("\- *test-1")
- result.diff.prepared | search("\- *description test-vrf-1")
- result.diff.prepared | search("\- *instance-type vrf")
- result.diff.prepared | search("\- *interface ge-0/0/2.0")
- result.diff.prepared | search("\- *interface ge-0/0/3.0")
- result.diff.prepared | search("\- *route-distinguisher 1.1.1.1:10")
- result.diff.prepared | search("\- *vrf-target target:65514:113")
- result.diff.prepared | search("\- *test-2")
- result.diff.prepared | search("\- *description test-vrf-2")
- result.diff.prepared | search("\- *instance-type vrf")
- result.diff.prepared | search("\- *interface ge-0/0/4.0")
- result.diff.prepared | search("\- *interface ge-0/0/5.0")
- result.diff.prepared | search("\- *route-distinguisher 2.2.2.2:10")
- result.diff.prepared | search("\- *vrf-target target:65515:114")
- name: Delete vrf configuration using aggregate (idempotent)
net_vrf:
aggregate:
- name: test-1
state: absent
- name: test-2
state: absent
provider: "{{ netconf }}"
register: result
- assert:
that:
- "result.changed == false"