Backport PR to fix the duplication of IPV6 address with replace state in ios_l3_interfaces module (#66680)

* fix 66530 (#66654)


(cherry picked from commit 0c4f167b82)

* changelog

* Update 66654-fix-ipv6-duplication-for-replace-state-ios-l3-interfaces.yaml

Co-authored-by: Matt Davis <nitzmahone@users.noreply.github.com>
pull/67297/head
Sumit Jaiswal 5 years ago committed by GitHub
parent 481327ec37
commit f8c4a38ffe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- ios_ - Fix bug where IPV6 was duplicated for replace state (https://github.com/ansible/ansible/pull/66654)

@ -62,24 +62,36 @@ def dict_to_set(sample_dict):
def filter_dict_having_none_value(want, have): def filter_dict_having_none_value(want, have):
# Generate dict with have dict value which is None in want dict # Generate dict with have dict value which is None in want dict
test_dict = dict() test_dict = dict()
test_key_dict = dict()
name = want.get('name') name = want.get('name')
if name: if name:
test_dict['name'] = name test_dict['name'] = name
diff_ip = False diff_ip = False
want_ip = ''
for k, v in iteritems(want): for k, v in iteritems(want):
if isinstance(v, dict): if isinstance(v, dict):
for key, value in iteritems(v): for key, value in iteritems(v):
test_key_dict = dict()
if value is None: if value is None:
dict_val = have.get(k).get(key) dict_val = have.get(k).get(key)
test_key_dict.update({key: dict_val}) test_key_dict.update({key: dict_val})
elif k == 'ipv6' and value.lower() != have.get(k)[0].get(key).lower():
# as multiple IPV6 address can be configured on same
# interface, for replace state in place update will
# actually create new entry, which isn't as expected
# for replace state, so in case of IPV6 address
# every time 1st delete the existing IPV6 config and
# then apply the new change
dict_val = have.get(k)[0].get(key)
test_key_dict.update({key: dict_val})
test_dict.update({k: test_key_dict}) test_dict.update({k: test_key_dict})
if isinstance(v, list): if isinstance(v, list):
for key, value in iteritems(v[0]): for key, value in iteritems(v[0]):
test_key_dict = dict()
if value is None: if value is None:
dict_val = have.get(k).get(key) dict_val = have.get(k).get(key)
test_key_dict.update({key: dict_val}) test_key_dict.update({key: dict_val})
elif k == 'ipv6' and value.lower() != have.get(k)[0].get(key).lower():
dict_val = have.get(k)[0].get(key)
test_key_dict.update({key: dict_val})
test_dict.update({k: test_key_dict}) test_dict.update({k: test_key_dict})
# below conditions checks are added to check if # below conditions checks are added to check if
# secondary IP is configured, if yes then delete # secondary IP is configured, if yes then delete

@ -18,6 +18,8 @@
- address: 198.51.100.1/24 - address: 198.51.100.1/24
secondary: True secondary: True
- address: 198.51.100.2/24 - address: 198.51.100.2/24
ipv6:
- address: 2001:db8:1:1::/64
state: replaced state: replaced
register: result register: result

@ -63,6 +63,7 @@ replaced:
- "no ipv6 address" - "no ipv6 address"
- "ip address 198.51.100.1 255.255.255.0 secondary" - "ip address 198.51.100.1 255.255.255.0 secondary"
- "ip address 198.51.100.2 255.255.255.0" - "ip address 198.51.100.2 255.255.255.0"
- "ipv6 address 2001:db8:1:1::/64"
after: after:
- name: loopback888 - name: loopback888
@ -77,6 +78,8 @@ replaced:
- address: 198.51.100.1 255.255.255.0 - address: 198.51.100.1 255.255.255.0
secondary: true secondary: true
- address: 198.51.100.2 255.255.255.0 - address: 198.51.100.2 255.255.255.0
ipv6:
- address: 2001:db8:1:1::/64
name: GigabitEthernet0/2 name: GigabitEthernet0/2
overridden: overridden:

Loading…
Cancel
Save