在ansible / jinja2变量文件中将变量设置为命令输出

时间:2016-10-19 12:17:31

标签: ansible jinja2

我正在使用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命令的输出填充该值。

这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以参考Playbook Best Practices – Variables and Vaults

  

...创建两个名为varsvault的文件。在vars文件内,定义所需的所有变量,包括任何敏感变量。接下来,将所有敏感变量复制到vault文件,并使用vault_为这些变量添加前缀。您应该调整vars文件中的变量以指向匹配的vault_变量,并确保vault文件是加密的。

如果您更喜欢外部密码管理工具而不是保险库,您仍然可以遵循此建议 在您的情况下,定义vars文件如下:

Serverip: 127.0.0.1
Login:
  Username: Rudolf
  Password: "{{ encrypted_password }}"

在Playbook执行期间,请确保从您的密码管理工具中提取encrypted_password