第9章 ホストでのジョブの実行

シェルスクリプトまたは Ansible タスクと Playbook を使用して、Capsules からリモートでホスト上でジョブを実行できます。これはリモート実行と呼ばれます。

作成したカスタムの Ansible ロール、またはダウンロードしたロールの場合、ロールを含むパッケージを Capsule のベースオペレーティングシステムにインストールする必要があります。Ansible ロールを使用する前に、ロールがインストールされている Capsule から Satellite にロールをインポートする必要があります。

通信は Capsule Server 経由で行われます。これは、Satellite Server にはターゲットホストへの直接のアクセスが不要であり、多数のホストを管理するためにスケーリング可能であることを意味します。リモート実行は SSH サービスを使用します。これは、ターゲットホストで有効化され、実行されている必要があります。リモート実行 Capsule が、ターゲットホストのポート 22 にアクセスできることを確認してください。

Satellite は、ERB 構文のジョブテンプレートを使用します。詳細は、付録A テンプレート作成の参照 を参照してください。

Shell スクリプトおよび Ansible のジョブテンプレートが複数、デフォルトで含まれています。詳細は、「ジョブテンプレートのセットアップ」 を参照してください。

デフォルトでは、Satellite Server はリモート実行ではなく Katello エージェントを使用するように設定されています。この設定を変更するには、管理 > 設定 に移動し、コンテンツ をクリックして、Use remote execution by default の設定を変更します。

注記

Capsule Server のベースオペレーティングシステムは、Satellite Server の内部 Capsule のクライアントであるため、このセクションは Capsule Server を含む Satellite Server に接続されるホストのすべてのタイプに適用されます。

一度に複数のホストでジョブを実行でき、コマンドで変数を使用して、実行するジョブをより詳細に制御できます。ホストファクト、スマートクラスパラメーター、スマート変数、およびホストパラメーターを使用して、変数値を入力できます。Ansible 変数の詳細は、「Satellite での Ansible 変数のオーバーライド」を参照してください。さらに、コマンドを実行するときにテンプレートのカスタム値を指定できます。詳細は、「ジョブの実行」 を参照してください。

9.1. Satellite がリモート実行用に Capsule を選択する方法

ホストでリモートジョブを実行すると、すべてのホストについて、Satellite は以下のアクションを実行して、使用するリモート実行 Capsule を検出します。Satellite は、リモート実行機能が有効になっている Capsule のみを検出します。

  1. Satellite は、リモート実行 のチェックボックスが選択されているホストのインターフェースを検出します。
  2. Satellite はこれらのインターフェースのサブネットを検出します。
  3. Satellite は、これらのサブネットに割り当てられたリモート実行 Capsule を検出します。
  4. この Capsule のセットから、Satellite は実行中のジョブの数が最も少ない Capsule を選択します。こうすることで、Satellite はリモート実行 Capsule 間でのジョブの負荷を確実に分散させます。
  5. この段階で Satellite がリモート実行 Capsule を検出できず、任意の Capsule へのフォールバック 設定が有効になっている場合、Satellite は別の Capsule のセットを追加して、そこからリモート実行 Capsule を選択します。Satellite は、ホストに割り当てられている以下のタイプの Capsule の中から最も負荷の少ない Capsule を選択します。

    • ホストのサブネットに割り当てられた DHCP Capsule、DNS Capsule、および TFTP Capsule
    • ホストのドメインに割り当てられた DNS Capsule
    • ホストのレルムに割り当てられた Realm Capsule
    • Puppet Master Capsule
    • Puppet CA Capsule
    • OpenSCAP Capsule
  6. この段階で Satellite がリモート実行 Capsule を検出せず、グローバル Capsule の有効化 設定が有効になっている場合、Satellite は、ホストの組織およびロケーションにあるすべての Capsule のセットから最も負荷の少ないリモート実行 Capsule を選択し、リモートジョブを実行します。

9.1.1. Satellite での任意の Capsule へのフォールバックリモート実行の設定

