2.4. テンプレーティング
for ループや if ステートメントなどのフロー制御ステートメントを追加することができます。これは、cheetah ツールを使用して行うことができます。
- 複数のキックスタート間のディスクのパーティショニングセクションなどの、キックスタートの特定のセクションを再利用することができます。
- 複数のキックスタート全体にわたって、一貫して
%postの動作を実行することができます。 - DNS サーバー、Proxy サーバー、Web サーバーといった、複数の種類のサーバーのロール全体にわたってスニペットを定義することができます。例えば、Web サーバーには、以下のようなスニペットが定義されます。
httpd mod_ssl mod_python
httpd mod_ssl mod_pythonCopy to Clipboard Copied! Toggle word wrap Toggle overflow Web サーバーのプロファイルを作成したい場合は、キックスタートファイルの%packageセクションに Web サーバースニペットを追加します。プロファイルを Web サーバーと Proxy サーバーの両方にしたい場合は、パッケージセクションに両方のスニペットを記載します。Web サーバースニペットにもう一つのパッケージを追加したい場合 (例えば、mod_perlの場合) には、スニペットを更新すると、そのスニペットを使用しているすべてのプロファイルが動的に更新されます。
テンプレーティングにより、キックスタートファイル全体で変数の定義を使用することができます。変数は、一つのレベルで設定し、それ以下のレベルでは上書きされる設定が可能な継承の対象となります。このため、変数がシステムレベルで定義されている場合には、この変数がプロファイルもしくはキックスタートツリーのレベルで定義された同一の変数に優先します。同様に、変数がプロファイルレベルで定義されている場合は、この変数がキックスタートツリーレベルで定義されている同一の変数に優先します。
注記
スニペットは、複数のキックスタートテンプレート間でコードの断片を再利用します。これらは、多くの行にまたがる可能性があり、その中に変数が含まれる場合もあります。スニペットは、$SNIPPET('snippet_name') のテキストを使用することにより、キックスタートプロファイルに組み入れることができます。特定のパッケージ一覧や、特定の %post スクリプト、もしくはキックスタートファイルに通常含まれる任意のテキスト用にスニペットを作成することもできます。
/var/lib/cobbler/snippets/ に格納されます。/var/lib/rhn/kickstarts/wizard/ には、ウィザードスタイルのキックスタートからのテンプレートがあり、異なるデフォルトのスニペットとそれらの使用方法について説明しています。
redhat_register スニペットは、マシンをキックスタートの一部として Satellite Server に登録するために使用されるデフォルトのスニペットです。redhat_management_key と呼ばれる変数を使用して、マシンを登録します。このスニペットを使用するには、redhat_management_key の変数をシステム、プロファイル もしくはディストリビューションのいずれかのレベルで設定してから、キックスタートの %post セクションに $SNIPPET('redhat_register') を追加します。RHN Satellite Server が生成したウィザードスタイルのキックスタートにはいずれも、%post のセクションにこのスニペットが既に入っています。
/var/lib/rhn/kickstarts/snippets/ ディレクトリに格納されます。RHN Satellite は、スニペットを組織別に異なるディレクトリに格納するため、カスタムスニペットは以下の例のようなファイル名で格納されます。1 は組織 ID です。
$SNIPPET('spacewalk/1/snippet_name')
$SNIPPET('spacewalk/1/snippet_name')
注記
図2.3 キックスタートスニペット
$ と # の文字は、テンプレーティングの実行中に変数や制御フローを指定するために使用されます。スクリプト内で他の目的でこれらの文字が必要な場合には、これらをエスケープして、変数として認識されないようにする必要があります。これには、いくつかの方法があります。
- テンプレーティング中に無視したい
$または#の各インスタンスの前にバックスラッシュ文字 (\) を配置します。 - スクリプト全体を
#raw ... #end raw内にラップします。ウィザードスタイルのキックスタートを使用して作成された%preおよび%postのスクリプトはすべて、デフォルトでは#raw...#end rawでラップされます。これは、%postまたは%preスクリプトを編集する際に利用可能な テンプレート チェックボックスを使用して切り替えることができます。 - スニペットの最初の行に
#errorCatcher Echoを追加します。
例2.1 テンプレート内の特殊文字のエスケープ
%post セクション内に挿入する必要があります。
%post echo $foo > /tmp/foo.txt
%post
echo $foo > /tmp/foo.txt
$ をエスケープしないと、テンプレートエンジンは $foo という名前の変数を探そうとしますが、foo は変数としては存在しないため、失敗してしまいます。
$ をエスケープするもっとも簡単な方法は、バックスラッシュ文字 (\) を使用する方法です。
%post echo \$foo > /tmp/foo.txt
%post
echo \$foo > /tmp/foo.txt
\$foo が $foo としてレンダリングされます。
#raw ... #end raw 内にラップする方法です。
%post #raw echo $foo > /tmp/foo.txt #end raw
%post
#raw
echo $foo > /tmp/foo.txt
#end raw
#errorCatcher Echo を追加する方法です。これは、テンプレートエンジンに対して、存在しない変数はいずれも無視して、テキストを現状通りに出力するように指示します。 このオプションは、ウィザードスタイルのキックスタートに既に含まれていますが、手動で作成する raw キックスタートにも組み入れが可能です。