我正在使用jinja2模板在ansible中创建一个配置文件,用于不同的部署环境。为此,我有一个每个环境的yaml文件,看起来像这样:
Serverip: 127.0.0.1
Login:
Username: Rudolf
Password: rudolfssecret
现在,对于某些环境,我想将某些变量放入保管库并使用命令行工具(如this one)提取它们。
这可以通过从Vault获取值并以某种方式将它们与变量File组合来完成。但是这样,seceret变量将从变量File中完全删除。看到文件的Somone可能认为这些变量缺失或不存在。
我更喜欢这样的事情:
Serverip: 127.0.0.1
Login:
Username: Rudolf
Password: {{shell: keepass-cli extract-value -f keepassfile -name Password}}
因此,当ansible从文件加载变量时,它会使用shell命令的输出填充该值。
这可能吗?
答案 0 :(得分:0)
您可以参考Playbook Best Practices – Variables and Vaults。
...创建两个名为
vars
和vault
的文件。在vars
文件内,定义所需的所有变量,包括任何敏感变量。接下来,将所有敏感变量复制到vault
文件,并使用vault_
为这些变量添加前缀。您应该调整vars
文件中的变量以指向匹配的vault_
变量,并确保vault
文件是加密的。
如果您更喜欢外部密码管理工具而不是保险库,您仍然可以遵循此建议 在您的情况下,定义vars文件如下:
Serverip: 127.0.0.1
Login:
Username: Rudolf
Password: "{{ encrypted_password }}"
在Playbook执行期间,请确保从您的密码管理工具中提取encrypted_password
。