任意の Capsule へのフォールバック 設定を有効にして、ホストに割り当てられている Capsule の一覧からリモート実行 Capsule を検索するように Satellite を設定できます。これは、サブネットが設定されていないホストでリモートジョブを実行する必要がある場合、またはリモート実行機能が有効になっていない Capsule にホストのサブネットが割り当てられている場合に役立ちます。

任意の Capsule へのフォールバック 設定が有効になっている場合、Satellite は別の Capsule のセットを追加して、そこからリモート実行 Capsule を選択します。また、以下のように Satellite は、ホストに割り当てられたすべての Capsule のセットから最も負荷の少ない Capsule を選択します。

  • ホストのサブネットに割り当てられた DHCP Capsule、DNS Capsule、および TFTP Capsule
  • ホストのドメインに割り当てられた DNS Capsule
  • ホストのレルムに割り当てられた Realm Capsule
  • Puppet Master Capsule
  • Puppet CA Capsule
  • OpenSCAP Capsule

手順

  1. Satellite Web UI で、管理 > 設定に移動します。
  2. リモート実行 をクリックします。
  3. 任意の Capsule へのフォールバック を設定します。

CLI をご利用の場合

Satellite で hammer settings set コマンドを入力して、任意の Capsule へのフォールバック を設定します。たとえば、値を true に設定するには、以下のコマンドを入力します。

# hammer settings set --name=remote_execution_fallback_proxy --value=true

9.1.2. Satellite でのグローバル Capsule リモート実行の設定

デフォルトで Satellite は、Capsule がホストのサブネットに割り当てられているかどうかに関係なく、ホストの組織とロケーションでリモート実行 Capsule を検索します。ホストのサブネットに割り当てられている Capsule に検索を限定する場合は、グローバル Capsule の有効化 設定を無効化することができます。

グローバル Capsule の有効化 設定が有効になっている場合、Satellite は別の Capsule のセットを追加して、そこからリモート実行 Capsule を選択します。また、Satellite は、ホストの組織およびロケーションにあるすべての Capsule のセットから最も負荷の少ないリモート実行 Capsule を選択し、リモートジョブを実行します。

手順

  1. Satellite Web UI で、管理 > 設定に移動します。
  2. リモート実行 をクリックします。
  3. グローバル Capsule の有効化 を設定します。

CLI をご利用の場合

Satelliteで hammer settings set コマンドを入力して、Enable Global Capsule を設定します。たとえば、値を true に設定するには、以下のコマンドを入力します。

# hammer settings set --name=remote_execution_global_proxy --value=true

9.2. 代替ディレクトリーを使用してクライアントでリモートジョブを実行するための Satellite の設定

デフォルトで Satellite は、クライアントシステムの /var/tmp ディレクトリーを使用して、リモート実行ジョブを実行します。クライアントシステムの /var/ ボリュームまたはファイルシステムに noexec が設定されている場合は、代替ディレクトリーを使用するように Satellite を設定する必要があります。設定されない場合はスクリプトを実行できないので、リモート実行ジョブは失敗します。

手順

オプション: 代替ディレクトリーを使用するには、この手順を実行します。

  1. 新しいディレクトリーを作成します (例: new_place )。

    # mkdir /remote_working_dir
  2. デフォルトの var ディレクトリーから SELinux コンテキストをコピーします。

    # chcon --reference=/var /remote_working_dir
  3. /etc/foreman-proxy/settings.d/remote_execution_ssh.yml ファイルの remote_working_dir 設定を編集して、必要なディレクトリーにポイントさせます。以下に例を示します。

    :remote_working_dir: /remote_working_dir

9.3. リモート実行のための SSH 鍵の配布

リモート実行接続の認証に SSH 鍵を使用するには、Capsule から管理するアタッチ済みのホストに、公開 SSH 鍵を配布する必要があります。ホストで SSH サービスが有効化され、実行していることを確認します。ポート 22 にアクセスできるように、ネットワークまたはホストベースのファイアウォールを設定し、ポート 22 へのアクセスを有効化します。

Capsule からターゲットホストに公開 SSH 鍵を配布するには、以下のいずれか 1 つの方法を使用します。

