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

Должен ли я использовать этот простой прием для работы с отсутствием поддержки среды у chef-solo?

Отсутствие поддержки среды Chef-solo кажется довольно спорным. С одной стороны, одна из особенностей сред - это возможность привязать кулинарные книги к определенным средам, и это не имеет абсолютно никакого смысла для chef-solo. С другой стороны, многие из нас хотели бы иметь возможность объединять атрибуты уровня среды и использовать списки выполнения для конкретной среды при тестировании с помощью Vagrant. И я думаю, что, возможно, нашел простой способ обойти проблему. Предполагая, что я использую синтаксис JSON во всех своих средах и ролях, и я придерживаюсь следующего соглашения для установки атрибутов (от самого низкого до самого высокого приоритета):

  1. по умолчанию в файлах атрибутов поваренной книги
  2. по умолчанию в файлах ролей
  3. переопределить в файлах среды

Похоже, я могу просто проанализировать эти файлы самостоятельно и ввести атрибуты в chef-solo с помощью опции -j. Так, например, я мог бы сделать что-то вроде этого в моем Vagrantfile:

chef_env_conf = parse_json("./environments/#{ENV['CHEF_ENVIRONMENT']}.json")
chef.json = chef_env_conf["override_attributes"]

Поскольку атрибуты, установленные с помощью опции -j, применяются с обычным уровнем приоритета, это может быть еще один способ переопределить значения ролей по умолчанию, и это может быть все, что вам нужно в контексте, когда среда не загружается автоматически.

Вы можете сделать что-то подобное, чтобы получить списки выполнения для каждой среды (путем анализа файлов ролей):

chef_role_conf = parse_json("./roles/#{role}.json")
chef.run_list = chef_role_conf["env_run_lists"][ENV['CHEF_ENVIRONMENT']]

Я понимаю, что это не самый элегантный прием, но похоже, что для некоторых это могло бы быть работоспособным решением. Кто-нибудь думает, что это действительно плохая идея?

В Chef 11.6.0 наконец-то добавлена ​​поддержка окружения в chef-solo.