我创建了mCollective库存脚本,如下所示
def formatting(users_ids)
YAML.load(File.open(users_ids))
end
inventory do
format "%s\t%s\t"
fields { [facts["hostname"], formatting(facts["users_ids"]) ] }
end
这里的users_ids facter是服务器上的yaml格式。因此,当我为这个因素做清单时,我需要将该yaml格式解析为hash。但是,当我使用此脚本运行时遇到错误,
[root@mco-server]#
The inventory application failed to run, use -v for full error backtrace details: (eval):2:in `initialize': No such file or directory - ---
root: 0
test1: 503
testuser: 2033
[root@mco-server]#
不确定是否遗漏了要解析输出的内容。奇怪的是它还没有打印主机名。
facter输出位于服务器下面,来自facts.yaml
users_ids: |-
---
root: 0
test1: 503
testuser: 2033
非常感谢任何帮助。
答案 0 :(得分:1)
根据错误消息,您传递给users_ids
的参数不是有效的文件名。
def formatting(users_ids)
YAML.load(File.open(users_ids))
end
不知何故,您的代码将---
作为参数传递给该方法。这可能是由于您的API调用组合解析并加载yaml和yaml文件本身。考虑将API调用更改为清理程序:
def formatting(users_ids)
YAML.load_file(users_ids)
end
我觉得你真的想在你的yaml中使用哈希,而不是一个元素为---
的键值对数组,所以你的yaml应该是:
users_ids:
root: 0
test1: 503
testuser: 2033
还会删除通常表示yaml开头的---
,并且似乎也是您尝试加载yaml时代码错误的原因。