Dmitrii
А теперь мякотка: как сделать так, чтобы весь плейбук исполнился ровно столько раз, сколько у меня групп ассоциировано с одним и тем же хостом?
Dmitrii
Кейс: есть разные сайты, А и Б. На проде все ясно, там разные сервера и разные группы. А вот для дева мне надо все запихать на одну VM.
Sergey
Кейс: есть разные сайты, А и Б. На проде все ясно, там разные сервера и разные группы. А вот для дева мне надо все запихать на одну VM.
дописать во все необходимые группы в качестве children группу "my_poor_dev" , затем в неё включить этот уставший хост?
Dmitrii
Просто у меня стойкое ощущение что в итоге ансибл исполнит плейбук на дев хосте только один раз а не два раза
Artem
приветствую, а никто с такой задачей не сталкивался- есть кучка нод на них что-то выполняется вот если не выполнилась конкретная таска- мне надо куда-то записать это в разрезе ноды и при повторном запуске того же плейбука прочитать эти данные для ноды и перевыполнить(просто выполнить плейбук поновой н епрокатит- так как для него будет так что состояние уже достигнуто- ничего не нужн оменять). То есть хотелось бы какую-то постоянную хранилку куда можно запистаь нужные мне данные.
Artem
как финт ушами- создавать кастомные факты на ноде в файлах, но может есть что-то красивее
Gleb
то что выполнено и не будет применено, ты о чем?
Artem
я где-то написал что это плохо?
Artem
задача выше возникла из-за кривости модуля ansible mount- переписывать его мне не хочется- отсюда и делаю workaround
Alex
Кто-то юзал flush_handlers внутри роли? У вас нормально работает?
Aleksey
у меня есть в одном месте.
Aleksey
вроде работает
Alex
Просто у меня либо не запускает, либо в конце плэйбука
Alex
Пока перекинул в обычный таск в конце роли
Aleksey
запускает в конце плея
Alex
В доках писали, что должно запускать в конце роли
Aleksey
у меня каждая роль в своем плее. так что я могу не заметить разницу
Mike
Почему ansible может не видеть ни фактов, ни hostvars? gather_facts: True, но дажe ansible_hostname всегда Undefined. плейбук: https://pastebin.ca/3855734 вывод: ok: [10.0.10.31] => { "ip-10-0-10-31": "VARIABLE IS NOT DEFINED!" } ok: [10.0.10.230] => { "ip-10-0-10-230": "VARIABLE IS NOT DEFINED!" }
Mike
Причем с ключом -vvv ansible-playbook показывает, что факты, включая ansible_hostname собираются успешно
Dima
testrole/tasks/main.yml: - setup: - name: Set the webserver check if webserver is present debug: var="{{ ansible_hostname }}"
Dima
а
Dima
пардон
Dima
слона не заметил
Dima
[sandbox] 10.0.10.31 server_hostname_1 10.0.10.230 server_hostname_2
Mike
ну это чит, не? :)
Dima
если ты хочешь ip вывести то debug: var="{{ ansible_host }}"
Dima
просто сделай ansible -i inventory -m setup? посмотри переменные какие нужны?
Dima
и потом уже дебаж
Mike
я хочу вывести именно hostname, чтобы дальше его подставлять в темплейты
Dima
у тебя вот так вот отдаётся? ansible all -m setup -a "filter=ansible_hostname"
Mike
у тебя вот так вот отдаётся? ansible all -m setup -a "filter=ansible_hostname"
извиняюсь за тупость, но получаю ERROR! Missing target hosts, хотя пытался подсунуть инвентарь в -i по-всякому
Dima
ansible -i inventory_файл all -m setup -a "filter=ansible_hostname"
Mike
о, точно. Группу забыл. 10.0.10.31 | SUCCESS => { "ansible_facts": { "ansible_hostname": "ip-10-0-10-31" }, "changed": false } 10.0.10.230 | SUCCESS => { "ansible_facts": { "ansible_hostname": "ip-10-0-10-230" }, "changed": false }
Mike
т.е., как я уже сказал, факты оно собирает, но почему-то не может их использовать в роли
Oleg
Ребят, привет. Подскажите, как register переменную запихнуть в loop ? у меня генерится пароль, записывается в register. Хочу дальше чтоб для разных юзеров (item) генерились разные пароли. Возможно это можно и проще без register.
Oleg
у меня получается только один пароль на всех юзеров)
Oleg
- name: Generate password for mongodb users block: - shell: 'tr -d -c "a-zA-Z0-9" < /dev/urandom | head -c 8' register: mongodbpass - debug: var=mongodbpass - mongodb_user: name={{ item.name }} database={{ item.db }} password={{ mongodbpass.stdout }} with_items: - { name: 'siteRootAdmin', db: 'admin' } - { name: 'siteUserAdmin', db: 'admin' }
Anonymous
Передавай пароли переменной "сверху"
Anonymous
на крайняк vault, либо через jenkins credentials
Anonymous
смторя что да как утебя
Oleg
что такое переменная сверху ?)
Oleg
мне условно надо десяти юзерам сгенрить 10 разных паролей
Oleg
и вывести результат login:pass
Anonymous
нагенери пароли в файл переменных для роли, зашифруй vault'ом
Anonymous
Мне видится странным такой подход к применению паролей, который ты используешь... Может я картины в целом не вижу...
Anonymous
Но я бы через переменные любым подходящим способом просовывал бы пароли ансиблу
Oleg
я понял идею. я хотел чтобы ансибл сам мне все генерил и раздавал пароли юзерам в лупе
Anonymous
А ты бы их потом выдергивал и хранил? :)
Oleg
ну я бы stdout в файл направил :)
Anonymous
хз можно и так,т но мне не нравится
Aleksey
тоже не нра.
Aleksey
хотя так конечно можно но архитектурно херова.
Anonymous
много вопросов возникает с таким подходом
Anonymous
кидай креденшиалсы сверху через переменные
Anonymous
Если останешься при своем, читай внимательнее http://docs.ansible.com/ansible/latest/playbooks_loops.html#using-register-with-a-loop
Oleg
Да в итоге в волт запихнул) слишком много времени ушло на луп
Anonymous
Да в итоге в волт запихнул) слишком много времени ушло на луп
к циклу тоже подход немного неправильный был, не только к задаче в целом
Dmitrii
Всем привет. А подскажите, в чем проблема может быть. Запускаю плейбук с группой app-В-backend В inventory лежит следующее: [tag_Kind_app_A_backend] [app-A:children] App-A-backend [App-A-backend:children] tag_Kind_app_A_backend [tag_Kind_app_B_backend] [app-B:children] App-B-backend [App-B-backend:children] tag_Kind_app_B_backend В group_vars лежат 2 файла с именами app-A.yml и app-B.yml. Теперь самое интересное: роль плейбука генерит файл для app-A-backend вместо app-B-backend хотя в плейбуке я явно без всяких интерполяций в hosts: указываю app-B-backend
Dmitrii
И еще... если из инвентори убрать любое упоминание об app-A то все становится ок
Dmitrii
Единственное, как A и B связаны так это хост тега tag_Kind_app_A_backend и tag_Kind_app_B_backend — одинаковый. Если проблема в этом, то как от этого избавиться? Мне надо запускать один и тот же плейбук на одном и том же хосте с разными группами
Dima
убери дефисы, сделай землю
Dima
http://docs.ansible.com/ansible/latest/playbooks_variables.html#what-makes-a-valid-variable-name
Dima
foo-port, foo port, foo.port and 12 are not valid variable names.
Dmitrii
Не помогает. Все равно цепляет параметры от другой группы
Dima
а, у тебя не ломается... у меня вот ломалось от группы с дефисом. не вариант прописать в плейбуке что-то типа вот такого? vars_files: - app_B.yml и во втором vars_files: - app_A.yml
Dmitrii
Там такое дело, что я понадеялся на ибучий ансибл что он нормльноумеет по группам раскидывать все и сделал один плейбук универсальный с группами на каждое приложение
Dmitrii
Т.е. на проде где у меня хосты всегда под каждое приложение разные — все ок, а вот на стейджинге где хост один и где нет смысла заводить столько же машин под каждое не работает даже если я hosts ограничивать пытаюсь
Dima
vars_files: - {{ app_name }}.yml
Anonymous
Ансибл то в чем виноват?
Dmitrii
Тем что это его базовая функция, не?
Dmitrii
Мне нужно генерировать файл, где разные параметры. В каждой группе задано 2 переменных 1) Имя файла 2) Значение
Dmitrii
И вы хотите сказать что Ансибл не может такое сделать?
Dmitrii
Это полностью вписывается в идеологию. Роль которая генерит файл, для нее применяются параметры либо хоста либо группы.
Anonymous
У меня есть хосты, где куча все разного. Ансибл рулит как нужно
Dima
можно и не генерировать файл, а через set_facts прогонять. тут проблема очевидна - приоритет переменных. как её решать - либо писать просто, определяя переменную всегда в одном месте, либо через set_facts.
Dmitrii
Так а скажите почему переменные из одной группы перетирают переменные из другой группы?