ansible - 如何在 ansible 自定义模块中加载 yaml 文件
问题描述
我有一个ansible
自定义模块,它有一个YAML
格式的配置文件。现在的问题是我应该如何YAML
在模块中加载该文件?
注意据我所知,我不能简单地使用类似的东西,PyYAML
因为ansible
将在它正在配置的节点上运行我的模块,并且可能没有PyYAML
安装该系统。
注意它ansible
本身ansible.parsing.utils.yaml.from_yaml
也不能被模块使用。
听起来很有趣,我不知道如何在自定义模块中加载YAML
文件。ansible
请帮忙
解决方案
这是一个很好的问题。听起来确实很有趣,你会期待一个简单的答案,但据我所知,这些都是事实。
ansible 的最新开发分支有/lib/ansible/module_utils/common/yaml.py
它可以被模块使用,因为它在module_utils
. 看这里
如果您查看源代码,它所做的就是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)
推荐阅读
- scala - 如何在scala中并行获取多个天蓝色存储blob的内容
- r - 您可以在没有 if 语句的情况下跳过 for 循环中的计数吗
- reactjs - 在调用另一个函数之前,如何在 React 本机上下文文件中调用函数?
- excel - Excel公式帮助,指数
- google-apps-script - 例外:无法从此上下文中调用 SpreadsheetApp.getUi()。(第 1 行)
- javascript - React-JS 中 AppBar 中 IconButton 的位置
- json - Python3,从 API 访问 json 数组值 - IndexError:列表索引超出范围
- python - 基于上一行和下一行填充行
- python-3.x - 使用 python 加密证书生成器向证书添加任意/不推荐使用的扩展
- mysql - 使用 MAX(Date) 连接 MYSQL 表