web-dev-qa-db-ja.com

Chef / Ruby / erbファイル-このサンプルコードはどのように機能しますか?

サンプルテンプレートに基づいて、カスタムbootstrapテンプレートに取り組んでいます。ワークステーションから新しいサーバーに検証キーを取得する例と、私が言えることから見ていきます。キーパスは、変数validation_keyのknife.rbで指定されています。また、bootstrapテンプレートでは、<%= validate_key%>でエコーされます。

これは魔法ですかRubyもの、ナイフで処理されるvalidation_keyパス変数であり、テンプレートを処理するときにコンテンツが別の変数に読み込まれます。これにより、パスが次の文字列に変換されます。そのパスにあるファイルの内容?

Knife.rbでfoo =/tmp/test.txtを宣言した場合、<%= foo%>を使用してbootstrapテンプレートのtest.txtの内容にアクセスできますか?

FROM: https://github.com/opscode/chef/blob/master/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb

(
cat <<'EOP'
<%= validation_key %>
EOP
) > /tmp/validation.pem
2
Jeff V

<%および%>ビジネスは Rubyのテンプレートシステム の一部であり、Chefでも使用されています。 validation_keyへの参照は、bootstrapテンプレートコードによって渡されるローカル変数です。

Chef内でのERBテンプレートのより一般的な使用法は、たとえばApacheコミュニティクックブックから構成ファイルを作成することです。

templates/default/ports.conf.erb

<% @Apache_listen_ports.each do |port| %>
Listen <%= port %>
<% end %>

このリソースは、レシピのどこかに作成されます。

recipes/default.rb

template "/etc/Apache2/ports.conf" do
  source "ports.conf.erb"
  variables :Apache_listen_ports => [80, 443]
end

最初に重要なことは、ERBによって実行されるコードを記述するための<%の使用と、式の結果(通常は変数のみ)を返す<%=の使用に注意することです。

4
Tim Potter