Шаблонная переменная Chef ERB в цикле .each - PullRequest
0 голосов
/ 02 ноября 2019

В кулинарной книге у меня есть ресурс шаблона:

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 %>

1 Ответ

0 голосов
/ 02 ноября 2019

Решение:

<%
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
...