Chef infra 厨师长:从“添加到现有文件”;雇员再培训局;模板

Chef infra 厨师长:从“添加到现有文件”;雇员再培训局;模板,chef-infra,Chef Infra,是否有方法将erb代码附加到配置文件: <% @zookeeper.each_with_index do |ip, id| %> <%= "server.#{id}=#{ip}:2888:3888" %> <% end %> 不,这不是Chef直接支持的功能。模板资源希望控制整个文件内容。这确保了幂等性和收敛性。附加Chef 您不能以幂等方式将ERB模板附加到现有文件中,但可以通过以下一种或多种技术获得所需的行为: A 执行外部sh

是否有方法将erb代码附加到配置文件:

    <% @zookeeper.each_with_index do |ip, id| %>
    <%= "server.#{id}=#{ip}:2888:3888" %>
    <% end %>

不,这不是Chef直接支持的功能。
模板
资源希望控制整个文件内容。这确保了幂等性和收敛性。

附加Chef 您不能以幂等方式将ERB模板附加到现有文件中,但可以通过以下一种或多种技术获得所需的行为:

  • A
  • 执行外部shell命令,如
    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 %>
      
    在属性中嵌入换行符 或者,您可能有一个带有嵌入换行符的属性,然后可以将其转换为输出中的多行。例如:

    • /tmp/bar.erb

      <%
        @zookeeper = %w( 
          server.0=192.168.1.1:2888:3888
          server.1=192.168.2.2:2888:3888
        )
      %><%= @zookeeper.join "\n" %>
      

    为什么这不适合你?
    <%
      @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