From 023f130a46406fb9e1fdab382ab2f3da9ab3e7f6 Mon Sep 17 00:00:00 2001 From: Renato Date: Tue, 27 Mar 2018 03:36:17 -0300 Subject: [PATCH] Add CDP support for the neighbors option (#37655) (#37667) --- .../modules/network/ios/ios_interface.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/ansible/modules/network/ios/ios_interface.py b/lib/ansible/modules/network/ios/ios_interface.py index 56d6c7db6c..71665d99e9 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')