Grek 🇺🇦
Станислав
Всем привет. Есть 3 хоста, как с 1 первого хоста скопировать файл на три других? Какой модуль нужен?
Прочитал, что можно сначала сделать pull (модуль fetch ) с первого на локальную машину, а потом на остальные закинуть (copy).
Отделение Bereke Bank
Станислав
Отделение Bereke Bank
ага
Я делал через slurp + register и copy content
Станислав
Oleg
коллеги, правильно ли так hostname = "{{ hostname | default('{{ansible_hostname}}') }}" или "{{ hostname | default('ansible_hostname') }}"?
проверить нет возможности где то просто=(
Alex
Alex
"{{ hostname | default(ansible_hostname) }}"
Oleg
Никита
Час копаюсь уже, не могу понять.
Windows, на всех машинах.
Суть в том что есть путь к программе на 300+ тачках, и на всех тачках пути к программе разные, стандартизации нет.
Как я вышел из положения:
У меня переодически через Powershell запускается фоновое задание которое ищет этот путь и пишет его в файл.
То есть сейчас у меня есть, условно файл C:/path.txt, где записан путь и мне нужно постоянно взаимодействовать с этой директорией через мои плейбуки.
Как получить контент из файла в Ansible под windows?
tutunak
Никита
Lamobot
Denis
Всем привет! Подскажите пожалуйста, можно ли в testinfra передать переменные из ansible? Например:
def test_socket(host):
s = host.socket("tcp://{{ hostvars[inventory_hostname]['ansible_' + network_interface].ipv4.address }}:3000")
assert s.is_listening
Denis
У меня проблема что сервисный порт висит на определенном интерфейсе и когда указываешь host.socket("tcp://3000") то testinfra фейлится
Denis
хотя кажется есть мысль
Vladimir
а кто кинет пример, как бы сделать перечисление hostname через запятую ?
Lamobot
Vladimir
Lamobot
а оно в строку делает ?
Если у тебя в hostname_list строки, то сделает в строку
https://jinja.palletsprojects.com/en/2.11.x/templates/#join
Denis
Aleksandr
Господа, доброго дня! подскажите пожалуйста как заставить ансибл выполнять задачу только один раз на хосте? не один раз в группе как делает run_once, а вот именно если так оказалось что в списке серверов на которые я буду раскатываться оказались дубликаты, то катать только один раз на сервер?
Denis
пробовать нужно откатывать версию молекулы
Lamobot
Хмм, тогда
groups[hosts_group]|map("extract",hostvars,ansible_nodename)|list|join(',')
Vladimir
Хотелось бы конечно научится такие конструкции в голове делать самому
Lamobot
Vladimir
ну я ту конструкцию с трудом понимаю. Вот например то {% for host in play_hosts %}
{{ hostvars[host]['ansible_nodename'] }}
{% endfor %}
Делает почти то , что надо кроме разделителя и то, что оно идет списком
Timur
А как то более по Ansible way?
Модули fetch и slurp могут читать файлы и с виндовых таргетов. Считываешь контент файла и работаешь с ним аналогично никсовым.
Timur
Что за задача?
Vladimir
@tgadiev Надо ansible_nodename, положить в строку в шаблоне . Ну или , что бы значение в шаблоне , имело все имена машин, где была запущенна роль.
Отделение Bereke Bank
map extract что-то там
Vladimir
var=node1.server.loc, node2.server.loc,
Отделение Bereke Bank
А стоп нет
Timur
Timur
Что именно не работает?
Timur
Откуда вы хотите вытащить ansible_nodename? Из какого списка?
Vladimir
Lamobot
Замени её на play_hosts
Это группа хостов, с которой
Timur
Плей на какую группу у вас?
Timur
Timur
play_hosts - это готовый список хостов, а не группа
Vladimir
Плей на какую группу у вас?
в смысле ? Какая разница ? Там может быть указана и не группа , а хосты в limit например . Может быть группа и иметь разное название
Timur
ansible_play_hosts|map("extract",hostvars,ansible_nodename)|list|join(',')
Timur
Lamobot
Vladimir
ansible_play_hosts|map("extract",hostvars,ansible_nodename)|list|join(',')
Timur
Что получаете?
Timur
А факты собираются у вас?
Timur
А вы уверены, что в фактах есть ansible_nodename?
Vladimir
я не понимаю вопроса, почему нет ? Если первый вариант работает ? Второй вариант, я плохо понимаю, так что я не могу его как то проверить или догадаться , что не так
Timur
А, кажется, понял
Timur
ansible_play_hosts|map('extract',hostvars,['ansible_nodename'])|list|join(',')
Timur
Так работает?
Vladimir
поду раскуривать магию
Vladimir
Благодарю
Timur
Vladimir
@tgadiev а теоретический вопрос. Я же могу узнать ip машины в группе , которая естественно в inventory/hosts, но не участвует в play
Vladimir
было бы удобно добавить так ip кластеров , которые как раз в той группе
Timur
Timur
Если ip есть непосредственно в инвентаре, а не получается фактами
Vladimir
да есть конечно
Vladimir
а как тогда группу запросить ? как пример, дальше сам попробую раскурить
Timur
{{ groups['x'] | map('extract', hostvars, 'ec2_ip_address') | list }}
Timur
Как-то так
Timur
Вместо 'x' - имя вашей группы
Vladimir
благодарю еще раз
Aleksandr
Timur
Timur
Вы не знаете, какие хосты у вас в группах?
Aleksandr
знаю. У меня есть 3 железных сервера на которые будут раскатываться компоненты кластера. каждый компонент раскатывается по 1 разу на 1 железный сервер. т.о.
physical1(component1.1, comp2.1, comp3.1 ),
physical2(component1.2, comp2.2, comp3.2 ),
physical3(component1.3, comp2.3, comp3.3 )
и если я хочу что-то раскатать на железные сервера и делаю delegate_to: "железный сервак на котором компонент", то у меня физические сервера встают несколько раз в итоговом плее
Timur
знаю. У меня есть 3 железных сервера на которые будут раскатываться компоненты кластера. каждый компонент раскатывается по 1 разу на 1 железный сервер. т.о.
physical1(component1.1, comp2.1, comp3.1 ),
physical2(component1.2, comp2.2, comp3.2 ),
physical3(component1.3, comp2.3, comp3.3 )
и если я хочу что-то раскатать на железные сервера и делаю delegate_to: "железный сервак на котором компонент", то у меня физические сервера встают несколько раз в итоговом плее
Ничего не понял, если честно
Timur
Зачем делать delegate_to для раскатки на каждом сервере?