Timur
С помощью модуля group_by
Timur
https://docs.ansible.com/ansible/2.5/modules/group_by_module.html#group-by-module
Timur
Там как раз можете задавать логику разделения по группам в зависимости от имени
Konstantin
например вот такая штука рулит отлично hosts: "{{ groups['consul'] | select('match', inventory_hostname.split('-') | first) | list }}" Но тут звучит как - включить в список хосты которые начинаются с тем же признаком (eu/ru/us) что и инвентори хост. но то что мы обсуждаем - надо исключить хосты что с признаком как инвентори хост 🙂
Konstantin
Тут еще вопрос в том, что мне тоода не надо будет думать и помнить что нужно еще один регион добавить, оно будет уже работать на автомате без всяких создания групп и ведения списков
Konstantin
Timur
- name: Group hosts by region group_by: key: "region_{{ inventory_hostname.split('-')[0] }}"
Timur
Как-то так
Timur
И все хосты с соотв. именем попадают в группу 'region_{{ имя_региона }}'
Konstantin
И все хосты с соотв. именем попадают в группу 'region_{{ имя_региона }}'
вот надо чтоб не попадали 🙂 Посмотрел, не совсем это то.
Timur
вот надо чтоб не попадали 🙂 Посмотрел, не совсем это то.
Не понял. Что куда не должно попадать? Опишите задачу яснее, пожалуйста
Konstantin
Я так прикинул если использовать паттерн - нужно создать 6 файлов, вести там одну переменную и подерживать когда будут новые регионы, то есть менять везде эти регионы 🙂 весело. Буду дуплить подход с фильтрацией
es]x
подскажите как подставить пееменные из файла lookupом?
Konstantin
Зачем 6 файлов с переменной? Вы о чем?
потому что у меня разные стейжи и количество групп будет равно количеству локаций
Konstantin
вот что мне надо 🙁
Konstantin
вот так отфильтровать и получить список этих eu в переменную hosts 😵
Timur
вот что мне надо 🙁
Конкретнее. Какую именно задачу вы решаете?
Timur
Просто вывести список определенных хостов по фильтру?
Timur
вот так отфильтровать и получить список этих eu в переменную hosts 😵
groups_by как раз и даст вам группы в переменной hosts
Timur
потому что у меня разные стейжи и количество групп будет равно количеству локаций
Ну, если лень один раз разбить хосты по нужным группам - используйте group_by, как выше указано
Konstantin
группа [consul] ru-cli1 eu-cli1 eu-cl2 таска на хосте ru-cl1 в переменную hosts полжна получить хосты eu. если это сделать ничего разбивать на группы не нужно будет. Вот такое решение "{{ groups['consul'] | select('match', '^(?!{{ inventory_hostname.split(\"-\") | first }})') | list }}" inventory_hostname.split(\"-\") | first == ru/eu/us … выдаеть полный списко (без фильтрации). Наверняка я тут что то с фильтром напутал, работает не так как ожидаю
Konstantin
чет жесть какая то с макрдауном 🙁
Timur
Есть впечатление, что вы пытаетесь использовать ансибл совершенно не тем способом, который предполагается by design
Konstantin
Вопрос не в том, зачем мне это надо6 а можно ли это сделать 🙂
Timur
Если сделать как я выше сказал, то в переменной groups['region_eu'] как раз и будут все нужные вам хосты
Timur
Чем этот вариант не устраивает?
Timur
Жутко тянет попрограммировать? :)
Konstantin
Konstantin
вот сюда нужно воткнуть хосты которые из других регионов 🙂 а не в том же
Timur
Чем не устраивает?
Konstantin
🙂
Konstantin
я б воткнул стикер да низя 🙂
Konstantin
лан. ща че нить придумаю
Timur
Так вы так и не можете объяснить, чем же вам не подходит предложенный вариант
Konstantin
Так вы так и не можете объяснить, чем же вам не подходит предложенный вариант
ваш вариант точно не канает - там только один регион будет6 а нужно все остальные. ща буду дуплить дальше. может и group_by приделаю
[IPT] Dmitry
- hosts: all vars: proxy_env: http_proxy: https_proxy: tasks: - name: send a message to chat in playbook environment: "{{ proxy_env }}" local_action: module: telegram token: "{{ TGBotTokenID }}" chat_id: "{{ TGBotChatID }}" msg: "MESSAGE TASK [send a message to chat in playbook] ************************************************************************************************************************************************************************* changed: [host1 -> localhost] changed: [host2 -> localhost] а можно что-то сделать, чтобы проигрывалось только на localhost? так чтобы 1 раз выполнялось, а не для каждого хоста
[IPT] Dmitry
пробовал delegate_to, суть та же: выполняется два раза
Konstantin
run_once: true
Konstantin
как вариант
Konstantin
он там рандомно вроде выбирает
[IPT] Dmitry
очень даже, спасибо!
Timur
Сейчас гляну вариант
Konstantin
Сейчас гляну вариант
решено 🙂 hosts: "{{ groups['consul'] | reject('match', inventory_hostname.split('-') | first) | list }}" совсем забыл про reject
Александр
Эт что за тестилка?
Tadeusz
это ж сайт вроде 101… или как его там
Konstantin
https://regex101.com/
Александр
Понял, спосебо.
es]x
подскажите почему жалуеться что переменая не определена
es]x
- name: include vm_name and vm_ip include_vars: file: vm_names_ips.yml name: vm_attr delegate_to: localhost - name: Clone vm vmware_guest: ..... ..... - debug: msg: "{{ vm_attr }}"
es]x
- name: with_nested -> loop debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ vm_attr.vm_names|product(vm_attr.vm_ips)|list }}" на выходе получаю TASK [vm_create : with_nested -> loop] *************************************************************************************************************************************************************************************************************************************************** ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.61']) => { "msg": "pstg-zab01 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.62']) => { "msg": "pstg-zab01 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.63']) => { "msg": "pstg-zab01 - 10.21.254.63" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.61']) => { "msg": "pstg-zab02 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.62']) => { "msg": "pstg-zab02 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.63']) => { "msg": "pstg-zab02 - 10.21.254.63" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.61']) => { "msg": "pstg-zab03 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.62']) => { "msg": "pstg-zab03 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.63']) => { "msg": "pstg-zab03 - 10.21.254.63" как модно сделать чтобы 1 значению 1 списка соответствовало 1 значение второго списка и небыло перебора
Eugene
- name: with_nested -> loop debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ vm_attr.vm_names|product(vm_attr.vm_ips)|list }}" на выходе получаю TASK [vm_create : with_nested -> loop] *************************************************************************************************************************************************************************************************************************************************** ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.61']) => { "msg": "pstg-zab01 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.62']) => { "msg": "pstg-zab01 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.63']) => { "msg": "pstg-zab01 - 10.21.254.63" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.61']) => { "msg": "pstg-zab02 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.62']) => { "msg": "pstg-zab02 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.63']) => { "msg": "pstg-zab02 - 10.21.254.63" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.61']) => { "msg": "pstg-zab03 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.62']) => { "msg": "pstg-zab03 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.63']) => { "msg": "pstg-zab03 - 10.21.254.63" как модно сделать чтобы 1 значению 1 списка соответствовало 1 значение второго списка и небыло перебора
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#with-together
Sergey
- name: with_nested -> loop debug: msg: "{{ item.0 }} - {{ item.1 }}" loop: "{{ vm_attr.vm_names|product(vm_attr.vm_ips)|list }}" на выходе получаю TASK [vm_create : with_nested -> loop] *************************************************************************************************************************************************************************************************************************************************** ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.61']) => { "msg": "pstg-zab01 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.62']) => { "msg": "pstg-zab01 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab01', u'10.21.254.63']) => { "msg": "pstg-zab01 - 10.21.254.63" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.61']) => { "msg": "pstg-zab02 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.62']) => { "msg": "pstg-zab02 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab02', u'10.21.254.63']) => { "msg": "pstg-zab02 - 10.21.254.63" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.61']) => { "msg": "pstg-zab03 - 10.21.254.61" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.62']) => { "msg": "pstg-zab03 - 10.21.254.62" } ok: [localhost] => (item=[u'pstg-zab03', u'10.21.254.63']) => { "msg": "pstg-zab03 - 10.21.254.63" как модно сделать чтобы 1 значению 1 списка соответствовало 1 значение второго списка и небыло перебора
Простыни в чате - плохой тон.
Sergey
Есть же Pastebin. Уважай себя.
[IPT] Dmitry
run_once: true
вот же блин! [WARNING]: Using run_once with the free strategy is not currently supported. This task will still be executed for every host in the inventory list.
Lex
дада, run_once и free strategy не совместимы...это так
Lex
ребят подсжкатие пожалуйста - The error was: Mandatory variable 'var' not defined.
Lex
почему ругается на неустановленную переменную? разве mandatory не должен разрешить этот undefined
Lex
или он как то подругому работает?
Lex
вроде ж как раз для этого он и нужен....
Lex
или не так?
Andor
посоветуйте докер-контейнер через который я могу запускать всякие команды ansible-galaxy install
Andor
а как им?
Vlad
https://hub.docker.com/r/ansible/ansible
Images for automated testing of Ansible. They do not include Ansible and are not for end users.
Anonymous
Ну тогда хоть ubuntu взять и туда ansible поставить
Aleksei
по сути алпайн с питоном и ансиблом
Andor
Andor
а чо готового нету что ли
Aleksei
https://hub.docker.com/u/ansible