Satellite は、リモート実行機能の SSH 鍵を、デフォルトで Satellite からプロビジョニングされたホストに配布します。

9.3.1. リモート実行用の SSH 鍵の手動での配布

SSH 鍵を手動で配布するには、以下の手順を実行します。

手順

  1. Capsule で以下のコマンドを入力します。管理するターゲットホストごとに繰り返します。

    # ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@target.example.com
  2. ターゲットホストに鍵が正常にコピーされたことを確認するには、Capsule で以下のコマンドを入力します。

    # ssh -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy root@target.example.com

9.3.2. Satellite API を使用したリモート実行用の SSH 鍵の取得

Satellite API を使用して Capsule から公開鍵をダウンロードするには、各ターゲットホストでこの手順を実行します。

手順

  1. ターゲットホストで、/.ssh ディレクトリーを作成して、SSH 鍵を保存します。

    # mkdir ~/.ssh
  2. Capsule から SSH 鍵をダウンロードします。

    # curl https://capsule.example.com:9090/ssh/pubkey >> ~/.ssh/authorized_keys
  3. ~/.ssh ディレクトリーのパーミッションを設定します。

    # chmod 700 ~/.ssh
  4. authorized_keys ファイルのパーミッションを設定します。

    # chmod 600 ~/.ssh/authorized_keys

9.3.3. プロビジョニング中に SSH 鍵を配布するキックスタートテンプレートの設定

remote_execution_ssh_keys スニペットをカスタムキックスタートテンプレートに追加して、プロビジョニング中に SSH 鍵をホストにデプロイできます。Satellite に同梱されるキックスタートテンプレートには、デフォルトでこのスニペットが含まれています。したがって、Satellite はプロビジョニング中にリモート実行用の SSH 鍵をシステムにコピーします。

手順

  • 新しくプロビジョニングされたホストに公開鍵を含めるには、使用するキックスタートテンプレートに以下のスニペットを追加します。

    <%= snippet 'remote_execution_ssh_keys' %>

9.4. Kerberos チケットを付与するための Keytab の設定

以下の手順を使用して、Satellite が Keytab を使用して Kerberos 付与チケットを取得するように設定します。Keytab が設定されていないと、手動でチケットを取得する必要があります。

手順

以下の手順を実行して、Satellite の foreman-proxy ユーザーが Kerberos 付与チケットを取得できるようにします。

  1. foreman-proxy ユーザーの ID を特定します。

    # id -u foreman-proxy
  2. 新しいファイルのパーミッションが 600 になるように、umask の値を変更します。

    # umask 077
  3. Keytab のディレクトリーを作成します。

    # mkdir -p "/var/kerberos/krb5/user/USER_ID"
  4. Keytab を作成するか、既存の Keytab をディレクトリーにコピーします。

    # cp your_client.keytab /var/kerberos/krb5/user/USER_ID/client.keytab
  5. ディレクトリーの所有者を foreman-proxy ユーザーに変更します。

    # chown -R foreman-proxy:foreman-proxy "/var/kerberos/krb5/user/USER_ID"
  6. keytab ファイルが読み取り専用であることを確認します。

    # chmod -wx "/var/kerberos/krb5/user/USER_ID/client.keytab"
  7. SELinux コンテキストを復元します。

    # restorecon -RvF /var/kerberos/krb5

9.5. リモート実行用の Kerberos 認証の設定

Satellite 6.6 以降、Kerberos 認証を使用して、Satellite ホストでのリモート実行に SSH 接続を確立できます。

前提条件

Red Hat Satellite でリモート実行に Kerberos 認証情報を使用する前に、ID 管理に Kerberos サーバーを設定し、以下の前提条件を完了していることを確認します。

  • Kerberos サーバーに Satellite Server を登録する。
  • Kerberos サーバーに Satellite ターゲットホストを登録する。
  • リモート実行用に Kerberos ユーザーアカウントを設定して初期化する。
  • Satellite の foreman-proxy ユーザーに、チケットを付与する有効な Kerberos チケットがあることを確認する。

手順

