【问题标题】:Python: can I use variables and simple expression in yaml configuration file with the help of Ansible?Python:我可以在 Ansible 的帮助下在 yaml 配置文件中使用变量和简单表达式吗?
【发布时间】:2017-12-11 18:42:52
【问题描述】:

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

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


更新:

理想情况下,我想将 Ansible 的剧本功能用作库。像这里描述的东西:http://oriolrius.cat/blog/2015/01/21/using-ansible-like-library-programming-in-python/ 但我无法让它工作,好像指令已经过时了。

【问题讨论】:

标签: python ansible yaml


【解决方案1】:

Ansible 支持使用 Jinja 模板。您可以在任何类型的文件中设置变量并远程发送,具体取决于您的需要。

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

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

作为您发送的示例,您可以使用jinja math

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

【讨论】:

  • 我可以使用 Ansible 作为库来获取配置吗?
  • 嗨丽贝卡,我已经更新了我的帖子。希望现在更清楚了。我只想从我的 python 程序中使用剧本功能(yaml 中的变量和数学表达式)。
  • Alex,有一个用于 ansible 的 python API,你可能想试一试:docs.ansible.com/ansible/latest/dev_guide/developing_api.html
【解决方案2】:

我终于想出了如何去做。我只需要使用 jinja2 库而不是尝试使用 Ansible 作为库。 (Ansible 的剧本功能只是 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}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2016-11-19
    相关资源
    最近更新 更多