![](/img/trans.png)
[英]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.