#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright 2022 Red Hat # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function __metaclass__ = type DOCUMENTATION = """ module: ios_ping short_description: Tests reachability using ping from IOS switch. description: - Tests reachability using ping from switch to a remote destination. - For a general purpose network module, see the L(net_ping,https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/net_ping_module.html) module. - For Windows targets, use the L(win_ping,https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_ping_module.html) module instead. - For targets running Python, use the L(ping,https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html) module instead. version_added: 1.0.0 author: - Jacob McGill (@jmcgill298) - Sagar Paul (@KB-perByte) options: count: description: - Number of packets to send. type: int afi: description: - Define echo type ip or ipv6. choices: - ip - ipv6 default: ip type: str dest: description: - The IP Address or hostname (resolvable by switch) of the remote node. required: true type: str df_bit: description: - Set the DF bit. default: false type: bool source: description: - The source IP Address. type: str size: description: - Size of the packet to send. type: int egress: description: - Force egress interface bypassing routing. type: str ingress: description: - LAN source interface for Ingress. type: str timeout: description: - specify timeout interval. type: int state: description: - Determines if the expected result is success or fail. choices: - absent - present default: present type: str vrf: description: - The VRF to use for forwarding. type: str notes: - Tested against Cisco IOSXE Version 17.3 on CML. - For a general purpose network module, see the L(net_ping,https://docs.ansible.com/ansible/latest/collections/ansible/netcommon/net_ping_module.html) module. - For Windows targets, use the L(win_ping,https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_ping_module.html) module instead. - For targets running Python, use the L(ping,https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html) module instead. """ EXAMPLES = """ - name: Test reachability to 198.51.100.251 using default vrf cisco.ios.ios_ping: dest: 198.51.100.251 - name: Test reachability to 198.51.100.252 using prod vrf cisco.ios.ios_ping: dest: 198.51.100.252 vrf: prod afi: ip - name: Test un reachability to 198.51.100.253 using default vrf cisco.ios.ios_ping: dest: 198.51.100.253 state: absent - name: Test reachability to 198.51.100.250 using prod vrf and setting count and source cisco.ios.ios_ping: dest: 198.51.100.250 source: loopback0 vrf: prod count: 20 - name: Test reachability to 198.51.100.249 using df-bit and size cisco.ios.ios_ping: dest: 198.51.100.249 df_bit: true size: 1400 - name: Test reachability to ipv6 address cisco.ios.ios_ping: dest: 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff afi: ipv6 """ RETURN = """ commands: description: Show the command sent. returned: always type: list sample: ["ping vrf prod 198.51.100.251 count 20 source loopback0"] packet_loss: description: Percentage of packets lost. returned: always type: str sample: "0%" packets_rx: description: Packets successfully received. returned: always type: int sample: 20 packets_tx: description: Packets successfully transmitted. returned: always type: int sample: 20 rtt: description: Show RTT stats. returned: always type: dict sample: {"avg": 2, "max": 8, "min": 1} """ from ansible.module_utils.basic import AnsibleModule from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.ping.ping import ( PingArgs, ) from ansible_collections.cisco.ios.plugins.module_utils.network.ios.config.ping.ping import Ping def main(): """ Main entry point for module execution :returns: the result form module invocation """ module = AnsibleModule(argument_spec=PingArgs.argument_spec) result = Ping(module).execute_module() module.exit_json(**result) if __name__ == "__main__": main()