George
Порядок задаете вы сами
А, ну, все ок тогда. Прошу прощения за наезд 👍
John
В аэропорту в очереди стою, не смогу
Ну как будет возможность. Врятли кто-то покажет как надо
Vladislav 👻
Сомневаюсь, что это прям "как надо", но в моем, к слову, очень специфичном случае, этот вариант работает и пока удовлетворяет
Rushan
Я не настолько упорот
что ты знаешь об упоротости (: https://habr.com/post/191006/
Vladislav 👻
да это понятно что до идеала надо стремиться, и можно никогда не достингуть)
Если еще будут проблемы, напомните после числа 5-го, покажу как делал
Timur
Ну как будет возможность. Врятли кто-то покажет как надо
- name: Set list of inventory group set_fact: targets: '{{ groups["ubuntu"] | list }}'
Timur
В переменной targets будут все хосты группы ubuntu из вашего инвентаря
John
это имена возьмутся или IP'ы? Просто мне только ip'ы нужны
Timur
Если в инвентори у вас хостнеймы, то хостнеймы и будут
Timur
А вы как хотели?
Timur
Или у вас в дополнительной переменной каждого хоста IP есть?
John
есть ип, ansible_ssh_host: 10.0.0.12
Timur
есть ип, ansible_ssh_host: 10.0.0.12
В том инвентори, что вы показали, этого нет
John
просто мой "боевой" инвентори сильно большой, его никто не будет изучать, что бы помоч мне, по этому яя его минимизировал до простого)
Timur
Тогда вот так: - name: Set list of inventory group set_fact: targets: "{{ groups['ubuntu'] | map('extract', hostvars, ['ansible_ssh_host']) | list }}"
Timur
Работает?
Ilya
[ Фотография ] парни, подскажите как правильно указать в инвентори список членов группы в переменной?
если у вас переменная -- уже список, то не нужно ее еще в один список передавать. анзибл это не поймет. node: {{ member.group.ubuntu }}
Alexander
Привет вам. Товарищи, подскажите пожалуйста по простому выражению. Нужно сравнить две переменных в when, пишу следующую конструкцию: when: "{{ exe_version.win_file_version.file_version | replace('.', '') }}" < latest_version И парсер YAML ругается на отсутствующие кавычки у знака сравнения. Нужно взять строку exe_version.win_file_version.file_version, удалить оттуда точку и сравнить с переменной latest_version.
Alexander
Зачем удалять точку?
latest_version без точки и нужна в таком виде.
Timur
Версии удобнее в исходном виде сравнивать, в semantic виде
Alexander
Просто win_file_version содержит точку.
Timur
А в latest_version нельзя тоже с точкой версию указать?
Timur
Как обычно она и бывает
Alexander
А в latest_version нельзя тоже с точкой версию указать?
Не хотелось бы, я еще эту переменную использую в других местах, где точка не нужна.
Timur
Сделайте две переменные
Timur
С точкой и без точки
Timur
Для сравнения удобнее с точкой юзать
Alexander
Да, думал, но ведь есть jinja. )
Timur
Можно использовать встроенные инструменты
Timur
Если latest_version будет с точкой, то сравнение будет элементарно
Alexander
Если latest_version будет с точкой, то сравнение будет элементарно
Я понимаю. Но в этом же плейбуке, я использую эту переменную для формирования product_id MSI, где этой точки нет.
Alexander
В общем, replace же должен идеально подойти, разве нет?
Timur
when: exe_version.win_file_version.file_version is version(latest_version, '<')
Timur
Это если latest_version с точкой
Timur
Для других тасков лучше используйте другую переменную без точки, полученную тем же replace
Timur
Без точки обычное сравнение работать нормально не будет во многих случаях
Timur
Например, если версия типа 0.4.7
Alexander
Ок, я понимаю, спасибо. ) Сейчас покручу еще немного.
Ivan
Привет! А 405 проверку как лечить? По тексту ему надо retry, а по-факту хочет ещё until и register https://github.com/ansible/ansible-lint/blob/master/lib/ansiblelint/rules/PackageHasRetryRule.py
Timur
Привет! А 405 проверку как лечить? По тексту ему надо retry, а по-факту хочет ещё until и register https://github.com/ansible/ansible-lint/blob/master/lib/ansiblelint/rules/PackageHasRetryRule.py
Нужно делать вот так: - name: "Install requirements" package: name: "{{ requirements }}" state: "present" register: requirements_status retries: 10 delay: 2 until: requirements_status is success become: True
Timur
retries и delay - опциональны
Timur
Если их не указывать, ансибл возьмет дефолтные значения
Oleg
как-то можно у модуля yum выставить таймаут?
Timur
Таймаут для чего?
Oleg
похоже для таска, потому что для модуля нет опций
Timur
Для таска можно сделать retry until
Timur
Вот прямо как выше указано
Oleg
оказалось что в юме прописан репо, для которого нет доступа с хоста. при этом попытка скачать с него метаданные - висит бесконечно(может есть таймаут но я недолжался за полчаса)
Timur
Но проблему отсутствия доступа они не решат, конечно
Timur
Просто позволят оборвать задачу по истечение указанного периода ожидания
Evgeny
привет, а может кто подсказать, для работы docker_container модуля на удаленной машине нужно ставить docker-py (pip)?
Timur
привет, а может кто подсказать, для работы docker_container модуля на удаленной машине нужно ставить docker-py (pip)?
The below requirements are needed on the host that executes this module. python >= 2.6 docker-py >= 1.7.0 Docker API >= 1.20
Timur
Надо объявление, что ли повесить
Evgeny
да, я это видел) просто мне казалось ansible через ssh все делать должен
Timur
Читаю за вас документацию. Дорого
Evgeny
а тут немного странно что что-то нужно доставлять на сервер
Timur
да, я это видел) просто мне казалось ansible через ssh все делать должен
Через ssh просто запускаются определенные скрипты
Timur
Обычно на питоне
Evgeny
но ведь на remote машине должен быть docker, и все через него можно получать
Timur
И некоторые скрипты написаны так, что требуют определенных питоновских библиотек
Timur
Все логично
Timur
И использует вызовы соответствующих библиотек, а не прямое общение с докером из консоли
Evgeny
но большинство модулей работают и так, а ведь они все на питоне
Timur
Некоторым хватает стандартных питоновских библиотек
Timur
И не все модули на питоне, кстати
Timur
Модули вообще на любом языке можно писать
Evgeny
спасибо, тогда почитаю про это подробнее
Timur
Можно написать питоновский модуль для докера, который не требует дополнительных библиотек. Но тогда в нем придется реализовывать весь инструментарий, который уже реализован в этих библиотеках
Timur
Проще использовать уже готовые библиотеки, заточенные под целевую задачу
Evgeny
согласен что проще, но тут придется везде еще помимо docker ставить дополнительный модуль.. что не всегда возможно
Timur