Pull to refresh

Comments 2

Отличный цикл статей, прямо must have для пользователей Ansible.
Вопрос немного не по теме, насчёт модулей, которые запускаются локально («connection: local, local_action или delegate_to: localhost»). У нас в проекте возникает небольшая проблема с тем, что у нас есть роли, которые по своей сути должны запускать локальные таски на control machine (к примеру разворачивание виртуалок в облаке, деплой приложений через REST API в какой-нибудь Mesos/Marathon и т.д.). Поэтому в playbook мы пишем что-то вроде
- hosts: localhost
roles:
- name: deploy-vm

И это вынуждает нас записывать localhost в inventory, что само по себе логически не правильно, т.к. localhost не является единицей нашего боевого парка машин. А так же пришлось для localhost ещё и фиктивные host_vars написать, те же параметры, что и у «настоящих» хостов из inventory. Надеюсь не слишком сумбурно изложил. Есть ли у вас такая проблема и знаете ли вы её элегантное решение?

Нет необходимости добавлять localhost в инвентарь. Ansible умеет понимать что такое localhost и без добавления в инвентарь (см. код). Т.е. в инвентаре могут быть серверы test1,test2 и группа all будет содержать именно эти два сервера. Но при этом вы смело можете запустить какой-нибудь плей для localhost (- hosts: localhost) и Ansible выполнит его на локальном хосте.


Что касается роли deploy-vm, то в зависимости от того, что внутри неё – можно делать разный подход. И либо целиком запускать на локалхосте, либо, как часто делают, в целой роли только первая задача делегируется на локалхост (сам процесс создания VM), а следующие таски выполняются уже на вновь созданной виртуальной машине (такие как hostname, mount и т.п.).

Sign up to leave a comment.