厨师从模板和刀搜索创建逗号分隔的字符串

时间:2017-06-30 21:42:23

标签: chef

我正在尝试从一个刀查询创建一个动态创建的逗号分隔的Splunk索引器列表(数据端口附加到每个主机名),该查询将返回的主机列表提供给模板和相应的erb。

然而,当我收敛到我的测试Docker实例时,虽然没有抛出任何错误,但conf文件中的字符串永远不会被创建。

这是刀查询,它引用的属性和模板资源

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

这是该模板资源的相应erb文件

[tcpout]
defaultGroup = default-autolb-group

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

我不知道查询是否被错误地指定,或者模板资源是否错误,或者我是否在erb代码中犯了错误。

正如我上面提到的,没有抛出任何错误,代码编译和收敛而没有任何错误消息。这条线根本就不存在。

1 个答案:

答案 0 :(得分:0)

这不会创建以逗号分隔的列表,它会生成多行,如:

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

您在模板中可能需要的内容更像是:

knife search

但是,如果您没有首先看到这些行,则可能是您的搜索查询无效。请尝试使用roles:进行检查,并使用role:代替// Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey("your secret api key"); // You can find your endpoint's secret in your webhook settings $endpoint_secret = "whsec_..."; $payload = @file_get_contents("php://input"); $sig_header = $_SERVER["HTTP_STRIPE_SIGNATURE"]; $event = null; try { $event = \Stripe\Webhook::constructEvent( $payload, $sig_header, $endpoint_secret ); } catch(\UnexpectedValueException $e) { // Invalid payload http_response_code(400); // PHP 5.4 or greater exit(); } catch(\Stripe\Error\SignatureVerification $e) { // Invalid signature http_response_code(400); // PHP 5.4 or greater exit(); } // Do something with $event http_response_code(200); // PHP 5.4 or greater ,因为它通常更正确。