Gui*_*Don 6 ansible ansible-2.x
语境
\n\n在我的公司,我们有一个共享存储库,其中包含服务器的 ansible 脚本。我想在不久的将来引入保管库变量来处理服务密码。目前,我们在剧本的开头使用加密的密码提示。这个解决方案很烦人(在某些剧本上它要求输入 3 个密码)。
\n\n需要
\n\n由于我们大多数 ansible 用户都不是专家,我希望他们能够顺利运行 playbook。这意味着ansible-playbook命令应该简短并且无需任何强制参数(例如 no--ask-sudo-pass等)即可工作。这也意味着我更喜欢仅在需要 \xe2\x80\x99s 时才在剧本开头提示输入保管库密码。\n此外,我不想使用 ansible 密码文件,因为它不容易共享,而且我不\xe2 \x80\x99t 喜欢在我们所有 ansible 用户计算机上拥有明文密码文件的想法。
问题
\n\n为每个相关的剧本添加--ask-vault-pass并不是一种选择。我们的ansible用户不会理解为什么有时需要这个参数,为什么有时不需要\xe2\x80\x99。相反,询问每个剧本的保管库密码是一种负担,因为我们有很多剧本,并且每次都已经询问了 sudo 密码。
我尝试使用prompts各种选项来实现以下解决方案。似乎什么都不起作用。文档没有解释如何执行此操作:
最好的解决方案(据我所知)
\n\n让\xe2\x80\x99s看看这个main.yml文件:
- import_tasks: foo.yml\n tags: always\n\n- import_tasks: bar.yml\n tags: bar\n\n# Only this tasks uses a vault encrypted variable\n- import_tasks: baz.yml\n tags: [baz, vault]\nRun Code Online (Sandbox Code Playgroud)\n\n现在,有\xe2\x80\x99s a playbook.yml,导入该main.yml文件。
在一个完美的世界里,我希望这样的事情发生:
\n\n示例1:
\n\nansible-playbook -i prod playbook.yml\n\nVault password:\nRun Code Online (Sandbox Code Playgroud)\n\n示例2:
\n\nansible-playbook -i prod playbook.yml --tags baz\n\nVault password:\nRun Code Online (Sandbox Code Playgroud)\n\n示例3:
\n\nansible-playbook -i prod playbook.yml --tags foo\n\n# it runs without asking for vault password, because no tasks needing vault\n# password will be run\nRun Code Online (Sandbox Code Playgroud)\n\n问题
\n\n如何配置 ansible 仅在需要时才询问保管库密码(意思是:每次遇到保管库加密变量时)?有可能吗?如果没有,考虑到我的情况,什么解决方法是可行的?
\n\n谢谢。
\n我找到了一个解决方法。
\n\n这个想法是始终加载所有密码(包括sudo从 ansibleVault 文件加载所有密码(包括),只需要每个剧本的Vault密码。这意味着所有计算机都应该具有相同的部署者用户密码。这比以前更简单,因为有一个主密码(保管库密码)来控制所有这些。
这是\xe2\x80\x99s 的完成方式:
\n\nansible.cfg:
[privilege_escalation]\nbecome_ask_pass = False\nbecome = True\n\n[defaults]\nask_vault_pass = True\nRun Code Online (Sandbox Code Playgroud)\n\nvars/vault/环境:
_vault:\n sudo: !vault |\n $ANSIBLE_VAULT;1.1;AES256\n BLAHBLAHBLAH\n another_pass: !vault |\n $ANSIBLE_VAULT;1.1;AES256\n ANOTHERENCRYPTEDPASSWORD\nRun Code Online (Sandbox Code Playgroud)\n\n对于每个剧本:
\n\n# Playbook stuff\n# [...]\n\nvars:\n ansible_become_pass: "{{ _vault.sudo }}"\nvars_files:\n # env var is set dynamically in inventory file, so I can have different password per env.\n # If the file is not found, it loads an empty null file\n - [ "vars/vault/{{ env }}", "vars/null"]\n\n# [...] Loading other var files\nRun Code Online (Sandbox Code Playgroud)\n\n现在,一个简单的操作ansible-playbook -i env/prod myPlayBook.yml只会询问保管库密码,不会提示输入 sudo 或其他任何内容。它\xe2\x80\x99一致且易于共享(只需共享加密的密码文件和保管库密码)。
| 归档时间: |
|
| 查看次数: |
6102 次 |
| 最近记录: |