FreezeJ' Blog

ansible获取远程文件到本地

2022-11-30

ansible使用fetch模块,把远程文件拉取到本地

模块参数

$ ansible-doc -s fetch
- name: Fetch files from remote nodes
  fetch:
      dest:                  # (required) A directory to save the file into. For example, if the 'dest'
                               directory is '/backup' a 'src' file named
                               '/etc/profile' on host 'host.example.com', would
                               be saved into
                               '/backup/host.example.com/etc/profile'. The host
                               name is based on the inventory name.
      fail_on_missing:       # When set to 'yes', the task will fail if the remote file cannot be read for any
                               reason. Prior to Ansible 2.5, setting this would
                               only fail if the source file was missing. The
                               default was changed to 'yes' in Ansible 2.5.
      flat:                  # Allows you to override the default behavior of appending hostname/path/to/file
                               to the destination. If 'dest' ends with '/', it
                               will use the basename of the source file,
                               similar to the copy module. This can be useful
                               if working with a single host, or if retrieving
                               files that are uniquely named per host. If using
                               multiple hosts with the same filename, the file
                               will be overwritten for each host.
      src:                   # (required) The file on the remote system to fetch. This 'must' be a file, not a
                               directory. Recursive fetching may be supported
                               in a later release.
      validate_checksum:     # Verify that the source and destination checksums match after the files are
                               fetched.

DEMO:

- name: test
  hosts: 127.0.0.1  # 修改为远程主机
  remote_user: root
  gather_facts: False
  tasks:
  - name: "获取远程文件路径"
    find:
      paths: "/tmp/"
      patterns: "test*.py"
    register: remote_paths

  - debug:
      msg: "{{ item.path }}"
    with_items: "{{ remote_paths.files }}"
    loop_control:
      label: "{{ item.path }}"

  - name: "获取文件到本机"
    fetch:
      src: "{{ item.path }}"
      dest: /data/tmp_file/
      # flat: true
    with_items: "{{ remote_paths.files }}"
    loop_control:
      label: "{{ item.path }}"

输出

PLAY [test] ***************************************************************************************************

TASK [获取远程文件路径] ***********************************************************************************************
ok: [127.0.0.1]

TASK [debug] **************************************************************************************************
ok: [127.0.0.1] => (item=/tmp/test_21.py) => {
    "msg": "/tmp/test_21.py"
}
ok: [127.0.0.1] => (item=/tmp/test_crypto.py) => {
    "msg": "/tmp/test_crypto.py"
}
ok: [127.0.0.1] => (item=/tmp/test_subprocess.py) => {
    "msg": "/tmp/test_subprocess.py"
}

TASK [获取文件到本机] ************************************************************************************************
ok: [127.0.0.1] => (item=/tmp/test_21.py)
ok: [127.0.0.1] => (item=/tmp/test_crypto.py)
ok: [127.0.0.1] => (item=/tmp/test_subprocess.py)

PLAY RECAP ****************************************************************************************************
127.0.0.1                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
Tags: Ansible