Использование переменной из одного файла Ansible var во втором файле var

При использовании Ansible я пытаюсь использовать сводный файл vars для хранения личных переменных, а затем использую их в другом файле vars в той же роли. (Идея из "Псевдо-листового шифрования Vault" здесь.)

например, у меня есть один стандартный файл Vars, roles/myrole/vars/main.yml:

---
my_variable: '{{ my_variable_vaulted }}'

а затем тот, который зашифрован, roles/myrole/vars/vaulted_vars.yml:

---
my_variable_vaulted: 'SECRET!'

Но когда я запускаю книгу, я всегда получаю сообщение "ОШИБКА! ОШИБКА! My_variable_vaults" не определена ".

Я попробовал это без шифрования второго файла, чтобы убедиться, что это не проблема с шифрованием, и я получаю ту же ошибку.

2 ответа

Решение

Причина по которой my_variable_vaulted не был доступен, потому что я не включил файл переменной. Я предположил, что все файлы в роли vars/ каталог был подобран автоматически, но я думаю, что это только в случае с vars/main.yml,

Таким образом, чтобы сделать сводные переменные доступными для всех задач в роли, в roles/myrole/tasks/main.yml Я добавил это перед всеми задачами:

- include_vars: vars/vaulted_vars.yml

Это не лучший способ справиться с хранилищем в ANSIBLE. Гораздо лучший подход изложен в документации хранилища для ansible. Таким образом, вы бы создали свою базовую переменную для среды в group_vars/all.yml как это:

my_variable: {{ vault_my_variable }}

И тогда в вашем inventories/main Вы решаете, какие хосты должны загрузить какой файл хранилища, чтобы удовлетворить эту переменную. Например, вы можете иметь это в своем inventories/main:

[production:children]
myhost1

[development:children]
myhost2

[production_vault:children]
production

[development_vault:children]
development

Тогда ansible автоматически получит production_vault.yml или же development_vault.yml соответственно из group_vars в зависимости от того, к какой среде относится блок. И тогда вы можете использовать my_variable в ваших ролях / книгах игр, как и раньше, не беспокоясь о том, чтобы извлечь его из нужного места.

Другие вопросы по тегам