Станислав
Всем привет. Есть 3 хоста, как с 1 первого хоста скопировать файл на три других? Какой модуль нужен? Прочитал, что можно сначала сделать pull (модуль fetch ) с первого на локальную машину, а потом на остальные закинуть (copy).
Станислав
Отделение Bereke Bank
ага
Я делал через slurp + register и copy content
Станислав
Я делал через slurp + register и copy content
оке. щас затестим, спасибо
Oleg
коллеги, правильно ли так hostname = "{{ hostname | default('{{ansible_hostname}}') }}" или "{{ hostname | default('ansible_hostname') }}"? проверить нет возможности где то просто=(
Alex
"{{ hostname | default(ansible_hostname) }}"
Никита
Час копаюсь уже, не могу понять. Windows, на всех машинах. Суть в том что есть путь к программе на 300+ тачках, и на всех тачках пути к программе разные, стандартизации нет. Как я вышел из положения: У меня переодически через Powershell запускается фоновое задание которое ищет этот путь и пишет его в файл. То есть сейчас у меня есть, условно файл C:/path.txt, где записан путь и мне нужно постоянно взаимодействовать с этой директорией через мои плейбуки. Как получить контент из файла в Ansible под windows?
Никита
tutunak
А как то более по Ansible way?
Поискать в доке модуль который читает файл. Если такого нет - написать самому
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 через запятую ?
Vladimir
hostname_list|join(',')
а оно в строку делает ?
Lamobot
а оно в строку делает ?
Если у тебя в hostname_list строки, то сделает в строку https://jinja.palletsprojects.com/en/2.11.x/templates/#join
Aleksandr
Господа, доброго дня! подскажите пожалуйста как заставить ансибл выполнять задачу только один раз на хосте? не один раз в группе как делает run_once, а вот именно если так оказалось что в списке серверов на которые я буду раскатываться оказались дубликаты, то катать только один раз на сервер?
Denis
ну его....Перепишу тесты на goss
https://github.com/ansible-community/molecule-goss/issues/8 Весело
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
Откуда вы хотите вытащить ansible_nodename? Из какого списка?
Vladimir
Откуда вы хотите вытащить ansible_nodename? Из какого списка?
Стандартная переменная же < которая генерируется
Lamobot
Замени её на play_hosts Это группа хостов, с которой
Timur
Стандартная переменная же < которая генерируется
Для какого списка хостов вам нужна эта переменная? Для всех хостов плея?
Timur
Плей на какую группу у вас?
Vladimir
Замени её на play_hosts Это группа хостов, с которой
"AnsibleUndefinedVariable: dict object has no element ['ans1', 'ans2']"}
Timur
play_hosts - это готовый список хостов, а не группа
Vladimir
Плей на какую группу у вас?
в смысле ? Какая разница ? Там может быть указана и не группа , а хосты в limit например . Может быть группа и иметь разное название
Timur
ansible_play_hosts|map("extract",hostvars,ansible_nodename)|list|join(',')
Lamobot
play_hosts - это готовый список хостов, а не группа
Точно. Тогда нужно заменить groups[hosts_group] на play_hosts :)
Lamobot
Господа, доброго дня! подскажите пожалуйста как заставить ансибл выполнять задачу только один раз на хосте? не один раз в группе как делает run_once, а вот именно если так оказалось что в списке серверов на которые я буду раскатываться оказались дубликаты, то катать только один раз на сервер?
2. Любой таск, который на одном хосте выполняется один раз. Создание файла, допустим, с throttle: 1 и сохранением результата. И следующим add_host все где changed создание файла кинуть в отдельную группу, с которой уже и работать.
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
поду раскуривать магию
Vladimir
Благодарю
Timur
Vladimir
@tgadiev а теоретический вопрос. Я же могу узнать ip машины в группе , которая естественно в inventory/hosts, но не участвует в play
Vladimir
было бы удобно добавить так ip кластеров , которые как раз в той группе
Timur
Если ip есть непосредственно в инвентаре, а не получается фактами
Vladimir
да есть конечно
Vladimir
а как тогда группу запросить ? как пример, дальше сам попробую раскурить
Timur
{{ groups['x'] | map('extract', hostvars, 'ec2_ip_address') | list }}
Timur
Как-то так
Timur
Вместо 'x' - имя вашей группы
Vladimir
благодарю еще раз
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
Зачем делать delegate_to для раскатки на каждом сервере?