[英]How to store ansible_become_pass in a vault and how to use it?
[英]use ansible-vault to encrypt multiple files at once
我正在使用以下结构将我的host_vars
分成明文并加密
ansible
├── ansible.cfg
├── host_vars
│ ├── host1
│ │ ├── vars
│ │ └── vault
│ └── host2
│ ├── vars
│ └── vault
├── inventory
├── site.yaml
└── vars
└── ansible_vars.yaml
有没有办法,使用ansible-vault
加密两个名为vault
的文件,还是我必须一个一个地做?
只是问,因为还有更多,例如在group_vars
等的未来目录中。
我知道这行得通
ansible-vault encrypt host_vars/host1/vault host_vars/host2/vault
只是问是否有更优雅/快速的解决方案
shell 扩展提供了很多可能性。
在您的情况下,这里有两个很有趣:
*
扩展,用作通配符。 这意味着host_vars/*/vault
将匹配host_vars/host1/vault
和host_vars/host2/vault
但将来也匹配任何其他。host_vars/*/vault
将仅匹配一个文件夹级别(例如它不会匹配host_vars/level1/host1/vault
),但可以实现多个文件夹级别带有双星号(实际命名为globstar ): host_vars/**/vault
,将匹配host_vars/host1/vault
以及host_vars/level1/host1/vault
RedHat[1..5]
、 Ubuntu[1..5]
和Debian[1..5]
Ubuntu[1..5]
等发行版之后有主机名Debian[1..5]
,我只能通过host_vars/{Ubuntu*,RedHat*}/vault
定位 Debian 和 RedHat 的。host_vars/{Ubuntu{1..3},RedHat{1..3}}/vault
前三个,或者前三个都通过host_vars/*{1..3}/vault
作为一个更实际的例子,如果您通过 Ansible 处理 SE 并希望加密*.stackexchange.com
和stackoverflow.com
的文件,而不是superuser.com
或任何其他具有特定域名的问答,鉴于主机被命名为它们的 DNS 名称,你可以这样做
ansible-vault host_vars/{stackoverflow.com,*.stackexchange.com}/vault
我将输入我的快速超级简单的 shell 脚本,该脚本适用于我的简单用例。 当然可以改进,但我认为这是一个很好的起点。 您还可以通过--vault-password-file
参数使用机密文件。
#!/bin/sh
echo "Choose the option:"
echo "(d) Decrypt all Ansible vault files"
echo "(e) Encrypt all Ansible vault files"
read option
function decrypt {
ansible-vault decrypt --ask-vault-pass \
ansible/*/environments/development/group_vars/*/vault.yaml \
ansible/*/environments/development/host_vars/*/vault.yaml
}
function encrypt {
ansible-vault encrypt --ask-vault-pass \
ansible/*/environments/development/group_vars/*/vault.yaml \
ansible/*/environments/development/host_vars/*/vault.yaml
}
case $option in
d)
decrypt
;;
e)
encrypt
break
;;
esac
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.