Timur
Ссылки на конфиги кладутся в инвентарь
Timur
А хранить можете как хотите
Anonymous
Hi, How can I store windows OS version to variable in ansible?
Timur
Hi, How can I store windows OS version to variable in ansible?
There are default ansible variables coming from facts
Timur
For instance: - ansible_distribution - ansible_os_family - ansible_os_name - ansible_system You can check them to see what you like to have
Andrey
Ребят, а можно ли сделать логику inventory, иерархию. Например у меня есть список все хосты, мне его надо поделить на подхосты, чтобы в extra-vars в плейбуке их указывать. Хочу all, ставится на всё. Хочу там stage, ставится на подгруппу стейдж. Я смотрел в сторону child, но что-то не взлетело
Nklya
Разные енвы-разные инвентори
Andrey
Разные енвы-разные инвентори
А в один запихнуть нельзя?
Nklya
Зачем?
Алексей
Не надо так.
нормальная логика. Делятся хосты на группы и вперёд.
Timur
Но если речь про разные стейджи, то логичнее разный инвентарь делать для разных окружений
Ivan
првиет! направьте, пожалуйста: как лучше работать со string в ансибле? Хочу получить версию ядра и потом её сравнивать, например > 4.0 4.15.0-45-generic -> 4.15 3.10.0-862.14.4.el7.x86_64 -> 3.10 что-то с .split(.)?
Nklya
есть же сравнивалка версий встроенная
Ivan
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#version-comparison ? Да, навреное, но сперва надо нормализовать строку наверное
Andrey
А что не взлетело? Вполне нормально поделить на группы и деплоить на группы по выбору
Нет, по группам я понял, мне нужно подгруппы. Чтобы в группе [stage] [proc] [rabbitmq] И я как мог все группы вызвать под extra-vars stage, там и отдельно. Но инвентори хочется единственный
Andrey
Без дублирования
Timur
Используйте обычные group_vars
Andrey
А зачем вам extra-vars тогда?
Ну я в плейбук написал {{hosts}}
Andrey
Чтобы подставлять при вызове плейбука ещё
Timur
Господя
Timur
Что и куда подставлять?
Andrey
Что и куда подставлять?
Допустим есть плейбук установить зависимости, мне не нужно туда жестко группу прибивать. Я подставляю туда переменную ансибла, чтобы группу прописать через extra-vars в шеле
Andrey
На исполнение
Sergey
Ну я в плейбук написал {{hosts}}
https://ansible-tips-and-tricks.readthedocs.io/en/latest/ansible/commands/#limit-to-one-or-more-hosts
Andrey
Ну, такое... Но допустим. И в чем проблема?
Я хочу чтобы у меня инвентори был в иерархии, где общая группа all и в ней подгруппы proc, worker, если мне нужно на часть хостов выполнить другой плейбук
Andrey
А если на все то all подставить, вот я и спрашиваю, кто может так делал
Alexander
Children group? Или я не понимаю вопроса.
Alexander
Так это есть все на https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
Alexander
Можно это делать на уровне плейбука в качестве hosts: "{{ target | default('группа')}}", но это более применимо на динамический инвентори
Vladislav 👻
нормальная логика. Делятся хосты на группы и вперёд.
А потом пишутся плейбуки под разные группы, вместо замены инвентори... А потом трахаешься в темплейтах, если надо конфигурацию на основе группы хостов А потом... А потом много еще чего можно написать
Rad
А потом пишутся плейбуки под разные группы, вместо замены инвентори... А потом трахаешься в темплейтах, если надо конфигурацию на основе группы хостов А потом... А потом много еще чего можно написать
а как правильно, у меня тоже куча груп в которых пересекаются хосты, делать отдельные инвентори файлы под каждую группу хостов и при запуске передать нужный инвентори файл ? ( нужный енвайрмент )
Vladislav 👻
Группа хостов, это группа хостов. Но prod и dev надо не в группы загонять, а в отдельные инвентори
Andrey
Группа хостов, это группа хостов. Но prod и dev надо не в группы загонять, а в отдельные инвентори
Ну я так не собирался делать, хочу просто селективно делать, чтобы не дублировать. Вот это все ноды, а вот это реббитмкью из этих, а вот это редис. А потом будет портянка из кучи хостов, задублированных. Хочется красиво сделать
Konstantin
Ситуации разные бывают, но обычно стараются один хост добавить в одну группу. Чтоб не пересекалось с другими ролями. Тогда все становится очень просто. Ну и разный инвентарь проще вести.
Timur
Доброго вечера это для чего и о чем
Молекула - фреймворк для тестирования ансибл-ролей и плейбук
es]x
А ссылку можно на gir
Timur
https://molecule.readthedocs.io/en/latest/
Timur
Гит вот тут: https://github.com/ansible/molecule/
Vladislav 👻
Зачем под разные группы плейбуки разные? Один плейбук и всё. Рулится всё в переменных группы
Можно конечно так, но потом начнутся пересечения групп и будет очень тяжело отследить изменения по группе хостов. Проще все таки через инвентори
Алексей
Можно конечно так, но потом начнутся пересечения групп и будет очень тяжело отследить изменения по группе хостов. Проще все таки через инвентори
Не нужно добавлять один хост в несколько групп и всё будет ок, но я согласен - разные окружения - разные инвентари. У меня так и сделано, но всё равно плейбук один. Какие роли запускать определяется в переменной в группе, есть общие параметры в vars_all
Rad
Хост должен быть только в одной группе. Группа может быть вложенной. Главное сделать корректно иерархию.
а можно где-то увидеть пример , например у меня роль nginx под неё плейбук с нужными хостами, другая роль бекапов, под неё свой список хостов, они пересекаются
Алексей
Пинганите в личку завтра, я с мобильного сейчас. Я пример скину.
Rad
хорошо, спасибо
Vladislav 👻
Или у вас полная динамика, как хостов, так и ролей?
Vladislav 👻
Это прекрасно, но в какой-то момент вы начнете больше писать ямлики, вместо того, чтобы просто запустить плейбук
Алексей
Ну как бы такое себе... Вот надо на один хост и вебку и nginx и все, уже приехали...
Что значит "вэбку"? Вешаешь на host_vars этого хоста переменную со списком нужных ролей и всё. Если только на один хост. Либо на группу.
Vladislav 👻
Я понял, ну такое себе решение, рано или поздно можно упереться в геморрой
Алексей
Или у вас полная динамика, как хостов, так и ролей?
Роль выполняет одну конкретную задачу. У меня роли не настраивают десяток сервисов за раз. Роль - задача (nginx, fluent, docker, rabbit etc)
Vladislav 👻
Может плейбук, а не роль?
Vladislav 👻
И я правильно понимаю, что это запуск плейбука из серии "без тегов не взлетит", только тут логика на лимит хостов?
Vladislav 👻
Хотя наверно взлетит, просто надо почти все дублировать в all
Vladislav 👻
Ну да, такое себе
Алексей
Может плейбук, а не роль?
Плейбук всегда один и тот же.
Vladislav 👻
Хотя нет, я не понял. Плейбук работает в рамках хоста/группы, вот есть у вас две машины в рамках одной задачи, на одну надо поставить одно веб приложение и nginx, на вторую второе веб приложение и nginx. Как одним плейбуком вы такое разрулите?
Алексей
Хотя нет, я не понял. Плейбук работает в рамках хоста/группы, вот есть у вас две машины в рамках одной задачи, на одну надо поставить одно веб приложение и nginx, на вторую второе веб приложение и nginx. Как одним плейбуком вы такое разрулите?
Делаешь роль которая ставит приложения. В первом хосте в переменных задаёшь один список web приложений, во-втором другой список. Список обрабатывается тасками роли. Придётся как-то стандартизировать приложения или их установку, но это задача роли и твоя как админа
Алексей
Алексей
Дальше всё настраиваешь как удобно. Способ отработан практикой. Принцип отделять конфигурацию от реализации восходит ещё к Puppet Hiera, так что тут ничего нового нет.
Konstantin
Хотя нет, я не понял. Плейбук работает в рамках хоста/группы, вот есть у вас две машины в рамках одной задачи, на одну надо поставить одно веб приложение и nginx, на вторую второе веб приложение и nginx. Как одним плейбуком вы такое разрулите?
тут либо аппу стандартизировать (если есть возможность) под один плейбук (хотя мне сложно представить как вы будете разрабов упрашивать) либо для каждой аппы своя роль. ну и вперед
Алексей
Разрабов не нужно упрашивать. С ними нужно договариваться
Алексей
И правила устанавливает и оьучает именно админ отвечающий за выкат
Vladislav 👻
Я не понял, как эти три роли в одном плейбуке раскатаются на две машины
Konstantin
И правила устанавливает и оьучает именно админ отвечающий за выкат
не всегда. часто бизнес указывает что нужно ему а не админу.
Алексей
не всегда. часто бизнес указывает что нужно ему а не админу.
Разрабы не бизнес, если разработчики рулят процессом деплоя, то пусть сами решают эти проблемы.