Андрей
а если я буду регистрировать выхлоп docker_container_info то я же должен указать какой именно контейнер меня интересует? то есть container:v1 а не container правильно?
inqfen
Тебе надо name указать
inqfen
Этот модуль показывает info по конкретному контейнеру
inqfen
https://docs.ansible.com/ansible/latest/modules/docker_host_info_module.html А вот здесь можно получить список контейнеров на машине
inqfen
Но твою логику все-таки лучше покрыть модулем своим. Программирование на питоне куда лучше программирования на ансибле
Андрей
согласен
Андрей
я ж так понимаю, что лучше всего пользоваться этим https://pypi.org/project/docker/
Андрей
?
Андрей
и еще такой вопрос, как вы считаете если просто делать так docker ps --filter name=container* --filter status=running -aq | xargs docker stopчерез shell Плохой вариант?
Андрей
))
Андрей
спасибо, ребята, за ответы если вдруг кто позже прочитает и будет что добавить, буду благодарен
Aleksey
Приветствую. Есть задача в зависимости от входных данных выполнять playbook на разных хостах. Как это кошерно сделать? Я что-то слышал про delegate. Это оно?
Aleksey
Т.е. у меня задача получается запускать playbook с разными inventory
Aleksey
Не плейбук, а плей, конечно же
Андрей
docker swarm
сворм не хочу, спасибо) оно сейчас на компоузе работает. я просто начитался в докер группе советов деплоить через ансибл и решил прикинуть как это будет
Aleksey
Приветствую. Есть задача в зависимости от входных данных выполнять playbook на разных хостах. Как это кошерно сделать? Я что-то слышал про delegate. Это оно?
Меня смущает, что я не вижу возможности для delegate_to использовать другой протокол кроме ssh. Мне нужен winrm
Anton
ребят, а как в плейбуке указать просмотр status сервиса?
Oleg
ребят, а как в плейбуке указать просмотр status сервиса?
https://docs.ansible.com/ansible/latest/modules/service_facts_module.html
Aleksey
Насколько нормально вместо delegate_to для winrm использовать вот такую конструкцию: https://pastebin.com/hAHwZaT0 а потом в роли указывать hosts для необходимых тасков?
Aleksey
Коллеги, кто-то может объяснить почему в таком плейбуке: https://pastebin.com/mH1H2iWu возникает следующая ошибка: ERROR! The 'add_host' module bypasses the host loop, which is currently not supported in the free strategy and would instead execute for every host in the inventory list. The error appears to be in '/tmp/awx_1145_h35qt1tm/project/create_os_access_groups.yml': line 10, column 7, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: dsc_modules: ['xActiveDirectory', 'xDnsServer'] - add_host: ^ here Я не понимаю о чем говорит ошибка
Aleksey
Английским же по серому - strategy: free несовместима с add_host.
Спасибо. Про стратегии пропустил документацию
Sergey
Спасибо. Про стратегии пропустил документацию
Я не лазил в доку, у тебя в сообщении об ошибке всё написано :-)
Aleksey
Я не читал про стратегии и не понял про что ошибка
Aleksey
А, может, просто уже туплю
Alex
подскажите, а как проще всего в json файле произвести замену по регулярному выражению? Что то lineinfile не работает как хочется
Alex
[ { "description": "Some description. INST-123", "log": "report/123.txt" } ], [ { "description": "Some description. INST-456”, "log": "report/456.txt" } ] надо заменить все INST-123/456 на ссылки т.е получить что то типа "description": "Some description. <a href='{{ url }}'>INST-123</a>"
Alex
пробовал такой таск lineinfile: backrefs: yes path: test.json regexp: '(.+)(INST-[0-9]{1,7})(.+)' line: '\1<a href=example.com/\2>\2</a>\3' state: present но замена происходит только в одной позиции, а не во всем файле
Anton
пробовал такой таск lineinfile: backrefs: yes path: test.json regexp: '(.+)(INST-[0-9]{1,7})(.+)' line: '\1<a href=example.com/\2>\2</a>\3' state: present но замена происходит только в одной позиции, а не во всем файле
А не проще первым шагом считать файл, вторым исправить, третьим записать обратно? Ну или смотреть что-то более подходящее. lineinfile меняет строку целиком и только одну!
Ivan
shell/command или есть что то более ансибловое?
https://docs.ansible.com/ansible/latest/modules/replace_module.html ?
Alex
да. вопрос снят
Maz
Any Python/Redis pro around? I have a bunch of records fetched from mysql using joins. I want to store this data in a redis cache. Which is the most efficient way to do this?
Maz
Try to ask in some Redis-specific channel, that's totally offtopic here
Any link to any Redis channel? I'd really appreciate it. Been stuck at this for a while.
citius
Any link to any Redis channel? I'd really appreciate it. Been stuck at this for a while.
sorry, dont know one. may be try here? https://www.reddit.com/r/redis/
Balagur
Всем привет! А можно как-то указать каталог в котором будут темплейты и писать их в такую же структуру файлов?
Balagur
Чтобы каждый файл темплейта не описывать
Oleg
https://docs.ansible.com/ansible/latest/modules/template_module.html roles/YOUR_ROLE_NAME/tasks/ тут таски roles/YOUR_ROLE_NAME/templates/ тут файлики-шаблончиик - name: task name template: src: somefile.j2 dest: /target/somefile ну еще можно опредеить им всем template_path
Ivan
Коллеги, а есть ли возможность создать инвентарь таким образом, чтобы если плейбука по нему будет запущена без указания лимита он выдавал бы пустой результат, а если с лимитом - то брал бы нужное. планируем тут некоторое количество деструктивных операций с заранее сгенеренным инвентарем и очень хочется какую-то "защиту от дурака"
George
https://stackoverflow.com/questions/44855892/how-to-get-value-of-limit-argument-inside-an-ansible-playbook
George
просто проверь, что переменная != null
Ivan
те только на уровне плейбука?
Sergey
Скорее даже - плагин, т.к. интерфейс с модулями всё же сильно ограничен.
George
<nil>
ну вы поняли идею
Ivan
Странное (что-то в процессах сломано). Но вообще здесь был бы уместен вполне плагин/модуль, который бы проверял наполнение инвентаря и cli-параметры.
Процесс заключается в том что есть много-много серверов с которыми однократно надо сделать вещи, которые удобно автоматизировать ансиблом. речь об идемпотентности не идет
Sergey
Тогда плагин - твой выбор. иначе ты вступаешь в тёмную зону "программирования на Ansible"/
Ivan
эх. понимаю, что глупая затея, но была надежда как-то сделать инвентарь в котором хосты доступны по именам, но не попадают в all. Понимаю, что скорее всего это из серии "вы не должны этого хотеть" но это бы прям решило задачу
inqfen
<nil>
None же, тут вам не этот ваш го
Sergey
ну, разок можно было бы и напрограммить какой-то костыль =)
Ну если только ты потом уволиться собрался :-)))) А в остальных случаях лучше сделать чуть более надёжное решение.
Tadeusz
None же, тут вам не этот ваш го
ваш... ненавижу его программистов) это просто минутка боли была
inqfen
Можно в hosts переменную передавать, а не на all запускать
inqfen
Соответственно, если она пустая - то не запустится ни на какую группу
inqfen
Костыль, но работать будет
Ivan
Соответственно, если она пустая - то не запустится ни на какую группу
да не, если в плейбуках будет проверка на ansible_limit и аборт если оно пустое - меня устроит. надо только с коллегами это организационно решить, но организационные вещи - они самые сложные, не поглядеть и накодить-то что угодно могут
Aleksey
Привет, у меня в плейбуке несколько плеев: --- - hosts: localhost strategy: linear tasks: - set_fact: dc: '{{ dns_domain.split(".") | lower }}' - add_host: name: rb-pshost1.sts.rus.contoso groups: pshost when: dns_domain == 'sts.rus.contoso' - add_host: name: rb-pshost1.bank.rus.contoso groups: pshost when: dns_domain == 'bank.rus.contoso' - hosts: pshost roles: - role: create_os_access_group Вот в роли create_os_access_group не получается обратиться к списку dc Как переменную сделать видимой в нескольких плеях? По идее должен register помочь. Что-то типа такого: - '{{ dns_domain.split(".") | lower }}' register: dc Только я не понимаю как это правильно записать - нужен же какой-то модуль
Tony
привет Плей из пока двух тасок 1) Первая таска получает вм-ку из сферы и провайдит айпишник. Машинка Winddows Server 2016 2) Дальше я хочу уже на запроивиженной машинке делать всякое (например поправить hosts) Почитал как подключаться к виндовс машинкам, в базовом образе вроде уже настроено и winrm слушает порт и работает https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html Они пишут что нужно задефайнить след переменные в host_vars: ansible_user: LocalUsername ansible_password: Password ansible_connection: winrm ansible_winrm_transport: basic Но я вижу проблему здесь, так как в инвентори этих машин быть не может заранее, а значит и прописывать что-то для хостов/групп теряется смысл Машины будут создаваться в процессе Тут пример того что я делаю - https://pastebin.com/5CXiKPMF Вопрос в том как мне попасть за вновь запровиженную машинку Windows правильно ? Куда писать эти параметры ? Или вообще нужно делать по другому, например не через   winrm etc
Sergey
привет Плей из пока двух тасок 1) Первая таска получает вм-ку из сферы и провайдит айпишник. Машинка Winddows Server 2016 2) Дальше я хочу уже на запроивиженной машинке делать всякое (например поправить hosts) Почитал как подключаться к виндовс машинкам, в базовом образе вроде уже настроено и winrm слушает порт и работает https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html Они пишут что нужно задефайнить след переменные в host_vars: ansible_user: LocalUsername ansible_password: Password ansible_connection: winrm ansible_winrm_transport: basic Но я вижу проблему здесь, так как в инвентори этих машин быть не может заранее, а значит и прописывать что-то для хостов/групп теряется смысл Машины будут создаваться в процессе Тут пример того что я делаю - https://pastebin.com/5CXiKPMF Вопрос в том как мне попасть за вновь запровиженную машинку Windows правильно ? Куда писать эти параметры ? Или вообще нужно делать по другому, например не через   winrm etc
Пропиши для группы, а вновь напиленный хост кидай в группу. В след. плее, который должен крутить эту машинку по всякому, напскай ансибл на группу.
Aleksey
привет Плей из пока двух тасок 1) Первая таска получает вм-ку из сферы и провайдит айпишник. Машинка Winddows Server 2016 2) Дальше я хочу уже на запроивиженной машинке делать всякое (например поправить hosts) Почитал как подключаться к виндовс машинкам, в базовом образе вроде уже настроено и winrm слушает порт и работает https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html Они пишут что нужно задефайнить след переменные в host_vars: ansible_user: LocalUsername ansible_password: Password ansible_connection: winrm ansible_winrm_transport: basic Но я вижу проблему здесь, так как в инвентори этих машин быть не может заранее, а значит и прописывать что-то для хостов/групп теряется смысл Машины будут создаваться в процессе Тут пример того что я делаю - https://pastebin.com/5CXiKPMF Вопрос в том как мне попасть за вновь запровиженную машинку Windows правильно ? Куда писать эти параметры ? Или вообще нужно делать по другому, например не через   winrm etc
add_host - тоже может тебе помочь
Gunnery
дайте совет, пожалуйста, где бы поискать инфу по ключевым (зарезервированным) словам ансибла (или может в джиндже такое есть)? или про что-то очень похожее тут не нашел нужной инфы https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html
inqfen
Есть то, что ты скинул, есть магические переменные
Gunnery
увы, но спасибо, я и это изучу
inqfen
Это не зарезервированные слова, но они имеют какое-то значение менять которое случайным образом не нужно
Gunnery
вот например, в чужой роли есть set_fact: members: "{{item}}:{{brick_root}}/brick {{members}} " в members попадают лишние хосты, которые хоть каким-то боком причастны к роли?
Gunnery
и members ни в этой роли, ни в переменных не присутствует
inqfen
В чужой роли всякая фигня может быть
inqfen
Поэтому код надо комментировать