Я пытаюсь написать несколько тестов для своего рецепта с помощью 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
После того как я издеваться, я пытаюсь понять, каким я могу издеваться узел [: storm_work_gen] [: jar_name] в receipe когда chefSpec работает, вы могли бы указать на то, как я это делаю. – user3394555
Я бы просто установил его непосредственно в узле для целей тестирования. Избавьтесь от env-заглушки и добавьте 'node.set [: storm_work_gen] [: jar_name] = 'whatever'' в том же самом блоке. – coderanger
Спасибо, это работает – user3394555