Sergey
там так надо что бы они друг про друга знали. они не независимые
Ненуачо тогда фигачь суперпупергиперроль которая всё знает об окружении.
Sergey
Не. Вызвать же можно хоть пять раз.
Только это, кстати, императивность лютая.
Sergey
По идее всё необходимое должно быть известно где-то на стадии vars_plugin-а.
Aleksey
вопрос наверное как его продолжить
Ivan
А почему она прошла? Ты же управляешь порядком запуска ролей в плейбуке
ну, не только КХ надо конфиги темплейтить, есть ещё сервисы
Elenhil
Или добавляй в каждый сервис создание конфига клнсултемплейта
Elenhil
И самому темплейту укажи фолдер
Aleksey
Зачем вам роли вообще тогда?
этот чат никогда не испытывал недостатка патетики.
Anonymous
Ребята как пофиксать failed: [localhost] (item=k8s-2) => {"ansible_loop_var": "item", "changed": false, "item": "k8s-2", "msg": "The libvirt module is not importable. Check the requirements."}
Anonymous
привет
Anonymous
Сделай то, что тебе говорит msg.
Типо модуль доставить ?
Anonymous
Сделай то, что тебе говорит msg.
ansible-galaxy collection install community.libvirt
Sergey
Типо модуль доставить ?
Типо проверить зависимости модуля libvirt.
Anonymous
Сенкью вери матч ))))))И дай бог вам здоровья богатырского )))
Alexandr
Подскажите пожалуйста
Alexandr
https://docs.ansible.com/ansible/2.8/dev_guide/developing_api.html
Alexandr
как здесь play_source = dict( name = "Ansible Play", hosts = 'localhost', gather_facts = 'no', tasks = [ dict(action=dict(module='shell', args='ls'), register='shell_out'), dict(action=dict(module='debug', args=dict(msg='{{shell_out.stdout}}'))) ] ) можно подставить переменую из инвентори?
Sergey
https://docs.ansible.com/ansible/2.8/dev_guide/developing_api.html
https://github.com/ansible/ansible/blob/devel/lib/ansible/vars/manager.py#L146
Alexandr
https://github.com/ansible/ansible/blob/devel/lib/ansible/vars/manager.py#L146
а разве variable_manager = VariableManager(loader=loader, inventory=inventory) не должен был все подгрузить ? или обязательно get_vars еще делать?
Sergey
Подгрузить - это одно, но ты же хочешь получить переменные? У этого класса есть метод, который умеет возвращать нужную тебе переменную.
Alexandr
Подгрузить - это одно, но ты же хочешь получить переменные? У этого класса есть метод, который умеет возвращать нужную тебе переменную.
вот только не пойму теперь как вернуть переменую из дерева которая в group_vars .Например test.port.id
Alexandr
all_groups = inventory.get_groups_dict() test_node = all_groups['test_node'] for t in test_node: vars = variable_manager.get_vars(host=inventory.get_host(hostname=t)) for var in vars: print(var)
Alexandr
так выбирается то что в корне лежит
Alexandr
Точнее почему то подгружаются не все файлы с переменными
Sergey
Точнее почему то подгружаются не все файлы с переменными
Где-то раньше по коду ты должен был вызвать загрузку переменных для group_vars.
Aleksey
Меня заставляют использовать lineinfile. Чат помоги! - name: Add external-url to service parameter become: yes lineinfile: dest: /etc/default/prometheus line: '-web.external-url='{{ external_url }}'' insertafter: '^ARGS="' типа такого. но я сопротивляюсь. Не уверен что вопрос конкретно про ансибл. Мне надо в рантайме в скрипте который инициализирует шаблонную виртуалку (startup-script) подсунуть прометею внешний урл. его значение известно только после старта виртуалки и у меня есть способ его получить. после старта виртуалки запускается google-startup-scripts который и должен сделать работу. в скрипте копирование плейбука и запуск оного
Sergey
Это ужасно! А что является golden source для всей, полной строки аргументов?
Aleksey
Это ужасно! А что является golden source для всей, полной строки аргументов?
большая часть параметров описана в пакере. подсунуть надо только внешний урл. источник знаний про него это лейблы виртуалки
Sergey
Значит, вписать туда переменную, подставляемую из файла, к примеру, /etc/sysconfig/prometheus.
Aleksey
да это понятно. надо как то прокинуть дальше переменную. я попробовал так вот ARGS= " --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.listen-address=:9090 --web.route-prefix=/ --web.external-url=${EXTERNAL_URL} --storage.tsdb.retention.time=1d --log.format=json" #### BEGIN MANAGED WITH ANSIBLE ON VM STARTUP EXTERNAL_URL=https://xxx #### END MANAGED WITH ANSIBLE ON VM STARTUP но это ожидаемо не работает
Aleksey
- name: place environment file blockinfile: path: "{{ prometheus_env_file }}" marker: "#### {mark} MANAGED WITH ANSIBLE ON VM STARTUP" block: | EXTERNAL_URL={{external_url}} notify: - restart prometheus
Aleksey
ибо системд не интерполирует переменные
Magistr
на первый взгляд задачу динамического генерения конфигов решает консул-темплейт
Aleksey
дак что именно он тут должен сделать ? сгенерировать всю строку ? её часть ?
Magistr
консул может заполнить тепмплейт в данном случае юнит файл и передернуть сервис при изменении темплейта
Aleksey
это я знаю у меня есть похожий сервис.
Aleksey
но проблема в том что у консула нет и не будет знания о всех других парамтерах этой строки
Magistr
а у ансибла есть и опять только о части строки ?
Aleksey
да. только знание о параметре external_url
Magistr
еще мысль повторить алгоритм генерации в ансиболе
Aleksey
это как?
Magistr
ну что является источником тэгов для хоста ?
Aleksey
это тупиковый путь
Magistr
почему ?
Aleksey
тут требуется внешнее знание доступ к которому скажем не возможен
Aleksey
Короче видимо будет как то так сейчас так ExecStart=/opt/prometheus/current/prometheus $ARGS будет ExecStart=/opt/prometheus/current/prometheus $ARGS $RUNTIME_ARGS
Aleksey
а уже оные сложить в файл с дефолтами
Aleksey
через blockinfile
Sergey
ибо системд не интерполирует переменные
Не надо вот этого вот. Ты пишешь отдельный файл ансиблом (вот этой своей ролью): /etc/sysconfig/prometheus-external: MY_COOL_OPTION="--web.external-url=external_url" В prometheus.service: EnvironmentFIle=-/etc/systemd/prometheus-external ExecStart=blablalba ${ARGS} ${MY_COOL_OPTION} Всё.
Sergey
👍
Aleksey
только у тя какой то sysconfig.
Aleksey
хз чо это (нет)
Aleksey
EnvironmentFile был бы массивом можно было бы два файла указать ушел бы blockinfile
Sergey
Можно хоть четыре :-D
Sergey
Все сверху вниз подгрузятся.
Aleksey
запятая ?
Sergey
Зачем? Несколько директив.
Sergey
EnvironmentFile=-/etc/sysconfig/file1 EnvironmentFile=-/etc/sysconfig/file2 EnvironmentFile=-/etc/sysconfig/file3 EnvironmentFile=-/etc/sysconfig/file4
Sergey
Сухо и комфортно.
Sergey
Причём при их отсутствии ничего не ломается.
Aleksey
какая версия нужна ?
Sergey
Ну вообще-то в 219 уже работает
Aleksey
ага
Aleksey
крутяк # systemctl show prometheus | grep Env EnvironmentFiles=/etc/default/prometheus (ignore_errors=yes) EnvironmentFiles=/etc/default/prometheus-external (ignore_errors=no)
Aleksey
спасибо чад!
Sergey
Минусик перед именем файла позволяет не страдать при его отсутствии.
Aleksey
да да. я поэтому и указал что первый важен а второй можно нет.
Sergey
Он же у тебя без минуса?
Aleksey
первый с минусом второй без. ибо необязательный параметр