template - Шаблонизирует файл на удалённом сервере
Описание
- Шаблоны обрабатываются с помощью языка шаблонов Jinja2 (http://jinja.pocoo.org/docs/) — документация по форматированию шаблонов доступна в документации по дизайну шаблонов (http://jinja.pocoo.org/docs/templates/).
- В шаблонах можно использовать шесть дополнительных переменных:
ansible_managed(настраивается в разделеdefaultsразделаansible.cfg) содержит строку, которая может использоваться для описания имени шаблона, хоста, времени последнего изменения файла шаблона и идентификатора владельца.template_hostсодержит имя узла машины, на которой находится шаблон.template_uid— числовой идентификатор пользователя владельца.template_path— путь к шаблону.template_fullpath— абсолютный путь к шаблону.template_run_date— дата рендеринга шаблона.
Параметры
| параметр | обязательный | по умолчанию | варианты | примечания |
|---|---|---|---|---|
| attributes (добавлен в 2.3)
| нет | None | Атрибуты, которые должен иметь файл или каталог. Чтобы получить поддерживаемые флаги, обратитесь к справке man для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в выводе lsattr. псевдонимы: attr | |
| backup | нет | нет |
| Создать резервную копию файла, включая информацию о времени, чтобы можно было восстановить исходный файл, если он был поврежден. |
| block_end_string (добавлен в 2.4)
| нет | %} | Строка, обозначающая конец блока. | |
| block_start_string (добавлен в 2.4)
| нет | {% | Строка, обозначающая начало блока. | |
| dest | да | Место назначения рендеринга шаблона на удалённой машине. | ||
| follow (добавлен в 2.4)
| нет | нет |
| Флаг, указывающий, что следует переходить по ссылкам на файлы в системе в пути назначения, если они существуют. До Ansible 2.4 этот флаг был жестко задан как yes. |
| force | нет | да |
| По умолчанию yes, что будет заменять удалённый файл, когда содержимое отличается от исходного. Если no, файл будет передан только в том случае, если файл в пути назначения не существует. |
| group | нет | Имя группы, которой должен принадлежать файл/каталог, как указано для команды chown. | ||
| mode | нет | Режим файла или каталога. Для тех, кто знаком с /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами (например, 0644). Опускание ведущей нули, скорее всего, приведёт к непредвиденным результатам. Начиная с версии 1.8, режим может быть указан в символической форме (например, u+rwx или u=rw,g=r,o=r). | ||
| newline_sequence (добавлен в 2.4)
| нет | \n |
| Укажите последовательность символов новой строки для файлов шаблонов. |
| owner | нет | Имя пользователя, которому должен принадлежать файл/каталог, как указано для команды chown. | ||
| selevel | нет | s0 | Часть контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. Функция _default работает как для seuser. | |
| serole | нет | Часть роли контекста файла SELinux, функция _default работает как для seuser. | ||
| setype | нет | Часть типа контекста файла SELinux, функция _default работает как для seuser. | ||
| seuser | нет | Часть пользователя контекста файла SELinux. По умолчанию использует политику системы, если применимо. Если задано значение _default, используется часть user политики, если она доступна. | ||
| src | да | Путь к файлу шаблона Jinja2 на контроллере Ansible. Это может быть относительный или абсолютный путь. | ||
| trim_blocks (добавлен в 2.4)
| нет | нет |
| Если установлено значение True, первая новая строка после блока будет удалена (блок, а не тег переменной!). |
| unsafe_writes (добавлен в 2.2)
| нет |
| Обычно этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованных чтений из целевых файлов. Иногда системы настроены или просто не работают так, что это невозможно. Пример — файлы, смонтированные через Docker, которые не могут быть обновлены атомарно и могут быть обновлены только небезопасным способом. Этот булев параметр позволяет Ansible перейти к небезопасным методам обновления файлов в тех случаях, когда у вас нет другого выбора. Имейте в виду, что это подвержено проблемам гонок и может привести к повреждению данных. | |
| validate | нет | None | Команда проверки, выполняемая перед копированием в место назначения. Путь к проверяемому файлу передается через '%s', который должен присутствовать, как показано в примере ниже. Команда передаётся безопасно, поэтому такие функции оболочки, как расширение и конвейеры, не будут работать. | |
| variable_end_string (добавлен в 2.4)
| нет | }} | Строка, обозначающая конец инструкции печати. | |
| variable_start_string (добавлен в 2.4)
| нет | {{ | Строка, обозначающая начало инструкции печати. |
Примеры
# Example from Ansible Playbooks
- template:
src: /mytemplates/foo.j2
dest: /etc/file.conf
owner: bin
group: wheel
mode: 0644
# The same example, but using symbolic modes equivalent to 0644
- template:
src: /mytemplates/foo.j2
dest: /etc/file.conf
owner: bin
group: wheel
mode: "u=rw,g=r,o=r"
# Create a DOS-style text file from a template
- template:
src: config.ini.j2
dest: /share/windows/config.ini
newline_sequence: '\r\n'
# Copy a new "sudoers" file into place, after passing validation with visudo
- template:
src: /mine/sudoers
dest: /etc/sudoers
validate: '/usr/sbin/visudo -cf %s'
# Update sshd configuration safely, avoid locking yourself out
- template:
src: etc/ssh/sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: '0600'
validate: /usr/sbin/sshd -t -f %s
backup: yes
Примечания
Примечание
- Для Windows можно использовать win_template, который использует ‘rn’ в качестве
newline_sequence. - Включение строки с датой в шаблон приведёт к тому, что шаблон будет помечен как изменённый каждый раз.
- Начиная с Ansible версии 0.9, шаблоны загружаются с помощью
trim_blocks=True. - Также можно переопределить настройки Jinja2, добавив специальный заголовок в файл шаблона. Например,
#jinja2:variable_start_string:'[%', variable_end_string:'%]', trim_blocks: False, который изменяет маркеры интерполяции переменных на [% var %] вместо {{ var }}. Это лучший способ предотвратить оценку вещей, которые выглядят как, но не должны быть Jinja2. raw/endraw в Jinja2 не будут работать так, как вы ожидаете, потому что шаблоны в Ansible многократно оцениваются. - Можно использовать модуль
copyс опциейcontent:, если вы предпочитаете шаблон в строчном виде как часть книги сценариев.
Статус
Этот модуль помечен как stableinterface, что означает, что разработчики этого модуля гарантируют, что не будет вноситься обратная совместимость с интерфейсом.
Информация о техническом обслуживании
Дополнительную информацию о поддержке этого модуля компанией Red Hat см. в knowledge base article<https://access.redhat.com/articles/rhel-top-support-policies>
Для получения помощи в разработке модулей, если вы так заинтересованы, прочитайте Справочная информация по сообществу и участие, Тестирование Ansible и Разработка модулей.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/template_module.html