Использование атрибутов в Chef Solo JSON
Вопрос
Можно ли указать значения атрибутов в JSON Chef Solo?У меня есть файл Solo.json со списком выполнения, и я хотел бы указать там атрибуты.Документация Chef, похоже, указывает на то, что я могу сделать что-то вроде:
{
"hostname": {
"test": "value2"
},
"default_attributes": {
"hostname": {
"test": "value3"
}
},
"override_attributes": {
"hostname": {
"test": "value4"
}
},
"default": {
"hostname": {
"test": "value5"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
Однако всякий раз, когда я пытаюсь получить доступ к значению в моем рецепте:
p node['hostname']['test']
Я просто получаю значение, определенное в атрибутах/default.rb, и если я не определяю его там, я получаю обратно нулевое значение.
Есть ли способ ссылаться на эти значения?
Решение
Единственным уровнем атрибутов, которые вы можете хранить в данных узла, является normal
, все остальное сбрасывается в начале конверге и восстановлена из ролей, сред и кулинарных книг.Вы хотите что-то вроде выглядеть так:
{
"normal": {
"hostname": {
"test": "something"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
. Другие советы
Я попытался использовать приведенный выше пример для настройки атрибутов в файле JSON для chef-solo, и "normal": {...}
блок был полностью проигнорирован.Список выполнения был прочитан, но атрибуты, похоже, никогда не работают.
Моя команда такова:
chef-solo -c /path/to/config_file.rb -j /path/to/file.json
Мой файл JSON:
{
"name": "my_json_file",
"description": "JSON run-list and attributes.",
"normal": {
"my_cookbook": {
"git_branch": "staging"
}
},
"run_list": [
"recipe[my_cookbook::recipe1]",
"recipe[my_cookbook::recipe2]",
]
}
Во время конвергенции Chef сразу вернулся к значениям по умолчанию внутри attributes/default.rb
.Правильно ли вводятся значения JSON?До сих пор моим единственным обходным путем было создание нового рецепта для каждого "git_branch":
атрибут, который я хочу протестировать с помощью chef-solo и добавить этот обновленный список выполнения в другой файл JSON.По сути, копирование всего рецепта для изменения одного node.normal['my_cookbook']['git_branch']
ценность.Излишне говорить, что это не должно быть решением проблемы.
Использование Chef 14.0.202
Следовать за:
Если не устанавливать уровень приоритета атрибута внутри файла JSON с помощью Chef Solo, это работает.JSON должен выглядеть примерно так:
{
"name": "my_json_file",
"description": "JSON run-list and attributes.",
"my_cookbook": {
"git_branch": "staging"
},
"run_list": [
"recipe[my_cookbook::recipe1]",
"recipe[my_cookbook::recipe2]",
]
}
Не включая "normal": {...}
или "default_attributes": {...}
, и т. д. передадут атрибуты для использования Chef-Solo.