0

我创建了 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 因子是服务器上的 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

任何帮助将非常感激。

4

1 回答 1

1

根据错误消息,您传递给的参数users_ids不是有效的文件名。

def formatting(users_ids)
  YAML.load(File.open(users_ids))
end

不知何故,您的代码---作为参数传递给该方法。这可能是由于您解析和加载 yaml 的 API 调用和 yaml 文件本身的组合。考虑将 API 调用更改为清洁器:

def formatting(users_ids)
  YAML.load_file(users_ids)
end

而且我认为你真的想要你的 yaml 中的哈希而不是带有元素的键值对数组---,所以你的 yaml 应该是:

users_ids:
  root: 0
  test1: 503
  testuser: 2033

这也将删除---通常指示 yaml 开头的那个,并且似乎也是您的代码在您尝试加载 yaml 的方式上出错的地方。

于 2016-10-09T11:23:51.157 回答