Chef — ServerSpec — Доступ к атрибутам узла

Я нахожусь в процессе написания тестов ServerSpec для кулинарной книги, которую я написал. Тестам нужны атрибуты узла, чтобы утверждать различные вещи через кухню.

К счастью, здесь есть руководство, объясняющее, как этого добиться: http://jakshi.com/blog/2014/05/12/accessing-chef-attributes-in-serverspec-tests/

У меня проблема в том, что это не работает:

attrs = attrs.deep_merge(node.override_attrs) unless node.override_attrs.empty?

Но это работает:

attrs = attrs.deep_merge(node.attributes.combined_override) unless node.attributes.combined_override.empty?

Моя настройка точно такая же, как описано в блоге. Просмотр кода не помог из-за отсутствия ruby- фу. Версия клиента шеф-повара — 11.14.6, а версия Test-Kitchen — 1.3.1.

Может кто-нибудь помочь, пожалуйста? У кого-нибудь еще возникла такая проблема? Спасибо.

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

cb-under-test/recipes/default.rb
<Nothing>


cb-under-test/test/fixtures/cookbooks/fake/attributes/default.rb
force_override['important_dir'] = 'test_recipe_force_override'


../env/dummy-env.json
{
  "name": "dummy-env",
  "description": "Dummy Env",
  "cookbook_versions": {
  },
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "override_attributes": {
    "important_dir": "env_override"
  }
}

person dvlpr    schedule 19.10.2015    source источник
comment
Добавьте файл атрибутов вашей тестовой поваренной книги, мы не можем догадаться, на каком уровне вы их установили...   -  person Tensibai    schedule 19.10.2015
comment
Атрибуты поступают из нескольких мест, включая окружающую среду. У меня нет никаких атрибутов в моей тестовой поваренной книге.   -  person dvlpr    schedule 19.10.2015
comment
В любом случае, без извлечения мы не можем угадать, на каких уровнях определяются ваши атрибуты (по умолчанию, нормальный, переопределить, еще?)   -  person Tensibai    schedule 19.10.2015
comment
Какую версию шеф-повара вы используете? (Просто чтобы быть уверенным, какой код я должен проверить для доступа к уровням атрибутов)   -  person Tensibai    schedule 20.10.2015
comment
На тестовой ВМ это 11.14.6. Я использую шеф-повар соло через кухню.   -  person dvlpr    schedule 20.10.2015
comment
Согласно коду не существует override_attrs, здесь у вас будет кулинарная книга в node.override и env в node.env_override, node.combined_override дает вам результирующие атрибуты после глубокого слияния. Сообщение в блоге довольно старое, вам лучше использовать attrs = node.merged_attributes для записи файла json.   -  person Tensibai    schedule 20.10.2015
comment
В этом так много смысла, и это тоже работает! Спасибо! Если бы вы могли поместить это в ответ, я могу принять.   -  person dvlpr    schedule 20.10.2015
comment
Вы правы, я должен был написать это как ответ сначала.   -  person Tensibai    schedule 20.10.2015


Ответы (1)


Согласно коду override_attrs не существует метод.

Здесь у вас будут атрибуты поваренной книги в node.override и атрибуты среды в node.env_override, node.combined_override даст вам результирующие атрибуты после глубокого слияния.

Сообщение в блоге довольно старое, вам лучше использовать attrs = node.merged_attributes для записи файла json и получения результирующих атрибутов из кулинарной книги, ролей и сред, использование merged_attributes должно избегать атрибутов ohai, сохраняя размер json низким.

person Tensibai    schedule 20.10.2015
comment
Я использовал рецепт test_helper, который хранил атрибуты узла в файле, чтобы ServerSpec мог протестировать их, и обнаружил, что переменные среды вообще не объединяются. Использование node.env_override решило это для меня. Спасибо. - person jaseeey; 08.12.2015