我创建了mCollective库存脚本如下,
def formatting(users_ids)
YAML.load(File.open(users_ids))
end
inventory do
format "%st%st"
fields { [facts["hostname"], formatting(facts["users_ids"]) ] }
end
这里users_ids因子在服务器上是yaml格式的。因此,当我为这个因子进行库存时,我需要将该yaml格式解析为散列。但是当我运行这个脚本得到以下错误,
[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]#
不确定我是否缺少一些东西来解析输出。奇怪的是,它也不打印主机名。
服务器上的因子输出如下所示,来自facts.yaml
users_ids: |-
---
root: 0
test1: 503
testuser: 2033
任何帮助都将非常感激。
根据错误消息,您传递给users_ids
的参数不是一个有效的文件名。
def formatting(users_ids)
YAML.load(File.open(users_ids))
end
不知何故,您的代码将---
作为该方法的参数传递。这可能是由于解析和加载yaml的API调用和yaml文件本身的组合。考虑将API调用更改为cleaner:
def formatting(users_ids)
YAML.load_file(users_ids)
end
,我认为你真的想要一个散列在你的yaml,而不是一个数组的键值对与---
的元素,所以你的yaml应该真的是:
users_ids:
root: 0
test1: 503
testuser: 2033
,这也会删除---
,这通常表示yaml的开始,也似乎是你的代码在你试图加载yaml的方式上出错。