ホストでリモート実行に Kerberos 認証情報を使用するように Satellite を設定するには、以下の手順を完了します。

  1. Red Hat Bugzilla 1541481 が解決するまで、tfm-rubygem-net-ssh-krb パッケージをインストールする前に、一時的に SELinux を permissive に設定する必要があります。

    # setenforce 0
  2. tfm-rubygem-net-ssh-krb パッケージをインストールするには、以下のコマンドを入力します。

    # yum install tfm-rubygem-net-ssh-krb
  3. リモート実行に Kerberos 認証をインストールおよび有効にするには、以下のコマンドを入力します。

    # satellite-installer --scenario satellite \
     --foreman-proxy-plugin-remote-execution-ssh-ssh-kerberos-auth true
  4. SELinux を enforcing に設定します。

    # setenforce 1
  5. リモート実行のデフォルトユーザーを編集するには、Satellite Web UI で 管理 > 設定 に移動して、リモート実行 タブをクリックします。remote_execution_ssh_user 行で 2 番目のコラムを編集し、Kerberos アカウントのユーザー名を追加します。
  6. remote_execution_effective_user に移動し、2 番目のコラムを編集して、Kerberos アカウントのユーザー名を追加します。

    BZ#1728612 が解決されるまで、sudo のみが、Ansible で機能する become_method となっています。

Kerberos 認証が使用できることを確認するには、ホストでリモートジョブを実行します。

9.6. リモートジョブの設定および実行

リモートホストで適用するコマンドはジョブテンプレートとして定義する必要があります。ジョブテンプレートを定義した後はこれを複数回使用することができます。

9.6.1. ジョブテンプレートのセットアップ

Satellite は、ジョブ実行に使用可能なデフォルトのジョブテンプレートを提供します。ジョブテンプレートの一覧を表示するには、ホスト > ジョブテンプレート に移動します。変更せずにテンプレートを使用する場合には、「ジョブの実行」に進んでください。

デフォルトテンプレートは独自のテンプレートを作成するためのベースとして使用することもできます。デフォルトのジョブテンプレートは、編集できないようにロックされているので、テンプレートのクローンを作成して、このクローンを編集してください。

  1. テンプレートのクローンを作成するには、アクション コラムで、クローン を選択します。
  2. クローンに一意名を指定して、送信 をクリックして変更を保存します。

ジョブテンプレートは、Embedded Ruby (ERB) 構文を使用します。テンプレートの作成に関する詳細は、付録A テンプレート作成の参照 を参照してください。

Ansible の考慮事項

Ansible ジョブテンプレートを作成するには、以下の手順を使用し、ERB 構文ではなく YAML 構文を使用します。テンプレートは --- で開始し、1 行目に - hosts: all を追加する必要があります。Ansible Playbook YAML ファイルをジョブテンプレートの本文に埋め込みます。また、ERB 構文を追加して、YAML Ansible テンプレートをカスタマイズすることも可能です。Satellite に Ansible Playbook をインポートすることも可能です。詳細は、12章テンプレートリポジトリーの同期 を参照してください。

Ansible become_method の制約

BZ#1728612 が解決されるまで、remote_execution_effective_user の設定では、sudo のみが、Ansible で機能する become_method となっています。

パラメーター変数

ランタイム時に、ジョブテンプレートはホストに定義するパラメーター変数を受け取ることができます。ホストの編集ページの パラメーター タブでのみ表示できるパラメーターは、ジョブテンプレートの入力パラメーターとして使用できる点にご留意ください。ランタイム時に Ansible ジョブテンプレートでパラメーター変数を受け取れない場合には、Satellite Web UI で 管理 > 設定 に移動して、Ansible タブをクリックします。トップレベルの Ansible 変数 の行で、Value パラメーターを No に変更します。

