diff --git a/lib/ansible/modules/network/nxos/nxos_snmp_host.py b/lib/ansible/modules/network/nxos/nxos_snmp_host.py index 94ac7b9e17..3e1e412efd 100644 --- a/lib/ansible/modules/network/nxos/nxos_snmp_host.py +++ b/lib/ansible/modules/network/nxos/nxos_snmp_host.py @@ -150,6 +150,14 @@ def get_snmp_host(host, module): 'secname': 'community' } + host_map_5k = { + 'port': 'udp', + 'version': 'version', + 'sec_level': 'v3', + 'notif_type': 'snmp_type', + 'commun_or_user': 'community' + } + resource = {} if body: @@ -177,8 +185,35 @@ def get_snmp_host(host, module): if vrf: host_resource['vrf'] = vrf.split(':')[1].strip() resource[key] = host_resource + except KeyError: + # Handle the 5K case + try: + resource_table = body[0]['TABLE_hosts']['ROW_hosts'] - except (KeyError, AttributeError, TypeError): + if isinstance(resource_table, dict): + resource_table = [resource_table] + + for each in resource_table: + key = str(each['address']) + src = each.get('src_intf') + host_resource = apply_key_map(host_map_5k, each) + + if src: + host_resource['src_intf'] = src.split(':')[1].strip() + + vrf_filt = each.get('TABLE_filter_vrf') + if vrf_filt: + vrf_filter = vrf_filt['ROW_filter_vrf']['filter_vrf_name'].split(',') + filters = [vrf.strip() for vrf in vrf_filter] + host_resource['vrf_filter'] = filters + + vrf = each.get('use_vrf_name') + if vrf: + host_resource['vrf'] = vrf.strip() + resource[key] = host_resource + except (KeyError, AttributeError, TypeError): + return resource + except (AttributeError, TypeError): return resource find = resource.get(host) diff --git a/lib/ansible/modules/network/nxos/nxos_snmp_traps.py b/lib/ansible/modules/network/nxos/nxos_snmp_traps.py index 302af3edc8..b6ed201043 100644 --- a/lib/ansible/modules/network/nxos/nxos_snmp_traps.py +++ b/lib/ansible/modules/network/nxos/nxos_snmp_traps.py @@ -120,17 +120,21 @@ def get_snmp_traps(group, module): 'isEnabled': 'enabled' } - resource = {} + trap_key_5k = { + 'trap': 'trap', + 'enabled': 'enabled' + } + resource = {} + feature_list = ['aaa', 'bridge', 'callhome', 'cfs', 'config', + 'entity', 'feature-control', 'hsrp', 'license', + 'link', 'lldp', 'ospf', 'pim', 'rf', 'rmon', + 'snmp', 'storm-control', 'stpx', 'sysmgr', + 'system', 'upgrade', 'vtp'] try: resource_table = body[0]['TABLE_snmp_trap']['ROW_snmp_trap'] - for each_feature in ['aaa', 'bridge', 'callhome', 'cfs', 'config', - 'entity', 'feature-control', 'hsrp', 'license', - 'link', 'lldp', 'ospf', 'pim', 'rf', 'rmon', - 'snmp', 'storm-control', 'stpx', 'sysmgr', - 'system', 'upgrade', 'vtp']: - + for each_feature in feature_list: resource[each_feature] = [] for each_resource in resource_table: @@ -139,8 +143,23 @@ def get_snmp_traps(group, module): if key != 'Generic': resource[key].append(mapped_trap) + except KeyError: + try: + resource_table = body[0]['TABLE_mib']['ROW_mib'] - except (KeyError, AttributeError): + for each_feature in feature_list: + resource[each_feature] = [] + + for each_resource in resource_table: + key = str(each_resource['mib']) + each_resource = each_resource['TABLE_trap']['ROW_trap'] + mapped_trap = apply_key_map(trap_key_5k, each_resource) + + if key != 'Generic': + resource[key].append(mapped_trap) + except (KeyError, AttributeError): + return resource + except AttributeError: return resource find = resource.get(group, None) @@ -221,7 +240,6 @@ def main(): existing = get_snmp_traps(group, module) commands = get_trap_commands(group, state, existing, module) - cmds = flatten_list(commands) if cmds: results['changed'] = True