我有一个方法,用单个条目更新Splunk /opt/splunkforwarder/etc/system/local/inputs.conf文件,需要将元数据添加到转发到索引器的事件中。
该元数据条目是已经安装在主机上的另一软件的配置文件中的九个字符的文本条目。
我有从这个文件中读取数据的代码,但是在运行测试厨房时,我不知道如何声明包含此信息的测试文件在我的.kitchen.yml文件中的位置。
我试着在我的存储库的根目录下创建一个目录,其中包含这个文件,我认为它会像角色、环境、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找到文件感到困惑。
-编辑
下面是我用来澄清的代码:
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中设置了节点属性(节点‘’sliceconf_path‘)
发布于 2017-12-09 02:45:49
这听起来像是你在做类似IO.read(node['splunk']['sliceconf_path'])的事情,这意味着它必须是目标虚拟机上的绝对路径,它不会像你提供的那样知道Chef-y的事情。但是这个属性在社区splunk食谱中是不存在的,所以我不知道代码是如何工作的。如果你想让它自动理解cookbook_files,你需要为此编写代码。
https://stackoverflow.com/questions/47718876
复制相似问题