assemble#
Модуль ansible.builtin.assemble собирает файлы из указанного каталога в один файл, который размещает на управляемых узлах в нужном месте.
Файлы, из которых собирается целевой файл, называются фрагментами.
Использование фрагментов позволяет разделить конфигурацию приложения на небольшие части, тем самым упрощая управление настройками. Этот подход используют многие приложения Linux, которые загружают свои настройки не только из основного конфигурационного файла, например:
загрузчик GRUB2 загружает настройки из конфигурационного файла
/etc/default/grubи файлов в каталоге/etc/default/grub.d/;настройки ядра Linux загружаются из конфигурационного
/etc/sysctl.confи файлов с расширением.confв каталоге/etc/sysctl.d/.
Особенности работы#
Модуль ansible.builtin.assemble имеет следующие особенности:
каталог с фрагментами может быть размещен и на управляющем узле, и на управляемых;
файлы фрагментов обрабатываются в алфавитном порядке.
Параметры#
- attributes, attr#
Изменение атрибутов, которые будет иметь собранный файл. Чтобы узнать о поддерживаемых атрибутах, обратитесь к руководству
chattrв целевой системе:man chattrЗначение этого параметра должно представлять собой строку, содержащую атрибуты в порядке, принятом в выводе
lsattrна целевой системе. Строка также может включать один из следующих операторов:=– установить строго указанный набор атрибутов;+– добавить указанные атрибуты к существующим;-– удалить указанные атрибуты из существующих.
Если оператор не указан, используется оператор
=. Это значит, что будут сброшены все установленные ранее атрибуты, кроме явно указанных в строке.
- backup#
Создание резервной копии файла, указанного в
dest, включая метку времени.Возможные значения:
false– не создавать резервную копию;true– создать резервную копию и только потом заменить существующий файл на собранный модулем.
Значение по умолчанию:
false.
- decrypt#
Управление автоматической расшифровкой фрагментов с использованием хранилища секретов.
Возможные значения:
false– не расшифровывать;true– расшифровывать.
Значение по умолчанию:
true.
- delimiter#
Строка-разделитель, позволяющая в собранном файле определить начало и конец использованных фрагментов.
- dest#
Обязательный параметр.
Путь, по которому необходимо разместить собранный файл.
- group#
Название группы, которой будет принадлежать собранный файл. Параметр работает как утилита
chown.Если значение не задано, используется основная (primary) группа пользователя, от имени которого выполняется задача. При выполнении задачи с привилегиями
rootпредыдущая группа-владелец может быть сохранена.
Обработка фрагментов, названия файлов которых начинаются с
.(скрытые файлы).Возможные значения:
false– скрытые фрагменты обрабатываются;true– скрытые фрагменты пропускаются.
- mode#
Режим доступа к собранному файлу.
Значения могут быть следующих типов:
Восьмеричное число, например,
0644или0755. Обязательно указывать с ведущим нулем или в кавычках:0644;'644'.
Если указать значение без кавычек или ведущего нуля, Ansible обработает его как десятичное число, что приведет к непредсказуемому результату.
Строковое значение, например,
u=rw,g=r,o=rилиu+rwx,g+rx,o=r.
Поведение по умолчанию:
если файл уже существует, режим доступа сохраняется;
если файл не существует, режим доступа определяется системным значением
umaskна управляемом узле.
Предупреждение
Рекомендуется всегда явно задавать значение параметра
mode, чтобы избежать назначения небезопасных или непредсказуемых режимов доступа. См. описание уязвимости CVE-2020-1736.
- owner#
Название учетной записи пользователя, которому будет принадлежать собранный файл. Параметр работает как утилита
chown.Если значение параметра не указано, владельцем становится активный пользователь. При выполнении задачи с привилегиями
rootпредыдущий владелец будет сохранен.Если используется числовое значение, владельцем становится пользователь с указанным идентификатором. Во избежание непредсказуемых назначений избегайте числовых значений.
- regexp#
Регулярное выражение для фильтрации фрагментов по названиям файлов.
Если значение параметра не задано, включаются все фрагменты.
Все символы обратной черты
\должны быть экранированы (\\) для соблюдения синтаксиса YAML.Примечание
Указанное значение обрабатывается средствами стандартной библиотеки Python.
- remote_src#
Узел, на котором выполняется поиск фрагментов.
Возможные значения:
true– на управляемых узлах;false– на управляющем узле.
- selevel#
Уровень файла в контексте безопасности SELinux.
Представляет собой MLS/MCS-атрибут, также известный как
range, который задает уровень доступа к объекту в системе с включенным SELinux.Если установлено значение
_default, будет использован уровень по умолчанию из политики SELinux для данного файла (если такая политика определена).
- serole#
Роль собранного файла в контексте безопасности SELinux.
Если установлено значение
_default, будет использована роль по умолчанию из политики SELinux для данного файла (если такая политика определена).
- setype#
Тип собранного файла в контексте безопасности SELinux.
Если установлено значение
_default, будет использован тип по умолчанию из политики SELinux для данного файла (если такая политика определена).
- seuser#
Пользователь собранного файла в контексте безопасности SELinux.
Если значение не указано, используется системная политика определения пользователя.
Если установлено значение
_default, будет использован пользователь по умолчанию из политики SELinux для данного файла (если такая политика определена).
- src#
Обязательный параметр.
Путь к каталогу с фрагментами.
Важно
Каталог должен существовать и не быть пустым.
- unsafe_writes#
Использование атомарной записи для предотвращения повреждения данных или несогласованного чтения целевого файлового объекта.
По умолчанию модуль использует атомарные операции записи, при которых данные сначала записываются во временный файл, а затем временный файл заменяет целевой. Это исключает возможность считывания неполных или поврежденных данных другим процессом во время записи.
На некоторых системах (например, при работе с томами Docker) атомарные операции могут быть недоступны или вызывать ошибки. В этом случае установка значения
trueпозволяет Ansible выполнить небезопасную (неатомарную) запись напрямую в целевой файл.Предупреждение
Небезопасная запись может привести к состоянию гонки и повреждению данных.
Возможные значения:
false– атомарные операции обязательны. При их невозможности задача завершится с ошибкой.true– если атомарная запись невозможна, будет использован небезопасный способ записи.
Значение по умолчанию:
false.
- validate#
Шаблон команды для проверки корректности собранного файла.
Путь к файлу подставляется автоматически вместо последовательности символов
%s, которая должна присутствовать в шаблоне. Если проверка проходит без ошибок, собранный файл размещается по пути, указанному вdest. В противном случае задача завершается с ошибкой.Команда запускается безопасно, поэтому расширения оболочки и конвейеры (pipes) не будут работать.
Атрибуты#
Атрибуты определяют функции Ansible, которые может использовать модуль.
Атрибут |
Описание |
|---|---|
|
Модуль имеет соответствующее расширение действия (action plugin), которое выполняет работу на управляющем узле. |
|
Модуль не поддерживает асинхронное выполнение. |
|
Модуль не поддерживает глобальное выполнение задачи. |
|
Модуль не работает в режиме проверки. |
|
Модуль поддерживает режим сравнения ( |
|
Модуль поддерживает только POSIX-совместимые ОС. |
|
Модуль использует строгие механизмы работы с файлами Ansible для обеспечения правильных разрешений и предотвращения повреждения данных. |
|
Модуль поддерживает автоматическую расшифровку исходных файлов с использованием хранилища секретов. |
Примеры#
Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.
Сборка конфигурации PHP#
Следующий пример демонстрирует сборку конфигурационного файла /etc/php/8.1/fpm/php.ini из фрагментов, хранящихся в каталоге php-config/ на управляющем узле:
---
- name: Configure PHP
hosts: all
become: true
tasks:
- name: Generate php.ini
ansible.builtin.assemble:
src: ./php-config/
dest: /etc/php/8.1/fpm/php.ini
Использование разделителя#
Следующий пример демонстрирует использование строки-разделителя при сборке фрагментов, хранящихся на управляемых узлах:
---
- name: Configure NGINX
hosts: all
become: true
tasks:
- name: Generate nginx.conf
ansible.builtin.assemble:
src: /tmp/nginx-config/
dest: /etc/nginx/nginx.conf
delimiter: "# ANSIBLE ASSEMBLE"
remote_src: true
Проверка конфигурационного файла#
Следующий пример демонстрирует проверку конфигурационного файла DNS-сервера Bind9 с помощью утилиты named-checkconf.
Если проверка не будет успешной, содержимое файла /etc/bind/named.conf на управляемых узлах не изменится.
---
- name: Update Bind9 config
hosts: all
become: true
tasks:
- name: Update named.conf
ansible.builtin.assemble:
src: ./bind-config/
dest: /etc/bind/named.conf
validate: named-checkconf %s