繁体   English   中英

如何在 ansible 自定义模块中加载 yaml 文件

[英]How load a yaml file inside an ansible custom module

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

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

注意ansible本身具有ansible.parsing.utils.yaml.from_yaml它不是由模块使用。

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

这是一个很好的问题。 这听起来确实很有趣,你会期待一个简单的答案,但据我所知,这些都是事实。

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

如果您查看源代码,它所做的就是import yaml as _yaml ,您可以在自定义模块中import yaml as _yaml完成。 我的理解是这是使用 PyYAML,记录在此处 (如果我错了,有人纠正我!我不完全理解该文件中的注释,说明“更喜欢 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM