Python:我可以在Ansible的帮助下在yaml配置文件中使用变量和简单表达式吗?

时间:2017-12-11 18:42:52

标签: python ansible yaml

我的程序是用Python编写的,我的配置文件是yaml。 我想在我的yaml文件中使用变量和一些数学表达式。 (例如:$ var + $ offset)似乎Ansible支持两者,但我不熟悉Ansible,不确定我是否只能导入处理yaml配置的部分。任何帮助将不胜感激。

参考: Ansible - Can I use arithmetic when setting a variable value?

更新

理想情况下,我想将Ansible的playbook功能用作库。这里描述的东西:http://oriolrius.cat/blog/2015/01/21/using-ansible-like-library-programming-in-python/但我无法使其工作似乎说明已经过时了。

2 个答案:

答案 0 :(得分:6)

Ansible支持使用Jinja模板。您可以在任何类型的文件中设置变量,并根据您的需要将其发送到远程。

您可以使用Jinja语法({{variable}})引用YAML中的变量,更多信息here

如果您需要对所述变量执行其他操作,也可以使用templates

根据您发送的示例,您可以使用jinja math

vars:
  your_result: "{{ your_var + your_offset }}"

答案 1 :(得分:0)

最后我想出了怎么做。我只需要使用jinja2库而不是尝试将Ansible用作库。 (Ansible的playbook功能只是Jinja语法的一种实现)

感谢@Rebeca Maia,他通过提及Jinja来激励我。

这是一个代码示例 - python文件:

import os
from jinja2 import Environment, FileSystemLoader
import yaml

DIR_PATH = os.path.dirname(os.path.realpath(__file__))
env = Environment(loader=FileSystemLoader(DIR_PATH))
template = env.get_template("test_config.yaml")
c = template.render(name='John Doe', val=10)
# yaml :)
config_vals = yaml.load(c)
print config_vals

yaml文件

email: "python-test-user@hotmail.com"
user: {{name}}
age: {{10+val}}