ジョブテンプレートの作成方法:

  1. ホスト > ジョブテンプレート に移動します。
  2. 新規ジョブテンプレート をクリックします。
  3. テンプレート タブをクリックして、名前 フィールドに、ジョブテンプレートの一意名を入力します。
  4. デフォルト を選択して、テンプレートをすべての組織およびロケーションで利用できるようにします。
  5. テンプレートエディターで直接テンプレートを作成するか、インポート をクリックしてテキストファイルからテンプレートをアップロードします。
  6. オプション: 監査コメント フィールドで、変更に関する情報を追加します。
  7. ジョブ タブをクリックして、ジョブカテゴリー フィールドに、独自のカテゴリーを入力するか、表9.1「デフォルトのジョブテンプレートカテゴリー」に記載のデフォルトカテゴリーから選択します。
  8. オプション: Description Format フィールドで、Install package %{package_name} など、記述テンプレートを入力します。また、テンプレートでは %{template_name} および %{job_category} も使用できます。
  9. プロバイダータイプ リストから、Shell スクリプトに SSH を、Ansible タスクまたは Playbook にAnsible を選択します。
  10. オプション: Timeout to kill フィールドで、ジョブが完了しない場合に、ジョブを中断するタイムアウトの値を入力します。
  11. オプション: 入力を追加 をクリックし、入力パラメーターを定義します。ジョブの実行時にパラメーターを要求し、テンプレートに定義する必要はありません。各種サンプルについては、ヘルプ タブを参照してください。
  12. オプション: 外部入力セット をクリックして、このジョブの他のテンプレートを追加します。
  13. オプション: 実効ユーザー エリアで、コマンドでデフォルトの remote_execution_effective_user 設定を使用できない場合に、ユーザーを設定します。
  14. オプション: このテンプレートをスニペットとして他のテンプレートを追加する場合には、タイプ タブをクリックして、スニペット を選択します。
  15. ロケーション タブをクリックして、テンプレートを使用するロケーションを追加します。
  16. 組織 タブをクリックして、テンプレートを使用する組織を追加します。
  17. 送信 をクリックして変更を保存します。

テンプレートの構文に他のテンプレートを追加して、詳細なテンプレートを作成できます。詳細は、「詳細テンプレートの作成」 を参照してください。

たとえば、電源関連のアクションを実行するには詳細なテンプレートが必要になります。Power Action - SSH Default テンプレートをカスタムテンプレートに組み込む方法は、例9.4「テンプレートにパワー操作を組み込む」 を参照してください。

CLI をご利用の場合

テンプレート定義ファイルを使用してジョブテンプレートを作成するには、以下のコマンドを使用します。

# hammer job-template create \
--file "path_to_template_file" \
--name "template_name" \
--provider-type SSH \
--job-category "category_name"

表9.1 デフォルトのジョブテンプレートカテゴリー

ジョブテンプレートのカテゴリー説明

Packages

パッケージ関連のアクションを実行するためのテンプレートです。デフォルトで、インストール、更新、および削除アクションが含まれています。

Puppet

ターゲットホストで Puppet ホストを実行するためのテンプレートです。

Power

パワー関連のアクションを実行するためのテンプレートです。デフォルトで、再起動およびシャットダウンアクションが含まれます。

Commands

リモートホストでカスタムコマンドを実行するためのテンプレートです。

Services

サービス関連のアクションを実行するためのテンプレートです。デフォルトで、開始、停止、再起動、およびステータスアクションが含まれます。

Katello

コンテンツ関連のアクションを実行するためのテンプレートです。これらのテンプレートは主として Satellite Web UI の各種の場所で使用されます (たとえば、コンテンツホストの一括操作のための UI など)が、エラータのインストールなどの各種操作を実行するために個別に使用できます。

例9.1 restorecon テンプレートの作成

この例は、Run Command - restorecon というテンプレートを作成する方法を示します。これは、ターゲットホストで選択したディレクトリー内の全ファイルに対して、デフォルトの SELinux コンテキストを復元します。

  1. ホスト > ジョブテンプレート に移動して、新規ジョブテンプレート をクリックします。
  2. 名前 フィールドに Run Command - restorecon と入力します。デフォルト を選択して、テンプレートをすべての組織で利用できるようにします。以下のテキストをテンプレートエディターに追加します。

    restorecon -RvF <%= input("directory") %>

    <%= input("directory") %> の文字列は、ジョブの呼び出し時にユーザー定義のディレクトリーに置き換えられます。

  3. ジョブ タブで、ジョブカテゴリーCommands に設定します。
  4. 入力を追加 をクリックして、ジョブのカスタマイズを可能にします。名前 フィールドに directory と入力します。入力する名前は、テンプレートエディターで指定した値と一致している必要があります。
  5. 必須 をクリックし、ユーザーがパラメーターを指定しなければコマンドが実行しないようにします。
  6. 入力タイプ リストから ユーザー入力 を選択します。ジョブの呼び出し中に表示する説明を入力します (例: Target directory for restorecon)。
  7. 送信 をクリックします。

