2.4. テンプレーティング


キックスタートの テンプレーティング により、ご使用のキックスタートファイル内に変数、スニペット、ならびに for ループや if ステートメントなどのフロー制御ステートメントを追加することができます。これは、cheetah ツールを使用して行うことができます。
テンプレーティングは、以下のような様々な理由で有用となります。
  • 複数のキックスタート間のディスクのパーティショニングセクションなどの、キックスタートの特定のセクションを再利用することができます。
  • 複数のキックスタート全体にわたって、一貫して %post の動作を実行することができます。
  • DNS サーバー、Proxy サーバー、Web サーバーといった、複数の種類のサーバーのロール全体にわたってスニペットを定義することができます。例えば、Web サーバーには、以下のようなスニペットが定義されます。
    httpd
    mod_ssl
    mod_python
    
    Copy to Clipboard Toggle word wrap
    Web サーバーのプロファイルを作成したい場合は、キックスタートファイルの %package セクションに Web サーバースニペットを追加します。プロファイルを Web サーバーと Proxy サーバーの両方にしたい場合は、パッケージセクションに両方のスニペットを記載します。Web サーバースニペットにもう一つのパッケージを追加したい場合 (例えば、mod_perl の場合) には、スニペットを更新すると、そのスニペットを使用しているすべてのプロファイルが動的に更新されます。
変数

テンプレーティングにより、キックスタートファイル全体で変数の定義を使用することができます。変数は、一つのレベルで設定し、それ以下のレベルでは上書きされる設定が可能な継承の対象となります。このため、変数がシステムレベルで定義されている場合には、この変数がプロファイルもしくはキックスタートツリーのレベルで定義された同一の変数に優先します。同様に、変数がプロファイルレベルで定義されている場合は、この変数がキックスタートツリーレベルで定義されている同一の変数に優先します。

注記

Satellite の同期時に作成されるキックスタートツリーなどの自動生成されるキックスタートツリーに対しては、キックスタートツリーの変数定義はできない点に注意してください。
スニペット

スニペットは、複数のキックスタートテンプレート間でコードの断片を再利用します。これらは、多くの行にまたがる可能性があり、その中に変数が含まれる場合もあります。スニペットは、$SNIPPET('snippet_name') のテキストを使用することにより、キックスタートプロファイルに組み入れることができます。特定のパッケージ一覧や、特定の %post スクリプト、もしくはキックスタートファイルに通常含まれる任意のテキスト用にスニペットを作成することもできます。

スニペットを管理するには、システム キックスタート キックスタートスニペット に進みます。
キックスタートスニペット のページには、編集はできなくても、どの組織でも使用することができるデフォルトのスニペットがいくつか表示されます。デフォルトのスニペットは、RHN Satellite Server 上に書き込まれた、もしくは RHN Satellite Server にアップロードされたキックスタートで使用することができます。デフォルトのスニペットは、RHN Satellite サーバーのファイルシステムの /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')
Copy to Clipboard Toggle word wrap
キックスタートにカスタムスニペットを挿入するために使用すべきテキストを判断するには、スニペット一覧もしくはスニペットの詳細ページで、スニペットマクロ の列を探してください。

注記

スニペットは、グローバルレベルで存在し、同一の継承構造を変数として共有しません。ただし、スニペット内の変数を使用して、異なるシステムがキックスタートを要求する時の動作のしかたを変更することができます。

図2.3 キックスタートスニペット

特殊文字のエスケープ

$# の文字は、テンプレーティングの実行中に変数や制御フローを指定するために使用されます。スクリプト内で他の目的でこれらの文字が必要な場合には、これらをエスケープして、変数として認識されないようにする必要があります。これには、いくつかの方法があります。

  • テンプレーティング中に無視したい $ または # の各インスタンスの前にバックスラッシュ文字 (\) を配置します。
  • スクリプト全体を #raw ... #end raw 内にラップします。
    ウィザードスタイルのキックスタートを使用して作成された %pre および %post のスクリプトはすべて、デフォルトでは #raw...#end raw でラップされます。これは、%post または %pre スクリプトを編集する際に利用可能な テンプレート チェックボックスを使用して切り替えることができます。
  • スニペットの最初の行に #errorCatcher Echo を追加します。

例2.1 テンプレート内の特殊文字のエスケープ

この例では、キックスタートテンプレート内での特殊文字のエスケープ方法について説明します。
以下の bash スクリプトは、%post セクション内に挿入する必要があります。
%post 
echo $foo > /tmp/foo.txt
Copy to Clipboard Toggle word wrap
$ をエスケープしないと、テンプレートエンジンは $foo という名前の変数を探そうとしますが、foo は変数としては存在しないため、失敗してしまいます。
$ をエスケープするもっとも簡単な方法は、バックスラッシュ文字 (\) を使用する方法です。
%post 
echo \$foo > /tmp/foo.txt
Copy to Clipboard Toggle word wrap
これにより、\$foo$foo としてレンダリングされます。
第 2 の方法は、以下のように、bash スクリプト全体を #raw ... #end raw 内にラップする方法です。
%post 
#raw  
echo $foo > /tmp/foo.txt 
#end raw
Copy to Clipboard Toggle word wrap
最後の方法は、キックスタートテンプレートの 1 行目に #errorCatcher Echo を追加する方法です。これは、テンプレートエンジンに対して、存在しない変数はいずれも無視して、テキストを現状通りに出力するように指示します。 このオプションは、ウィザードスタイルのキックスタートに既に含まれていますが、手動で作成する raw キックスタートにも組み入れが可能です。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat