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