このテンプレートに基づいてジョブを実行する方法は、例9.2「複数のホストでの restorecon テンプレートの実行」を参照してください。

9.6.2. ジョブの実行

このセクションでは、1 つ以上のホストに対してジョブテンプレートに基づくジョブを実行する方法を説明します。

リモートジョブを実行する方法:

  1. ホスト > すべてのホスト に移動し、ジョブのターゲットホストを選択します。検索フィールドを使用してホストの一覧を絞り込むことができます。
  2. アクションの選択 一覧から リモートジョブのスケジュール を選択します。
  3. ジョブ呼び出し ページで、主なジョブ設定を定義します。

    1. 使用する ジョブカテゴリー およびジョブテンプレートを選択します。
    2. オプションとして、ブックマーク の一覧に保存された検索文字列を選択し、ターゲットホストを指定します。
    3. オプションとして、検索クエリー を入力し、ターゲットホストの範囲をさらに狭めることができます。解決 行には、クエリーの影響を受けるホストの数が表示されます。更新ボタンを押して、クエリーを変更した後の数を再計算します。プレビューアイコンにはターゲットホストが一覧表示されます。
    4. 残りの設定は、選択したジョブテンプレートによって異なります。カスタムパラメーターをテンプレートに追加する方法は「ジョブテンプレートの作成方法:」を参照してください。
  4. 詳細フィールドを表示 をクリックすると、ジョブの詳細設定が表示されます。一部の詳細設定はジョブテンプレートによって異なります。以下は一般的な設定です。

    • 実効ユーザー: ジョブを実行するためにユーザーを定義します。デフォルトは SSH ユーザーです。
    • 同時実行レベル は一度に実行するジョブの最大数を定義します。この定義で、大規模ホストでジョブを実行する時に、システムのリソースに負荷が過剰にかかるのを防ぐことができます。
    • タイムスパン は、ジョブが終了していない場合に、強制終了するまでの間隔 (秒単位) で定義します。以前のタスクが終了するまで時間がかかりすぎているなど、定義した間隔で起動できなかったタスクはキャンセルされます。
    • クエリーのタイプ: 検索クエリーが評価されるタイミングを定義します。これは、スケジュールされているタスクに対してクエリーが常に最新の状態に保つのに役立ちます。

      同時実行レベル 設定および タイムスパン 設定により、お使いのインフラストラクチャーハードウェアおよびニーズに合わせてジョブ実行を調整します。

  5. ジョブをすぐに実行する場合は、スケジュール今すぐ実行 に設定されていることを確認します。さらに、 1 回限りのジョブを未来の日付で定義したり、再帰的に実行するジョブを設定することもできます。再帰的に実行するジョブについては、開始日と終了日、実行回数と頻度を定義できます。また cron 構文を使用して繰り返しを定義することもできます。詳細は Red Hat Enterprise Linux 7 の『システム管理者のガイド』の「システムタスクの自動化」セクションを参照してください。
  6. 送信 をクリックします。これにより ジョブの概要 ページが表示され、ジョブの完了時にはジョブのステータスも表示されます。

CLI をご利用の場合

Satellite で以下のコマンドを入力します。

+

# hammer settings set --name=remote_execution_global_proxy --value=false

