McOllective库存脚本



我创建了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的方式上出错。

最新更新