mcollective库存脚本

时间:2016-10-08 14:54:36

标签: ruby yaml puppet mcollective

我创建了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

非常感谢任何帮助。

1 个答案:

答案 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时代码错误的原因。