Timur
Гораздо легче и логичнее создавать одну переменную - словарь с динамическим списком ключей, чем создавать динамически кучу словарей с одним и тем же именем ключа
Timur
Добавлять новые ключи со значениями в имеющийся словарь гораздо легче. И код получается читабельнее
cyber
Ну это сути не меняет
cyber
Ключ должен быть динамическим
Timur
Не знаете, как динамически добавлять ключи в словарь?
cyber
Ага, расскажи
cyber
?
Timur
Да
cyber
Мне хотелось бы чтобы вызавая роль с параметром application у меня эта application добавлялась дополнительным значением в словарь db_pass
Timur
Это делается через set_fact с помощью фильтра combine
Timur
Примеры с телефона не очень удобно набирать
cyber
Я пытался сделать так:
set_fact:
db_pass:
{{application}}: {{encrypted_pass}}
Timur
Но в гугле по ключевым словам куча примеров доступна
Timur
cyber
Но у меня application не раскрывалось
Timur
Нужно через combine
cyber
combine сложно
cyber
Я в итоге сделал так
cyber
- set_fact:
db_pass: "{'{{ application }}':'{{encrypted_pass}}'}"
cyber
Без combine
Timur
Это сработает только для одного элемента
Timur
Следующий вызов этой конструкции с новым значением переменной перезапишет весь словарь целиком
cyber
А потом что будет?
cyber
Блииин
Timur
https://stackoverflow.com/questions/35605603/using-ansible-set-fact-to-create-a-dictionary-from-register-results
Timur
По ссылке есть хорошие примеры
cyber
блин , ну ты меня расстроил :(
cyber
Xman
посдкажите плиз как правильно загнать переменные, чтото на ночь глядья опух
clickhouse_shards:
shard:
- { name: "01", replicas: ["ch63.smi2", "ch64.smi2"]}
- { name: "02", replicas: ["ch65.smi2", "ch66.smi2"]}
Xman
вот темплейт
<?xml version="1.0"?>
<!-- {{ ansible_managed }} -->
<yandex>
<remote_servers>
{% for shard_name, replicas in clickhouse_shards.iteritems() %}
<{{ shard_name }}>
<shard>
<internal_replication>true</internal_replication>
{% for replica in replicas %}
<replica>
<host>{{ replica['host'] }}</host>
<port>{{ replica['port'] | default(9000) }}</port>
</replica>
{% endfor %}
</shard>
</{{ shard_name }}>
{% endfor %}
</remote_servers>
</yandex>
Xman
FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'host'"}
Sergey
посдкажите плиз как правильно загнать переменные, чтото на ночь глядья опух
clickhouse_shards:
shard:
- { name: "01", replicas: ["ch63.smi2", "ch64.smi2"]}
- { name: "02", replicas: ["ch65.smi2", "ch66.smi2"]}
Ты, конечно, работаешь на СМИ2, и это - фу. Но Ансибл - не фу, поэтому он тебе совершенно точно сказал, что ключа host в словаре, который ты описываешь, просто нет.
Александр
Пробую AWX Project. Нехват Multiple credentials острый. Как выходить из положения? Открытые ключи в проекте зло, т.к. много пользователей.
Dmitry
Dmitry
ssh ключи?
Rad
Вчера озадачился вопросом получения результата рестарта или запуска сервиса , все что я находил это манипуляции с shell или command , т.е. через команд делаем рестарт, результат регистрируемых, а потом смотрим на rc . Но мне это не очень нравится, кто-то знает варианты аккуратней ?
Timur
Victor
Timur
Зачем что-то дополнительно проверять?
Rad
Victor
Ну значит сервис запустился
Victor
То что он потом здох это совсем другое
Timur
Совершенно верно
Timur
Проверять после старта, не упал ли сервис - это не задача ансибла
Timur
Если логика сценария требует каких-то данных о состоянии сервиса - это можно сделать, например, с помощью модуля service_facts
Timur
https://docs.ansible.com/ansible/devel/modules/service_facts_module.html#service-facts-module
Dok
Если в ансибл добавить последующую инструкцию на запуск сервиса - разве, это не будет являться своеобразной проверкой?
Timur
Можно два раза вызывать команду запуска сервиса и сравнивать результат changed. Но зачем?
matt
можно хэндлеров наворотить для этого
matt
например как тут
matt
https://github.com/kubernetes-incubator/kubespray/blob/master/roles/kubernetes/master/handlers/main.yml
Dok
Пытается запустить:
Уже запущен - ок
Запустил - чейнжд
Не запустилось - не ок
matt
антил ретрай дилэй
Timur
Timur
bashsible сплошной
matt
да-да)
matt
тяжелые наркотики
Danis
Как в Jenkins, при использовании ansiblePlaybook, передать список в качестве значения переменной для Ansible?
Danis
Такое не работает:
var: "[${test}]"
Danis
Где test обычная строчка.
Zhyhanov
Кто сможет помочь, дела по примеру одного хорошего человека плейбук для монго дб, ( https://github.com/mrlesmithjr/ansible-mongodb). И у него в переменных есть такой параметр mongodb_replication_group: 'test-nodes' и с этой группы он опеределяет кто мастер а кто слейв будет в реплика сет. Так вот вопрос как он передает группу хостов которые будут использоваться ?
Zhyhanov
или возможно подскажите как можно определить какой из хостов как мастер и далее в темплейтах и тасках использовать данную переменную
Старый
на 2,7 кто перешёл уже?
Gleb
я
Gleb
очень весело
Старый
- name: Install packages
yum:
name: "{{ item }}"
state: present
with_items: "{{ packages }}"
- пакет
сейчас же
- name: Install packages
yum:
name: "{{ packages }}"
state: present
но я чтот не врубился а перечисление где делать пакетов?
снизу как раньше не работает, в name тоже
Gleb
писать не переписать
matt
matt
либо vars в самой таске
Старый
😕нафиг столько сложностей то они делают
Gleb
please use `pkg: ['aptitude', 'python-apt',
'python-pycurl', 'apt-transport-https', 'python-pycurl', 'debian-keyring']` and
remove the loop.
Victor
Руки пока не дошли, но вроде как просто вместо item сразу указываешь packages - оно должно лист нормально схавать.
Старый
ну у меня вообще dnf and portage, но а серьёзно
Старый