2014-12-19 4 views
9

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

$ tree 
├── deploy-home-secure.yml 
├── deploy-home.yml 
├── group_vars 
│   ├── home 
│   │   └── unvaulted 
│   └── home-secure 
│    ├── unvaulted 
│    └── vaulted 
├── hosts 
└── roles 
    ├── home 
    │   └── tasks 
    │    └── main.yaml 
    └── home-secure 
     └── tasks 
      └── main.yaml 

$ ansible-playbook --version 
ansible-playbook 1.8.2 
    configured module search path = None 

$ ansible-playbook -i hosts deploy-home.yml 
ERROR: A vault password must be specified to decrypt vaulttest/group_vars/home-secure/vaulted 

$ ansible-playbook --vault-password-file=/dev/null -i hosts deploy-home.yml 
ERROR: Decryption failed 
+0

Я подозреваю, что Ansible необходимо прочитать все в 'group_vars', чтобы убедиться, что он ничего не пропустил. Если это так, то почему бы не переместить ваши зашифрованные проигрыватели в отдельный «безопасный» каталог _? – Mxx

+1

@Mxx «чтобы убедиться, что он ничего не пропустит» - я бы надеялся, что нормальное неопределенное предупреждение переменной заступится - если мы не сможем расшифровать, то эти переменные будут недоступны. – Shepmaster

+0

@Mxx «переместите ваши зашифрованные книги» - я не уверен, что я следую. Это файлы 'group_vars', которые сводчатые, и они должны быть в структуре относительно файла hosts, как я понимаю. Я бы не захотел дублировать мой файл hosts для каждого сводчатого файла с другим паролем. – Shepmaster

ответ

10

У меня есть что-то вроде этого, чтобы решить такого рода проблемы (у меня не было разные роли, но разные хозяева, но я думаю, что применяется тот же принцип):

Это упрощенная структура файла:

group_vars 
    development_vars 
    staging_vars 
vaulted_vars 
    production_vars 

Это позволяет развернуть разработку или постановку без анзибль просит вас расшифровать production_vars.

А потом, производство пьес выглядит следующим образом:

hosts: production 
roles: 
    - role... 
vars_files: 
    - vaulted_vars/production_vars 

vars_files линия, где можно указать путь к сводчатым вар является ключевым.

5

Ansible попытается загрузить файл group_vars для любой группы, с которой он сталкивается в вашем инвентаре. Если вы разделили файл инвентаря (хосты) на один для домашней группы, а другой для безопасности дома, то он не будет пытаться расшифровать вары, которые не предполагается.

$ ansible-playbook -i hosts-home deploy-home.yml 

$ ansible-playbook --ask-vault-password -i hosts-home-secure deploy-home-secure.yml 
2

Вот еще один вариант, если вам не всегда нужны ваши сводчатые переменные.

Вы можете иметь структуру папок, как это:

group_vars 
├── all 
├── prod 
├── dev 
│ └── vars.yml 
└── dev-vault 
    └── vault.yml 

Вы магазин сводчатые переменные в «-vault» вариант этого ресурса.

Тогда ваши запасы может быть что-то вроде следующего:

Dev:

[servers] 
dev.bla.bla 


[dev:children] 
servers 

DEV-хранилище:

[servers] 
dev.bla.bla 


[dev:children] 
servers 

[dev-vault:children] 
servers 

Так вы только сохранение конфиденциальных данных в dev- vault vars, если в большинстве случаев вам действительно не нужны пароли и т. д. вы можете запускать проигрыватели без дополнительных опций, которые вы на самом деле не используете, или хранения пароля хранилища в виде открытого текста для удобства ENCE и т.д.

Так команда «нормальный» может быть:

ansible-playbook -i dev some.yml 

И «сводчатые» команда может быть:

ansible-playbook -i dev-vault some.yml --extra-vars="use_vault=true" 

Или вы могли бы управлять «включают в себя хранилища переменных» через tagging, в том числе some.yml в some-vault.yml и т. д.