第13章 Satellite Server 機能の拡張
Red Hat Satellite Server は、プラグインをインストールし、オーケストレーションと Rails イベントにフックを使用することで、機能拡張が可能です。プラグインは、RPM パッケージとして Red Hat リポジトリーと Foreman リポジトリーから入手できます。
13.1. Satellite プラグイン リンクのコピーリンクがクリップボードにコピーされました!
Satellite プラグインは以下から入手できます。
- Red Hat リポジトリー
- Foreman リポジトリー
Satellite 用のプラグインには通常、RPM パッケージ名に foreman という語が含まれており、Capsule 用のプラグインには、名前に smart_proxy が含まれています。
Red Hat が提供するプラグインは、Satellite CLI から yum コマンドを使用して検索とインストールができます。
アップストリーム の Satellite プラグインは、Foreman リポジトリーで入手できます。Foreman の各リリースには、該当リリース用のプラグインを格納している個別のリポジトリーがあります。
アップストリーム プラグインをインストールするには、Foreman リポジトリーを Satellite で設定する必要があります。設定が完了したら、yum コマンドを使用して Satellite CLI から検索とインストールができます。
Foreman リポジトリーは、http://yum.theforeman.org/plugins から入手できます。
お使いのシステムにある Foreman のバージョンと互換性のあるプラグインをインストールするように注意してください。
yum info または rpm -qi を使用すると、RPM パッケージの説明を表示してプラグインを確認することができます。
Red Hat では、Foreman API はサポートしていますが、Foreman リポジトリーからインストールしたプラグインはサポートしていません。
13.1.1. プラグインの検索 リンクのコピーリンクがクリップボードにコピーされました!
Satellite CLI を使って利用可能なプラグインを検索します。
アップストリーム プラグインも検索するには、Foreman リポジトリーを 「Foreman リポジトリーの設定」 の説明に従って設定します。
手順
root ユーザーとして
yum searchを使ってパッケージ名に "-foreman" がつくパッケージを検索します。例 - Satellite 用 rubygem プラグインの検索
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.1.2. プラグインのインストール リンクのコピーリンクがクリップボードにコピーされました!
Satellite CLI を使用してプラグインをインストールします。
アップストリーム プラグインをインストールするには、Foreman リポジトリーを 「Foreman リポジトリーの設定」 の説明に従って設定します。
手順
yum installを使用して必要なプラグインをインストールします。例: tfm-rubygem-foreman_templates プラグインのインストール:
yum install tfm-rubygem-foreman_templates
# yum install tfm-rubygem-foreman_templatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow foreman-maintainサービスを再起動します。foreman-maintain service restart
# foreman-maintain service restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
インストールされたことを確認するには、yum を使ってインストールされたプラグインを一覧表示します。
例: rubygem-foreman プラグインのインストール確認
yum list installed | grep rubygem-foreman | grep foreman
# yum list installed | grep rubygem-foreman | grep foremanCopy to Clipboard Copied! Toggle word wrap Toggle overflow yumを使って Capsule プラグインを一覧表示することもできます。yum list installed | grep proxy
# yum list installed | grep proxyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.1.3. Foreman リポジトリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Satellite CLI を使用して Foreman リポジトリーを設定します。
手順
rpmコマンドで Foreman のリリースを確認します。rpm -q foreman
$ rpm -q foreman foreman-1.7.2.53-1.el7sat.noarchCopy to Clipboard Copied! Toggle word wrap Toggle overflow rpm 設定ファイルを作成します。
touch /etc/yum.repos.d/foreman-plugins.repo
touch /etc/yum.repos.d/foreman-plugins.repoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容をファイルに追加します。
[foreman-plugins] name=Foreman plugins baseurl=http://yum.theforeman.org/plugins/1.10/el_7_/x86_64/ enabled=1 gpgcheck=0
[foreman-plugins] name=Foreman plugins baseurl=http://yum.theforeman.org/plugins/1.10/el_7_/x86_64/ enabled=1 gpgcheck=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow URL 内のバージョン番号 (上記の 1.10) を必要な Foreman リリース番号で置き換えます。
これらのパッケージは現在 GPG 署名されていません。
foreman プラグインについての情報は、Foreman web サイトの Popular Plugins および List of Plugins セクションを参照してください。
13.2. Foreman フック リンクのコピーリンクがクリップボードにコピーされました!
Foreman のホストオーケストレーションはフックで拡張することで、追加のタスクを実行できるようになります。Foreman フックを使用すると、ホストの作成時やホストのプロビジョニングの完了時などのオーケストレーションイベントが発生するときに、スクリプトをトリガーできます (どのような実行可能ファイルでも使用できます)。また、フックはスクリプトとともに Foreman オブジェクトの標準的な Rails コールバックに組み込むことができます。
Foreman フックは Satellite のワークフローを変更できるため、Red Hat からサポートを得るためにすべてのフックを削除するよう求められることがあります。また、Foreman フックはアップグレードの前に削除し、Satellite が期待どおり動作していることを確認した後に復元する必要があります。
13.2.1. Foreman フックのインストール リンクのコピーリンクがクリップボードにコピーされました!
Foreman フックは、デフォルトでインストールされる tfm-rubygem-foreman_hooks パッケージが提供します。パッケージがインストールされ、最新の状態であることを確認するために、root で yum を使用します。
手順
yum使用して foreman フックをインストールします。yum install tfm-rubygem-foreman_hooks
# yum install tfm-rubygem-foreman_hooks Loaded plugins: product-id, search-disabled-repos, subscription-manager Package tfm-rubygem-foreman_hooks-0.3.9-2.el7sat.noarch already installed and latest version Nothing to doCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2.2. Foreman フックの作成 リンクのコピーリンクがクリップボードにコピーされました!
Foreman フックは /usr/share/foreman/config/hooks/ に格納されます。
手順
各 Foreman オブジェクトには 1 つのサブディレクトリーを作成する必要があります (各イベント名には他のサブディレクトリーが作成されます)。Foreman オブジェクトは、ホストまたはネットワークインターフェースである場合があります。フックへのパスは以下のようになります。
/usr/share/foreman/config/hooks/object/event/hook_script
/usr/share/foreman/config/hooks/object/event/hook_scriptCopy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、ホストでオペレーティングシステムのインストールが完了した後にフックをアクティベートするために、以下のコマンドでサブディレクトリーを作成します。
mkdir -p /usr/share/foreman/config/hooks/host/managed/before_provision/
# mkdir -p /usr/share/foreman/config/hooks/host/managed/before_provision/Copy to Clipboard Copied! Toggle word wrap Toggle overflow スクリプトをダウンロードし、適切な名前が指定されたディレクトリーがすでに作成されている場合は、以下のように
installコマンドを使用して SELinux コンテキストが正しいことを確認します。install hook_script /usr/share/foreman/config/hooks/object/event/hook_script
install hook_script /usr/share/foreman/config/hooks/object/event/hook_scriptCopy to Clipboard Copied! Toggle word wrap Toggle overflow または、イベントサブディレクトリーに直接スクリプトを作成した場合は、
rootで以下のコマンドを入力して SELinux コンテキストを適用します。restorecon -RvF /usr/share/foreman/config/hooks
# restorecon -RvF /usr/share/foreman/config/hooksCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 7 での SELinux コンテキストは
foreman_hook_tです。スクリプトは制限のある状態で実行されるため、一部のアクションが SELinux によって拒否される場合があることに注意してください。SELinux により拒否されたアクションを確認するには、aureport -aを実行するか、/var/log/audit/audit.logを調べます。SELinux の問題のデバッグと
audit2allowユーティリティーの使用の詳細については、以下のトピックを参照してください。- Red Hat Enterprise Linux 7 の場合は、Fixing Problems[9] を参照してください。
13.2.3. Foreman フックを作成してロガーコマンドを使用 リンクのコピーリンクがクリップボードにコピーされました!
このフックスクリプトは、Foreman が新しいサーバーをプロビジョニングするたびに追加のログメッセージを作成します。
手順
Satellite Server ベースシステムでディレクトリー構造を作成します。
mkdir -p /usr/share/foreman/config/hooks/host/managed/before_provision/
# mkdir -p /usr/share/foreman/config/hooks/host/managed/before_provision/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のようにスクリプトを作成します。
vi /usr/share/foreman/config/hooks/host/managed/before_provision/_10__logger.sh
# vi /usr/share/foreman/config/hooks/host/managed/before_provision/_10__logger.sh #!/bin/bash logger $1 $2Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイル名
_logger.shの前の数値の接頭辞 10 により、同じサブディレクトリー内のスクリプトの実行順序が決定されます。必要に応じてこの接頭辞を変更します。スクリプトの所有者を
foremanに変更します。chown foreman:foreman /usr/share/foreman/config/hooks/host/managed/before_provision/_10__logger.sh
# chown foreman:foreman /usr/share/foreman/config/hooks/host/managed/before_provision/_10__logger.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーによる実行を許可するためにスクリプトのパーミッションを変更します。
chmod u+x /usr/share/foreman/config/hooks/host/managed/before_provision/_10__logger.sh
# chmod u+x /usr/share/foreman/config/hooks/host/managed/before_provision/_10__logger.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux コンテキストが
/usr/share/foreman/config/hooksディレクトリー内のすべてのファイルで正しいことを確認します。restorecon -RvF /usr/share/foreman/config/hooks/
# restorecon -RvF /usr/share/foreman/config/hooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow foremanユーザーがloggerコマンドを使用できるようにするために、以下のルールを/etc/sudoersファイルに追加します。vi /etc/sudoers
# vi /etc/sudoers foreman ALL=(ALL) NOPASSWD:/usr/bin/loggerCopy to Clipboard Copied! Toggle word wrap Toggle overflow Satellite サービスを再起動して、フックを登録します。
foreman-maintain service restart
# foreman-maintain service restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
各 Foreman または Rail オブジェクトにはフックを含めることができます。/usr/share/foreman/app/models/ ディレクトリーを確認するか、利用可能なモデルの完全なリストを取得するために、以下のコマンドを入力します。
foreman-rake console
# foreman-rake console
>
ActiveRecord::Base.descendants.collect(&:name).collect(&:underscore).sort
=> ["audited/adapters/active_record/audit", "compute_resource", "container",
output truncated
このコマンド出力は、Foreman フックで使用されない可能性が高いいくつかの技術的な表 ("active_record" や "habtm" など) も一覧表示します。一般的に使用されるものは以下のとおりです。
- host
- report
13.2.4. オーケストレーションイベント リンクのコピーリンクがクリップボードにコピーされました!
Foreman は、オブジェクトが作成、更新、および破棄された際に、ホストおよびネットワークインターフェース (オブジェクトと呼ばれます) 向けのオーケストレーションタスクをサポートします。これらのタスクは Web UI でユーザーに表示されます。タスクが失敗した場合は、アクションのロールバックが自動的にトリガーされます。オーケストレーションフックには優先度を割り当てることができるため、組み込みオーケストレーション手順の前または後 (たとえば、DNS レコードがデプロイされる前) にオーケストレーションフックを呼び出すことができます。
フックをイベントに追加するには、以下のイベント名を使用します。
- create
- update
- destroy
13.2.5. Rails イベント リンクのコピーリンクがクリップボードにコピーされました!
(上述したオーケストレーションをサポートする) ホストと NIC 以外のものに対するフックの場合は、標準的な Rails イベントを使用できます。各イベントには "before" フックと "after" フックがあります。提供される最も興味深いイベントは以下のとおりです。
- after_create
- before_create
- after_destroy
- before_destroy
ホストオブジェクトでは、以下の 2 つの追加コールバックを使用できます。
-
host/managed/after_buildは、ホストがビルドモードになると開始されます。 -
host/managed/before_provisionは、ホストで OS のインストールが完了すると、開始されます。
Rails イベントの完全なリストについては、Ruby on Rails ActiveRecord::Callbacks[10] ドキュメンテーションの「Constants」を参照してください。
13.2.6. フックの実行 リンクのコピーリンクがクリップボードにコピーされました!
フックは Foreman サーバーのコンテキスト (したがって、通常は foreman ユーザー下) で実行されます。最初の引数は常にイベント名であり、スクリプトを複数のイベントディレクトリーにシンボリックリンクすることを可能にします。2 つ目の引数はフックされたオブジェクトの文字列表現 (たとえば、ホストのホスト名) です。
~foreman/config/hooks/host/managed/create/50_register_system.sh create foo.example.com
~foreman/config/hooks/host/managed/create/50_register_system.sh create foo.example.com
フックオブジェクトの JSON 表現は標準入力で渡されます。この JSON は v2 API ビューによって生成されます。jgrep でこれを読み取るユーティリティーは examples/hook_functions.sh で提供され、ほとんどのユーザーにとっては、このユーティリティースクリプトを source コマンドで実行するだけで十分です。それ以外の場合は、パイプバッファーが満杯になり、Foreman スレッドがブロックされることを防ぐために、標準入力を閉じることが推奨されます。
echo '{"host":{"name":"foo.example.com"}}' \
| ~foreman/config/hooks/host/managed/create/50_register_system.sh \
create foo.example.com
echo '{"host":{"name":"foo.example.com"}}' \
| ~foreman/config/hooks/host/managed/create/50_register_system.sh \
create foo.example.com
イベントディレクトリー内の各フックは、アルファベット順に実行されます。オーケストレーションフックの場合は、フックのファイル名の整数接頭辞が優先度値として使用されます。このため、DNS、DHCP、VM 作成、および他のタスクに関連して実行するタイミングが影響を受けます。
13.2.7. フックの失敗とロールバック リンクのコピーリンクがクリップボードにコピーされました!
フックが失敗し、ゼロ以外のリターンコードで終了した場合は、イベントがログに記録されます。Rails イベントの場合は、他のフックの実行が続行されます。オーケストレーションイベントの場合は、失敗によってアクションが中止され、ロールバックが実行されます。別のオーケストレーションアクションが失敗した場合は、そのアクションをロールバックするためにフックが再び呼び出されることがあります。この場合は、最初の引数が適切に変更されるため、スクリプトで処理する必要があります (たとえば、"create" フックは、あとでロールバックする必要がある場合、"destroy" とともに呼び出されます)。