В проекте, который использует шеф-сервер, мы используем следующие понятия:Обязательно ли chef_type для узла?
- узел
- роль
- среда
среда и роль JSON файлов выглядит отлично (они имеют chef_type
и json_class
):
ENV.json
{ "name": "ENV", "chef_type": "environment", "json_class": "Chef::Environment", ... "cookbook_versions": { ... } }
my_role.json
{ "name": "my_role", "chef_type": "role", "json_class": "Chef::Role", ... "run_list": [ "role[my_role]", "recipe[my_recipe]" ] }
но узел выглядит так (не chef_type
, не json_class
):
my.machine.json
{ "chef_environment": "ENV", "name": "my.machine", "normal": { "key": "val" }, "run_list": [ "role[my_role]" ] }
Является ли это реальный Chef узел?
И удовлетворяет ли следующее precedence?
я предположил, что если бы я был «нормальный» "key":"value"
в узле, роли и окружающей среде, в следующем порядке (перезапись) порядок был применен: узла> роль> среды, но в соответствии с этой документацией старшинством является роль> окружающей среды > рецепт и рецепт находится в той же ячейке таблицы, что и узел.
Но если роль, узел и среда имеют ** тот же уровень **, который является ** порядком перезаписи **? Это ** role> environment> node ** (согласно https://docs.chef.io/attributes.html#attribute-precedence)? Или это, как я полагал: ** node> role> environment ** (перед чтением документации)? Мое предположение было основано на интуиции: я связал среду с набором машин, ролью приложения, которое выполняется на этих машинах и узлом на машине. И я считал, что если бы я хотел иметь определенное поведение на машину, мне нужно было добавить что-то в узел. –
Узлы могут иметь только данные на нормальном уровне, а роли/envs не могут использовать этот уровень, поэтому конфликты невозможны. – coderanger