访问chefSpec中的环境变量

时间:2016-03-30 19:59:26

标签: chef 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]的值来自环境文件。我的env文件的内容是:

# 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

我想知道当chefSpec运行时如何从env文件中获取node [:storm_work_gen] [:jar_name]

1 个答案:

答案 0 :(得分:0)

您正在设置模拟环境,但实际上您并没有告诉Chef将其用于任何事情。您也没有在其中添加任何数据。虽然它与文件中的环境名称相同,但两者之间没有任何关系。