fetch#

Модуль ansible.builtin.fetch загружает файлы с управляемых узлов на управляющий.

Для копирования файлов в обратном направлении, с управляющего узла на управляемые, используйте модуль ansible.builtin.copy.

Особенности работы#

Особенности использования модуля ansible.builtin.fetch:

  • Для хранения загруженных файлов модуль создает структуру каталогов, используя названия узлов согласно описанию инвентаря.

  • Если файл, указанный в dest, уже существует и отличается от src, он будет перезаписан.

  • Модуль может работать с узлами под управлением ОС Windows.

  • При запуске с параметром become для получения содержимого файла и определения его контрольной суммы используется модуль ansible.builtin.slurp. Это удваивает объем передаваемых по сети данных. Также, в зависимости от размера файла, это может привести к исчерпанию памяти, доступной на управляющем или управляемом узле, тем самым приводя к трудноуловимым ошибкам. По указанным причинам рекомендуется использовать модуль ansible.builtin.fetch без become.

  • Для отслеживания ошибок чтения файлов на управляемых узлах используйте fail_when или ignore_errors. Чтобы добиться успешного выполнения задачи даже при ошибках чтения, укажите для параметра fail_on_missing значение true.

Параметры#

Модуль принимает следующие параметры:

dest#

Обязательный параметр.

Путь к каталогу для загрузки файлов. По умолчанию формируется по следующей схеме:

<dest>/<hostname>/<src>

Здесь:

  • <dest> – значение параметра dest;

  • <hostname> – название узла в описании инвентаря;

  • <src> – значение параметра src.

Например, пусть задача описана следующим образом:

---
- name: Download sshd_config
  ansible.builtin.fetch:
    src: /etc/ssh/sshd_config
    dest: /backup/ssh_config

Файл sshd_config с узла node.example.com будет загружен в /backup/ssh_config/node.example.com/etc/ssh/sshd_config.

fail_on_missing#

Поведение модуля при невозможности прочитать указанный в src файл на управляемом узле.

Возможные значения:

  • false – игнорировать ошибку;

  • true – завершить задачу с ошибкой.

Значение по умолчанию: true.

flat#

Упрощение структуры каталогов при загрузке файлов.

Возможные значения:

  • false – путь формируется так, как указано в описании параметра dest.

  • true – если значение dest оканчивается на /, файл сохраняется в указанный каталог без создания подкаталогов с названием узла и пути к файлу на управляемом узле.

    Это значение может быть полезно в следующих случаях:

    • задача работает только с одним узлом;

    • названия файлов на управляемых узлах уникальны.

    Важно

    Если названия файлов на управляемых узлах одинаковы, модуль загрузит их в одно и то же расположение. Таким образом, в каталоге будет только один файл, а его содержимое будет соответствовать содержимому файла на том узле, который был обработан последним.

Значение по умолчанию: false.

src#

Обязательный параметр.

Путь к файлу на управляемом узле.

validate_checksum#

Проверка контрольной суммы файла после загрузки.

Возможные значения:

  • false – без проверки контрольной суммы;

  • true – проверка контрольной суммы.

Значение по умолчанию: true.

Атрибуты#

Атрибуты определяют функции Ansible, которые может использовать модуль.

Атрибут

Описание

action

Модуль имеет соответствующее расширение действия (action plugin), которое выполняет работу на управляющем узле.

async

Модуль не поддерживает асинхронное выполнение.

bypass_host_loop

Модуль не поддерживает глобальное выполнение задачи. Условия срабатывают при использовании run_once. Значения переменных берутся с первого доступного узла. Это действие не работает при использовании стратегии, отличной от lockstep.

check_mode

Модуль работает в режиме проверки (check_mode) в полном объеме. Режим проверки позволяет узнать, какие файлы и куда будут загружены на управляющий узел при выполнении задачи.

diff_mode

Модуль поддерживает режим сравнения (diff_mode) в полном объеме и возвращает подробную информацию о сделанных изменениях.

platform

Модуль поддерживает POSIX-совместимые ОС и ОС Windows.

safe_file_operations

Модуль не использует строгие механизмы Ansible для работы с файлами чтобы обеспечить правильные разрешения и предотвратить повреждение данных.

vault

Модуль не поддерживает автоматическую расшифровку исходных файлов с использованием хранилища секретов.

Примеры#

Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.

Во всех примерах используется следующий инвентарь:

inventory.yml#
---
all:
  hosts:
    node1.example.com:
    node2.example.com:
    node3.example.com:

Загрузка файлов в указанный каталог#

Следующий пример демонстрирует загрузку файлов /var/log/apt.log по пути /var/log/<hostname>/var/log/apt.log:

---
- name: Make default directory structure and download files
  ansible.builtin.fetch:
    src: /var/log/apt.log
    dest: /var/log/

Структура файлов и каталогов, созданная в результате выполнения задачи:

/var/
└── log/
    ├── node1.example.com/
    │   └── var/
    │       └── log/
    │           └── apt.log
    ├── node2.example.com/
    │   └── var/
    │       └── log/
    │           └── apt.log
    └── node3.example.com/
        └── var/
            └── log/
                └── apt.log

Загрузка файлов под уникальными названиями#

Следующий пример демонстрирует загрузку файлов /var/log/apt.log в уникальные каталоги с плоской структурой:

---
- name: Download files to different directories
  ansible.builtin.fetch:
    src: /var/log/apt.log
    dest: /var/log-{{ inventory_hostname }}
    flat: true

Структура файлов и каталогов, созданная в результате выполнения задачи:

/var/
├── log-node1.example.com/
│   └── apt.log
├── log-node2.example.com/
│   └── apt.log
└── log-node3.example.com/
    └── apt.log

Игнорирование ошибок#

Следующий пример демонстрирует загрузку файлов с игнорированием ошибок. Даже если на управляемом узле не будет существовать или не будет доступен для чтения указанный файл, задача будет считаться выполненной успешно:

---
- name: Rewrite one file many times
  ansible.builtin.fetch:
    src: /etc/apt/apt.d/proxy
    dest: /backup/apt/
    fail_on_missing: false