付録A テンプレート作成の参照
Embedded Ruby (ERB) は、Ruby コードとプレーンテキストを統合するテンプレートをもとに、テキストファイルを生成するためのツールです。Red Hat Satellite は、以下の場合に ERB 構文を使用します。
- プロビジョニングテンプレート
- 詳細は、『プロビジョニング ガイド』 の「 プロビジョニングテンプレートの作成 」を参照してください。
- リモート実行ジョブのテンプレート
- 詳細は、10章ホストでのジョブの実行 を参照してください。
- レポートテンプレート
- 詳細は、7章レポートテンプレートを使用したホストの監視 を参照してください。
- パーティションテーブルのテンプレート
- 詳細は、『 プロビジョニングガイド』 の「 パーティションテーブルの作成 」を参照してください。
- スマート変数
- 詳細は、『 Puppet ガイド』 の「スマート変数の 設定」を参照してください。
- スマートクラスパラメーター
- 詳細は、『Puppet ガイド』 の「スマートクラスパラメーターの設定 」を参照してください。
このセクションでは、ERB テンプレートで使用可能な Satellite 固有のマクロと変数を使用例と併せて概説します。Red Hat Satellite が提供するデフォルトのテンプレート (ホスト > プロビジョニングテンプレート、ホスト > ジョブテンプレート、監視 > レポートテンプレート) には、ERB 構文の適切な例も含まれている点にご留意ください。
ホストのプロビジョニング時またはリモートジョブの実行時に、ERB のコードが実行し、変数がホスト固有の値に置き換えられます。このプロセスは、レンダリング と呼ばれています。Satellite Server ではセーフモードのレンダリングオプションがデフォルトで有効になっており、これにより、有害なコードがテンプレートから実行されないようにすることができます。
A.1. ERB テンプレートの作成
以下のタグは最も重要であり、ERB テンプレートで一般的に使用されています。
<% %>
すべての Ruby コードは、ERB テンプレートの <% %>
内に囲まれています。コードはテンプレートのレンダリング時に実行されます。これには Ruby の制御フロー構造と、Satellite 固有のマクロおよび変数を含めることができます。以下に例を示します。
<% if @host.operatingsystem.family == "Redhat" && @host.operatingsystem.major.to_i > 6 -%> systemctl <%= input("action") %> <%= input("service") %> <% else -%> service <%= input("service") %> <%= input("action") %> <% end -%>
このテンプレートは、サービスを使用して警告なしにアクションを実行し、出力には何も返さないことに注意してください。
<%= %>
これは、<% %>
と同じ機能を提供しますが、テンプレートが実行されると、コード出力はテンプレートに挿入されます。これは変数の置き換えに便利です。以下に例を示します。
入力例:
echo <%= @host.name %>
レンダリング例:
host.example.com
入力例:
<% server_name = @host.fqdn %> <%= server_name %>
レンダリング例:
host.example.com
誤った変数を入力した場合、出力は返されない点にご留意ください。ただし、誤った変数でメソッドを呼び出そうとすると、以下のエラーメッセージが返されます。
入力例:
<%= @example_incorrect_variable.fqdn -%>
レンダリング例:
undefined method `fqdn' for nil:NilClass
<% -%>, <%= -%>
デフォルトでは、行末で閉じられている場合に、改行文字が Ruby ブロックの後に挿入されます。
入力例:
<%= "line1" %> <%= "line2" %>
レンダリング例:
line1 line2
デフォルトの動作を変更するには、-%>
で囲みマークを変更します。
入力例:
<%= "line1" -%> <%= "line2" %>
レンダリング例:
line1line2
これはレンダリングされるテンプレートの行数を減らすために使用されます (Ruby 構文で許可される場合)。ERB タグの空白は無視されます。
これをレポートテンプレートで使用して、FQDN と IP アドレス間の不要な改行を削除する方法の例を以下に示します。
入力例:
<%= @host.fqdn -%> <%= @host.ip -%>
レンダリング例:
host.example.com10.10.181.216
<%# %>
テンプレートのレンダリング時に無視されるコメントを囲みます。
入力例:
<%# A comment %>
これは出力を生成しません。
ERB テンプレートのインデント
ERB タグの長さが異なるため、ERB 構文にインデントを入れると見にくい場合があります。ERB 構文は空白を無視します。インデントを処理する方法の 1 つは、新しい行の各行頭に ERB タグを宣言し、ERB タグ内の空白を使用して構文内の関係を説明することです。以下に例を示します。
<%- load_hosts.each do |host| -%> <%- if host.build? %> <%= host.name %> build is in progress <%- end %> <%- end %>