Включение и импорт
Включение против импорта
Как отмечено в Создание многократно используемых плейбуков, инструкции include и import очень похожи, однако движок Ansible обрабатывает их совершенно по-разному.
- Все инструкции
import*обрабатываются при разборе плейбуков. - Все инструкции
include*обрабатываются по мере их обнаружения во время выполнения плейбука.
Обратитесь к Создание многократно используемых плейбуков для получения информации о компромиссах, с которыми вы можете столкнуться при использовании каждого типа.
Также имейте в виду, что это поведение изменилось в версии 2.4; до этой версии Ansible была доступна только include, и ее поведение отличалось в зависимости от контекста.
Новая функция в версии 2.4.
Импорт плейбуков
Возможен импорт плейбуков в мастер-плейбук. Например:
--- - import_playbook: webservers.yml - import_playbook: databases.yml
Плей и задачи в каждом указанном плейбуке будут выполняться в том порядке, в котором они указаны, точно так же, как если бы они были определены здесь напрямую.
До версии 2.4 был доступен только include, и он работал как для плейбуков, так и для задач как импорт, так и включение.
Новая функция в версии 2.4.
Включение и импорт файлов задач
Использование файлов со списками включенных задач — отличный способ определить роль, которую система должна выполнить. Файл с включенными задачами просто содержит плоский список задач:
# common_tasks.yml --- - name: placeholder foo command: /bin/foo - name: placeholder bar command: /bin/bar
Затем вы можете использовать import_tasks или include_tasks для включения этого файла в ваш основной список задач:
tasks: - import_tasks: common_tasks.yml # or - include_tasks: common_tasks.yml
Вы также можете передавать переменные в импорты и включения:
tasks: - import_tasks: wordpress.yml wp_user=timmy - import_tasks: wordpress.yml wp_user=alice - import_tasks: wordpress.yml wp_user=bob
Переменные также могут передаваться в файлы включения с использованием альтернативного синтаксиса, который также поддерживает структурированные переменные, такие как словари и списки:
tasks:
- include_tasks: wordpress.yml
vars:
wp_user: timmy
ssh_keys:
- "{{ lookup('file', 'keys/one.pub') }}"
- "{{ lookup('file', 'keys/two.pub') }}"
Используя любой из синтаксисов, переданные переменные могут использоваться в включенных файлах. Эти переменные будут доступны только задачам в пределах включенного файла. Подробнее о наследовании и приоритете переменных см. Приоритет переменных: Где мне следует поместить переменную?.
Инструкции включения задач могут использоваться на любой глубине.
Примечание
Статические и динамические значения могут быть смешаны, но это не рекомендуется, так как это может привести к трудно диагностируемым ошибкам в ваших плейбуках.
Включение и импорт также могут использоваться в разделе handlers:; например, если вы хотите определить, как перезапустить apache, вам нужно сделать это только один раз для всех ваших плейбуков. Вы можете создать файл handlers.yml, который выглядит так:
# more_handlers.yml --- - name: restart apache service: name=apache state=restarted
А в вашем главном файле плейбука:
handlers: - include_tasks: more_handlers.yml # or - import_tasks: more_handlers.yml
Примечание
Убедитесь, что вы ознакомились с ограничениями/компромиссами для обработчиков, указанными в Создание многократно используемых плейбуков.
Вы можете смешивать включения со своими обычными задачами и обработчиками, не требующими включения.
Включение и импорт ролей
Подробную информацию об включении и импорте ролей см. в Роли.
См. также
- Синтаксис YAML
- Узнайте о синтаксисе YAML
- Плейбуки
- Ознакомьтесь с основными функциями языка плейбуков
- Рекомендации по практике
- Различные советы по управлению плейбуками в реальном мире
- Переменные
- Все о переменных в плейбуках
- Условные операторы
- Условные операторы в плейбуках
- Циклы
- Циклы в плейбуках
- О модулях
- Узнайте о доступных модулях
- Разработка модулей
- Узнайте, как расширить Ansible, написав свои собственные модули
- Примеры Ansible в GitHub
- Полные файлы плейбуков из исходного кода проекта GitHub
- Список рассылки
- Вопросы? Помощь? Идеи? Обратитесь к списку на Google Groups
© 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/playbooks_reuse_includes.html