背景
在我们公司中,我们有一个共享的仓库,包含了我们服务器的ansible脚本。我希望在不久的将来引入vault变量来处理服务密码。目前,我们在playbooks的开头使用加密的密码提示。这个解决方案非常繁琐(有些playbooks需要输入3次密码)。
需求
由于大部分ansible用户都不是专家,我希望他们能够顺利地运行playbooks。这意味着ansible-playbook
命令应该简洁,并且不需要任何必填参数(例如不需要--ask-sudo-pass
等)。同时,只有在需要的时候才会提示输入vault密码。
此外,我不想使用ansible密码文件,因为它难以共享,而且我不喜欢在所有ansible用户的计算机上都有一个明文密码文件的想法。
问题
对于每个相关的playbook都添加--ask-vault-pass
选项并不可取。我们的ansible用户将无法理解为什么有时需要这个参数,有时不需要。相反,为每个playbook都要求vault密码是一种负担,因为我们有很多playbooks,每次都已经要求sudo密码。
我尝试使用prompts
和各种选项来实现以下解决方案。但是似乎没有任何可行的方法。文档也没有说明如何做到这一点:
最佳解决方案(在我看来)
让我们看看这个main.yml
文件:
- import_tasks: foo.yml
tags: always
- import_tasks: bar.yml
tags: bar
# Only this tasks uses a vault encrypted variable
- import_tasks: baz.yml
tags: [baz, vault]
现在有一个名为`playbook.yml`的文件,导入了`main.yml`文件。
理想情况下,我希望发生以下情况:
示例1:
ansible-playbook -i prod playbook.yml
Vault password:
范例2:
ansible-playbook -i prod playbook.yml --tags baz
Vault password:
例子3:
ansible-playbook -i prod playbook.yml --tags foo
# it runs without asking for vault password, because no tasks needing vault
# password will be run
问题
如何配置ansible,使其仅在需要时(即每次遇到保险库加密变量时)才要求输入vault密码?这是否可能?如果不可能,鉴于我的情况,有哪些解决方法可行?
谢谢。