如何将ansible vault密码作为额外的var传递?

How to pass ansible vault password as an extra var?

我有能力使用另一种机制(Azure 管道秘密功能)加密变量,所以我想在那里(在 Azure 管道中)保存一个 ansible-vault 密码,并将其作为额外的 var 传递给 playbook 执行。

请问可以这样做吗?

我期待 what/how 的一个例子是

ansible-playbook --extra-vars "vault-password=${pipelinevariable}"

Vault 密码不能作为额外的变量传递。有几种方法可以提供它,这些都包含在文档中:

基本上你的选择是:

  • 以交互方式提供 --ask-vault-pass 选项
  • 通过以下任一方式从文件(静态或可执行文件)中读取它:
    1. 在命令行上提供 --vault-password-file /path/to/vault 选项
    2. 设置 ANSIBLE_VAULT_PASSWORD_FILE 环境变量(例如 export ANSIBLE_VAULT_PASSWORD_FILE=/path/to/vault)。

在上述文档中还有很多东西需要学习,尤其是如何使用带有 id 的多个保管库密码,如何使用客户端脚本从密钥库中检索密码...

May I know if it can be done so?

不熟悉 Ansible Vault,但根据 Zeitounator.

分享的文档,你至少有两个方向

1.Use a CMD task 首先创建一个包含纯文本内容的保险库密码文件。 (不确定是否可以通过这种方式创建 vault-password-file,可能行不通。)

(echo $(SecretVariableName)>xxx.txt)

然后你可以使用新创建的xxx.txt文件作为ansible-playbook --vault-password-file /path/to/my/xxx.txt xxx.yml的输入。

2.Create 在 运行 管道之前相应的 vault-password-file,将其添加到版本控制中。 (您当前管道的相同源回购)

然后您可以在 vault-password-file 可用时轻松使用 ansible-playbook --vault-password-file。您还可以将密码文件存储在私有 github 存储库中,通过 git clone https://{userName}:{userPassword}@github.com/xxx/{RepoName}.git 获取存储库,将所需的密码文件复制到您通过 运行 ansible-playbook 命令通过 [=18] 的目录=].无论是否支持 direction 1,此方向都应该有效。

虽然这没有使用额外的变量,但我相信它可以满足您的要求:

Optional/one-time:询问密码并将其设置为环境变量:

read -s ansible_vault_pass && export ansible_vault_pass

现在在您的 ansible 命令中使用该变量:

ansible-playbook your-playbook.yml --vault-password-file <(cat <<<"$ansible_vault_pass")

<(cat <<<"") 技术的来源和解释在另一个 Whosebug 答案中: