2014-01-27 4 views
3

У меня есть репетитор повара, который нуждается в некоторой очистке. Данные конфигурации разбросаны по файлам в узлах, средах и папках ролей.Как я могу использовать ChefSpec во время реорганизации сред/ролей/узлов

Моя идея - использовать ChefSpec для проверки на регрессии при реструктуризации данных. Поскольку только роли, по-видимому, поддерживаются непосредственно ChefSpec, как я могу использовать существующие узлы/среды в тестах ChefSpec?

+0

Похоже, вы ответили на свой вопрос. Не могли бы вы отметить правильный ответ? – sethvargo

ответ

2

Отвечая себя, на всякий случай, если кто-то может оказаться полезным:

Я закончил с примером, как это:

it 'renders config file with proper data on node ABC in environment XYZ' do 
    runner = ChefSpec::Runner.new 

    node_attr = JSON.parse(File.open('nodes/ABC.json')) 
    runner.node.consume_attributes(node_attr) 

    env_attr = JSON.parse(File.open('environments/XYZ.json')) 
    env = Chef::Environment.json_create(env_attr) 

    runner.node.stub(:chef_environment).and_return('XYZ') 
    Chef::Environment.stub(:load).and_return(env) 

    runner.converge('cookbook::recipe') 

    expect(runner).to render_file('/etc/cookbook.cfg').with_content('some data from ABC.json') 
end 

Это работает с "моно литийный шеф-повар репо ", который я использую на этом раннем этапе принятия нашего шеф-повара - на самом деле мы используем chef-solo, но в структуре папок, которая пытается быть совместимой с рефером шеф-повара.

Кроме того, я не хочу проверять регрессии во время всей необходимой реструктуризации без скорости ChefSpec!

2

Большинство инструментов для шеф-повара предназначены для работы с одной кулинарной книгой. Вы можете использовать ChefSpec в шаблоне «monolithic Chef repo». ChefSpec делает have support for mocking Environments и roles.

Когда вы пишете тесты ChefSpec (обычно называемые «примерами»), они против единой кулинарной книги, а не роли или среды. Если вы написали примеры ChefSpec для всех своих кулинарных книг, тогда вы можете спокойно сделать этот рефакторинг, выполнив тесты для каждого прогона. Но нет никакого способа написать тесты против всего репозитория Chef.

Источники:

  • Я утверждаю это и написал текущую версию
+0

Я не совсем понимаю, «нет возможности писать тесты против всего вашего репозитория шеф-повара». Скажем, у меня есть две кулинарные книги, которые имеют общую схему использования ресурсов. Я хочу рассказать об этом в третьей поваренной книге, на которую ссылаются оба. Не могли бы вы сказать, что это выходит за рамки, которые будут проверены chefspec? (Надеюсь, нет, так как его скорость превосходна!) –