Скрипт 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

Здесь facter 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

Любая помощь приветствуется.

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.

Другие вопросы по тегам