Artem
Sergey
lf
как задача выглядит изначальная?
Artem
как задача выглядит изначальная?
нужно выцепить hostname из группы хостов discount_api и запустить таску на создание доменных групп на местном контроллере домена в имени группы должен присуствовать hostname хоста из группы dicount_api
Dr. L.S.Dee
Ну в общем, s/hostvars/groups, как-то так. Группа-то где задана?
Dr. L.S.Dee
Как говорила Гаечка, "Это должно сработать".
Sergey
Artem
Sergey
Dr. L.S.Dee
брать с 1 хоста
А получается (предположим, мы все-таки заменили хостварс на групс), что в OrganizationalUnit 'OU=Linux allow SSH connect,OU=Groups,DC=ex,DC=loc' будет создана глобальная группа безопасности с именем "$hostName_ssh" для каждого хоста "$hostName" в инвентори-группе 'discount_api'.
Artem
Artem
Разодрался уже , спасибо )
Dr. L.S.Dee
А есть что-то наподобие того, как работает ifShouldProcess в PoSh? Т.е. если запускаем команду 'Do-SomeWeirdThing -Param1 foo -Param2 bar -WhatIf', то вместо выполнения получаем вывод-симуляцию, где описывается, что бы у нас произошло, если бы ключик '-WhatIf' мы не поставили. Раскрываются все переменные, что из них получается и т.д.
Ну, эт ежели разработчик очередного PS-модуля удосужился вписать такой функционал. Некоторые справку-то не пишут.
Sergey
Dr. L.S.Dee
Ага, нашел. Он же 'Dry run', спасибо.
Peter
Коллеги, всем хорошего дня!
Обновился до ansible 2.9.3 и при выполнении ansible all -m ping неактивные хосты показывает как SUCCESS. Проблема как с интепретатором python3.6 как и python2.7.
Кто сталкивался?
Peter
Ucaby
Что этот бот себе позволяет)
[IPT] Dmitry
ребят, а есть какие-то общие рекомендации по "тюнингу" плэя? например, у меня плэй один выполняется под 30 минут. не скажу что он лёгкий, но хотелось бы понять как правильно определять узкие места и по возможности их оптимизировать
UglyKoyote
в конфиге можно включить замер времени по каждой таске
UglyKoyote
думаю это как минимум надо сделать. ну а дальше уже анализировать почему именно конкретный плей так "тяжело" идет
[IPT] Dmitry
да, я это уже сделал
[IPT] Dmitry
что ещё можно чисто по производительности смотреть? как клиента, так и сервера
UglyKoyote
ну тогда можно смотреть на стороне сервера что происходит. может диски проседают, может по цпу затык
UglyKoyote
iotop/iostat/top
Alexander
Есть инструмент, который в разы ускорит работу, не могу найти только
[IPT] Dmitry
ок, я понял, метрики с кореляцией
[IPT] Dmitry
Alexander
Да, он точно! Не?
UglyKoyote
а что он даст - если к примеру у него просто диски захлебываются?
UglyKoyote
ему для начала надо понять что на стороне хоста происходит
[IPT] Dmitry
видимо я про всё знаю. просто думал, может какой прям крутой и волшебный инструмент есть для анализа? 😄
UglyKoyote
есть :)
zhag
А есть ли каой-то путь делать автоматическую документацию?
Вот есть у меня переменная и я хочу чтобы допустим из комментов она лепила это в README.md
UglyKoyote
но он очень дорогой.. и называется "опыт"
Gleb
zhag
Спасибо посмотрим
Aleksey
господа, а vars_files оно групповые варсы ?
Logan
оно для плея.
Logan
или я не понимаю вопроса
Aleksey
оно будет на плее в котором много групп выставлено для всех хостов или только для группы?
Aleksey
Видимо для всех
Aleksey
VARIABLE_PRECEDENCE. о!
Aleksey
Короче этот ваш ансибл не гибкая поделка.
хочу сделать так
playbook.yaml
./group_vars/...
./<<env_name>>/group_vars/
./<<env_name>>/group_vars/
но так низя
Отделение Bereke Bank
у тебя должно быть свое инвентори для каждого env_name
UglyKoyote
интересно.. как я один плейбук юзаю на 3 окружения.. без "негибкости ансибла"
UglyKoyote
видимо наркоман и мне это кажется
Tadeusz
Radik
тихо
давайте дальше почитаем
Aleksey
я хочу https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout но к нему group_vars на верхнем уровне
UglyKoyote
ну ты хочешь странного, но виноват ансибл. я верно понял?
UglyKoyote
ибо как я понял - у тебя есть группа серверов, и 2 разных окружения
Aleksey
почему я хочу странного ?
Aleksey
у меня есть окружения в которых большая часть пременных одинакова.
Aleksey
они структурированы по группам.
UglyKoyote
так..
UglyKoyote
между окружениями они ведь тоже меняются?
Aleksey
теперь внутри группы для окружения у меня есть отличия которые нужно положить в group_vars этого окружения
Aleksey
проблема в том что я не могу повлиять на https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
inventory group_vars/* [3]
playbook group_vars/* [3]
Aleksey
в моём случае они должны быть ровно наоборот
Отделение Bereke Bank
хуярь общее общим extra_vars-ом
Отделение Bereke Bank
Aleksey
это совсем днина
Aleksey
ровно как и vars_file
Aleksey
ровно как и симлинки
Aleksey
вот как выглядит дерево сейчас
.
├── My-beta
│ ├── group_vars
│ │ ├── my.yaml
│ │ ├── grafana.yaml
...
│ └── inventory.ini
├── ansible.cfg
├── deploy.yaml
├── group_vars
│ ├── all.yaml
│ ├── grafana.yaml
├── roles
...
├── My-dev
│ ├── gcp-inventory.yml
│ └── group_vars
│ ├── gcp.yaml
│ ├── grafana.yaml
...
├── My-prod
│ ├── gcp-inventory.yml
│ └── group_vars
│ ├── gcp.yaml
│ ├── grafana.yaml
...
└── My-rc
├── gcp-inventory.yml
└── group_vars
├── gcp.yaml
├── grafana.yaml
Aleksey
оно гдето выглядит не логичным ? как сделать его логичным ?
Aleksey
вот только бы "странное" писать.
Sergey
Sergey
inventory не должны иметь общего, иначе это общее можно занести в роль.
Aleksey
инвентори ничего общего и не имеют
Aleksey
короче лучшее решение это симлинк playbook-а в директорию с енвайроментом
Aleksey
оно корректно работает
Александр
есть у меня такая вот конструкция
ok: [docker-preprod-301] => {
"hosts | json_query('* | [?env==`' + host_options.env + '`] | [?env==`preprod` || dc==`' + host_options.dc + '`].name')": [
"docker-preprod-302",
"docker-preprod-204",
"docker-preprod-205",
"docker-preprod-203",
"docker-preprod-301",
"docker-preprod-103"
]
}
ok: [docker-305] => {
"hosts | json_query('* | [?env==`' + host_options.env + '`] | [?env==`preprod` || dc==`' + host_options.dc + '`].name')": [
"consul-302",
"docker-304",
"docker-302",
"docker-301",
"docker-303",
"docker-305",
"nomad-master-301",
"consul-303"
]
}
Мне надо дополнить выражение, чтобы на выхлопе получить hostvars[item].ansible_host каждого (там ip). when не подойдет, ибо шаблон {% for ...%} не хотелось бы использовать
Александр
ответ:
hosts | json_query('* | [?env==`' + host_options.env + '`] | [?env==`preprod` || dc==`' + host_options.dc + '`].name') | map('extract', hostvars) | list | json_query('[].ansible_host')
Александр
или
hosts | json_query('* | [?env==`' + host_options.env + '`] | [?env==`preprod` || dc==`' + host_options.dc + '`].name') | map('extract', hostvars, 'ansible_host') | list
Александр
разница в том, что первый вариант ругнётся падаем с ообщением если вдруг элемента нет в hostvars (не актуальный конфиг), а второй
"hosts | json_query('* | [?env==`' + host_options.env + '`] | [?env==`preprod` || dc==`' + host_options.dc + '`].name') | map('extract', hostvars, 'ansible_host') | list": "VARIABLE IS NOT DEFINED!"
но мне он подошёл, т.к. вставил проверку выше этого выражения
Dmitry
Привет. Немного не понятно из доки, действует ли any_errors_fatal с уровня плейбука на блоки? Или каждому блоку нужно тоже указать any_errors_fatal персонально даже если оно в плейбуке указано?. А то у меня оно включено, но плейбук не останавливается...
Roman
Всем привет. Подскажите как можно проверить есть ли подстрока в переменной в которую читаю ip r? Моя задача на хостах проверить наличие роута