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
Timur
- name: Group hosts by region
group_by:
key: "region_{{ inventory_hostname.split('-')[0] }}"
Timur
Как-то так
Timur
И все хосты с соотв. именем попадают в группу 'region_{{ имя_региона }}'
Konstantin
Konstantin
Я так прикинул если использовать паттерн - нужно создать 6 файлов, вести там одну переменную и подерживать когда будут новые регионы, то есть менять везде эти регионы 🙂 весело. Буду дуплить подход с фильтрацией
es]x
подскажите как подставить пееменные из файла lookupом?
Timur
Konstantin
Konstantin
вот что мне надо 🙁
Konstantin
вот так отфильтровать и получить список этих eu в переменную hosts 😵
Timur
Просто вывести список определенных хостов по фильтру?
Timur
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
Timur
Есть впечатление, что вы пытаетесь использовать ансибл совершенно не тем способом, который предполагается by design
Konstantin
Вопрос не в том, зачем мне это надо6 а можно ли это сделать 🙂
Timur
Если сделать как я выше сказал, то в переменной groups['region_eu'] как раз и будут все нужные вам хосты
Timur
Чем этот вариант не устраивает?
Timur
Жутко тянет попрограммировать? :)
Konstantin
Konstantin
Konstantin
вот сюда нужно воткнуть хосты которые из других регионов 🙂 а не в том же
Timur
Timur
Чем не устраивает?
Konstantin
🙂
Konstantin
я б воткнул стикер да низя 🙂
Konstantin
лан. ща че нить придумаю
Timur
Так вы так и не можете объяснить, чем же вам не подходит предложенный вариант
[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
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 }}"
Eugene
es]x
Sergey
es]x
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
Anonymous
Andor
а как им?
Anonymous
Anonymous
Ну тогда хоть ubuntu взять и туда ansible поставить
Aleksei
Aleksei
по сути алпайн с питоном и ансиблом
Andor
Andor
а чо готового нету что ли
Aleksei
https://hub.docker.com/u/ansible