summaryrefslogtreecommitdiff
path: root/lib/ansible/modules/network/basics/net_command.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/modules/network/basics/net_command.py')
-rw-r--r--lib/ansible/modules/network/basics/net_command.py131
1 files changed, 131 insertions, 0 deletions
diff --git a/lib/ansible/modules/network/basics/net_command.py b/lib/ansible/modules/network/basics/net_command.py
new file mode 100644
index 0000000000..9c5707319c
--- /dev/null
+++ b/lib/ansible/modules/network/basics/net_command.py
@@ -0,0 +1,131 @@
+#!/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 <http://www.gnu.org/licenses/>.
+#
+
+ANSIBLE_METADATA = {
+ 'status': ['preview'],
+ 'supported_by': 'core',
+ 'version': '1.0'
+}
+
+DOCUMENTATION = """
+---
+module: net_command
+version_added: "2.3"
+author: "Peter Sprygada (@privateip)"
+short_description: Executes a common on a remote network device
+description:
+ - This module will take the command and execute it on the remote
+ device in a CLI shell. The command will outout will be returned
+ via the stdout return key. If an error is detected, the command
+ will return the error via the stderr key.
+options:
+ free_form:
+ description:
+ - A free form command to run on the remote host. There is no
+ parameter actually named 'free_form'. See the examples .
+ required: true
+notes:
+ - This module requires setting the Ansible connection type to network_cli
+ - This module will always set the changed return key to C(True)
+"""
+
+EXAMPLES = """
+- name: execute show version
+ net_command: show version
+
+- name: run a series of commmands
+ net_command: "{{ item }}"
+ with_items:
+ - show interfaces
+ - show ip route
+ - show version
+"""
+
+RETURN = """
+rc:
+ description: The command return code (0 means success)
+ returned: always
+ type: int
+ sample: 0
+stdout:
+ description: The command standard output
+ returned: always
+ type: string
+ sample: "Hostname: ios01\nFQDN: ios01.example.net"
+stderr:
+ description: The command standard error
+ returned: always
+ type: string
+ sample: "shw hostname\r\n% Invalid input\r\nios01>"
+stdout_lines:
+ description: The command standard output split in lines
+ returned: always
+ type: list
+ sample: ["Hostname: ios01", "FQDN: ios01.example.net"]
+start:
+ description: The time the job started
+ returned: always
+ type: str
+ sample: "2016-11-16 10:38:15.126146"
+end:
+ description: The time the job ended
+ returned: always
+ type: str
+ sample: "2016-11-16 10:38:25.595612"
+delta:
+ description: The time elapsed to perform all operations
+ returned: always
+ type: str
+ sample: "0:00:10.469466"
+"""
+from ansible.module_utils.local import LocalAnsibleModule
+
+def main():
+ """ main entry point for module execution
+ """
+ argument_spec = dict(
+ _raw_params=dict()
+ )
+
+ module = LocalAnsibleModule(argument_spec=argument_spec,
+ supports_check_mode=False)
+
+ if str(module.params['_raw_params']).strip() == '':
+ module.fail_json(rc=256, msg='no command given')
+
+ result = {'changed': True}
+
+ rc, out, err = module.exec_command(module.params['_raw_params'])
+
+ try:
+ out = module.from_json(out)
+ except ValueError:
+ if out:
+ out = str(out).strip()
+ result['stdout_lines'] = out.split('\n')
+
+ result.update({
+ 'rc': rc,
+ 'stdout': out,
+ 'stderr': str(err).strip()
+ })
+
+ module.exit_json(**result)
+
+if __name__ == '__main__':
+ main()