Alex
А как он узнает, нужно ли запускать? Правильно - запросив статус.
а еще такой вопрос, можно ли как то получить какой то вменяемый вывод выполнения модуля? Пробовал как описано тут - https://docs.ansible.com/ansible/latest/dev_guide/debugging.html Сделал explode, затем execute, но макс что получил # python /home/ansible/.ansible/tmp/ansible-tmp-1582630194.6973748-229376296014033/AnsiballZ_service.py execute {"invocation": {"module_args": {"name": "xray", "pattern": null, "enabled": null, "state": "started", "sleep": null, "arguments": "", "runlevel": "default"}}, "state": "started", "changed": true, "name": "xray"}
Alex
Какую задачу ты решаешь? Напиши уже нормальный юнит-файл, да и дело с концом.
задача дебаг модуля, в идеале хотелось бы иметь возможность получить список шел команд, которые модуль вызывает
Alex
потому что иногда возникают ситуации - когда в ручном режиме все работает, а через ансибл не работает и/или работает не так. Например в данном случае человек не будет запускать status, а сразу выполнит start.
UglyKoyote
смотря какой человек
UglyKoyote
и статус глядеть надо, и джоурнла, и логи. иначе не понять почему ансибл так себя ведет
Alex
да, тоже могут быть вариации
UglyKoyote
я настрадался запуская сервисы-копии
Alex
но конкретно в моей проблеме оно не поможет, ибо ситуации настолько тонкая )))
UglyKoyote
пока не понял как в ручную это делать, не мог ансибл заставить
Alex
status под капотом запускает rabbitmqctl status, а тот в свою очередь создает файл с куками, если его нет и вот тут начинаются отличия и затем qa говорит - а у меня локально все работает )))
Sergey
Ну как так - "локально работает"? Плейбук либо работает, либо нет.
UglyKoyote
локально - руками юзера
UglyKoyote
тут же надо понимать, что ансибл работает не как юзер, не в терминальной сессии
UglyKoyote
и это как минимум может повлиять
Alex
когда qa делает все по инструкции, как описано в документации
UglyKoyote
к примеру про кривой юнит файл - "криво" подтягиваются переменные
UglyKoyote
ансибл про это не знает, и в результате факап. так что изучай юнит файл
Alex
1. Установите продукт rpm -ivh ... 2. Запустите сервис service XXX start 3. Проверьте доступность сервиса ...
Alex
тут же надо понимать, что ансибл работает не как юзер, не в терминальной сессии
это понятно, мы максимально приближаем его работу, но всегда есть свои нюансы
Sergey
Alex
5. Напишите плейбук. 6. Не знайте, как он работает. 7. Страдайте.
Не вариант, клиент не будет разбираться в ансибл, чтобы поставить продукт ;)
Sergey
Если клиент не будет разбираться в ансибле, то и в отдельной установке кролика - тем более.
Sergey
Так, к слову.
Sergey
(у меня есть плейбук с кроликом в репе)
Alex
вы же не будете предлагать клиентам установливать, например, java под windows через ансибл. Если ваш продукт использует сабж
Sergey
Я? Нет. Я соберу установщик на NSIS, и здесь это - оффтоп. Ты сразу сказал бы, что винду пячишь.
Alex
(у меня есть плейбук с кроликом в репе)
нее, тут кролик builtin уже идет, так что отпадает сразу. Просто для меня было неожиданностью, что rabbitmqctl status генерит куки файл
Alex
А как он узнает, нужно ли запускать? Правильно - запросив статус.
я правильно понимаю, что в случае с systemd status не вызывается вообще, а состояние сервисов определяется через systemctl show SRV_NAME?
Alex
https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/system/service.py#L555
Sergey
Здесь - да.
Anatoliy
Добрый день. подскажите как правильно в рамках одного плейбука решить задачу развертывания виртуальной машины, скажем в hetzner или amazon, с последующей ее настройкой
Anatoliy
-e cloud_provider=AWS/HETZNER и в зависимости от значения подключать нужный таск/роль
тут классическая проблема "курица/яйцо", поскольку создание машины должно выполнятся от локалхоста, а дальнейшая работа уже с самой машиной т.е. либо грубо в плейбуке назначать ansible_ssh_host, либо делать как-то иначе. Если сюда добавить возможные ограничения —list при запуске плейбука, то становится вообще весело есть какие-то гайды на эту тему?
Alex
> тут классическая проблема "курица/яйцо", поскольку создание машины должно выполнятся от локалхоста, а дальнейшая работа уже с самой машиной и в чем проблема?
Alex
я делал через memory_inventory, но не знаю насколько это ансибл вей
Anatoliy
хотелось единую точку входа
NM
хотелось единую точку входа
Ты прямо как я в кубере чате сегодня 😉
Артём
хотелось единую точку входа
Их же можно оба инклудить в один плей, который и будет той единой точкой.
Lev
29-31 марта в Gothenburg, Sweden в рамках https://foss-north.se/2020/ пройдет 8ой Ansible Contributor Summit • Ansible Contributors Summit: вс 29.03 • Ansible Hackathon: пн и вт 30-31.03 • FOSS-North: пн и вт 30-31.03 Matrix Chat: freenode_#ansible-community:matrix.org Freenode IRC: #ansible-community Video: Etherpad Темы: • General updates • Data analysis of the Issue and PR Backlog • Ansible Collections (a large part of the morning) • Testing (Improving coverage, ansible-test, Molecule) • OpenShift / Kubernetes / Operator SDK and Ansible • Various breakouts in the afternoon, or your choosing • You can find the topics for all of the above linked from the main Etherpad. Как учавствовать: • Attending in-person, get your FREE ticket • Attending virtually, add yourself to the list of Virtual Attendees • Add your thoughts, ideas, and questions to the Breakout Agenda • Vote on what you'd like to be discussed (ie add +yourname) Домашнее чтиво: • Docs: Ansible Collections Overview • Docs: Using Ansible Collections • Docs: Developing Ansible Collections • Blog: Thoughts on restructuring the Ansible Project
Anatoliy
да, можно, а потом кто-нибудь выполнит -l monitoring для несуществующего хоста и весь деплой vm не отработает
Артём
да, можно, а потом кто-нибудь выполнит -l monitoring для несуществующего хоста и весь деплой vm не отработает
Ок. Тогда, осознавая, что вы делаете странное, можно использовать delegate_to. - hosts: host1 gather_facts: true tasks: - name: local dbg command: hostname -f - name: global dbg command: hostname -f delegate_to: host2.dc ansible-playbook test.yml -vD -l host1 TASK [local dbg] *************************************************************************************************************************************************************************************** Tuesday 25 February 2020 18:38:18 +0300 (0:00:02.713) 0:00:02.968 ** changed: [host1.dc] => {"changed": true, "cmd": ["hostname", "-f"], "delta": "0:00:00.013374", "end": "2020-02-25 18:38:19.844802", "rc": 0, "start": "2020-02-25 18:38:19.831428", "stderr": "", "stderr_lines": [], "stdout": «host1.dc", "stdout_lines": [«host1.dc"]} TASK [global dbg] ************************************************************************************************************************************************************************************** Tuesday 25 February 2020 18:38:19 +0300 (0:00:01.451) 0:00:04.420 ** changed: [host1.dc -> host2.dc] => {"changed": true, "cmd": ["hostname", "-f"], "delta": "0:00:00.014622", "end": "2020-02-25 18:38:22.747417", "rc": 0, "start": "2020-02-25 18:38:22.732795", "stderr": "", "stderr_lines": [], "stdout": «host2.dc", "stdout_lines": [«host2.dc"]} PLAY RECAP ********************************************************************************************************************************************************************************************* host1.dc : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Anatoliy
Ок. Тогда, осознавая, что вы делаете странное, можно использовать delegate_to. - hosts: host1 gather_facts: true tasks: - name: local dbg command: hostname -f - name: global dbg command: hostname -f delegate_to: host2.dc ansible-playbook test.yml -vD -l host1 TASK [local dbg] *************************************************************************************************************************************************************************************** Tuesday 25 February 2020 18:38:18 +0300 (0:00:02.713) 0:00:02.968 ** changed: [host1.dc] => {"changed": true, "cmd": ["hostname", "-f"], "delta": "0:00:00.013374", "end": "2020-02-25 18:38:19.844802", "rc": 0, "start": "2020-02-25 18:38:19.831428", "stderr": "", "stderr_lines": [], "stdout": «host1.dc", "stdout_lines": [«host1.dc"]} TASK [global dbg] ************************************************************************************************************************************************************************************** Tuesday 25 February 2020 18:38:19 +0300 (0:00:01.451) 0:00:04.420 ** changed: [host1.dc -> host2.dc] => {"changed": true, "cmd": ["hostname", "-f"], "delta": "0:00:00.014622", "end": "2020-02-25 18:38:22.747417", "rc": 0, "start": "2020-02-25 18:38:22.732795", "stderr": "", "stderr_lines": [], "stdout": «host2.dc", "stdout_lines": [«host2.dc"]} PLAY RECAP ********************************************************************************************************************************************************************************************* host1.dc : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
большое спасибо :)
Alex
> Ок. Тогда, осознавая, что вы делаете странное, можно использовать delegate_to. и отгрести множество "глюков" с delegate_to ;)
Sergey
^^^ +++
Артём
Клиент хочет, чтобы «была единая точка входа» и «работало с лимитами» - и есть для этого решение. И даже дисклеймер есть. Но только сначала решение, а не сразу дисклеймер и ПНХ.
Stas
шалом, подскажите, задача казалось бы очень простая, но в то же время выходит довольно сложной на ансибле
Stas
есть ямлик на ремоут хосте, нужно вставить в него value
Stas
пробовал блокинфайл - говно, без смещения, регулярки работают крайне странно, маркер, который полностью не отключить
Stas
темплейт не работает на удаленном хосте, есть ли способ без костылей?
Alex
Свой модуль на питоне спасёт отца русской демократии
Div
темплейт не работает на удаленном хосте, есть ли способ без костылей?
Как вы ухитрились заставить тэмплейт не работать?
UglyKoyote
Он работает на локалхосте
Ну так и спрашивают - как Вы это сделать умудрились, мне тоже стало интересно
Div
Он работает там, где его вызывают
Stas
Уверены?
Div
100%
UglyKoyote
не, что Вы.. мы бредим) пытаемся Вас обмануть
Stas
Просто это копи
Stas
Но в одном случае это экшен модуль, а в другом экшен плагин
Stas
Одни выполняются на ремоут хосте, другие на локальном
UglyKoyote
https://docs.ansible.com/ansible/latest/modules/template_module.html template – Template a file out to a remote server
Stas
Хм, посмотрю еще раз
Stas
А, понял проблему
Stas
У меня темплейт на сервере
Stas
Тоесть src тоже на ремоуте
UglyKoyote
а.. Ты удаленно пытаешься переложить файл на сервере?
Stas
Он у меня в гите и репа клонится сразу удаленно