如何在Chef收敛期间运行测试厨房时读取测试数据

时间:2017-12-08 16:57:46

标签: chef splunk test-kitchen

我有一个更新Splunk /opt/splunkforwarder/etc/system/local/inputs.conf文件的配方,其中包含需要添加到转发给索引器的事件的元数据的单个条目。

此元数据条目是已在主机上安装的另一个软件的配置文件中的九个字符的文本条目。

我有代码来读取此文件中的数据但是当涉及到运行test-kitchen时,我不知道如何声明具有此信息的测试文件位于我的.kitchen.yml文件中。< / p>

我已经尝试在我的仓库的根目录下创建一个目录,其中包含这个文件,认为它会像角色,环境,cookbook目录一样被复制,因此我的.kitchen.yml包含一个条目:

    attributes: 
      splunk:
        sliceconf_path: test/slice.conf

但是我会收到像

这样的错误
Errno::ENOENT
       -------------
       No such file or directory @ rb_sysopen - test/slice.conf

我尝试过很多其他地方,但我仍然无法找到这个文件。如果我将它放在“files / test / slice.conf”中,它将被复制,但如果我声明路径,它仍然无法找到它

sliceconf_path: files/test/slice.conf

或(基于检查我用于Test-Kitchen的Docker镜像的目录结构)

cookbooks/cookbook-dh_rainbow_forwarders/files/test/slice.conf

我很难过如何让Chef / Test-Kitchen找到这个文件。

---------------- EDIT -------------------

以下是我用来澄清的代码:

Recipe
slice_name = ''
ruby_block 'read_slice_conf' do
  block do
    slice_name = File.read("#{node['sliceconf_path']}").chomp
  end
end

# Update local input conf file with meta-data about slice.
 template '/opt/splunkforwarder/etc/system/local/inputs.conf' do
   source 'system_local_inputs.erb'
   owner 'nobody'
   group 'nobody'
  mode 0o600
  mode '0600'
   action :create
  variables(
    slice_decorators: slice_name
  )
 end

Template
[default]
host = <%= node['fqdn'] %>

_meta = slice::#{slice_name}

我在.kitchen.yml中设置了node属性(node ['sliceconf_path'])

1 个答案:

答案 0 :(得分:0)

听起来你正在做类似IO.read(node['splunk']['sliceconf_path'])的事情,这意味着它必须是目标虚拟机上的绝对路径,它不会像你所提供的那样熟悉Chef-y。但是社区splunk食谱中不存在该属性,因此我无法分辨代码的工作原理。如果你想让它自动理解cookbook_files,你需要为此编写代码。