Denis 災 nobody
всё-таки сделаю через fetch+template
Dmitry
ну, сам вопрос выше.. есть шаблон, который выкачен пакетом, надо его модифицировать через ансибл.
ааа, это было рано, я видимо не дочитал 🙁 Но тот шаблон из пакета - нет гарантий что он будет таким же как мы ожидаем при обновлении версии... имхо это так себе идея.
Dmitry
я бы искал способ лочить его в репозитории и дал бы способ разрабам синхронизирвоать с апстрима
Dmitry
типа роль ansible со скриптом sync которая сливает его, и добавляет в git, тем самым, контроллируя стейт
Denis 災 nobody
ааа, это было рано, я видимо не дочитал 🙁 Но тот шаблон из пакета - нет гарантий что он будет таким же как мы ожидаем при обновлении версии... имхо это так себе идея.
ну переменные мы знаем какие есть и если нужно то сначала добавляем как-то в переменные. Просто добавили что-то в шаблон — оно само подхватится. Плюс есть случаи когда на сервере А пакет версии N+1 (совсем свежий, закинут в staging), на Б - N (стабильный прошлой версии, уже обкатанный), и С - с N-1 - резерв, на случай если после обновления Б были проблемы, перекинуть нагрузку.
Denis 災 nobody
бонусом если обновили пакет руками, а файл с шаблонами не затронут - ничего не сломается, просто настройки будут прошлой версии
Dmitry
откуда ансибл знает что в следующей версии шаблон не изменит именование перименных*
Denis 災 nobody
меняются они обычно раз в пару лет
Dmitry
src_one станет source_one
Denis 災 nobody
и если кто-то сделает такое то на стейжинге сразу отловится
Dmitry
ok, я просто не люблю стейт терять, мне кажется это сразу увеличивает риски. Здесь потеряли, там потеряли, и получилась реализация на баше
Denis 災 nobody
потом все обновления через дженкинс думаю зарулить
Dmitry
имхо, наиболее элегантное решение - докер, startup скрипт с jinja, все параметры через env.
Denis 災 nobody
каму нельзя в докер!
Dmitry
связь конфига, версии приложения и шаблона всегда в одном флаконе
Dmitry
каму нельзя в докер!
Ну тогда да) но интересно услышать почему
Dmitry
https://github.com/kamailio/kamailio-docker
Denis 災 nobody
Ну тогда да) но интересно услышать почему
у нас оно работало плохо под нагрузкой.
Denis 災 nobody
хотя может что-то починили..
Denis 災 nobody
https://github.com/kamailio/kamailio-docker
нуок, пилим свой докерфайл, где конфиги уже влиты, но - с шаблонными значениями. И опять - заполнять надо.
Dmitry
Значения приходят от разраба или от них приходят шаблоны?
Denis 災 nobody
я понял идею с подсовыванием гит репы к шаблонам, при том что там только 1-2 файла из десятка меняются, но не вижу каких-то особоых преимуществ, только невозможность держать 3 версии сразу. Или нужно вести базу тэгов, чтобы можно было всегда узнать тэги 3 последних коммитов/веток.
Dmitry
Разрабы вообще трогают шаблоны? хоть когда-то?
Dmitry
или их интересуют только значения переменных?
Denis 災 nobody
могут трогать настройки, при необходимости запросят какие переменные им надо взять, но всё-таки обычно только внутренние сущности меняются, то что шаблонизировано почти нет
Denis 災 nobody
зачем?
Dmitry
чтобы они эти параметры меняли в асинхронном режиме, и это не зависило бы от деплоя
Denis 災 nobody
там параметры типа на какие интерфейсы и айпи сесть
Dmitry
а как часто меняются параметры?
Denis 災 nobody
может еще сколько памяти можно занять
Dmitry
в масштабе всей инфры
Denis 災 nobody
айпи никогда, интерфейс - при смене дистра когда тот же системд введён
Denis 災 nobody
пусть будет раз в пару лет
Dmitry
ну ок, не менются, а устанавливаются
Dmitry
каждое обновление, как я понимаю, да?
Denis 災 nobody
нет, реже
Dmitry
я пытаюьс понять масштаб необходимости автоматизации
Denis 災 nobody
можно делать по старинке, как выше писал, хуже не будет
Dmitry
(например, мы часто хотим с бранча запустить полный клон, и это требует большей автоматизации при той же поддержке стейта)
Denis 災 nobody
предлагаю дальше в личку.
Dmitry
ok
Denis 災 nobody
Значения приходят от разраба или от них приходят шаблоны?
шаблоны, значения заполняются ансиблом
Dmitry
шаблоны, значения заполняются ансиблом
Это я понял. Не понятно кто диктует их? (В чьей зоне ответственности)
Denis 災 nobody
за работу камы, ее конфигов - только разраб для камы, а на мне выкатка этого добра
Vladislav 👻
Подскажите, как точечно (в рамках инвентори) подсунуть прокси для плейбука?
Vladislav 👻
что-то и так и сяк уже делал, но не взлетает
Vladislav 👻
что значит какой прокси для плейбука?
Vladislav 👻
обычный http прокси, чтобы машина могла в инет вылезти
Timur
Через энв не работает?
Timur
Как в доке описано
Timur
https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html
да, это я
Коллеги, всем привет ещё раз. Прошу помощи, бьюсь третий день. Имею таску, разворачивающую haproxy на 2 хоста. Затык в переменных. haproxy.conf.j2: https://pastebin.com/6MxPX6wH host_vars/host.yaml: https://pastebin.com/ybQsjaf7 Ответ Ansible: https://pastebin.com/mt6ekkdk Проблема явно в последнем блоке host.yaml и/или haproxy.conf.j2. Документацию обшарил, пробовал десятки вариантов синтаксиса, всё бестолку.
Dmitry
Коллеги, всем привет ещё раз. Прошу помощи, бьюсь третий день. Имею таску, разворачивающую haproxy на 2 хоста. Затык в переменных. haproxy.conf.j2: https://pastebin.com/6MxPX6wH host_vars/host.yaml: https://pastebin.com/ybQsjaf7 Ответ Ansible: https://pastebin.com/mt6ekkdk Проблема явно в последнем блоке host.yaml и/или haproxy.conf.j2. Документацию обшарил, пробовал десятки вариантов синтаксиса, всё бестолку.
Первое, что бросается в глаза - это у тебя и в for используется backend, и внутри объекта тоже backend. Не пробовал так делать, поэтому не знаю, может это ещё что-то ломает, но как минимум вызывать backend.name в таком случае нужно через backend.backend.name
да, это я
Первое, что бросается в глаза - это у тебя и в for используется backend, и внутри объекта тоже backend. Не пробовал так делать, поэтому не знаю, может это ещё что-то ломает, но как минимум вызывать backend.name в таком случае нужно через backend.backend.name
О, спасибо. То есть ты предлагаешь делать некий префикс в темплэйте? Но началось всё с того, что он запрашивал переменную check, которой вообще не было объявлено. Дичь какая-то.
Timur
Т.е. сделать вот так: haproxy_backend_servers: - name: rep-02 address: [redacted] check.port: 8080 weight: 1 - name: rep-03 address: [redacted]:8080 check.port: 8080 weight: 1
Vladislav 👻
https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html
не понятно, прописывал и так и сяк, но не работает... и опять таки, получается, надо все плейбуки/таски допилывать, типа определен ли прокси или нет?
Timur
Зачем все таски? Можно на уровне инвентори задать переменные окружения, в принципе
Vladislav 👻
proxy_env: http_proxy: http://proxy.bos.example.com:8080 https_proxy: http://proxy.bos.example.com:8080
Vladislav 👻
вот это не работает
да, это я
Коллеги @kemko @tgadiev большое спасибо, всё заработало. Добра!
Timur
А в плее вы env задали при этом?
Vladislav 👻
ну значит надо дописывать плейбук...
Vladislav 👻
и делать проверку везде 😭
Timur
Зачем?
Timur
environment: "{{ proxy_env }}"
Timur
Кто мешает добавить это в инвентори?
Vladislav 👻
хм, сейчас проверю, просто у нас DNS уронили 😬
Vladislav 👻
proxy_env: http_proxy: http://proxy.bos.example.com:8080 https_proxy: http://proxy.bos.example.com:8080
смогло через вот это и в плейбку у каждого степа прописал environment: "{{ proxy_env | default(omit) }}"
Timur
Странно
Timur
По идее, это на уровне плея должно работать
Vladislav 👻
сейчас еще буду тестировать
Vladislav 👻
нее, если в плейбуке не прописать environment то не работает
Warrax
подскажите, как в ansible в текстовый конфигурационный файл вставить короткое имя с хоста (hostname -s)? через какой модуль?