Как передать атрибуты в chef-client без файла JSON?

Я знаю, что мы можем передать атрибуты node в chef- {client/solo} с флагом -json-attributes (-j). Этот флаг всегда ожидает ввода JSON файла. Является ли их любым методом я могу напрямую передавать атрибуты как объекты JSON.

Я пытался это сделать. Например,

chef-client -j {"attr":"value"} 

Но это заканчивается сообщением об ошибке как:

FATAL: I cannot find {"attr":"value"}

Поскольку он ожидает файл JSON. Мне нужно передать объекты JSON, как в нашем env. Я не могу создать json файл. Я не хочу использовать файлы атрибутов/роли/среды. Есть ли другой способ передать атрибуты?

Ответ 1

Вы пытались подключить JSON к STDIN?

echo '{"attr":"value"}' | chef-client -j /dev/stdin

Ответ 2

Это работало:

knife ssh $VM -- chef-client -j '<(echo {\"attr\":\"value\"})'

но в последнее время начал печалиться. не знаю, почему.

FATAL: Could not parse the provided JSON file (/dev/fd/63): 
Top level JSON object must be a Hash or Array. (actual: NilClass)

... Несмотря на то, что это выглядит правильно:

knife ssh -m 192.168.1.1 -- cat '<(echo {\"attr\":\"value\"})'
192.168.1.1 {"attr":"value"}

YMMV