2016-12-20 3 views
1

В проекте, который использует шеф-сервер, мы используем следующие понятия:Обязательно ли 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" в узле, роли и окружающей среде, в следующем порядке (перезапись) порядок был применен: узла> роль> среды, но в соответствии с этой документацией старшинством является роль> окружающей среды > рецепт и рецепт находится в той же ячейке таблицы, что и узел.

ответ

2

Мы медленно фиксировали код загрузки JSON, чтобы не полагаться на биты автоматической инфляции json_class. Насколько я знаю, chef_type никогда не использовался, но все еще может быть проверен некоторыми тестовыми кодами.

Что касается вопроса о приоритете: роли и envs могут содержать атрибуты как на уровнях по умолчанию, так и на переопределении. Переопределить> обычный> по умолчанию. В целом мы рекомендуем против использования нормального уровня. Это не устарело, но мы движемся в этом направлении (очень медленно, потому что мы много лет думаем об этом).

+0

Но если роль, узел и среда имеют ** тот же уровень **, который является ** порядком перезаписи **? Это ** role> environment> node ** (согласно https://docs.chef.io/attributes.html#attribute-precedence)? Или это, как я полагал: ** node> role> environment ** (перед чтением документации)? Мое предположение было основано на интуиции: я связал среду с набором машин, ролью приложения, которое выполняется на этих машинах и узлом на машине. И я считал, что если бы я хотел иметь определенное поведение на машину, мне нужно было добавить что-то в узел. –

+0

Узлы могут иметь только данные на нормальном уровне, а роли/envs не могут использовать этот уровень, поэтому конфликты невозможны. – coderanger

Смежные вопросы