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
Anton
я про первое понял, но у меня ни первое, ни второе не работает
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
Anton
дело-то даже не в переменных оказалось, а что я в hostvars с группами работал
Anton
https://stackoverflow.com/questions/40027847/accessing-inventory-host-variable-in-ansible-playbook потому что здесь, например, используют группы
977
Коллеги поделитесь пожалуйста playbook для автоматического backup конфигурации с возможностью удалять старые версии конфигураций с сервера ubuntu 20.4 (перезатирать).
977
Backup для cisco.
citius
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.
Спасибо
Aleksey
@amarao скажи мне. вот есть у меня ну пусть для простоты consul-template. он должен рендерить конфиги сервисов.
понятно есть роль которая притаскивает consul-template и делает его демоном.
но кто и когда должен положить шаблоны к нему.
шаблоны сервисов которые ему будет надо рендерить. и конфиг того что надо взять такой вот шаблон и запустить такую вот команду.
laspavel
Всем привет ! Подскажите пожалуйста. Есть переменная которая состоит из набора значений Есть таска. Нужно сделать что-бы для каждого хоста применялась команда с каждым элементом списка заданного ранее параметра. Есть какой-то образец YML ? Или подскажите в какую сторону копать ?
George
Aleksey
тут нет кросхостового взаимодейтсвия. всё происходит внутри одного хоста.
k
Aleksey
просто в роли consul-template есть знание про диреткории в которых надо хранить темелпйты. и формат конфига в котором должно быть
Aleksey
Aleksey
в прошлый раз я принял решение что роль консултемплейта обладала возможностью вызова. и ее можно было позвать из роли с сервисом.
сервис предоставлял конфиг и методику его релоада. а роль консултемплейта складывала чо надо куда надо.
Aleksey
то решение мне кажется не сильно удачным
Aleksey
видимо в этот раз я склею их через плейбук. где буду звать роль консултемплейта передавая ей шаблон и методику релоада
k
к чему тут зависимость ? какую проблему она решает ?
Я не в курсе всего диалога, триггернулся на ваш вопрос "кто должен подложить consul-template шаблоны приложения"
Ответ на него - вот такой
Вы же хотите привести хост/группу хостов к тому, чтобы на них крутилось приложение application и у него были конфиги, верно?
А не к тому, чтобы на хосте крутился именно consul-template и брал файлы вот отсюда и клал их вот сюда
Эту зависимость нет нужды выносить на верхний уровень, явно класть в плейбук, вполне разумно объявить её в роли приложения
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
подскажите как добавить ип адрес сервера, который будет получен только при запуске роли?
Timur
Anatolii
Что это значит, простите?
Имею ввиду как вообще вставлять переменную в шаблон j2. Если эта переменная генерится в процессе работы плейбука
Timur
Anatolii
Например есть глобальная переменная которая в шеле. Как ее добавить в j2?
Anatolii
Например export AWS_KEY=12345
Anatolii
Вот как этот AWS_KEY добавить в j2?
Anatolii
Так оно подтягивается? j2 поймет если я напишу {{ AWS_KEY }} ?
Anatolii
Vladimir
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
inqfen
Модуль file и так идемподентен