свои VPS'ки.
Нашел пару ролей под эту тему: geerlingguy.node_exporter и cloudalchemy.node_exporter.
Мой ямлик, как пример:
---
- name: Install node_exporter
hosts: local
vars_files:
- "{{ inventory_dir }}/vars/vars.yaml"
become: true
roles:
- role: geerlingguy.node_exporter
Как видите, я храню переменные по пути {{ inventory_dir }}/vars/vars.yaml. Файл зашифрован и при запуске любого плейбука расшифровывается с помощью пароля в .vault_password.txt, так что переменные точно доступны любой таске в любом плейбуке.
Но есть проблема: в обоих ролях, отмеченных выше, выходит ошибка на одном и том же (у обоих ролей) этапе чтения чего-то с Гитхаба:
TASK [geerlingguy.node_exporter : Configure latest version] **************************************
task path: /home/<SOME USER>/.ansible/roles/geerlingguy.node_exporter/tasks/main.yml:8
Read vars_file '{{ inventory_dir }}/vars/vars.yaml'
included: /home/<SOME USER>/.ansible/roles/geerlingguy.node_exporter/tasks/config-version.yaml for <SOME IP ADDRESS>
skipping vars_file '{{ inventory_dir }}/vars/vars.yaml' due to an undefined variable
Read vars_file '{{ inventory_dir }}/vars/vars.yaml'
skipping vars_file '{{ inventory_dir }}/vars/vars.yaml' due to an undefined variable
TASK [geerlingguy.node_exporter : Determine latest GitHub release (local)] ***********************
task path: /home/<SOME USER>/.ansible/roles/geerlingguy.node_exporter/tasks/config-version.yaml:2
fatal: [<SOME IP ADDRESS> -> localhost]: FAILED! => {
"msg": "'root_password' is undefined"
}
или
TASK [cloudalchemy.node_exporter : Get checksum list from github] **************************************
task path: /home/kenyawest/.ansible/roles/cloudalchemy.node_exporter/tasks/preflight.yml:99
fatal: [192.168.31.203 -> localhost]: FAILED! => {
"msg": "'root_password' is undefined"
}
Зашел, блин, в этот preflight.yml, на который ссылается ошибка:
- block:
- name: Get checksum list from github
set_fact:
_checksums: "{{ lookup('url', 'https://github.com/prometheus/node_exporter/releases/download/v' + node_exporter_version + '/sha256sums.txt', wantlist=True) | list }}"
run_once: true
- name: "Get checksum for {{ go_arch }} architecture"
set_fact:
node_exporter_checksum: "{{ item.split(' ')[0] }}"
with_items: "{{ _checksums }}"
when:
- "('linux-' + go_arch + '.tar.gz') in item"
delegate_to: localhost
when: node_exporter_binary_local_dir | length == 0
и что, где там использование переменной root_password??? Она вообще-то у меня определена! И зачем она понадобилась этой роли тогда?
В чём вообще проблема?
Если что, issue создал.
Лучше в плэйбуке использовать переменную, значение которой определять из vault encrypted file. Ну и убедитесь что пароль от vault вы передаёте каким-то образом в плейбук.
Вроде бы у меня всё как вы сказали. Переменные в vars.yaml (это видно из первого отрывка кода), зашифрованные. Расшифровываются из .vault_password.txt при запуске любого плейбука. Продебажил - переменная root_password, которая у меня в vars.yaml объявлена, которая действительно есть во время выполнения плейбука и которая почему-то так нужна ролям geerlingguy.node_exporter и cloudalchemy.node_exporter, действительно существует, но почему внутрь ролей не прокидывается. -vvv не помогает. Собственно, логи из моего сообщения выше сделаны из тройного вербоза.
А зачем вообще переменная root_password? в роли она не используется и это не "волшебная" переменная. Сделайте минимальный тестовый пример развертывания на тестовый хост. Возможно на упрощённом примере старнет понятнее где проблема. Да и показать ваш vars.yml будет не жалко тогда. Да там и не должно быть ничего роль минимум парамтетров обрабатывает.
Она используется в hosts.ini в поле become_pass
Ок, соображу тестовый репо позже
Обсуждают сегодня