Timur
Так что либо указывайте путь по отношению к vars, либо полный абсолютный
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 и не дублировать записи?
Artëm
Oleg
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
Sergey
Vladimir
Timur
Oleg
ну пока обойдусь без всего этого insertafter. достаточно просто наличия строки.
Dok
Dok
Окей, я понял что копнул не туда.
Короче, можете в двух словах объяснить, что надо указать в роли, чтобы определённая таска в роли выполнялась только для определённой группы серверов, указанной в hosts файле?
Denis 災 nobody
правильно определить группы?\
Dok
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
какого рода
Denis 災 nobody
это файл с паролями
Dok
Тогда я совсем не понимаю, где начинается именно разбор моего вопроса
Denis 災 nobody
причём для дева и прода описано может быть одинаково, но в зависимости от окружения будут цепляться разные секреты
Timur
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 пропускается
Dok
Egor
Egor
😄
Dok
На пиво хватит
Egor
Я не пью, сорян. Но теги и проверка по группе хостов в помощь)
Dok
С тегами игрался, срабатывает в любом случае
Dok
В чём проверка по хостам заключается?
Как реализовывается?
Albert
Denis 災 nobody
я такие варианты бы предложил
1) web
[frontends:children]
web
и в общем случае запускаем плейбуку веб, в более частных фронтенд
2) роль nginx, роль frontend, в файле вызываем только нужные роли. Более мелкое дробление, больше плейбуков, но более правильный запуск
Denis 災 nobody
если нужен строго 1 бук то есть конечно group_names но это будет сложно поддерживать потом
Albert
Dok
Denis 災 nobody
Denis 災 nobody
а тут будет лапшекод
Dok
А я вот сейчас дошёл до той степени атомарности, когда уже чувствуешь перебор
Denis 災 nobody
а если потом еще добавится что этот фронтенд только руби, этот только пхп, а на этом перл, питон, пхп и руби?
Denis 災 nobody
а этот бэкенд теперь еще и фронтенд
Dok
Dok
Отдельная виртуалка-фронтенд для страниц, отдельная виртуалка-фронтенд для статики. А если нужно, чтоб фронтенд ответил как-нить по особому, то proxy_pass на нужную виртуалку
Dok
Считаю, что фронт ничем, кроме проксирования и работой с http, работать не должен
Albert
Dok
В каком месте?
when: "'frontends' in group_names"
Albert
В роде не обязательно
Dok
Ругнулся
Timur
Timur
Типа, when: use_frontend_tasks
Timur
use_frontend_tasks установить в значение True для группы frontend в инвентаре
Timur
И запускать общую плейбуку на все группы
Timur
use_frontend_tasks в дефолтах роли должна быть False, разумеется
Timur
И все - никакой дополнительной магии не нужно
Timur
Даже привязки к именам групп
Timur
Просто добавить нужное значение параметра для нужных серверов в инвентаре
Dok
Dmitry