Aleksey
Sergey
По идее всё необходимое должно быть известно где-то на стадии vars_plugin-а.
Sergey
Aleksey
вопрос наверное как его продолжить
Elenhil
Ivan
Elenhil
Elenhil
Или добавляй в каждый сервис создание конфига клнсултемплейта
Elenhil
И самому темплейту укажи фолдер
Timur
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
привет
Vladimir
Sergey
Anonymous
Anonymous
Сенкью вери матч ))))))И дай бог вам здоровья богатырского )))
Sergey
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
Подгрузить - это одно, но ты же хочешь получить переменные? У этого класса есть метод, который умеет возвращать нужную тебе переменную.
Alexandr
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
Точнее почему то подгружаются не все файлы с переменными
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 для всей, полной строки аргументов?
Alexandr
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}
Всё.
Aleksey
Sergey
👍
Aleksey
только у тя какой то sysconfig.
Aleksey
хз чо это (нет)
Sergey
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
первый с минусом второй без. ибо необязательный параметр