9.2. Foreman フックの使用


Foreman のホストオーケストレーションは、追加のタスクを実行できるようにフックで拡張できます。Foreman フックを使用すると、ホストの作成時やホストのプロビジョニングの完了時など、オーケストレーションイベントが発生したときにスクリプト(どの実行可能ファイルでも使用できます)をトリガーできます。さらに、フックは、全スクリプトで、どの Foreman オブジェクトの標準的な Rails コールバックでも作成できます。
注記
Foreman フックは Satellite でワークフローを変更できるため、Red Hat からサポートを受けるためにすべてのフックを削除するように要求される場合があります。また、アップグレード前に Foreman フックを削除してから、Satellite が想定どおりに動作していることを確認した後に復元する必要があります。
Foreman フックは、デフォルトでインストールされる tfm-rubygem-foreman_hooks パッケージにより提供されます。必要に応じて、パッケージがインストールされ、最新の状態であることを確認するために、root で次のコマンドを実行します。
# 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 do
Copy to Clipboard Toggle word wrap
Foreman フックは /usr/share/foreman/config/hooks/ に保存されます。各 Foreman オブジェクトにサブディレクトリーを作成し、各イベント名に追加のサブディレクトリーを作成する必要があります。Foreman オブジェクトは、ホストまたはネットワークインターフェイスです。フックへのパスは以下のとおりです。
/usr/share/foreman/config/hooks/object/event/hook_script
Copy to Clipboard Toggle word wrap
たとえば、ホストでオペレーティングシステムのインストールが完了した後にフックをアクティベートするために、以下のコマンドでサブディレクトリーを作成します。
# mkdir -p /usr/share/foreman/config/hooks/host/managed/before_provision/
Copy to Clipboard Toggle word wrap
スクリプトをダウンロードし、適切な名前が付けられたディレクトリーがすでに作成されている場合は、以下のように install コマンドを使用して SELinux コンテキストが正しいことを確認します。
install hook_script /usr/share/foreman/config/hooks/object/event/hook_script
Copy to Clipboard Toggle word wrap
または、イベントサブディレクトリーに直接スクリプトを作成した場合は、root で SELinux コンテキストを適用します。
# restorecon -RvF /usr/share/foreman/config/hooks
Copy to Clipboard Toggle word wrap
SELinux コンテキストは、Red Hat Enterprise Linux 6 の bin_t と Red Hat Enterprise Linux 7 の foreman_hook_t です。スクリプトは制限のあるため、一部のアクションが SELinux によって拒否される可能性があることに注意してください。aureport -a を実行するか、/var/log/audit/audit.log を確認して、SELinux が拒否したアクションを確認します。
SELinux の問題のデバッグと audit2allow ユーティリティーの使用の詳細については、以下のドキュメントを参照してください。

手順9.1 Foreman フックを作成してロガーコマンドを使用

このフックスクリプトは、Foreman が新しいサーバーをプロビジョニングするたびに追加のログメッセージを作成します。
  1. Satellite Server ベースシステムでディレクトリー構造を作成します。
    # mkdir -p /usr/share/foreman/config/hooks/host/managed/before_provision/
    Copy to Clipboard Toggle word wrap
  2. 以下のようにスクリプトを作成します。
    # vi /usr/share/foreman/config/hooks/host/managed/before_provision/10_logger.sh
    #!/bin/bash/
    logger $1 $2
    Copy to Clipboard Toggle word wrap
    数値の接頭辞 10 は、ファイル名 _logger.sh に付けられ、同じサブディレクトリー内のスクリプトの実行順序を決定します。この接頭辞は、ニーズに合わせて変更してください。
  3. スクリプトの所有者を foreman に変更します。
    # chown foreman:foreman 10_logger.sh
    Copy to Clipboard Toggle word wrap
  4. ユーザーによる実行を許可するためにスクリプトのパーミッションを変更します。
    # chmod u+x 10_logger.sh
    Copy to Clipboard Toggle word wrap
  5. /usr/share/foreman/config/hooks ディレクトリー内のすべてのファイルで SELinux コンテキストが正しいことを確認します。
    # restorecon -RvF /usr/share/foreman/config/hooks/
    Copy to Clipboard Toggle word wrap
  6. foreman ユーザーが ロガー コマンドを使用できるようにするには、以下のルールを /etc/sudoers ファイルに追加します。
    # vi /etc/sudoers
    foreman ALL=(ALL) NOPASSWD:/usr/bin/logger
    Copy to Clipboard Toggle word wrap
  7. フックを登録するために Foreman サービスを再起動します。
    # touch ~foreman/tmp/restart.txt
    Copy to Clipboard Toggle word wrap
