2017-06-30 19 views
0

我試圖創建一個動態創建的Splunk索引器(與數據端口附加到每個主機名稱)的動態創建逗號分隔列表從提供返回列表主機到模板和相應的erb。廚師從模板和刀子搜索創建逗號分隔的字符串

但是,conf文件中的字符串永遠不會被創建,儘管當我收斂到我的測試Docker實例時沒有引發任何錯誤。

這裏的刀查詢,它引用的屬性,以及模板資源

attribute file entry: 
default['forwarder']['indexer_role'] = 'splunk_indexer' 


knife query and template resource: 
indexers = search(:node, "role:#{node['forwarder']['indexer_role']}") 

template '/opt/splunkforwarder/etc/system/local/outputs.conf' do 
    source "system_local_outputs.erb" 
    owner 'nobody' 
    group 'nobody' 
    mode 0600 
    action :create 
    variables(
    :indexers => indexers 
) 
end 

這是該模板資源

[tcpout] 
defaultGroup = default-autolb-group 

[tcpout:default-autolb-group] 
disabled = false 
<% @indexers.each do |member| %> 
    server = <%= member[ :hostname] + ":5501," %> 
<% end %> 

我不知道,如果相應的ERB文件查詢被錯誤地指定,或者模板資源是否錯誤,或者如果我在erb代碼中犯了錯誤。

正如我上面提到的,沒有錯誤拋出,代碼編譯和收斂沒有任何錯誤消息。這條線根本就不在那裏。

回答

0

這不會創建一個逗號分隔的列表,這將使多條線路,如:

server = foo:5501, 
server = bar:5501, 

你可能想在模板更重要的是這樣的:

server = <%= @indexers.map {|n| "#{n}:5501" }.join(",") %> 

但是,如果您首先看不到這些行,可能您的搜索查詢無法正常工作。嘗試使用knife search檢查它,並且可能使用roles:而不是role:,因爲它更經常是正確的。

+0

謝謝,你對erb沒有做出逗號分開列表是正確的。 我檢查了查詢和'刀搜索'角色:splunk_indexer''確實工作正常。 我應該澄清該行的一部分存在「server =」,但該行不包含新行,因此我很早就錯過了。仍然查詢似乎沒有工作。 – user3481957

+0

我忘了提及我在試廚房運行這個。所以我意識到,測試廚房不查詢服務器,這就是爲什麼查詢不返回任何東西。所以我接受了你的回答,因爲這讓我意識到了這一點。謝謝您的幫助。 – user3481957