カスタムパラメーターを使用してリモートジョブを実行するには、以下の手順を実行します。

  1. 使用するジョブテンプレートの ID を検出します。

    # hammer job-template list
  2. テンプレートの詳細を表示して、テンプレートに必要なパラメーターを確認します。

    # hammer job-template info --id template_ID
  3. カスタムパラメーターでリモートジョブを実行します。

    # hammer job-invocation create \
    --job-template "template_name" \
    --inputs key1="value",key2="value",... \
    --search-query "query"

    query は、ホストを定義するフィルター式に置き換えます ("name ~ rex01" など)。hammer を使用したリモートコマンド実行に関する詳細については、hammer job-template --help および hammer job-invocation --help を入力します。

例9.2 複数のホストでの restorecon テンプレートの実行

以下の例では、例9.1「restorecon テンプレートの作成」 で作成されたテンプレートに基づいて、複数のホストでジョブを実行する方法を示します。このジョブは、/home/ ディレクトリー配下のすべてのファイルで SELinux コンテキストを復元します。

  1. ホスト > すべてのホスト に移動し、ターゲットホストを選択します。アクションの選択 リストで、リモートジョブのスケジュール を選択します。
  2. ジョブ呼び出し ページで、Commands ジョブカテゴリーを選択し、Run Command - restorecon ジョブテンプレートを選択します。
  3. directory フィールドに、/home と入力します。
  4. スケジュールExecute now に設定します。
  5. 送信 をクリックします。ジョブ呼び出し ページに移動します。ここでジョブ実行のステータスを監視できます。

9.6.3. ジョブの監視

実行中のジョブの進捗を監視できます。これは、トラブルシューティングが必要になる場合に役立ちます。

ジョブを監視する方法:

  1. ジョブのページに移動します。このページは、Execute now が設定されているジョブをトリガーすると自動的に表示されます。スケジュールされたジョブを監視するには、監視 > ジョブ に移動して、検査するジョブ実行を選択します。
  2. ジョブページで、ホスト タブをクリックします。これにより、ジョブが実行しているホストの一覧が表示されます。
  3. ホスト コラムで、検査するホストの名前をクリックします。これにより、ジョブの実行をリアルタイムで監視できる コマンドの詳細 ページが表示されます。
  4. いつでも ジョブに戻る をクリックして、ジョブの詳細 ページに戻ることができます。

CLI をご利用の場合

実行中のジョブの進捗を監視するには、次の手順を実行します。

  1. ジョブの ID を検出します。

    # hammer job-invocation list
  2. ジョブの出力を監視します。

    # hammer job-invocation output \
    --id job_ID \
    --host host_name
  3. オプション: ジョブをキャンセルするには、次のコマンドを入力します。

    # hammer job-invocation cancel \
    --id job_ID

9.6.4. 詳細テンプレートの作成

ジョブテンプレートの作成時に、テンプレートエディターフィールドで既存のテンプレートを追加できます。こうすることで、テンプレートを組み合わせたり、一般的なテンプレートからより具体的なテンプレートを作成したりできます。

以下のテンプレートを使用してデフォルトのテンプレートを組み合わせ、Red Hat Enterprise Linux システムに httpd サービスをインストールして起動できます。

<%= render_template 'Package Action - SSH Default', :action => 'install', :package => 'httpd' %>
<%= render_template 'Service Action - SSH Default', :action => 'start', :service_name => 'httpd' %>

上記のテンプレートはレンダリングされるテンプレートのパラメーター値を直接指定します。ユーザーがジョブ実行時にレンダリングされたテンプレートへの入力を定義できるようにする input() メソッドを使用することもできます。たとえば、以下の構文を使用できます。

<%= render_template 'Package Action - SSH Default', :action => 'install', :package => input("package") %>

上記のテンプレートを使用して、レンダリングされたテンプレートからパラメーター定義をインポートする必要があります。これを行うには、ジョブ タブに移動して 外部入力セットを追加 をクリックし、ターゲットテンプレート リストで、レンダリングされたテンプレートを選択します。すべてのパラメーターをインポートするか、コンマ区切りの一覧を指定することができます。

例9.3 restorecon テンプレートのレンダリング

この例は、例9.1「restorecon テンプレートの作成」で作成される Run command - restorecon テンプレートから派生するテンプレートを作成する方法を示しています。このテンプレートでは、ジョブ実行時にユーザーが入力する必要はなく、ターゲットホストの /home/ ディレクトリー下のすべてのファイルで SELinux コンテキストを復元します。

