Server IP : 85.214.239.14 / Your IP : 18.116.36.23 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/ansible_collections/junipernetworks/junos/plugins/modules/ |
Upload File : |
#!/usr/bin/python # -*- coding: utf-8 -*- # (c) 2018, Ansible by Red Hat, inc # 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: junos_scp author: Christian Giese (@GIC-de) short_description: Transfer files from or to remote devices running Junos description: - This module transfers files via SCP from or to remote devices running Junos. version_added: 1.0.0 extends_documentation_fragment: - junipernetworks.junos.junos options: src: description: - The C(src) argument takes a single path, or a list of paths to be transferred. The argument C(recursive) must be C(true) to transfer directories. required: true type: list elements: path dest: description: - The C(dest) argument specifies the path in which to receive the files. type: path default: . recursive: description: - The C(recursive) argument enables recursive transfer of files and directories. type: bool default: no remote_src: description: - The C(remote_src) argument enables the download of files (I(scp get)) from the remote device. The default behavior is to upload files (I(scp put)) to the remote device. type: bool default: no ssh_private_key_file: description: - The C(ssh_private_key_file) argument is path to the SSH private key file. This can be used if you need to provide a private key rather than loading the key into the ssh-key-ring/environment type: path ssh_config: description: - The C(ssh_config) argument is path to the SSH configuration file. This can be used to load SSH information from a configuration file. If this option is not given by default ~/.ssh/config is queried. type: path requirements: - junos-eznc - ncclient (>=v0.5.2) notes: - This module requires the netconf system service be enabled on the remote device being managed. - Tested against vMX JUNOS version 17.3R1.10. - Works with C(local) connections only. - Since this module uses junos-eznc to establish connection with junos device the netconf configuration parameters needs to be passed using module options for example C(ssh_config) unlike other junos modules that uses C(netconf) connection type. """ EXAMPLES = """ # the required set of connection arguments have been purposely left off # the examples for brevity - name: upload local file to home directory on remote device junipernetworks.junos.junos_scp: src: test.tgz - name: upload local file to tmp directory on remote device junipernetworks.junos.junos_scp: src: test.tgz dest: /tmp/ - name: download file from remote device junipernetworks.junos.junos_scp: src: test.tgz remote_src: true - name: ssh config file path for jumphost config junipernetworks.junos.junos_scp: src: test.tgz remote_src: true ssh_config: /home/user/customsshconfig """ RETURN = """ changed: description: always true returned: always type: bool """ from ansible.module_utils._text import to_native from ansible.module_utils.basic import AnsibleModule from ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos import ( get_device, ) try: from jnpr.junos.utils.scp import SCP HAS_PYEZ = True except ImportError: HAS_PYEZ = False def transfer_files(module, device): dest = module.params["dest"] recursive = module.params["recursive"] with SCP(device) as scp: for src in module.params["src"]: if module.params["remote_src"]: scp.get(src.strip(), local_path=dest, recursive=recursive) else: scp.put(src.strip(), remote_path=dest, recursive=recursive) def main(): """Main entry point for Ansible module execution""" argument_spec = dict( src=dict(type="list", required=True, elements="path"), dest=dict(type="path", required=False, default="."), recursive=dict(type="bool", default=False), remote_src=dict(type="bool", default=False), ssh_private_key_file=dict(type="path"), ssh_config=dict(type="path"), ) module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) if not HAS_PYEZ: module.fail_json( msg="junos-eznc is required but does not appear to be installed. " "It can be installed using `pip install junos-eznc`", ) result = dict(changed=True) if not module.check_mode: # open pyez connection and transfer files via SCP try: device = get_device(module) transfer_files(module, device) except Exception as ex: module.fail_json(msg=to_native(ex)) finally: try: # close pyez connection and ignore exceptions device.close() except Exception: pass module.exit_json(**result) if __name__ == "__main__": main()