Konstantin
- name: Fill service_docker_portmapping variable set_fact: service_docker_portmapping: "{{ service_docker_portmapping }}+ [ '127.0.0.1:{{ item.int_port }}:{{ item.ext_port }}' ]" loop: "{{ ['service_'~Environment~'_ports'] }}"
Sergey
Не заработает
Konstantin
вроде зашло loop: "{{ hostvars[inventory_hostname]['service_'~Environment~'_ports'] }}"
Sergey
Вот так - да. Хостварс там не зря ;-)
Konstantin
Вот так - да. Хостварс там не зря ;-)
Спасибо 🙂 цепочку выводов я прокинул, хоть и не сразу (=
Timur
?
Динамические имена переменных не стоит использовать без необходимости
Sergey
Динамические имена переменных не стоит использовать без необходимости
Выше по чату русским по белому указано, что необходимость есть.
Timur
Эту задачу можно решить фильтрацией списка
Timur
А не динамической переменной
Timur
А почему не стоит?
Такой код чреват малопредсказуемым поведением
Timur
И его сложно поддерживать
Timur
В случае с фильтрацией все гораздо прозрачнее
Tadeusz
А, питон)
Timur
Например так: '{{ service_port_list | select("match", env) | first }}'
Sergey
Было три переменных, а ты отфильтровал список. Плюс по строке, которая встречается в любом месте значения элемента списка. Поэтому лол.
Konstantin
Не явно
NS 🇷🇺
всем привет. назрел вопрос, можно ли как то получить в playbook имя группы родителя [group:children] group1 group2 хочется в playbook получить значение group
Asgoret
Вопрос знатокам. Как написать if если default false? {% if lb %} <- default (false) name: nginx-simple <- expected {% else %} name: nginx-balancing <- in fact {% endif %} Были испрованы следующие конструкции: if|d()|bool if is false if|default() if|default(false)|bool if|default(false)|bool == true if == true if == 'true'
Vladislav 👻
разве регистр играет роль?
Asgoret
if lb is defined
Разве она не всегда будет defined?
Vadim
Разве она не всегда будет defined?
не обязательно, ну разве что если ты в defaults/main.yml её установил
Asgoret
default(False) Регистр играет роль
Забито с маленькой буквы в варсах. При этом в другом куске плейбкка все корректно
Asgoret
🤦‍♂ я не подумал просто поменять значения местами в списке
𝔹𝕠𝕣𝕚𝕤
Забито с маленькой буквы в варсах. При этом в другом куске плейбкка все корректно
К сожалению, в yaml и в Jinja булевы константы пишутся по разному. yaml понимает: true/false, yes/no, on/off Jinja только по-питоновски: True/False
𝔹𝕠𝕣𝕚𝕤
name: {{ lb | default(False) | ternary('nginx-simple', 'nginx-balancing') }}
Тоже самое просто в синтаксисе if ``` name: {{ 'nginx-simple' if lb | default(False) else 'nginx-balancing' }} ```
Vladislav 👻
Vladislav 👻
можно как-то обратится к словарю в текущем списке?
Victor
{{item.name}}
Vladislav 👻
вариант {{name}}-{{version}}.jar проканает?
Vladislav 👻
для jar_name
Vladislav 👻
{{item.name}}
а сработает item в default_vars?
Victor
а сработает item в default_vars?
Ты откуда луп собрался вызвать?
Vladislav 👻
цикл пойдет в темплейт
Vladislav 👻
наверно проще сразу в темплейте переписать
Victor
{% for s in java_service_module %} {{s.name}} ... Или типо того, не вижу проблем с теплейтами
Vladislav 👻
нее, у меня на каждый элемент свой темплейт
Vladislav 👻
и посмотрел внимательно, это пойдет в другой варс
Victor
т.е. ты хочешь в ямле зареференсить переменную в текущем элементе? Я как-то хотел и у меня не вышло, вроде бы такое невозможно.
Vladislav 👻
печаль
Vladislav 👻
ладно, буду думать, спасибо
Victor
Но ты можешь это сделать в темплейте, елси будешь обходить ямл
Vladislav 👻
это я понял, но это не заходит
Asgoret
@vrutkovs @ekho_0 если поменять местами, работает коррект (simple c balancing)
𝔹𝕠𝕣𝕚𝕤
угу, невнимательно посмотрел исходный вариант
Vladislav 👻
глупый вопрос, если я в loop прописываю loop_var, то item уже не будет работать?
Asgoret
угу, невнимательно посмотрел исходный вариант
да нет, мой вариант тоже работает если их местами поменять... не понимаю почему ошибка только
𝔹𝕠𝕣𝕚𝕤
глупый вопрос, если я в loop прописываю loop_var, то item уже не будет работать?
не будет. loop_var как раз и нужен чтобы указать имя переменной в цикле вместо дефолтного item
Vladislav 👻
ок
Vladislav 👻
мне стало интересно, а зачем?
Vladislav 👻
и самое главное, как отличать вышестоящего родителя?
Jungo
коллеги добрый вечер! подскажите пож-та планирую перевод текущей управляемой вручную структуры в ansible и у меня инвентори лист хранится в гугл щитах вот так project HTTP_auth server location VM/CT(OS) VM/CT IP port forwarding/service software role DB FQDN SSL target repo manager developer group cpu/RAM/HDD backup time/deep description start date due date price и там около 50 проектов то есть в инвентори листе есть побочные ячейки такие как цена например - которые особо ансидлу и ненужны тем не менее хочется одного источника для хранения информации и чтобы ансибл мог подтягивать данные такие как project server port forwarding software и прочие
Victor
всем привет. назрел вопрос, можно ли как то получить в playbook имя группы родителя [group:children] group1 group2 хочется в playbook получить значение group
Наркомания какая-то, но так то никто не мешает добавить в переменные группы название группы-родителя.
matt
инвентори лист в гугл шит это пять
NS 🇷🇺
мне стало интересно, а зачем?
просто в конфиг подставить значение
Victor
Просто если тебе нужно именно название группы у хостов в другой группе, то скорее всего ты что-то делаешь не так
Lex
Народ. Сегодня пол дня убил - чтобы скрестить lookup(query), loop и add_host есть у кого рабочее решение подобной хрени
Lex
Или может проще так на пальцах...есть несколько групп хостов..у некоторых групп в group_vars есть переменная, в которой содержится имя сервера. Вот надо пройтись по всем group_vars. Собрать из этой переменной имена серверов и на них сделать таск
Lex
Можно конечно это решить через local shell...но хотелось без костылей ))
Victor
Можно конечно это решить через local shell...но хотелось без костылей ))
Навскидку add_host: group: new_group host: with_items: "{{groups['first']+groups['second'] | map('extract', hostvars, 'dependent')|unique}}" Но это не точно.
Victor
Из подводных камней, которые я вижу, оно может обломиться если такой переменной нет
Victor
Или, возможно, все еще проще. delegate_to
Jungo
инвентори лист в гугл шит это пять
там нет секретной информации, просто описание проектов с внутренними ip адресами цель этого дальнейшая обработка через гугл скрипт этой ифнормации для отправки разработчикам и менеджерам, чтобы они могли понять все настройки проекта а когда эту портянку я запихаю в инвентори лист ансибла - пользоваться потом этим будет не очень удобно