「ジョブテンプレートのセットアップ」に従って新規テンプレートを作成し、テンプレートエディター画面で以下の文字列を指定します。

<%= render_template("Run Command - restorecon", :directory => "/home") %>

例9.4 テンプレートにパワー操作を組み込む

以下の例では、再起動などのパワー操作を実行するためのジョブテンプレートをセットアップする方法を示します。この手順は、Satellite が再起動時に切断の例外をエラーとして解釈するのを防ぐため、ジョブのリモート実行が正常に機能します。

「ジョブテンプレートのセットアップ」に従って新規テンプレートを作成し、テンプレートエディター画面で以下の文字列を指定します。

<%= render_template("Power Action - SSH Default", :action => "restart") %>

9.7. リモート実行用のパーミッションの委任

ターゲットにするホストを含め、インフラストラクチャー内で実行するジョブとそれを実行するユーザーを制御できます。リモート実行機能は 2 つの組み込みロールを提供します。

  • Remote Execution Manager (リモート実行マネージャー): このロールは、すべてのリモート実行機能および機能性へのアクセスを許可します。
  • Remote Execution User (リモート実行ユーザー): このロールは、ジョブの実行のみを許可します。ジョブテンプレートを変更するパーミッションは提供されません。

Remote Execution User (リモート実行ユーザー) ロールのクローンを作成し、そのフィルターをカスタマイズして詳細度を高めることができます。view_job_templates パーミッションでフィルターを調整する場合、ユーザーは一致するジョブテンプレートに基づいてジョブを確認し、トリガーすることのみが可能です。view_hosts パーミッションおよび view_smart_proxies パーミッションを使用すると、ロールに表示されるホストまたは Capsule を制限できます。

execute_template_invocation パーミッションはジョブの実行が開始する直前に確認される特殊なパーミッションです。このパーミッションは、特定のホストで実行できるジョブテンプレートを定義します。これにより、パーミッションの指定時に詳細度をさらに高めることができます。ロールおよびパーミッションの使用については、『Red Hat Satellite の管理』の「ロールの作成および管理」を参照してください。

以下の例は、execute_template_invocation パーミッションのフィルターを示しています。

name = Reboot and host.name = staging.example.com
name = Reboot and host.name ~ *.staging.example.com
name = "Restart service" and host_group.name = webservers

上記の例の最初の行により、選択したホストで Reboot テンプレートを適用できます。2 番目の行は、.staging.example.com で終わる名前を持つホストのプールを定義します。3 番目の行はテンプレートをホストグループにバインドします。

注記

ユーザーに割り当てるパーミッションは時間の経過と共に変更されます。ユーザーに将来実行するスケジュールされたジョブがあり、パーミッションが変更された場合、パーミッションがジョブ実行の直前にチェックされるため、これによる実行の失敗が生じる可能性があります。

9.8. Ansible Runner の設定

Ansible Runner を使用すると、Ansible Playbook を一度に複数のホストで実行する時のパフォーマンスを向上できます。

Ansible Runner は、ホスト 100 台で一括して Ansible Playbook を自動実行するので、特定のホストで実行するジョブをキャンセルできません。Ansible Playbook を全ホスト上で一括して実行してからでないと、ジョブは完了しません。

前提条件

Satellite では、リモート実行を有効にする必要がある。詳細は、9章ホストでのジョブの実行 を参照してください。

手順

Satellite をインストールおよび設定して Ansible Runner を使用するには、以下の手順を行います。

  1. Satellite Server で次のコマンドを入力して、統合 Capsule に ansible-runner パッケージをインストールします。

    # foreman-maintain packages install ansible-runner
  2. Satellite Web UI で、管理 > 設定 に移動して、Ansible タブをクリックします。
  3. Ansible 実行の実装 の行で、Value パラメーターを ansible-runner に変更します。
  4. オプション: Ansible Runner を外部の Capsule にインストールする必要がある場合は、Capsule Server で以下のコマンドを入力します。

    # yum install ansible-runner