Все мои пьесы / роли Ansible зарегистрированы в моем репозитории git.
Однако для ролей Ansible Galaxy мне всегда приходится явно загружать их по одному на каждую машину, с которой я хочу запускать Ansible.
Трудно даже заранее знать, какие роли Ansible Galaxy необходимы, пока Ansible не пожалуется на недостающую роль во время выполнения.
Как можно управлять зависимостями ролей Ansible Galaxy? Я хотел бы, чтобы они были зарегистрированы в моем репозитории git вместе с остальной частью моего доступного кода, или чтобы они автоматически определялись и загружались при запуске Ansible на новой машине.
Ответы:
Для этого варианта использования вам следует использовать
requirements.yml
файл. Опишите требуемые роли, используя любой из множества способов установки:Затем установите их:
Вот рабочий пример (установка OpenDaylight с использованием Ansible в качестве инициатора Vagrant). Дополнительную информацию см. В соответствующих документах по Ansible .
источник
Как было предложено, для этой цели вы можете использовать доступную галактику.
В Ansible есть функция, в которой вы можете создать
requirements.yml
файл, в котором перечислены все ваши роли. Вы можете узнать об этом здесь: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-fileНапример (requirements.yml):
Затем вы запускаете
ansible-galaxy install -r requirements.yml
этот файл, чтобы загрузить все перечисленные в нем роли.Если вы хотите дополнительно автоматизировать его, вы можете создать простой сценарий оболочки, который будет запускать две команды.
Например (ansible.sh):
./ansible.sh
источник
2.2.1
Я часто устанавливаю Java JDK. Использование роли упрощает это прикосновение. Я пробовал несколько разных способов (включая множество .gitmodules и подмодулей ... Мне приходится использовать несколько систем git для работы, и все это становится уродливым). Мое главное требование - не проверять код роли в моем проекте playbook, в основном для того, чтобы я мог хранить все в одном месте.
Содержимое моего файла requirements.yml:
Я запускаю отдельную книгу install-roles.yml:
Я запускаю этот первый сценарий, а затем выполняю свои роли в любом сценарии. Для меня секрет в том, чтобы убедиться, что git игнорирует его, чтобы я не проверял роли по ошибке. Кроме того, поскольку я каждый раз удаляю папку, я гарантирую, что мне не нужно форсировать или игнорировать ошибки.
источник
Другое решение - использовать подмодули git. В конце концов, только Ansible Galaxy - это каталог репозиториев github ...
Я использую эту команду для автоматического добавления любой роли Galaxy в качестве подмодуля:
Затем зафиксируйте изменения в своем репозитории git. Когда вы в будущем клонируете свое репо, обязательно клонируйте его с помощью подмодулей, например
git clone ... --recursive
Преимущество этого заключается в том, что подмодуль git всегда ссылается на конкретную версию (git commit-hash). Это предотвратит запуск непроверенных обновлений в производственной среде. Новая версия роли Galaxy может иметь ошибки или работать совершенно иначе, чем раньше. С помощью подмодуля git вы решаете, обновлять ли роль до новой версии и когда именно.
Кроме того, вам не придется дополнительно заботиться о занесении в черный список ролей галактик,
.gitignore
чтобы предотвратить передачу их кода в ваш репозиторий.источник
--force
флагом, он не покажет вам, изменилось ли или что на самом деле. Это черный ящик, которым вы можете управлять, только если сохраните загруженные роли галактик в SCM. Хотя по другим причинам это все равно хорошая идея. Вытаскивая подмодули, вы хотя бы видите, какие роли изменились.Вы можете использовать роль Ansible для установки необходимых ролей с помощью командного модуля .
Вот очень простой пример, который работает
ansible-galaxy install
:ansible_roles_list
Может поставляться в виде переменной или в качестве параметра роли.Если вы делаете это в роли, она должна применяться перед любыми другими ролями, которые вы хотите установить с ее помощью, в отдельном сценарии. Это связано с тем, что Ansible проверяет, доступны ли все роли, прежде чем запускать playbook, в котором вы на них ссылаетесь.
источник
На данный момент, насколько мне известно, нет автоматического способа загрузки ролей во время выполнения. Лучше всего либо зафиксировать их в собственном репо, либо иметь надлежащую документацию, в которой перечислены все требования. Вы даже можете создать предполетный сценарий, в котором будут установлены ваши роли. :)
источник
Здесь мои требования касаются роли и используются в install.yml
main.yml
источник
Если файл requirements.yml находится в каталоге ролей вашего проекта, Tower / AWX устанавливает роли автоматически.
источник