From 4e3e2c712adc3b1850550d28efb7671df1b77233 Mon Sep 17 00:00:00 2001 From: Renato Orgito Date: Thu, 5 Apr 2018 07:51:18 -0300 Subject: [PATCH] Have the ios_interface module include CDP when checking neighbors (#38046) * Add CDP support for the neighbors option (#37655) (cherry picked from commit 0f90853f67147d68ad5899407e96a53eed8e4d46) * Add ios_interface CDP support to changelog --- .../fragments/ios_interface_cdp_support.yaml | 2 ++ .../modules/network/ios/ios_interface.py | 27 +++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 changelogs/fragments/ios_interface_cdp_support.yaml diff --git a/changelogs/fragments/ios_interface_cdp_support.yaml b/changelogs/fragments/ios_interface_cdp_support.yaml new file mode 100644 index 00000000000..36b06a3c01e --- /dev/null +++ b/changelogs/fragments/ios_interface_cdp_support.yaml @@ -0,0 +1,2 @@ +bugfixes: +- ios_interface - neighbors option now include CDP neighbors (https://github.com/ansible/ansible/pull/37667) diff --git a/lib/ansible/modules/network/ios/ios_interface.py b/lib/ansible/modules/network/ios/ios_interface.py index 56d6c7db6c9..71665d99e9f 100644 --- a/lib/ansible/modules/network/ios/ios_interface.py +++ b/lib/ansible/modules/network/ios/ios_interface.py @@ -328,7 +328,8 @@ def map_obj_to_commands(updates): def check_declarative_intent_params(module, want, result): failed_conditions = [] - have_neighbors = None + have_neighbors_lldp = None + have_neighbors_cdp = None for w in want: want_state = w.get('state') want_tx_rate = w.get('tx_rate') @@ -375,13 +376,15 @@ def check_declarative_intent_params(module, want, result): if want_neighbors: have_host = [] have_port = [] - if have_neighbors is None: - rc, have_neighbors, err = exec_command(module, 'show lldp neighbors detail') + + # Process LLDP neighbors + if have_neighbors_lldp is None: + rc, have_neighbors_lldp, err = exec_command(module, 'show lldp neighbors detail') if rc != 0: module.fail_json(msg=to_text(err, errors='surrogate_then_replace'), command=command, rc=rc) - if have_neighbors: - lines = have_neighbors.strip().split('Local Intf: ') + if have_neighbors_lldp: + lines = have_neighbors_lldp.strip().split('Local Intf: ') for line in lines: field = line.split('\n') if field[0].strip() == w['name']: @@ -390,6 +393,20 @@ def check_declarative_intent_params(module, want, result): have_host.append(item.split(':')[1].strip()) if item.startswith('Port Description:'): have_port.append(item.split(':')[1].strip()) + + # Process CDP neighbors + if have_neighbors_cdp is None: + rc, have_neighbors_cdp, err = exec_command(module, 'show cdp neighbors detail') + if rc != 0: + module.fail_json(msg=to_text(err, errors='surrogate_then_replace'), command=command, rc=rc) + + if have_neighbors_cdp: + neighbors_cdp = re.findall('Device ID: (.*?)\n.*?Interface: (.*?), Port ID .outgoing port.: (.*?)\n', have_neighbors_cdp, re.S) + for host, localif, remoteif in neighbors_cdp: + if localif == w['name']: + have_host.append(host) + have_port.append(remoteif) + for item in want_neighbors: host = item.get('host') port = item.get('port')