Anton
я просто имена свои поставил
Grek 🇺🇦
ну, так у вас var присваевается значение foo которого нет на хосте, зачем вообще делать переопределение переменных?
Anton
так в примере написано
Anton
я весь день сижу и пытаюсь врубиться, почему оно и как оно
Anton
я и без переопределения пробовал
Grek 🇺🇦
а ткните меня носом в ту часть кода, где это написано в ответе на SO
Grek 🇺🇦
- hosts: localhost tasks: - command: /bin/echo "this is a test" register: foo - hosts: localhost tasks: - debug: var=foo
Grek 🇺🇦
оно?
Anton
So modify the first example like this:
Anton
дальше, где он hostvars разбирает
Grek 🇺🇦
а потом ниже там - почитайте почему оно работает
Anton
But the second task succeeds because it's explicitly referencing localhosts's instance of the variable foo:
Grek 🇺🇦
там же написано что работает так потому что группы хостов одинаковые, а ниже есть пример для разных групп хостов
Grek 🇺🇦
- hosts: localhost tasks: - command: /bin/echo "this is a test" register: foo - hosts: anotherhost tasks: - debug: var=foo when: foo is defined - debug: var=hostvars['localhost']['foo'] when: hostvars['localhost']['foo'] is defined
Sergey
--- - hosts: swarm_manager become: true tasks: - command: /bin/echo "this is a test" register: foo - hosts: swarm_worker become: true tasks: - debug: var=foo - debug: var=hostvars['swarm_manager']['foo']
facepalm.jpg hostvars['swarm_manager'] - неправильно hostvars[swarm_manager] - тоже неправильно, если в переменной не лежит имя хоста
Anton
я про первое понял, но у меня ни первое, ни второе не работает
Sergey
я про первое понял, но у меня ни первое, ни второе не работает
Потому что hostvars - это словарь, его ключи - имена хостов, а не групп!
Anton
хм, действительно
Grek 🇺🇦
swarm_manager - это группа? какие хосты в ней?
Anton
😂
Anton
[swarm_manager] 192.168.1.231 [swarm_worker] 192.168.122.34 ansible_user=vagrant 192.168.122.241 ansible_user=vagrant
Anton
с хостом работает
Grek 🇺🇦
192.168.1.231 - дайте ему имя
Grek 🇺🇦
и во втором плее образайтесь к имени хоста
Anton
да я уже дал и заработало. то есть группу туда не воткнуть что ли?
Grek 🇺🇦
а зачем группа, переменная то на определенном хосте регистрируется. а не на группе хостов
Отделение Bereke Bank
Anton
мне это все надо снова переварить, спасибо
Sergey
да я уже дал и заработало. то есть группу туда не воткнуть что ли?
Все переменные при запуске "сплющиваются" в hostvars.
Anton
дело-то даже не в переменных оказалось, а что я в hostvars с группами работал
Anton
https://stackoverflow.com/questions/40027847/accessing-inventory-host-variable-in-ansible-playbook потому что здесь, например, используют группы
Anton
я же тебе скидывал. там [0] было еще
да, получилось и с группами работать.
977
Коллеги поделитесь пожалуйста playbook для автоматического backup конфигурации с возможностью удалять старые версии конфигураций с сервера ubuntu 20.4 (перезатирать).
977
Backup для cisco.
977
Через ansible это можно настроить?
George
У меня возникла задача, и мне не хочется её велосипедить. Для данного инвентори (в нём есть всё, кроме ansible_host) надо сделать пачку инстансов (openstack), что-то сделать, а потом инстансы стереть. Я могу это навелосипедить, но, наверное, есть уже что-то готовое?
Alexandr
Добрый день. Подскажите пожалуйста как правильно можно достать данные из json и вообще можно ли так? Пример json: [ { "addresses": { "network1": [ { "addr": "192.168.1.1" } ] }, "name": "test1" }, { "addresses": { "network2": [ { "addr": "192.168.1.2" } ] }, "name": "test2" }, { "addresses": { "network3": [ { "addr": "192.168.1.3" } ] }, "name": "test3" } ] Хочу по Ip адресу достать name. Пробовал чтото такое : - name: debug debug: msg="{{ result.servers | json_query([?addresses.*[*].addr=='192.168.1.1'].{Name: name})}}" Но я так понял что нельзя искать по key * не ругайте строго,только начал возиться с json. Спасибо
Виталий
Через ansible это можно настроить?
https://github.com/network-automation/agnostic_example/blob/master/backup.yml
Aleksey
@amarao скажи мне. вот есть у меня ну пусть для простоты consul-template. он должен рендерить конфиги сервисов. понятно есть роль которая притаскивает consul-template и делает его демоном. но кто и когда должен положить шаблоны к нему. шаблоны сервисов которые ему будет надо рендерить. и конфиг того что надо взять такой вот шаблон и запустить такую вот команду.
laspavel
Всем привет ! Подскажите пожалуйста. Есть переменная которая состоит из набора значений Есть таска. Нужно сделать что-бы для каждого хоста применялась команда с каждым элементом списка заданного ранее параметра. Есть какой-то образец YML ? Или подскажите в какую сторону копать ?
George
@amarao скажи мне. вот есть у меня ну пусть для простоты consul-template. он должен рендерить конфиги сервисов. понятно есть роль которая притаскивает consul-template и делает его демоном. но кто и когда должен положить шаблоны к нему. шаблоны сервисов которые ему будет надо рендерить. и конфиг того что надо взять такой вот шаблон и запустить такую вот команду.
Общего ответа нет. В зависимости от того, как удобнее, либо сниппеты с delegate, либо сбор фактов с хостов (каждый хост подготавливает факты, темплейт или таска собирает). В целом, чем больше кросс-хостового взаимодействия, тем хуже Ансибл. Идеальный вариант, это внешняя сущность, которая кормит ансибл готовыми данными.
Aleksey
тут нет кросхостового взаимодейтсвия. всё происходит внутри одного хоста.
Aleksey
просто в роли consul-template есть знание про диреткории в которых надо хранить темелпйты. и формат конфига в котором должно быть
Aleksey
в прошлый раз я принял решение что роль консултемплейта обладала возможностью вызова. и ее можно было позвать из роли с сервисом. сервис предоставлял конфиг и методику его релоада. а роль консултемплейта складывала чо надо куда надо.
Aleksey
то решение мне кажется не сильно удачным
Aleksey
видимо в этот раз я склею их через плейбук. где буду звать роль консултемплейта передавая ей шаблон и методику релоада
k
к чему тут зависимость ? какую проблему она решает ?
Я не в курсе всего диалога, триггернулся на ваш вопрос "кто должен подложить consul-template шаблоны приложения" Ответ на него - вот такой Вы же хотите привести хост/группу хостов к тому, чтобы на них крутилось приложение application и у него были конфиги, верно? А не к тому, чтобы на хосте крутился именно consul-template и брал файлы вот отсюда и клал их вот сюда Эту зависимость нет нужды выносить на верхний уровень, явно класть в плейбук, вполне разумно объявить её в роли приложения
k
то решение мне кажется не сильно удачным
Можно узнать, чем "не зашло"?
Aleksey
Можно узнать, чем "не зашло"?
больно много потом делегатов и прочего програмирования вокруг получается.
Aleksey
ну и вызов через dependency я считаю крайне неочевидным поэтому по возможности избегаю.
Aleksey
у задачки есть еще некоторая доп подоплека. я пеку образ для packer. запускать сервисы сами по себе или поддерживать в них жизнь не надо.
k
больно много потом делегатов и прочего програмирования вокруг получается.
Понял, жаль слышать Я как раз обратный путь проделал и очень доволен результатом Вместо складирования всех уровней логики в playbook, стал делать роли двух типов: - условно базовая - типа package, firewall, limits - условно прикладная - типа application Прикладная роль у меня зависит от пары базовых и внутри себя имеет обычно только пару вызовов template, ну и какой-нибудь notify Вся магия прячется в meta/dependencies, но мы про это с коллегами договаривались заранее Так получаются крайне очевидные плейбуки - состоящие, например, из 5 play, по одной-две роли в каждом
Aleksey
я как раз не гонюсь за очевидностью плейбука и всю сложную логику и клей вытаскиваю в них. а роли простые и деревянные
Aleksey
я пробовал и так и эдак. с простыми ролями у меня сильно упрощается тестирование. а это ценно.
Aleksey
а вот с простыми плейбуками ничего не упрощается и не становится лучше
k
Да, я не в смысле "Ваш подход плохой" :) Скорее стараюсь показать плюсы "своего", его много проще масштабировать, изменять Если что-то изменилось в приложении - это изменение остается внутри роли, не выходит наружу, не аффектит соседей, не усложняет весь плей/плейбук Так-то у нас просто сложность в разных местах складирована)
Aleksey
а ну да. и важно. у меня нет e2e тестов. я просто запускаю плейбуки целиком в отдельном окружении. и по результатам зову goss проверить чо получилось
Terry
[Видео] Платформа совместной автоматизации операционных задач https://www.youtube.com/watch?v=knnooMn5xH0 Cофтверное платформенное решение для автоматизации операционных задач в ИТ и публикации автоматизированных задач в корпоративных каналах коммуникации (Slack, почта, Telegram, и др.). Опыт использования в операторе мобильной связи
Anatolii
подскажите как добавить ип адрес сервера, который будет получен только при запуске роли?
Anatolii
Что это значит, простите?
Имею ввиду как вообще вставлять переменную в шаблон j2. Если эта переменная генерится в процессе работы плейбука
Anatolii
Например есть глобальная переменная которая в шеле. Как ее добавить в j2?
Anatolii
Например export AWS_KEY=12345
Anatolii
Вот как этот AWS_KEY добавить в j2?
sadsad
Например export AWS_KEY=12345
Регистрируй переменную до таска с template
Anatolii
Так оно подтягивается? j2 поймет если я напишу {{ AWS_KEY }} ?
Alex
To check if directory exists and then run some task (e.g. create directory) use the following - name: Check if output directory exists stat: path: /path/to/output register: output_folder - name: Create output directory if not exists file: path: /path/to/output state: directory owner: user group: user mode: 0775 when: output_folder.stat.exists == false SO отжигает
Oleg
идемпотентность которую мы заслужили
Div
Есть более элегантные решения?
Grek 🇺🇦
Вы серьезно спрашиваете?
inqfen
Модуль file и так идемподентен