。each循环中的厨师ERB模板变量

问题描述 投票:0回答:1

在食谱中,我有模板资源:

clustered_machines = Array.new
nodes.each do |node|
  clustered_machines << node['hostname']
end

zookeeper_data_dir=node["lc_kafka"]["zookeeper_datadir"]
zookeeper_client_port=node["lc_kafka"]["zookeeper_client_port"]
zookeeper_client_Port_Address=node['hostname']
delete_topic=node["lc_kafka"]["delete_topic"]
brokerID=node["brokerID"]
logdir="#{kafka_home}/logs"
template "server.properties" do
  path "/#{kafka_home}/config/server.properties"
  source "server.properties.erb"
  owner "kafka"
  group "kafka"
  mode "0644"
  variables(
      :brokerID => brokerID,
      :logdir => logdir,
      :zookeeper_machines => clustered_machines,
      :zookeeper_client_port => zookeeper_client_port,
      :delete_topic_bool => delete_topic
  )
end

在erb文件中,我有以下内容:

log.retention.ms=-1
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
<%
zookeeper_connection_string = ""
@zookeeper_machines.each do |name|
  zookeeper_connection_string = zookeeper_connection_string + "#{name}"
end
zookeeper_connection_string = zookeeper_connection_string.chomp(", ")
%>
zookeeper.connect=<%= @zookeeper_connection_string %>
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

磁盘上的最终结果文件应具有此zookeeper_connection_string:

zookeeper.connect=kafka01:2181,kafka02:2181,kafka03:2181

这应该来自循环:

<%
zookeeper_connection_string = ""
@zookeeper_machines.each do |name|
  zookeeper_connection_string = zookeeper_connection_string + "#{name}":<%= @zookeeper_client_port %>
end
zookeeper_connection_string = zookeeper_connection_string.chomp(", ")
%>
zookeeper.connect=<%= @zookeeper_connection_string %>

但是此来自模板资源定义的变量正在引发异常,因为该循环中的该变量不存在:

<%= @zookeeper_client_port %>

只能在循环外部定义该变量。

我的问题是...有什么方法可以在循环中使用该变量?谢谢。加百利

以后编辑:

我已经修改了此部分:

 nodes.each do |node|
   clustered_machines << "#{node['hostname']}:#{zookeeper_client_port}"
 end

现在我已经准备好插入字符串:

  [2019-11-01T20:46:00+02:00] WARN: clustered_machines are: ["kafka03:2181", "kafka02:2181", "kafka01:2181"]

我仍然不知道如何创建

zookeeper.connect=<%= @zookeeper_connection_string %>
ruby chef erb
1个回答
0
投票

解决方案:

<%
zookeeper_connection_string = ""
@zookeeper_machines.each do |name|
  zookeeper_connection_string = zookeeper_connection_string + "#{name},"
end
zookeeper_connection_string = zookeeper_connection_string.chomp(",")
%>
zookeeper.connect=<%= zookeeper_connection_string %>

最终结果是:

zookeeper.connect=kafka01:2181,kafka02:2181,kafka03:2181
© www.soinside.com 2019 - 2024. All rights reserved.