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