Ansible Есть ли способ сделать глобальную задачу для использования во всех плейбуках - PullRequest
1 голос
/ 05 мая 2020

есть ли способ создать центральную функцию только один раз и вызвать ее из каждой книги задач, которая в ней нуждается? Например, у меня есть эта задача:

- name: Download
  get_url:
    url_username: foo
    url_password: foo
    dest: "{{ ansible_env.APP }}/"
    url: "{{ download_url }}"

одна и та же задача копирует / вставляет несколько раз в разных плейбуках, это очень неэффективно.

в любом случае определите ее один раз и вызовите из другие пьесы?

1 Ответ

2 голосов
/ 05 мая 2020

Есть два варианта.

1) Поместите задачу в файл и используйте include_tasks или import_tasks .

2) Создайте роль с файлом и используйте include_role tasks_from .

FWIW. Смотрите мои библиотеки задач ansible_lib и linux_lib .


Q: «В чем разница между ними?»

A: Импортированный код присутствует с начала выполнения playbook . Включенный код будет загружен, когда рабочий процесс достигнет точки. Это влияет на

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

См. Подробности


( на основе мнения )

Q: «Что обычно используется?»

A: include_role - самый мощный и гибкий вариант. См. параметры модуля.


Q: «А как насчет import_playbook?»

A: Это не модуль. Это простая директива для включения кода. Используйте import_playbook, чтобы упростить (разбить на модули) сложные playbooks и изменить параметры playbook на лету (например, hosts, become, ...), сохраняя переменные playbook .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...