【问题标题】:How load a yaml file inside an ansible custom module如何在 ansible 自定义模块中加载 yaml 文件
【发布时间】:2020-06-13 03:40:29
【问题描述】:

我有一个ansible 自定义模块,它有一个YAML 格式的配置文件。 现在的问题是我应该如何在模块中加载 YAML 文件?

注意据我了解,我不能简单地使用 PyYAML 之类的东西,因为 ansible 将在它正在配置的节点上运行我的模块,并且可能该系统没有 PyYAML已安装。

注意另外ansible 本身也有ansible.parsing.utils.yaml.from_yaml 它不能被模块使用。

听起来很有趣,我不知道如何在自定义ansible 模块中加载YAML 文件。请帮忙

【问题讨论】:

  • 您找到解决方案了吗?

标签: ansible yaml ansible-module


【解决方案1】:

这是一个很好的问题。听起来确实很有趣,您希望得到一个简单的答案,但据我所知,这些都是事实。

ansible 最新的开发分支有/lib/ansible/module_utils/common/yaml.py 可以被模块使用,因为它在module_utils 之下。见here

如果您查看源代码,它所做的就是import yaml as _yaml,您可以在自定义模块中自己完成。我的理解是这是使用 PyYAML,记录在 here。 (如果我错了,请有人纠正我!我不完全理解该文件中说明“首选 YAML 编译的 C 扩展...”的注释)

无论如何,如果您的目标机器没有 PyYAML,您可以随时添加任务以确保其存在。例如

- name: Install PyYAML python package
  pip:
    name: pyyaml

然后在你自己的模块中使用它:

from yaml import load, dump
try:
    from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
    from yaml import Loader, Dumper

# ...

data = load(stream, Loader=Loader)

# ...

output = dump(data, Dumper=Dumper)

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多