From da0ed0ce9b780e2d2848d8a1a32ab6a79eaf2454 Mon Sep 17 00:00:00 2001 From: GGabriele Date: Mon, 18 Apr 2016 15:21:53 +0200 Subject: [PATCH 1/5] Adding nxos_get_facts --- network/nxos/nxos_get_facts.py | 263 +++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 network/nxos/nxos_get_facts.py diff --git a/network/nxos/nxos_get_facts.py b/network/nxos/nxos_get_facts.py new file mode 100644 index 00000000000..6480056d0dc --- /dev/null +++ b/network/nxos/nxos_get_facts.py @@ -0,0 +1,263 @@ +#!/usr/bin/python +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# + +DOCUMENTATION = ''' +--- +module: nxos_get_facts +version_added: "2.1" +short_description: Gets facts about NX-OS switches +description: + - Offers ability to extract facts from device +extends_documentation_fragment: nxos +author: Jason Edelman (@jedelman8), Gabriele Gerbino (@GGabriele) +''' + +EXAMPLES = ''' +# retrieve facts +- nxos_get_facts: host={{ inventory_hostname }} +''' + +RETURN = ''' +facts: + description: + - Show multiple information about device. + These include interfaces, vlans, module and environment information. + returned: always + type: dict + sample: {"fan_info": [{"direction":"front-to-back","hw_ver": "--", + "model":"N9K-C9300-FAN2","name":"Fan1(sys_fan1)","status":"Ok"}], + "hostname": "N9K2","interfaces": ["mgmt0","Ethernet1/1"], + "kickstart": "6.1(2)I3(1)","module": [{"model": "N9K-C9396PX", + "ports": "48","status": "active *"}],"os": "6.1(2)I3(1)", + "platform": "Nexus9000 C9396PX Chassis","power_supply_info": [{ + "actual_output": "0 W","model": "N9K-PAC-650W","number": "1", + "status":"Shutdown"}],"rr":"Reset Requested by CLI command reload", + "vlan_list":[{"admin_state":"noshutdown","interfaces":["Ethernet1/1"], + "name": "default","state": "active","vlan_id": "1"}]} +''' + + +def get_cli_body_ssh(command, response, module): + if 'xml' in response[0]: + body = [] + else: + body = [json.loads(response[0])] + return body + + +def execute_show(cmds, module, command_type=None): + try: + response = module.execute(cmds, + command_type=command_type) if command_type else module.execute(cmds) + except ShellError, clie: + module.fail_json(msg='Error sending {0}'.format(command), + error=str(clie)) + return response + + +def execute_show_command(command, module, command_type='cli_show'): + if module.params['transport'] == 'cli': + command += ' | json' + cmds = [command] + response = execute_show(cmds, module) + body = get_cli_body_ssh(command, response, module) + elif module.params['transport'] == 'nxapi': + cmds = [command] + body = execute_show(cmds, module, command_type=command_type) + + return body + + +def apply_key_map(key_map, table): + new_dict = {} + for key, value in table.items(): + new_key = key_map.get(key) + if new_key: + value = table.get(key) + if value: + new_dict[new_key] = str(value) + else: + new_dict[new_key] = value + return new_dict + + +def get_show_version_facts(module): + command = 'show version' + body = execute_show_command(command, module)[0] + + key_map = { + "rr_sys_ver": "os", + "kickstart_ver_str": "kickstart", + "chassis_id": "platform", + "host_name": "hostname", + "rr_reason": "rr" + } + + mapped_show_version_facts = apply_key_map(key_map, body) + return mapped_show_version_facts + + +def get_interface_facts(module): + command = 'show interface status' + body = execute_show_command(command, module)[0] + + interface_list = [] + interface_table = body['TABLE_interface']['ROW_interface'] + + if isinstance(interface_table, dict): + interface_table = [interface_table] + + for each in interface_table: + interface = str(each.get('interface', None)) + if interface: + interface_list.append(interface) + return interface_list + + +def get_show_module_facts(module): + command = 'show module' + body = execute_show_command(command, module)[0] + + module_facts = [] + module_table = body['TABLE_modinfo']['ROW_modinfo'] + + key_map = { + "ports": "ports", + "type": "type", + "model": "model", + "status": "status" + } + + if isinstance(module_table, dict): + module_table = [module_table] + + for each in module_table: + mapped_module_facts = apply_key_map(key_map, each) + module_facts.append(mapped_module_facts) + return module_facts + + +def get_environment_facts(module): + command = 'show environment' + body = execute_show_command(command, module)[0] + + powersupply = get_powersupply_facts(body) + fan = get_fan_facts(body) + + return (powersupply, fan) + + +def get_powersupply_facts(body): + powersupply_facts = [] + powersupply_table = body['powersup']['TABLE_psinfo']['ROW_psinfo'] + + key_map = { + "psnum": "number", + "psmodel": "model", + "actual_out": "actual_output", + "actual_in": "actual_input", + "total_capa": "total_capacity", + "ps_status": "status" + } + + if isinstance(powersupply_table, dict): + powersupply_table = [powersupply_table] + + for each in powersupply_table: + mapped_powersupply_facts = apply_key_map(key_map, each) + powersupply_facts.append(mapped_powersupply_facts) + return powersupply_facts + + +def get_fan_facts(body): + fan_facts = [] + fan_table = body['fandetails']['TABLE_faninfo']['ROW_faninfo'] + + key_map = { + "fanname": "name", + "fanmodel": "model", + "fanhwver": "hw_ver", + "fandir": "direction", + "fanstatus": "status" + } + + if isinstance(fan_table, dict): + fan_table = [fan_table] + + for each in fan_table: + mapped_fan_facts = apply_key_map(key_map, each) + fan_facts.append(mapped_fan_facts) + return fan_facts + + +def get_vlan_facts(module): + command = 'show vlan brief' + body = execute_show_command(command, module)[0] + + vlan_list = [] + vlan_table = body['TABLE_vlanbriefxbrief']['ROW_vlanbriefxbrief'] + + if isinstance(vlan_table, dict): + vlan_table = [vlan_table] + + for each in vlan_table: + vlan = str(each.get('vlanshowbr-vlanid-utf', None)) + if vlan: + vlan_list.append(vlan) + return vlan_list + + +def main(): + argument_spec = dict() + module = get_module(argument_spec=argument_spec, + supports_check_mode=True) + + # Get 'show version' facts. + show_version = get_show_version_facts(module) + + # Get interfaces facts. + interfaces_list = get_interface_facts(module) + + # Get module facts. + show_module = get_show_module_facts(module) + + # Get environment facts. + powersupply, fan = get_environment_facts(module) + + # Get vlans facts. + vlan = get_vlan_facts(module) + + facts = dict( + interfaces_list=interfaces_list, + module=show_module, + power_supply_info=powersupply, + fan_info=fan, + vlan_list=vlan) + + facts.update(show_version) + + module.exit_json(ansible_facts=facts) + + +from ansible.module_utils.basic import * +from ansible.module_utils.urls import * +from ansible.module_utils.shell import * +from ansible.module_utils.netcfg import * +from ansible.module_utils.nxos import * +if __name__ == '__main__': + main() \ No newline at end of file From 14e334285ff1068a178c804f9aea14b6ccb32839 Mon Sep 17 00:00:00 2001 From: GGabriele Date: Tue, 19 Apr 2016 14:53:49 +0200 Subject: [PATCH 2/5] fix conditional for py24 --- network/nxos/nxos_get_facts.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/network/nxos/nxos_get_facts.py b/network/nxos/nxos_get_facts.py index 6480056d0dc..a8520d3cc3f 100644 --- a/network/nxos/nxos_get_facts.py +++ b/network/nxos/nxos_get_facts.py @@ -62,8 +62,10 @@ def get_cli_body_ssh(command, response, module): def execute_show(cmds, module, command_type=None): try: - response = module.execute(cmds, - command_type=command_type) if command_type else module.execute(cmds) + if command_type: + response = module.execute(cmds, command_type=command_type) + else: + response = module.execute(cmds) except ShellError, clie: module.fail_json(msg='Error sending {0}'.format(command), error=str(clie)) From 7408c8ab140ccc86949443e141f6aff7f0368d74 Mon Sep 17 00:00:00 2001 From: GGabriele Date: Fri, 22 Apr 2016 22:42:17 +0200 Subject: [PATCH 3/5] Changed module name to nxos_facts --- network/nxos/nxos_facts.py | 265 +++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 network/nxos/nxos_facts.py diff --git a/network/nxos/nxos_facts.py b/network/nxos/nxos_facts.py new file mode 100644 index 00000000000..a8520d3cc3f --- /dev/null +++ b/network/nxos/nxos_facts.py @@ -0,0 +1,265 @@ +#!/usr/bin/python +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +# + +DOCUMENTATION = ''' +--- +module: nxos_get_facts +version_added: "2.1" +short_description: Gets facts about NX-OS switches +description: + - Offers ability to extract facts from device +extends_documentation_fragment: nxos +author: Jason Edelman (@jedelman8), Gabriele Gerbino (@GGabriele) +''' + +EXAMPLES = ''' +# retrieve facts +- nxos_get_facts: host={{ inventory_hostname }} +''' + +RETURN = ''' +facts: + description: + - Show multiple information about device. + These include interfaces, vlans, module and environment information. + returned: always + type: dict + sample: {"fan_info": [{"direction":"front-to-back","hw_ver": "--", + "model":"N9K-C9300-FAN2","name":"Fan1(sys_fan1)","status":"Ok"}], + "hostname": "N9K2","interfaces": ["mgmt0","Ethernet1/1"], + "kickstart": "6.1(2)I3(1)","module": [{"model": "N9K-C9396PX", + "ports": "48","status": "active *"}],"os": "6.1(2)I3(1)", + "platform": "Nexus9000 C9396PX Chassis","power_supply_info": [{ + "actual_output": "0 W","model": "N9K-PAC-650W","number": "1", + "status":"Shutdown"}],"rr":"Reset Requested by CLI command reload", + "vlan_list":[{"admin_state":"noshutdown","interfaces":["Ethernet1/1"], + "name": "default","state": "active","vlan_id": "1"}]} +''' + + +def get_cli_body_ssh(command, response, module): + if 'xml' in response[0]: + body = [] + else: + body = [json.loads(response[0])] + return body + + +def execute_show(cmds, module, command_type=None): + try: + if command_type: + response = module.execute(cmds, command_type=command_type) + else: + response = module.execute(cmds) + except ShellError, clie: + module.fail_json(msg='Error sending {0}'.format(command), + error=str(clie)) + return response + + +def execute_show_command(command, module, command_type='cli_show'): + if module.params['transport'] == 'cli': + command += ' | json' + cmds = [command] + response = execute_show(cmds, module) + body = get_cli_body_ssh(command, response, module) + elif module.params['transport'] == 'nxapi': + cmds = [command] + body = execute_show(cmds, module, command_type=command_type) + + return body + + +def apply_key_map(key_map, table): + new_dict = {} + for key, value in table.items(): + new_key = key_map.get(key) + if new_key: + value = table.get(key) + if value: + new_dict[new_key] = str(value) + else: + new_dict[new_key] = value + return new_dict + + +def get_show_version_facts(module): + command = 'show version' + body = execute_show_command(command, module)[0] + + key_map = { + "rr_sys_ver": "os", + "kickstart_ver_str": "kickstart", + "chassis_id": "platform", + "host_name": "hostname", + "rr_reason": "rr" + } + + mapped_show_version_facts = apply_key_map(key_map, body) + return mapped_show_version_facts + + +def get_interface_facts(module): + command = 'show interface status' + body = execute_show_command(command, module)[0] + + interface_list = [] + interface_table = body['TABLE_interface']['ROW_interface'] + + if isinstance(interface_table, dict): + interface_table = [interface_table] + + for each in interface_table: + interface = str(each.get('interface', None)) + if interface: + interface_list.append(interface) + return interface_list + + +def get_show_module_facts(module): + command = 'show module' + body = execute_show_command(command, module)[0] + + module_facts = [] + module_table = body['TABLE_modinfo']['ROW_modinfo'] + + key_map = { + "ports": "ports", + "type": "type", + "model": "model", + "status": "status" + } + + if isinstance(module_table, dict): + module_table = [module_table] + + for each in module_table: + mapped_module_facts = apply_key_map(key_map, each) + module_facts.append(mapped_module_facts) + return module_facts + + +def get_environment_facts(module): + command = 'show environment' + body = execute_show_command(command, module)[0] + + powersupply = get_powersupply_facts(body) + fan = get_fan_facts(body) + + return (powersupply, fan) + + +def get_powersupply_facts(body): + powersupply_facts = [] + powersupply_table = body['powersup']['TABLE_psinfo']['ROW_psinfo'] + + key_map = { + "psnum": "number", + "psmodel": "model", + "actual_out": "actual_output", + "actual_in": "actual_input", + "total_capa": "total_capacity", + "ps_status": "status" + } + + if isinstance(powersupply_table, dict): + powersupply_table = [powersupply_table] + + for each in powersupply_table: + mapped_powersupply_facts = apply_key_map(key_map, each) + powersupply_facts.append(mapped_powersupply_facts) + return powersupply_facts + + +def get_fan_facts(body): + fan_facts = [] + fan_table = body['fandetails']['TABLE_faninfo']['ROW_faninfo'] + + key_map = { + "fanname": "name", + "fanmodel": "model", + "fanhwver": "hw_ver", + "fandir": "direction", + "fanstatus": "status" + } + + if isinstance(fan_table, dict): + fan_table = [fan_table] + + for each in fan_table: + mapped_fan_facts = apply_key_map(key_map, each) + fan_facts.append(mapped_fan_facts) + return fan_facts + + +def get_vlan_facts(module): + command = 'show vlan brief' + body = execute_show_command(command, module)[0] + + vlan_list = [] + vlan_table = body['TABLE_vlanbriefxbrief']['ROW_vlanbriefxbrief'] + + if isinstance(vlan_table, dict): + vlan_table = [vlan_table] + + for each in vlan_table: + vlan = str(each.get('vlanshowbr-vlanid-utf', None)) + if vlan: + vlan_list.append(vlan) + return vlan_list + + +def main(): + argument_spec = dict() + module = get_module(argument_spec=argument_spec, + supports_check_mode=True) + + # Get 'show version' facts. + show_version = get_show_version_facts(module) + + # Get interfaces facts. + interfaces_list = get_interface_facts(module) + + # Get module facts. + show_module = get_show_module_facts(module) + + # Get environment facts. + powersupply, fan = get_environment_facts(module) + + # Get vlans facts. + vlan = get_vlan_facts(module) + + facts = dict( + interfaces_list=interfaces_list, + module=show_module, + power_supply_info=powersupply, + fan_info=fan, + vlan_list=vlan) + + facts.update(show_version) + + module.exit_json(ansible_facts=facts) + + +from ansible.module_utils.basic import * +from ansible.module_utils.urls import * +from ansible.module_utils.shell import * +from ansible.module_utils.netcfg import * +from ansible.module_utils.nxos import * +if __name__ == '__main__': + main() \ No newline at end of file From 3c91dc1f79dbde71d7bd2a586dddab6f8e3c7153 Mon Sep 17 00:00:00 2001 From: GGabriele Date: Fri, 22 Apr 2016 22:44:38 +0200 Subject: [PATCH 4/5] Removed old file --- network/nxos/nxos_get_facts.py | 265 --------------------------------- 1 file changed, 265 deletions(-) delete mode 100644 network/nxos/nxos_get_facts.py diff --git a/network/nxos/nxos_get_facts.py b/network/nxos/nxos_get_facts.py deleted file mode 100644 index a8520d3cc3f..00000000000 --- a/network/nxos/nxos_get_facts.py +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# - -DOCUMENTATION = ''' ---- -module: nxos_get_facts -version_added: "2.1" -short_description: Gets facts about NX-OS switches -description: - - Offers ability to extract facts from device -extends_documentation_fragment: nxos -author: Jason Edelman (@jedelman8), Gabriele Gerbino (@GGabriele) -''' - -EXAMPLES = ''' -# retrieve facts -- nxos_get_facts: host={{ inventory_hostname }} -''' - -RETURN = ''' -facts: - description: - - Show multiple information about device. - These include interfaces, vlans, module and environment information. - returned: always - type: dict - sample: {"fan_info": [{"direction":"front-to-back","hw_ver": "--", - "model":"N9K-C9300-FAN2","name":"Fan1(sys_fan1)","status":"Ok"}], - "hostname": "N9K2","interfaces": ["mgmt0","Ethernet1/1"], - "kickstart": "6.1(2)I3(1)","module": [{"model": "N9K-C9396PX", - "ports": "48","status": "active *"}],"os": "6.1(2)I3(1)", - "platform": "Nexus9000 C9396PX Chassis","power_supply_info": [{ - "actual_output": "0 W","model": "N9K-PAC-650W","number": "1", - "status":"Shutdown"}],"rr":"Reset Requested by CLI command reload", - "vlan_list":[{"admin_state":"noshutdown","interfaces":["Ethernet1/1"], - "name": "default","state": "active","vlan_id": "1"}]} -''' - - -def get_cli_body_ssh(command, response, module): - if 'xml' in response[0]: - body = [] - else: - body = [json.loads(response[0])] - return body - - -def execute_show(cmds, module, command_type=None): - try: - if command_type: - response = module.execute(cmds, command_type=command_type) - else: - response = module.execute(cmds) - except ShellError, clie: - module.fail_json(msg='Error sending {0}'.format(command), - error=str(clie)) - return response - - -def execute_show_command(command, module, command_type='cli_show'): - if module.params['transport'] == 'cli': - command += ' | json' - cmds = [command] - response = execute_show(cmds, module) - body = get_cli_body_ssh(command, response, module) - elif module.params['transport'] == 'nxapi': - cmds = [command] - body = execute_show(cmds, module, command_type=command_type) - - return body - - -def apply_key_map(key_map, table): - new_dict = {} - for key, value in table.items(): - new_key = key_map.get(key) - if new_key: - value = table.get(key) - if value: - new_dict[new_key] = str(value) - else: - new_dict[new_key] = value - return new_dict - - -def get_show_version_facts(module): - command = 'show version' - body = execute_show_command(command, module)[0] - - key_map = { - "rr_sys_ver": "os", - "kickstart_ver_str": "kickstart", - "chassis_id": "platform", - "host_name": "hostname", - "rr_reason": "rr" - } - - mapped_show_version_facts = apply_key_map(key_map, body) - return mapped_show_version_facts - - -def get_interface_facts(module): - command = 'show interface status' - body = execute_show_command(command, module)[0] - - interface_list = [] - interface_table = body['TABLE_interface']['ROW_interface'] - - if isinstance(interface_table, dict): - interface_table = [interface_table] - - for each in interface_table: - interface = str(each.get('interface', None)) - if interface: - interface_list.append(interface) - return interface_list - - -def get_show_module_facts(module): - command = 'show module' - body = execute_show_command(command, module)[0] - - module_facts = [] - module_table = body['TABLE_modinfo']['ROW_modinfo'] - - key_map = { - "ports": "ports", - "type": "type", - "model": "model", - "status": "status" - } - - if isinstance(module_table, dict): - module_table = [module_table] - - for each in module_table: - mapped_module_facts = apply_key_map(key_map, each) - module_facts.append(mapped_module_facts) - return module_facts - - -def get_environment_facts(module): - command = 'show environment' - body = execute_show_command(command, module)[0] - - powersupply = get_powersupply_facts(body) - fan = get_fan_facts(body) - - return (powersupply, fan) - - -def get_powersupply_facts(body): - powersupply_facts = [] - powersupply_table = body['powersup']['TABLE_psinfo']['ROW_psinfo'] - - key_map = { - "psnum": "number", - "psmodel": "model", - "actual_out": "actual_output", - "actual_in": "actual_input", - "total_capa": "total_capacity", - "ps_status": "status" - } - - if isinstance(powersupply_table, dict): - powersupply_table = [powersupply_table] - - for each in powersupply_table: - mapped_powersupply_facts = apply_key_map(key_map, each) - powersupply_facts.append(mapped_powersupply_facts) - return powersupply_facts - - -def get_fan_facts(body): - fan_facts = [] - fan_table = body['fandetails']['TABLE_faninfo']['ROW_faninfo'] - - key_map = { - "fanname": "name", - "fanmodel": "model", - "fanhwver": "hw_ver", - "fandir": "direction", - "fanstatus": "status" - } - - if isinstance(fan_table, dict): - fan_table = [fan_table] - - for each in fan_table: - mapped_fan_facts = apply_key_map(key_map, each) - fan_facts.append(mapped_fan_facts) - return fan_facts - - -def get_vlan_facts(module): - command = 'show vlan brief' - body = execute_show_command(command, module)[0] - - vlan_list = [] - vlan_table = body['TABLE_vlanbriefxbrief']['ROW_vlanbriefxbrief'] - - if isinstance(vlan_table, dict): - vlan_table = [vlan_table] - - for each in vlan_table: - vlan = str(each.get('vlanshowbr-vlanid-utf', None)) - if vlan: - vlan_list.append(vlan) - return vlan_list - - -def main(): - argument_spec = dict() - module = get_module(argument_spec=argument_spec, - supports_check_mode=True) - - # Get 'show version' facts. - show_version = get_show_version_facts(module) - - # Get interfaces facts. - interfaces_list = get_interface_facts(module) - - # Get module facts. - show_module = get_show_module_facts(module) - - # Get environment facts. - powersupply, fan = get_environment_facts(module) - - # Get vlans facts. - vlan = get_vlan_facts(module) - - facts = dict( - interfaces_list=interfaces_list, - module=show_module, - power_supply_info=powersupply, - fan_info=fan, - vlan_list=vlan) - - facts.update(show_version) - - module.exit_json(ansible_facts=facts) - - -from ansible.module_utils.basic import * -from ansible.module_utils.urls import * -from ansible.module_utils.shell import * -from ansible.module_utils.netcfg import * -from ansible.module_utils.nxos import * -if __name__ == '__main__': - main() \ No newline at end of file From b6b75720ec4bdee9af458bcf85bcc7ca40a2b7ee Mon Sep 17 00:00:00 2001 From: GGabriele Date: Sat, 23 Apr 2016 13:36:03 +0200 Subject: [PATCH 5/5] Fixed doc --- network/nxos/nxos_facts.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/network/nxos/nxos_facts.py b/network/nxos/nxos_facts.py index a8520d3cc3f..60a0f9d36f2 100644 --- a/network/nxos/nxos_facts.py +++ b/network/nxos/nxos_facts.py @@ -18,7 +18,7 @@ DOCUMENTATION = ''' --- -module: nxos_get_facts +module: nxos_facts version_added: "2.1" short_description: Gets facts about NX-OS switches description: @@ -29,7 +29,7 @@ author: Jason Edelman (@jedelman8), Gabriele Gerbino (@GGabriele) EXAMPLES = ''' # retrieve facts -- nxos_get_facts: host={{ inventory_hostname }} +- nxos_facts: host={{ inventory_hostname }} ''' RETURN = ''' @@ -262,4 +262,4 @@ from ansible.module_utils.shell import * from ansible.module_utils.netcfg import * from ansible.module_utils.nxos import * if __name__ == '__main__': - main() \ No newline at end of file + main()