【问题标题】:mcollective inventory scriptmcollective 库存脚本
【发布时间】:2017-02-17 10:20:34
【问题描述】:

我创建了如下的 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]#

不确定是否遗漏了一些东西来解析输出。奇怪的是它也没有打印主机名。

facter 输出在服务器上的以下来自facts.yaml

  users_ids: |-
    ---
      root: 0
      test1: 503
      testuser: 2033

任何帮助将不胜感激。

【问题讨论】:

  • 已经有一个用于 mcollective 库存的 rpc 插件。您如何尝试使用 mcollective 执行此脚本?
  • 这里是命令mco inventory --script <inventory-script-name> -I <servername>
  • 好的,它是库存 rpc 插件的一个插件。明白了。
  • 您应该编辑帖子,删除非必要的无关内容,如“任何帮助将不胜感激”,并包含一个关于编程的疑问句(“有人可以帮忙吗?”将是一个关于人的能力,而不是编程。大多数可以用是/否来回答的问题都是不合适的。)。

标签: ruby yaml puppet mcollective


【解决方案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 的方式上出错的原因。

【讨论】:

  • 谢谢!但我先创建哈希,然后使用 .to_yaml 将该哈希转换为 yaml。你能告诉我如何以你所说的格式在 yaml 中创建哈希。
  • @Karthick 你能提供你正在做的代码吗?
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
相关资源
最近更新 更多