1---
2- debug: msg="START ios_l3_interface cli/basic.yaml on connection={{ ansible_connection
3    }}"
4
5- name: Delete interface ipv4 and ipv6 address(setup)
6  register: result
7  cisco.ios.ios_l3_interface:
8    name: '{{ test_interface }}'
9    state: absent
10
11- name: Setup - Ensure interfaces are switchport
12  loop:
13    - '{{ test_interface }}'
14    - '{{ test_interface2 }}'
15  cisco.ios.ios_config:
16    lines:
17      - no shutdown
18    parents:
19      - interface {{ item }}
20
21- name: Configure interface ipv4 address
22  register: result
23  cisco.ios.ios_l3_interface:
24    name: '{{ test_interface }}'
25    ipv4: 192.168.20.1/24
26    state: present
27
28- assert:
29    that:
30      - result.changed == true
31      - '"interface {{ test_interface }}" in result.commands'
32      - '"ip address 192.168.20.1 255.255.255.0" in result.commands'
33
34- name: Configure interface ipv4 address (idempotent)
35  register: result
36  cisco.ios.ios_l3_interface:
37    name: '{{ test_interface }}'
38    ipv4: 192.168.20.1/24
39    state: present
40
41- assert: &id002
42    that:
43      - result.changed == false
44
45- name: Assign same ipv4 address to other interface (fail)
46  ignore_errors: true
47  register: result
48  cisco.ios.ios_l3_interface:
49    name: '{{ test_interface2 }}'
50    ipv4: 192.168.20.1/24
51    state: present
52
53- assert:
54    that:
55      - result.failed == true
56      - result.msg is defined
57
58- name: Change interface ipv4 address
59  register: result
60  cisco.ios.ios_l3_interface:
61    name: '{{ test_interface }}'
62    ipv4: dhcp
63    state: present
64
65- assert:
66    that:
67      - result.changed == true
68      - '"interface {{ test_interface }}" in result.commands'
69      - '"ip address dhcp" in result.commands'
70
71- name: Configure interface ipv6 address
72  register: result
73  cisco.ios.ios_l3_interface: &id001
74    name: '{{ test_interface }}'
75    ipv6: fd5d:12c9:2201:1::1/64
76    state: present
77
78- assert:
79    that:
80      - result.changed == true
81      - '"interface {{ test_interface }}" in result.commands'
82      - '"ipv6 address fd5d:12c9:2201:1::1/64" in result.commands'
83
84- name: Configure interface ipv6 address (idempotent)
85  register: result
86  cisco.ios.ios_l3_interface: *id001
87
88- assert: *id002
89
90- name: Configure second ipv6 address on interface
91  register: result
92  cisco.ios.ios_l3_interface: &id003
93    name: '{{ test_interface }}'
94    ipv6: fd5d:12c9:2291:1::1/64
95    state: present
96
97- assert:
98    that:
99      - result.changed == true
100      - '"interface {{ test_interface }}" in result.commands'
101      - '"ipv6 address fd5d:12c9:2291:1::1/64" in result.commands'
102
103- name: Ensure first ipv6 address still associated with interface
104  register: result
105  cisco.ios.ios_l3_interface: *id001
106
107- assert: *id002
108
109- name: Ensure second ipv6 address still associated with interface
110  register: result
111  cisco.ios.ios_l3_interface: *id003
112
113- assert: *id002
114
115- name: Assign same ipv6 address to other interface (fail)
116  ignore_errors: true
117  register: result
118  cisco.ios.ios_l3_interface:
119    name: '{{ test_interface2 }}'
120    ipv6: fd5d:12c9:2201:1::1/64
121    state: present
122
123- assert:
124    that:
125      - result.failed == true
126      - result.msg is defined
127
128- name: Change interface ipv6 address
129  register: result
130  cisco.ios.ios_l3_interface:
131    name: '{{ test_interface }}'
132    ipv6: dhcp
133    state: present
134
135- assert:
136    that:
137      - result.changed == true
138      - '"interface {{ test_interface }}" in result.commands'
139      - '"ipv6 address dhcp" in result.commands'
140
141- name: Delete interface ipv4 and ipv6 address
142  register: result
143  cisco.ios.ios_l3_interface:
144    name: '{{ test_interface }}'
145    state: absent
146
147- assert:
148    that:
149      - result.changed == true
150      - '"interface {{ test_interface }}" in result.commands'
151      - '"no ip address" in result.commands'
152      - '"no ipv6 address" in result.commands'
153
154- name: Delete interface ipv4 and ipv6 address (idempotent)
155  register: result
156  cisco.ios.ios_l3_interface:
157    name: '{{ test_interface }}'
158    state: absent
159
160- assert: *id002
161
162- name: Delete second interface ipv4 and ipv6 address (setup)
163  register: result
164  cisco.ios.ios_l3_interface:
165    name: '{{ test_interface2 }}'
166    state: absent
167
168- name: Configure ipv4 and ipv6 address using aggregate
169  register: result
170  cisco.ios.ios_l3_interface:
171    aggregate:
172
173      - name: '{{ test_interface }}'
174        ipv4: 192.161.0.1/24
175        ipv6: fd5d:12c9:2201:2::2/64
176
177      - name: '{{ test_interface2 }}'
178        ipv4: 192.162.0.2/16
179        ipv6: fd5e:12c9:2201:3::3/32
180
181- assert:
182    that:
183      - result.changed == true
184      - '"interface {{ test_interface }}" in result.commands'
185      - '"ip address 192.161.0.1 255.255.255.0" in result.commands'
186      - '"ipv6 address fd5d:12c9:2201:2::2/64" in result.commands'
187      - '"interface {{ test_interface2 }}" in result.commands'
188      - '"ip address 192.162.0.2 255.255.0.0" in result.commands'
189      - '"ipv6 address fd5e:12c9:2201:3::3/32" in result.commands'
190
191- name: Configure ipv4 and ipv6 address using aggregate (idempotent)
192  register: result
193  cisco.ios.ios_l3_interface:
194    aggregate:
195
196      - name: '{{ test_interface }}'
197        ipv4: 192.161.0.1/24
198        ipv6: fd5d:12c9:2201:2::2/64
199
200      - name: '{{ test_interface2 }}'
201        ipv4: 192.162.0.2/16
202        ipv6: fd5e:12c9:2201:3::3/32
203
204- assert: *id002
205
206- name: Change ipv4 and ipv6 address using aggregate
207  register: result
208  cisco.ios.ios_l3_interface:
209    aggregate:
210
211      - name: '{{ test_interface }}'
212        ipv4: 193.167.1.1/8
213        ipv6: fd5a:12c9:2201:4::4/32
214
215      - name: '{{ test_interface2 }}'
216        ipv4: 192.169.2.2/24
217        ipv6: fd5b:12c9:2201:5::5/90
218
219- assert:
220    that:
221      - result.changed == true
222      - '"interface {{ test_interface }}" in result.commands'
223      - '"ip address 193.167.1.1 255.0.0.0" in result.commands'
224      - '"ipv6 address fd5a:12c9:2201:4::4/32" in result.commands'
225      - '"interface {{ test_interface2 }}" in result.commands'
226      - '"ip address 192.169.2.2 255.255.255.0" in result.commands'
227      - '"ipv6 address fd5b:12c9:2201:5::5/90" in result.commands'
228
229- name: Delete ipv4 and ipv6 address using aggregate
230  register: result
231  cisco.ios.ios_l3_interface:
232    aggregate:
233
234      - name: '{{ test_interface }}'
235
236      - name: '{{ test_interface2 }}'
237    state: absent
238
239- assert:
240    that:
241      - result.changed == true
242      - '"interface {{ test_interface }}" in result.commands'
243      - '"no ip address" in result.commands'
244      - '"no ipv6 address" in result.commands'
245      - '"interface {{ test_interface2 }}" in result.commands'
246      - '"no ip address" in result.commands'
247      - '"no ipv6 address" in result.commands'
248
249- name: Delete ipv4 and ipv6 address using aggregate (idempotent)
250  register: result
251  cisco.ios.ios_l3_interface:
252    aggregate:
253
254      - name: '{{ test_interface }}'
255
256      - name: '{{ test_interface2 }}'
257    state: absent
258
259- assert: *id002
260
261- debug: msg="END ios_l3_interface cli/basic.yaml on connection={{ ansible_connection
262    }}"
263