Timur
Так что либо указывайте путь по отношению к vars, либо полный абсолютный
Boris 🦍
И пути считают относительно этой папки
понял, спасиб, т.е надо чтоб плейбук определил себя к роли ? просто данный модуль я описываю в плейбуке, а не в таске самой роли
Boris 🦍
мне нужно чтоб переменные определеились до начала использования роли
Boris 🦍
- hosts: test_ovpn gather_facts: true become: true vars_files: - adm.yml tasks: - name: "Deploy openvpn admins" include_role: name: openvpn tags: - adm
Boris 🦍
т.е так тоже не работает
Boris 🦍
аааа.все. сорри.понял
Boris 🦍
перепутал директории vars и defaults
Boris 🦍
блин. спасибо
Oleg
привет. пытаюсь добавить пару файлов в .gitignore, после определенной секции: - name: gitignore lineinfile: path: /etc/.gitignore line: "{{ item }}" insertafter: "# end section managed by etckeeper" firstmatch: yes with_items: - "shadow" - "shadow-" но таск отрабатывает всегда а не только если нет этих файлов (дублирует записи). можно ли как-то уважать и insertafter и не дублировать записи?
Vladimir
Немного оффтопа! Может кто сталкивался с тем что гитлаб не может получить доступ к артефактам? Имею след. ошибку ERROR: Downloading artifacts from coordinator... error error=unexpected EOF id=9369 responseStatus=200 OK. Начал копать, но что-то гугл пока не помог.
Artëm
не получилось
Вот есть похожий случай https://stackoverflow.com/questions/53358089/ansible-lineinfile-duplication-using-insertafter
Vladimir
Oleg
ну пока обойдусь без всего этого insertafter. достаточно просто наличия строки.
Dok
Окей, я понял что копнул не туда. Короче, можете в двух словах объяснить, что надо указать в роли, чтобы определённая таска в роли выполнялась только для определённой группы серверов, указанной в hosts файле?
Denis 災 nobody
правильно определить группы?\
Denis 災 nobody
[host1] 1.1.1.1 [host2] 2.2.2.2 [web:children] host1 host2
Dok
Ну, они определены
Denis 災 nobody
и в буке пишем hosts: web
Dok
А в таске-то что указывать?
Denis 災 nobody
зачем? оно в буке уже описано
Dok
о_О
Denis 災 nobody
cat ping.yml --- - hosts: all vars_files: secret remote_user: root tasks: - name: ping all hosts ping:
Denis 災 nobody
ну вот простейшая таска
Denis 災 nobody
в корне прописан hosts куда можно вписать только нужные нам группы
Denis 災 nobody
и все таски для группы будут
Dok
То есть я не могу в плейбуке оставить только такую схему [ группа серверов] - [ применяемые роли ] вписав в саму роль кому что именно выполнять?
Denis 災 nobody
нет
Denis 災 nobody
точнее, с костылями есть варианты, но видимо вам нужен другой инструмент..
Dok
Ну, вариант писать все нюансы именно в плейбуке как раз кажется более костыльным
Denis 災 nobody
какого рода
Dok
какого рода
vars_files: secret
Denis 災 nobody
это файл с паролями
Dok
Тогда я совсем не понимаю, где начинается именно разбор моего вопроса
Denis 災 nobody
причём для дева и прода описано может быть одинаково, но в зависимости от окружения будут цепляться разные секреты
Denis 災 nobody
более того, всякие *_vars могут быть разные, а плэйбук один для всех
Timur
В некоторых случаях можно сделать delegate_to, но нужно понимать - для чего именно
Dok
Я перефразирую. Есть main.yml роли nginx, например. Там перечисляются общие для всех хостов таски, вроде установки самого nginx и прочего. Вот. Теперь задача. Надо в этот же файл добавить, например - apt: name=nginx-module-geoip и указать, чтобы он выполнялся только на серверах, которые присутствуют в группе frontends
Dok
Роль запускается на разных серверах, если сервер есть в группе frontends, ставится nginx-module-geoip, если сервер не присутствует в этой группе, таска с установкой nginx-module-geoip пропускается
Egor
😄
Dok
На пиво хватит
Egor
Я не пью, сорян. Но теги и проверка по группе хостов в помощь)
Dok
С тегами игрался, срабатывает в любом случае
Dok
В чём проверка по хостам заключается? Как реализовывается?
Denis 災 nobody
я такие варианты бы предложил 1) web [frontends:children] web и в общем случае запускаем плейбуку веб, в более частных фронтенд 2) роль nginx, роль frontend, в файле вызываем только нужные роли. Более мелкое дробление, больше плейбуков, но более правильный запуск
Denis 災 nobody
если нужен строго 1 бук то есть конечно group_names но это будет сложно поддерживать потом
Albert
если нужен строго 1 бук то есть конечно group_names но это будет сложно поддерживать потом
Согласен.. Но если кроме этого ничего не будут добавлять, не вижу проблем
Dok
when: 'my_group' in group_names
Спасибо! Это и нужно было, только ковычки ещё надо.
Denis 災 nobody
минус второго подхода - больше точек для правок
зато они более мелкие и атомарные
Denis 災 nobody
а тут будет лапшекод
Dok
А я вот сейчас дошёл до той степени атомарности, когда уже чувствуешь перебор
Denis 災 nobody
а если потом еще добавится что этот фронтенд только руби, этот только пхп, а на этом перл, питон, пхп и руби?
Denis 災 nobody
а этот бэкенд теперь еще и фронтенд
Dok
Отдельная виртуалка-фронтенд для страниц, отдельная виртуалка-фронтенд для статики. А если нужно, чтоб фронтенд ответил как-нить по особому, то proxy_pass на нужную виртуалку
Dok
Считаю, что фронт ничем, кроме проксирования и работой с http, работать не должен
Dok
В каком месте?
when: "'frontends' in group_names"
Albert
В роде не обязательно
Dok
Ругнулся
Timur
Типа, when: use_frontend_tasks
Timur
use_frontend_tasks установить в значение True для группы frontend в инвентаре
Timur
И запускать общую плейбуку на все группы
Timur
use_frontend_tasks в дефолтах роли должна быть False, разумеется
Timur
И все - никакой дополнительной магии не нужно
Timur
Даже привязки к именам групп
Timur
Просто добавить нужное значение параметра для нужных серверов в инвентаре