Использование атрибутов в 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']

Я просто получаю значение, определенное в attribute/default.rb, и если я не определяю его там, я получаю обратно нулевое значение.

Есть ли способ сослаться на эти значения?


person Chris Worfolk    schedule 03.06.2014    source источник
comment
Более простой способ (по крайней мере, для меня) — создать поваренную книгу переопределений, в которой просто есть файл атрибутов со значениями node.override, а затем запустить chef-solo -c ~/.chef/solo.rb -j ~/.chef/solo.json -o my_overrides_cookbook,recipe[recipe_to_run], чтобы гарантировать, что он переопределяет ваши значения по умолчанию.   -  person Display Name is missing    schedule 03.06.2014


Ответы (3)


Единственный уровень атрибутов, который вы можете хранить в данных узла, — normal, все остальное сбрасывается в начале конвергенции и перестраивается из ролей, сред и кулинарных книг. Вы хотите что-то вроде выглядит так:

{
  "normal": {
    "hostname": {
      "test": "something"
    }
  },
  "run_list": [
    "recipe[hostname::default]"
  ]
}
person coderanger    schedule 20.06.2014

Следовать за:

Отсутствие установки уровня приоритета атрибута внутри файла 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.

person Pat D    schedule 02.07.2018
comment
Спасибо за подсказку. Для chef-solo, после удаления default_attributes: {...} из файла ролей, chef solo учитывает все атрибуты, которые были частью этого файла ролей. - person sjethvani; 31.07.2020

Я попытался использовать приведенный выше пример для установки атрибутов в файле 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']. Излишне говорить, что это не должно быть решением.

Использование шеф-повара 14.0.202

person Pat D    schedule 22.06.2018