各 Foreman または Rail オブジェクトにはフックを指定できます。/usr/share/app/models/ ディレクトリーを確認するか、利用可能なモデルの完全なリストを取得するには、以下のコマンドを入力します。
# foreman-rake console
>	ActiveRecord::Base.descendants.collect(&:name).collect(&:underscore).sort
=> ["audited/adapters/active_record/audit", "compute_resource", "container",
output truncated
Copy to Clipboard Toggle word wrap
このコマンド出力には、Foreman フックでは使用できないテクニカルテーブルもリストされています(例:"active_record" や "habtm"。以下は最も一般的に使用されます。
  • host
  • report

9.2.1. オーケストレーションイベント

Foreman は、オブジェクトの作成、更新、および破棄時に、ホストおよびネットワークインターフェイス(オブジェクトと呼ばれる)のオーケストレーションタスクをサポートします。これらのタスクは、Web UI でユーザーに表示されます。失敗すると、アクションのロールバックが自動的にトリガーされます。オーケストレーションフックには優先順位を割り当てることができるため、ビルトインオーケストレーション手順の前または後(たとえば DNS レコードがデプロイされる前)にオーケストレーションフックを注文することができます。
フックをイベントに追加するには、以下のイベント名を使用します。
  • create
  • update
  • destroy

9.2.2. 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の下部にある Constants セクションを参照してください。[14] ドキュメント。

9.2.3. フックの実行

フックは Foreman サーバーのコンテキストで実行されるため、通常は foreman ユーザーの下で実行されます。最初の引数は常にイベント名であり、スクリプトを複数のイベントディレクトリーにシンボリックリンクできます。2 つ目の引数は、フックされたオブジェクトの文字列表現です。たとえば、ホストのホスト名です。
~foreman/config/hooks/host/managed/create/50_register_system.sh create foo.example.com
Copy to Clipboard Toggle word wrap
フックオブジェクトの JSON 表現は、標準入力で渡されます。この JSON は、v2 API ビューによって生成されます。jgrep でこれを読み取るためのユーティリティーは、examples/hook_functions.sh で提供され、多くのユーザーにとっては、このユーティリティースクリプトを利用するのに十分です。そうしないと、Foreman スレッドがブロックされるパイプバッファーがいっぱいにならないように、標準入力を閉じることが推奨されます。
echo '{"host":{"name":"foo.example.com"}}' \
  | ~foreman/config/hooks/host/managed/create/50_register_system.sh \
       create foo.example.com
Copy to Clipboard Toggle word wrap
イベントディレクトリー内のすべてのフックは、アルファベット順に実行されます。オーケストレーションフックの場合は、フックのファイル名の整数の接頭辞が優先度の値として使用されます。これにより、DNS、DHCP、VM 作成、およびその他のタスクに関連して実行されるタイミングに影響します。

9.2.4. フックの失敗とロールバック

フックが失敗し、ゼロ以外の戻りコードで終了する場合、イベントはログに記録されます。Rails イベントの場合、他のフックの実行は継続されます。オーケストレーションイベントの場合、障害はアクションを停止し、ロールバックが発生します。別のオーケストレーションアクションが失敗した場合、フックが再び呼び出されてアクションをロールバックできます。その場合、最初の引数が適切に変更されるため、スクリプトによって実行する必要があります(たとえば、後でロールバックする必要がある場合は、"create" フックは destroy で呼び出されます)。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat