2016-08-26 6 views
3

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

Возможно ли это?

Я сделал что-то подобное. Мои секреты:

cat /group_vars/all/vault_production.yml (encrypt with password A) 
production_password: 'test1' 

cat/group_vars/all/vault_staging.yml (encrypt with password B) 
staging_password: 'test2' 

Мои среды:

cat hosts-production 
[all:vars] 
env_type=production 

cat hosts-staging 
[all:vars] 
env_type=staging 

Мой сценарий:

- copy: 
    content: | 
    env PASS={{hostvars[inventory_hostname][env_type + '_password']}} 
    ... 

И я запускаю пьес, как это.

# for production 
ansible-playbook -i hosts-staging test.yml --vault-password-file .password_a 
# for staging 
ansible-playbook -i hosts-staging test.yml --vault-password-file .password_b 

Но это не работает, потому что есть два разных пароля (с ошибкой ERROR!). Знаете ли вы, как это сделать?

Спасибо.

BR,

Eric

+0

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

ответ

3

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

- hosts: localhost 
    vars_files: 
    - secretstuff-{{ env_type }}.yml 
    tasks: 
    ... 

или

- hosts: localhost 
    tasks: 
    - include_vars: secretstuff-{{ env_type }}.yml 
    ... 

в зависимости от того, если вам нужен ВАР, чтобы выжить в течение одной игры или весь пробег (последний будет привести их в качестве фактов вместо игры вары).

+0

Спасибо Мэтт. Но проблема все еще остается. С этим включением я не могу получить динамически переменную: Например: shell: echo {{hostvars [inventory_hostname] [env_type + '_sql_password]}} # не работает shell: echo {{staging_sql_password}} # is working – elhostis

+0

Hrm, это отлично работает для меня в текущих версиях: 'hostvars [inventory_hostname] [env_type + '_sql_password']' при использовании include_vars. Вопрос: если вы только загружаете тот или иной, почему бы просто не назвать его «sql_password» и не сделать с ним? – nitzmahone

+0

Whoo, вы полностью правы @Matt David. Это хорошо работает. Большое спасибо. Эрик – elhostis

Смежные вопросы