【问题标题】:How to read test data when running test-kitchen during Chef converge在 Chef 收敛期间运行 test-kitchen 时如何读取测试数据
【发布时间】:2017-12-08 16:57:46
【问题描述】:

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

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

我有从这个文件中读取数据的代码,但是在运行 test-kitchen 时,我不知道如何声明包含这些信息的测试文件在我的 .kitchen.yml 文件中的位置。

我尝试在我的存储库的根目录中创建一个包含此文件的目录,认为它会像角色、环境、食谱目录一样被复制,所以我的 .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

或(基于检查我用于测试厨房的 Docker 映像的目录结构)

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

我不知道如何让 Chef/Test-Kitchen 找到该文件。

----------------编辑-------------------

这是我用来澄清的代码:

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['sliceconf_path'])

【问题讨论】:

    标签: chef-infra splunk test-kitchen


    【解决方案1】:

    听起来你正在做类似IO.read(node['splunk']['sliceconf_path']) 的事情,这意味着它必须是目标 VM 上的绝对路径,它不会像你提供的那样知道 Chef-y 的事情。但是这个属性在splunkcookbook 社区中不存在,所以我不知道代码是如何工作的。如果您希望它自动理解 cookbook_files,您需要为此编写代码。

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多