Maxim
м.б.
ну в общем это не оно
айтемс2дикт из одного дикта делает другой дикт
Maxim
максимально похожее сделал zip_longest, но он в итоге сделал лист листов типа [[ "ip", "<ipaddr>"], [ "ip", "<ipaddr>"]]
Timur
коллеги, подскажите, есть ли какой-то способ в плейбуке/роли из листа строк сделать лист dict'ов?
хочется вот тут:
$ ansible localhost -m debug -a "msg={{ groups['all'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | list}}"
localhost | SUCCESS => {
"msg": [
"172.18.1.13",
"172.18.1.16",
"192.168.17.4",
...
вывод переделать в
[
{ "ip": "172.18.1.13" },
{ "ip": "172.18.1.16" },
...]
А в чем проблема? Луп по листу и вызываешь дебаг с нужной строкой
Alex
коллеги, подскажите, есть ли какой-то способ в плейбуке/роли из листа строк сделать лист dict'ов?
хочется вот тут:
$ ansible localhost -m debug -a "msg={{ groups['all'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | list}}"
localhost | SUCCESS => {
"msg": [
"172.18.1.13",
"172.18.1.16",
"192.168.17.4",
...
вывод переделать в
[
{ "ip": "172.18.1.13" },
{ "ip": "172.18.1.16" },
...]
- name: Populate dict
set_fact:
domain_accounts: "{{ domain_accounts|default({}) | combine( {item.user: item.password} ) }}"
with_items:
- "{{ accounts }}"
Maxim
Alex
ну дак передавай ip как key и адрес как value
Maxim
это как?
Maxim
а, ну всмысле я вроде так и пытаюсь
Maxim
$ ansible localhost -m debug -a "msg={{ groups['all'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | list| combine({'ip': item})}}"
localhost | FAILED! => {
"msg": "|combine expects dictionaries, got '172.18.1.13'"
}
AlexShmel🐝
George
Python'овский split тебе будет намеком
George
Ну, или регекспом парсить, с захватом первого компонента
George
Ну, и наверняка есть фильтр типа урлпарс
George
Но это надо доку открывать 😂
Vlad
хм
не нашел пока как решить то, что запускается ансибль для всех хостов внутри hosts, который в гите
а надо для одного только
Vlad
мб подскажете?
Maxim
AlexShmel🐝
Alexander
Alexander
Правда, я c отключённым обновлением проверял. Сейчас запущу с включённым.
Alexander
Но это же функционально ни чем не отличается от command, так? С точки зрения npm
Anonymous
если кто-нибудь тестирует с помощью molecule, то прошу поделиться ссылками на готовые тесты(примеры) testinfra.
Andor
Тебе молекулы примеры или тестинфры?
Anonymous
мне примеры тестинфры в контексте молекулы...
Anonymous
там можно mock прикуртить?
Anonymous
документацию, да, читал...
Anonymous
по testinfra очень скромная документация...
Anonymous
по идее можно все использовать из pytest(исходя из документации), но примеры этого дела бы мне многократно упростили жизнь
Andor
Ну тебя никто не заставляет юзать именно тестинфра
Andor
Тот же серверспек или инспек намного приятнее
Anonymous
мне более интересно использовать pytest + mock
Anonymous
глубоко не копал, поэтому и спрашиваю
Andor
Anonymous
тут оговорка, было бы интересно использовать
Anonymous
пока не понимаю, как прикрутить mock
Anonymous
в молекуле
Артём
https://pastebin.com/83enXn4B
Anonymous
ибо по умолчанию его там нет. если получиться, то наверно напишу. кейс наверно интересен для многих
Anonymous
Anonymous
Артём
Угу. Если дадут то - хайлайтните меня, я бы тоже посмотрел.
Можно нырнуть в репы lean, у них должно быть.
Артём
https://github.com/lean-delivery
Alexander
Timur
Timur
https://github.com/lean-delivery/ansible-role-mysql
Timur
Так видно?
Anonymous
@nitromagnum будет жить. Поприветствуем!
Tadeusz
а как бы поизящней выдернуть имя 2-го интерфейса из фактов?)
Tadeusz
с 1-м то все ясно {{ hostvars[inventory_hostname]['ansible_default_ipv4']['alias'] }}
Tadeusz
не хочется хардкодить и объявлять переменные вручную
Tadeusz
мне нужно выдергивать именно название сетевого интерфейса
Tadeusz
ens160 - внешка
ens192 - bogon
Timur
Ну и в чем проблема вытащить фильтром из фактов?
Timur
selectattr
Tadeusz
это изящно будет? )
Timur
Вполне
Timur
А какие ещё вообще могут быть варианты?
Tadeusz
хм, а почему так может быть?
{% for host in groups['blahblah-group'] %}
server {{ second_ip }}
{% endfor %}
а прилетает в темплейт только 1 IP (от одного из серверов) 3 раза
Sergey
Tadeusz
if not loop.last дать что ли?
Sergey
Sergey
😉
Tadeusz
мне надо
server 1.1.1.1
server 2.2.2.2
server 3.3.3.3
Sergey
Ну и вообще - делаешь перебор для host, а выводишь second_ip O_o
Tadeusz
ну мне надо забрать переменную second_ip с трех хостов, находящихся в группе
Tadeusz
{{ hostvars[host]['second_ip'] }} ? блин, запутался сам уже
Sergey
да, такое себе
Tadeusz
Tadeusz
хочется минимум насилия
Tadeusz
Sergey
Да подумал, что можно твой список прогнать через мешок фильтров, но не факт, что получится годно. Так что да, наверное, твой вариант норм.
Tadeusz
{% for host in groups['blahblah-group'] %}
server {{ hostvars[host]['second_ip'] }}
{% endfor %}
так работает, да
Anonymous
Так видно?
Что видно? @pytest.fixture, @pytest.mark.parametriz? нет, не видно.
Anonymous
Timur