Size: a a a

ansible — русскоговорящее сообщество

2017 December 26

NZ

Nikolay Zaitsev in ansible — русскоговорящее сообщество
Привет всем. Подскажите пожалуйса ответ на такой вопрос.

Я указал хост host02.example.com в двух группах. Хочу иметь возможность запускать плейбук как для одного хоста в отдельности так и для группы, в которую входит сервер. Вот пример плейбука.

./deploy.yml
- hosts: host02.example.com
 roles:
   - role_web
   - role_ssh

- hosts: group2
 roles:
   - role_web
   - role_ssh


./hosts
[group1]
host01.example.com
host02.example.com

[group2]
host02.example.com
host03.example.com

[platform:children]
group1
group2


Запускаю для конкретного хоста через ключ -l

ansible-playbook -l host02.example.com deploy.yml


Однако вижу, что спева плейбук выполняется для хоста

PLAY [host02.example.com] ********


А потом сразу и для группы, но исключительно для этого же хоста host02.example.com.

PLAY [group2] ********


В итоге для одного хоста дважды выполняется роль.

Как составить inventory файл так, чтобы иметь возможность запускать по ключу -l либо для конкретного хоста либо для конркетной группы, но чтобы один раз выполнялось ?
источник

PK

Petr Kyznetsov in ansible — русскоговорящее сообщество
добавьте в playbook теги
tags:
  - firstplaybook
...
tags:
источник

PK

Petr Kyznetsov in ansible — русскоговорящее сообщество
- second playbook

и запускайте ansible-playbook -l host02.example.com deploy.yml —tags firstplaybook
источник

PK

Petr Kyznetsov in ansible — русскоговорящее сообщество
чтобы проверить какие задачи будут работать можете запустить с параметром —list-tasks, для пропуска каких то тасков есть ключ —skip-tags
ansible-playbook -l host02.example.com deploy.yml —tags secondplaybook —skip-tags firstplaybook —list-tasks
источник

PK

Petr Kyznetsov in ansible — русскоговорящее сообщество
в вашем случае все правильно отработало, так как у вас два плейбука с разными группами\хостами
источник

NZ

Nikolay Zaitsev in ansible — русскоговорящее сообщество
Я понял. Ansible проходит сверху вниз по всем хостам в плейбуке deploy.yml

- hosts: host02.example.com
 roles:
   - role_web
   - role_ssh

- hosts: group2
 roles:
   - role_web
   - role_ssh


В частности он пытается вполнить host02.example.com и затем group2.

Если я использую ключ -l указывая хост, то ansible такж будет сверху вниз пытаться все выполнить, только пропускать те хосты, которые не совпадают с тем, что задан через ключ -l. Но при этом дойдя до выполнения тасков группы он все равно выполнит, т.к. в группе есть этот сервер.

Спасибо за подсказку по с тегом. В моем случае сработал вариант указывания тега равное имени хоста.

- hosts: host02.example.com
 roles:
   - role_web
   - role_ssh
 tags: host02.example.com

- hosts: group2
 roles:
   - role_web
   - role_ssh


Вот тогда он выполнил только таски для этого хоста по тегу.

ansible-playbook -l host02.example.com deploy.yml —tags host02.example.com


Правда этот вариант мне кажется костыльным.  Наверное лучше составить inventory файл как-то по другому или разбить на несколько.
источник
2017 December 27

DS

Dmitriy S. in ansible — русскоговорящее сообщество
что-то никак розабраться не могу с ролями, тегами и их привязкой к хостам :(
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
stackoverflow уже задолбался читать
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
Кто может посказать как можно выполнять задачи (tasks),  которые находятся во вложенных файлах которые подгружаются директивой include_tasks, при этом указывать теги (tags) этих задач? Другими словами в данный момент команда ansible-playbook —tags bla bla bla не считывает рекурсивно теги которые лежат в файле который я подключаю директивой include_tasks
источник
2017 December 28

NK

ID:294130032 in ansible — русскоговорящее сообщество
Dmitriy S.
Кто может посказать как можно выполнять задачи (tasks),  которые находятся во вложенных файлах которые подгружаются директивой include_tasks, при этом указывать теги (tags) этих задач? Другими словами в данный момент команда ansible-playbook —tags bla bla bla не считывает рекурсивно теги которые лежат в файле который я подключаю директивой include_tasks
Мы вообще tags не юзаем. Все по переменной, вроде action разруливается.
Может и не трувейно, но работает.
tags - вроде как игнорит все что не помечено тегом.
А обычный запуск запускает все и уже потом по when разруливает
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
ID:294130032
Мы вообще tags не юзаем. Все по переменной, вроде action разруливается.
Может и не трувейно, но работает.
tags - вроде как игнорит все что не помечено тегом.
А обычный запуск запускает все и уже потом по when разруливает
tags считывает только себя...верно
источник

NK

ID:294130032 in ansible — русскоговорящее сообщество
Dmitriy S.
tags считывает только себя...верно
Ну, вроде как. Потому что, если запускать через теги, то нет приколов вроде skipped регистров.
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
В общем я проставляю эти теги у себя в тасках но по факту не пользуюсь ими
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
Начал изучать ansible недавно и после недели составления с потом и кровью начал понимать что обычные скрипты не так уж и плохи
источник

NK

ID:294130032 in ansible — русскоговорящее сообщество
Dmitriy S.
В общем я проставляю эти теги у себя в тасках но по факту не пользуюсь ими
PS если будешь слишком много уровней вложенности делать, то придется такие хаки лепить
sed -i '/main/isys.setrecursionlimit(3000)' bin/ansible
источник

NK

ID:294130032 in ansible — русскоговорящее сообщество
Мы уже в 4000 вроде уперлись
источник

NK

ID:294130032 in ansible — русскоговорящее сообщество
Dmitriy S.
Начал изучать ansible недавно и после недели составления с потом и кровью начал понимать что обычные скрипты не так уж и плохи
Ну, если все правильно делать. То на ansible все гораздо красивее получается. И поэтому стабильнее работает
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
ID:294130032
Ну, если все правильно делать. То на ansible все гораздо красивее получается. И поэтому стабильнее работает
однотипно - это плюс! многие таски можно сравнить с подпрограммами, в скриптах бы все это пришлось реализовывать самому - это тоже плюс ansible!
источник

NK

ID:294130032 in ansible — русскоговорящее сообщество
Dmitriy S.
Начал изучать ansible недавно и после недели составления с потом и кровью начал понимать что обычные скрипты не так уж и плохи
На данный момент у меня много чего через ansible делается:
- все описано в одном yaml конфиге. Все устройства, ip, mac, порты, пути к ssh ключам и нужные сервисы.
- админится роутер на openwrt (генерю конфиги, потом по scp заливаю на него и запускаю в raw: uci commit)
- генерится .ssh/config для всего этого зоопарка.
- генерится /etc/hosts для этого же зоопарка + для локальных сайтов, которые тоже описаны в конфиге

Т.о. просто добавляю что-то в конфиг и дергаю плейбук. И все.
Т.е. добавляю одну железку, например, приставку для телека на android.
Добавляю mac и прописываю ей нужный ip, и у меня все это применяется на роутере, и генерится конфиг для нее, чтобы потом по ftp на нее бегать.
источник

DS

Dmitriy S. in ansible — русскоговорящее сообщество
сколько времени было потрачено на написание плейбуков в целом?
источник