2016-03-30 8 views
0

Я пытаюсь написать несколько тестов для своего рецепта с помощью ChefSpec.Доступ к переменной окружения в chefSpec

Это кусок кода, который я пытаюсь тест:

file node[:storm][:job_dir] + node[:storm_work_gen][:jar_name] do 
    owner node[:storm][:user] 
    group node[:storm][:user] 
    action :delete 
    only_if { File.exist? node[:storm][:job_dir]+node[:storm_work_gen][:jar_name] } 
end 

Здесь значение node[:storm_work_gen][:jar_name] исходит из файла среды. Содержимое моего файла окр является:

# coding: UTF-8 

name 'sro_work_gen_dev' 
description 'Sro Work Generator Environment for dev cluster' 

override_attributes() 

default_attributes(
    storm_work_gen: { 
     cache_prop: { 
      expire_time: '30', 
      max_record_size: '100' 
     }, 
     parallelism_hint: { 
      kafka_spout_brq_sfq_ph: '1', 
      kafka_spout_ftl_ph: '1', 
      data_marshaller_ph: '1', 
      data_processor_ph: '1', 
      item_lookup_ph: '1', 
      rule_applier_ph: '1', 
      worlist_writer_ph: '1' 
     }, 
     num_workers: '2', 
     Topology_Name: 'WorkGen-tplgy-json-version', 
     Kafka_Zookeepers: '...', 
     Kafka_Broker: '...', 
     repo_url: '...', 
     jar_name: 'wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar' 
    } 
) 

И мой спецификации выглядит следующим образом:

describe 'storm_wlm_deploy::_artifact' do 

    # let(:chef_run) { ChefSpec::SoloRunner.new.converge(described_recipe) } 
    let(:chef_run) do 
    ChefSpec::SoloRunner.new do |node| 
     env = Chef::Environment.new 
     env.name 'storm_work_gen' 
     allow(node).to receive(:chef_environment).and_return(env.name) 
     allow(Chef::Environment).to receive(:load).and_return(env) 
    end.converge(described_recipe) 
    end 

    it 'delete the jar:/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar if it exists' do 
    expect(chef_run).to delete_file('/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar') 
    end 
end 

Спецификация завершается с сообщением:

NoMethodError 
------------- 
undefined method `[]' for nil:NilClass 
at line file node[:storm][:job_dir] + node[:storm_work_gen][:jar_name] do 

Я хочу знать, как получить узел [ : storm_work_gen] [: jar_name] из файла env при запуске chefSpec

ответ

0

Вы настраиваете среду с макетами, но вы не действуете чтобы он мог использовать его для чего угодно. Также вы не помещаете в него никаких данных. Хотя он имеет то же имя, что и среда в вашем файле, эти два не имеют ничего общего друг с другом.

+0

После того как я издеваться, я пытаюсь понять, каким я могу издеваться узел [: storm_work_gen] [: jar_name] в receipe когда chefSpec работает, вы могли бы указать на то, как я это делаю. – user3394555

+0

Я бы просто установил его непосредственно в узле для целей тестирования. Избавьтесь от env-заглушки и добавьте 'node.set [: storm_work_gen] [: jar_name] = 'whatever'' в том же самом блоке. – coderanger

+0

Спасибо, это работает – user3394555

0

Для тех из вас, кто ищет для этого решения, но, не ясно, как настроить значение узла, основываясь на вышеуказанных комментариях здесь разбивка на основе приведенного выше примера:

Первоначально: describe 'storm_wlm_deploy::_artifact' do let(:chef_run) do ChefSpec::SoloRunner.new do |node| env = Chef::Environment.new env.name 'storm_work_gen' allow(node).to receive(:chef_environment).and_return(env.name) allow(Chef::Environment).to receive(:load).and_return(env) end.converge(described_recipe) end it 'delete the jar:/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar if it exists' do expect(chef_run).to delete_file('/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar') end end

Обновлено: describe 'storm_wlm_deploy::_artifact' do let(:chef_run) do ChefSpec::SoloRunner.new do |node| node.set[:storm_work_gen][:jar_name] = 'wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar' end.converge(described_recipe) end it 'delete the jar:/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar if it exists' do expect(chef_run).to delete_file('/opt/swlm/storm_jobs/wlm-workgenerator-topology-0.0.1-SNAPSHOT.jar') end end