有没有办法将erb代码附加到配置文件中:
<% @zookeeper.each_with_index do |ip, id| %>
<%= "server.#{id}=#{ip}:2888:3888" %>
<% end %>
答案 0 :(得分:1)
您无法以幂等方式附加到具有ERB模板的现有文件,但您可以使用以下一种或多种技术获得所需的行为:
echo "$somestring" >> outfile
。此外,虽然您无法将附加到作为ERB模板管理的现有文件,但您可以选择在ERB中创建或使用多行字符串。请考虑以下示例。
/tmp/foo.erb
<% # Set up a fixture. This should really be a Chef attribute. %>
<% @zookeeper = %w[192.168.1.1 192.168.2.2] %>
<% @zookeeper.each_with_index do |ip, id| %>
<%= "server.#{id}=#{ip}:2888:3888" %>
<% end %>
示例输出
$ erb -T 2 /tmp/foo.erb
server.0=192.168.1.1:2888:3888
server.1=192.168.2.2:2888:3888
或者,您可能具有嵌入换行符的属性,然后可以将其转换为输出中的多行。例如:
/tmp/bar.erb
<%
@zookeeper = %w(
server.0=192.168.1.1:2888:3888
server.1=192.168.2.2:2888:3888
)
%><%= @zookeeper.join "\n" %>
示例输出
$ erb /tmp/bar.erb
server.0=192.168.1.1:2888:3888
server.1=192.168.2.2:2888:3888
答案 1 :(得分:0)
不,这不是Chef直接支持的功能。 template
资源期望控制整个文件内容。这确保了幂等性和收敛性。