【发布时间】:2017-12-04 15:13:17
【问题描述】:
上下文
在我的公司,我们有一个共享存储库,其中包含用于服务器的 ansible 脚本。我想在不久的将来引入保险库变量来处理服务密码。目前,我们在剧本的开头使用加密的密码提示。这个解决方案很烦人(它在某些剧本上要求 3 个密码)。
需要
由于我们的大多数 ansible 用户都不是专家,我希望他们能够顺利运行 playbook。这意味着ansible-playbook 命令应该很短,并且可以在没有任何强制参数的情况下工作(例如,没有--ask-sudo-pass 等等)。这也意味着我更喜欢仅在需要时才在剧本开头提示输入保险库密码。
此外,我不想使用 ansible 密码文件,因为它不容易共享,而且我不喜欢在我们所有的 ansible 用户计算机上都有一个明文密码文件的想法。
问题
为每个相关的剧本添加--ask-vault-pass 不是一种选择。我们的 ansible 用户不会理解为什么有时需要这个参数,而有时又不需要。相反,为每个 playbook 询问 vault 密码是一种负担,因为我们有很多 playbook,而且每次都要求 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 配置为仅在需要时询问保险库密码(意思是:每次遇到保险库加密变量时)?甚至可能吗?如果不是,考虑到我的情况,什么解决方法是可行的?
谢谢。
【问题讨论】:
标签: ansible ansible-2.x