Alexander
Народ, подскажите, пожалуйста по такому вопросу. Есть простой такс, копирующий файлы из role/files/ в каталог на целевой машине: copy: src: "{item}" dest: "{{ destination_path }}" loop: "{{ lookup('fileglob' ....) | list }}" И вот он происходит довольно медленно, файлов там десятка 2-3, все текстовые на 5-10 Кб. Можно ли как-то эту задачу решить, чтобы оно быстрее работало?
Grek 🇺🇦
синхронайз
Alexander
rsync?
Grek 🇺🇦
https://docs.ansible.com/ansible/latest/collections/ansible/posix/synchronize_module.html
Alexander
Ага, читаю уже ) спасибо
Sergey
Alexander
Всегда будет changed?
Sergey
Ну по логике - да. Если бы у тебя был фиксированный список - его можно и в переменную сложить. А так - нутыпонел.
Alexander
Больше вариантов не может быть?
Николай
Вот так выглядит идемпотентность в твоём случае:
Чёита? synchronize даёт changed, только если передача данных состоялась, не? Или тут что-то философское?
Sergey
Чёита? synchronize даёт changed, только если передача данных состоялась, не? Или тут что-то философское?
Использование fileglob говорит о том, что в списке исходных файлов ожидаются изменения - вот они и будут.
Sergey
Если изменений не ожидается - fileglob нинужен.
Alexander
Может измениться как содержимое файла, так и их количество
Alexander
Это директория с инклюдами для конфига софта. =)
Николай
Это директория с инклюдами для конфига софта. =)
Вам нужно нормально деплой построить
Николай
а не вот это вот
Alexander
Вам нужно нормально деплой построить
Возможно. А что не так? Конфиги периодически дополняются, нужно отслеживать состояние и менять на актуальные
Николай
{{ внутри {{ — отличный совет. Так и надо делать
Vladislav 👻
{{ внутри {{ — отличный совет. Так и надо делать
открою тебе секрет, но так весь ансибл работает
Vladislav 👻
на хабре на эту тему есть большая статья, как читаются переменные и как прогоняются и в какой момент через jinja
Николай
Закрывай секрет обратно. Конкатенация.
Vladislav 👻
понятно, проходи
Николай
Поклонник хабра, бгг
Sergey
открою тебе секрет, но так весь ансибл работает
Вызов шаблонизатора внутри вызова шаблонизатора - это сильно, конечно. Правильно тебе сказал коллега - закрывай такой "секрет", нечего им на людях трясти, стыд-то какой.
Vladislav 👻
перепилите на конкатенацию - медаль дам
Vladislav 👻
а пока, ваши набросы ни о чем, весь ансибл так работает и никого не смущает, все ваши переменные так или иначе так работают, когда работаете с инвентори
Alexander
"{{ lookup('file', '{{ user }}.pub') }}" через инклуд или цикл по списку из переменной и довольно быстро все это будет работать
А в чём разница тут? Я просто ищу в директории файлы с определённым расширением с fileglob
Николай
Возможно. А что не так? Конфиги периодически дополняются, нужно отслеживать состояние и менять на актуальные
Не видя того, как там всё построено, дать какие-то конкретные рекомендации, конечно, трудно 😇 Но вообще куча конфиг-файлов — не очень хорошая практика. Для развесистого конфига лучше юзать конфиг-сервер или переменные окружения (если приложение докеризовано).
Николай
перепилите на конкатенацию - медаль дам
Ты это щас серьёзно? Знаток того, как работает унутре ансибля? "{{ lookup('file', user ~ '.pub') }}"
Николай
Медаль (с закруткой на спине) себе оставь))
Александр
copy с этим прекрасно справляется.
Александр
В случае если исходник на удаленной машине проще сначала на ansible забрать папку, а потом её всем раскидать.
Николай
Так и что - оно должно работать быстрее?
По меньшей мере, оно не будет выглядеть как нечитаемое говно.
Николай
Мы ж YAML-программисты, нужно писать красиво
Alexander
Я не про {{ }} внутри {{ }} ))
Alexander
Я про lookup('file') против lookup('fileglob')
Alexander
Так-то я тоже конкатенацию использую
Николай
Я про lookup('file') против lookup('fileglob')
Можно, конечно, померять на большом списке, но думаю, что пофигу. Даже, пожалуй, fileglob быстрее будет.
Николай
но вообще лучше синхронайз)
Alexander
Попробую его
Alex
Python creator Guido van Rossum joins Microsoft – TechCrunch https://techcrunch.com/2020/11/12/python-creator-guido-van-rossum-joins-microsoft/
Alex
Приехали
Отделение Bereke Bank
Отделение Bereke Bank
Теперь майкрософт закроет Гвидо...
Александр
copy: src: /shared dest: /opt/ directory_mode: yes
Андрей
тебе просто не повезло)
Андрей
Башсибл раньше имел место быть)
Sergey
На вот: https://docs.ansible.com/ansible/2.9/modules/deploy_helper_module.html. И развидь спокойно.
Combot
Total messages: 167741
Sergey
@igorfraa всё просто, дальше продолжаешь = RO.
Игорь
там выше сказали "приехали", что тоже не очень относится к ансиблу
Sergey
что продолжаю?
Давай так: у тебя есть выбор. Чтобы не получить первое RO на сутки, ты сейчас сам подумаешь и скажешь, чем отличается сообщение о смене места работы известного специалиста - автора языка, на котором написан онтопик, причём из его же личного твиттера, от копипасты с сайта Дропбокса, и почему здесь первое - в тему, а второе - нет. Ну или можешь просто согласиться на RO.
Sergey
Я полагаю, ты всё-таки всё понял и не безнадёжен. Смысл не в том, чтобы я победил, а в том, чтобы по возможности участники группы думали, прежде чем что-то запостить: "кому принесёт пользу моё сообщение?" Обуждать личные высказывания известного человека в чате по инструменту - ну такое, для других чатов, именно поэтому я и стриггерился. А вот устройство известного специалиста - автора языка на работу в Майкрософт теоретически повлияет на ситуёвину с питоном на винде (т.е. плохую), и глядишь - ансибл виндовый появится.
Sergey
Именно поэтому коллега выше запостил сугубо про второе.
Игорь
замяли
Aliaksei
небольшой вопрос: как сделать удобнее, - ansible при вызове модяля uri делает вызов с целевого хоста, но я хочу в некоторых случаях его вызывать с машины где установлен ansible (без предварительного захода через ssh) - import_tasks: meta.yml в группе задач используется ansible_ssh_host который берется из инвентари и используется внутри тасков (в таком случае происходит ansible -> ssh host -> ext url) - import_tasks: meta.yml delegate_to: 127.0.0.1 в таком случае происходит ansible -> ext url но затирается переменная ansible_ssh_host (адрес становится 127.0.0.1) и все ломается пробовал в дефолте определять доп переменную, tmp_ansible_ssh_host: "{{ ansible_ssh_host }}" но она тоже переопределяется во время delegate_to
Grek 🇺🇦
Не ломается, а работает как и должно. Передавайте jump host в другой переменной
Aliaksei
ну да, я понял что так должно, - задача обновить метинформацию во внешней системе, и еще некоторые таски, там нужен IP адрес машины, использую {{ ansible_ssh_host }} например - name: Change server name uri: url: "https://example.com/{{ tmp_ansible_ssh_host }}" method: POST
-
"{{ lookup('vars','inventory_hostname') }}" не подходит?
Aliaksei
inventory_hostname може еще не быть в днс например, он же вернет имя(
-
inventory_hostname може еще не быть в днс например, он же вернет имя(
а как вообще к нему контрол машина обращается если имя не резолвится?
Aliaksei
Из постоянных фактов только IP адрес. — идея просетапить машину, потом обновить мет информацию, дописать машину в днс, ну может еще чего потом. ansible_host=IP а инвентари.
Aliaksei
вообще я думал что модуль uri будет работать не с remote host когда начинал писать логику)
Aliaksei
да. запутал) сейчас чуть понятнее попробую обьяснить. инвентари заполяется вручную, там есть [provision] node1.example.com ansible_host=ip я использую служебные переменные inventory_hostname (для указания имени сервера который еще может быть не готов для доступа по ssh но хочется дописать его в днс и другую внешнюю систему) с адресом IP ansible_ssh_host
Aliaksei
провобавал определить в дефолте, но после delegate тоже меняется ip на 127, tmp_ansible_ssh_host: "{{ ansible_ssh_host }}" gather_facts используется(( похоже что нужно пробовать както set_fact определить
Konstantin
Парни всем привет! Помогите плиз понять проблему, есть inventory файл в котором зашифрованы переменные через encrypt_string, при запуске плейбука получаю Decryption failed, при включенном дебаге в логе пишет HMAC verification failed: Signature did not match digest