保险柜密码
首先,您应该熟悉保管库密码文件可以是可执行脚本的事实。在这种情况下,Ansible执行它,并期望接收密码作为其输出。
例如,您可以使用gpg-agent
或keychain
存储您的实际密码,并在需要时将其解锁。在此博客文章中了解更多信息:https : //benincosa.com/?p=3235
如果您有点偏执,可以在调用密码脚本时添加通知,如下所示:
#!/bin/bash
PARENT_PROCESS=$(ps -p $PPID -o args | tail -n 1)
osascript -e "display notification \"Vault password used by ${PARENT_PROCESS}\" with title \"Ansible\" sound name \"default\""
gpg --batch --use-agent --no-tty --decrypt key.gpg 2>/dev/null
该文件库密码脚本key.gpg
用作实际文件库密钥,并且在使用脚本时还显示带有父进程名称的弹出通知(对于MacOS)。Gpg代理会缓存解锁密码一段时间,因此无需每次启动Playbook时都输入密码。
只需设置vault_password_file = ./vault_pass.sh
您的ansible.cfg
。
环境
您说您azure_rm.py
用作动态清单脚本。这意味着您必须在启动ansible-playbook之前将凭据设置到环境变量中,以便它能够使用它们。
您可以制作两个文件:
secure_env
(使用保管库加密):
export AZURE_SECRET=xxx;export AZURE_SUBSCRIPTION_ID=xxx;
set_env
(纯文本):
echo -n "Setting secure vars... "
eval $(ansible-vault view secure_env)
echo "done."
打开新终端以执行自动化任务时,必须运行:
source set_env
此时,bash会评估set_env
和secure_env
(通过ansible-vault解密)。执行此命令后,您已为当前shell定义了Azure凭据,因此您可以照常执行剧本:
ansible-playbook provision-my-azure-instances.yml
因此,使用此两种方法,你可以存储key.gpg
和secure_env
在你的仓库; 然后在新的终端呼叫中,source set_env
一次输入gpg密码(以解锁将来对key.gpg的使用);然后ansible-playbook
在没有密码的情况下拨打任意次数的电话。