Vladislav 👻
"найди" - это вообще не join
Vladislav 👻
А вот объединить можно, ссылка выше
Vladislav 👻
И это не задача, все так же
Vladislav 👻
Задача, это что решается этим объединением
Lamobot
Верхние два непонятны е Средний intersect Слева и справа difference Снизу union и symmetric_difference
Lamobot
Ну это шутка про верхние, так там можно использовать сами листы
Lamobot
Если обьекты в листах с разными атрибутами и ты хочешь объединять по определённому(ым) атрибутам, то тут сложнее
Vladislav 👻
Это листы, у листов нет атрибутов...
Vladislav 👻
Если это словарь, то там надо раскладывать и конвертировать
Lamobot
Это листы, у листов нет атрибутов...
В объектах листа могут быть словари и по их атрибутам объединять листы
Vladislav 👻
В объектах листа могут быть словари и по их атрибутам объединять листы
С точки зрения листов и их объединения, это будут просто разные элементы
Alex
Пятницо, все бухают. Приходи в пн, а лучше вт
Tadeusz
{% endif %} {% endif %} {% endfor %} {% endfor %} {% endif %} {% endif %} за что мне все это?
Дмитрий Харитонов
Со странным поведением столкнулся. Делаю set_fact в одном плейбуке для одного хоста, в следующем плейбуке в той же роле птыаюсь эти переменные вызвать и они подтягиваются только в тот же хост.
Дмитрий Харитонов
Раньше вроде такого поведения небыло и переменные были доступны для всех хостов
Артём
vars: telegraf_input_plugins: - name: ipmi_sensor tasks: name: conditional task … when: 'ipmi_sensor' in telegraf_input_plugins Таск не запускается, потому что telegraf_input_plugins - дикт и нельзя вот просто так взять и? А как тогда можно?
Артём
А не дикт он. Лист диктов.
Alex
- name: RUN INSTALLER TESTS - {{ flow_type | upper }} hosts: master gather_facts: no vars: flow_type: upgrade linux_distro: ubuntu14 app_type: jfmc roles: - { role: itests/jfmc, when: upgrade_flow_enabled } - name: RUN INSTALLER TESTS - {{ flow_type | upper }} hosts: master gather_facts: no vars: flow_type: ha-upgrade linux_distro: ubuntu14 app_type: jfmc roles: - { role: itests/jfmc, when: ha_upgrade_flow_enabled }
Alex
а может кто подсказать, как бы переписать эти плеи, чтобы не ждать по 5 минут, даже когда условие в when не срабатывает?
Alex
можно конечно отдельный плейбук для каждого случая, но может есть более элегантный способ
Дмитрий Харитонов
получаю вывод из shell пыраюсь сохранить его в переменную с помощю set_fact с параметром run_once для того чтобы можно было передать эту переменную в другие хосты. Но выходит так, что run_once выпадает на первый в списке хост, а не на тот где я получаю эту переменную и он скипается
Дмитрий Харитонов
вот так это выглядит TASK [k8s : shell] **************************************************************************************************************************************************** skipping: [3.121.234.169] skipping: [52.59.233.16] skipping: [52.59.204.5] skipping: [54.93.212.230] changed: [35.159.37.213] TASK [k8s : set_fact] ************************************************************************************************************************************************* skipping: [3.121.234.169]
Дмитрий Харитонов
Но! если я называю группу с нужным мне хостом словом test то отрабатывает верно, при использовании всех остальных слов ситуация с не верным хостом
Дмитрий Харитонов
TASK [k8s : shell] **************************************************************************************************************************************************** skipping: [3.121.234.169] skipping: [52.59.233.16] skipping: [52.59.204.5] skipping: [54.93.212.230] changed: [35.159.37.213] TASK [k8s : set_fact] ************************************************************************************************************************************************* ok: [35.159.37.213]
Дмитрий Харитонов
я проверял неоднократно с разными именами в инвентори
Артём
telegraf_input_plugins[0]['name'] == 'ipmi_sensor'
Это надо всегда следить, чтобы в списке плагинов этот шёл первым?
Дмитрий Харитонов
run_once - это означает запустить хзгде, но строго один раз. Здесь удачней, на мой взгляд, было бы сделать подгруппу, куда включить один-единственный хост.
Я так и сделал, но в main.yml ты используешь - include: init.yml when: ('test' in group_names) А это значит что он перебирает все доступные хосты всё равно
Дмитрий Харитонов
применяя только если соответсвует группе
Sergey
Это надо всегда следить, чтобы в списке плагинов этот шёл первым?
Ну да. А как иначе ты хочешь отбирать нужный элемент из списка? Они по индексу. Либо хитросделанный фильтр пиши.
Sergey
Я так и сделал, но в main.yml ты используешь - include: init.yml when: ('test' in group_names) А это значит что он перебирает все доступные хосты всё равно
А не надо завязывать такси на членство в группах 😉 Для этого есть штатный механизм - директива hosts, указываемая в play.
Дмитрий Харитонов
я нашел интересный способ подтянуть регистер в другой хост через "{{ hostvars['server IP']['ls_out']['stdout_lines'] }}"
Дмитрий Харитонов
но тут нужно указывать конкретное знаечение из инвентори которое у меня динамическое
Дмитрий Харитонов
Но такой способ работает, я проверял
Sergey
«хотя бы у одного элемента в списке ‘имя’=‘ipmi…’»
В твоём варианте каждый элемент - это словарь 😉
Артём
Ну да. В списке словарей хотя бы у одного словаря элемент… в общем, я понял. Списки словарей, по-моему, довольно часто используемая штука, надеялся на то, что инструменты есть.
Sergey
Ну да. В списке словарей хотя бы у одного словаря элемент… в общем, я понял. Списки словарей, по-моему, довольно часто используемая штука, надеялся на то, что инструменты есть.
Ну они для условий не используются как раз потому, что многоэтажность - такое себе..... https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#extracting-values-from-containers
Дмитрий Харитонов
@tnt4brain какой интересный хак нашел через добавления виртуального хоста - name: "Add K8S Token and Hash to dummy host" add_host: name: "K8S_TOKEN_HOLDER" token: "{{ K8S_TOKEN.stdout }}" hash: "{{ K8S_MASTER_CA_HASH.stdout }}"
Дмитрий Харитонов
а потом в любом месте получать знаечние так {{ hostvars['K8S_TOKEN_HOLDER']['token'] }}
Sergey
delegate_to есть вообще-то
Дмитрий Харитонов
ага, костыллинг ещё тот)
Дмитрий Харитонов
delegate_to есть вообще-то
Пробовал, не работает оно
Дмитрий Харитонов
его нужно с run_once использовать
Дмитрий Харитонов
а там вылаязт те проблемы что я писл выше
Sergey
его нужно с run_once использовать
Ну да, разумеется. И работает (2.7 точно)
Дмитрий Харитонов
delegate_to перенаправляет выполнение, а мне нужно только stdout
Sergey
stdout же из башсибла
Anonymous
Minor Space будет жить. Поприветствуем!
Anonymous
@Rower_and_oar будет жить. Поприветствуем!
Anonymous
@mopga будет жить. Поприветствуем!
Anonymous
@Mirotvorec85 будет жить. Поприветствуем!
John
Парни, чо та мне подумалось: а как ансиблом выключить всех пользователей на серверах, кроме user1 и user2?
John
при условии что заранее прописать имена пользователей которых надо выключить мы не можем) типо - name: Remove User user: name: '{{ item }}' state: absent remove: yes force: yes
George
Из них исключи тех двух
George
Профит
Anonymous
@Ruslan_Volodin будет жить. Поприветствуем!
Alex
Парни, чо та мне подумалось: а как ансиблом выключить всех пользователей на серверах, кроме user1 и user2?
как то так - name: Intersect debug: msg="user_name - {{ item }}" with_items: "{{ all_users | intersect(admin_users) }}"
Alex
admin_users формируй динамически через set_fact или как тебе удобнее
Alex
а подскажет кто, как правильно делать set_fact одной и той же переменной, но в заивисимости от условия - set_fact: download_url: http://url1/ when: env_type == "dev" - set_fact: download_url: http://url2/ when: env_type == "stg" - set_fact: download_url: http://url3/ when: env_type == "prod" в таком случае, даже если when не срабатывает, переменная все равно переопределяется
Alex
да, согласен, зависит от версии ансибла, но суть отсается таже
Anonymous
@UglyKoyote будет жить. Поприветствуем!
UglyKoyote
Привет. Не буду тянуть кота за тестикулы :) Честно - пробовал найти решение, но не справился. Есть команда, которая должна выполняться через shell: Всё хорошо, но... в параметрах есть такая штука --format="{{json .Status.State}}" и ансибл ожидаемо матерится, мол не знаю что за переменная. попытки экранирования не особо помогли, и вот я тут Может кто решал такую ситуацию?
Anonymous
@tsavchyn будет жить. Поприветствуем!
UglyKoyote
материлось. решил по другому, на то что выдал ансибл обратил внимание -f \{\{.Status.State\}\}
inqfen
И да, факт устанавливается для хоста, если ты её устанавливаешь на одном, а используешь на другом, то так не получится
Alex
нее
Alex
дело не в этом, а в том, что даже когда when не срабатывает, то set_fact все равно отрабатывает
Alex
сорри, это я туплю, перепутал с register 🤦‍♂️