Назад | Перейти на главную страницу

Как в Chef получить доступ к атрибутам, установленным в среде JSON, из файлов атрибутов поваренной книги?

У меня есть система шеф-повара, в которой у нас есть несколько сред и атрибуты, установленные в JSON среды.

У меня проблемы с доступом к ним из файлов атрибутов и рецептов поваренной книги.

Как выглядит ваш файл окружения? Вы устанавливаете атрибуты по умолчанию или переопределяете? Если вы устанавливаете значение по умолчанию, обратите внимание, что это довольно низкий уровень приоритета в цепочке атрибутов, поэтому он может быть отменен рецептом или ролью.

Приоритет атрибутов следующий, от низкого до высокого:

  1. атрибуты по умолчанию, применяемые в файле атрибутов
  2. атрибуты по умолчанию, применяемые в среде
  3. атрибуты по умолчанию, применяемые в роли
  4. атрибуты по умолчанию, применяемые к узлу непосредственно в рецепте
  5. обычные или установленные атрибуты, применяемые в файле атрибутов
  6. обычные или установленные атрибуты, применяемые к узлу непосредственно в рецепте
  7. переопределить атрибуты, примененные в файле атрибутов
  8. переопределить атрибуты, примененные в роли
  9. переопределить атрибуты, применяемые в среде
  10. переопределить атрибуты, примененные к узлу непосредственно в рецепте

Выше от:

Наконец, я смог использовать атрибут окружения в рецепте Chef. Допустим, у нас есть такая среда:

{
  "name": "QA",
  "description": "QA environment",
  "cookbook_versions": {
  },
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "default_attributes": {
    "comp_rsyslog": {
      "filetag_env": "compqa"
    }
  },
  "override_attributes": {
  }
}

И нам нужно использовать атрибут filetag_env в файле конфигурации шаблона службы для передачи атрибута среды.

То, как я делаю это в файле conf erb, выглядит так:

$InputFileTag <%= node['comp_rsyslog']['filetag_env'] %>,<%= node['rsyslog']['filetag1'] %>

В <%= node['rsyslog']['filetag1'] %> определяется в файле атрибута рецепта:

default['rsyslog']['filetag1'] = 'comp_service'

Результатом будет файл в /etc/rsyslog.d/comp_service.conf с содержанием вроде:

$InputFileTag compqa,comp_service.

Теперь правильный порядок, как принято с сайта документации для шеф-повара:

  1. Атрибут по умолчанию, расположенный в файле атрибутов поваренной книги.
  2. Атрибут по умолчанию, расположенный в рецепте
  3. Атрибут по умолчанию, расположенный в среде
  4. Атрибут по умолчанию, расположенный в роли
  5. Атрибут force_default, расположенный в файле атрибутов поваренной книги
  6. Атрибут force_default, расположенный в рецепте
  7. Обычный атрибут, расположенный в файле атрибутов поваренной книги.
  8. Обычный атрибут, расположенный в рецепте
  9. Атрибут переопределения, расположенный в файле атрибутов поваренной книги
  10. Атрибут переопределения, расположенный в рецепте
  11. Атрибут переопределения, расположенный в роли
  12. Атрибут переопределения, расположенный в среде
  13. Атрибут force_override, расположенный в файле атрибутов поваренной книги
  14. Атрибут force_override, расположенный в рецепте
  15. Автоматический атрибут, определяемый Охаем в начале запуска шеф-повара.