Включение и импорт
Включение vs. импорт
Как отмечено в Создание повторно используемых Playbook, инструкции include и import очень похожи, однако движок Ansible обрабатывает их совершенно по-разному.
- Все
import*инструкции предварительно обрабатываются во время парсинга Playbook. - Все
include*инструкции обрабатываются по мере их обнаружения во время выполнения Playbook.
Обратитесь к Создание повторно используемых Playbook для получения информации о компромиссах, которые могут возникнуть при использовании каждого типа.
Также обратите внимание, что это поведение изменилось в версии 2.4. До Ansible 2.4 был доступен только include и его поведение зависело от контекста.
Новое в версии 2.4.
Импорт Playbook
Можно включить Playbook внутри основного Playbook. Например:
- import_playbook: webservers.yml - import_playbook: databases.yml
Игры и задачи в каждом указанном Playbook будут выполняться в порядке их перечисления, так же как если бы они были определены здесь напрямую.
До версии 2.4 был доступен только include и он работал как для Playbook, так и для задач, как для импорта, так и для включения.
Новое в версии 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
vars:
wp_user: timmy
- import_tasks: wordpress.yml
vars:
wp_user: alice
- import_tasks: wordpress.yml
vars:
wp_user: bob
См. Приоритет переменных: Где следует разместить переменную? для получения дополнительной информации о наследовании и приоритете переменных.
Инструкции include и import задач могут использоваться на произвольной глубине.
Примечание
- Статические и динамические задания могут комбинироваться, однако это не рекомендуется, так как это может привести к трудно диагностируемым ошибкам в ваших Playbook.
- Синтаксис
key=valueдля передачи переменных в импорт и включение устарел. Используйте YAMLvars:вместо этого.
Включения и импорты также могут использоваться в разделе handlers:. Например, если вы хотите определить, как перезапустить Apache, вам нужно сделать это только один раз для всех ваших Playbook. Вы можете создать handlers.yml, который выглядит так:
# more_handlers.yml
- name: restart apache
service:
name: apache
state: restarted
И в вашем основном файле Playbook:
handlers: - include_tasks: more_handlers.yml # or - import_tasks: more_handlers.yml
Примечание
Обязательно ознакомьтесь с ограничениями/компромиссами для обработчиков, указанными в Создание повторно используемых Playbook.
Вы можете смешивать включения вместе с вашими обычными не включенными задачами и обработчиками.
Включение и импорт ролей
См. Роли для получения подробной информации об включении и импорте ролей.
См. также
- Синтаксис YAML
- Узнайте о синтаксисе YAML
- Работа с Playbook
- Рассмотрите основные возможности языка Playbook
- Рекомендации по наилучшей практике
- Различные советы по управлению Playbook в реальном мире
- Использование переменных
- Все о переменных в Playbook
- Условные выражения
- Условные выражения в Playbook
- Циклы
- Циклы в Playbook
- Все модули
- Узнайте о доступных модулях
- Нужно ли разрабатывать модуль?
- Узнайте, как расширить Ansible, написав собственные модули
- Примеры Ansible на GitHub
- Полные файлы Playbook из исходного кода проекта 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.8/user_guide/playbooks_reuse_includes.html