Использование переменной из одного файла 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
в ваших ролях / книгах игр, как и раньше, не беспокоясь о том, чтобы извлечь его из нужного места.