自動化実行の使用


Red Hat Ansible Automation Platform 2.5

自動化実行を使用したデプロイ、定義、操作、拡張、委譲の自動化

Red Hat Customer Content Services

概要

このガイドでは、Automation Controller を使用して、企業全体の自動化を定義、操作、拡張、および委譲する方法を説明します。

はじめに

Red Hat Ansible Automation Platform Automation Controller にご興味をお持ちいただきありがとうございます。Automation Controller は、Ansible を利用した環境に制御、ナレッジ、および委譲の機能を追加することにより、複数層からなる複雑なデプロイメントをチームが管理する際に役立ちます。

Automation Controller の使用では、Automation Controller で使用できるすべての機能を説明しています。Playbook、変数、タグなどの概念を含め、Ansible についてある程度の知識があることを前提としています。これらおよびその他の Ansible の概念に関する詳細は、Ansible のドキュメント を参照してください。

Red Hat ドキュメントへのフィードバック (英語のみ)

このドキュメントの改善に関するご意見がある場合や、エラーを発見した場合は、https://access.redhat.com からテクニカルサポートに連絡してリクエストを送信してください。

第1章 Automation Controller の概要

Ansible Automation Platform を使用すると、シンプルで強力なエージェントレスの技術実装により、組織全体のユーザーが自動化コンテンツを共有、精査、管理できるようになります。IT マネージャーは、自動化を個々のチームに適用する方法に関するガイドラインを提供できます。自動化開発者は、複雑なツールやフレームワークに準拠するための運用上のオーバーヘッドを発生させることなく、既存の知識を使用してタスクを作成できます。これは、ハイブリッドクラウドからエッジまでエンドツーエンドの自動化ソリューションをデプロイメントするための、よりセキュアで安定した基盤です。

Ansible Automation Platform には、企業全体で自動化を定義、操作、拡張、委任できる Automation Controller が含まれています。

1.1. リアルタイムの Playbook 出力と調査

Automation Controller を使用すると、各ホストがチェックインする様子を確認しながら、Playbook の実行をリアルタイムで監視できます。特定のタスクとホストの結果を確認し、詳細に調査できます。特定のプレイまたはホストを検索して、該当する結果だけを表示したり、修正が必要なエラーを特定したりできます。

1.2. "Push Button" による自動化

Automation Controller を使用して、Web インターフェイスからお気に入りのプロジェクトにアクセスし、実行を再トリガーします。Automation Controller は入力変数を要求し、認証情報の入力を求め、ジョブを開始および監視し、結果とホストの履歴を表示します。

1.3. 簡素化されたロールベースのアクセス制御と監査

Automation Controller を使用すると、次のことが可能になります。

  • ロールベースのアクセス制御 (RBAC) を使用して、複数の異なるチームや明示的なユーザーに対し、特定のタスクを実行する権限を付与します。タスクの例には、ファイルの表示、作成、変更などがあります。
  • 一部のプロジェクトを非公開にして、一部のユーザーがインベントリーを編集できるようにし、他のユーザーがチェック (ドライラン) モードまたはライブモードで特定のシステムに対して Playbook を実行できるようにします。
  • 特定のユーザーが認証情報を公開せずに認証情報を使用できるようにします。

Automation Controller は、編集されたオブジェクトや起動されたジョブなど、操作の履歴と操作の実行者を記録します。

ユーザーまたはチームにジョブテンプレートを使用するパーミッションを付与する場合は、ジョブテンプレートにパーミッションを直接割り当てることができます。認証情報は、Automation Controller の RBAC システム内の完全なオブジェクトであり、多数のユーザーまたはチームに割り当てて使用できます。

Automation Controller には 監査者 タイプが用意されています。システムレベルの監査者は、システム自動化のすべての側面を確認できますが、自動化を実行または変更する権限はありません。監査者は、REST API から自動化情報を収集するサービスアカウントに役立ちます。

関連情報

1.4. クラウドと自動スケーリングの柔軟性

Automation Controller には、ノードがオンデマンドで設定を要求できるようにする強力なオプションのプロビジョニングコールバック機能が組み込まれています。これはクラウドの自動スケーリングシナリオに最適なソリューションであり、次の機能が含まれています。

  • Cobbler などのプロビジョニングサーバーと統合されており、稼働時間が予測できない管理対象システムに対処します。
  • リモートノードに管理ソフトウェアをインストールする必要はありません。
  • コールバックソリューションは、curl または wget の呼び出しによってトリガーでき、init スクリプト、キックスタート、または preseed に埋め込むことができます。
  • インベントリーにリストされているマシンのみが設定を要求できるようにアクセスを制御できます。

1.5. 最適な RESTful API

Automation Controller REST API は、システム管理アプリケーションにとって理想的な RESTful API であり、すべてのリソースが完全に検出可能でページ分割され、検索可能で、適切にモデル化されています。スタイル付きの API ブラウザーを使用すると http://<server name>/api/ にある API ルートから API を探索でき、すべてのリソースとの関係が表示されます。ユーザーインターフェイスで実行できることはすべて API で実行できます。

1.6. バックアップおよび復元

Ansible Automation Platform はシステムのバックアップと復元ができるため、必要に応じてインスタンスのバックアップとレプリケーションを簡単に行うことができます。

1.7. Ansible Galaxy 統合

Ansible Galaxy requirements.yml ファイルをプロジェクトディレクトリーに追加することで、Automation Controller は Playbook に必要なロールを Galaxy、GitHub、またはローカルのソースコントロールから自動的に取得します。詳細は、Ansible Galaxy サポート を参照してください。

1.8. OpenStack のインベントリーサポート

動的インベントリーのサポートは OpenStack で利用できます。これにより、OpenStack クラウドで実行されている任意の仮想マシンまたはイメージをターゲットにすることができます。

詳細は、OpenStack 認証情報タイプ を参照してください。

1.9. リモートコマンド実行

リモートコマンド実行を使用して、1 人のユーザーの追加、1 つのセキュリティー脆弱性の更新、障害が発生したサービスの再起動など、単純なタスクを実行します。1 つの Ansible プレイとして記述できるタスクであれば、すべてインベントリー内のホストまたはホストのグループで実行できます。そのため、システムを迅速かつ簡単に管理できます。RBAC エンジンと詳細な監査ログにより、どのユーザーが特定のタスクを完了したかがわかります。

1.10. システムトラッキング

ファクトキャッシュ機能を使用してファクトを収集できます。詳細は、ファクトキャッシュ を参照してください。

1.11. 通知の統合

自動化のステータスを追跡します。

次の通知を設定できます。

  • ジョブテンプレート、プロジェクト、または組織全体でスタック可能な通知
  • ジョブの開始、ジョブの成功、ジョブの失敗、およびジョブの承認に関するさまざまな通知 (ワークフローノードの場合)

次の通知ソースがサポートされています。

前述の通知タイプごとに通知メッセージをカスタマイズすることもできます。

1.12. Integrations

Automation Controller は次の統合をサポートしています。

  • Red Hat Satellite 6 の動的インベントリーソース

詳細は、Red Hat Satellite 6 を参照してください。

  • Red Hat Insights の統合により、Insights Playbook を Ansible Automation Platform プロジェクトとして使用できるようになります。

詳細は、Red Hat Ansible Automation Platform 修復のための Red Hat Insights のセットアップ を参照してください。

  • Automation Hub は Automation Controller のコンテンツプロバイダーとして機能し、Automation Controller デプロイメントと Automation Hub デプロイメントの両方を並行して実行する必要があります。

1.13. カスタムの仮想環境

カスタム Ansible 環境のサポートにより、さまざまな Ansible 環境を用意し、さまざまなチームやジョブ用にカスタムパスを指定できます。

1.14. 認証の機能拡張

Automation Controller は以下をサポートしています。

  • LDAP
  • SAML
  • トークンベースの認証

LDAP および SAML のサポートにより、企業のアカウント情報をより柔軟に統合できます。

トークンベースの認証では、統合された OAuth 2 トークンのサポートを通じて、Automation Controller を使用したサードパーティーのツールとサービスの認証が可能になります。

1.15. クラスター管理

クラスターグループのランタイム管理により、スケーリングの設定が可能です。

1.16. ワークフローの機能拡張

複雑なプロビジョニング、デプロイメント、およびオーケストレーションのワークフローをモデル化するには、Automation Controller 拡張ワークフローをいくつかの方法で使用できます。

  • ワークフローのインベントリーのオーバーライド ワークフローの定義時または起動時に、ワークフロー全体でインベントリーをオーバーライドできます。Automation Controller を使用してアプリケーションのデプロイワークフローを定義し、それをさまざまな環境で再利用します。
  • ワークフローの収束ノード 複雑なプロセスをモデル化するときは、続行する前に多くのステップが完了するまで待機する必要がある場合があります。Automation Controller ワークフローはこれを再現できます。ワークフローステップは、前のワークフローステップが適切に完了するまで任意の数だけ待機してから続行できます。
  • ワークフローのネスト 個々のワークフローを、より大きなワークフローのコンポーネントとして、再利用できます。たとえば、プロビジョニングとアプリケーションデプロイメントのワークフローを単一のワークフローに結合することなどが挙げられます。
  • ワークフローの一時停止と承認 ユーザーの介入が必要な承認ノードを含むワークフローを構築できます。これにより、Playbook 間でワークフローを一時停止して、ユーザーがワークフローの次のステップに進むことを承認 (または拒否) できるようになります。

詳細は、Automation Controller のワークフロー を参照してください。

1.17. ジョブの分散

数千台のマシンで実行されているファクト収集ジョブまたは設定ジョブを取得して、Automation Controller クラスター全体に分散できるスライスに分割します。これにより、信頼性の向上、ジョブ完了の高速化、およびクラスターの使用率の向上を実現します。

たとえば、大きなスケールで 15,000 台のスイッチすべてのパラメーターを変更したり、数千ノードの RHEL 環境全体の情報を収集したりできます。

詳細は、ジョブのスライス を参照してください。

1.18. FIPS が有効な環境でのデプロイメントのサポート

Automation Controller は、FIPS などの制限付きモードでデプロイおよび実行できます。

1.19. 組織別のホスト数の制限

多くの大規模組織では、多くの組織間でインスタンスを共有しています。この機能により、スーパーユーザーは、1 つの組織がライセンス付きホストをすべて使用できないように、各組織に割り当てることができるライセンス付きホストの数に上限を設定できます。Automation Controller アルゴリズムでは、組織の上限および全組織の合計ホスト数の変更を考慮します。インベントリーの同期により組織がポリシーに準拠しなくなる場合、インベントリーの更新は失敗します。さらに、スーパーユーザーは、警告を付けてライセンスを余分に割り当てることができます。

1.20. インベントリープラグイン

アップストリームコレクションからの次のインベントリープラグインが使用されます。

  • amazon.aws.aws_ec2
  • community.vmware.vmware_vm_inventory
  • azure.azcollection.azure_rm
  • google.cloud.gcp_compute
  • theforeman.foreman.foreman
  • openstack.cloud.openstack
  • ovirt.ovirt.ovirt
  • awx.awx.tower

1.21. シークレット管理システム

シークレット管理システムを使用すると、Automation Controller で使用するために外部認証情報が保存され、提供されるため、外部認証情報を直接提供する必要はありません。

第2章 インストール後の Ansible Automation Platform へのログイン

Ansible Automation Platform をインストールした後、ログインする必要があります。

手順

  1. インストール完了後に提供されたログイン情報を使用して、Web ブラウザーを開き、サーバー URL https://<CONTROLLER_SERVER_NAME>/ に移動して Ansible Automation Platform にログインします。
  2. インストールプロセス中に指定した認証情報を使用してログインします。

    • デフォルトのユーザー名は admin です。
    • admin のパスワードは指定した値です。
  3. 必要なユーザーの横にある More Actions アイコン をクリックします。
  4. Edit をクリックします。
  5. 必要な詳細を編集し、Save をクリックします。

2.1. サービスアカウントの認証情報を使用したサブスクリプションの確認

Ansible Automation Platform に初めてログインするときは、サブスクリプション情報を追加する必要があります。

すでにサブスクリプションを追加している場合は、SettingsSubscriptionEdit subscription に移動して、サブスクリプションウィザードでサブスクリプションの詳細を更新できます。

前提条件

注記

管理者アクセス権がない場合は、ユーザー名とパスワード タブに Red Hat のユーザー名とパスワードを入力して、サブスクリプションを検索し、Ansible Automation Platform インスタンスに追加できます。

手順

  1. サービスアカウントの認証情報を入力して、プロファイルに関連付けられているサブスクリプションを確認します。

    1. サブスクリプションを見つけるには、Service Account というタブをクリックします。
    2. Client ID フィールドに、サービスアカウントの作成時に受け取ったクライアント ID を入力します。
    3. Client secret フィールドに、サービスアカウントの作成時に受け取ったクライアントシークレットを入力します。サブスクリプションが、Subscription というラベルの付いたリストメニューに表示されます。サブスクリプションを選択します。
  2. サブスクリプションを追加したら、Next をクリックします。
  3. End User License Agreement に同意することを示すボックスをチェックします。
  4. 情報を確認して、Finish をクリックします。
注記

クライアント ID とクライアントシークレットを入力してもサブスクリプションが見つからない場合は、サービスアカウントに正しい権限が設定されていない可能性があります。サービスアカウントの詳細とトラブルシューティングのガイダンスは、Configure Ansible Automation Platform to authenticate through service account credentials を参照してください。

第3章 ユーザーインターフェイス

自動化実行の ユーザーインターフェイス (UI) は、IT オーケストレーションのニーズに対応するグラフィカルなフレームワークを備えています。

ユーザープロファイルや About ページにアクセスしたり、関連ドキュメントを表示したり、ページヘッダーのアイコンを使用してログアウトしたりできます。

ナビゲーションパネルを使用すると、ジョブテンプレートスケジュールプロジェクトインフラストラクチャー管理 などの Automation Controller リソースにすばやくアクセスできます。

3.1. Infrastructure メニュー

Infrastructure メニューでは、次の Automation Controller リソースにすばやくアクセスできます。

3.2. Administration

Administration メニューでは、Automation Controller の管理オプションにアクセスできます。ここから、以下を作成、表示、編集できます。

3.3. Settings メニュー

ユーザーインターフェイスの Settings メニューを使用して、一部の Automation Controller オプションを設定できます。

Settings ページでは、管理者は次の項目を設定できます。

第5章 Automation Controller のジョブ

ジョブは、Ansible Playbook をホストのインベントリーに対して起動する Automation Controller のインスタンスです。

Jobs リストビューには、ジョブとそのステータスのリストが表示され、completed successfully、failed または active (running) ジョブとして表示されます。デフォルトのビューは折りたたまれて (コンパクト)、ジョブ名、ステータス、ジョブタイプ、開始時刻、終了時刻が表示されます。矢印 Arrow アイコンをクリックして、展開し、詳細を表示します。このリストをさまざまな基準で並べ替えたり、検索を実行して目的のジョブをフィルタリングしたりできます。

ジョブリストの展開

この画面から、次のタスクを実行できます。

  • Domains タスクバーで、ドメインを指定して、関連するリソースに簡単にアクセスできます。 Wrench アイコンをクリックして既存のラベルを編集するか、ドメインを追加 して独自のラベルを設定します。
  • 特定のジョブの詳細と標準出力を表示する
  • Launch ジョブを再起動する
  • 選択したジョブをキャンセルまたは削除する

再起動操作は、Playbook の実行の再起動にのみ適用され、システムジョブ、プロジェクト/インベントリーの更新、ワークフロージョブなどには適用されません。ジョブが再起動すると、Output ビューが表示されます。いずれかのタイプのジョブを選択すると、そのジョブの Output ビューに移動し、さまざまな基準でジョブをフィルタリングできます。

ジョブ詳細表示フィルター
  • Search output リストの Event オプションを使用すると、エラー、ホストの障害、ホストの再試行、スキップされた項目など、目的のイベントでフィルタリングできます。フィルターには、必要な数のイベントを含めることができます。検索の使用方法の詳細は、検索 セクションを参照してください。

5.1. インベントリー同期ジョブ

インベントリー同期が実行されると、結果が Output タブに表示されます。

インベントリー同期の詳細は、構築型インベントリー を参照してください。

Ansible CLI を使用した場合、CLI に同じ情報が表示されます。これはデバッグに役立ちます。ANSIBLE_DISPLAY_ARGS_TO_STDOUT パラメーターは、すべての Playbook 実行に対して False に設定されます。このパラメーターは、Ansible のデフォルトの動作に準拠しており、特定の機密性の高いモジュールパラメーターが stdout に漏洩するのを避けるために、Job Details インターフェイスのタスクヘッダーにタスクの引数を表示しません。以前の動作を復元するには、AWX_TASK_ENV 設定で ANSIBLE_DISPLAY_ARGS_TO_STDOUTTrue に設定します。

詳細は、Ansible 設定の ANSIBLE_DISPLAY_ARGS_TO_STDOUT を参照してください。

ジョブの再起動ジョブのキャンセル、ジョブ出力のダウンロード Download 、またはジョブの削除 Delete を実行できます。

注記

関連ジョブの実行中にインベントリーの更新を実行できます。大規模なプロジェクト (約 10 GB) がある場合、/tmp のディスク領域が問題になる可能性があります。

5.1.1. インベントリー同期の詳細

Details タブにアクセスして、ジョブの実行に関する詳細を表示します。

インベントリー同期のジョブの詳細を表示する

実行したジョブの次の詳細を表示できます。

  • Status: 次のいずれかになります。

    • Pending: インベントリー同期は作成されましたが、まだキューに登録されておらず、開始されていません。インベントリーソースの同期に限らず、すべてのジョブは、システムによる実行の準備が整うまで保留状態になります。インベントリーソース同期の準備ができていない理由には次のようなものがあります。

      • 現在実行中の依存関係 (次のステップを実行する前に、すべての依存関係が完了する必要があります)。
      • 設定された場所で実行するには容量が不十分です。
    • Waiting: インベントリーの同期はキューに入れられており、実行を待機中です。
    • Running: インベントリーの同期が進行中です。
    • Successful: インベントリー同期ジョブが成功しました。
    • Failed: インベントリーの同期ジョブが失敗しました。
  • Inventory: 関連付けられたインベントリーグループの名前。
  • Source: クラウドインベントリーのタイプ。
  • Inventory Source Project: このインベントリー同期ジョブのソースとして使用されるプロジェクト。
  • Execution Environment: 使用される実行環境。
  • *Execution node: ジョブの実行に使用されるノード。
  • Instance Group: このジョブで使用されるインスタンスグループの名前 (コントローラーはデフォルトのインスタンスグループ)。

これらの項目を選択すると、対応するジョブテンプレート、プロジェクト、およびその他のオブジェクトを表示できます。

5.2. SCM インベントリージョブ

git などの SCM から取得したインベントリーが実行されると、結果が Output タブに表示されます。Ansible CLI を使用した場合、CLI に同じ情報が表示されます。これはデバッグに役立ちます。

ナビゲーションメニューを使用して、ジョブの再起動ジョブのキャンセル、ジョブ出力のダウンロード Download 、またはジョブの削除 Delete を実行できます。

5.2.1. SCM インベントリーの詳細

ジョブの実行とそれに関連するプロジェクトの詳細を表示するには、Details タブを選択します。

実行したジョブの次の詳細を表示できます。

  • Status: 次のいずれかになります。

    • Pending: SCM ジョブは作成されましたが、まだキューに登録されていないか、開始されていません。SCM ジョブに限らず、すべてのジョブは、システムで実行できる状態になるまで保留状態になります。SCM ジョブの準備ができていない理由としては、現在実行中の依存関係 (次のステップを実行する前にすべての依存関係が完了している必要がある) に含まれていないか、または設定されている場所で実行するのに十分な容量がないことが考えられます。
    • Waiting: SCM ジョブはキューに入れられており、実行を待機中です。
    • Running: SCM ジョブが進行中です。
    • Successful: 直前の SCM ジョブが成功しました。
    • Failed: 直前の SCM ジョブが失敗しました。
  • Type: SCM ジョブの場合は Source Control Update と表示されます。
  • Project: プロジェクトの名前。
  • Status: 関連付けられたプロジェクトが正常に更新されたかどうかを示します。
  • Revision: このジョブでソースとして使用されたプロジェクトのリビジョン番号を示します。
  • Execution environment: このジョブを実行するために使用する実行環境を指定します。
  • Execution node: ジョブが実行されたノードを示します。
  • Instance group: ジョブが実行されたインスタンスグループを示します (グループが指定されている場合)。
  • Job tags: タグは実行されたさまざまなジョブ操作を示します。

これらの項目を選択すると、対応するジョブテンプレート、プロジェクト、およびその他のオブジェクトが表示されます。

5.3. Playbook 実行ジョブ

Playbook が実行されると、結果が Output タブに表示されます。Ansible CLI を使用した場合、CLI に同じ情報が表示されます。これはデバッグに役立ちます。

イベントの概要には、この Playbook の一部として実行される次のイベントが表示されます。

  • この Playbook が実行された回数が Plays フィールドに表示されます。
  • この Playbook に関連付けられたタスクの数は、Tasks フィールドに表示されます。
  • この Playbook に関連付けられているホストの数が Hosts フィールドに表示されます。
  • Elapsed フィールドで Playbook の実行を完了するのにかかった時間
ジョブイベントの概要

ジョブの再起動ジョブのキャンセル、ジョブ出力のダウンロード Download 、またはジョブの削除 Delete を実行できます。

Output ビューのホストステータスバーのセクションにマウスをかざすと、そのステータスに関連付けられたホストの数が表示されます。

Playbook ジョブの出力には、Jobs Templates ページの Jobs タブからジョブを起動した後もアクセスできます。出力内のラインアイテムタスクをクリックして、ホストの詳細を表示します。

5.3.1. 検索

Search を使用して、特定のイベント、ホスト名、およびそれらのステータスを検索します。特定のステータスの特定のホストのみをフィルターするには、次の有効なステータスのいずれかを指定します。

ok
タスクは正常に完了しましたが、ホスト上で変更が実行されなかったことを示します。
changed
Playbook タスクが実行されました。Ansible タスクは冪等になるように作成する必要があるため、ホスト上で何も実行せずにタスクが正常に終了する場合があります。このような場合、タスクは ok を返しますが、変更されません
failed
タスクは失敗しました。このホストに対するそれ以降の Playbook の実行は停止されました。
unreachable
ホストはネットワークからアクセスできないか、またはそれに関連する別の回復不可能なエラーがあります。
skipped
ホストが目標状態に到達するために変更が必要なかったため、Playbook タスクはスキップされました。
rescued
失敗したタスクが表示してから、レスキューセクションが実行されます。
ignored
ignore_errors: yes が設定されていて、失敗したタスクを示しています。

次の例は、到達不能なホストのみを使用した検索を示しています。

標準出力ペインに到達できない

検索の使用方法の詳細は、検索 セクションを参照してください。

標準出力ビューには、特定のジョブで発生したイベントが表示されます。

Stdout ペインからイベントの行をクリックすると、別のウィンドウに Host Events ウィンドウが表示されます。このウィンドウには、その特定のイベントの影響を受けたホストが表示されます。

注記

Ansible Automation Platform の最新バージョンにアップグレードするには、すべての履歴 Playbook 出力とイベントを段階的に移行する必要があります。この移行プロセスは段階的に行われ、インストールの完了後にバックグラウンドで自動的に実行されます。非常に大量の履歴ジョブ出力 (数十 GB または数百 GB の出力) を含むインストールでは、移行が完了するまでジョブ出力が欠落する可能性があります。最新のデータが出力の先頭に表示され、その後に古いイベントが続きます。

5.3.2. Playbook 実行の詳細

Details タブにアクセスして、ジョブの実行に関する詳細を表示します。

実行のジョブの詳細 (例)

実行したジョブの次の詳細を表示できます。

  • Status: 次のいずれかになります。

    • Pending: Playbook の実行は作成されましたが、まだキューに入れられていないか、開始されていません。Playbook の実行だけでなく、すべてのジョブは、システムによって実行される準備ができるまで保留状態になります。Playbook の準備ができていない理由としては、現在実行中の依存関係 (次のステップを実行する前にすべての依存関係が完了している必要がある) に含まれていないか、または設定されている場所で実行するのに十分な容量がないことが考えられます。
    • Waiting: Playbook 実行はキューに入れられており、実行を待機中です。
    • Running: Playbook 実行が進行中です。
    • Successful: 直前の Playbook 実行が成功しました。
    • Failed: 直前の Playbook 実行が失敗しました。
  • Job template: このジョブを起動したジョブテンプレートの名前。
  • Inventory: このジョブを実行するために選択されたインベントリー。
  • Project: 起動したジョブに関連付けられたプロジェクトの名前。
  • Project Status: 起動したジョブに関連付けられたプロジェクトのステータス。
  • Playbook: このジョブを起動するために使用される Playbook。
  • Execution environment: このジョブで使用される実行環境の名前。
  • Credentials: このジョブで使用される認証情報。
  • Extra variables: ジョブテンプレートの作成時に渡された追加変数がここに表示されます。

これらの項目のいずれかを選択すると、対応するジョブテンプレート、プロジェクト、およびその他のオブジェクトが表示されます。

5.3.3. Playbook のアクセスおよび情報共有

Automation Controller は、自動化実行環境および Linux コンテナーを使用しているため、Playbook がプロジェクトディレクトリー外のファイルを読み取ることはできません。

デフォルトでは、コンテナー内の ansible-playbook プロセスに公開されるデータは、現在使用しているプロジェクトのみです。

これをジョブ設定でカスタマイズし、追加のディレクトリーをホストからコンテナーに公開できます。

5.3.4. 分離機能および変数

Automation Controller は、コンテナーテクノロジーを使用してジョブを相互に分離します。デフォルトでは、現在のプロジェクトのみがジョブテンプレートを実行するコンテナーに公開されます。

追加のディレクトリーを公開する必要がある場合は、Playbook の実行をカスタマイズする必要があります。ジョブの分離を設定するには、変数を設定します。

デフォルトでは、Automation Controller はシステムの tmp ディレクトリー (デフォルトでは /tmp) をステージング領域として使用します。これは、Jobs settings ページの Job Execution Path フィールド、または /api/v2/settings/jobs の REST API で変更できます。

AWX_ISOLATION_BASE_PATH = "/opt/tmp"

ホストから Playbook を実行するコンテナーに追加のディレクトリーを公開する場合は、Jobs Settings ページの Paths to expose to isolated jobs フィールド、または /api/v2/settings/jobs の REST API で以下を使用することで、そのディレクトリーを指定できます。

AWX_ISOLATION_SHOW_PATHS = ['/list/of/', '/paths']
注記
  • 特定のファイルへのパスを入力すると、そのファイルを含むディレクトリー全体が実行環境内にマウントされます。
  • Playbook で AWX_ISOLATION_SHOW_PATHS で定義されたキーまたは設定を使用する必要がある場合は、このファイルを /var/lib/awx/.ssh に追加します。

ここで説明するフィールドは、Jobs settings ページにあります。

ジョブ設定オプション

5.4. Automation Controller の容量決定とジョブへの影響

Automation Controller 容量システムは、インスタンスで利用可能なリソース量や、実行中のジョブのサイズ (影響と呼ぶ) をもとに、インスタンスでいくつのジョブを実行可能か判断します。これを判断するのに使用するアルゴリズムは、2 つのアイテムだけをベースとします。

  • システムで利用可能なメモリー容量 (mem_capacity)
  • システムで利用可能な処理容量 (cpu_capacity)

容量はインスタンスグループにも影響します。グループはインスタンスで構成されるため、インスタンスを複数のグループに割り当てることもできます。これは、1 つのインスタンスへの影響が他のグループの全体的な容量に影響を与える可能性があることを意味します。

インスタンス自体ではなく、インスタンスグループを、さまざまなレベルのジョブで使用するように割り当てることができます。詳細は、自動化実行の設定クラスタリング を参照してください。

タスクマネージャーは、ジョブが実行されるグループを決定するためのグラフを準備するときに、まだ開始する準備ができていないジョブにインスタンスグループの容量をコミットします。

小規模な設定では、ジョブの実行に使用できるインスタンスが 1 つだけの場合、タスクマネージャーは、インスタンスの容量を超えた場合でも、そのジョブをインスタンス上で実行できるようにします。これにより、システムのプロビジョニング不足が原因でジョブが停止することがなくなります。

関連情報

5.4.1. 容量アルゴリズムに向けたリソースの判断

容量アルゴリズムは、システムが同時に実行できるフォークの数を決定します。これらのアルゴリズムは、Ansible が同時に通信できるシステムの数を制御します。Automation Controller システムが実行するフォークの数を増やすと、より多くの作業を並行して実行できるため、ジョブをより高速に実行できます。ただし、これによりシステムの負荷が増加し、作業が遅くなる可能性があります。

デフォルトの mem_capacity を使用すると、システムがメモリー不足にならないようにしながら、処理リソースをオーバーコミットできます。作業のほとんどがプロセッサーに依存しない場合、このモードを選択するとフォークの数が最大になります。

5.4.1.1. メモリーの相対容量

mem_capacity は、フォークごとに必要なメモリー量に応じて計算されます。内部コンポーネントのオーバーヘッドを考慮すると、フォークあたり約 100 MB になります。Ansible ジョブで使用できるメモリーの量を考慮する場合、容量アルゴリズムは、他のサービスの存在を考慮して 2GB のメモリーを予約します。このアルゴリズムの式は次のとおりです。

(mem - 2048) / mem_per_fork

以下に例を示します。

(4096 - 2048) / 100 == ~20

4GB のメモリーを搭載したシステムは、20 個のフォークを実行できます。mem_per_fork の値は、SYSTEM_TASK_FORKS_MEM の値を設定することによって制御されます。デフォルトは 100 です。

5.4.1.2. CPU の相対容量

Ansible ワークロードは多くの場合、プロセッサーに依存します。このような場合、同時ワークロードを減らすことで、より多くのタスクをより速く実行できるようになり、それらのジョブの平均完了時間を短縮できます。

mem_capacity アルゴリズムがフォークごとに必要なメモリーの量を調整するのと同じように、cpu_capacity アルゴリズムはフォークごとに必要な処理リソースの量を調整します。このベースライン値は、コアあたり 4 つのフォークです。このアルゴリズムの式は次のとおりです。

cpus * fork_per_cpu

たとえば、4 コアシステムは次のようになります。

4 * 4 == 16

SYSTEM_TASK_FORKS_CPU の値 (デフォルトは 4) を設定することで、fork_per_cpu の値を制御できます。

5.4.2. ジョブが影響を与える容量

容量を選択する場合に、各ジョブタイプがどのように容量に影響を与えるかを理解することが重要です。

Ansible のデフォルトのフォーク値は 5 です。ただし、それよりも少ないシステムに対して実行するように Automation Controller を設定すると、実際の同時実行値は低くなります。

ジョブが Automation Controller で実行されると、Ansible の親プロセスを補うために、選択されたフォークの数が 1 つ増加します。

フォーク値が 5 の 5 つのシステムに対して Playbook を実行した場合、ジョブへの影響の観点から見た実際のフォーク値は 6 になります。

5.4.2.1. 自動コントローラーのジョブタイプの影響

ジョブとアドホックジョブは、前述のモデル、フォーク +1 に従います。ジョブテンプレートにフォーク値を設定した場合、ジョブの容量値は、指定されたフォーク値の最小値と、所有しているホストの数に 1 を加えた値になります。+1 は、親 Ansible プロセスを考慮するためのものです。

インスタンスの容量によって、どのジョブが特定のインスタンスに割り当てられるかが決まります。ジョブとアドホックコマンドは、フォーク値が大きいほど、より多くの容量を使用します。

以下を含むジョブタイプは、一定の影響を及ぼします。

  • インベントリーの更新: 1
  • プロジェクトの更新: 1
  • システムジョブ: 5
注記

ジョブテンプレートにフォーク値を設定しない場合、ジョブは Ansible のデフォルトのフォーク値 5 を使用します。ただし、ジョブのホストの数が 5 つ未満の場合は、使用するホストの数が減ります。一般に、フォーク値をシステムの能力よりも高く設定すると、メモリー不足や CPU のオーバーコミットによって問題が発生する可能性があります。使用するジョブテンプレートのフォーク値はシステムに適合する必要があります。1,000 個のフォークを使用する Playbook があるが、個別にそれほど多くの容量を備えたシステムがない場合、システムのサイズが小さく、パフォーマンスまたはリソースの問題が発生するリスクがあります。

5.4.2.2. 正しい容量の選択

CPU 制限またはメモリー制限の範囲外の容量を選択する場合は、フォークの最小数または最大数のどちらかを選択することになります。前の例 では、CPU 容量では最大 16 個のフォークが許可され、メモリー容量では最大 20 個のフォークが許可されます。一部のシステムでは、これらの間の差が大きくなる可能性があるため、これら 2 つの間のバランスを取ることが必要な場合があります。

インスタンスフィールドの capacity_adjustment を使用すると、考慮する量を選択できます。これは 0.0 - 1.0 の値で表されます。値 1.0 に設定すると、最大値が使用されます。前の例にはメモリー容量が関係しているため、フォークの値を 20 として選択できます。値を 0.0 に設定すると、最小値が使用されます。値を 0.5 にすると 2 つのアルゴリズム間の 50/50 バランス、つまり 18 です。

16 + (20 - 16) * 0.5 = 18

手順

容量を表示または編集します。

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureInstance Groups を選択します。
  2. Instance Groups リストビューで、必要なインスタンスを選択します。
  3. Instances タブを選択し、Capacity adjustment スライダーを調整します。

    注記

    スライダーは、インスタンス容量アルゴリズムが生成するフォークの数が少ないか (左方向)、より多くのフォークが生成されているか (右方向) を調整します。

5.5. ジョブブランチのオーバーライド

プロジェクトは、scm_branch フィールドでソースコントロールから使用するブランチ、タグ、または参照を指定します。これらは、Type Details フィールドで指定された値によって表されます。

プロジェクトの分岐を重視

ジョブの作成または編集時には、Allow branch override のオプションがあります。このオプションをオンにすると、プロジェクト管理者は、そのプロジェクトを使用するジョブテンプレートに対してブランチの選択を委譲できます。その際に必要なのは、プロジェクトの use_role だけです。

5.5.1. ソースツリーのコピー動作

実行されるすべてのジョブには独自のプライベートデータディレクトリーがあります。このディレクトリーには、ジョブが実行されている特定の scm_branch のプロジェクトソースツリーのコピーが含まれています。ジョブはプロジェクトフォルダーに自由に変更を加え、実行中にその変更を利用できます。このフォルダーは一時的なフォルダーであり、ジョブの実行の終了時に削除されます。

Clean オプションをオンにすると、変更されたファイルは Automation Controller のリポジトリーのローカルコピーから削除されます。これは、git または Subversion に関連する対応する Ansible モジュールの force パラメーターを使用して実行されます。

関連情報

詳細は、Ansible ドキュメントの パラメーター セクションを参照してください。

5.5.2. プロジェクトのリビジョンの動作

プロジェクトの更新中、デフォルトブランチ (プロジェクトの Source control branch フィールドで指定) のリビジョンが更新時に保存されます。ジョブにデフォルト以外の Source control branch (コミットハッシュやタグではない) を指定すると、ジョブが開始される直前に、最新のリビジョンがソースコントロールリモートから取得されます。このリビジョンは、ジョブとそのプロジェクトの更新の Source control revision フィールドに表示されます。

その結果、デフォルト以外のブランチではオフラインジョブを実行できません。ジョブがソースコントロールからの静的バージョンを実行していることを確認するには、タグまたはコミットハッシュを使用します。プロジェクトの更新ではすべてのブランチが保存されるのではなく、プロジェクトのデフォルトブランチのみが保存されます。

Source control branch フィールドは検証されていないため、有効であることを確認するためにプロジェクトを更新する必要があります。このフィールドが指定されたり、要求されたりした場合には、ジョブテンプレートの Playbook フィールドは検証されず、ジョブテンプレートを起動して、必要とされる Playbook が存在するかを確認する必要があります。

5.5.3. Git Refspec

Source control refspec フィールドは、更新時にリモートからダウンロードする追加参照を指定します。例としては次のようなものがあります。

  • refs/:refs/remotes/origin/: これは、リモートのリモートを含むすべての参照を取得します。
  • refs/pull/:refs/remotes/origin/pull/ (GitHub 固有): これは、すべてのプルリクエストのすべての ref を取得します。
  • refs/pull/62/head:refs/remotes/origin/pull/62/head: これは、1 つの GitHub プルリクエストの参照を取得します。

大規模なプロジェクトの場合、最初の例または 2 番目の例を使用する際はパフォーマンスへの影響を考慮してください。

Source control refspec パラメーターは、プロジェクトブランチの可用性に影響を与え、他の方法では利用できない参照へのアクセスを可能にすることができます。前の例を使用して、Source control branch からプルリクエストを提供します。これは Source control refspec フィールドがないと不可能です。

Ansible git モジュールは、デフォルトで refs/heads/ をフェッチします。つまり、Source control refspec が空白の場合、プロジェクトのブランチ、タグ、コミットハッシュを Source control branch として使用できます。Source control refspec フィールドで指定された値は、オーバーライドとして使用できる Source control branch フィールドに影響します。プロジェクトの更新 (タイプを問わず) は、追加の git fetch コマンドを実行して、その refspec をリモートからプルします。

最初または 2 番目の refspec サンプルを使用して、ブランチオーバーライドを有効にするプロジェクトを設定できます。Source control branch を要求するジョブテンプレートでこれを使用します。その後、クライアントは新しいプルリクエストの作成時にジョブテンプレートを起動でき、pull/N/head ブランチを提供して、ジョブテンプレートは、提供された GitHub プルリクエスト参照に対して実行できます。

関連情報

詳細は、Ansible git モジュール を参照してください。

第6章 ジョブテンプレート

Automation ExecutionTemplates から、ジョブテンプレートとワークフロージョブテンプレートの両方を作成できます。

ワークフロージョブテンプレートについては、ワークフロージョブテンプレート を参照してください。

ジョブテンプレートは、Ansible ジョブを実行するための定義とパラメーターのセットです。ジョブテンプレートは、同じジョブを何度も実行する場合に役立ちます。また、Ansible Playbook コンテンツの再利用とチーム間のコラボレーションを促進します。

6.1. 自動化テンプレート

Automation Templates ページには、現在使用可能な ジョブテンプレートワークフロージョブテンプレート の両方が表示されます。

自動化テンプレートは、複雑な IT タスクを自動化および調整するための強力な青写真として機能します。

ジョブテンプレートまたはワークフローテンプレートとして定義されているかどうかに関係なく、自動化テンプレートは日常的な操作を標準化および合理化し、さまざまな環境で一貫した実行を可能にします。

自動化テンプレートは、Playbook、インベントリー、認証情報、その他の設定詳細を指定することにより、手動による介入を排除し、エラーを削減し、タスクの完了を加速します。

また、ワークフローテンプレートで複数のタスクを連鎖できるようにすることで柔軟性も提供し、複数のシステムやプロセスにまたがる高度な自動化ユースケースに対応します。

これにより、IT チームは高い効率性と制御性を維持しながら、自動化を確実に拡張できます。

デフォルトのビューは折りたたまれており (コンパクト)、テンプレート名、テンプレートタイプ、およびそのテンプレートを使用して実行された最後のジョブのタイムスタンプが表示されます。各エントリーの横にある Arrow アイコンをクリックすると、詳細を展開して表示できます。このリストは名前のアルファベット順に並べ替えられていますが、他の条件で並べ替えたり、テンプレートのさまざまなフィールドや属性で検索したりできます。

この画面から、ジョブテンプレートを起動 Launch icon 、編集 Edit icon 、複製 Duplicate icon できます。

テンプレート名を選択すると、テンプレートが最後に実行された日時など、テンプレートの詳細情報が表示されます。

このリストは名前のアルファベット順に並べ替えられていますが、他の条件で並べ替えたり、テンプレートのさまざまなフィールドや属性で検索したりできます。

注記

ジョブテンプレートの検索機能は、英数字だけに制限されています。

ワークフローテンプレートには、ワークフロービジュアライザーアイコン ( Workflow visualizer ) があります。これはワークフローエディターにアクセスするためのショートカットとして使用できます。

注記

ワークフローテンプレートは、ジョブテンプレートを使用して構築できます。ジョブテンプレートの隣にある、Workflow Visualizer Visualizer アイコンを表示するテンプレートが、ワークフローテンプレートです。アイコンをクリックすると、ワークフローをグラフィカルに構築できます。ジョブテンプレートの多くのパラメーターで、Prompt on Launch を選択できます。これはワークフローレベルで変更でき、ジョブテンプレートレベルで割り当てられた値には影響しません。手順は、ワークフロービジュアライザー セクションを参照してください。

6.2. 関心のあるドメインの設定

ドメインフィルタリングを使用すると、自動化実行の JobsTemplates のサブセクションに表示されるコンテンツをカスタマイズできます。ジョブとテンプレートは説明ラベルにリンクされています。ラベルを選択すると、関連性の低いリソースを除外できるため、関心のある分野に関連するリソースに簡単にアクセスできるようになります。

手順

  1. ナビゲーションパネルから、Automation ExecutionJobs または Automation ExecutionTemplates を選択します。
  2. ページ見出しの下、Domains の横にトピック関連のラベルのリストがあります。ラベルを選択してジョブとジョブテンプレートをフィルタリングし、ラベルに関連するコンテンツのみを表示します。複数のラベルを選択できます。
  3. 選択をクリアするには、X をクリックします。
  4. ドメインオプションをカスタマイズするには、 Wrench アイコンを選択します。表示されるモーダルで、Add Domain を選択して、フィルタリングに使用する新しいドメインを追加します。
注記

個々のジョブテンプレートにラベルを追加すると、関連するドメインのラベルでフィルタリングしたときに、テンプレートがリソースとして表示されます。Automation ExecutionTemplates に移動し、ジョブテンプレートを選択して、Edit template をクリックします。編集画面で、Labels フィールドに使用するラベルを入力し、Save job template をクリックします。

6.3. ジョブテンプレートの作成

手順

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. Automation Templates ページで、Create template リストから Create job template を選択します。
  3. 次のフィールドに適切な詳細を入力します。

    注記

    フィールドで Prompt on launch を表示するチェックボックスがオンになっている場合、ジョブを起動すると、起動時にそのフィールドの値の入力を求めるプロンプトが表示されます。

    ほとんどのプロンプト値は、ジョブテンプレートに設定されている値をオーバーライドします。

    次の表に例外を示します。

    Expand
    フィールドオプションPrompt on Launch

    Name

    ジョブの名前を入力します。

    該当なし

    Description

    必要に応じて、任意の説明を入力します (オプション)。

    該当なし

    Job type

    ジョブタイプを選択します。

    • Run: 起動時に Playbook を開始し、選択したホストで Ansible タスクを実行します。
    • Check: Playbook の「ドライラン」を実行します。実際に変更を加えずに、変更内容を報告します。チェックモードをサポートしていないタスクは無視され、変更予定の内容は報告されません。

    ジョブタイプの詳細は、Ansible ドキュメントの Playbooks セクションを参照してください。

    はい

    Inventory

    ログインしているユーザーが使用できるインベントリーから、このジョブテンプレートで使用するインベントリーを選択します。

    システム管理者は、ジョブテンプレート内の特定のインベントリーを使用できるように、ユーザーまたはチームのパーミッションを割り当てる必要があります。

    必須です。

    インベントリーのプロンプトは、後続のプロンプトウィンドウに独自のステップとして表示されます。

    Project

    ログインしているユーザーが利用できるプロジェクトから、このジョブテンプレートで使用するプロジェクトを選択します。

    該当なし

    Source control branch

    このフィールドは、ブランチのオーバーライドを許可するプロジェクトを選択した場合にのみ表示されます。ジョブの実行で使用するオーバーライドブランチを指定します。空白のままにすると、プロジェクトから指定された SCM ブランチ (またはコミットハッシュまたはタグ) が使用されます。

    詳細は、ジョブブランチのオーバーライド を参照してください。

    はい

    Playbook

    使用可能な Playbook から、このジョブテンプレートで起動する Playbook を選択します。このフィールドには、選択したプロジェクトのプロジェクトベースパスにある Playbook の名前が自動的に入力されます。あるいは、Playbook がリストされていない場合は、その Playbook での実行に使用するファイル (foo.yml など) の名前など、Playbook の名前を入力することもできます。無効なファイル名を入力すると、テンプレートにエラーが表示されるか、ジョブが失敗します。

    該当なし

    Execution Environment

    このジョブの実行に使用するコンテナーイメージを選択します。実行環境を選択する前にプロジェクトを選択する必要があります。

    必須です。

    実行環境のプロンプトは、後続のプロンプトウィンドウに独自のステップとして表示されます。

    Credentials

    examine アイコンを選択すると、別のウィンドウが開きます。

    利用可能なオプションから、このジョブテンプレートで使用する認証情報を選択します。

    リストが膨大な場合は、ドロップダウンメニューリストを使用して認証情報タイプでフィルタリングします。一部の認証情報タイプは、特定のジョブテンプレートに適用されないため、リストされていません。

    • 選択した場合、デフォルトの認証情報が含まれるジョブテンプレートが起動したときに、別の認証情報を指定すると、デフォルトの認証情報が置き換えられます (認証情報が同じタイプの場合)。以下はこのメッセージの例です。

    Job Template default credentials must be replaced with one of the same type.Please select a credential for the following types in order to proceed: Machine.

    • 必要に応じて、さらに認証情報を追加できます。
    • 認証情報のプロンプトは、後続のプロンプトウィンドウに独自のステップとして表示されます。

    Labels

    • 必要に応じて、このジョブテンプレートを説明するラベル (devtest など) を指定します。
    • ラベルを使用して、表示内のジョブテンプレートと完了したジョブをグループ化およびフィルタリングします。
    • ラベルはジョブテンプレートの追加時に作成されます。ラベルは、ジョブテンプレートで指定されたプロジェクトを使用して、単一の組織に関連付けられます。組織のメンバーは、編集パーミッション (管理者ロールなど) を持っている場合、ジョブテンプレートにラベルを作成できます。
    • ジョブテンプレートを保存すると、Expanded ビューの Job Templates の概要にラベルが表示されます。
    • ラベルの横にある Disassociate を選択して削除します。ラベルが削除されると、そのラベルはその特定のジョブまたはジョブテンプレートとの関連付けが解除されますが、ラベルを参照する他のジョブには関連付けられたままになります。
    • ジョブは、起動時にジョブテンプレートからラベルを継承します。ジョブテンプレートからラベルを削除すると、ジョブからも削除されます。
    • 選択すると、デフォルト値が指定されている場合でも、必要に応じて起動時に追加のラベルを指定するようにプロンプトが表示されます。
    • 既存のラベルを削除することはできません。 Disassociate を選択しても、新しく追加されたラベルだけが削除され、既存のデフォルトのラベルは削除されません。

    Forks

    Playbook の実行中に使用する並列または同時プロセスの数です。値 0 は、/etc/ansible/ansible.cfg でオーバーライドされない限り、Ansible のデフォルト設定 (5 つの並列プロセス) を使用します。

    はい

    Limit

    Playbook が管理または影響を与えるホストのリストをさらに制限するためのホストのパターンを指定します。複数のパターンをコロン (:) で区切ることができます。コア Ansible と同じです。

    • a:b は「a または b のグループに含まれる」という意味です。
    • a:b:&c は、「a または b に含まれるが、c には必ず含まれなければならない」という意味です。
    • a:!b は「a にはあるが、b には絶対にない」という意味です。

    詳細は、Ansible ドキュメントの Patterns: targeting hosts and groups を参照してください。

    はい

    選択されていない場合、ジョブテンプレートがインベントリー内のすべてのノードに対して実行されるか、または Limit フィールドで事前定義されたノードに対してのみ実行されます。ワークフローの一部として実行する場合は、代わりにワークフロージョブテンプレートの制限が使用されます。

    Verbosity

    Playbook の実行時に Ansible が生成する出力レベルを制御します。Normal やさまざまな Verbose または Debug 設定から詳細度を選択します。これは details レポートビューにのみ表示されます。詳細ログには、すべてのコマンドの出力が含まれます。デバッグログは非常に詳細で、一部のサポート事例に役立つ SSH 操作に関する情報が含まれています。

    詳細の値が 5 の場合、Automation Controller はジョブの実行時にブロックを実行し、これによりジョブが終了したことを示すレポートが遅延するため (レポートが作成されている場合でも)、ブラウザータブがロックアップする可能性があります。

    はい

    Job slicing

    このジョブテンプレートを実行するスライスの数を指定します。各スライスは、インベントリーの一部に対して同じタスクを実行します。ジョブスライスの詳細は、ジョブスライス を参照してください。

    はい

    Timeout

    ジョブがキャンセルされるまでの実行時間 (秒単位) を指定できます。タイムアウト値を設定するには、次の点を考慮してください。

    • 設定にはグローバルタイムアウトが定義されており、デフォルトは 0 で、タイムアウトがないことを示します。
    • ジョブテンプレートの負のタイムアウト (<0) は、ジョブの "タイムアウト" はありません。
    • ジョブテンプレートのタイムアウトが 0 の場合、ジョブはデフォルトでグローバルタイムアウトになります (デフォルトではタイムアウトなし)。
    • 正のタイムアウトは、そのジョブテンプレートのタイムアウトを設定します。

    はい

    Show changes

    Ansible タスクによって加えられた変更を確認できます。

    はい

    Instance groups

    このジョブテンプレートに関連付ける インスタンスおよびコンテナーグループ を選択します。リストが膨大な場合は、 examine アイコンを使用してオプションを絞り込みます。ジョブテンプレートのインスタンスグループは、ジョブのスケジュール基準に影響します。ルールは、ジョブランタイムの動作 および ジョブ実行場所の制御 を参照してください。システム管理者は、ジョブテンプレート内のインスタンスグループを使用できるように、ユーザーまたはチームのパーミッションを割り当てる必要があります。コンテナーグループを使用するには管理者権限が必要です。

    • 必須です。

    選択すると、ジョブの優先インスタンスグループが優先順に提供されます。最初のグループの容量が不足している場合は、容量のあるグループが見つかるまでリスト内の後続のグループが検討され、見つかった時点でそのグループが選択されてジョブが実行されます。

    • インスタンスグループの入力を求めるプロンプトが表示された場合は、入力した内容が通常のインスタンスグループ階層を置き換え、組織とインベントリーのすべてのインスタンスグループをオーバーライドします。
    • インスタンスグループのプロンプトは、後続のプロンプトウィンドウに独自のステップとして表示されます。

    Job tags

    Create メニューを入力して選択し、Playbook のどの部分を実行するかを指定します。詳細と例は、Ansible ドキュメントの Tags を参照してください。

    はい

    Skip tags

    Create メニューを入力して選択し、スキップする Playbook の特定のタスクまたは部分を指定します。詳細と例は、Ansible ドキュメントの Tags を参照してください。

    はい

    Extra variables

    • 追加のコマンドライン変数を Playbook に渡します。これは、ansible-playbook の "-e" または "-extra-vars" コマンドラインパラメーターです。このパラメーターは、Ansible ドキュメントの Defining variables at runtime で説明されています。
    • YAML または JSON を使用してキーまたは値のペアを提供します。これらの変数には優先順位の最大値があり、他の場所で指定された他の変数をオーバーライドします。git_branch: production release_version: 1.5 は、値の例です。

    必須です。

    スケジュールで extra_vars を指定できるようにするには、ジョブテンプレートの変数に対して Prompt on launch を選択するか、ジョブテンプレートで Survey を有効にする必要があります。回答された Survey の質問は extra_vars になります。

  4. 必要に応じて、このテンプレートを起動するための次のオプションを設定できます。

    • Privilege escalation: オンにすると、この Playbook を管理者として実行できるようになります。これは、--become オプションを ansible-playbook コマンドに渡すことと同じです。
    • Provisioning callback: オンにすると、ホストが REST API 経由で Automation Controller にコールバックし、このジョブテンプレートからジョブを起動できるようになります。詳細は、プロビジョニングコールバック を参照してください。
    • Enable webhook: オンにすると、ジョブテンプレートの起動に使用される事前定義された SCM システム Web サービスとのインターフェイス機能が有効になります。GitHub と GitLab がサポートされている SCM システムです。

      • Webhook を有効にすると、他のフィールドが表示され、以下の追加情報の入力を求められます。
      • Webhook service: Webhook からリッスンするサービスを選択します。
      • Webhook URL: POST 要求を送信する Webhook サービスの URL が自動的に入力されます。
      • Webhook key: Webhook サービスが Automation Controller に送信するペイロードに署名する際に使用するための、生成された共有シークレット。Automation Controller がこのサービスから Webhook を受け入れるようにするには、Webhook サービスの設定で指定する必要があります。
      • Webhook credential: オプションで、Webhook サービスにステータス更新を送信するために使用する認証情報として、GitHub または GitLab の Personal Access Token (PAT) を指定します。

        選択する前に、認証情報が存在している必要があります。

        認証情報を作成するには、認証情報タイプ を参照してください。

      • Webhook の設定の関連情報は、Webhook の使用 を参照してください。
    • Concurrent jobs: オンにすると、キュー内のジョブが相互に依存していない場合に同時に実行されるようになります。ジョブスライスを同時に実行する場合は、このボックスをオンにします。詳細は、Automation Controller の容量決定とジョブへの影響 を参照してください。
    • Enable fact storage: オンにすると、ジョブの実行に関連するインベントリー内のすべてのホストについて収集されたファクトを Automation Controller が保存します。
    • Prevent instance group fallback: このオプションをオンにすると、Instance Groups フィールドにリストされているインスタンスグループのみがジョブを実行できます。オフの場合、ジョブの実行場所の制御 で説明されている階層に基づいて、実行プール内の使用可能なすべてのインスタンスが使用されます。
  5. ジョブテンプレートの詳細の設定が完了したら、Create job template をクリックします。

テンプレートを作成してもジョブテンプレートページは終了せず、ジョブテンプレートの Details タブに進みます。テンプレートを保存したら、Launch template をクリックしてジョブを開始できます。また、Edit をクリックして、権限、通知、完了したジョブの表示、アンケートの追加 (ジョブタイプがスキャンでない場合) などのテンプレートの属性を追加または変更することもできます。起動する前にまずテンプレートを保存する必要があります。そうしないと、Launch template は無効のままになります。

検証

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. 新しく作成したテンプレートが Templates ページに表示されることを確認します。

6.4. テンプレートへのパーミッションの追加

次の手順に従って、チームのパーミッションを追加します。

手順

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. テンプレートを選択し、Team Access または User Access タブで Add roles をクリックします。
  3. Teams または Users を選択し、Next をクリックします。

    • リストから 1 つまたは複数のユーザーを選択します。これには、メンバーとして追加するユーザーの隣にあるチェックボックスをクリックして、Next をクリックします。
  4. ユーザーまたはチームに割り当てるロールを選択します。ロールの完全なリストを確認するには、必ず下にスクロールしてください。各リソースには、使用可能なさまざまなオプションがあります。
  5. Finish をクリックして、選択したユーザーまたはチームにロールを適用し、メンバーとして追加します。

ユーザーとチームを追加するウィンドウが閉じて、各ユーザーとチームに割り当てられた更新されたロールが表示されます。

特定のユーザーのロールを削除するには、リソースの横にある Disassociate アイコンをクリックします。

これにより確認ダイアログが起動し、関連付けの解除を確定するように求められます。

6.5. ジョブテンプレートの削除

ジョブテンプレートを削除する前に、そのジョブテンプレートがワークフロージョブテンプレートで使用されていないことを確認してください。

手順

  1. 次の方法を使用してジョブテンプレートを削除します。

    • ⋮ アイコンをクリックして、Delete Template Delete Template を選択します。
    • または、必要なジョブテンプレートを選択します。Details ページで ⋮ アイコンをクリックし、 Delete template Delete template を選択します。
注記

他の作業項目で使用されている項目を削除すると、削除の影響を受ける項目がリストされ、削除の確認を求めるメッセージが表示されます。一部の画面には、無効な項目または以前に削除された項目が含まれており、実行に失敗します。

6.6. 通知の使用

ナビゲーションパネルから、Automation ExecutionAdministrationNotifiers を選択します。セットアップした通知インテグレーションとそのステータスを確認できます (実行されている場合)。

トグルを使用して、特定のテンプレートで使用する通知を有効または無効にします。詳細は、通知の有効化と無効化 を参照してください。

通知が設定されていない場合は、Add notifier をクリックして新しい通知を作成します。さまざまな通知タイプと拡張メッセージングの設定の詳細は、通知タイプ を参照してください。

6.7. 完了したジョブの表示

Jobs タブには、実行されたジョブテンプレートのリストが表示されます。各ジョブの横にある展開アイコンをクリックすると、次の詳細が表示されます。

  • ID および名前
  • Status
  • ジョブの種類
  • 実行時間
  • 開始時間および終了時間
  • ジョブの開始者、使用したテンプレート、インベントリー、プロジェクト、認証情報

これらの基準のいずれかを使用して、完了したジョブのリストをフィルタリングできます。

このリストに表示されるスライスされたジョブには、実行済みのスライスされたジョブの数に応じてラベルが付けられます。

6.8. ジョブテンプレートのスケジュール設定

Schedules タブから特定のジョブテンプレートのスケジュールにアクセスします。

手順

  • ジョブテンプレートをスケジュールするには、ジョブテンプレートから Schedules タブを選択し、適切な方法を選択します。

    • スケジュールがすでに設定されている場合は、スケジュール設定を確認、編集、有効化または無効化します。
    • スケジュールが設定されていない場合の詳細は スケジュール を参照してください。

Credentials フィールドPrompt on Launch を選択し、ジョブテンプレートのスケジュール情報を作成または編集すると、スケジュールフォームに Prompt オプションが表示されます。

Prompt ダイアログでデフォルトのマシン認証情報を削除するには、保存する前に別のマシン認証情報に置き換える必要があります。

注記

スケジュールに extra_vars を設定するには、ジョブテンプレートで VariablesPrompt on Launch を選択するか、ジョブテンプレートで Survey を設定して有効にする必要があります。

回答された Survey の質問は extra_vars になります。

6.9. ジョブテンプレートの Survey

Run または Check のジョブタイプでは、Job Template の作成画面または編集画面で Survey を設定する方法が提供されます。Survey では、Prompt for Extra Variables と同様に、Playbook に追加変数を設定しますが、ユーザーにわかりやすいほうほうで質問と応答を設定します。Survey では、ユーザー入力の検証も可能です。Survey タブを選択して、Survey を作成します。

Survey はさまざまな状況で使用できます。たとえば、オペレーションでは、開発者が事前に Ansible の知識がなくても実行可能な「Push to Stage」ボタンを導入したいと考えています。このタスクを起動すると、「どのタグを解放する必要がありますか?」などの質問に対する回答を求めることができます。

多項選択式の質問など、さまざまな種類の質問を尋ねることができます。

6.9.1. Survey の作成

手順

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. Survey を作成するジョブテンプレートを選択します。
  3. Survey タブから、Create survey question をクリックします。
  4. Survey は、任意の数の質問を含めて構成できます。質問ごとに、次の情報を入力します。

    • Question: ユーザーに尋ねる質問。
    • オプション: Description: ユーザーに尋ねる内容の説明。
    • Answer variable name: ユーザーの回答を格納する Ansible 変数名。これは、Playbook で使用される変数です。変数名にはスペースを含めることはできません。
    • Answer type: 以下の質問のタイプから選択します。

      • Text: 1 行のテキスト。この回答の最小長と最大長 (文字数) を設定できます。
      • Textarea: 複数行のテキストフィールド。この回答の最小長と最大長 (文字数) を設定できます。
      • Password: 回答は、実際のパスワードと同様に機密情報として扱われます。この回答の最小長と最大長 (文字数) を設定できます。
      • Multiple Choice (single select): 一度に 1 つだけ選択できる選択肢のリスト。Multiple Choice Options フィールドに、選択肢を 1 行に 1 つずつ入力します。
      • Multiple Choice (multiple select): 一度に任意の数を選択できる選択肢のリスト。Multiple Choice Options フィールドに、選択肢を 1 行に 1 つずつ入力します。
      • Integer: 整数。この回答の最小長と最大長 (文字数) を設定できます。
      • Float: 小数。この回答の最小長と最大長 (文字数) を設定できます。
    • Required: この質問に対するユーザーからの回答を必須にするかどうか。
    • Minimum lengthMaximum length: 回答に特定の長さが必要な場合に指定します。
    • Default answer: 質問に対するデフォルトの回答。この値は、インターフェイスに事前に入力されており、ユーザーが回答を指定しない場合に使用されます。
  5. 質問の情報を入力したら、Create question をクリックして質問を追加します。

    Survey の質問が Survey リストに表示されます。質問がある場合は、 Pencil をクリックして編集してください。

    各質問の横にあるボックスをオンにし、Delete をクリックして質問を削除するか、メニューバーの切り替えオプションを使用して Survey プロンプトを有効または無効にします。

    Survey の質問が複数ある場合は、グリッドアイコンをクリックしてドラッグし、Edit Order をクリックして質問の順序を並べ替えます。

  6. さらに質問を追加するには、Add をクリックします。

6.9.2. オプションの Survey の質問

Survey の質問に対する 必須 の設定は、対話するユーザーにとって回答がオプションかどうかを決定します。

オプションの Survey 変数を extra_vars で Playbook に渡すこともできます。

  • テキスト以外の変数 (入力タイプ) がオプションとマークされ、入力されていない場合、Survey の extra_var は Playbook に渡されません。
  • テキスト入力またはテキスト領域の入力がオプションとしてマークされ、入力されていない場合で、最小の length > 0 が設定されている場合、Survey の extra_var は Playbook に渡されません。
  • テキスト入力またはテキスト領域の入力がオプションとしてマークされ、入力されていない場合で、最小の length === 0 が設定されている場合、Survey の extra_var は、値が空のストリング ("") に設定された状態で Playbook に渡されます。

6.10. ジョブテンプレートの起動

Automation Controller の利点は、ボタンを押すだけで Ansible Playbook をデプロイできることです。コマンドラインで常に Ansible Playbook に渡すすべてのパラメーターを保存するようにテンプレートを設定できます。テンプレートは、Playbook に加えて、インベントリー、認証情報、追加の変数、およびコマンドラインで指定できるすべてのオプションと設定を渡します。

デプロイメントが簡単になると、毎回同じ方法で Playbook を実行し、責任を委任できるため、一貫性が高まります。

手順

  • 次のいずれかの方法を使用して、ジョブテンプレートを起動します。

    • ナビゲーションパネルから、Automation ExecutionTemplates を選択し、ジョブテンプレートカード上の Launch template Launch をクリックします。
    • 起動するジョブテンプレートのジョブテンプレートの Details タブで、Launch template をクリックします。

ジョブを実行するには追加情報が必要になる場合があります。起動時に次のデータをリクエストできます。

  • 設定された認証情報
  • すべてのパラメーターに対して Prompt on Launch オプションが選択されています
  • Ask に設定されたパスワードまたはパスフレーズ
  • Survey (ジョブテンプレート用に設定されている場合)
  • 追加変数 (ジョブテンプレートで必要な場合)
注記

ジョブにユーザー指定の値がある場合、再起動時にそれらの値が考慮されます。ユーザーが値を指定しなかった場合、ジョブはジョブテンプレートのデフォルト値を使用します。ジョブはそのままでは再起動されません。ユーザープロンプトがジョブテンプレートに再適用されて再起動されます。

1 つのタブで値を指定してから、前のタブに戻り、次のタブに進むと、残りのタブで値を再度指定する必要があります。プロンプトが表示される順序でタブに入力してください。

Automation Controller を起動すると、Web ブラウザーが Jobs タブの下にあるこのジョブの Job Status ページに自動的にリダイレクトされます。

リストビューから最新のジョブを再起動して、指定したインベントリー内のすべてのホストまたは失敗したホストのみで再実行できます。詳細は、Automation Controller のジョブ セクションを参照してください。

スライスジョブの実行中、ワークフローとジョブスライス、およびそれらの詳細を個別に表示するためのリンクがジョブリストに表示されます。

注記

API に新しく追加されたエンドポイント /api/v2/bulk/job_launch を使用して、ジョブを一括で起動できます。このエンドポイントは JSON を受け入れ、起動する統合ジョブテンプレート (ジョブテンプレートやプロジェクト更新など) のリストを指定できます。ユーザーには、すべてのジョブを起動するための適切なパーミッションが割り当てられている必要があります。すべてのジョブが起動されなかった場合は、操作が完了できなかった理由を示すエラーが返されます。OPTIONS リクエストを使用して、関連するスキーマを返します。詳細は、「自動化実行 API の概要」の「リファレンス」セクションの 自動化実行 API の概要 を参照してください。

6.10.1. ジョブテンプレートの変数

Automation Controller は、ジョブテンプレートと Survey で設定された追加の変数とともに、次の変数をジョブ環境に自動的に追加します。

注記
  • awx_* 変数はシステムによって定義されており、オーバーライドすることはできません。
  • awx_job_template_name などのジョブコンテキストに関する変数は、extra_vars に設定されている場合は影響を受けません。
  • awx_job_id: このジョブ実行のジョブ ID。
  • awx_job_launch_type: ジョブがどのように開始されたかを示す説明。

    • manual: ジョブはユーザーによって手動で開始されました。
    • relaunch: ジョブは再起動によって開始されました。
    • callback: ジョブはホストコールバックによって開始されました。
    • scheduled: ジョブはスケジュールから開始されました。
    • dependency: ジョブは別のジョブの依存関係として開始されました。
    • workflow: ジョブはワークフロージョブから開始されました。
    • sync: ジョブはプロジェクト同期から開始されました。
    • scm: ジョブはインベントリー SCM 同期として作成されました。
  • awx_job_template_id: このジョブ実行が使用するジョブテンプレート ID。
  • awx_job_template_name: このジョブが使用するジョブテンプレート名。
  • awx_execution_node: このジョブを開始した実行ノード名。
  • awx_project_revision: この特定のジョブが使用するソースツリーのリビジョン識別子 (ジョブのフィールドの scm_revision と同じです)。
  • awx_project_scm_branch: ジョブテンプレートが使用するプロジェクトに設定されたデフォルトのプロジェクト SCM ブランチ
  • awx_job_scm_branch: SCM ブランチがジョブによって上書きされた場合、ここに値が表示されます。
  • awx_user_email: このジョブを開始したコントローラーユーザーのユーザーメールアドレス。これはコールバックまたはスケジュールされたジョブでは使用できません。
  • awx_user_first_name: このジョブを開始した Automation Controller ユーザーの名。これはコールバックまたはスケジュールされたジョブでは使用できません。
  • awx_user_id: このジョブを開始した Automation Controller ユーザーのユーザー ID。これはコールバックまたはスケジュールされたジョブでは使用できません。
  • awx_user_last_name: このジョブを開始した Automation Controller ユーザーの姓。これはコールバックまたはスケジュールされたジョブでは使用できません。
  • awx_user_name: このジョブを開始した Automation Controller ユーザーのユーザー名。これはコールバックまたはスケジュールされたジョブでは使用できません。
  • awx_schedule_id: このジョブを開始したスケジュールの ID (該当する場合)。
  • awx_schedule_name: このジョブを開始したスケジュールの名前 (該当する場合)。
  • awx_workflow_job_id: このジョブを開始したワークフロージョブの ID (該当する場合)。
  • awx_workflow_job_name: このジョブを開始したワークフロージョブの名前 (該当する場合)。これはワークフロージョブテンプレートと同じであることに注意してください。
  • awx_inventory_id: このジョブが使用するインベントリーの ID (該当する場合)。
  • awx_inventory_name: このジョブが使用するインベントリーの名前 (該当する場合)。

互換性のために、すべての変数に "awx" という接頭辞が付いています (例: awx_job_id)。

6.11. ジョブテンプレートの複製

ジョブテンプレートを複製しても、関連付けられているスケジュール、通知、または権限は複製されません。スケジュールと通知は、ジョブテンプレートの複製を作成するユーザーまたは管理者が再作成する必要があります。ジョブテンプレートを複製するユーザーに管理者権限が付与されていても、ジョブテンプレートに権限が割り当てられる (複製される) ことはありません。

手順

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. 複製するテンプレートに関連する {MoreActionIcon} アイコンをクリックし、 Duplicate Template Duplicate Template アイコンを選択します。

    • 複製元のテンプレートの名前とタイムスタンプが付いた新しいテンプレートがテンプレートのリストに表示されます。
  3. クリックして新しいテンプレートを開き、Edit template をクリックします。
  4. Name フィールドの内容を新しい名前に置き換え、他のフィールドのエントリーを入力または変更して、このページを完成させます。
  5. Save job template をクリックします。

6.12. ファクトキャッシング

Automation Controller は、Ansible Fact Cache プラグインを通じてホストごとにファクトを保存および取得できます。この動作はジョブテンプレートごとに設定できます。ファクトキャッシングはデフォルトでオフになっていますが、こちらを有効にして、実行中のジョブに関連するインベントリーの全ホストに対するファクトリクエストに対応できます。これにより、ホストファクトのインベントリー全体にアクセスしながら、--limit を指定してジョブテンプレートを使用できるようになります。プラグインによってホストごとに適用されるグローバルタイムアウト設定 (秒単位) を指定するには、ナビゲーションパネルから SettingsAutomation ExecutionJob を選択し、Per-Host Ansible Fact Cache Timeout フィールドを編集します。

ファクトキャッシュ (use_fact_cache=True) を使用するジョブを起動すると、各ホストの ansible_facts はすべてコントローラーによってジョブのインベントリーに保存されます。

Automation Controller に同梱されている Ansible Fact Cache プラグインは、ファクトキャッシュが有効なジョブ (use_fact_cache=True) で有効になります。

ファクトキャッシュが有効になっているジョブ (use_fact_cache=True) が実行されると、Automation Controller はインベントリー内のホストの全レコードを復元します。ホストごとに現在保存されているファクトよりも更新時刻が新しいレコードはデータベース内で更新されます。

新しいファクトと変更されたファクトは、Automation Controller のログ機能を通じて記録されます。具体的には、system_tracking namespace またはロガーに対してです。ロギングペイロードには次のフィールドが含まれます。

  • host_name
  • inventory_id
  • ansible_facts

ansible facts は、Automation Controller インベントリー (inventory_id) に含まれる host_name の全 Ansible ファクトのディクショナリーです。

注記

ホスト名にスラッシュ (/) が含まれている場合、ファクトキャッシュはそのホストでは機能しません。100 台のホストを含むインベントリーがあり、1 台のホストの名前に / が含まれている場合、残りの 99 台のホストは引き続きファクトを収集します。

6.13. ファクトキャッシングの利点

ファクトキャッシュにより、ファクト収集の実行にかかる時間を節約できます。1000 個のホストとフォークに対して実行するジョブに Playbook がある場合、これらの全ホストからファクトを収集するのに 10 分費やすことができます。ただし、ジョブを定期的に実行する場合、最初の実行でこれらのファクトがキャッシュされ、次の実行でデータベースから取得されます。これにより、大規模なインベントリーに対するジョブの実行時間が短縮されます。

注記

ファクトキャッシュを適用するために ansible.cfg ファイルを変更しないでください。カスタムファクトキャッシュは、コントローラーのファクトキャッシュ機能と競合する可能性があります。必ず Automation Controller に同梱されているファクトキャッシュモジュールを使用してください。

ジョブテンプレートを作成または編集するときに Enable fact storage オプションをオンにすると、キャッシュされたファクトをジョブで使用できます。

ファクトを消去するには、Ansible clear_facts メタタスク を実行します。以下は、Ansible clear_facts メタタスクを使用する Playbook の例です。

- hosts: all
  gather_facts: false
  tasks:
    - name: Clear gathered facts from all currently targeted hosts
      meta: clear_facts

ファクトキャッシュの API エンドポイントは次の場所にあります。

http://<controller server name>/api/v2/hosts/x/ansible_facts

6.14. クラウドインベントリーでのクラウド認証情報の使用

クラウド認証情報は、クラウドインベントリーを同期するときに使用できます。また、ジョブテンプレートに関連付けて、Playbook で使用するためにランタイム環境に含めることもできます。次のクラウド認証情報がサポートされています。

6.15. OpenStack

次のサンプル Playbook は、nova_compute Ansible OpenStack クラウドモジュールを呼び出し、認証情報を必要とします。

  • auth_url
  • username
  • password
  • project name

これらのフィールドは、環境変数 OS_CLIENT_CONFIG_FILE を通じて Playbook で利用できるようになります。これは、クラウド認証情報の内容に基づいてコントローラーによって書き込まれた YAML ファイルを指します。次のサンプル Playbook は、YAML ファイルを Ansible 変数空間にロードします。

  • OS_CLIENT_CONFIG_FILE の例:
clouds:
  devstack:
    auth:
      auth_url: http://devstack.yoursite.com:5000/v2.0/
      username: admin
      password: your_password_here
      project_name: demo
  • Playbook の例:
- hosts: all
  gather_facts: false
  vars:
    config_file: "{{ lookup('env', 'OS_CLIENT_CONFIG_FILE') }}"
    nova_tenant_name: demo
    nova_image_name: "cirros-0.3.2-x86_64-uec"
    nova_instance_name: autobot
    nova_instance_state: 'present'
    nova_flavor_name: m1.nano


    nova_group:
      group_name: antarctica
      instance_name: deceptacon
      instance_count: 3
  tasks:
    - debug: msg="{{ config_file }}"
    - stat: path="{{ config_file }}"
      register: st
    - include_vars: "{{ config_file }}"
      when: st.stat.exists and st.stat.isreg


    - name: "Print out clouds variable"
      debug: msg="{{ clouds|default('No clouds found') }}"


    - name: "Setting nova instance state to: {{ nova_instance_state }}"
      local_action:
        module: nova_compute
        login_username: "{{ clouds.devstack.auth.username }}"
        login_password: "{{ clouds.devstack.auth.password }}"

6.15.1. Amazon Web Services

Amazon Web Services (AWS) クラウド認証情報は Playbook の実行時に以下の環境変数として公開されます (ジョブテンプレートで、設定に必要なクラウド認証情報を選択します):

  • AWS_ACCESS_KEY_ID
  • AWS-SECRET_ACCESS_KEY

各 AWS モジュールは、aws_access_key_id または aws_secret_access_key モジュールオプションを設定することなく、コントローラーでの実行時にこれらの認証情報を暗黙的に使用します。

6.15.2. Google

Google クラウド認証情報は、Playbook の実行時に以下の環境変数として公開されます (ジョブテンプレートで、設定に必要なクラウド認証情報を選択します)。

  • GCE_EMAIL
  • GCE_PROJECT
  • GCE_CREDENTIALS_FILE_PATH

各 Google モジュールは、service_account_emailproject_id、または pem_file モジュールオプションを設定することなく、コントローラーでの実行時にこれらの認証情報を暗黙的に使用します。

6.15.3. Azure

Azure クラウド認証情報は、Playbook の実行時に以下の環境変数として公開されます (ジョブテンプレートで、設定に必要なクラウド認証情報を選択します)。

  • AZURE_SUBSCRIPTION_ID
  • AZURE_CERT_PATH

各 Azure モジュールは、subscription_id または management_cert_path モジュールオプションを設定せずにコントローラー経由で実行されるときに、これらの認証情報を暗黙的に使用します。

6.15.4. VMware

VMware クラウド認証情報は、Playbook の実行時に以下の環境変数として公開されます (ジョブテンプレートで、設定に必要なクラウド認証情報を選択します)。

  • VMWARE_USER
  • VMWARE_PASSWORD
  • VMWARE_HOST

次のサンプル Playbook は、これらの認証情報の使用法を示しています。

- vsphere_guest:
    vcenter_hostname: "{{ lookup('env', 'VMWARE_HOST') }}"
    username: "{{ lookup('env', 'VMWARE_USER') }}"
    password: "{{ lookup('env', 'VMWARE_PASSWORD') }}"
    guest: newvm001
    from_template: yes
    template_src: linuxTemplate
    cluster: MainCluster
    resource_pool: "/Resources"
    vm_extra_config:
      folder: MyFolder

6.16. プロビジョニングコールバック

プロビジョニングコールバックは、Automation Controller の機能です。これを使用すると、ユーザーが Automation Controller コンソールからホストを管理するジョブを起動するのを待たずに、ホストが自身に対して Playbook の実行を開始できます。

プロビジョニングコールバックは、呼び出し側ホストで Playbook を実行するためにのみ使用され、クラウドバースティングを目的としています。クラウドバースティングは、コンピューティング需要の急増時にパブリッククラウドに「バースト」することで、プライベートクラウドがパブリッククラウドリソースにアクセスできるようにするクラウドコンピューティング設定です。

別のホストに対してジョブを実行しないように、認証キーの送信などの設定用にクライアントからサーバーへの通信が必要な新しいインスタンス。これにより、次のものが自動的に設定されます。

  • 別のシステム (AWS 自動スケーリング、キックスタートやプレシードなどの OS プロビジョニングシステムなど) によってプロビジョニングされた後のシステム。
  • Automation Controller API を直接呼び出さずに、プログラムでジョブを起動します。

起動したジョブテンプレートは、プロビジョニングを要求しているホストに対してのみ実行されます。

通常、firstboot タイプのスクリプトまたは cron で、アクセスします。

6.16.1. プロビジョニングコールバックの有効化

手順

  • コールバックを有効にするには、ジョブテンプレートの Provisioning callback オプションをオンにします。ジョブテンプレートの Provisioning callback details が表示されます。

    注記

    Automation Controller のプロビジョニングコールバック機能を動的インベントリーと共に使用しようとする場合、Update on Launch がジョブテンプレートでインベントリーグループに対して設定されている必要があります。

コールバックには、URL を持つ外部ホストが設定を要求できないようにするために、ホスト設定キーも必要です。Host config key にカスタム値を指定します。ホストキーを複数のホスト間で再利用すると、このジョブテンプレートを複数のホストに適用できます。設定を要求できるホストを制御する場合は、このキーをいつでも変更できます。

6.16.2. REST を使用した手動でのコールバック

REST を使用して手動でコールバックするには以下を実行します。

手順

  1. UI で、https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/ という形式のコールバック URL を確認します。

    • このサンプル URL の "7" は、Automation Controller のジョブテンプレート ID です。
  2. ホストからのリクエストが POST であることを確認してください。以下は、curl を使用した例です (すべて 1 行にあります)。

    curl -k -i -H 'Content-Type:application/json' -XPOST -d '{"host_config_key": "redhat"}' \
                      https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/
  3. コールバックを成功させるには、要求元のホストがインベントリーに定義されていることを確認してください。

検証

リクエストが成功すると、Jobs タブにエントリーが表示され、そこで結果と履歴を確認できます。REST を使用してコールバックにアクセスすることもできますが、推奨されるコールバックの使用方法は、Automation Controller に同梱されているサンプルスクリプトの 1 つを使用することです。

  • /usr/share/awx/request_tower_configuration.sh (Linux/UNIX)
  • /usr/share/awx/request_tower_configuration.ps1 (Windows)

これらの使用法は、次に示すように -h フラグを渡すことによってファイルのソースコードに記述されます。

./request_tower_configuration.sh -h
Usage: ./request_tower_configuration.sh <options>


Request server configuration from Ansible Tower.


OPTIONS:
 -h      Show this message
 -s      Controller server (e.g. https://ac.example.com) (required)
 -k      Allow insecure SSL connections and transfers
 -c      Host config key (required)
 -t      Job template ID (required)
 -e      Extra variables

このスクリプトはコマンドを再試行できるため、単純な CURL リクエストよりも強力なコールバックの使用方法です。スクリプトは 1 分に 1 回、最大 10 分間再試行します。

注記

これはスクリプトの例です。200 以外のエラーコードは再試行が必要な一時的なエラーではない可能性があるため、障害シナリオの検出時に、より動的な動作が必要な場合は、このスクリプトを編集します。

Automation Controller の動的インベントリーでコールバックを使用できます。たとえば、サポートされているクラウドプロバイダーの 1 つからクラウドインベントリーを取得する場合などです。このような場合は、Update On Launch の設定とともに、クラウドの API エンドポイントのハンマリングを回避するために、インベントリーソースのインベントリーキャッシュタイムアウトを必ず設定してください。request_tower_configuration.sh スクリプトは 1 分に 1 回、最大 10 分間ポーリングするため、インベントリー (インベントリーソース自体で設定) のキャッシュ無効化にかける推奨の時間値は 1 - 2 分になります。

cron ジョブから request_tower_configuration.sh スクリプトを実行することは推奨できませんが、推奨される cron 間隔は 30 分です。多くのユーザーは主に、オンラインになったタイミングで最新の設定にブートストラップされたベースイメージを有効にするという使用をしているので、繰り返しの設定は、Automation Controller をスケジューリングすることで処理できます。最初の起動時に実行するのがベストプラクティスです。最初の起動スクリプトは、init スクリプトで通常、自身でそのまま削除するため、request_tower_configuration.sh スクリプトのコピーを呼び出す init スクリプトを設定して、自動スケーリングイメージに変換します。

トラブルシューティング

Automation Controller が、定義されたインベントリーのいずれかで名前または IP アドレスでホストを見つけることができない場合、リクエストは拒否されます。この方法でジョブテンプレートを実行する場合は、それ自体に対して Playbook の実行を開始するホストがインベントリーに存在することを確認してください。ホストがインベントリーにない場合、ジョブテンプレートは失敗し、No Hosts Matched のタイプエラーメッセージが表示されます。

ホストがインベントリーに存在せず、インベントリーグループの Update on Launch がオンになっている場合、Automation Controller は、コールバックの実行前にクラウドベースのインベントリーソースの更新を試行します。

6.16.3. 追加変数をプロビジョニングコールバックに渡す方法

通常のジョブテンプレートと同じ方法で、プロビジョニングコールバックで extra_vars を渡すことができます。extra_vars を渡すには、送信されるデータは、アプリケーションまたは JSON のコンテンツタイプとして POST のボディーに含める必要があります。

手順

  • 次のいずれかの方法を使用して、追加の変数を渡します。

    • 独自の extra_vars を追加する場合は、例として次の JSON 形式を使用します。

      '{"extra_vars": {"variable1":"value1","variable2":"value2",...}}'
    • curl を使用して追加の変数をジョブテンプレート呼び出しに渡します。

      root@localhost:~$ curl -f -H 'Content-Type: application/json' -XPOST \
      -d '{"host_config_key": "redhat", "extra_vars": "{\"foo\": \"bar\"}"}' \
      https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback

詳細は、自動化実行の設定curl でのジョブの起動 を参照してください。

6.17. 追加変数

survey 変数を渡すと、Automation Controller 内の追加変数 (extra_vars) として渡されます。ただし、(Survey の場合と同様に) 追加の変数をジョブテンプレートに渡すと、インベントリーおよびプロジェクトから渡される他の変数がオーバーライドされる可能性があります。

デフォルトでは、extra_vars!unsafe とマークされます。ただし、ジョブテンプレートの Extra Variables でユーザーが指定したものは、そのようにマークされません。これらは、ジョブテンプレートを追加または編集する権限を持つユーザーのみが追加できるため、信頼できるものです。たとえば、ネストされた変数は、プロンプトとして入力されたときに展開されません。Jinja の括弧は文字列として扱われるためです。安全でない変数の詳細は、Unsafe or raw strings を参照してください。

注記

ジョブ起動 API に渡される extra_vars は、以下のいずれかが該当する場合のみ有効です。

  • それらは有効な survey の変数に対応する。
  • ask_variables_on_launchTrue に設定されている。

debug = true のインベントリーの変数が定義されています。この変数 debug = true は、ジョブテンプレート Survey でオーバーライドされる可能性があります。

渡す変数がオーバーライドされないようにするには、Survey で変数を再定義して変数が含まれていることを確認します。インベントリー、グループ、ホストの各レベルで追加の変数を定義できます。

ALLOW_JINJA_IN_EXTRA_VARS パラメーターを指定する場合は、自動化実行の設定ALLOW_JINJA_IN_EXTRA_VARS 変数 セクションを参照して設定してください。

ジョブテンプレートの追加変数ディクショナリーは Survey 変数にマージされます。

以下は、YAML および JSON 形式の extra_vars の簡略化された例です。

  • YAML 形式の設定:
launch_to_orbit: true
satellites:
  - sputnik
  - explorer
  - satcom
  • JSON 形式の設定:
{
  "launch_to_orbit": true,
  "satellites": ["sputnik", "explorer", "satcom"]
}

次の表は、Automation Controller での変数の順序に関する動作 (階層) を、Ansible と比較したものです。

Expand
表6.1 Automation Controller 変数の優先順位の階層 (最後にリストされたものが優先されます)
AnsibleAutomation Controller

ロールのデフォルト

ロールのデフォルト

動的インベントリー変数

動的インベントリー変数

インベントリー変数

Automation Controller インベントリー変数

インベントリーの group_vars

Automation Controller グループ変数

インベントリーの host_vars

Automation Controller ホスト変数

Playbook の group_vars

Playbook の group_vars

Playbook の host_vars

Playbook の host_vars

ホストのファクト

ホストのファクト

登録された変数

登録された変数

ファクトの設定

ファクトの設定

プレイ変数

プレイ変数

プレイの vars_prompt

(サポート対象外)

プレイの vars_files

プレイの vars_files

ロールと include 変数

ロールと include 変数

ブロック変数

ブロック変数

タスク変数

タスク変数

追加変数

ジョブテンプレートの追加変数

 

ジョブテンプレートの Survey (デフォルト)

 

ジョブ起動の追加変数

6.17.1. ジョブテンプレートの起動

ジョブを手動で再起動する代わりに、launch_typerelaunch に設定することで再起動を指定します。再起動の動作は、extra_vars を継承しないという点で、起動の動作とは異なります。

ジョブの再起動は継承ロジックを使用しません。再起動されるジョブに対して計算されたものと同じ extra_vars を使用します。

extra_vars を指定せずにジョブテンプレートを起動すると、j1 というジョブが作成されます。次に、ジョブテンプレートを編集し、extra_vars を追加します ("{ "hello": "world" }" の追加など)。

j1 を再起動すると j2 が作成されますが、継承するロジックがなく、j1 には extra_vars がないため、j2 には extra_vars が指定されません。

j1 の作成後に追加した extra_vars を使用してジョブテンプレートを起動すると、作成された再起動ジョブ (j3) には extra_vars が含まれます。j3 を再起動すると、extra_vars も含まれる j4 が作成されます。

第7章 ジョブスライス

スライスされたジョブは、分散ジョブの概念を指します。多数のホストにわたってジョブを実行するには、分散ジョブを使用します。その後、クラスター全体で並行してスケジュールできるインベントリーの一部に対して、多数の ansible-playbook を実行できます。

デフォルトでは、Ansible は単一のコントロールインスタンスからジョブを実行します。ホスト間のオーケストレーションを必要としないジョブの場合、ジョブスライスは、Automation Controller の機能を利用してクラスター内の多数のノードに作業を分散します。

ジョブスライスは、ジョブテンプレートフィールド job_slice_count を追加することで機能します。これは、Ansible 実行をスライスするジョブの数を指定します。この数値が 1 より大きい場合、Automation Controller はジョブではなくジョブテンプレートからワークフローを生成します。インベントリーはスライスジョブ間で均等に分散されます。その後、ワークフロージョブが開始され、通常のワークフローであるかのように処理が進みます。

ジョブが開始すると、API がジョブリソース (job_slice_count = 1 の場合) またはワークフロージョブリソースのいずれかを返します。対応するユーザーインターフェイス (UI) が適切な画面にリダイレクトされ、実行のステータスが表示されます。

7.1. ジョブスライスの留意事項

ジョブスライスの設定時には以下を考慮してください。

  • スライスされたジョブはワークフロージョブを作成し、さらにワークフロージョブがジョブを作成します。
  • ジョブスライスは、ジョブテンプレート、インベントリー、スライス数で構成されます。
  • スライスされたジョブは、実行されると、各インベントリーを複数の "一切れサイズ" のチャンクに分割します。次に、適切なインベントリーの各チャンクで ansible-playbook 実行のジョブをキューに入れます。ansible-playbook に入力されるインベントリーは、元のインベントリーの短縮バージョンです。これには、その特定スライス内のホストだけが含まれています。Jobs リストに表示される完了したスライスジョブには、実行されたスライスジョブの数とともにラベルが付けられます。

    スライスされたジョブのリストビュー
  • スライスされたジョブでのスケジュールの動作は、通常通りです (フォーク数、容量に合わせたキューへの追加、インベントリーマッピングをもとにしたインスタンスグループへの割り当て)。

    注記

    ジョブスライスは、ジョブの実行を水平方向にスケーリングすることを目的としています。ジョブテンプレートでジョブスライスを有効にすると、処理対象のインベントリーが起動時に設定されたスライスの数に分割され、スライスごとにジョブが開始されます。

    通常、スライスの数は、コントローラーノードの数と同じかそれ以下になります。ジョブスライスの数を非常に大きな数に設定することもできますが、パフォーマンスが低下する可能性があります。ジョブスケジューラーは、スライスされたジョブのワークフローノードを何千個も同時にスケジュールするようには設計されていません。

    • プロンプトまたは追加の変数を含むスライスジョブテンプレートは、標準ジョブテンプレートと同じように動作し、結果として得られるワークフロージョブ内のスライスジョブのセット全体にすべての変数と制限を適用します。たださい、スライスされたジョブに制限が課された場合には、この制限が原因で、スライスにホストが割り当てられず、これらのスライスが失敗するので、ジョブ全体が失敗してしまいます。
    • 分散されたジョブのジョブスライスのステータスは、ワークフロージョブと同じ方法で計算されます。サブジョブでの失敗した内容が未処理の場合は、失敗となります。
  • (個別ホストへの変更適用などではなく) ホスト全体でオーケストレーションする予定のジョブは、スライスジョブとして設定しないでください。
  • スライスされたジョブが失敗した場合、Automation Controller は特定の失敗した Playbook を検出したり説明したりしようとしません。

7.2. ジョブスライスの実行動作

ジョブがスライスされると、どのノードでも実行できます。システムの容量が不十分な場合、一部のシステムが異なる時間に実行される可能性があります。スライスジョブの実行中、現在実行中のワークフローとジョブスライス、およびそれらの詳細を個別に表示するためのリンクがジョブの詳細に表示されます。

通常、ジョブテンプレートは、同時に実行されるようにデフォルトで設定されていません (API で allow_simultaneous をオンにするか、UI で Concurrent jobs をオンにする必要があります)。スライスはこの動作をオーバーライドし、その設定が解除されている場合でも、allow_simultaneous を暗黙的に指定します。これを指定する方法と、ジョブテンプレート設定におけるジョブスライスの数については、ジョブテンプレート を参照してください。

ジョブテンプレート セクションでは、UI で次の操作を実行する方法についてさらに詳しく説明されています。

  • スライスジョブが複数あるジョブテンプレートでワークフロージョブを起動する
  • スライスジョブテンプレートを起動した後、ワークフロー全体または個々のジョブをキャンセルする
  • スライスジョブの実行が完了した後にワークフロー全体または個別ジョブを再起動する
  • ジョブテンプレートの起動後にワークフローとスライスジョブに関する情報を表示する
  • ジョブスライスの検索 セクションに従って、スライスジョブを作成した後に、そのジョブだけを検索する

7.3. ジョブスライスの検索

スライスジョブの検索を簡素化するには、検索機能を使用して検索フィルターを適用します。

  • ジョブリストに適用してスライスジョブだけを表示する
  • ジョブリストに適用してジョブスライスの親ワークフロージョブのみを表示する
  • ジョブテンプレートリストに適用してスライスジョブを生成するジョブテンプレートのみを表示する

手順

  • 次のいずれかの方法を使用して、スライスジョブを検索します。

    • ジョブリストのスライスジョブのみを表示するには、他の多くの場合と同様に、タイプ (ここではジョブ) または unified_jobs でフィルタリングできます。

      /api/v2/jobs/?job_slice_count__gt=1
    • ジョブスライスの親ワークフロージョブのみを表示する方法:

      /api/v2/workflow_jobs/?job_template__isnull=false
    • スライスジョブを生成するジョブテンプレートのみを表示する方法:

      /api/v2/job_templates/?job_slice_count__gt=1

第8章 ワークフロージョブテンプレート

Automation ExecutionTemplates から、ジョブテンプレートとワークフロージョブテンプレートの両方を作成できます。

ジョブテンプレートは、ジョブテンプレート を参照してください。

ワークフロージョブテンプレートは、一連の異種リソースをリンクして、リリースプロセスに含まれていたジョブ全体を 1 つの単位として追跡します。これらのリソースには以下が含まれます。

  • ジョブテンプレート
  • ワークフロージョブテンプレート
  • プロジェクト同期
  • インベントリーソース同期

Automation Templates ページには、現在利用可能なワークフローとジョブテンプレートが表示されます。

テンプレート名を選択すると、テンプレートが最後に実行された日時など、テンプレートの詳細情報が表示されます。このリストは名前のアルファベット順に並べ替えられていますが、他の条件で並べ替えたり、テンプレートのさまざまなフィールドや属性で検索したりできます。

この画面から、ワークフロージョブテンプレートを起動 Launch icon 、編集 Edit icon 、複製 Duplicate icon できます。

ワークフローテンプレートにのみ、ワークフローエディターにアクセスするためのショートカットとしてワークフロービジュアライザーアイコン ( Workflow visualizer ) があります。

ワークフローテンプレートのホーム
注記

ワークフローテンプレートは、別のワークフローテンプレートの設定要素として使用できます。ワークフローテンプレートでいくつかの設定を指定することで、Prompt on Launch を有効にできます。これらの設定は、ワークフロージョブテンプレートレベルで編集できます。これらは、個々のワークフローテンプレートレベルで割り当てられた値には影響しません。詳しい手順は、ワークフロービジュアライザー セクションを参照してください。

8.1. ワークフロージョブテンプレートの作成

新しいワークフロージョブテンプレートを作成するには、次の手順を実行します。

重要

ワークフローテンプレートに制限を設定する場合、Prompt on launch をオンにしないと、制限がジョブテンプレートに渡されません。実行している Playbook に制限が必須である場合、これにより Playbook が失敗する可能性があります。

手順

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. Automation Templates ページで、Create template リストから Create workflow job template を選択します。
  3. 次のフィールドに適切な詳細を入力します。

    注記

    フィールドで Prompt on launch チェックボックスがオンになっている場合、ワークフローテンプレートを起動するか、別のワークフローテンプレート内でワークフローテンプレートを使用すると、そのフィールドの値の入力を求めるプロンプトが表示されます。ほとんどのプロンプト値は、ジョブテンプレートに設定されている値をオーバーライドします。次の表に例外を示します。

    Expand
    フィールドオプションPrompt on Launch

    Name

    ジョブの名前を入力します。

    該当なし

    Description

    必要に応じて、任意の説明を入力します (オプション)。

    該当なし

    Organization

    ログインしているユーザーが使用できる組織から、このテンプレートで使用する組織を選択します。

    該当なし

    Inventory

    必要に応じて、ログインしたユーザーが使用できるインベントリーから、このテンプレートで使用するインベントリーを選択します。

    はい

    Limit

    Playbook が管理または影響を与えるホストのリストをさらに制限するためのホストのパターンを指定します。複数のパターンをコロン (:) で区切ることができます。コア Ansible と同じです。

    • a:b は「a または b のグループに含まれる」という意味です。
    • a:b:&c は、「a または b に含まれるが、c には必ず含まれなければならない」という意味です。
    • a:!b は「a にはあるが、b には絶対にない」という意味です。

    詳細は、Ansible ドキュメントの Patterns: targeting hosts and groups を参照してください。

    はい

    選択すると、デフォルト値が指定されている場合でも、起動時に制限を選択するように求めます。

    Source control branch

    ワークフローのブランチを選択します。このブランチは、ブランチを要求するすべてのワークフロージョブテンプレートノードに適用されます。

    はい

    Labels

    • 必要に応じて、このワークフロージョブテンプレートを説明するラベル (devtest など) を指定します。ラベルを使用して、表示内のワークフロージョブテンプレートと完了したジョブをグループ化およびフィルタリングします。
    • ラベルは、ワークフローテンプレートの追加時に作成されます。ラベルは、ワークフローテンプレートで提供されるプロジェクトを使用して、単一の組織に関連付けられます。組織のメンバーは、編集パーミッション (管理者ロールなど) を持っている場合、ジョブテンプレートにラベルを作成できます。
    • ジョブテンプレートを保存すると、ワークフロージョブテンプレートの Details ビューにラベルが表示されます。
    • ラベルはワークフローテンプレートにのみ適用され、ワークフローで使用されるジョブテンプレートノードには適用されません。
    • ラベルの横にある Disassociate を選択して削除します。ラベルが削除されると、そのラベルはその特定のジョブまたはジョブテンプレートとの関連付けが解除されますが、ラベルを参照する他のジョブには関連付けられたままになります。

    はい

    選択すると、デフォルト値が指定されている場合でも、必要に応じて起動時に追加のラベルを指定するように求められます。- 既存のラベルは削除できません。 Disassociate を選択すると、新たに追加されたラベルだけが削除され、既存のデフォルトラベルは削除されません。

    Job tags

    Create ドロップダウンを入力して選択し、Playbook のどの部分を実行するかを指定します。詳細と例は、Ansible ドキュメントの Tags を参照してください。

    はい

    Skip tags

    Create ドロップダウンを入力して選択し、スキップする Playbook の特定のタスクまたは部分を指定します。詳細と例は、Ansible ドキュメントの Tags を参照してください。

    はい

    Extra variables

    • 追加のコマンドライン変数を Playbook に渡します。

    これは、Ansible ドキュメントの Controlling how Ansible behaves: precedence rules に記載されている ansible-playbook の "-e" または "-extra-vars" コマンドラインパラメーターです。- YAML または JSON を使用してキーまたは値のペアを指定します。これらの変数には優先順位の最大値があり、他の場所で指定された他の変数をオーバーライドします。git_branch: production release_version: 1.5 は、値の例です。

    はい

    スケジュールで extra_vars を指定できるようにするには、ワークフロージョブテンプレートで Extra variablesPrompt on launch を選択するか、ジョブテンプレートで Survey を有効にする必要があります。回答された Survey の質問は extra_vars になります。追加変数の詳細は、追加変数 を参照してください。

  4. 必要に応じて、このテンプレートを起動するための次の Options を指定します。

    • ワークフロージョブテンプレートの起動に使用する定義済みの SCM システム Web サービスと接続する機能をオンにするには、Enable webhook をオンにします。GitHub と GitLab がサポートされている SCM システムです。

      • Webhook を有効にすると、他のフィールドが表示され、以下の追加情報の入力を求められます。

        • Webhook service: Webhook からリッスンするサービスを選択します。
        • Webhook URL: POST 要求を送信する Webhook サービスの URL が自動的に入力されます。
        • Webhook key: Webhook サービスが Automation Controller に送信するペイロードに署名する際に使用するための、生成された共有シークレット。このサービスからの Webhook が Automation Controller で受け入れられるように、Webhook サービスの設定で指定する必要があります。Webhook の設定の関連情報は、Webhook の使用 を参照してください。
    • このワークフローの同時実行を許可するには、Enable concurrent Jobs をオンにします。詳細は、Automation Controller の容量決定とジョブへの影響 を参照してください。
  5. ワークフローテンプレートの設定が完了したら、Create workflow job template をクリックします。

テンプレートを保存すると、ワークフローテンプレートページが終了し、ワークフロービジュアライザーが開きます。ここでワークフローを構築できます。詳細は、ワークフロービジュアライザー セクションを参照してください。それ以外の場合は、次のいずれかの方法を選択します。

  • ワークフロービジュアライザーを閉じて、新しく保存したテンプレートの Details タブに戻ります。そこで次のタスクを実行できます。

    • パーミッション、通知、スケジュール、Survey を確認、編集、追加する
    • 完了したジョブの表示
    • ワークフローテンプレートを構築する
  • Launch template をクリックし、ワークフローを起動します。

    注記

    起動する前にテンプレートを保存してください。保存しないと、Launch template を使用できるようになりません。Notifications タブは、テンプレートを保存した後にのみ表示されます。

8.2. 権限の使用

Team Access または User Access タブをクリックして、ユーザーとチームメンバーに関連付けられた権限を確認、付与、編集、削除します。

Add roles をクリックし、プロンプトに従ってこのワークフローテンプレート用の新しい権限を作成し、権限を割り当てます。

8.3. 通知の使用

ワークフロージョブテンプレートでの通知の操作は、通知の操作 を参照してください。

8.4. 完了したワークフロージョブの表示

Jobs タブには、実行されたジョブテンプレートのリストが表示されます。各ジョブの横にある Expand アイコンをクリックして、各ジョブの詳細を表示します。

このビューから、ジョブ ID、ワークフロージョブの名前をクリックすると、その内容が図で表示されます。次の例は、ワークフロージョブのジョブの詳細を示しています。

ワークフローテンプレートのジョブ ID

ノードには、識別しやすいようにラベルが付けられています。詳細は、ワークフロービジュアライザー セクションの凡例を参照してください。

8.5. ワークフロージョブテンプレートのスケジュール設定

Schedules タブを選択して、特定のワークフロージョブテンプレートのスケジュールにアクセスします。

ワークフロージョブテンプレートの実行をスケジュールする方法の詳細は、ジョブテンプレートのスケジュール設定 セクションを参照してください。

ネストされたワークフローで使用されるワークフロージョブテンプレートに Survey が含まれている場合、またはインベントリーオプションで Prompt on launch が選択されている場合、スケジュールフォームの SAVE および CANCEL オプションの横に PROMPT オプションが表示されます。PROMPT をクリックすると、オプションの INVENTORY ステップが表示され、インベントリーを指定または削除できます。変更せずにこのステップをスキップすることもできます。

8.6. ワークフロージョブテンプレートでの Survey

Run または Check のジョブタイプを含むワークフローでは、ワークフロージョブテンプレートの作成画面または編集画面で Survey を設定する方法が提供されます。

ワークフロージョブテンプレートでの Survey の作成方法やオプションの Survey の質問など、ジョブ Survey の詳細は、ジョブテンプレートでの Survey セクションを参照してください。

8.7. ワークフロービジュアライザー

ワークフロービジュアライザーは、ジョブテンプレート、ワークフローテンプレート、プロジェクト同期、およびインベントリー同期をグラフィカルにリンクして、ワークフローテンプレートを構築する方法を提供します。ワークフローテンプレートを構築する前に、親ノード、子ノード、兄弟ノードのさまざまなシナリオに関連する考慮事項について、Automation Controller のワークフロー セクションを参照してください。

8.7.1. ワークフローの構築

次のノードタイプの 2 つ以上を任意に組み合わせて設定して、ワークフローを構築できます。

  • テンプレート (ジョブテンプレートまたはワークフロージョブテンプレート)
  • プロジェクトの同期
  • インベントリー同期
  • 承認

手順

  1. ワークフロービジュアライザーを起動するには、次のいずれかの方法を使用します。

    • ナビゲーションパネルから、Automation ExecutionTemplates を選択します。

      • ワークフローテンプレートを選択し、View workflow visualizer をクリックします。
    • Automation Templates リストビューから、ワークフロージョブテンプレートの横にあるアイコン Visualizer をクリックします。
  2. Add step をクリックすると、ワークフローに追加するノードのリストが表示されます。
  3. Node type リストから、追加するノードのタイプを選択します。

    • Approval ノードを選択した場合は、承認ノード で詳細を確認してください。

      ノードを選択すると、そのノードに関連する有効なオプションが表示されます。

      注記

      ワークフローグラフにデータを入力するときに、デフォルトのインベントリーがないジョブテンプレートを選択すると、親ワークフローのインベントリーが使用されます。ジョブテンプレートでは認証情報は必須ではありません。ただし、パスワードを必要とする認証情報がジョブテンプレートに含まれている場合、その認証情報を要求されている認証情報に置き換えないと、ワークフローのジョブテンプレートを選択できません。

  4. ノードタイプを選択すると、ワークフローの構築が開始され、選択したノードに対して実行するアクションのタイプを指定する必要があります。このアクションはエッジタイプとも呼ばれます。
  5. ノードが root ノードの場合には、エッジタイプはデフォルトで Always になり、編集できません。後続のノードでは、次のシナリオ (エッジタイプ) のいずれかを選択して、それぞれに適用できます。

    • Always run: 成功または失敗にかかわらず、実行を継続します。
    • Run on success: 正常に完了したら、次のテンプレートを実行します。
    • Run on fail: 失敗後、別のテンプレートを実行します。
  6. Convergence フィールドから、ノードが収束ノードである場合のノードの動作を選択します。

    • Any はデフォルトの動作で、次の収束ノードをトリガーする前に、任意のノードが指定どおりに完了できます。いずれかの親のステータスがいずれかの実行条件を満たしている場合、任意 の子ノードが実行されます。任意 のノードではすべてのノードが完了させる必要がありますが、想定した結果で完了させる必要があるのは 1 つのノードのみです。
    • 次のノードを収束してトリガーする前に、すべてのノードが指定どおりに完了させるようにするには、All を選択します。all * ノードの目的は、子ノードが実行できるように、親ノードすべてを想定の結果で完了させることです。ワークフローは、子ノードを実行するためにすべての親が期待どおりに動作することを確認します。それ以外の場合は、子ノードは実行されません。

      選択すると、グラフィカルビューでノードに ALL というラベルが付けられます。

      Convergent node all

      注記

      ノードがルートノードであるか、またはノードが収束していないノードである場合、Convergence ルールの設定は適用されません。その動作は、それをトリガーするアクションによって決定されるためです。

  7. ワークフローで使用されるジョブテンプレートのパラメーターのいずれかで Prompt on launch が選択されている場合、Prompt オプションが表示され、ノードレベルでそれらの値を変更できるようになります。ウィザードを使用して各タブの値を変更し、Preview タブで Confirm をクリックします。

    ワークフローで使用されるワークフローテンプレートのインベントリーオプションとして Prompt on launch が選択されている場合は、ウィザードを使用してプロンプトでインベントリーを指定します。親ワークフローに独自のインベントリーがある場合、ここで提供されるインベントリーはオーバーライドされます。

    注記

    ワークフロージョブテンプレートに、詳細情報の入力を求める必須フィールドがあるが、デフォルトの値がない場合、ノードの作成時に SELECT オプションを有効にする前にその値を指定する必要があります。

    次の 2 つのケースでは、PROMPT オプションによって値が指定されるまで、SELECT オプションが無効になります。

    1. ワークフロージョブテンプレートで Prompt on launch チェックボックスをオンにしたが、デフォルトを指定しない場合。
    2. 必須であるがデフォルトの回答を指定しない Survey の質問を作成する場合。

    ただし、認証情報の場合はこの限りではありません。ノードの作成時にノードの起動に必要なものをすべて指定する必要があるため、ワークフローノードの作成時には、起動時にパスワードを必要とする認証情報は許可されません。ワークフロージョブテンプレートで認証情報の入力を求められた場合、Automation Controller でパスワードを必要とする認証情報を選択できません。

    そのノードでの変更を適用するには、プロンプトウィザードが閉じたときに SELECT をクリックする必要もあります。それ以外の場合、加えた変更はジョブテンプレートに設定された値に戻ります。

    ノードが作成されると、そのジョブタイプのラベルが付けられます。各ワークフローノードに関連付けられたテンプレートは、進行中に選択された実行シナリオに基づいて実行されます。Legend をクリックすると、各実行シナリオとそのジョブタイプの凡例が表示されます。

    Workflow ドロップダウンリスト
  8. ノードの上にマウスをかざすと、ノードを編集したり、ステップとリンクを追加したり、選択したノードを削除したりできます。

    注記

    リンクを追加する際、ステップの上にカーソルを合わせたときに赤い枠線が表示される場合、その 2 つのステップを接続することはできません。これは、ユーザーが "循環依存関係" を作成し、ワークフローが無限ループに陥って終了しない状態になるのを防ぐための予防策です。

    ノードのオプション
  9. ノードを追加または編集したら、Finish をクリックして変更を保存し、グラフィカルビューにレンダリングします。ワークフローを構築する可能な方法は、ノードの構築シナリオ を参照してください。
  10. ワークフロージョブテンプレートのビルドが完了したら、Save をクリックしてワークフロージョブテンプレート全体を保存し、新しいワークフローテンプレートの詳細ページに戻ります。
重要

Close をクリックしても作業内容は保存されませんが、ワークフロービジュアライザー全体が閉じられるため、再度開始する必要があります。

8.7.2. 承認ノード

Approval ノードを選択すると、ワークフローを進めるために介入が必要になります。これは、ワークフローで次の Playbook に進むことを承認できるように、Playbook 間でワークフローを一時停止する手段として機能します。これにより、ユーザーは指定された介入時間が与えられますが、別のトリガーを待たずにできるだけ早く続行できるようになります。

タイムアウトのデフォルトはなしですが、リクエストの有効期限が切れて自動的に拒否されるまでの時間を指定できます。承認ノードの情報を選択して指定すると、横に一時停止アイコンが付いた状態でグラフィカルビューに表示されます。

承認ノード

承認者は、次の基準を満たします。

  • 承認ノードを含むワークフロージョブテンプレートを実行できるユーザー。
  • 組織管理者以上の権限を持つユーザー (そのワークフロージョブテンプレートに関連付けられた組織に対して)。
  • 特定のワークフロージョブテンプレート内で明示的に割り当てられた Approve パーミッションを持つユーザー。

保留中の承認ノードが指定された制限時間内に承認されない場合 (有効期限が割り当てられている場合)、または拒否された場合、それらのノードは "timed out" または "failed" としてマークされ、次の "on fail node" または "always node" に移動します。承認された場合は、"on success" パスが選択されます。すでに承認、拒否、またはタイムアウトしたノードに API で POST を実行しようとすると、このアクションが冗長であることがエラーメッセージで通知され、それ以上の手順は実行されません。

次の表は、承認ワークフローで許可されるさまざまなレベルのパーミッションを示しています。

ノード承認 rbac

8.7.3. ノードの構築シナリオ

次のシナリオでノードを管理する方法を学習します。

手順

  • 親ノードの ( Plus icon ) アイコンをクリックして ステップおよびリンクの追加 を行い、兄弟ノードを追加します。

    兄弟ノードの作成
  • Add step または Start ( Plus icon ) と Add step をクリックして、分割シナリオを表すルートノードを追加します。
  • 分割シナリオを作成する任意のノードで、分割シナリオの開始ノードにマウスを移動し、プラス ( Plus icon ) アイコンをクリックし、ステップとリンクを追加 します。これにより、同じ親ノードから複数のノードが追加され、兄弟ノードが作成されます。

グラフィック表現に関連付けられている記号と色の意味を確認するには、Legend をクリックしてキーを参照してください。

注記

ワークフローで、兄弟ノードにさまざまなエッジタイプが指定されていて、後続のノードがアタッチされたノードを削除した場合には、アタッチされたノードが自動的に兄弟ノードセットと結合されて、そのエッジタイプを保持します。

8.7.4. ノードの編集

手順

  • 次のいずれかの方法を使用してノードを編集します。

    • ノードを編集する場合は、ノードのアイコンをクリックします。ウィンドウには現在の選択が表示され、Edit をクリックしてこれらの内容を変更します。変更を加えて Finish をクリックすると、変更がグラフィカルビューに適用されます。
    • 既存のリンクのエッジタイプ (Run on success, Run on fail, Run always) を編集するには、既存のステータスの ( Plus icon ) をクリックします。
    • リンクを削除するには、( Plus icon ) をクリックし、Remove link をクリックします。このオプションは、ターゲットまたは子ノードに複数の親がある場合にのみペインに表示されます。すべてのノードは、少なくとも 1 つの他のノードに常にリンクされている必要があるため、古いリンクを削除する前に新しいリンクを作成する必要があります。
  • 次のいずれかの方法を使用して、ワークフロー図のビューを編集します。

    • 調査アイコン ( Examine icon 15 ) をクリックすると拡大し、縮小アイコン ( Reduce icon 15 ) をクリックするとズームアウトし、拡大アイコン ( Expand icon 15 ) をクリックすると、画面のサイズに合わせます。またはリセットアイコン ( Reset icon 15 ) を使用してビューの位置を変更します。
    • ワークフロー図をドラッグして画面上の位置を変更するか、マウスのスクロールを使用してズームします。

8.8. ワークフロージョブテンプレートの起動

手順

  • 次のいずれかの方法を使用して、ワークフロージョブテンプレートを起動します。

    • ナビゲーションパネルから Automation ExecutionTemplates を選択し、ジョブテンプレートの横にある Launch アイコンをクリックします。
    • 起動するワークフロージョブテンプレートの Details タブで Launch template をクリックします。

ワークフロージョブテンプレートに追加された変数は、ワークフロージョブテンプレートおよび Survey に設定された追加の変数とともに、起動時に Automation Controller に自動的に追加されます。

ワークフローの承認に関連するイベントは、承認リクエストがある場合は、その詳細情報とともにアクティビティーストリーム ( Activity stream ) に表示されます。

8.9. ワークフロージョブテンプレートの複製

Automation Controller を使用すると、ワークフロージョブテンプレートを複製できます。ワークフロージョブテンプレートを複製しても、関連付けられているスケジュール、通知、または権限は複製されません。スケジュールと通知は、ワークフローテンプレートの複製を作成するユーザーまたはシステム管理者が再作成する必要があります。ワークフローテンプレートを複製するユーザーに管理者権限が付与されていても、ワークフローテンプレートに権限が割り当てられる (複製される) ことはありません。

手順

  1. ナビゲーションパネルから、Automation ExecutionTemplates を選択します。
  2. 複製するテンプレートに関連する More options アイコンをクリックし、 Duplicate Template Duplicate template アイコンを選択します。

    • 複製元のテンプレートの名前とタイムスタンプが付いた新しいテンプレートがテンプレートのリストに表示されます。
  3. クリックして新しいテンプレートを開き、Edit template をクリックします。
  4. Name フィールドの内容を新しい名前に置き換え、他のフィールドのエントリーを入力または変更して、このページを完成させます。
  5. Save job template をクリックします。
注記

リソースに関連リソースがあり、その関連リソースに対してユーザーが適切なレベルの権限を持っていない場合、そのリソースを複製することはできません。たとえば、プロジェクトで、読み取り権限しか持たない現在のユーザーの認証情報を使用する場合などです。しかし、ワークフロージョブテンプレートの場合、そのいずれかのノードで、許可されていないジョブテンプレート、インベントリー、または認証情報が使用されていても、ワークフローテンプレートを複製できます。ただし、複製されたワークフロージョブテンプレートには、ワークフローテンプレートのノードの対応するフィールドが存在しません。

8.10. ワークフロージョブテンプレートの追加変数

詳細は、追加変数 セクションを参照してください。

第9章 Automation Controller のワークフロー

ワークフローを使用すると、インベントリー、Playbook、または権限を共有する場合と共有しない場合がある、一連の異なるジョブテンプレート (またはワークフローテンプレート) を設定できます。

ワークフローには、ジョブテンプレートと同様に、admin 権限と execute 権限があります。ワークフローは、1 つの単位としてリリースプロセスに含まれる全ジョブセットをトラッキングするタスクを実行します。

ジョブまたはワークフローテンプレートは、ノードと呼ばれるグラフのような構造を使用して相互にリンクされます。これらのノードは、ジョブ、プロジェクト同期、またはインベントリー同期です。テンプレートは、異なるワークフローの一部にすることも、同じワークフロー内で複数回使用することもできます。ワークフローを起動すると、グラフ構造のコピーがワークフロージョブに保存されます。

次の例は、上記の 3 つをすべて含むワークフローとワークフロージョブテンプレートを示しています。

ワークフロー内のノード

ワークフローが実行されると、ノード内のリンクされたテンプレートからジョブが生成されます。プロンプトフィールド (job_type、job_tags、skip_tags、limit) を持つジョブテンプレートにリンクしているノードには、それらのフィールドを含めることができ、起動時にプロンプトは表示されません。認証情報またはインベントリーの入力を求めるジョブテンプレート (デフォルトなし) は、ワークフローに含めることができません。

9.1. ワークフローのシナリオおよび留意事項

ワークフローを構築するときは、次の点を考慮してください。

  • ルートノードは、デフォルトで ALWAYS に設定されており、編集できません。
Node always
  • ノードは複数の親を持つことができ、子は Success、Failure、または Always のいずれかの状態にリンクできます。Always の場合、状態は Success でも Failure でもありません。状態は、ワークフロージョブテンプレートレベルではなく、ノードレベルで適用されます。ワークフロージョブは、キャンセルされるかエラーが発生しない限り、Success としてマークされます。
Sibling nodes all edge types
  • 以下の例のように、ワークフロー内のジョブまたはワークフローテンプレートを削除した場合に、以前に削除済みのジョブやワークフローに連携されていたノードが自動的にアップストリームに接続され、エッジタイプが保持されます。
Node delete scenario
  • 複数のジョブが 1 つに収束する収束ワークフローを実現できます。このシナリオでは、以下の例に示すように、次のジョブが実行される前に、いずれかのジョブまたはすべてのジョブを完了する必要があります。

    Node convergence
    • この例では、Automation Controller は最初の 2 つのジョブテンプレートを並行して実行します。両方が指定どおりに終了し、成功すると、3 番目のダウンストリーム (コンバージェンスノード) がトリガーされます。
  • インベントリーと Survey のプロンプトは、ワークフロージョブテンプレートに含まれるワークフローノードに適用されます。
  • API から起動する場合、get コマンドを実行すると、警告のリストが表示され、欠落しているコンポーネントが強調表示されます。次の図は、ワークフロージョブテンプレートの基本的なワークフローを示しています。
ワークフロー図
  • 複数のワークフローの同時起動や、起動のタイミングのスケジュールを設定できます。ジョブテンプレートと同様に、ジョブの完了時などの通知をワークフローに設定できます。
注記

ジョブスライスは、ジョブの実行を水平方向にスケーリングすることを目的としています。

ジョブテンプレートでジョブスライスを有効にすると、動作するインベントリーが起動時に設定されたスライスの数に分割されます。次に、スライスごとにジョブを開始します。

詳細は、ジョブスライス セクションを参照してください。

  • 再帰的なワークフローを構築することができますが、Automation Controller がエラーを検出した場合には、ネスト化されたワークフローが実行しようとしたタイミングでワークフローは停止します。
  • サブワークフローのジョブで収集されたアーティファクトは、ダウンストリームノードに渡されます。
  • インベントリーは、ワークレベルとして設定することもインベントリーの起動プロンプトとして設定することも可能です。
  • 起動時に、ask_inventory_on_launch=true が指定されているワークフロー内のジョブテンプレートはすべて、ワークフローレベルのインベントリーを使用します。
  • インベントリーを求めないジョブテンプレートでは、ワークフローインベントリーを無視し、独自のインベントリーに対して実行されます。
  • ワークフローがインベントリーを求める場合には、スケジュールおよび他のワークフローノードでそのインベントリーを提供することができます。
  • ワークフロー収束シナリオでは、set_stats データは、定義なしの状態でマージされるため、一意のキーを設定する必要があります。

9.2. ワークフローの追加変数

ワークフローは、Survey を使用して、ワークフロー内の Playbook で使用される extra_vars と呼ばれる変数を指定します。Survey 変数は、ワークフロージョブテンプレートで定義された extra_vars と結合され、ワークフロージョブ extra_vars に保存されます。ワークフロージョブ内の extra_vars は、ワークフロー内でジョブを生成するときにジョブテンプレート変数と結合されます。

ワークフローは、3 つの追加変数を除き、ジョブテンプレートと同じ変数の優先順位の動作 (階層) を使用します。ジョブテンプレートの追加変数セクションの Automation Controller 変数の優先順位階層 を参照してください。追加の 3 つの変数には次のものが含まれます。

  • ワークフロージョブテンプレートの追加変数
  • ワークフロージョブテンプレート survey (デフォルト)
  • ワークフロージョブ起動の追加変数

ワークフローに含まれるワークフローは同じ変数の優先順位に従い、特にプロンプトが要求された場合、または Survey の一部として定義された場合にのみ、変数を継承します。

ワークフローの extra_vars のほかにも、ワークフローの一部として実行されるジョブおよびワークフローは、ワークフローの親ジョブに含まれるアーティファクトディクショナリーの変数を継承できます (また、ブランチの祖先のアップストリームと組み合わされます)。これらは、set_stats Ansible モジュール で定義できます。

Playbook で set_stats モジュールを使用すると、別のジョブがダウンストリームで使用できるように結果を生成できます。

統合実行の成功または失敗をユーザーに通知します。この例では、ワークフロー内で組み合わせてアーティファクトの受け渡しを実行できる 2 つの Playbook があります。

  • invoke_set_stats.yml: ワークフローの最初の Playbook:
---
- hosts: localhost
  tasks:
    - name: "Artifact integration test results to the web"
      local_action: 'shell curl -F "file=@integration_results.txt" https://file.io'
      register: result


    - name: "Artifact URL of test results to Workflows"
      set_stats:
        data:
          integration_results_url:  "{{ (result.stdout|from_json).link }}"
  • use_set_stats.yml: ワークフローの 2 番目の Playbook:
---
- hosts: localhost
  tasks:
    - name: "Get test results from the web"
      uri:
        url: "{{ integration_results_url }}"
        return_content: true
      register: results


    - name: "Output test results"
      debug:
        msg: "{{ results.content }}"

set_stats モジュールはこのワークフローを以下のように処理します。

  1. 統合結果の内容は Web 上にアップロードされます。
  2. 次に、invoke_set_stats Playbook を通じて set_stats が呼び出され、アップロードされた integration_results.txt の URL が、Ansible 変数 integration_results_url に成果物として保存されます。
  3. ワークフローの 2 番目の Playbook は、Ansible の追加変数 integration_results_url を使用します。URI モジュールを使用して Web を呼び出し、前のジョブテンプレートジョブによってアップロードされたファイルの内容を取得します。次に、取得したファイルの内容を出力します。
注記

アーティファクトを機能させるには、set_stats モジュールの per_host = False というデフォルト設定をそのまま使用してください。

9.3. ワークフローの状態

ワークフロージョブには以下の状態が設定されます (失敗状態は含まれなし)。

  • 待機中
  • 実行中
  • 成功 (終了)
  • 取り消し
  • エラー
  • 失敗

ワークフローのスキームでは、ジョブを取り消すとブランチが取り消され、ワークフロージョブを取り消すとワークフロー全体が取り消されます。

9.4. ロールベースのアクセス制御

ワークフロージョブテンプレートを編集および削除するには、管理者のロールが必要です。ワークフロージョブテンプレートを作成するには、組織管理者またはシステム管理者である必要があります。ただし、管理者は、権限を持っていないジョブテンプレートが含まれるワークフロージョブテンプレートを実行することはできます。システム管理者は空のワークフローを作成し、下位レベルのユーザーに admin_role を付与し、その後さらに多くのアクセスを委譲してグラフを構築できます。ワークフロージョブテンプレートにジョブテンプレートを追加するには、ジョブテンプレートに対する execute アクセス権が必要です。

ユーザーに付与されているパーミッションに応じて、複製コピーの作成やワークフローの再起動など、他のタスクを実行することもできます。再起動またはコピーを作成する前に、ワークフローで使用されるすべてのリソース (ジョブテンプレートなど) に対するアクセス権限が必要です。

詳細は、ロールベースのアクセス制御によるアクセスの管理 を参照してください。

説明したタスクの実行の詳細は、ワークフロージョブテンプレート を参照してください。

第10章 スケジュール

ナビゲーションパネルから Automation ExecutionSchedules をクリックして、設定したスケジュールにアクセスします。スケジュールのリストは、方向矢印を使用して各列の任意の属性によって並べ替えることができます。名前、日付、またはスケジュールが実行される月で検索することもできます。

オン または オフ の切り替えを使用して、アクティブなスケジュールを停止するか、停止したスケジュールをアクティブにします。

編集 Edit アイコンをクリックしてスケジュールを編集します。

スケジュールサンプルリスト

テンプレート、プロジェクト、またはインベントリーソースを設定する場合は、そのリソースの Details ページの Schedules タブをクリックして、これらのリソースのスケジュールを設定します。スケジュールを作成するときには、次のパラメーターを使用できます。

名前
スケジュール名をクリックして詳細を開きます。
関連リソース
スケジュールの機能を説明します。
タイプ
スケジュールがソースコントロールの更新に関連しているのか、システム管理されたジョブスケジュールに関連しているのかを識別します。
次回実行日時
次に予定されているタスクの実行

10.1. 新しいスケジュールの追加

スケジュールは、テンプレート、プロジェクト、またはインベントリーソースから作成することも、メインの Schedules ページから直接作成することもできます。

Schedules ページで新しいスケジュールを作成するには、次の手順を実行します。

手順

  1. ナビゲーションパネルから、Automation ExecutionSchedules を選択します。
  2. Create schedule をクリックします。Create schedule ウィンドウが開きます。
  3. このスケジュールを適用する Resource type を選択します。

    以下から選択します。

    • Job template

      • Job template の場合は、メニューから Job template を選択します。
    • Workflow job template

      • Workflow job template の場合は、メニューから Workflow job template を選択します。
    • Inventory source

      • Inventory source の場合は、適切なメニューから InventoryInventory source を選択します。
    • Project sync

      • Project sync の場合は、メニューから Project を選択します。
    • Management job template

      • Management job template の場合は、メニューから Workflow job template を選択します。
  4. Job templateProject sync の場合は、次のフィールドに適切な詳細を入力します。

    • Schedule name: 名前を入力します。
    • オプション: Description: 説明を入力します。
    • Start date/time: スケジュールを開始する日時を入力します。
    • Time zone: タイムゾーンを選択します。入力する Start date/time は、このタイムゾーンの日時である必要があります。

      スケジュールを設定すると Schedule Details が表示され、スケジュールの設定や、選択した Local Time Zone でのスケジュールの発生状況を確認することができます。

      重要

      ジョブは UTC でスケジュールされます。特定の時間に実行される繰り返しのジョブは、夏時間への切り替えまたは夏時間からの切り替えが発生すると、ローカルタイムゾーンに合わせて移動できます。スケジュールが保存されると、システムはローカルタイムゾーンベースの時刻を UTC に解決します。スケジュールが正しく作成されていることを確認するには、スケジュールを UTC 時間で設定します。

  5. Next をクリックします。Define rules ページが表示されます。

10.2. リソースページからの新しいスケジュールの追加

リソースページから新しいスケジュールを作成するには、次の手順を実行します。

手順

  1. 設定しているリソースの Schedules タブをクリックします。これには、テンプレート、プロジェクト、またはインベントリーソースを指定できます。
  2. Create schedule をクリックします。Create schedule ウィンドウが開きます。
  3. 以下のフィールドに該当する詳細を入力します。

    • Schedule name: 名前を入力します。
    • オプション: Description: 説明を入力します。
    • Start date/time: スケジュールを開始する日時を入力します。
    • Time zone: タイムゾーンを選択します。入力する Start date/time は、このタイムゾーンの日時である必要があります。

      スケジュールを設定すると Schedule Details が表示され、スケジュールの設定や、選択した Local Time Zone でのスケジュールの発生状況を確認することができます。

      重要

      ジョブは UTC でスケジュールされます。特定の時間に実行される繰り返しのジョブは、夏時間への切り替えまたは夏時間からの切り替えが発生すると、ローカルタイムゾーンに合わせて移動できます。スケジュールが保存されると、システムはローカルタイムゾーンベースの時刻を UTC に解決します。スケジュールが正しく作成されていることを確認するには、スケジュールを UTC 時間で設定します。

  4. Next をクリックします。Define rules ページが表示されます。

10.2.1. スケジュールのルールの定義

手順

  1. 以下の情報を入力します。

    • Frequency: スケジュールを実行する頻度を入力します。
    • Interval: ルールを繰り返し実行する間隔を選択します。
    • Week start: 週の始まりの曜日を選択します。
    • Minutes of the hour: このフィールドは、スケジュールを実行する分を宣言するために使用します。
    • Hours of day: このフィールドは、スケジュールを実行する時間帯を宣言するために使用します。
    • Days of the week: スケジュールを実行する曜日を選択します。
    • Days of the month: スケジュールを実行する月を選択します。
    • Weeks of the year: このフィールドは、スケジュールを実行する年間週番号を宣言するために使用します。
    • Months of the year: このフィールドは、スケジュールを実行する月の序数の日を宣言するために使用します。
    • Days of the year: このフィールドは、スケジュールを実行する年の序数の日を宣言するために使用します。
    • Occurrences: このフィールドは、使用して、Rule セクションのフォームフィールドを使用して宣言されたルールに基づいて、インデックス付けされたルールを絞り込むために使用します。
    • Schedule ending type: このフィールドは、スケジュールの終了タイミングを選択するために使用します。

      スケジュールのルールを設定した場合は、iCalendar ドキュメントの iCalendar RFC for bysetpos フィールドへの リンク で詳細を確認してください。

  2. Save rule をクリックします。Schedule Rules 概要ページが表示されます。
  3. ルールをさらに追加するには、Add rule をクリックします。
  4. Next をクリックします。

    Schedule Exceptions ページが表示されます。

10.2.2. スケジュールの例外の設定

手順

  1. Schedule Exceptions ページで、Create exception をクリックします。

    スケジュールのルールと同じ形式を使用して、スケジュールの例外を作成します。

  2. Next をクリックして、スケジュールと例外の両方を保存して確認します。

第11章 プロジェクト

プロジェクトとは、Automation Controller にある Ansible Playbook の論理的コレクションのことです。Playbook と Playbook ディレクトリーはさまざまな方法で管理できます。

  • Automation Controller サーバー上にあるプロジェクトのベースパスの下にこれらを手動で配置します。
  • Playbook を Automation Controller でサポートされているソースコード管理 (SCM) システムに配置します。これらには、Git、Subversion、Mercurial、Red Hat Insights が含まれます。

Red Hat Insights プロジェクトの作成の詳細は、Red Hat Ansible Automation Platform 修復のための Red Hat Insights のセットアップ を参照してください。

注記

プロジェクトのベースパスは /var/lib/awx/projects です。ただし、これはシステム管理者が変更できます。これは /etc/tower/conf.d/custom.py で設定されます。

設定を誤るとインストールが無効になる可能性があるため、このファイルを編集する場合は注意してください。

Projects ページに、現在利用可能なプロジェクトのリストが表示されます。

最初に使用できる Demo Project が用意されています。

リストされている各プロジェクトについて、各プロジェクトの横にあるアイコンを使用して、最新の SCM リビジョンの取得 Refresh 、プロジェクトの編集 Edit 、またはプロジェクト属性の複製 Copy を実行できます。

プロジェクトは、関連ジョブの実行中に更新できます。

大規模なプロジェクト (約 10 GB) がある場合、/tmp のディスク領域が問題になる可能性があります。

ステータス はプロジェクトの状態を示し、以下のいずれかになる可能性があります (特定のステータスタイプでビューをフィルターできることにも留意してください)。

  • Pending - ソースコントロールの更新は作成されましたが、まだキューに入れられていない、または開始されていません。ジョブ (ソースコントロールの更新だけでなく) は、システムで実行できる状態になるまで保留状態になります。準備ができていない理由としては次のことが考えられます。

    • 現在実行中の依存関係があるため、完了するまで待つ必要があります。
    • 設定されている場所で実行するのに十分な容量がありません。
  • Waiting - ソースコントロールの更新はキューに入れられており、実行を待機中です。
  • Running - ソースコントロールの更新が進行中です。
  • 成功 - このプロジェクトの最後のソースコントロールの更新が成功しました。
  • Failed - このプロジェクトの最後のソースコントロールの更新が失敗しました。
  • Error - 最後のソースコントロール更新ジョブは実行にまったく失敗しました。
  • 取り消し - このプロジェクトの最後のソースコントロールの更新が取り消されました。
  • 未更新 - このプロジェクトはソースコントロール用に設定されていますが、更新されていません。
  • OK - プロジェクトはソースコントロール用に設定されておらず、正しく配置されています。
  • Missing - /var/lib/awx/projects のプロジェクトベースパスにプロジェクトがありません。これは、手動またはソースコントロール管理プロジェクトに適用されます。
注記

認証情報タイプが 手動 のプロジェクトでは、SCM タイプの認証情報として再設定されない限りソースコントロールベースのアクションを更新したり、スケジュールしたりすることはできません。

11.1. 新しいプロジェクトの追加

Automation Controller では、プロジェクトと呼ばれる Playbook の論理コレクションを作成できます。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. Projects ページで、Create project をクリックして、Create Project ウィンドウを起動します。
  3. 以下の必須フィールドに適切な情報を入力します。

    • Name (必須)
    • オプション: Description
    • Organization (必須): プロジェクトには少なくとも 1 つの組織が必要です。ここで組織を 1 つ選択してプロジェクトを作成します。プロジェクトの作成時に、組織を追加できます。
    • オプション: Execution environment: このプロジェクトを実行するための実行環境の名前を入力するか、既存の環境のリストから検索します。詳細は、実行環境の作成と使用 を参照してください。
    • Source control type (必須): このプロジェクトに関連付けられた SCM タイプをメニューから選択します。選択したタイプに応じて、次のセクションのオプションが使用可能になります。詳細は、Playbook の手動管理 または ソースコントロールを使用した Playbook の管理 を参照してください。
    • オプション: Content signature validation credential: このフィールドを使用して、コンテンツ検証を有効にします。プロジェクトの同期中にコンテンツの署名を検証するために使用する GPG キーを指定します。コンテンツが改ざんされている場合、ジョブは実行されません。詳細は、プロジェクトの署名と検証 を参照してください。
  4. Create project をクリックします。

関連情報

以下に、プロジェクトの調達方法を説明します。

11.1.1. Playbook の手動管理

バージョン管理と共同開発には、ソースコード管理 (SCM) システムとの統合が一般的に推奨されますが、Playbook ファイルの直接管理が必要な場合もあります。そのような場合は、ローカルファイルシステム上に Playbook のディレクトリーとファイルを作成して整理し、実行のための適切な所有権と権限を確保します。

手順

  • Playbook を保管する 1 つ以上のディレクトリーをプロジェクトのベースパス (例: /var/lib/awx/projects/) に作成します。
  • Playbook ファイルを作成し、これを Playbook ディレクトリーにコピーします。
  • Playbook ディレクトリーおよびファイルが、サービスを実行するのと同じ UNIX ユーザーおよびグループで所有されていることを確認します。
  • パーミッションが Playbook ディレクトリーおよびファイルについて適切であることを確認します。

トラブルシューティング

  • ベースプロジェクトパスに Ansible Playbook ディレクトリーを追加していない場合は、エラーメッセージが表示されます。次のいずれかの方法を選択し、このエラーをトラブルシューティングしてください。

    • 適切な Playbook ディレクトリーを作成し、SCM から Playbook をチェックアウトします。
    • Playbook を適切な Playbook ディレクトリーにコピーします。

11.1.2. ソースコントロールを使用した Playbook の管理

ソースコントロールを使用して Playbook を管理する場合は、次のいずれかの方法を選択します。

11.1.2.1. SCM タイプ - Git と Subversion を使用するための Playbook の設定

Git や Subversion などのソースコード管理 (SCM) システムから Ansible Playbook を同期するようにプロジェクトを設定します。SCM との統合は、Playbook を管理する際のベストプラクティスです。統合により、バージョン管理、コラボレーション機能、自動化コードのための一元的なリポジトリーが提供されるためです。次の手順に実行することで、選択した SCM から最新バージョンの Playbook を常に直接環境で使用できるようになります。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. 使用するプロジェクト名をクリックします。
  3. プロジェクトの Details タブで、Edit project をクリックします。
  4. Source control type メニューから適切なオプション (Git または Subversion) を選択します。
  5. 以下のフィールドに該当する詳細を入力します。

    • Source control URL - ツールチップの例を参照してください。
    • オプション: Source control branch/tag/commit: チェックアウトするソースコントロール (Git または Subversion) からの SCM ブランチ、タグ、コミットハッシュ、任意の参照、またはリビジョン番号 (該当する場合) を入力します。次のフィールドにカスタム refspec も指定しない限り、一部のコミットハッシュと参照は使用できない場合があります。空白のままにした場合、デフォルトは HEAD です。これは、このプロジェクトで最後にチェックアウトされたブランチ、タグ、またはコミットのことです。
    • Source control refspec - このフィールドは、git ソースコントロール専用のオプションです。git の知識があり、問題なく使用できる上級ユーザーである場合にのみ、リモートリポジトリーからダウンロードする参照を指定してください。詳細は、ジョブブランチのオーバーライド を参照してください。
    • Source control credential - 認証が必要な場合は、適切なソースコントロール認証情報を選択します。
  6. オプション: Options - 該当する場合、起動動作を選択します。

    • Clean - 更新を実行する前にローカルの変更を削除します。
    • Delete - 更新を実行する前に、ローカルリポジトリー全体を削除します。リポジトリーのサイズにより、更新の完了までに必要な時間が大幅に長くなる可能性があります。
    • Track submodules - 最新のコミットを追跡します。ツールチップに、詳細情報があります Tooltip
    • Update revision on launch - プロジェクトのリビジョンをリモートソースコントロールの現在のリビジョンに更新し、Ansible Galaxy サポート または コレクションサポート からロールディレクトリーをキャッシュします。Automation Controller は、ローカルリビジョンが一致し、ロールとコレクションが最終更新で最新であることを確認します。さらに、プロジェクトが同期できるよりも早くジョブが生成された場合にジョブのオーバーフローを回避するために、これを選択すると、以前のプロジェクトの同期を指定した秒数キャッシュするようにキャッシュタイムアウトを設定できます。
    • Allow branch override - このプロジェクトを使用するジョブテンプレートまたはインベントリーソースが、プロジェクト以外の指定された SCM ブランチまたはリビジョンで起動できるようにします。詳細は、ジョブブランチのオーバーライド を参照してください。
  7. Save project をクリックします。
11.1.2.2. SCM タイプ - Red Hat Insights を使用するための Playbook の設定

Red Hat Insights から Ansible Playbook を直接取得するようにプロジェクトを設定します。Red Hat Insights と統合することで、Red Hat Enterprise Linux 環境の分析を通じて特定された修復 Playbook を管理およびデプロイできるようになります。この統合により、特定された脆弱性に対処してシステム設定を最適化するプロセスが合理化され、ベストプラクティスとセキュリティー推奨事項に準拠した自動化が実現します。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. 使用するプロジェクト名をクリックします。
  3. プロジェクトの Details タブで、Edit project をクリックします。
  4. Source Control Type メニューから Red Hat Insights を選択します。
  5. Red Hat Insights では認証に認証情報が必要です。Insights で使用する適切な認証情報を Insights credential フィールドで選択します。
  6. オプション: 該当する場合、Options フィールドで起動動作を選択します。

    • Clean - 更新を実行する前にローカルの変更を削除します。
    • Delete - 更新を実行する前に、ローカルリポジトリー全体を削除します。リポジトリーのサイズにより、更新の完了までに必要な時間が大幅に長くなる可能性があります。
    • Update revision on launch - プロジェクトのリビジョンをリモートソースコントロールの現在のリビジョンに更新し、Ansible Galaxy サポート または コレクションサポート からロールディレクトリーをキャッシュします。Automation Controller は、ローカルリビジョンが一致し、ロールとコレクションが最新であることを保証します。さらに、プロジェクトが同期できるよりも早くジョブが生成された場合に、これを選択すると、以前のプロジェクトの同期を指定した秒数キャッシュするようにキャッシュタイムアウトを設定できます。
  7. Save project をクリックします。
11.1.2.3. SCM タイプ - リモートアーカイブを使用するための Playbook の設定

リモートアーカイブを使用する Playbook により、バージョン付けされたアーティファクトを生成するビルドプロセスまたはリリースに基づいてプロジェクトを提供することができます。これには、単一のアーカイブ内のそのプロジェクトのすべての要件が含まれます。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. 使用するプロジェクト名をクリックします。
  3. プロジェクトの Details タブで、Edit project をクリックします。
  4. Source control type メニューから Remote Archive を選択します。
  5. 以下のフィールドに該当する詳細を入力します。

    • Source control URL - GitHub ReleaseArtifactory に保存されているビルドアーティファクトなど、リモートアーカイブへの URL を要求し、それを使用するためにプロジェクトパスに展開します。
    • Source control credential - 認証が必要な場合は、適切なソースコントロール認証情報を選択します。
  6. オプション: 該当する場合、Options フィールドで起動動作を選択します。

    • Clean - 更新を実行する前にローカルの変更を削除します。
    • Delete - 更新を実行する前に、ローカルリポジトリー全体を削除します。リポジトリーのサイズにより、更新の完了までに必要な時間が大幅に長くなる可能性があります。
    • Update revision on launch - 推奨されません。このオプションは、プロジェクトのリビジョンをリモートソースコントロールの現在のリビジョンに更新し、Ansible Galaxy サポート または コレクションサポート からのロールディレクトリーをキャッシュします。
    • Allow branch override - 推奨されません。このオプションを使用すると、このプロジェクトを使用するジョブテンプレートが、指定された SCM ブランチまたはプロジェクト以外のリビジョンで起動できるようになります。

      注記

      このソースコントロールタイプは、不変のアーティファクトという概念のサポートを目的としているため、(少なくともロールに対して) Galaxy 統合を無効にすることを推奨します。

  7. Save project をクリックします。

11.2. ソースコントロールからのプロジェクトの更新

プロジェクトを定期的に更新することで、環境が最新バージョンの Playbook、ロール、コレクションにアクセスできるようになり、Git、Subversion、その他の統合された SCM リポジトリーに加えられた変更が反映されます。このプロセスは、SCM と Ansible Automation Platform 間の同期を維持するために重要です。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. 更新するプロジェクトの横にある同期アイコン Sync をクリックします。

    注記

    ソースコントロールを使用するためのプロジェクト設定を追加すると、設定したソースコントロールからプロジェクトの詳細を取得する同期がすぐに開始します。

    • 更新プロセスの詳細は、Status 列の下にあるプロジェクトのステータスをクリックしてください。Jobs セクションの Output タブが表示されます。

11.3. 権限の使用

プロジェクトに割り当てられており、プロジェクト、インベントリー、ジョブテンプレート、およびその他の要素の読み取り、変更、および管理を行う機能を提供する権限のセット (ロールベースのアクセス制御) は、特権とも呼ばれます。

プロジェクトの権限にアクセスするには、Projects ページの User Access タブまたは Team Access タブを選択します。この画面には、現在このプロジェクトに対する権限を持っているユーザーのリストが表示されます。

このリストは、UsernameFirst Name、または Last Name で並べ替えおよび検索できます。

11.3.1. プロジェクト権限の追加

ユーザーとチームがプロジェクトにアクセスするために必要な権限を管理します。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. 更新するプロジェクトを選択し、User Access または Team Access タブをクリックします。
  3. Add roles をクリックします。
  4. 追加するユーザーまたはチームを選択し、Next をクリックします。
  5. 名前の横にあるチェックボックスをクリックしてリストからユーザーまたはチームを 1 つ以上選択し、メンバーとして追加します。
  6. Next をクリックします。
  7. 選択したユーザーまたはチームに付与するロールを選択します。リソースが異なれば、利用可能なオプションも異なります。
  8. Finish をクリックして、選択したユーザーまたはチームにロールを適用し、メンバーとして追加します。各ユーザーおよびチームに割り当てられた更新済みのロールが表示されます。

11.3.2. プロジェクトからの権限の削除

特定のユーザーのロールを削除します。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. 更新するプロジェクトを選択し、User Access または Team Access タブをクリックします。
  3. Roles 列のユーザーロールの横にある Disassociate アイコンをクリックします。
  4. 確認ウィンドウで Delete をクリックして、関連付けの解除を確認します。

11.4. Ansible Galaxy サポート

Automation Controller は、プロジェクトの更新の最後に、<project-top-level-directory>/roles/requirements.yml にある roles ディレクトリー内の requirements.yml ファイルを検索します。

このファイルが見つかると、次のコマンドが自動的に実行されます。

ansible-galaxy role install -r roles/requirements.yml -p <project-specific cache location>/requirements_roles -vvv

このファイルを使用すると、Ansible Galaxy ロール、または独自のプロジェクトと組み合わせてチェックアウトできる他のリポジトリー内のロールを参照できるようになります。Ansible Galaxy アクセスの追加により、この結果を得るために git サブモジュールを作成する必要がなくなります。SCM プロジェクトがロールまたはコレクションとともにプライベートジョブ環境に取り込まれ、そこから実行されることを考慮すると、デフォルトで /tmp 内にプロジェクトに固有の <private job directory> が作成されます。

キャッシュディレクトリーは、グローバルプロジェクトフォルダー内のサブディレクトリーです。キャッシュの場所から <job private directory>/requirements_roles にコンテンツをコピーできます。

デフォルトでは、Automation Controller には、SCM プロジェクトの roles/requirements.yml ファイルからロールを動的にダウンロードできるようにするシステム全体の設定があります。この設定をオフにするには、ナビゲーションパネルの SettingsAutomation ExecutionJob から Job Settings 画面に移動し、Enable Role Download チェックボックスをオフにします。

プロジェクトの同期が実行されるたびに、Automation Controller は、プロジェクトソースおよび Galaxy または Collections のロールがプロジェクトに対して古くなっているかどうかを判断します。プロジェクトを更新すると、更新に含まれるロールがダウンロードされます。

アップストリームのロールに加えられた変更をジョブで取得する必要がある場合は、プロジェクトを更新すると取得されます。ロールの変更は、新しいコミットが provision-role のソースコントロールにプッシュされたことを意味します。

この変更をジョブで有効にするために、Playbook リポジトリーに新しいコミットをプッシュする必要はありません。プロジェクトの更新は行う必要があります。更新すると、ロールがローカルキャッシュにダウンロードされます。

たとえば、ソースコントロールに 2 つの git リポジトリーがあるとします。1 つ目は playbooks で、Automation Controller のプロジェクトがこの URL を参照します。2 つ目は provision-role で、playbooks git リポジトリー内の roles/requirements.yml ファイルによって参照されます。

ジョブは、すべてのジョブの実行前に最新のロールをダウンロードします。パフォーマンス上の理由から、ロールとコレクションはローカルにキャッシュされます。各ジョブの実行前にアップストリームロールを再ダウンロードするには、プロジェクトの OptionsUpdate revision on launch を選択する必要があります。

update-on-launch

更新は同期よりもはるかに前のプロセスで行われるため、これによりエラーと詳細がより速く、より論理的な場所で詳細が表示されます。

requirements.yml ファイルの構文の詳細と例は、Ansible ドキュメントの ロール要件セクション を参照してください。

特に公開する必要があるディレクトリーがある場合は、ナビゲーションパネルの SettingsAutomation ExecutionJob から Job Settings 画面に移動し、Paths to expose to isolated Jobs で指定できます。設定ファイル内の次のエントリーを更新することもできます。

AWX_ISOLATION_SHOW_PATHS = ['/list/of/', '/paths']
注記

Playbook で AWX_ISOLATION_SHOW_PATHS に定義されたキーまたは設定を使用する必要がある場合は、AWX_ISOLATION_SHOW_PATHS/var/lib/awx/.ssh に追加する必要があります。

設定ファイルに変更を加えた場合には、変更の保存後に automation-controller-service restart コマンドを使用してサービスを再起動するようにしてください。

UI では、Jobs Settings ウィンドウでこれらの設定を行うことができます。

Configure jobs

11.5. コレクションのサポート

Automation Controller は、ジョブ実行でプロジェクト固有の Ansible コレクション をサポートします。collections/requirements.yml で SCM のコレクション要件ファイルを指定すると、Automation Controller はジョブの実行前にプロジェクトを暗黙的に同期するときに、そのファイルにコレクションをインストールします。

Automation Controller には、SCM プロジェクトの collections/requirements.yml ファイルからコレクションを動的にダウンロードできるようにするシステム全体の設定があります。この設定をオフにするには、ナビゲーションパネルの SettingsAutomation ExecutionJob から Job Settings 画面に移動し、Enable Collection(s) Download チェックボックスをオフにします。

ロールとコレクションは、パフォーマンス上の理由からローカルにキャッシュされます。ダウンロードを確実に行うためには、次のように、プロジェクトの OptionsUpdate revision on launch を選択する必要があります。

注記

実行環境にコレクションもインストールされている場合は、ジョブの実行時にプロジェクトの requirements.yml ファイルで指定されたコレクションが優先されます。この優先順位は、コレクションのバージョンに関係なく適用されます。たとえば、requirements.yml で指定されたコレクションが実行環境内のコレクションよりも古い場合は、requirements.yml で指定されたコレクションが使用されます。

11.5.1. Automation Hub でのコレクションの使用

Automation Controller でコレクションコンテンツのデフォルトソースとして Automation Hub を使用するには、Automation Hub UI で API トークンを作成する必要があります。その後、このトークンを Automation Controller で指定します。

Private Automation Hub または Automation Hub に接続するには、次の手順を使用します。指定する URL のみが異なります。

手順

  1. https://console.redhat.com/ansible/automation-hub/token にアクセスします。
  2. Load token をクリックします。
  3. コピー Copy アイコンをクリックして、API トークンをクリップボードにコピーします。
  4. 次のいずれかの方法を選択して認証情報を作成します。

    1. Automation Hub を使用するには、コピーしたトークンを使用し、トークンページの Server URL および SSO URL フィールドに表示される URL を指定して、Automation Hub 認証情報を作成します。

    2. Private Automation Hub を使用するには、Private Automation Hub の Repo Management ダッシュボードから取得したトークンを使用し、次に示すように公開されたリポジトリー URL を指す Automation Hub 認証情報を作成します。

      image

      さまざまな名前空間またはコレクションを含む各種リポジトリーを作成できます。Automation Hub のリポジトリーごとに、異なる認証情報を作成する必要があります。

    3. UI から /https://$<hub_url>/api/galaxy/content/<repo you want to pull from> という形式の Ansible CLI URL をコピーし、Create CredentialGalaxy Server URL フィールドに入力します。

      UI 固有の手順は、Automation Hub の Red Hat 認定済み、検証済み、および Ansible Galaxy コンテンツ を参照してください。

  5. コンテンツを同期する組織に移動し、新しい認証情報を組織に追加します。これにより、コンテンツを使用する認証情報またはリポジトリーに各組織を関連付けることができます。

    次の 2 つのリポジトリーがあるとします。

    • Prod: Namespace 1Namespace 2 があり、それぞれにコレクション AB (namespace1.collectionA:v2.0.0namespace2.collectionB:v2.0.0) があります。
    • Stage: Namespace 1 があり、そこにコレクション A (namespace1.collectionA:v1.5.0) だけがあります。ProdStage のリポジトリー URL があります。

      それぞれに対して認証情報を作成できます。

      その後、さまざまな組織に各種レベルのアクセスを割り当てることができます。たとえば、Developers 組織を作成して両方のリポジトリーへのアクセス権を付与し、Operations 組織には Prod リポジトリーへのアクセス権だけを付与することができます。

      UI 固有の手順は、Private Automation Hub でコンテナーリポジトリーのユーザーアクセスを設定する を参照してください。

  6. Automation Hub に自己署名証明書がある場合は、トグルを使用して Job SettingsIgnore Ansible Galaxy SSL Certificate Verification 設定を有効にします。署名付き証明書を使用する Automation Hub の場合は、代わりにトグルを使用して無効にします。これはグローバル設定です。
  7. ソースリポジトリーが collections/requirements.yml ファイルにある要件ファイルで必要なコレクションを指定するプロジェクトを作成します。使用する構文の詳細は、Ansible ドキュメントの Using Ansible collections を参照してください。
  8. Projects リストビューで、同期アイコン Update をクリックしてこのプロジェクトを更新します。Automation Controller は、collections/requirements.yml ファイルから Galaxy コレクションをフェッチし、変更されたものとして報告します。このプロジェクトを使用するすべてのジョブテンプレートにコレクションがインストールされます。
注記

Galaxy または Collections からの更新が必要な場合は、同期が実行されて必要なロールをダウンロードし、/tmp ファイルの領域がはるかに多く消費されます。大規模なプロジェクト (約 10 GB) がある場合、/tmp のディスク領域が問題になる可能性があります。

関連情報

コレクションの詳細は、Using Ansible Collections を参照してください。

インストールを直接自動化するのに使用できるこれらの公式コレクションの 1 つを Red Hat がどのように公開しているかは、AWX Ansible Collection のドキュメントを参照してください。

第12章 プロジェクトの署名と検証

プロジェクトの署名と検証を使用すると、プロジェクトディレクトリー内のファイルに署名し、そのコンテンツが何らかの方法で変更されていないか、またはファイルがプロジェクトに予期せず追加または削除されていないかどうかを検証できます。これを行うには、署名用の秘密鍵と、検証用の対応する公開鍵が必要です。

12.1. プロジェクトの署名について

プロジェクトのメンテナーがコンテンツの署名を行い場合でサポートされている手法は、ansible-sign ユーティリティーを使用して、付属の コマンドラインインターフェイス (CLI) を使用することです。

この CLI の目的は、GNU Privacy Guard (GPG) などの暗号化テクノロジーを簡単に使用して、プロジェクト内のファイルがいかなる方法でも改ざんされていないと検証することです。現在、サポートされている署名と検証の手段は GPG のみです。

Automation Controller は、署名されたコンテンツを検証するために使用されます。一致する公開鍵が署名されたプロジェクトに関連付けられた後、Automation Controller は、署名中に含まれたファイルが変更されていないこと、およびファイルが予期せず追加または削除されていないことを検証します。署名が無効であるかファイルが変更されている場合、プロジェクトは更新に失敗し、プロジェクトを使用するジョブは起動されません。プロジェクトの検証ステータスにより、セキュアで改ざんされていないコンテンツのみがジョブで実行できることが保証されます。

リポジトリーが署名と検証用にすでに設定されている場合、プロジェクト変更用の通常のワークフローは次のようになります。

  1. プロジェクトリポジトリーがすでに設定されており、ファイルに変更を加えるとします。
  2. 変更を加えて、次のコマンドを実行します。

    ansible-sign project gpg-sign /path/to/project

    このコマンドは、チェックサムマニフェストを更新し、署名します。

  3. 変更、更新されたチェックサムマニフェスト、および署名をリポジトリーにコミットします。

プロジェクトを同期すると、Automation Controller は新しい変更を取り込み、Automation Controller 内のプロジェクトに関連付けられた公開鍵が、チェックサムマニフェストの署名に使用された秘密鍵と一致することを確認します (これにより、チェックサムマニフェスト自体の改ざんが防止されます)。マニフェスト内の各ファイルのチェックサムを計算し、チェックサムが一致していること (つまり、ファイルが変更されていないこと) を確認します。また、すべてのファイルが考慮されていることも保証されます。

ファイルは MANIFEST.in ファイルに含めるか、MANIFEST.in ファイルから除外する必要があります。このファイルの詳細は、プロジェクトの署名 を参照してください。予期せずファイルが追加または削除された場合、検証が失敗します。

コンテンツ署名手順

12.2. 前提条件

  • RHEL ノードを適切にサブスクライブしている。

    • baseos および appstream リポジトリーを持つ RHEL サブスクリプションが有効になっている。
    • Red Hat Ansible Automation Platform サブスクリプションと適切なチャネルが有効になっている。

      ansible-automation-platform-2.5-for-rhel-8-x86_64-rpms for RHEL 8
      ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms for RHEL 9
  • コンテンツ署名用の有効な GPG 公開鍵と秘密鍵のペアがある。詳細は、GPG キーペアの作成方法 を参照してください。

    GPG キーの詳細は、GnuPG ドキュメント を参照してください。

    次のコマンドを使用して、デフォルトの GnuPG キーリングに有効な GPG キーペアがあることを確認します。

    gpg --list-secret-keys

    このコマンドによって出力が生成されない場合、または trustdb was created という 1 行の出力が生成された場合、デフォルトのキーリングにシークレットキーがありません。この場合、続行する前に、How to create GPG keypairs を参照して、新しいキーペアを作成する方法を確認してください。他の出力が生成された場合は、有効なシークレットキーがあり、ansible-sign を使用する準備ができています。

12.3. Automation Controller への GPG キーの追加

Automation Controller でのコンテンツの署名と検証に GPG キーを使用するには、CLI で次のコマンドを実行して GPG キーを追加します。

$ gpg --list-keys
$ gpg --export --armour <key fingerprint> > my_public_key.asc
  1. ナビゲーションパネルから、Automation ExecutionInfrastructureCredentials を選択します。
  2. Create credential をクリックします。
  3. 新しい認証情報にわかりやすい名前を付けます (例: "インフラストラクチャーチーム GPG 公開鍵")。
  4. Credential type フィールドで、GPG Public Key を選択します。
  5. Browse をクリックして、公開鍵ファイル (my_public_key.asc など) を見つけて選択します。
  6. Create credential をクリックします。

    この認証情報は projects <ug_projects_add> で選択できるようになり、今後のプロジェクト同期時にコンテンツ検証が自動的に実行されます。

注記

プロジェクトキャッシュ SCM タイムアウトを使用して、Automation Controller が署名されたコンテンツを再検証する頻度を制御します。プロジェクトが (そのプロジェクトを使用するように設定されたジョブテンプレートの) 起動時に更新されるように設定されている場合は、キャッシュタイムアウト設定を有効にして、最後の更新から N 秒経過後に更新するように設定できます。検証が頻繁に実行される場合は、プロジェクトの Options Details ビューの Cache Timeout フィールドに時間を指定して、プロジェクトの更新頻度を下げることができます。

Project Cache Timeout option

12.4. ansible-sign CLI ユーティリティーのインストール

ansible-sign ユーティリティーを使用して、ユーザーが署名し、プロジェクトが署名されているかどうかを確認するためのオプションを提供します。

手順

  1. 次のコマンドを実行して ansible-sign をインストールします。

    $ dnf install ansible-sign
  2. 次のコマンドを使用して、ansible-sign が正常にインストールされたことを確認します。

    $ ansible-sign --version

    次のような出力は ansible-sign が正常にインストールされたことを示します。

    ansible-sign 0.1

12.5. プロジェクトの署名

プロジェクトの署名には、Ansible プロジェクトディレクトリーが関係します。プロジェクトのディレクトリー構造の詳細は、Ansible ドキュメントの Sample Ansible setup を参照してください。

次のサンプルプロジェクトは、非常にシンプルな構造になっています。インベントリーファイルと、playbooks ディレクトリーの下に 2 つの小さな Playbook が含まれています。

$ cd sample-project/
$ tree -a .
.
├── inventory
└── playbooks
    └── get_uptime.yml
    └── hello.yml

    1 directory, 3 files
注記

使用されるコマンドは、作業ディレクトリーがプロジェクトのルートであることを前提としています。ansible-sign project コマンドは、プロジェクトのルートディレクトリーを最後の引数として受け取ります。

. を使用して現在の作業ディレクトリーを示します。

ansible-sign は、プロジェクトに含まれるセキュリティーで保護された全ファイルのチェックサム (SHA256) を取得して、チェックサムマニフェストファイルにコンパイルし、そのマニフェストファイルに署名することでコンテンツを改ざんから保護します。

コンテンツに署名するには、保護するファイルを ansible-sign に指示する MANIFEST.in ファイルをプロジェクトのルートディレクトリーに作成します。

内部的には、ansible-sign は、Python の distlib ライブラリーの distlib.manifest モジュールを使用するため、MANIFEST.in はこのライブラリーが指定する構文に従う必要があります。MANIFEST.in ファイルのディレクティブの説明は、Python Packaging User Guide を参照してください。

サンプルプロジェクトには 2 つのディレクティブが含まれており、最終的に次の MANIFEST.in ファイルになります。

include inventory
recursive-include playbooks *.yml

このファイルを配置したら、チェックサムマニフェストファイルを生成し、署名します。これらの手順は両方とも、ansible-sign コマンドで 1 つで実行できます。

$ ansible-sign project gpg-sign .

実行が成功すると、次のような出力が表示されます。

[OK   ] GPG signing successful!
[NOTE ] Checksum manifest: ./.ansible-sign/sha256sum.txt
[NOTE ] GPG summary: signature created

これでプロジェクトは署名されました。

gpg-sign サブコマンドは project サブコマンドの下にあることに注意してください。

プロジェクトのコンテンツに署名する場合、すべてのコマンドは ansible-sign project で始まります。

すべての ansible-sign project コマンドは、プロジェクトのルートディレクトリー . を最後の引数として受け取ります。

ansible-sign は、デフォルトのキーリングを使用し、最初に検出できる利用可能なシークレットキーを探して、プロジェクトに署名します。--fingerprint オプションを使用して特定のシークレットキーを指定したり、--gnupg-home オプションを使用して完全に独立した GPG ホームディレクトリーを指定したりすることもできます。

注記

デスクトップ環境を使用している場合、GnuPG によってシークレットキーのパスフレーズの入力が自動的に要求されます。

この機能が動作しない場合、またはデスクトップ環境なしで作業している場合 (SSH など)、gpg-sign の後に -p --prompt-passphrase フラグを使用できます。これにより、代わりに ansible-sign がパスワードの入力を求めるようになります。

.ansible-sign ディレクトリーがプロジェクトディレクトリーに作成されたことに注意してください。このディレクトリーには、チェックサムマニフェストとそのマニフェストの分離された GPG 署名が含まれています。

$ tree -a .
.
├── .ansible-sign
│   ├── sha256sum.txt
│   └── sha256sum.txt.sig
├── inventory
├── MANIFEST.in
└── playbooks
    ├── get_uptime.yml
    └── hello.yml

12.6. プロジェクトの検証

署名された Ansible プロジェクトが変更されていないことを確認するには、ansible-sign を使用して、署名が有効かどうか、またファイルのチェックサムがチェックサムマニフェストに記載されている内容と一致しているかどうかを確認できます。ansible-sign project gpg-verify コマンドを使用すると、これらの条件の両方を自動的に検証できます。

$ ansible-sign project gpg-verify .
[OK   ] GPG signature verification succeeded.
[OK   ] Checksum validation succeeded.
注記

デフォルトでは、ansible-sign はデフォルトの GPG キーリングを使用して、一致する公開鍵を探します。--keyring オプションを使用してキーリングファイルを指定することも、--gnugpg-home オプションを使用して別の GPG ホームを指定することもできます。

何らかの理由で検証が失敗した場合は、原因のデバッグに役立つ情報が表示されます。使用したコマンドの ansible-sign の直後にグローバルの --debug フラグを渡すことで、追加の冗長性を有効にできます。

注記

GPG 認証情報がプロジェクトで使用されると、今後のプロジェクトの同期時にコンテンツの検証が自動的に行われます。

12.7. 署名の自動化

OpenShift や Jenkins など、信頼性の高い 継続的インテグレーション (CI) 環境では、署名プロセスを自動化できます。

たとえば、GPG 秘密鍵を選択した CI プラットフォームにシークレットとして保存して CI 環境の GnuPG にインポートできます。その後、通常の CI 環境内で署名ワークフローを実行できます。

GPG を使用してプロジェクトに署名する場合、環境変数 ANSIBLE_SIGN_GPG_PASSPHRASE を署名鍵のパスフレーズに設定できます。これは、CI パイプラインで注入してマスクしたり、保護したりできます。

シナリオに応じて、ansible-sign は、署名中と検証中の両方で異なる終了コードを返します。CI 環境は障害に基づいて異なる動作を行うことができるため、CI と自動化のコンテキストでも役立ちます。たとえば、一部のエラーに対してはアラートを送信し、他のエラーに対しては何も通知せずに失敗するようにできます。

以下は、ansible-sign で使用されている現在の終了コードであり、安定しているとみなされます。

Expand
終了コード概説シナリオ例

0

Success

  • 署名は成功しました
  • 検証は成功しました

1

一般的な障害

  • 検証中にチェックサムマニフェストファイルに構文エラーが含まれていました
  • 検証中に署名ファイルが存在しませんでした
  • 署名中に MANIFEST.in が存在しませんでした

2

チェックサム検証の失敗

  • 検証中に計算されたチェックサムハッシュが、署名されたチェックサムマニフェストに含まれていたものと異なりました (例: プロジェクトファイルが変更されたにもかかわらず、署名プロセスが再完了なかったなど)。

3

署名検証の失敗

  • 署名者の公開鍵がユーザーの GPG キーリングにありませんでした
  • 間違った GnuPG ホームディレクトリーまたはキーリングファイルが指定されました
  • 署名付きチェックサムマニフェストファイルが何らかの方法で変更されました

4

署名プロセスの失敗

  • 署名者の秘密鍵が GPG キーリングにありませんでした
  • 間違った GnuPG ホームディレクトリーまたはキーリングファイルが指定されました

第13章 トポロジービュー

メッシュトポロジーがすでにデプロイされている場合は、トポロジービュー を使用して、ノードタイプ、ノードの健全性、および各ノードに関する特定の詳細を表示します。

Automation Controller UI からトポロジービューアーにアクセスするには、System Administrator 権限が必要です。

仮想マシンベースのインストールにおける自動化メッシュの詳細は、仮想マシン環境向け自動化メッシュ を参照してください。

Operator ベースのインストールにおける自動化メッシュの詳細は、マネージドクラウドまたは Operator 環境向けの自動化メッシュ を参照してください。

13.1. トポロジービューアーへのアクセス

Automation Controller UI からトポロジービューアーにアクセスするには、次の手順を使用します。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureTopology View を選択します。Topology View が開き、各 receptor ノード間のリンクがグラフィック表示されます。
  2. ズームレベルを調整したり、グラフィックビューを操作したりするには、ツールバーにあるズームイン ( Examine )、ズームアウト ( Reduce )、拡大 ( Expand )、リセット ( Reset ) のコントロールアイコンを使用します。

    クリックおよびドラッグして移動したり、マウスやトラックパッドでスクロールすることでズームしたりすることもできます。画面に合わせる機能は、画面に合わせて自動的にグラフィックを拡大縮小し、中央に再配置します。これは、大きなメッシュ全体を表示する場合に特に便利です。

    ビューをデフォルトのビューにリセットするには、Reset view ( Reset ) アイコンをクリックします。

  3. 表示されているノードのタイプを特定するには、Legend を参照します。

    仮想マシンベースのインストール環境の場合は、コントロールプレーンおよび実行プレーン を参照してください。

    Operator ベースのインストール環境の場合は、コントロールプレーンおよび実行プレーン で各タイプのノードの詳細を参照してください。

    Legend には、node status <node_statuses> が色別に表示され、ノードの健全性を示します。Legend の Error ステータスには、Unavailable 状態 (Instances リストビューに表示されるもの) に加えて、Automation Controller の新しいバージョンで生じる今後のエラー状態が含まれます。

    Legend には、次のリンクステータスも表示されます。

    • Established: このリンク状態は、準備完了、使用不可、または無効であるノード間のピア接続を示します。
    • Adding: このリンク状態は、メッシュトポロジーに追加するように選択されたノード間のピア接続を示します。
    • Removing: このリンク状態は、トポロジーから削除するように選択されたノード間のピア接続を示します。
  4. ノードにカーソルを合わせると、コネクターが強調表示され、そのノードに直接接続されているノード (ピア) が表示されます。また、ノードをクリックすると、そのホスト名、ノードタイプ、ステータスなどの詳細が取得されます。
  5. 表示された詳細からインスタンスのホスト名のリンクをクリックすると、Details ページにリダイレクトされ、そのノードに関する詳細情報、特に Error ステータスに関する情報が表示されます。次の例を参照してください。

    Details ページを使用して、インスタンスを削除したり、必要に応じてインスタンスのヘルスチェックを実行したり、インスタンスからジョブの割り当てを解除したりできます。デフォルトでは、ジョブを各ノードに割り当てることができます。ただし、これを無効にして、ノードでジョブが実行されないようにすることもできます。

  6. 関連情報: 新しいノードの作成とメッシュのスケーリングの詳細は、インスタンスによる容量の管理 を参照してください。

第14章 インベントリー

Red Hat Ansible Automation Platform は、インベントリーファイルを使用して、論理的に編成されたインフラストラクチャー内の管理対象ノードまたはホストのリストに対して機能します。Red Hat Ansible Automation Platform インストーラーインベントリーファイルを使用して、インストールシナリオを指定し、Ansible へのホストのデプロイを説明できます。インベントリーファイルを使用することで、Ansible は単一のコマンドで多数のホストを管理できます。インベントリーは、指定する必要があるコマンドラインオプションの数を減らすことで、Ansible をより効率的に使用するのにも役立ちます。インベントリーはグループに分割されており、これらのグループにはホストが含まれます。

グループは、Automation Controller にホスト名を入力して手動で取得することも、サポートされているクラウドプロバイダーの 1 つから取得することもできます。

注記

カスタム動的インベントリースクリプト、または Automation Controller でまだネイティブにサポートされていないクラウドプロバイダーがある場合は、それを Automation Controller にインポートすることもできます。

詳細は、「自動化実行の設定」の インベントリーファイルのインポート を参照してください。

ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。Inventories ウィンドウには、現在使用可能なインベントリーのリストが表示されます。

Inventory details ページには次の内容が含まれます。

  • Name: インベントリー名。
  • Status

    ステータスは以下のとおりです。

    • Success: インベントリーソースの同期が正常に完了した時
    • Disabled: インベントリーに追加されたインベントリーソースがない
    • Error: インベントリーソースの同期がエラーを出して完了する場合
  • Type: 標準インベントリー、スマートインベントリー、構築インベントリーのいずれであるかを識別します。
  • Organization: インベントリーが属する組織。選択したインベントリーに以下のアクションを実行できます。

    • Edit Edit : 選択したインベントリーのプロパティーを編集します。
    • 複製 Copy : 新しいインベントリーの作成用のテンプレートとして、既存のインベントリーのコピーを作成します。
    • Delete inventory: 選択したインベントリーを削除します。

インベントリー名をクリックすると、選択したインベントリーの Details ページが表示され、インベントリーのグループとホストが表示されます。

14.1. スマートインベントリー

スマートインベントリーは、保存された検索によって定義されたホストのコレクションであり、標準インベントリーと同様に表示でき、ジョブの実行で簡単に使用できます。組織管理者は組織内のインベントリーに対する管理者パーミッションを持っており、スマートインベントリーを作成できます。

スマートインベントリーは、KIND=smart で識別されます。

スマートインベントリーは、検索で使用されているのと同じ方法を使用して定義できます。InventorySource はインベントリーに直接関連付けられます。

注記

スマートインベントリーは非推奨となり、今後のリリースでは削除される予定です。機能の拡張と置き換えのために、構築型インベントリーへの移行を検討してください。

Inventory モデルには、デフォルトで空白にされる以下の新規フィールドがありますが、スマートインベントリーは以下のように設定されます。

  • スマートインベントリーの場合、kindsmart に設定されます。
  • スマートインベントリーの場合、host_filter が設定され、かつ kindsmart に設定されます。

host モデルには、ホストが関連付けられているすべてのスマートインベントリーのセットを識別する関連エンドポイント、smart_inventories があります。メンバーシップテーブルは、スマートインベントリーに対してジョブが実行されるたびに更新されます。

注記

メンバーシップをさらに頻繁に更新するには、AWX_REBUILD_SMART_MEMBERSHIP ファイルベースの設定を True に変更します。(デフォルトは False です)。これにより、次のイベントが発生した場合にメンバーシップが更新されます。

  • 新規ホストが追加される
  • 既存ホストが変更される (更新または削除される)
  • 新規スマートインベントリーが追加される
  • 既存スマートインベントリーが変更される (更新または削除される)

編集できなくてもインベントリーを表示できます。

  • ホストおよびグループの名前はインベントリーソースの同期の結果として作成されます。
  • グループのレコードは編集したり、移動したりすることはできません。

通常のインベントリーの場合のように、スマートインベントリーホストエンドポイント (/inventories/N/hosts/) からホストを作成できません。スマートインベントリーの管理者には、名前、説明、変数などのフィールドを編集するパーミッションと、削除するパーミッションがありますが、スマートインベントリーに含まれるホスト (別のインベントリーでプライマリーメンバーシップを持つホスト) が左右されるため、host_filter を変更するパーミッションはありません。

host_filter は、スマートインベントリーの組織に含まれるインベントリーのホストにのみ適用されます。

host_filter を変更するには、インベントリーの組織の組織管理者である必要があります。組織管理者は、組織内のすべてのインベントリーに対する暗黙的な "admin" アクセス権を持っているため、組織管理者がまだ所有していないパーミッションが継承されるわけではありません。

スマートインベントリーの管理者は、他のユーザー (組織の管理者ではないユーザー) に、スマートインベントリーに対する「使用」や「アドホック」などのアクセス許可を付与できます。これらは、他の標準インベントリーと同様に、ロールで指定されたアクションを許可します。ただし、これはホスト (別のインベントリーに存在する) に特別なパーミッションを付与するものではありません。ホストへの直接読み取りパーミッションは割り当てられず、/#/hosts/ の下にある追加のホストを表示することも許可されませんが、スマートインベントリーホストリストの下にあるホストは表示できます。

状況によっては、以下のものを変更できます。

  • インベントリーソースを使用してインベントリーに手動で作成した新しいホスト。
  • インベントリーソースの同期の結果として作成されたグループ。
  • ホストとグループの変数は、ローカルシステム管理者であっても変更できません。

スマートインベントリーに関連付けられたホストは表示される際に明示されます。スマートインベントリーの結果に同じホスト名を持つ複数のホストが含まれる場合、一致するホストの 1 つのみがスマートインベントリーの一部として組み込まれ、ホスト ID 別に並べ替えられます。

14.1.1. スマートホストフィルター

検索フィルターを使用して、インベントリーのホストを入力できます。この機能はファクト検索機能を使用します。

Automation Controller は、ジョブテンプレート別に use_fact_cache=True が設定されるたびに、ジョブテンプレートを実行中に Ansible Playbook で生成されたファクトをデータベースに保存します。新しいファクトはホスト別となっており、既存のファクトとマージされます。これらの保存されたファクトは、GET クエリーパラメーター host_filter を使用して /api/v2/hosts エンドポイントでホストをフィルター処理するために使用できます。

以下に例を示します。

/api/v2/hosts?host_filter=ansible_facts__ansible_processor_vcpus=8

host_filter パラメーターでは次のことが許可されます。

  • () でのグループ化
  • ブール値および演算子の使用:

    • __ 関連付けられたフィールドの関連フィールドを参照します。
    • __ JSON キーパスでキーを分離するために ansible_facts で使用されます。
    • `[] パスの指定で json アレイを表すために使用されます。
    • "" 値にスペースが必要な場合は、その値に使用されます。
  • 「標準的」な Django クエリーを host_filter に組み込むことができる

:

/api/v2/hosts/?host_filter=name=localhost
/api/v2/hosts/?host_filter=ansible_facts__ansible_date_time__weekday_number="3"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor[]="GenuineIntel"
/api/v2/hosts/?host_filter=ansible_facts__ansible_lo__ipv6[]__scope="host"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor_vcpus=8
/api/v2/hosts/?host_filter=ansible_facts__ansible_env__PYTHONUNBUFFERED="true"
/api/v2/hosts/?host_filter=(name=localhost or name=database) and (groups__name=east or groups__name="west coast") and ansible_facts__an

host_filter は、ホスト名グループ名、および Ansible ファクト 別に検索できます。

グループ検索の形式は次のとおりです。

groups.name:groupA

ファクト検索の形式は次のとおりです。

ansible_facts.ansible_fips:false

また、ホスト名とホストの説明で構成されるスマート検索の検索を実行することもできます。

host_filter=name=my_host
注記

host_filter の検索語が文字列型の場合、数値 (例: 2.66) または JSON キーワード (例: nulltrue、または false) の値を有効にするには、値の前後に二重引用符を追加して、コントローラーが検索語を二重引用符で囲み、非文字列として解析されないようにします。

host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"

14.2. 構築型インベントリー

入力インベントリーのリストから新しいインベントリーを作成できます。これは構築型インベントリー (Constructed Inventory) と呼ばれます。

構築型インベントリーには、入力インベントリー内のホストとグループのコピーが含まれています。これにより、ジョブが多数のインベントリーにわたるサーバーグループをターゲットにすることが可能になります。グループと hostvars をインベントリーの内容に追加したり、ホストをフィルタリングして構築型インベントリーのサイズを制限したりできます。

構築型インベントリーは、ansible.builtin.constructed inventory モデルを使用します。

構築型インベントリーの重要なポイントは次のとおりです。

  • 通常の Ansible hostvars 名前空間が利用可能である
  • グループがある

構築型インベントリーは、source_varslimit を入力として受け取り、その input_inventories を、グループを備えた新しいインベントリーに変換します。グループ (既存または構築された) を limit フィールドで参照して、生成されるホストの数を減らすことができます。

次のホストプロパティーに基づいてグループを構築できます。

  • RHEL のメジャーバージョンまたはマイナーバージョン
  • Windows ホスト
  • 特定のリージョンでタグ付けされたクラウドベースのインスタンス
  • その他

後のセクションで説明する例は、入力インベントリーの構造別に整理されています。

14.2.1. グループ名と変数のフィルタリング

グループと変数の組み合わせに対してフィルタリングできます。たとえば、グループ変数値に一致し、ホスト変数値にも一致するホストをフィルタリングできます。

このフィルターを実行するには 2 つの方法があります。

  • 2 つのグループを定義します。1 つのグループはグループ変数と一致し、もう 1 つのグループはホスト変数値と一致します。limit パターンを使用して、両方のグループに含まれるホストを返します。これは、推奨の手法です。
  • 1 つのグループを定義します。定義には、グループ変数とホスト変数が特定の値に一致する必要があるという条件を含めます。limit パターンを使用して、新しいグループ内のすべてのホストを返します。

例14.1 例

次のインベントリーファイルは 4 つのホストを定義し、グループ変数とホスト変数を設定します。これは product グループと sustaining グループを定義し、2 つのホストをシャットダウン状態に設定します。

目標は、シャットダウンされた運用ホストのみを返すフィルターを作成することです。

[account_1234]
host1
host2 state=shutdown

[account_4321]
host3
host4 state=shutdown

[account_1234:vars]
account_alias=product_dev

[account_4321:vars]
account_alias=sustaining

ここでの目標は、product_dev と同等の account_alias 変数を持つグループ内に存在し、シャットダウンされているホストのみを返すことです。これには 2 つのアプローチがあり、どちらも YAML 形式で示されています。最初に提案する内容が推奨されます。

  1. 2 つのグループを構築し、共通部分に制限します

    source_vars:

    plugin: constructed
    strict: true
    groups:
      is_shutdown: state | default("running") == "shutdown"
      product_dev: account_alias == "product_dev"

    limit: is_shutdown:&product_dev

    この構築型インベントリーの入力は、両方のカテゴリーのグループを作成し、limit (ホストパターン) を使用して、これら 2 つのグループに共通するホストのみを返します。これは、Patterns: targeting hosts and groups で説明されています。

    変数が定義されている場合と定義されていない場合 (ホストに応じて)、デフォルトを指定できます。たとえば、定義されていない場合に対象の値がわかっている場合は、| default("running") を使用します。これは、デバッグのヒント で説明されているように、デバッグに役立ちます。

  2. 1 つのグループを構築してグループに限定します

    source_vars:

    plugin: constructed
    strict: true
    groups:
      shutdown_in_product_dev: state | default("running") == "shutdown" and account_alias == "product_dev"

    limit: shutdown_in_product_dev

    この入力により、両方の基準に一致するホストのみを含む 1 つのグループが作成されます。この場合、制限はグループ名そのものとなり、host2 が返されます。前述の方法と同じです。

14.2.2. デバッグのヒント

テンプレートの問題をデバッグできるように、strict パラメーターを true に設定することが重要です。テンプレートのレンダリングに失敗すると、その構築型インベントリーに関連するインベントリーの更新でエラーが発生します。

エラーが発生した場合は、詳細レベルを上げてさらなる情報を取得します。

Ansible の Jinja2 テンプレートでは、| default("running") などでデフォルトを指定します。こうすることで、strict: true を設定した場合にテンプレートで発生するエラーを回避できます。

strict: false を設定して、テンプレートがエラーを生成できるようにすることもできます。その結果、ホストはそのグループに含まれなくなります。ただし、これを行うと、今後、テンプレートが継続して複雑化した場合、問題のデバッグが困難になります。

テンプレートが予期したインベントリーコンテンツを生成しない場合は、テンプレートで想定されている機能についてデバッグする必要がある場合があります。たとえば、groups グループに複雑なフィルター (shutdown_in_product_dev など) があるが、結果の構築型インベントリーにホストが含まれていない場合は、compose パラメーターを使用してデバッグを行います。

例14.2 例

source_vars:

plugin: constructed
strict: true
groups:
  shutdown_in_product_dev: state | default("running") == "shutdown" and account_alias == "product_dev"
compose:
  resolved_state: state | default("running")
  is_in_product_dev: account_alias == "product_dev"

limit: ``

limit を空白にして実行すると、すべてのホストが返されます。これを使用して、特定のホスト上の特定の変数を検査し、groups 内のどこに問題があるかの見解を得ることができます。

14.2.3. ネストされたグループ

ネストされたグループは、一方が他方の子である 2 つのグループで構成されます。次の例では、子グループの内部に別のホストがあり、親グループには変数が定義されています。

親グループの変数は、Ansible Core が動作する方法により、playbook として対象の名前空間で利用でき、フィルタリングに使用できます。

次のインベントリーファイルの例、nested.yml は YAML 形式です。

all:
  children:
    groupA:
      vars:
        filter_var: filter_val
      children:
        groupB:
          hosts:
            host1: {}
    ungrouped:
      hosts:
        host2: {}

host1groupB に属しているため、groupA にも属します。

ネストされたグループ名でのフィルタリング

ネストされたグループ名をフィルターするには、次の YAML 形式を使用します。

`source_vars`:

plugin: constructed

`limit`: `groupA`

ネストされたグループプロパティーでのフィルタリング

ホストが間接的にそのグループ二所属する場合でも、グループ変数でフィルタリングするには、次の YAML 形式を使用します。

インベントリーの内容では、host2 はどのグループにも属していないため、想定として変数 filter_var は定義されない点に注意してください。strict: true を使用しているため、その変数を持たないホストが定義されるようにデフォルト値を使用します。これを使用すると、host2 はエラーを生成するのではなく、式から false を返します。host1 は、そのグループから変数を継承し、返されます。

source_vars:

plugin: constructed
strict: true
groups:
  filter_var_is_filter_val: filter_var | default("") == "filter_val"

limit: filter_var_is_filter_val

14.2.4. Ansible ファクト

Ansible ファクトを使用してインベントリーを作成するには、gather_facts: true 設定を持つインベントリーに対して Playbook を実行する必要があります。ファクトはシステムごとに異なります。次の例は、すべての既知のシナリオに対処することを目的としたものではありません。

14.2.4.1. 環境変数のフィルタリング

次の例には、YAML 形式を使用した環境変数のフィルタリングが含まれます。

source_vars:

plugin: constructed
strict: true
groups:
  hosts_using_xterm: ansible_env.TERM == "xterm"

limit: hosts_using_xterm
14.2.4.2. プロセッサーの種類ごとにホストをフィルタリングする

次の例では、YAML 形式を使用してプロセッサータイプ (Intel) ごとにホストをフィルタリングします。

source_vars:

plugin: constructed
strict: true
groups:
  intel_hosts: "GenuineIntel" in ansible_processor

limit: intel_hosts
注記

構築型インベントリー内のホストは、元のインベントリーホストを参照しているため、ライセンスの割り当てにはカウントされません。また、元のインベントリーで無効になっているホストは、構築型インベントリーには含まれません。

ansible-inventory を使用してインベントリー更新を実行すると、構築型インベントリーの内容が作成されます。

これは、常にジョブ実行前の起動時に更新されるように設定されていますが、この操作に時間がかかる場合に備え、キャッシュのタイムアウトを選択することもできます。

構築型インベントリーを作成する際に、API によって、そのインベントリーに必ず 1 つのインベントリーソースが関連付けられていることが確認されます。インベントリー更新にはすべて、関連するインベントリーソースがあります。構築型インベントリーに必要なフィールド (source_varslimit) は、インベントリーソースのモデルにすでに存在するフィールドです。

14.3. インベントリープラグイン

インベントリーの更新では、インベントリープラグインによって解析される動的に生成された YAML ファイルが使用されます。Automation Controller v4.4 では、次のインベントリーソースの source_vars を使用して、インベントリープラグイン設定を Automation Controller に直接提供できます。

インベントリーソース用に新しく作成された設定には、デフォルトのプラグイン設定値が含まれています。新しく作成したインベントリーソースを従来のソースの出力と一致させるには、そのソースに特定の設定値のセットを適用する必要があります。下位互換性を確保するために、Automation Controller はこれらの各ソースに「テンプレート」を使用して、強制的にインベントリープラグインの出力をレガシー形式にします。

ソースとそのテンプレートの詳細は、サポートされているインベントリープラグインテンプレート を参照してください。

最上位キーとして plugin: foo.bar.baz を含む source_vars は、実行時に InventorySource ソースに基づいて完全修飾インベントリープラグイン名に置き換えられます。たとえば、InventorySource に ec2 を選択した場合、実行時にプラグインが amazon.aws.aws_ec2 に設定されます。

14.4. 新しいインベントリーの追加

新しいインベントリーの追加には、次のコンポーネントが含まれます。

インベントリーを作成するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。Inventories ウィンドウには、現在使用可能なインベントリーのリストが表示されます。
  2. Create inventory をクリックし、作成するインベントリーのタイプを選択します。
  3. 以下のフィールドに該当する詳細を入力します。

    • Name: このインベントリーに適した名前を入力します。
    • オプション: Description: 任意の説明を入力します (オプション)。
    • Organization: 必須。利用可能な組織の中から選択します。
    • スマートインベントリーにのみ適用されます: Smart host filter: 検索フィルターを使用して、このインベントリーのホストを入力します。

      たとえば、"name__icontains=RedHat" などです。

      これらのオプションは、選択した組織に基づいています。

      フィルターは、タグがそれらの名前を含む特定のホストをフィルタリングするために使用されるという点でタグに似ています。したがって、Smart host filter フィールドに入力するには、ホスト自体ではなく、必要なホストを含むタグを指定します。

      フィルターでは大文字と小文字が区別されます。

    • Instance groups: このインベントリーを実行するインスタンスグループを選択します。

      複数のインスタンスグループを選択し、実行する順序で並べ替えることができます。

    • オプション: Labels: このインベントリーを説明するラベルを指定するため、インベントリーとジョブのグループ化とフィルタリングに使用できます。
    • 構築型インベントリーにのみ適用: Input inventories: この構築型インベントリーに含めるソースインベントリーを指定します。入力インベントリーの空のグループが、構築型インベントリーにコピーされます。
    • オプション: (構築型インベントリーにのみ適用): Cached timeout (seconds): キャッシュプラグインデータのタイムアウト時間を設定します。
    • 構築型インベントリーにのみ適用: Verbosity: 構築型インベントリーに関連付けられたインベントリーソースに関連する Playbook の実行時に Ansible が生成する出力のレベルを制御します。

      詳細レベルを次から選択します。

    • Normal
    • Verbose
    • More verbose
    • Debug
    • Connection Debug
    • WinRM Debug

      • Verbose ロギングには、すべてのコマンドの出力が含まれます。
      • More verbose では、Verbose よりも詳細な情報が提供されます。
      • Debug ロギングは非常に詳細で、特定のサポートインスタンスで役立つ SSH 操作に関する情報が含まれています。ほとんどのユーザーはデバッグモードの出力を確認する必要はありません。
      • Connection Debug により詳細モードで SSH を実行でき、SSH 接続の進行状況に関するデバッグ情報を提供します。
      • WinRM Debug は、Windows リモート管理に特有の詳細レベルに使用されます。

        構築型インベントリープラグインの使用方法 に関する情報を参照するには、 Expand アイコンをクリックします。

    • 構築型インベントリーにのみ適用: Limit: 構築済みインベントリーに関連付けられたインベントリーソースに対して返されるホストの数を制限します。グループ名を limit フィールドに貼り付けて、そのグループ内のホストのみを含めることができます。詳細は、Source vars 設定を参照してください。
    • 標準インベントリーにのみ適用されます。オプション: Prevent Instance Group Fallback オプションをオンにして、Instance Groups フィールドにリストされているインスタンスグループのみがジョブを実行できるようにします。オフの場合、ジョブの実行場所の制御 で説明されている階層に基づいて、実行プール内の使用可能なすべてのインスタンスが使用されます。
    • Variables (構築型インベントリーの Source vars):

      • Variables このインベントリー内のすべてのホストに適用する変数の定義と値。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。
      • 構築型インベントリーの Source vars は、データの groups キーの下にグループを作成します。Jinja2 テンプレート構文を受け入れ、すべてのホストに対してレンダリングし、true または false の評価を行い、結果が true の場合はそのホストを (エントリーのキーから) グループに含めます。これは、そのグループ名を limit フィールドに貼り付けて、そのグループ内のホストのみを含めることができるため、特に便利です。
  4. Create inventory をクリックします。

次のステップ

新規インベントリーが保存された後に、パーミッション、グループ、ホスト、およびソースの設定や、完了したジョブの表示に進みます (インベントリーのタイプに応じて適用可能な場合)。

14.4.1. インベントリーへの権限の追加

インベントリーに権限を追加するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. テンプレートを選択し、User Access または Team Access タブで Add roles をクリックします。
  3. 追加するユーザーまたはチームを選択し、Next をクリックします。
  4. 名前の横にあるチェックボックスを選択して、リストからユーザーまたはチームを 1 つ以上メンバーとして追加します。
  5. Next をクリックします。
  6. 選択したユーザーまたはチームに付与するロールを選択します。リソースが異なれば、利用可能なオプションも異なります。
  7. Finish をクリックして、選択したユーザーまたはチームにロールを適用し、メンバーとして追加します。各ユーザーおよびチームに割り当てられた更新済みのロールが表示されます。

14.4.2. 権限の削除

リソースに関連付けられたユーザーから特定の権限を削除します。ロールの関連付けを解除すると、ユーザーが不要になった機能やデータにアクセスできなくなります。

手順

  • 特定のユーザーのロールを削除するには、リソースの横にある Disassociate アイコンをクリックします。これにより、確認ウィンドウが起動し、関連付けの解除を確認するよう求められます。

14.4.3. インベントリーへのグループの追加

インベントリーはグループに分割されており、グループにはホストと他のグループを含めることができます。グループは標準インベントリーにのみ適用できます。スマートインベントリーを使用して直接設定できません。標準インベントリーで使用されるホストを介して既存のグループを関連付けることができます。

標準インベントリーでは次のアクションを使用できます。

  • 新規グループの作成
  • 新規ホストの作成
  • 選択したインベントリーでのコマンドの実行
  • インベントリープロパティーの編集
  • グループおよびホストのアクティビティーストリームの表示
  • インベントリーの構築に関するヘルプの取得
注記

インベントリーソースはグループに関連付けられません。生成されたグループはトップレベルであり、引き続き子グループを持つことができます。これらの生成されたグループはいずれも、ホストを持つことができます。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. グループを追加するインベントリー名を選択します。
  3. インベントリーの Details ページで、Groups タブを選択します。
  4. Create group をクリックします。
  5. 適切な詳細を入力します。

    • Name: 必須
    • オプション: Description: 必要に応じて説明を入力します。
    • オプション: Variables: このグループ内のすべてのホストに適用される定義と値を入力します。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。
  6. Create group をクリックします。

結果

テンプレートにグループを追加すると、Group Details ページが表示されます。

14.4.3.1. グループ内でのグループの追加

テンプレートにグループを追加すると、Group Details ページが表示されます。

手順

  1. Related Groups タブを選択します。
  2. 設定内にすでに存在するグループを追加するには Add existing group をクリックします。新しいグループを作成するには Create group をクリックします。
  3. 新規グループを作成する場合、該当する詳細情報を必須およびオプションフィールドに入力します。

    • Name (必須):
    • オプション: Description: 必要に応じて説明を入力します。
    • オプション: Variables: このグループ内のすべてのホストに適用される定義と値を入力します。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。
  4. Create group をクリックします。
  5. Create group ウィンドウが閉じ、新規に作成されたグループが、元のグループに関連付けられたグループのリストのエントリーとして表示されます。

次のステップ

既存のグループを追加することを選択した場合、利用可能なグループが別の選択ウィンドウに表示されます。グループを選択すると、そのグループに関連付けられているグループのリストに表示されます。

  • サブグループ配下に追加のグループとホストを設定するには、グループのリストからサブグループの名前をクリックし、上記の手順を繰り返します。
14.4.3.2. インベントリーグループの表示または編集

グループリストビューにはすべてのインベントリーグループが表示されます。また、ルートグループのみを表示するようにフィルタリングすることもできます。インベントリーグループは、別のグループのサブセットではない場合、ルートグループとみなされます。

Automation Controller は子グループやホストなどの依存関係を検索するため、依存関係を気にせずにサブグループを削除できます。存在する場合は、ルートグループとそのすべてのサブグループおよびホストを削除するか、サブグループをプロモートしてホストとともに最上位のインベントリーグループにするかを選択する確認ウィンドウが表示されます。

14.4.4. インベントリーへのホストの追加

インベントリーのホストと、グループおよびグループ内グループのホストを設定できます。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. グループを追加するインベントリー名を選択します。
  3. インベントリーの Details ページで、Hosts タブを選択します。
  4. Create host をクリックします。
  5. 設定にすでに存在するホストを追加するか、新しいホストを作成するかを選択します。
  6. 新しいホストを作成する場合は、トグルを On に設定して、ジョブの実行中にこのホストを含めます。
  7. 適切な詳細を入力します。

    • Name (必須):
    • オプション: Description: 必要に応じて説明を入力します。
    • オプション: Variables: 次の例のように、このグループ内のすべてのホストに適用される定義と値を入力します。

      {
        ansible_user : <username to ssh into>
        ansible_ssh_pass : <password for the username>
        ansible_become_pass: <password for becoming the root>
      }

      JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。

  8. Create host をクリックします。
  9. Create host ウィンドウが閉じ、新規に作成されたホストが、元のグループに関連付けられたホストのリストのエントリーとして表示されます。

    既存のホストを追加することを選択した場合、使用可能なホストが別の選択ウィンドウに表示されます。

    ホストを選択すると、グループに関連付けられているホストのリストに表示されます。

  10. この画面でホストを選択し、 Disassociate アイコンをクリックしてホストの関連付けを解除します。

    注記

    この画面からアドホックコマンドを実行することもできます。詳細は、アドホックコマンドの実行 を参照してください。

  11. ホストの追加グループを設定するには、ホストのリストからホストの名前をクリックします。

    これにより、選択したホストの Details タブが開きます。

  12. Groups タブをクリックして、ホストのグループを設定します。
  13. Associate groups をクリックして、ホストを既存のグループに関連付けます。選択可能なグループが別個の選択ウィンドウに表示されます。
  14. ホストに関連付けるグループを選択し、Confirm をクリックします。

    グループが関連付けられている場合、そのグループはホストに関連付けられているグループのリストに表示されます。

  15. ホストを使用してジョブを実行した場合、ホストの Completed Jobs タブでそのジョブの詳細を表示できます。
  16. Expanded をクリックして、各ジョブの詳細を表示します。
注記

API に新しく追加されたエンドポイント /api/v2/bulk/host_create を使用して、ホストを一括で作成できます。このエンドポイントは JSON を受け入れ、ターゲットインベントリーとインベントリーに追加するホストのリストを指定できます。これらのホストはインベントリー内で一意である必要があります。すべてのホストが追加されるか、操作が完了できなかった理由を示したエラーが返されます。OPTIONS リクエストを使用して、関連するスキーマを返します。

14.4.5. ソースの追加

インベントリーソースはグループに関連付けられません。生成されたグループはトップレベルであり、引き続き子グループを持つことができます。これらの生成されたグループはいずれも、ホストを持つことができます。インベントリーへのソースの追加は、標準インベントリーにのみ適用されます。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースを追加するインベントリー名を選択します。
  3. インベントリーの Details ページで、Sources タブを選択します。
  4. Create source をクリックします。
  5. 適切な詳細を入力します。

    • Name (必須):
    • オプション: Description: 必要に応じて説明を入力します。
    • オプション: Execution Environment: Search アイコンを選択するか、インベントリーのインポートを実行する実行環境の名前を入力します。実行環境の構築の詳細は、実行環境 を参照してください。
    • Source: インベントリーのソースを選択します。ソースの詳細と適切な情報の提供は、インベントリーソース を参照してください。
  6. 選択した インベントリーソース の情報がすべて揃ったら、オプションで、冗長性、ホストフィルター、変数などの他の共通パラメーターを指定できます。
  7. Verbosity メニューを使用して、インベントリーソースの更新ジョブの出力レベルを選択します。
  8. Host filter フィールドを使用して、Automation Controller にインポートする一致するホスト名のみを指定します。
  9. Enabled variable フィールドで、Automation Controller がホスト変数のディクショナリーから有効な状態を取得することを指定します。有効な変数は、ドット表記を使用して 'foo.bar' のように指定できます。この場合、ネストされたディクショナリーが検索されます (from_dict.get('foo', {}).get('bar', default) と同等)。

    Enabled variable フィールドは、Enabled value フィールドを設定しない限り無視されます。Enabled variable がこの値と一致する場合、インポート時にホストが有効になります。

  10. Enabled variable フィールドでホスト変数のディクショナリーを指定した場合は、インポート時に有効にする値を指定できます。たとえば、次のホスト変数の enabled_var='status.power_state' および 'enabled_value='powered_on' の場合、ホストは enabled とマークされます。

    {
    "status": {
    "power_state": "powered_on",
    "created": "2020-08-04T18:13:04+00:00",
    "healthy": true
    },
    "name": "foobar",
    "ip_address": "192.168.2.1"
    }

    power_statepowered_on 以外の値の場合、Automation Controller へのインポート時にホストは無効になります。キーが見つからない場合、ホストは有効になっています。

  11. すべてのクラウドインベントリーソースには、以下の更新オプションがあります。

    • Overwrite: チェックされている場合は、外部ソースにこれまで存在していたが現在は削除されているホストとグループが Automation Controller インベントリーから削除されます。インベントリーソースの管理対象ではなかったホストとグループは、次に手動で作成されたグループにプロモートされます。または、これらをプロモートする手動で作成されたグループがない場合は、インベントリーの「すべて」のデフォルトグループに残されます。

      チェックが付けられていない場合、外部ソースにないローカルの子ホストおよびグループは、インベントリーの更新プロセスによって処理されないままになります。

    • Overwrite variables: チェックが付けられている場合、子グループとホストのすべての変数が削除され、外部ソースで見つかった変数に置き換えられます。

      チェックが付けられていない場合は、ローカル変数と外部ソースにあるものを組み合わせるマージが実行されます。

    • Update on launch: このインベントリーを使用してジョブを実行するたびに、ジョブタスクの実行前に選択したソースからのインベントリーが更新されます。

      インベントリーの同期よりも早くジョブが生成された場合のジョブのオーバーフローを回避するために、こちらを選択すると、以前のインベントリー同期を一定の秒数キャッシュするための Cache Timeout を設定できます。

      Update on launch 設定は、プロジェクトとインベントリーの依存関係システムを参照しており、2 つのジョブの同時実行を特に除外するものではありません。

      キャッシュタイムアウトが指定されている場合、2 番目のジョブの依存関係が作成され、最初のジョブが生成したプロジェクトとインベントリーの更新が使用されます。

      その後、両方のジョブは、そのプロジェクトまたはインベントリーの更新が完了するのを待ってから続行します。ジョブテンプレートが異なり、システムにその機能がある場合は、両方を同時に開始および実行できます。動的インベントリーソースで Automation Controller のプロビジョニングコールバック機能を使用する場合は、インベントリーグループに対して Update on launch を設定する必要があります。

      Update On launch が設定されているプロジェクトを使用するインベントリーソースを同期すると、インベントリーの更新が開始される前に、(キャッシュタイムアウトルールに従って) プロジェクトが自動的に更新される可能性があります。

      テンプレートが使用するのと同じプロジェクトから取得するインベントリーを使うように、ジョブテンプレートを作成できます。このような場合、プロジェクトが更新されてからインベントリーが更新されます (更新がまだ進行中でない場合、またはキャッシュタイムアウトがまだ期限切れになっていない場合)。

  12. 入力内容と選択内容を確認します。これにより、スケジュールや通知などの追加の詳細を設定できます。
  13. このインベントリーソースに関連付けられているスケジュールを設定するには、Schedules タブをクリックします。

    • スケジュールがすでに設定されている場合は、スケジュール設定を確認、編集、有効化または無効化します。
    • スケジュールが設定されていない場合、スケジュールの設定の詳細は、スケジュール を参照してください。

14.4.6. ソースの通知の設定

ソースの通知を設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. 通知を設定するインベントリー名を選択します。
  3. インベントリーの Details ページで、Notifications を選択します。

    注記

    Notifications タブは、新しく作成したソースを保存した場合にのみ表示されます。

  4. 通知がすでに設定されている場合は、トグルを使用して、特定のソースで使用する通知を有効または無効にします。詳細は、通知の有効化と無効化 を参照してください。
  5. 通知を設定していない場合は、通知機能 で詳細を確認してください。
  6. 入力内容と選択内容を確認します。
  7. Save をクリックします。

次のステップ

ソースを定義すると、インベントリーに関連付けられているソースのリストにそのソースが表示されます。Sources タブから、単一のソースに対して同期を実行することも、すべてのソースを一度に同期することもできます。同期プロセスのスケジュール設定など、追加アクションを実行したり、ソースを編集または削除したりすることもできます。

14.4.7. インベントリーソース

ホストを入力できるインベントリータイプに一致するソースを選択します。

14.4.7.1. プロジェクトからの取得

イベントリーをプロジェクトから取得する場合は、紐づけられているプロジェクトの SCM タイプを使用します。たとえば、プロジェクトのソースが GitHub からのものである場合、インベントリーでは同じソースが使用されます。

プロジェクトをソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Sourced from a Project を選択します。
  5. 追加フィールドに次の詳細を入力します。

    • オプション: Source control branch/tag/commit: チェックアウトするソースコントロール (Git または Subversion) からの SCM ブランチ、タグ、コミットハッシュ、任意の参照、またはリビジョン番号 (該当する場合) を入力します。

      このフィールドは、ソースプロジェクトで Allow branch override オプションがチェックされている場合にのみ表示されます。詳細は、SCM タイプ - Git と Subversion を使用するための Playbook の設定 を参照してください。

      Allow branch override

      次のフィールドにカスタム refspec も指定しない限り、一部のコミットハッシュと参照は使用できない場合があります。空白のままにした場合、デフォルトは HEAD です。これは、このプロジェクトで最後にチェックアウトされたブランチ/タグ/コミットです。

    • オプション: Credential: このソースに使用する認証情報を指定します。
    • Project (必須): デフォルトのプロジェクトが事前に入力されます。それ以外の場合は、このインベントリーがソースとして使用しているプロジェクトを指定します。 Search アイコンをクリックして、プロジェクトのリストから選択します。リストが膨大な場合は、検索を使用してオプションを絞り込みます。
    • Inventory file (必須): 取得したプロジェクトに関連付けられたインベントリーファイルを選択します。まだ入力されていない場合は、メニュー内のテキストフィールドに入力して、無関係なファイルタイプをフィルタリングできます。フラットファイルインベントリーに加えて、ディレクトリーまたはインベントリースクリプトを参照することもできます。

      image

  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. オプション: カスタムインベントリースクリプトに渡すために、Source variables フィールドに環境変数を設定できます。インベントリースクリプトをソースコントロールに配置し、プロジェクトから実行することもできます。詳細は、自動化実行の設定インベントリーファイルのインポート を参照してください。

トラブルシューティング

SCM からカスタムインベントリースクリプトを実行する場合は、アップストリームのソースコントロールでスクリプトの実行ビット (chmod +x) を必ず設定してください。

そうしないと、Automation Controller が実行時に [Error 13] Permission denied エラーを出力します。

14.4.7.2. Amazon Web Services EC2

AWS EC2 をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Amazon EC2 を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

    • オプション: Credential: 既存の AWS 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。

      Automation Controller が IAM ロールが割り当てられた EC2 インスタンス上で実行されている場合、認証情報は省略でき、代わりにインスタンスメタデータのセキュリティー認証情報が使用されます。IAM ロールの使用に関する詳細は、Amazon のドキュメント IAM roles for Amazon EC2_documentation_at_Amazon を参照してください。

  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source variables フィールドを使用して、aws_ec2 インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、aws インベントリープラグインのドキュメント を参照してください。

トラブルシューティング

include_filters のみを使用する場合、AWS プラグインは常にすべてのホストを返します。これを正しく使用するには、フィルターor の最初の条件を設定し、残りの OR 条件を include_filters のリストに基づいて構築する必要があります。

14.4.7.3. Google Compute Engine

Google をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Add new source ページで、Source リストから Google Compute Engine を選択します。
  5. Create source ウィンドウが展開され、必須の Credential フィールドが表示されます。既存の GCE 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、gcp_compute インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、gcp_compute インベントリープラグインのドキュメント を参照してください。
14.4.7.4. Microsoft Azure Resource Manager

Microsoft Azure Resource Manager をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Microsoft Azure Resource Manager を選択します。
  5. 追加フィールドに次の詳細を入力します。
  6. オプション: Credential: 既存の Azure 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
  7. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  8. Source variables フィールドを使用して、azure_rm インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、azure_rm インベントリープラグインのドキュメント を参照してください。
14.4.7.5. VMware vCenter

VMware をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから VMware vCenter を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、vmware_inventory インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、vmware_inventory インベントリープラグイン を参照してください。

トラブルシューティング

VMware のプロパティーは、小文字からキャメルケースに変更されました。Automation Controller はトップレベルのキーのエイリアスを提供しますが、ネストされたプロパティーの小文字キーは廃止されました。サポートされている有効なプロパティーのリストは、Using Virtual machine attributes in VMware dynamic inventory plugin を参照してください。

14.4.7.6. VMware ESXi

VMWare-ESXI をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースを追加するインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. ソースの Name を入力します (必須)。
  5. Create source ページで、Source リストから VMware ESXi を選択します。
  6. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

  7. Verbosity メニューを使用して、インベントリーソースの更新ジョブの出力レベルを選択します。
  8. オプション: ソースの追加 で説明されているように、ホストフィルター、有効な変数または値、更新オプションを指定できます。
  9. Source Variables フィールドを使用して、vmware_inventory インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。

トラブルシューティング

VMware のプロパティーは、小文字からキャメルケースに変更されました。Automation Controller はトップレベルのキーのエイリアスを提供しますが、ネストされたプロパティーの小文字キーは廃止されました。サポートされている有効なプロパティーのリストは、Using Virtual machine attributes in VMware dynamic inventory plugin を参照してください。

14.4.7.7. Red Hat Satellite 6

Red Hat Satellite をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Red Hat Satellite 6 を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、foreman インベントリーソースで使用されるパラメーターを指定します。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、Ansible ドキュメントの Foreman inventory source を参照してください。

トラブルシューティング

Automation Controller インベントリーに Satellite からの "関連グループ" がないという問題が発生する場合は、インベントリーソースでこれらの変数を定義する必要がある場合があります。詳細は、Red Hat Satellite 6 を参照してください。

"no foreman.id" variable(s) when syncing the inventory というメッセージが表示された場合は、Red Hat カスタマーポータル (https://access.redhat.com/solutions/5826451) で解決策を参照してください。記事全文にアクセスするには、必ず顧客の認証情報でログインしてください。

14.4.7.8. Red Hat Insights

Red Hat Insights をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Red Hat Insights を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

    • オプション: Credential: 既存の Red Hat Insights 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、insights インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、insights インベントリープラグイン を参照してください。
14.4.7.9. OpenStack

OpenStack をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから OpenStack を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、openstack インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、openstack インベントリープラグイン を参照してください。
14.4.7.10. Red Hat Virtualization

Red Hat Virtualization をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Red Hat Virtualization を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

    • オプション: Credential: 既存の Red Hat Virtualization 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、ovirt インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、ovirt インベントリープラグイン を参照してください。
注記

Red Hat Virtualization (ovirt) インベントリーソースリクエストはデフォルトでセキュアです。このデフォルト設定を変更するには、source_variablesovirt_insecure のキーを true に設定します。これは、/api/v2/inventory_sources/N/ エンドポイントにあるインベントリーソースの API 詳細からのみ使用できます。

14.4.7.11. Red Hat Ansible Automation Platform

Automation Controller をソースとするインベントリーを設定するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースにするインベントリー名を選択し、Sources タブをクリックします。
  3. Create source をクリックします。
  4. Create source ページで、Source リストから Red Hat Ansible Automation Platform を選択します。
  5. Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。

    • オプション: Credential: 既存の Red Hat Ansible Automation Platform 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
  6. オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
  7. Source Variables フィールドを使用して、Source Variables インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、Controller インベントリープラグイン を参照してください。これには、Red Hat カスタマーのログインが必要です。
14.4.7.12. Terraform State

このインベントリーソースは、cloud.terraform コレクションの terraform_state インベントリープラグインを使用します。このプラグインは、Terraform の状態ファイルを解析し、AWS EC2、GCE、および Microsoft Azure インスタンスのホストを追加します。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. Projects ページで、Create project をクリックして、Create project ウィンドウを起動します。

  3. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  4. ソースを追加するインベントリーを選択します。
  5. Sources タブで、Create source をクリックします。
  6. Source メニューから、Terraform State を選択します。

    • Create source ウィンドウが展開され、任意指定の Credential フィールドが表示されます。

      既存の Terraform バックエンド設定の認証情報を選択します。詳細は、Terraform バックエンド設定 を参照してください。

  7. Overwrite および Update on launch オプションを有効にします。
  8. Source variables フィールドを使用して、terraform_state インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、terraform_state ファイルを参照してください。

    Terraform State インベントリープラグインには、backend_type 変数が必要です。これは、Terraform バックエンドの認証情報 で設定するリモートバックエンドと同じものである必要があります。以下は Amazon S3 バックエンドの例です。

    backend_type: s3
  9. Terraform バイナリーがある Execution environment を選択します。これは、インベントリープラグインが Terraform 状態ファイルからインベントリーデータを読み取る Terraform コマンドを実行するために必要です。
重要

Ansible Automation Platform インベントリーの Terraform プロバイダーは、Terraform によって管理されます。Ansible Automation Platform で編集しないでください。Terraform デプロイメントにドリフトが生じる可能性があるためです。

14.4.7.13. OpenShift Virtualization

このインベントリーソースは、Red Hat OpenShift Container Platform Virtualization をデプロイできるクラスターを使用します。Red Hat OpenShift Container Platform Virtualization を設定するには、特定の namespace にデプロイされた仮想マシンと、OpenShift or Kubernetes API Bearer Token 認証情報が必要です。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. ソースを追加するインベントリーを選択します。
  3. Sources タブで、Add source をクリックします。
  4. Source メニューから OpenShift Virtualization を選択します。

    • Add new source ウィンドウが展開され、必須の Credential フィールドが表示されます。

      既存の Kubernetes API Bearer Token 認証情報から選択します。詳細は、OpenShift or Kubernetes API Bearer Token 認証情報タイプ を参照してください。この例では、cmv2.engineering.redhat.com の認証情報を使用します。

  5. ソースの追加 の手順で説明されているように、必要に応じて VerbosityHost FilterEnabled Variable/ValueUpdate options を指定できます。
  6. Source Variables フィールドを使用して、kubernetes インベントリープラグインによって使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、kubevirt.core.kubevirt インベントリーソース のドキュメントを参照してください。

    次の例では、connections 変数を使用して、クラスター内の特定 namespace へのアクセスを指定します。

    ---
    connections:
    - namespaces:
      - hao-test
  7. Save をクリックし、Sync をクリックしてインベントリーを同期します。
14.4.7.14. カスタムインベントリープラグインの使用

ここでは、servicenow.itsm コレクションインベントリープラグインを使用して、Ansible Automation Platform でインベントリーを同期する方法を説明します。

手順

  1. 次のファイルを含むソースコントロール Git リポジトリーを使用してプロジェクトを作成し、同期します。

    >> requirements.yml
    ---
    collections: - name: servicenow.itsm
    
    
    >> inventories/myinventory.now.yml
    # Create a file following the example below. It must have a configuration file extension ending in either "now.yml" or "now.yaml".
    plugin: servicenow.itsm.now
    query:
    - os: = Linux Red Hat
    - os: = Windows XP
    keyed_groups:
    - key: os
      prefix: os
    注記

    servicenow.itsm.now プラグインの使用と設定に関する詳細なガイダンスは、公式の Ansible ドキュメント を参照してください。

  2. ソースを Sourced from a Project に設定し、新しいプロジェクトを選択し、インベントリーファイルセクションで /(project root) を選択して、インベントリーを作成します。
  3. インベントリー内のソースを同期します。
14.4.7.15. 以前のインベントリースクリプトのエクスポート

カスタムインベントリースクリプト API が削除されたにもかかわらず、スクリプトは引き続きデータベースに保存されます。次のコマンドを使用して、後でソースコントロールにチェックインするのに適した形式で、データベースからスクリプトを回復してください。

以下のコマンドを使用します。

$ awx-manage export_custom_scripts --filename=my_scripts.tar

Dump of old custom inventory scripts at my_scripts.tar

出力を活用します。

$ mkdir my_scripts
$ tar -xf my_scripts.tar -C my_scripts

スクリプトの名前の形式は、<pk>_ <name> です。これは、プロジェクトフォルダーに使用される命名スキームです。

$ ls my_scripts
10inventory_script_rawhook _19 _30inventory_script_listenhospital _11inventory_script_upperorder _1inventory_script_commercialinternet45 _4inventory_script_whitestring _12inventory_script_eastplant _22inventory_script_pinexchange _5inventory_script_literaturepossession _13inventory_script_governmentculture _23inventory_script_brainluck _6inventory_script_opportunitytelephone _14inventory_script_bottomguess _25inventory_script_buyerleague _7inventory_script_letjury _15inventory_script_wallisland _26inventory_script_lifesport _8random_inventory_script
16inventory_script_wallisland _27inventory_script_exchangesomewhere _9random_inventory_script _17inventory_script_bidstory            _28inventory_script_boxchild _18p                                    _29__inventory_script_wearstress

各ファイルにはスクリプトが含まれています。スクリプトは bash/python/ruby/more であるため、拡張子は含まれません。これらはすべて直接実行可能です。スクリプトを実行すると、インベントリーデータがダンプされます。

$ ./my_scripts/11__inventory_script_upperorder {"group\ud801\udcb0\uc20e\u7b0e\ud81c\udfeb\ub12b\ub4d0\u9ac6\ud81e\udf07\u6ff9\uc17b": {"hosts":
["host_\ud821\udcad\u68b6\u7a51\u93b4\u69cf\uc3c2\ud81f\uddbe\ud820\udc92\u3143\u62c7",
"host_\u6057\u3985\u1f60\ufefb\u1b22\ubd2d\ua90c\ud81a\udc69\u1344\u9d15",
"host_\u78a0\ud820\udef3\u925e\u69da\ua549\ud80c\ude7e\ud81e\udc91\ud808\uddd1\u57d6\ud801\ude57",
"host_\ud83a\udc2d\ud7f7\ua18a\u779a\ud800\udf8b\u7903\ud820\udead\u4154\ud808\ude15\u9711",
"host_\u18a1\u9d6f\u08ac\u74c2\u54e2\u740e\u5f02\ud81d\uddee\ufbd6\u4506"], "vars": {"ansible_host": "127.0.0.1", "ansible_connection":
"local"}}}

ansible-inventory を使用して機能を確認できます。これにより、同じデータが得られますが、再フォーマットされます。

$ ansible-inventory -i ./my_scripts/_11__inventory_script_upperorder --list --export

前述の例では、my_scriptscd で移動して git init コマンドを発行し、必要なスクリプトを追加してソースコントロールにプッシュし、ユーザーインターフェイスで SCM インベントリーソースを作成できます。

カスタムインベントリースクリプトの同期または使用の詳細は、自動化実行の設定インベントリーファイルのインポート を参照してください。

14.5. 完了したジョブの表示

インベントリーを使用してジョブを実行する場合は、インベントリーの Jobs タブでそのジョブの詳細を表示し、Expanded をクリックして各ジョブの詳細を表示できます。

14.6. アドホックコマンドの実行

アドホック とは、オーケストレーション言語 (/usr/bin/ansible-playbook) ではなく、/usr/bin/ansible を使用して Ansible でクイックコマンドを実行することを指します。アドホックコマンドの例としては、インフラストラクチャー内の 50 台のマシンを再起動することが考えられます。アドホックで可能なことは、Playbook に記述して実現できます。Playbook では、他の多くの操作を結合することもできます。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInventories を選択します。
  2. アドホックコマンドを実行するインベントリー名を選択します。
  3. Hosts または Groups タブからインベントリーソースを選択します。インベントリーソースは、単一のグループまたはホスト、選択した多数のホスト、または選択した多数のグループにすることができます。
  4. Run Command をクリックします。コマンドの実行ウィンドウが開きます。
  5. 以下の情報を入力します。

    • モジュール: コマンドの実行での使用をサポートしているモジュールのいずれかを選択します。

      Expand

      command

      apt_repository

      mount

      win_service

      shell

      apt_rpm

      ping

      win_updates

      yum

      service

      SELinux

      win_group

      apt

      group

      setup

      win_user

      apt_key

      user

      win_ping

      win_user

    • Arguments: 選択したモジュールで使用する引数を指定します。
    • Limit: インベントリー内のターゲットホストに使用される制限を入力します。インベントリー内のすべてのホストをターゲットにするには、all または * を入力するか、フィールドを空白のままにします。これには、起動ボタンをクリックする前に、先ほどのビューで選択した内容が自動的に入力されます。
    • Machine Credential: リモートホストにアクセスしてコマンドを実行するときに使用する認証情報を選択します。Ansible がリモートホストにログインするために必要なユーザー名と SSH キーまたはパスワードを含む認証情報を選択します。
    • Verbosity: 標準出力の詳細レベルを選択します。
    • Forks: 必要な場合には、コマンドの実行中に使用する並列または同時プロセスの数を選択します。
    • Show Changes: 標準出力での Ansible の変更の表示を有効にする場合に選択します。デフォルトは OFF です。
    • Enable Privilege Escalation: 有効にすると、Playbook は管理者権限で実行されます。これは、ansible コマンドで --become オプションを指定することと同じです。
    • 追加の変数: このインベントリーの実行時に適用される追加のコマンドライン変数を提供します。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。
  6. Next をクリックして、アドホックコマンドを実行する実行環境を選択します。
  7. Next をクリックして、使用する認証情報を選択します。
  8. Launch をクリックします。結果は、モジュールのジョブウィンドウの Output タブに表示されます。

第15章 サポートされているインベントリープラグインテンプレート

4.x にアップグレードすると、既存の設定は、下位互換性のあるインベントリー出力を生成する新しい形式に移行されます。以下のテンプレートを使用すると、インベントリーを新しいスタイルのインベントリープラグイン出力に移行するのに役に立ちます。

15.1. Amazon Web Services EC2

compose:
  ansible_host: public_ip_address
  ec2_account_id: owner_id
  ec2_ami_launch_index: ami_launch_index | string
  ec2_architecture: architecture
  ec2_block_devices: dict(block_device_mappings | map(attribute='device_name') | list | zip(block_device_mappings | map(attribute='ebs.volume_id') | list))
  ec2_client_token: client_token
  ec2_dns_name: public_dns_name
  ec2_ebs_optimized: ebs_optimized
  ec2_eventsSet: events | default("")
  ec2_group_name: placement.group_name
  ec2_hypervisor: hypervisor
  ec2_id: instance_id
  ec2_image_id: image_id
  ec2_instance_profile: iam_instance_profile | default("")
  ec2_instance_type: instance_type
  ec2_ip_address: public_ip_address
  ec2_kernel: kernel_id | default("")
  ec2_key_name: key_name
  ec2_launch_time: launch_time | regex_replace(" ", "T") | regex_replace("(\+)(\d\d):(\d)(\d)$", ".\g<2>\g<3>Z")
  ec2_monitored: monitoring.state in ['enabled', 'pending']
  ec2_monitoring_state: monitoring.state
  ec2_persistent: persistent | default(false)
  ec2_placement: placement.availability_zone
  ec2_platform: platform | default("")
  ec2_private_dns_name: private_dns_name
  ec2_private_ip_address: private_ip_address
  ec2_public_dns_name: public_dns_name
  ec2_ramdisk: ramdisk_id | default("")
  ec2_reason: state_transition_reason
  ec2_region: placement.region
  ec2_requester_id: requester_id | default("")
  ec2_root_device_name: root_device_name
  ec2_root_device_type: root_device_type
  ec2_security_group_ids: security_groups | map(attribute='group_id') | list |  join(',')
  ec2_security_group_names: security_groups | map(attribute='group_name') | list |  join(',')
  ec2_sourceDestCheck: source_dest_check | default(false) | lower | string
  ec2_spot_instance_request_id: spot_instance_request_id | default("")
  ec2_state: state.name
  ec2_state_code: state.code
  ec2_state_reason: state_reason.message if state_reason is defined else ""
  ec2_subnet_id: subnet_id | default("")
  ec2_tag_Name: tags.Name
  ec2_virtualization_type: virtualization_type
  ec2_vpc_id: vpc_id | default("")
filters:
  instance-state-name:
  - running
groups:
  ec2: true
hostnames:
  - network-interface.addresses.association.public-ip
  - dns-name
  - private-dns-name
keyed_groups:
  - key: image_id | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: images
    prefix: ''
    separator: ''
  - key: placement.availability_zone
    parent_group: zones
    prefix: ''
    separator: ''
  - key: ec2_account_id | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: accounts
    prefix: ''
    separator: ''
  - key: ec2_state | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: instance_states
    prefix: instance_state
  - key: platform | default("undefined") | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: platforms
    prefix: platform
  - key: instance_type | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: types
    prefix: type
  - key: key_name | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: keys
    prefix: key
  - key: placement.region
    parent_group: regions
    prefix: ''
    separator: ''
  - key: security_groups | map(attribute="group_name") | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list
    parent_group: security_groups
    prefix: security_group
  - key: dict(tags.keys() | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list | zip(tags.values()
      | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list))
    parent_group: tags
    prefix: tag
  - key: tags.keys() | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list
    parent_group: tags
    prefix: tag
  - key: vpc_id | regex_replace("[^A-Za-z0-9\_]", "_")
    parent_group: vpcs
    prefix: vpc_id
  - key: placement.availability_zone
    parent_group: '{{ placement.region }}'
    prefix: ''
    separator: ''
plugin: amazon.aws.aws_ec2
use_contrib_script_compatible_sanitization: true

15.2. Google Compute Engine

auth_kind: serviceaccount
compose:
  ansible_ssh_host: networkInterfaces[0].accessConfigs[0].natIP | default(networkInterfaces[0].networkIP)
  gce_description: description if description else None
  gce_id: id
  gce_image: image
  gce_machine_type: machineType
  gce_metadata: metadata.get("items", []) | items2dict(key_name="key", value_name="value")
  gce_name: name
  gce_network: networkInterfaces[0].network.name
  gce_private_ip: networkInterfaces[0].networkIP
  gce_public_ip: networkInterfaces[0].accessConfigs[0].natIP | default(None)
  gce_status: status
  gce_subnetwork: networkInterfaces[0].subnetwork.name
  gce_tags: tags.get("items", [])
  gce_zone: zone
hostnames:
- name
- public_ip
- private_ip
keyed_groups:
- key: gce_subnetwork
  prefix: network
- key: gce_private_ip
  prefix: ''
  separator: ''
- key: gce_public_ip
  prefix: ''
  separator: ''
- key: machineType
  prefix: ''
  separator: ''
- key: zone
  prefix: ''
  separator: ''
- key: gce_tags
  prefix: tag
- key: status | lower
  prefix: status
- key: image
  prefix: ''
  separator: ''
plugin: google.cloud.gcp_compute
retrieve_image_info: true
use_contrib_script_compatible_sanitization: true

15.3. Microsoft Azure Resource Manager

conditional_groups:
  azure: true
default_host_filters: []
fail_on_template_errors: false
hostvar_expressions:
  computer_name: name
  private_ip: private_ipv4_addresses[0] if private_ipv4_addresses else None
  provisioning_state: provisioning_state | title
  public_ip: public_ipv4_addresses[0] if public_ipv4_addresses else None
  public_ip_id: public_ip_id if public_ip_id is defined else None
  public_ip_name: public_ip_name if public_ip_name is defined else None
  tags: tags if tags else None
  type: resource_type
keyed_groups:
- key: location
  prefix: ''
  separator: ''
- key: tags.keys() | list if tags else []
  prefix: ''
  separator: ''
- key: security_group
  prefix: ''
  separator: ''
- key: resource_group
  prefix: ''
  separator: ''
- key: os_disk.operating_system_type
  prefix: ''
  separator: ''
- key: dict(tags.keys() | map("regex_replace", "^(.*)$", "\1_") | list | zip(tags.values() | list)) if tags else []
  prefix: ''
  separator: ''
plain_host_names: true
plugin: azure.azcollection.azure_rm
use_contrib_script_compatible_sanitization: true

15.4. VMware vCenter

compose:
  ansible_host: guest.ipAddress
  ansible_ssh_host: guest.ipAddress
  ansible_uuid: 99999999 | random | to_uuid
  availablefield: availableField
  configissue: configIssue
  configstatus: configStatus
  customvalue: customValue
  effectiverole: effectiveRole
  guestheartbeatstatus: guestHeartbeatStatus
  layoutex: layoutEx
  overallstatus: overallStatus
  parentvapp: parentVApp
  recenttask: recentTask
  resourcepool: resourcePool
  rootsnapshot: rootSnapshot
  triggeredalarmstate: triggeredAlarmState
filters:
- runtime.powerState == "poweredOn"
keyed_groups:
- key: config.guestId
  prefix: ''
  separator: ''
- key: '"templates" if config.template else "guests"'
  prefix: ''
  separator: ''
plugin: community.vmware.vmware_vm_inventory
properties:
- availableField
- configIssue
- configStatus
- customValue
- datastore
- effectiveRole
- guestHeartbeatStatus
- layout
- layoutEx
- name
- network
- overallStatus
- parentVApp
- permission
- recentTask
- resourcePool
- rootSnapshot
- snapshot
- triggeredAlarmState
- value
- capability
- config
- guest
- runtime
- storage
- summary
strict: false
with_nested_properties: true

15.5. VMWare ESXI

compose:
  ansible_host: guest.ipAddress
  ansible_ssh_host: guest.ipAddress
  ansible_uuid: 99999999 | random | to_uuid
  availablefield: availableField
  configissue: configIssue
  configstatus: configStatus
  customvalue: customValue
  effectiverole: effectiveRole
  guestheartbeatstatus: guestHeartbeatStatus
  layoutex: layoutEx
  overallstatus: overallStatus
  parentvapp: parentVApp
  recenttask: recentTask
  resourcepool: resourcePool
  rootsnapshot: rootSnapshot
  triggeredalarmstate: triggeredAlarmState
filters:
  - runtime.powerState == "poweredOn"
keyed_groups:
  - key: config.guestId
    prefix: ""
    separator: ""
  - key: '"templates" if config.template else "guests"'
    prefix: ""
    separator: ""
plugin: vmware.vmware.vms
properties:
  - availableField
  - configIssue
  - configStatus
  - customValue
  - datastore
  - effectiveRole
  - guestHeartbeatStatus
  - layout
  - layoutEx
  - name
  - network
  - overallStatus
  - parentVApp
  - permission
  - recentTask
  - resourcePool
  - rootSnapshot
  - snapshot
  - triggeredAlarmState
  - value
  - capability
  - config
  - guest
  - runtime
  - storage
  - summary
strict: false
flatten_nested_properties: true

15.6. Red Hat Satellite 6

group_prefix: foreman_
keyed_groups:
- key: foreman['environment_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_') | regex_replace('none', '')
  prefix: foreman_environment_
  separator: ''
- key: foreman['location_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
  prefix: foreman_location_
  separator: ''
- key: foreman['organization_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
  prefix: foreman_organization_
  separator: ''
- key: foreman['content_facet_attributes']['lifecycle_environment_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
  prefix: foreman_lifecycle_environment_
  separator: ''
- key: foreman['content_facet_attributes']['content_view_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
  prefix: foreman_content_view_
  separator: ''
legacy_hostvars: true
plugin: theforeman.foreman.foreman
validate_certs: false
want_facts: true
want_hostcollections: false
want_params: true

15.7. OpenStack

expand_hostvars: true
fail_on_errors: true
inventory_hostname: uuid
plugin: openstack.cloud.openstack

15.8. Red Hat Virtualization

compose:
  ansible_host: (devices.values() | list)[0][0] if devices else None
keyed_groups:
- key: cluster
  prefix: cluster
  separator: _
- key: status
  prefix: status
  separator: _
- key: tags
  prefix: tag
  separator: _
ovirt_hostname_preference:
- name
- fqdn
ovirt_insecure: false
plugin: ovirt.ovirt.ovirt

15.9. Red Hat Ansible Automation Platform

include_metadata: true
inventory_id: <inventory_id or url_quoted_named_url>
plugin: awx.awx.tower
validate_certs: <true or false>

第16章 ホスト

ホストは、Ansible Automation Platform によって管理されるシステムです。管理対象システムには、物理サーバー、仮想サーバー、クラウドベースのサーバー、またはその他のデバイスが含まれる場合があります。

通常、ホストはオペレーティングシステムのインスタンスです。

ホストはインベントリーにグループ化され、“ノード” と呼ばれることもあります。

Ansible は、インベントリーと呼ばれるリストまたはリストのグループを使用して、インフラストラクチャー内の複数の管理対象ノードまたは “ホスト” に対して同時に機能します。

インベントリーを定義したら、パターンを使用して、Ansible の実行対象のホストまたはグループを選択します。

16.1. ホストの作成

新しいホストを作成します。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureHosts を選択します。
  2. Create host をクリックします。
  3. Create Host ページで次の情報を入力します。

    • Name: ホストの名前を入力します。
    • (オプション) Description: ホストの説明を入力します。
    • Inventory: このホストが属するインベントリーを選択します。
    • Variables: ホストに関連付けるインベントリーファイル変数を入力します。
  4. Create host をクリックして変更を保存します。

16.2. ホストの詳細の表示

ジョブ実行のホストの詳細を表示します。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureHosts を選択します。Hosts ページには、最近のジョブ実行によって影響を受けたホストに関する次の情報が表示されます。
  2. 特定のホストを選択すると、そのホストの Details ページが開き、次の情報が表示されます。

    • ホストの名前 (Name)。
    • そのホストに関連付けられたインベントリー (Inventory)。このインベントリーを選択すると、インベントリーの詳細が表示されます。
    • ホストの作成日と作成者 (Created)。作成者を選択すると、作成者の詳細が表示されます。
    • ホストの最終変更日 (Last modified)。作成者を選択すると、作成者の詳細が表示されます。
    • ホストに関連付けられた変数 (Variables)。変数は YAML または JSON 形式で表示できます。
  3. Edit host をクリックして、ホストの詳細を編集します。

    • ホストに関連付けられたファクトを表示するには、Facts タブを選択します。
    • ホストに関連付けられたグループを表示するには、Groups タブを選択します。

      • グループをホストに関連付けるには、Associate groups をクリックします。
    • ホスト上で実行されたジョブを表示するには、Jobs タブを選択します。

      • ジョブの詳細を表示するには、 Expand アイコンをクリックします。

        ホストに関連付けられたジョブの詳細

第17章 インスタンスグループの管理

インスタンスグループを使用すると、クラスター環境でインスタンスをグループ化できます。ポリシーは、インスタンスグループがどのように動作し、ジョブがどのように実行されるかを規定します。次のビューには、ポリシーアルゴリズムに基づいた容量レベルが表示されます。

インスタンスグループのリストビュー

詳細は、

17.1. インスタンスグループの作成

新しいインスタンスグループを作成するには、次の手順を実行します。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureInstance Groups を選択します。
  2. Create group をクリックし、リストから Create instance group を選択します。
  3. 以下のフィールドに該当する詳細を入力します。

    • Name: 名前は一意でなければならず、"controller" という名前に指定しないようにしてください。
    • Policy instance minimum: 新規インスタンスがオンラインになると、このグループに自動的に最小限割り当てられるインスタンス数を入力します。
    • *Policy instance percentage: スライダーを使用して、新規インスタンスがオンラインになると、このグループに自動的に最小限割り当てられるインスタンスの割合を選択します。

      注記

      新しいインスタンスグループを作成する場合、ポリシーインスタンスフィールドは必要ありません。値を指定しない場合、Policy instance minimumPolicy instance percentage は、デフォルトで 0 に設定されます。

    • Max concurrent jobs: 特定のジョブに対して実行できるフォークの最大数を指定します。
    • Max forks: 特定のジョブに対して実行できる同時ジョブの最大数を指定します。

      注記

      Max concurrent jobsMax forks のデフォルト値 0 は、制限がないことを示します。詳細は、インスタンスグループの容量制限 を参照してください。

  4. Create Instance Group をクリックするか、既存のインスタンスグループを編集した場合は Save Instance Group をクリックします。

次のステップ

インスタンスグループが正常に作成されると、新しく作成されたインスタンスグループの Details タブでインスタンスグループ情報を確認および編集できるようになります。

Instances を編集し、このインスタンスグループに関連付けられた Jobs を確認することもできます。

正常に作成されたインスタンスグループ

17.1.1. インスタンスグループへのインスタンスの関連付け

手順

  1. インスタンスグループの Details ページで、Instances タブを選択します。
  2. Associate instance をクリックします。
  3. リストから 1 つ以上の使用可能なインスタンスの横にあるチェックボックスをクリックして、インスタンスグループに関連付けるインスタンスを選択し、Confirm をクリックします。

17.1.2. インスタンスグループに関連付けられたジョブの表示

手順

  1. Instance Group 画面の Jobs タブをクリックします。
  2. ジョブの横にある矢印 Arrow アイコンをクリックしてビューを展開し、各ジョブの詳細を表示します。

    各ジョブには次の詳細が表示されます。

    • ジョブステータス
    • ID と名前
    • ジョブの種類
    • 開始時間および終了時間
    • ジョブを開始したユーザー、および関連付けられた該当するリソース (テンプレート、インベントリー、プロジェクト、実行環境など)

第18章 インスタンスとコンテナーグループ

Automation Controller を使用すると、クラスターのメンバーで直接実行される Ansible Playbook を通じて、または必要なサービスアカウントがプロビジョニングされた OpenShift クラスターの namespace で実行される Ansible Playbook を通じてジョブを実行できます。これをコンテナーグループと呼びます。

コンテナーグループ内のジョブは、Playbook ごとに必要な場合にのみ実行できます。詳細は、コンテナーグループ を参照してください。

実行環境については、実行環境 を参照してください。

18.1. インスタンスグループ

インスタンスは 1 つ以上のインスタンスグループにグループ化できます。インスタンスグループは、以下にリストされているリソースの 1 つ以上に割り当てることができます。

  • 組織
  • インベントリー
  • ジョブテンプレート

いずれかのリソースに関連付けられたジョブが実行されると、そのジョブは当該リソースに関連付けられたインスタンスグループに割り当てられます。実行プロセス中、ジョブテンプレートに関連付けられたインスタンスグループは、インベントリーに関連付けられたインスタンスグループよりも先にチェックされます。インベントリーに関連付けられたインスタンスグループは、組織に関連付けられたインスタンスグループよりも先にチェックされます。したがって、3 つのリソースに対するインスタンスグループの割り当てにより、以下の階層が形成されます。

Job Template > Inventory > Organization

インスタンスグループを使用する場合は、次の点を考慮してください。

  • これらのグループ内に、他のグループおよびグループインスタンスを定義できます。これらのグループには、instance_group_ という接頭辞を付ける必要があります。インスタンスは、他の instance_group_ グループと共に、automationcontroller または execution_nodes グループに存在する必要があります。クラスター化されたセットアップでは、automationcontroller グループに少なくとも 1 つのインスタンスが存在する必要があります。これは、API インスタンスグループで controlplane として表示されます。詳細とシナリオ例は、automationcontroller のグループポリシー を参照してください。
  • controlplane インスタンスグループを変更することはできません。変更しようとすると、すべてのユーザーに対してパーミッション拒否エラーが発生します。

    したがって、controlplaneInstances タブでは、Disassociate オプションを使用できません。

  • default API インスタンスグループは、ジョブを実行可能なすべてのノードで自動的に作成されます。これは他のインスタンスグループと同様ですが、特定のインスタンスグループが特定のリソースに関連付けられていない場合、ジョブの実行は常にデフォルトのインスタンスグループにフォールバックします。デフォルトのインスタンスグループは常に存在し、削除したり名前を変更したりすることはできません。
  • instance_group_default という名前のグループは作成しないでください。
  • インスタンスにグループ名と同じ名前を指定しないでください。

18.1.1. automationcontroller のグループポリシー

ノードを定義する際には、以下の基準を使用します。

  • automationcontroller グループ内のノードは、node_type ホスト変数を hybrid (デフォルト) または control と定義できます。
  • execution_nodes グループ内のノードは、node_type ホスト変数を execution (デフォルト) または hop と定義できます。

インベントリーファイルでカスタムグループを定義するには、instance_group_* を使用してグループに名前を付けます。* は API のグループの名前になります。インストールの完了後に、API でカスタムインスタンスグループを作成することもできます。

現在の動作では、instance_group_* のメンバーが automationcontroller または execution_nodes グループのメンバーであることを想定しています。

例18.1 インスタンスグループの定義

[automationcontroller]
126-addr.tatu.home ansible_host=192.168.111.126  node_type=control

[automationcontroller:vars]
peers=execution_nodes

[execution_nodes]

[instance_group_test]
110-addr.tatu.home ansible_host=192.168.111.110 receptor_listener_port=8928

インストールプログラムを実行すると、次のエラーが表示されます。

TASK [ansible.automation_platform_installer.check_config_static : Validate mesh topology] ***
fatal: [126-addr.tatu.home -> localhost]: FAILED! => {"msg": "The host '110-addr.tatu.home' is not present in either [automationcontroller] or [execution_nodes]"}

これを修正するには、次のように、110-addr.tatu.home というマシンを execution_node グループに移動します。

[automationcontroller]
126-addr.tatu.home ansible_host=192.168.111.126  node_type=control

[automationcontroller:vars]
peers=execution_nodes

[execution_nodes]
110-addr.tatu.home ansible_host=192.168.111.110 receptor_listener_port=8928

[instance_group_test]
110-addr.tatu.home

その結果、以下のようになります。

TASK [ansible.automation_platform_installer.check_config_static : Validate mesh topology] ***
ok: [126-addr.tatu.home -> localhost] => {"changed": false, "mesh": {"110-addr.tatu.home": {"node_type": "execution", "peers": [], "receptor_control_filename": "receptor.sock", "receptor_control_service_name": "control", "receptor_listener": true, "receptor_listener_port": 8928, "receptor_listener_protocol": "tcp", "receptor_log_level": "info"}, "126-addr.tatu.home": {"node_type": "control", "peers": ["110-addr.tatu.home"], "receptor_control_filename": "receptor.sock", "receptor_control_service_name": "control", "receptor_listener": false, "receptor_listener_port": 27199, "receptor_listener_protocol": "tcp", "receptor_log_level": "info"}}}

Automation Controller 4.0 以前からアップグレードすると、レガシーの instance_group_ メンバーに awx コードがインストールされている可能性があります。これにより、ノードが automationcontroller グループに配置されます。

18.1.2. API からのインスタンスグループの設定

インスタンスグループは、システム管理者として /api/v2/instance_groups に POST 要求を出すことで作成できます。

インスタンスグループを作成したら、以下を使用してインスタンスをインスタンスグループに関連付けることができます。

HTTP POST /api/v2/instance_groups/x/instances/ {'id': y}`

インスタンスグループに追加したインスタンスは、グループのワークキューをリッスンするように自動で再設定されます。詳細は、インスタンスグループのポリシー を参照してください。

18.1.3. インスタンスグループのポリシー

ポリシーを定義することにより、オンラインになると自動的にインスタンスグループに参加するように Automation Controller インスタンスを設定できます。これらのポリシーは、新しいインスタンスがオンラインになるたびに評価されます。

インスタンスグループポリシーは、Instance Group の次の 3 つの任意フィールドにより制御されます。

  • policy_instance_percentage: これは、0 - 100 の間の数字で指定します。これにより、指定した割合のアクティブな Automation Controller インスタンスがこのインスタンスグループに確実に追加されます。新しいインスタンスがオンラインになると、インスタンスの総数に対してこのグループのインスタンス数が指定の割合より少ない場合には、指定の割合の条件を満たすまで、新しいインスタンスが追加されます。
  • policy_instance_minimum: このポリシーは、インスタンスグループ内に保持するよう試行する最小インスタンス数を指定します。利用可能なインスタンスの数がこの最小数よりも少ない場合、すべてのインスタンスがこのインスタンスグループに配置されます。
  • policy_instance_list: これは、このインスタンスグループに常に含めるインスタンス名の固定リストです。

Automation Controller ユーザーインターフェイス (UI) の Instance Groups リストビューには、インスタンスグループポリシーをもとにした各インスタンスグループのキャパシティーレベルの概要が表示されます。

Instance Groups のリストビュー

関連情報

詳細は、インスタンスグループの管理 セクションを参照してください。

18.1.4. 主なポリシーの考慮事項

ポリシーに関して以下の点を考慮してください。

  • policy_instance_percentagepolicy_instance_minimum は、どちらも最小割り当てレベルを設定します。グループに割り当てるインスタンスの数が多いルールが有効になります。

    たとえば、policy_instance_percentage が 50%、policy_instance_minimum が 2 の場合、6 つのインスタンスを起動すると、そのうち 3 つがインスタンスグループに割り当てられます。

    クラスター内のインスタンス総数を 2 に減らすと、policy_instance_minimum を満たすように、2 つのインスタンスがいずれもインスタンスグループに割り当てられます。こうすることで、利用可能なリソースの制限に合わせて、低い値を設定できます。

  • ポリシーは、インスタンスが複数のインスタンスグループに割り当てられないように自発的に規制するわけではありませんが、割合が合計で 100 になるように指定すると、複数のインスタンスグループに割り当てないようにできます。

    4 つのインスタンスグループがある場合、各インスタンスグループに割合の値として 25 を割り当てると、インスタンスはグループ間で重複することなく分散されます。

18.1.5. 特定グループへのインスタンスの手動ピニング

インスタンスが特別で、特定のインスタンスグループだけに割り当てる必要があり、"percentage" または "minimum" のポリシーで他のグループに自動的に参加させない場合には、以下を行います。

手順

  1. インスタンスを 1 つ以上のインスタンスグループの policy_instance_list に追加します。
  2. インスタンスの managed_by_policy プロパティーを False に更新します。

これにより、インスタンスが percentage と minimum ポリシーに基づいて他のグループに自動的に追加されるのを防ぎます。当該インスタンスは、手動で割り当てたグループにのみ属します。

HTTP PATCH /api/v2/instance_groups/N/
{
"policy_instance_list": ["special-instance"]
}
HTTP PATCH /api/v2/instances/X/
{
"managed_by_policy": False
}

18.1.6. ジョブランタイムの動作

インスタンスグループに関連付けられたジョブを実行する場合は、次の動作に注意してください。

  • クラスターを個別のインスタンスグループに分割した場合、その動作はクラスター全体の動作と同様になります。
  • 2 つのインスタンスを 1 つのグループに割り当てた場合、いずれのインスタンスも同じグループ内の他のインスタンスと同様の確率でジョブを受け取ります。
  • Automation Controller インスタンスがオンラインになると、システムの作業容量が実質的に拡張されます。
  • これらのインスタンスをインスタンスグループに配置すると、そのグループの容量も拡張されます。
  • 複数のグループのメンバーであるインスタンスが作業を実行している場合、インスタンスがメンバーとなっているすべてのグループから容量が削減されます。
  • インスタンスのプロビジョニングを解除すると、そのインスタンスが割り当てられていたクラスターから容量が削除されます。詳細は、インスタンスグループのプロビジョニング解除 セクションを参照してください。
注記

すべてのインスタンスを同じ容量でプロビジョニングする必要はありません。

18.1.7. ジョブ実行場所の制御

インスタンスグループをジョブテンプレート、インベントリー、または組織に関連付けた場合、そのジョブテンプレートから実行したジョブはデフォルトの動作の対象になりません。つまり、これら 3 つのリソースに関連付けられたインスタンスグループ内のすべてのインスタンスが容量不足の場合、容量が利用可能になるまでジョブが保留状態になります。

ジョブ送信先のインスタンスグループを決定する際の優先順位は、以下のとおりです。

  1. ジョブテンプレート
  2. インベントリー
  3. 組織 (プロジェクトの形式)

インスタンスグループをジョブテンプレートに関連付け、すべてのインスタンスグループが容量に達している場合、ジョブはインベントリーで指定したインスタンスグループに送信され、次に組織で指定したインスタンスグループに送信されます。リソースが利用可能な場合、優先順位の高いグループから順にジョブを実行する必要があります。

Playbook で定義されたカスタムインスタンスグループなどのリソースに、グローバルの default グループを関連付けることもできます。これを使用して、ジョブテンプレートまたはインベントリーで優先インスタンスグループを指定できます。一方で、容量が不足している場合には任意のインスタンスにジョブを送信できます。

  • group_a をジョブテンプレートに関連付け、default グループをそのインベントリーに関連付けると、group_a が容量不足の場合に default グループをフォールバックとして使用できるようになります。
  • さらに、インスタンスグループを 1 つのリソースに関連付けずに、別のリソースをフォールバックとして選択することもできます。たとえば、インスタンスグループをジョブテンプレートに関連付けず、インベントリーまたは組織のインスタンスグループにフォールバックさせます。

これにより、以下のことが可能になります。

  1. インスタンスグループをインベントリーに関連付けた場合 (インスタンスグループへのジョブテンプレートの割り当てを省略)、特定のインベントリーに対して Playbook を実行すると、そのインベントリーに関連付けられたグループでのみ実行されます。これは、それらのインスタンスのみが管理対象ノードへの直接リンクを有する状況で役立ちます。
  2. 管理者はインスタンスグループを組織に割り当てることができます。

    これにより、管理者はインフラストラクチャー全体をセグメント化し、他の組織のジョブ実行能力を妨げることなくジョブを実行できる容量を、各組織が確保できるようになります。

    管理者は、次のシナリオのように、各組織に複数のグループを割り当てることができます。

    • AB、および C の 3 つのインスタンスグループがあります。Org1Org2 の 2 つの組織があります。
    • 管理者は、グループ AOrg1 に、グループ BOrg2 に割り当てます。次に、必要になる可能性がある追加容量のオーバーフローとして、グループ COrg1Org2 の両方に割り当てます。
    • 組織管理者は、必要なグループにインベントリーまたはジョブテンプレートを自由に割り当てたり、組織からデフォルトの順序を継承させたりすることができます。
インスタンスグループのシナリオ

このようにリソースを配置すると、柔軟性が得られます。また、インスタンスを 1 つだけ含むインスタンスグループを作成して、Automation Controller クラスター内の特定のホストに作業を割り振ることもできます。

18.1.8. インスタンスグループの容量制限

外部ビジネスロジックにより、インスタンスグループに送信したジョブの同時実行性や、消費するフォークの最大数を制限する必要性が高まる場合があります。

従来のインスタンスおよびインスタンスグループの場合、2 つの組織が同じ基盤インスタンス上でジョブを実行できるようにしながら、各組織の同時実行ジョブの総数を制限することが推奨されます。これは、組織ごとにインスタンスグループを作成し、max_concurrent_jobs の値を割り当てることで実現できます。

Automation Controller グループの場合、Automation Controller は通常、OpenShift クラスターのリソース制限を認識しません。namespace の Pod 数に制限を設定することができます。自動スケーリングが設定されていない場合には、一度に特定の数の Pod をスケジュールするのに使用できるリソースのみに設定したりできます。この場合、max_concurrent_jobs の値を調整できます。

使用可能なもう 1 つのパラメーターは max_forks です。このパラメーターにより、インスタンスグループまたはコンテナーグループで消費される容量の上限をさらに柔軟に設定できます。このパラメーターは、さまざまなインベントリーサイズと "forks" 値を持つジョブが実行されている場合に使用できます。組織が同時に実行できるジョブの数を最大 10 個に制限し、一度に消費するフォークの数を最大 50 個に制限できます。

max_concurrent_jobs: 10
max_forks: 50

それぞれ 5 つのフォークを使用する 10 個のジョブを実行している場合、これらのジョブの 1 つがそのグループでの実行を終了する (または、容量のある別のグループでスケジュールされる) まで、11 番目のジョブは待機します。

それぞれ 20 個のフォークを使用する 2 つのジョブを実行している場合、これらのジョブの 1 つがそのグループでの実行を終了する (または、容量のある別のグループでスケジュールされる) まで、task_impact が 11 以上の 3 番目のジョブは待機します。

コンテナーグループの場合、ジョブの "forks" 値に関係なく、すべてのジョブが同じリソース要求で同じ pod_spec を使用して送信されるため、max_forks 値を使用すると便利です。デフォルトの pod_spec は、制限ではなく要求を設定します。そのため、Pod はスロットリングが適用されたりリープされたりすることなく、要求した値を超えて「バースト」できます。max_forks 値を設定することで、フォーク値の大きい多数のジョブが同時にスケジュールされ、OpenShift ノードが、要求した値よりも多くのリソースを使用して複数の Pod でオーバーサブスクライブされるという状況を防ぐことができます。

インスタンスグループ内の同時ジョブとフォークの最大値を設定するには、インスタンスグループの作成 を参照してください。

18.1.9. インスタンスグループのプロビジョニング解除

設定用 Playbook を再実行しても、インスタンスのプロビジョニングは解除されません。これは現在、インスタンスが意図的にオフラインにされたのか、障害が原因でオフラインになったのかをクラスターが識別できないためです。代わりに、Automation Controller インスタンスの全サービスをシャットダウンした後に、他のインスタンスからプロビジョニング解除ツールを実行します。

手順

  1. 次のコマンドで、インスタンスをシャットダウンするか、サービスを停止します。

    automation-controller-service stop
  2. 別のインスタンスから次のプロビジョニング解除コマンドを実行して、コントローラーのクラスターレジストリーからインスタンスを削除します。

    awx-manage deprovision_instance --hostname=<name used in inventory file>

    以下に例を示します。

awx-manage deprovision_instance --hostname=hostB

Automation Controller でインスタンスグループのプロビジョニングを解除しても、インスタンスグループは自動的にプロビジョニング解除されたり削除されたりしません (再プロビジョニングによって当該インスタンスグループが使用されなくなることはしばしばあります)。インスタンスグループは、引き続き API エンドポイントや統計監視に表示される可能性があります。次のコマンドを使用すると、これらのグループを削除できます。

awx-manage unregister_queue --queuename=<name>

インベントリーファイルのインスタンスグループからインスタンスのメンバーシップを削除し、設定用 Playbook を再実行しても、インスタンスがグループに再度追加されなくなるわけではありません。インスタンスがグループに再度追加されないようにするには、API を介してインスタンスを削除し、インベントリーファイルからも削除します。インベントリーファイルでのインスタンスグループの定義をやめることもできます。Automation Controller UI を通じてインスタンスグループのトポロジーを管理できます。UI でインスタンスグループを管理する方法の詳細は、インスタンスグループの管理 を参照してください。

注記

古いバージョンの Automation Controller (3.8.x 以前) で作成した分離インスタンスグループがあり、それらを実行ノードに移行して自動化メッシュアーキテクチャーで使用できるようにする場合は、Ansible Automation Platform Upgrade and Migration GuideMigrate isolated instances to execution nodes を参照してください。

18.2. コンテナーグループ

Ansible Automation Platform はコンテナーグループをサポートしています。そのため、Automation Controller がスタンドアロン、仮想環境、またはコンテナーとしてインストールされているかどうかに関係なく、Automation Controller でジョブを実行できます。

コンテナーグループは、仮想環境内のリソースのプールとして機能します。

OpenShift コンテナーを参照するインスタンスグループを作成できます。このインスタンスグループは、Playbook の実行期間中のみ存在する Pod として、オンデマンドでプロビジョニングされるジョブ環境です。これは一時的な実行モデルとして知られており、すべてのジョブの実行に対してクリーンな環境を確保します。

場合によっては、コンテナーグループを「常時オン」に設定することが必要な場合があります。これは、インスタンスの作成を通じて設定できます。

注記

Automation Controller 4.0 より前のバージョンからアップグレードしたコンテナーグループはデフォルトに戻り、古い Pod 定義は削除され、移行中のすべてのカスタム Pod 定義は消去されます。

実行環境はコンテナーイメージであり、仮想環境を使用しないという点で、実行環境とコンテナーグループは異なります。詳細は、実行環境 を参照してください。

18.2.1. コンテナーグループの作成

ContainerGroup は、OpenShift クラスターへの接続を可能にする認証情報が関連づけられた InstanceGroup の一種です。

前提条件

  • 起動できる namespace がある。すべてのクラスターには「デフォルト」の namespace がありますが、特定の namespace を使用することもできます。
  • この namespace で Pod を起動および管理可能なロールを持つサービスアカウントがある。詳細は、OpenShift Container Platform または Kubernetes でのサービスアカウントの作成 を参照してください。
  • プライベートレジストリーで実行環境を使用しており、Automation Controller でコンテナーレジストリー認証情報が実行環境に関連付けられている場合、サービスアカウントには、namespace でシークレットを取得、作成、削除するためのロールも必要です。これらのロールをサービスアカウントに付与しない場合は、ImagePullSecrets を事前に作成し、ContainerGroup の Pod 仕様で指定できます。この場合、実行環境にコンテナーレジストリーの認証情報を関連付けることはできません。関連付けられている場合、Automation Controller は namespace にシークレットを作成しようとします。
  • サービスアカウントに関連付けられたトークンがある。OpenShift または Kubernetes Bearer トークン。
  • クラスターに関連付けられた CA 証明書がある。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureInstance Groups を選択します。
  2. Create group をクリックし、Create container group を選択します。
  3. 新しいコンテナーグループの名前を入力し、以前に作成した認証情報を選択してコンテナーグループに関連付けます。
  4. Create container group をクリックします。
  5. Customize pod spec ボックスをオンにし、Pod spec override を編集して、前の手順で使用した namespace とサービスアカウント名を含めます。

18.2.2. OpenShift Container Platform または Kubernetes でのサービスアカウントの作成

Automation Controller を通じてコンテナーグループ内でジョブを実行するには、OpenShift クラスターまたは Kubernetes のサービスアカウントを使用します。サービスアカウントを作成すると、その認証情報が OpenShift or Kubernetes API Bearer Token 認証情報の形式で Automation Controller に提供されます。

手順

  1. サービスアカウントを作成するには、以下のサンプルのサービスアカウント (containergroup sa) をダウンロードして使用し、認証情報を取得するために必要に応じて変更します。

    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: containergroup-service-account
      namespace: containergroup-namespace
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: role-containergroup-service-account
      namespace: containergroup-namespace
    rules:
      - verbs:
          - get
          - list
          - watch
          - create
          - update
          - patch
          - delete
        apiGroups:
          - ''
        resources:
          - pods
      - verbs:
          - get
        apiGroups:
          - ''
        resources:
          - pods/log
      - verbs:
          - create
        apiGroups:
          - ''
        resources:
          - pods/attach
      - verbs:
          - get
          - create
          - delete
        apiGroups:
          - ''
        resources:
          - secrets
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: role-containergroup-service-account-binding
      namespace: containergroup-namespace
    subjects:
    - kind: ServiceAccount
      name: containergroup-service-account
      namespace: containergroup-namespace
    roleRef:
      kind: Role
      name: role-containergroup-service-account
      apiGroup: rbac.authorization.k8s.io
  2. containergroup-sa.yml から設定を適用します。

    oc apply -f containergroup-sa.yml
  3. サービスアカウントトークンを生成して API トークンを取得します。

    oc create token containergroup-service-account --duration=$((365*24))h > containergroup-sa.token
  4. CA 証明書を取得します。

    oc get secret -n openshift-ingress wildcard-tls -o jsonpath='{.data.ca\.crt}' | base64 -d > containergroup-ca.crt
  5. containergroup-sa.token および containergroup-ca.crt の内容を使用して、コンテナーグループに必要な OpenShift or Kubernetes API Bearer Token の情報を提供します。

コンテナーグループを作成するには、コンテナーグループで使用する OpenShift or Kubernetes API Bearer Token 認証情報を作成します。詳細は、新しい認証情報の作成 を参照してください。

18.2.3. Pod 仕様のカスタマイズ

Ansible Automation Platform は単純なデフォルトの Pod 仕様を提供しますが、デフォルトの Pod 仕様をオーバーライドするカスタム YAML または JSON ドキュメントを提供できます。このフィールドは、有効な Pod JSON または YAML として「シリアル化」できる ImagePullSecrets などのカスタムフィールドを使用します。オプションの完全なリストは、OpenShift ドキュメントの Pods and Services セクションを参照してください。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureInstance Groups を選択します。
  2. Create group をクリックし、Create container group を選択します。
  3. Customize pod spec オプションをオンにします。
  4. Pod spec override フィールドに、カスタムの Kubernetes または OpenShift Pod 仕様を入力します。

    Pod 仕様のカスタマイズ
  5. Create container group をクリックします。
注記

ジョブ起動時のイメージは、どの実行環境がジョブに関連付けられているかによって決まります。コンテナーレジストリーの認証情報を実行環境に関連付ける場合、Automation Controller はイメージをプルするために ImagePullSecret を作成しようとします。シークレットを管理するパーミッションをサービスアカウントに付与しない場合は、ImagePullSecret を事前に作成してそれを Pod 仕様で指定し、使用する実行環境から認証情報を削除する必要があります。

詳細は、Red Hat Container Registry AuthenticationAllowing Pods to Reference Images from Other Secured Registries セクションを参照してください。

コンテナーグループが正常に作成されると、新しく作成されたコンテナーグループの Details タブが表示され、そこでコンテナーグループ情報を確認および編集できます。これは、Instance Groups リストビューから Edit アイコンをクリックした場合に開くメニューと同じです。

Instances を編集し、このインスタンスグループに関連付けられた Jobs を確認することもできます。

正常に作成されたインスタンスグループ

コンテナーグループとインスタンスグループは適宜ラベル付けされます。

18.2.4. コンテナーグループ機能の検証

コンテナーのデプロイと終了を確認するには、以下を実行します。

手順

  1. モックインベントリーを作成し、Instance groups フィールドにコンテナーグループの名前を入力して、コンテナーグループをそのインベントリーに関連付けます。詳細は、新しいインベントリーの追加 を参照してください。

    テストインベントリーの作成
  2. 次の変数を使用して、インベントリーに localhost ホストを作成します。

    {'ansible_host': '127.0.0.1', 'ansible_connection': 'local'}
  3. ping または setup モジュールを使用して、ローカルホストに対してアドホックジョブを起動します。Machine Credential フィールドは必須ですが、このテストでどれを選択するかは重要ではありません。

    アドホック localhost の起動
    アドホック localhost の起動 2

Jobs 詳細ビューで、アドホックジョブの 1 つを使用してコンテナーに正常にアクセスしたことが表示されます。

OpenShift UI を使用している場合、Pod はデプロイされると表示され、終了すると非表示になります。CLI を使用して namespace で get pod 操作を実行し、同イベントの発生をリアルタイムで監視することもできます。

18.2.5. コンテナーグループジョブの表示

コンテナーグループに関連付けられたジョブを実行すると、そのジョブの詳細が Details タブに表示されます。関連付けられたコンテナーグループと起動された実行環境も表示できます。

手順

  1. ナビゲーションパネルから、Automation ExecutionJobs を選択します。
  2. コンテナーグループジョブを表示するジョブをクリックします。
  3. Details タブをクリックします。
インスタンスグループのジョブの詳細

18.2.6. Kubernetes API の障害状態

コンテナーグループを実行し、Kubernetes API がリソースクォータを超過したと応答すると、Automation Controller はジョブを保留状態にします。その他の障害の場合は、次の例のように、Error Details フィールドのトレースバックに障害の理由が表示されます。

Error creating pod: pods is forbidden: User "system: serviceaccount: aap:example" cannot create resource "pods" in API group "" in the namespace "aap"

18.2.7. コンテナーの容量制限

コンテナーの容量制限とクォータは、Kubernetes API のオブジェクトで定義します。

  • 特定の namespace 内のすべての Pod に制限を設定するには、LimitRange オブジェクトを使用します。詳細は、OpenShift ドキュメントの クォータおよび制限範囲 セクションを参照してください。
  • Automation Controller が起動する Pod 定義に制限を直接設定するには、Pod 仕様のカスタマイズ と OpenShift ドキュメントの コンピュートリソース セクションを参照してください。
注記

コンテナーグループは、通常のノードが使用する容量アルゴリズムを使用しません。ジョブテンプレートレベルでフォークの数を設定する必要があります。Automation Controller でフォークを設定すると、その設定はコンテナーに渡されます。

第19章 インスタンスによる容量の管理

自動化メッシュのスケーリングは、Red Hat Ansible Automation Platform の OpenShift デプロイメントで利用できます。UI の Instances リソースを使用して、クラスターにノードを動的に追加または削除することで可能です。インストールスクリプトを実行する必要はありません。

インスタンスは、メッシュトポロジー内のノードとして機能します。自動化メッシュを使用すると、自動化のフットプリントを拡張できます。ジョブを起動する場所は、ansible-playbook が実行される場所とは異なる場合があります。

UI からインスタンスを管理するには、システム管理者またはシステム監査者の権限が必要です。

一般に、ノードのプロセッサーコア (CPU) とメモリー (RAM) が多いほど、そのノードで同時に実行するようにスケジュールできるジョブの数も多くなります。

詳細は、Automation Controller の容量決定とジョブへの影響 を参照してください。

19.1. 前提条件

自動化メッシュは、Red Hat Enterprise Linux (RHEL) 上で実行されるホップおよび実行ノードに依存します。Red Hat Ansible Automation Platform サブスクリプションにより、Ansible Automation Platform のコンポーネントの実行に使用できる 10 個の Red Hat Enterprise Linux ライセンスが付与されます。

Red Hat Enterprise Linux サブスクリプションの詳細は、Red Hat Enterprise Linux ドキュメントの システムの登録とサブスクリプションの管理 を参照してください。

次の手順では、自動化メッシュのデプロイメント用の RHEL インスタンスを準備します。

  1. Red Hat Enterprise Linux オペレーティングシステムが必要です。メッシュ内の各ノードには、静的 IP アドレス、または Ansible Automation Platform がアクセスできる解決可能な DNS ホスト名が必要です。
  2. 続行する前に、RHEL 仮想マシンの最小要件を満たしていることを確認している。詳細は、システム要件 を参照してください。
  3. 通信が必要なリモートネットワーク内に RHEL インスタンスをデプロイします。仮想マシンの作成は、Red Hat Enterprise Linux ドキュメントの 仮想マシンの作成 を参照してください。提案されたタスクを仮想マシン上で実行できるように、必ず仮想マシンの容量を十分にスケーリングしてください。

    • RHEL ISO は、access.redhat.com から入手できます。
    • RHEL クラウドイメージは、console.redhat.com の Image Builder を使用してビルドできます。

19.2. シークレットのプル

デフォルトの実行環境 (Automation Controller で提供) を使用してリモート実行ノードで実行している場合は、実行環境イメージをプルするための認証情報を含むプルシークレットを Automation Controller に追加する必要があります。

これを行うには、Automation Controller の namespace でプルシークレットを作成し、次のように Operator で ee_pull_credentials_secret パラメーターを設定します。

手順

  1. シークレットを作成します。

    oc create secret generic ee-pull-secret \
         --from-literal=username=<username> \
         --from-literal=password=<password> \
         --from-literal=url=registry.redhat.io
    
    
    oc edit automationcontrollers <instance name>
  2. ee_pull_credentials_secret ee-pull-secret を仕様に追加します。

    spec.ee_pull_credentials_secret=ee-pull-secret
注記

Automation Controller UI からインスタンスを管理するには、システム管理者権限が必要です。

19.3. 自動化メッシュで使用するための仮想マシンのセットアップ

手順

  1. 各 RHEL インスタンスに SSH で接続し、次の手順を実行します。ネットワークアクセスと制御によっては、SSH プロキシーまたは他のアクセスモデルが必要になる場合があります。

    以下のコマンドを使用します。

    ssh [username]@[host_ip_address]

    たとえば、Amazon Web Services で実行されている Ansible Automation Platform インスタンスの場合は、以下のようになります。

    ssh ec2-user@10.0.0.6
  2. 後のステップで、ホップノードから実行ノードに接続するために使用できる SSH キーを作成またはコピーします。これは、自動化メッシュ設定のためだけに使用される一時キー、または長期間有効なキーの場合があります。SSH ユーザーとキーは、後の手順で使用されます。
  3. baseos および appstream リポジトリーを使用して、RHEL サブスクリプションを有効にします。Ansible Automation Platform RPM リポジトリーは、Red Hat Update Infrastructure (RHUI) はなく、subscription-manager を通じてのみ利用できます。RHEL と RHUI を含む他の Linux フットプリントを使用しようとすると、エラーが発生します。

    sudo subscription-manager register --auto-attach

    アカウントで Simple Content Access が有効になっている場合は、次を使用します。

    sudo subscription-manager register

    Simple Content Access の詳細は、Simple Content Access のスタートガイド を参照してください。

  4. Ansible Automation Platform サブスクリプションと適切な Red Hat Ansible Automation Platform チャネルを有効にします。

    RHEL 8 の場合:

    # subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-8-x86_64-rpms

    RHEL 9 の場合:

    # subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms

    ARM の場合:

    # subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-aarch64-rpms
  5. パッケージが最新であることを確認します。

    sudo dnf upgrade -y
  6. ダウンロードしたバンドルを実行するマシンに ansible-core パッケージをインストールします。

    sudo dnf install -y ansible-core
    注記

    自動化メッシュ設定バンドル Playbook を実行するマシンには Ansible Core が必要です。このドキュメントは、実行ノードでの実行を前提としています。別のマシンから Playbook を実行する場合は、この手順を省略できます。コントロールノードから直接実行することはできません。これは現在サポートされていませんが、将来的にはコントロールノードが実行ノードに直接接続される予定です。

19.4. インスタンスの管理

ジョブの容量を拡張するには、Automation Controller のデプロイメントと一緒に実行するように追加できるスタンドアロンの 実行ノード を作成します。これらの実行ノードは、Automation Controller Kubernetes クラスターの一部ではありません。

クラスター内で実行される制御ノードは、Receptor を介して実行ノードに接続し、作業を送信します。

これらの実行ノードは、タイプ execution インスタンスとして、Automation Controller に登録されます。つまり、コントロールノードのように作業をディスパッチしたり、Web リクエストを処理したりするのではなく、ジョブを実行するためにのみ使用されます。

重要

実行ノードを作成するときは、実行ノードのシステムタイムゾーンが Automation Controller の settings.TIME_ZONE (デフォルトは 'UTC') と一致していることを確認してください。ファクトキャッシュは、アーティファクトファイルの変更時刻の比較に依存していますが、これらの変更時刻はタイムゾーンを認識しません。したがって、実行ノードのタイムゾーンが Automation Controller のタイムゾーン設定と一致することが重要です。

ホップノード は、Automation Controller のコントロールプレーンとスタンドアロン実行ノードの間に追加できます。これらのホップノードは Kubernetes クラスターの一部ではなく、タイプ hop のインスタンスとして Automation Controller に登録されます。つまり、別のネットワークまたはより厳密なネットワーク内で到達不可能なノードへの受信および送信のトラフィックのみを処理します。

次の手順は、ホストのノードタイプを設定する方法を示しています。

手順

  1. ナビゲーションパネルから Automation ExecutionInfrastructureInstances を選択します。
  2. Instances リストページで、Add instance をクリックします。Add Instance ウィンドウが開きます。

    新しいインスタンスの作成

    インスタンスには次の属性が必要です。

    • Host name: (必須) インスタンスの完全修飾ドメイン名 (パブリック DNS) または IP アドレスを入力します。このフィールドは、インストーラーベースのデプロイメントの hostname に相当します。

      注記

      インスタンスがコントロールクラスターから解決できないプライベート DNS を使用している場合、DNS ルックアップルーティングは失敗し、生成された SSL 証明書は無効になります。代わりに IP アドレスを使用してください。

    • オプション: Description: インスタンスの説明を入力します。
    • Instance state: このフィールドは自動入力され、インストール中であることを示します。変更はできません。
    • Listener port: このポートは、受信接続をリッスンするために receptor に使用されます。ポートを設定に適したポートに設定できます。このフィールドは、API の listener_port に相当します。デフォルト値は 27199 ですが、独自のポート値を設定できます。
    • Instance type: execution ノードおよび hop ノードのみを作成できます。Operator ベースのデプロイメントは、コントロールノードまたはハイブリッドノードをサポートしません。

      オプション:

      • Enable instance: 実行ノード上でジョブを実行できるようにするには、このボックスをオンにします。
      • Managed by policy ボックスをオンにして、ポリシーがインスタンスの割り当て方法を決定できるようにします。
      • Peers from control nodes:

        • ホップノードを設定する場合:

          • 要求を Automation Controller からホップノードに直接プッシュする必要がある場合は、Peers from Control チェックボックスをオンにします。
          • ホップノードを別のホップノードにピアリングする場合は、Peers from Control チェックボックスがオンになっていないことを確認します。
        • 実行ノードを設定する場合:

          • 要求を Automation Controller から実行ノードに直接プッシュする必要がある場合は、Peers from Control チェックボックスをオンにします。
          • 実行ノードをホップノードにピアリングする場合は、Peers from Control チェックボックスがオンになっていないことを確認します。
  3. Associate peers をクリックします。
  4. 更新したトポロジーをグラフィック表示するには、トポロジービュー を参照してください。

    注記

    次の手順は、新しく作成したインスタンスへの SSH アクセスが可能な任意のコンピューターから実行してください。

  5. Download Bundle の横にある Download アイコンをクリックして、この新しいインスタンスと、作成されたノードを自動化メッシュにインストールするために必要なファイルを含む tar ファイルをダウンロードします。

    インストールバンドルには、TLS 証明書および鍵、認証局、適切な Receptor 設定ファイルが含まれています。

    receptor-ca.crt
    work-public-key.pem
    receptor.key
    install_receptor.yml
    inventory.yml
    group_vars/all.yml
    requirements.yml
  6. ダウンロードした tar.gz インストールバンドルを、ダウンロードした場所から展開します。これらのファイルがリモートマシン上の正しい場所にあることを確認するために、インストールバンドルには install_receptor.yml Playbook が含まれています。
  7. ansible-playbook コマンドを実行する前に、inventory.yml ファイル内の次のフィールドを編集します。

    all:
      hosts:
        remote-execution:
          ansible_host: localhost # change to the mesh node host name
              ansible_user: <username> # user provided
              ansible_ssh_private_key_file: ~/.ssh/<id_rsa>
    • ansible_host が、ノードの IP アドレスまたは DNS に設定されていることを確認します。
    • ansible_user を、インストールを実行しているユーザー名に設定します。
    • ansible_ssh_private_key_file を設定して、インスタンスへの接続に使用される秘密鍵のファイル名を含めます。
    • inventory.yml ファイルの内容はテンプレートとして機能し、メッシュトポロジーでの receptor ノードのインストールおよび設定中に適用されるロールの変数が含まれています。他のフィールドの一部を変更したり、高度なシナリオではファイル全体を置き換えたりすることができます。詳細は、Role Variables を参照してください。
  8. プライベート DNS を使用するノードの場合は、次の行を inventory.yml に追加します。

     ansible_ssh_common_args: <your ssh ProxyCommand setting>

    これにより、install-receptor.yml Playbook が、プロキシーコマンドを使用してローカル DNS ノード経由でプライベートノードに接続するように指示されます。

  9. 属性を設定したら、Save をクリックします。作成したインスタンスの Details ページが開きます。
  10. ファイルを保存して続行します。
  11. インストールバンドルを実行してリモートノードをセットアップし、ansible-playbook を実行するシステムには、ansible.receptor コレクションがインストールされている必要があります。

    ansible-galaxy collection install ansible.receptor

    または

    ansible-galaxy install -r requirements.yml
    • requirements.yml ファイルから receptor コレクションの依存関係をインストールすると、そこで指定された receptor のバージョンが一貫して取得されます。さらに、今後必要になる可能性のある他のコレクションの依存関係も取得されます。
    • Playbook が実行されるすべてのノードに receptor コレクションをインストールします。インストールしない場合は、エラーが発生します。
  12. receptor_listener_port が定義されている場合、マシンには、受信 TCP 接続を確立するために使用可能なオープンポート (27199 など) も必要です。次のコマンドを実行して、Receptor 通信用にポート 27199 を開きます (ファイアウォールでポート 27199 が開いていることを確認してください)。

    sudo firewall-cmd --permanent --zone=public --add-port=27199/tcp
  13. 自動化メッシュを更新するマシン上で、次の Playbook を実行します。
ansible-playbook -i inventory.yml install_receptor.yml

+

注記

この Playbook には OpenSSL が必要です。次のコマンドを実行してインストールできます。

openssl -v

返される場合は、OpenSSL のバージョンがインストールされています。返されない場合は、次のように OpenSSL をインストールする必要があります。

sudo dnf install -y openssl

+ この Playbook を実行すると、自動化メッシュが設定されます。

インスタンスのリストビュー
注記

場合によっては、サーバーが Receptor ポート (デフォルトは 27199) をリッスンしないことがあります。

ノード A、B、C を持つコントロールプレーンがあるとします。

以下は、3 つのコントローラーノードのピアリング設定です。

コントローラーノード A -→ コントローラーノード B

コントローラーノード A -→ コントローラーノード C

コントローラーノード B -→ コントローラーノード C

以下を設定すると、リスナーを強制できます。

receptor_listener=True

ただし、コントローラー B -→ A への接続は、すでに存在するため、拒否される可能性があります。

その場合、コントローラー A は他のノードへの接続を作成しているため、コントローラー A には何も接続されません。コントローラー A で次のコマンドを実行しても、何も返されません。

[root@controller1 ~]# ss -ntlp | grep 27199 [root@controller1 ~]#

RPM インストーラーは、最小権限アプローチを使用してコントロールプレーンノード間に強力に接続されたピアリングを作成し、必要なノード上でのみ TCP リスナーを開きます。Receptor の接続はすべて双方向接続であるため、接続が確立されると、Receptor は双方向に通信できるようになります。

メッシュからインスタンスを削除するには、インスタンスの削除 を参照してください。

19.5. インスタンスの削除

Instances ページから、ノードに対するヘルスチェックを追加、削除、または実行できます。

注記

追加のノードを作成する場合、RHEL パッケージをインストールする手順に従う必要があります。この追加のノードを既存のホップノードにピアリングする場合は、各ノードにインストールバンドルもインストールする必要があります。

インスタンスの横にあるチェックボックスでインスタンスを選択し、インスタンスを削除するか、ヘルスチェックを実行します。

注記
  • UI を使用してノードを削除すると、ノードが「削除」され、そのステータスが表示されなくなります。UI で削除する前にノードの仮想マシンを削除すると、エラーが表示されます。
  • インストールバンドルを再インストールする必要があるのは、トポロジーによって通信パターンが変更された場合、つまりホップノードが変更された場合やノードを追加した場合のみです。

ボタンが無効になっている場合は、その操作を実行する権限がありません。必要なレベルのアクセスを許可するよう管理者に連絡してください。

インスタンスを削除できる場合は、確認を求めるプロンプトが表示されます。

注記

インスタンスがアクティブでジョブを実行中の場合でも、インスタンスを削除できます。Automation Controller が、このノードで実行されているジョブが完了するまで待機してから、このノードを削除します。

第20章 実行環境

実行環境は、システムレベルの依存関係とコレクションベースのコンテンツを組み込むことを可能にするコンテナーイメージです。各実行環境で、ジョブ実行用のカスタマイズイメージを使用できます。各実行環境には、ジョブの実行時に必要なもののみが含まれています。

Execution Environments ページのデフォルトビューは、実行環境名とそのイメージ名が折りたたまれた状態 (Compact) になっています。実行環境名を選択すると、エントリーが展開され、詳細情報が表示されます。

リストされている各実行環境について、 Edit を使用して、選択した実行環境のプロパティーを編集するか、⋮ をクリックして実行環境を複製することができます。これらは Details ページからも実行できます。

20.1. 実行環境の構築

Ansible コンテンツがデフォルトの環境ではなくカスタム仮想環境に依存している場合は、追加の手順を実行する必要があります。各ノードにパッケージをインストールし、ホストシステムにインストールされている他のソフトウェアと適切に連携させ、パッケージの同期を維持する必要があります。

このプロセスを簡素化するために、Ansible コントロールノード として機能するコンテナーイメージをビルドできます。これらのコンテナーイメージは自動化実行環境と呼ばれ、ansible-builder を使用して作成できます。Ansible-runner は上記のようなイメージを利用できるようになります。

20.1.1. ansible-builder のインストール

イメージをビルドするには、Podman または Docker と ansible-builder Python パッケージがインストールされている必要があります。

--container-runtime オプションは、使用する Podman または Docker 実行可能ファイルに対応している必要があります。

実行環境イメージをビルドするときは、Ansible Automation Platform がデプロイされるアーキテクチャーをサポートする必要があります。

詳細は、Ansible Builder のクイックスタート または 実行環境の作成および消費 を参照してください。

20.1.2. 実行環境に必要なコンテンツ

実行環境の作成には Ansible-builder を使用します。

実行環境には以下が含まれている必要があります。

  • Ansible
  • Ansible Runner
  • Ansible コレクション
  • Python とシステムの依存関係:

    • コレクション内のモジュールまたはプラグイン
    • ansible-base のコンテンツ
    • カスタムのユーザーニーズ

新しい実行環境を構築するには、コレクション、Python 要件、システムレベルのパッケージなど、実行環境に含めるコンテンツを指定した定義が必要です。定義は .yml ファイルである必要があります。

実行環境への移行によって生成された出力の内容には、ファイルにパイプしたり、この定義ファイルに貼り付けたりできる必要なデータの一部が含まれています。

20.1.3. イメージをビルドするための YAML ファイルの例

ansible-builder build コマンドは、実行環境定義を入力として受け取ります。実行環境イメージのビルドに必要なビルドコンテキストを出力し、そのイメージをビルドします。このイメージは、ビルドコンテキストを使用して他の場所で再ビルドでき、同じ結果が得られます。デフォルトでは、ビルダーは現在のディレクトリーで execution-environment.yml という名前のファイルを検索します。

次の execution-environment.yml ファイルの例は、開始点として使用できます。

---
version: 3
dependencies:
  galaxy: requirements.yml

requirements.yml の内容:

---
collections:
  - name: kubernetes.core

上記のファイルを使用して実行環境を構築し、次のコマンドを実行します。

ansible-builder build
...
STEP 7: COMMIT my-custom-ee
--> 09c930f5f6a
09c930f5f6ac329b7ddb321b144a029dbbfcc83bdfc77103968b7f6cdfc7bea2
Complete! The build context can be found at: context

すぐに使用できるコンテナーイメージが生成されるだけでなく、ビルドコンテキストが保持されます。このイメージは、docker buildpodman build などの任意のツールを使用して、別の時間または場所で再ビルドできます。

関連情報

ansible-builder build コマンドの詳細は、Ansible の CLI Usage ドキュメントを参照してください。

20.1.4. 実行環境のマウントオプション

証明書の追加の方法として、実行環境の再構築が 1 つ挙げられますが、ホストから証明書を継承する方がより便利な解決策となります。仮想マシンベースのインストールの場合、Automation Controller はジョブの実行時に実行環境にシステムトラストストアを自動的にマウントします。

Job Settings ページの Paths to expose to isolated jobs フィールドで実行環境のマウントオプションとマウントパスをカスタマイズできます。このフィールドでは、Podman スタイルのボリュームマウント構文がサポートされています。

関連情報

詳細は、Podman ドキュメント を参照してください。

20.1.4.1. 実行環境マウントオプションのトラブルシューティング

実行環境のカスタマイズにより実行環境イメージに /etc/ssh/* ファイルが追加された場合、SSH エラーが発生する場合があります。

たとえば、/etc/ssh/ssh_config.d:/etc/ssh/ssh_config.d:O パスを公開すると、コンテナーをマウントできるようになりますが、所有権のアクセス許可は正しくマップされません。

このエラーが発生した場合、または古いバージョンの Automation Controller からアップグレードした場合は、次の手順を使用してください。

手順

  1. マウントされたボリュームのコンテナー所有権を root に変更します。
  2. ナビゲーションパネルから、SettingsAutomation ExecutionJob を選択します。
  3. Edit をクリックします。
  4. 現在の例を使用して、Paths to expose to isolated jobs でパスを公開します。

    [
      "/ssh_config:/etc/ssh/ssh_config.d/:0"
    ]
    注記

    :O オプションはディレクトリーに対してのみサポートされます。特にシステムパスを指定する場合は、できるだけ詳細に指定してください。/etc または /usr を直接マウントすると、トラブルシューティングが困難になる影響があります。

    これにより、次の例と同様のコマンドを実行するように Podman に通知されます。このコマンドにより、設定がマウントされ、ssh コマンドが期待どおりに機能するようになります。

    podman run -v /ssh_config:/etc/ssh/ssh_config.d/:O ...

OpenShift または Kubernetes コンテナー内の分離されたパスを HostPath として公開するには、以下の設定を想定してください。

[
  "/mnt2:/mnt2",
  "/mnt3",
  "/mnt4:/mnt4:0"
]

有効にするには Expose host paths for Container GroupsOn に設定します。

Playbook が実行されると、結果として得られる Pod 仕様は次の例のようになります。volumeMounts セクションと volumes セクションの詳細に注目してください。

Pod specification

20.1.4.2. 実行ノード内のディレクトリーを実行環境コンテナーにマウントする

この手順では、実行ノードまたはハイブリッドノードからジョブコンテナーにボリュームをマウントできるように、分離されたジョブに公開されるパスを設定する方法を説明します。

手順

  1. ナビゲーションパネルから、SettingsAutomation ExecutionJob を選択します。
  2. Paths to expose to isolated jobs を編集します。

    • 実行ノードまたはハイブリッドノードからコンテナーにボリュームをマウントするパスのリストを入力します。
    • 1 行に 1 つのパスを入力します。
    • サポートされている形式は、HOST-DIR[:CONTAINER-DIR[:OPTIONS] です。許可されるパスは、zOro、および rw です。

      [
        "/var/lib/awx/.ssh:/root/.ssh:O"
      ]

    • rw オプションの場合、SELinux ラベルを正しく設定します。たとえば、/foo ディレクトリーをマウントするには、次のコマンドを実行します。

      sudo su
      mkdir /foo
      chmod 777 /foo
      semanage fcontext -a -t container_file_t "/foo(/.*)?"
      restorecon -vvFR /foo

awx ユーザーには、少なくともこのディレクトリーでの読み取りまたは書き込みの許可が必要です。ここでは権限を 777 に設定します。

関連情報

ボリュームのマウントの詳細は、Podman ドキュメントの --volume option of the podman-run(1) を参照してください。

20.2. ジョブテンプレートへの実行環境の追加

前提条件

  • Automation Controller を使用して実行環境を作成する前に、実行環境の構築 の説明に従って実行環境を構築する。

    構築したら、リポジトリー (quay など) に実行環境をプッシュする必要があります。その後、Automation Controller を使用して UI で実行環境を作成するときに、そのリポジトリーを指定して、Ansible Automation Platform でジョブテンプレートなどで使用できるようにする必要があります。

  • 実行環境がグローバルに使用できるように指定されているか、組織に関連付けられているかに応じて、ジョブで実行環境を使用するための適切なレベルの管理者権限を持っている。組織に関連付けられた実行環境では、組織管理者がそれらの実行環境でジョブを実行できる必要があります。
  • 認証情報が割り当てられた実行環境を使用するジョブまたはジョブテンプレートを実行する前に、認証情報にユーザー名、ホスト、およびパスワードが含まれていることを確認する。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureExecution Environments を選択します。
  2. Create execution environment をクリックして、実行環境を追加します。
  3. 以下のフィールドに該当する詳細を入力します。

    • Name (必須): 実行環境の名前を入力します。
    • Image (必須): イメージ名を入力します。イメージ名には、完全な場所 (リポジトリー)、レジストリー、イメージ名、および quay.io/ansible/awx-ee:latestrepo/project/image-name:tag のサンプル形式のバージョンタグが必要です。
    • オプション: Pull: ジョブを実行するときのプルのタイプを選択します。

      • Always pull container before running: コンテナーの最新のイメージファイルをプルします。
      • Only pull the image if not present before running: 何も指定されていない場合のみ、最新のイメージをプルします。
      • Never pull container before running: コンテナーイメージの最新バージョンをプルしません。

        注記

        プルのタイプを設定しなかった場合、値はデフォルトで Only pull the image if not present before running になります。

    • オプション: 説明:
    • オプション: Organization: この実行環境を使用する組織を指定します。実行環境を複数の組織間で使用できるようにするには、このフィールドを空白のままにします。
    • Registry Credential: イメージに保護されたコンテナーレジストリーがある場合は、それにアクセスするための認証情報を指定します。
  4. Create execution environment をクリックします。

    新しく追加した実行環境をジョブテンプレートで使用する準備ができました。

  5. ジョブテンプレートに実行環境を追加するには、ジョブテンプレートの Execution Environment フィールドで実行環境を指定します。

実行環境をジョブテンプレートに追加すると、それらのテンプレートは実行環境の Templates タブにリストされます。

第21章 実行環境の設定リファレンス

このセクションには、実行環境の定義に関連する参考情報が含まれています。実行環境のコンテンツは YAML ファイルで定義します。デフォルトでは、このファイルの名前は execution_environment.yml です。このファイルは、Ansible Builder にビルド指示ファイル (Podman の場合は Containerfile、Docker の場合は Dockerfile) を作成し、コンテナーイメージのコンテキストをビルドする方法を指示します。

注記

Ansible Builder 3.x の定義スキーマはここに記載されています。古いバージョンの Ansible Builder を実行している場合は、古いスキーマバージョンが必要です。詳細は、こちら のドキュメントの古いバージョンを参照してください。Red Hat はバージョン 3 を使用することを推奨します。バージョン 3 では、過去のバージョンより設定可能なオプションや機能がはるかに多くなっています。

21.1. 実行環境定義の例

実行環境のイメージをビルドするには、定義ファイルを作成する必要があります。ファイルは YAML 形式です。

定義ファイルで Ansible Builder のバージョンを指定する必要があります。デフォルトのバージョンは 1 です。

次の定義ファイルは Ansible Builder バージョン 3 を使用しています。

version: 3
build_arg_defaults:
  ANSIBLE_GALAXY_CLI_COLLECTION_OPTS: '--pre'
dependencies:
  galaxy: requirements.yml
  python:
    - six
    - psutil
  system: bindep.txt
images:
  base_image:
    name: registry.redhat.io/ansible-automation-platform-24/ee-minimal-rhel8:latest
additional_build_files:
    - src: files/ansible.cfg
      dest: configs
additional_build_steps:
  prepend_galaxy:
    - ADD _build/configs/ansible.cfg /home/runner/.ansible.cfg
  prepend_final: |
    RUN whoami
    RUN cat /etc/os-release
  append_final:
    - RUN echo This is a post-install command!
    - RUN ls -la /etc

21.2. 設定オプション

定義ファイルで次の設定 YAML キーを使用します。

Ansible Builder 3.x 実行環境定義ファイルは、次の 7 つの最上位セクションを受け入れます。

21.2.1. additional_build_files

ビルドファイルは、ビルドコンテキストディレクトリーに追加する内容を指定します。これらは、任意のビルド段階で additional_build_steps によって参照またはコピーできます。

形式はディクショナリー値のリストで、各リスト項目に src および dest のキーと値を含めます。

各リスト項目は、次の必須キーを含むディクショナリーである必要があります。

Expand

src

ビルドコンテキストディレクトリーにコピーするソースファイルを指定します。

これは、/home/user/.ansible.cfg などの絶対パス、またはファイルに対する相対パスで指定できます。相対パスは、1 つ以上のファイルに一致する glob 式にすることができます (files/\*.cfg など)。絶対パスには正規表現を含めることができない点に注意してください。src がディレクトリーの場合、そのディレクトリーの内容全体が dest にコピーされます。

dest

ソースファイル (例: files/configs) が含まれるビルドコンテキストディレクトリーの _build サブディレクトリーの下にあるサブディレクトリーパスを指定します。

この値を絶対パスで指定することや、パス内に .. を追加できません。このディレクトリーが存在しない場合は、自動的に作成されます。

注記

ansible.cfg ファイルを使用してプライベートアカウントのトークンとその他の設定を Automation Hub サーバーに渡す場合、ここに設定ファイルのパスを文字列としてリストすると、ビルド引数としてビルドの初期フェーズに含めることができます。

21.3. additional_build_steps

ビルドステップは、任意のビルドフェーズのカスタムビルドコマンドを指定するものです。これらのコマンドは、コンテナーランタイムのビルド指示ファイル (Containerfile や Dockerfile など) に直接挿入されます。コマンドは、コンテナー化ツールで必要なルールに準拠する必要があります。

ビルドステップは、イメージ作成プロセスのどの段階の前後にも追加できます。たとえば、依存関係をインストールする前に git をインストールする必要がある場合は、ベースビルド段階の最後にビルドステップを追加できます。

有効なキーは次のとおりです。それぞれが複数行の文字列または文字列のリストをサポートします。

Expand

append_base

基本イメージの構築後に挿入するコマンド。

append_builder

ビルダーイメージの構築後に挿入するコマンド。

append_final

最終イメージの構築後に挿入するコマンド。

append_galaxy

Galaxy イメージの構築後に挿入するコマンド。

prepend_base

基本イメージを構築する前に挿入するコマンド。

prepend_builder

ビルダーイメージを構築する前に挿入するコマンド。

prepend_final

最終イメージを構築する前に挿入するコマンド。

prepend_galaxy

Galaxy イメージを構築する前に挿入するコマンド。

21.3.1. build_arg_defaults

これにより、ビルド引数のデフォルト値がディクショナリーとして指定されます。

これは、--build-arg CLI フラグの代わりに使用する方法です。

Ansible Builder は次のビルド引数を使用します。

Expand

ANSIBLE_GALAXY_CLI_COLLECTION_OPTS

-pre フラグやその他のフラグを渡して、プレリリースコレクションのインストールを有効にできます。

ANSIBLE_GALAXY_CLI_ROLE_OPTS

使用すると、--no-deps などのフラグをロールのインストールに渡すことができます。

PKGMGR_PRESERVE_CACHE

これは、イメージのビルドプロセス中にパッケージマネージャーのキャッシュがクリアされる頻度を制御します。

この値が設定されていない場合 (デフォルト)、キャッシュは頻繁にクリアされます。値が always の場合、キャッシュはクリアされません。それ以外の値を指定すると、最終ビルド段階でシステムの依存関係がインストールされた後にのみキャッシュが強制的にクリアされます。

Ansible Builder は、build_arg_defaults 内で指定された値をビルド指示ファイルにハードコーディングするため、コンテナーのビルドを手動で実行した場合でも値は保持されます。

定義と CLI build-arg フラグを使用したコマンドラインで同じ変数を指定すると、CLI の値によって定義の値がオーバーライドされます。

21.3.2. 依存関係

ansible-coreansible-runner、Python パッケージ、システムパッケージ、コレクションなど、最終イメージにインストールする依存関係を指定します。Ansible Builder は、ユーザーがインストールする Ansible コレクションの依存関係を自動的にインストールします。

一般に、標準の構文を使用してパッケージのバージョンを制限できます。dnfpipansible-galaxy、またはその他のパッケージ管理ユーティリティーに渡すのと同じ構文を使用します。パッケージまたはコレクションを別のファイルで定義し、定義ファイルの dependencies セクションで上記のファイルを参照することもできます。

有効なキーは次のとおりです。

Expand

ansible_core

インストールされる ansible-core Python パッケージのバージョン。

この値は、キー (package_pip) が 1 つ含まれるディクショナリーです。package_pip 値は、インストールのために pip に直接渡され、pip がサポートする任意の形式に指定できます。以下は、値の例です。

ansible_core:
    package_pip: ansible-core
ansible_core:
    package_pip: ansible-core==2.14.3
ansible_core:
    package_pip: https://github.com/example_user/ansible/archive/refs/heads/ansible.tar.gz

ansible_runner

インストールする Ansible Runner Python パッケージのバージョン。

この値は、キー (package_pip) が 1 つ含まれるディクショナリーです。package_pip 値は、インストールのために pip に直接渡され、pip がサポートする任意の形式に指定できます。以下は、値の例です。

ansible_runner:
    package_pip: ansible-runner
ansible_runner:
    package_pip: ansible-runner==2.3.2
ansible_runner:
    package_pip: https://github.com/example_user/ansible-runner/archive/refs/heads/ansible-runner.tar.gz

galaxy

Ansible Galaxy からインストールするコレクション。

これは、ファイル名、ディクショナリー、または Ansible Galaxy requirements.yml ファイルの複数行の文字列表現です。要件ファイル形式の詳細は、Galaxy ユーザーガイド を参照してください。

python

Python のインストール要件。

これには、ファイル名または要件のリストなどを使用できます。Ansible Builder は、requirements-parser ライブラリーを使用して、すべてのコレクションのすべての Python 要件ファイルを 1 つのファイルに結合します。

このライブラリーは、他のファイルへの参照を含む複雑な構文をサポートします。多数のコレクションに同じ パッケージ名 が必要な場合、Ansible Builder はそれらを 1 つのエントリーにまとめ、制約を結合します。

Ansible Builder は、コレクションにパッケージが依存関係としてリストされている場合でも、Python 依存関係の結合ファイル内の一部のパッケージを除外します。これには、テストパッケージと、Ansible 自体を提供するパッケージが含まれます。完全なリストは、src/ansible_builder/_target_scripts/introspect.pyEXCLUDE_REQUIREMENTS で確認できます。

このような除外されるパッケージ名のいずれかを含める必要がある場合は、introspect コマンドの --user-pip オプションを使用して、ユーザー要件ファイルにそのパッケージ名をリストします。

この方法で提供されたパッケージは、除外された Python パッケージのリストに対して処理されません。

python_interpreter

dnf によってインストールされる Python システムパッケージ名 (package_system) または使用される Python インタープリターへのパス (python_path) を定義するディクショナリー。

system

インストールされるシステムパッケージ (bindep 形式)。ファイル名または要件のリストを指定できます。

bindep の詳細は、OpenDev のドキュメント を参照してください。

システムパッケージの場合、bindep 形式を使用してクロスプラットフォーム要件を指定すると、実行環境が使用するパッケージ管理システムによってシステムパッケージをインストールできます。コレクションで、[platform:rpm] に必要な要件を指定する必要があります。Ansible Builder は、複数のコレクションのシステムパッケージエントリーを 1 つのファイルに結合します。プロファイルのない要件 (ランタイム要件) のみがイメージにインストールされます。互いに重複している多数のコレクションのエントリーを、結合ファイルに統合できます。

次の例では、さまざまな依存関係を含むファイル名を使用しています。

dependencies:
  python: requirements.txt
  system: bindep.txt
  galaxy: requirements.yml
  ansible_core:
      package_pip: ansible-core==2.14.2
  ansible_runner:
      package_pip: ansible-runner==2.3.1
  python_interpreter:
      package_system: "python310"
      python_path: "/usr/bin/python3.10"

この例ではインライン値を使用します。

dependencies:
  python:
    - pywinrm
  system:
    - iputils [platform:rpm]
  galaxy:
    collections:
      - name: community.windows
      - name: ansible.utils
        version: 2.10.1
  ansible_core:
      package_pip: ansible-core==2.14.2
  ansible_runner:
      package_pip: ansible-runner==2.3.1
  python_interpreter:
      package_system: "python310"
      python_path: "/usr/bin/python3.10"
注記

これらの依存関係ファイル (requirements.txt、bindep.txt、requirements.yml) のいずれかがコレクションの build_ignore に含まれている場合、ビルドが失敗します。

コレクションのメンテナーは、introspect コマンドを使用して、期待される要件を ansible-builder が認識していることを確認できます。

ansible-builder introspect --sanitize ~/.ansible/collections/

--sanitize オプションは、すべてのコレクション要件を確認し、重複を削除します。また、通常は除外される Python 要件も削除されます (Python の依存関係を参照)。

-v3 オプションを使用して イントロスペクト を行い、除外されている要件に関するログメッセージを確認します。

21.3.3. images

使用するベースイメージを指定します。少なくとも、ベースイメージのソース、イメージ、およびタグを指定する必要があります。基本イメージはオペレーティングシステムを提供し、いくつかのパッケージも提供することもできます。標準の host/namespace/container:tag 構文を使用してイメージを指定します。代わりに Podman または Docker のショートカット構文を使用することもできますが、完全な定義の方が信頼性と移植性が高くなります。

このセクションの有効なキーは次のとおりです。

Expand

base_image

実行環境の親イメージを定義するディクショナリー。

使用するコンテナーイメージには name キーを指定する必要があります。イメージがリポジトリー内でミラーリングされているが、イメージの元の署名キーで署名されている場合は、signature_original_name キーを使用します。

21.3.4. Image verification

podman コンテナーランタイムを使用している場合は、署名されたコンテナーイメージを検証できます。

container-policy CLI オプションを設定して、コンテナーイメージの署名検証のための Podman policy.json ファイルに関連してこのデータがどのように使用されるかを制御します。

  • ignore_all ポリシー: 署名検証が実行されないビルドの context directory <context> に、policy.json ファイルを生成します。
  • system ポリシー: 署名の検証は、標準のシステムの場所にある既存の policy.json ファイルを使用して実行されます。ansible-builder は、これらのファイル内のコンテンツに対する責任を負わず、ユーザーがコンテンツを完全に制御できます。
  • signature_required ポリシー: ansible-builder がコンテナーイメージ定義を使用して、ビルドの context directory <context>policy.json ファイルを生成します。このファイルはビルド中にイメージを検証するために使用されます。

21.3.5. options

Ansible Builder のランタイム機能に影響を与える可能性のあるキーワードまたはオプションのディクショナリー。

このセクションの有効なキーは次のとおりです。

  • container_init: コンテナーの ENTRYPOINT および CMD ディレクティブ (および関連する動作) のカスタマイズを可能にするキーを含むディクショナリー。これらの動作のカスタマイズは高度なタスクであり、デバッグが困難な障害が発生する可能性があります。下記のデフォルト値は、複数の密接な動作を制御するものです。そのため、いずれかの値をオーバーライドすると、このディクショナリー内の残りのデフォルトがすべてスキップされます。

    有効なキーは次のとおりです。

    • cmd : CMD Containerfile ディレクティブのリテラル値。デフォルト値は ["bash"] です。
    • entrypoint: ENTRYPOINT Containerfile ディレクティブのリテラル値。デフォルトのエントリーポイントの動作は、サブプロセスへのシグナルの伝播を処理するだけでなく、実行時に、コンテナーユーザーが有効で書き込み可能なホームディレクトリーが含まれる適切な環境が含まれます。このディレクトリーは、/etc/passwd で表現されており、HOME 環境変数と一致するように設定されています。デフォルトのエントリーポイントスクリプトは、ユーザーのランタイム環境を適切に調整できない場合に、stderr に警告を発行できます。この動作は無視されるか、致命的なエラーに格上げされる可能性があります。詳細は、エントリーポイント ターゲットスクリプトのソースを参照してください。
    • package_pip : エントリーポイントのサポートのために pip を使用してインストールするパッケージ。このパッケージは、最終的なビルドイメージにインストールされます。
  • package_manager_path: 使用するパッケージマネージャー (dnf または microdnf) へのパスを含む文字列。この値はパッケージをインストールするために使用されます。
  • skip_ansible_check: このブール値は、Ansible および Ansible Runner のインストールのチェックを最終イメージで実行するかどうかを制御します。

    このチェックを実行しない場合は、この値を True に設定します。

    デフォルトは False です。

  • relax_passwd_permissions: このブール値は、最終的なコンテナーイメージ内の /etc/passwd への書き込み権限を root グループ (GID 0) に明示的に付与するかどうかを制御します。デフォルトのエントリーポイントスクリプトは、完全に機能する POSIX ユーザー環境とホームディレクトリーを確保するために、動的に作成されたユーザーを使用して一部のコンテナーランタイムで /etc/passwd の更新を試みることができます。この機能を無効にすると、有効で書き込み可能なホームディレクトリーを持つユーザーを /etc/passwd にリストする必要があるソフトウェア機能 (たとえば、ansible-core の async~username シェル拡張など) が失敗する可能性があります。

    デフォルトは True です。

  • workdir: 最終コンテナーイメージで開始される新しいプロセスのデフォルトとして設定されている現在の作業ディレクトリー。一部のコンテナーランタイムは、root (GID 0) グループ内で動的に作成されたユーザーの HOME としてもこの値を使用します。この値を指定すると、ディレクトリーがまだ存在しない場合はディレクトリーが作成され、root グループの所有権が設定され、rwx グループのアクセス許可が再帰的に適用されます。

    デフォルト値は /runner です。

  • user: 最終的なコンテナーイメージのデフォルトユーザーとして使用するユーザー名または UID を設定します。

    デフォルト値は 1000 です。

オプションの例:

options:
    container_init:
        package_pip: dumb-init>=1.2.5
        entrypoint: '["dumb-init"]'
        cmd: '["csh"]'
    package_manager_path: /usr/bin/microdnf
    relax_password_permissions: false
    skip_ansible_check: true
    workdir: /myworkdir
    user: bob

21.3.6. version

実行環境定義ファイルのスキーマバージョンを設定する整数値。

デフォルトは 1 です。

Ansible Builder 3.x を使用している場合、値は 3 である必要があります。

21.4. AWX のデフォルトの実行環境

test/data/pytz の例では、定義に awx.awx コレクションが必要です。ルックアッププラグイン awx.awx.tower_schedule_rrule が動作するには、PyPI pytz と別のライブラリーが必要です。test/data/pytz/execution-environment.yml ファイルが ansible-builder build コマンドに指定されている場合、イメージ内にコレクションがインストールされ、コレクション内の requirements.txt ファイルが読み取られて、pytz がイメージにインストールされます。。

これらの変数をプライベートデータディレクトリー内の env/settings ファイル内に配置して、生成されたイメージを ansible-runner プロジェクト内で使用できます。

---
container_image: image-name
process_isolation_executable: podman # or docker
process_isolation: true

awx.awx コレクションは、デフォルトの AWX に含まれるコンテンツのサブセットです。

詳細は、awx-ee repository を参照してください。

第22章 ユーザー認証情報の管理

認証情報を使用して、マシンに対するジョブの起動、インベントリーソースの同期、バージョン管理システムからのプロジェクトコンテンツのインポートを行う場合に、Automation Controller のユーザーを認証します。

認証情報をユーザーに公開せずに、ユーザーとチームにこれらの認証情報を使用する権限を付与できます。ユーザーが別のチームに異動する場合や、組織から離職する場合は、対象の認証情報が Automation Controller で利用できるからといって、システムずべてのキー登録をやり直す必要はありません。

注記

Automation Controller はデータベース内のパスワードと鍵情報を暗号化し、API を通じて機密情報が公開されることはありません。詳細は、自動化実行の設定 を参照してください。

22.1. 認証情報の仕組み

Automation Controller は SSH を使用してリモートホストに接続します。鍵を Automation Controller から SSH に渡すには、鍵を復号化してから名前付きパイプに書き込む必要があります。Automation Controller はそのパイプを使用して鍵を SSH に送信します。そのため、鍵がディスクに書き込まれることはありません。パスワードが使用されている場合、Automation Controller はパスワードプロンプトに直接応答し、パスワードを復号化してからプロンプトに書き込むことでパスワードを処理します。

Credentials ページには、現在利用可能な認証情報が表示されます。デフォルトのビューは折りたたまれた状態 (Compact) で、認証情報の名前と認証情報の種類が表示されます。

この画面から、認証情報を編集 Edit 、複製 Copy 、または削除 ⋮ できます。

注記

組織を指定せずに、同じ名前を持つ重複した認証情報を作成することが可能です。ただし、同じ組織内に重複する 2 つの認証情報を作成することはできません。

  1. 組織を指定せずに、同じ名前を持つ 2 つのマシン認証情報を作成します。
  2. モジュール ansible.controller.export を使用して、認証情報をエクスポートします。
  3. 別の自動化実行ノードでモジュール ansible.controller.import を使用します。
  4. インポートされた認証情報を確認します。

重複する 2 つの認証情報をエクスポートし、別のノードにインポートすると、1 つの認証情報のみがインポートされます。

22.2. 新しい認証情報の作成

チームに追加された認証情報は、チームのすべてのメンバーが利用できるようになります。個々のユーザーに認証情報を追加することもできます。

初期設定の一環として、デモ認証情報と Ansible Galaxy の 2 つの認証情報を使用できます。Ansible Galaxy 認証情報は、テンプレートとして使用してください。この認証情報はコピーできますが、編集することはできません。必要に応じて認証情報を追加してください。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureCredentials を選択します。
  2. Credentials ページで、Create credential をクリックします。
  3. 以下の情報を入力します。

    • Name: 新しい認証情報の名前。
    • (オプション) Description: 新しい認証情報の説明。
    • オプション: Organization: 認証情報を関連付ける組織の名前。デフォルトは Default です。
    • Credential type: 作成する認証情報のタイプを入力または選択します。
  4. 認証情報タイプ の説明に従い、選択した認証情報タイプに応じて適切な詳細を入力します。

    Credential types drop down list

  5. Create credential をクリックします。

22.3. 既存の認証情報に新しいユーザーとジョブテンプレートを追加する

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureCredentials を選択します。
  2. 追加のユーザーに割り当てる認証情報を選択します。
  3. User Access タブをクリックします。この認証情報に関連付けられているユーザーとチーム、およびそのロールを確認できます。ユーザーが存在しない場合は、Users メニューから追加します。詳細は、ユーザー を参照してください。
  4. Add roles をクリックします。
  5. 認証情報へのアクセスを許可するユーザーを選択し、Next をクリックします。
  6. Select roles to apply ページで、ユーザーに追加するロールを選択します。
  7. Next をクリックします。
  8. 選択内容を確認し、Finish をクリックしてロールを追加するか、Back をクリックして変更を加えます。

    操作が成功したかどうかを示す Add roles ウィンドウが表示されます。

    操作が成功しなかった場合は、警告が表示されます。

  9. Close をクリックします。
  10. User Access ページに概要情報が表示されます。
  11. Job templates タブを選択して、この認証情報を割り当てるジョブテンプレートを選択します。
  12. ジョブテンプレートを選択するか、Create template リストから Create job template を選択して、追加のジョブテンプレートに認証情報を割り当てます。

    新しいジョブテンプレートの作成の詳細は、ジョブテンプレート を参照してください。

22.4. 認証情報タイプ

Automation Controller は次の種類の認証情報をサポートしています。

AWS Secrets Manager、Centrify、CyberArk、HashiCorp Vault、Microsoft Azure Key Vault、および Thycotic に関連付けられている認証情報タイプは、認証情報プラグイン機能の一部であり、外部システムによるシークレット情報の検索を可能にするものです。

詳細は、シークレット管理システム を参照してください。

22.4.1. Amazon Web Services 認証情報タイプ

クラウドインベントリーと Amazon Web Services の同期を有効にするには、この認証情報を選択します。

Automation Controller は、AWS 認証情報に次の環境変数を使用します。

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SECURITY_TOKEN

これらは、ユーザーインターフェイスでプロンプトが表示されるフィールドです。

Amazon Web Services の認証情報は、AWS の アクセスキーシークレットキー で構成されます。

Automation Controller は、アイデンティティーおよびアクセス管理 (IAM) STS 認証情報とも呼ばれる EC2 STS トークンのサポートを提供します。Security Token Service (STS) は、AWS IAM ユーザーのために、権限が限られた一時的な認証情報を要求できる Web サービスです。

注記

EC2 のタグの値にブール値 (yes/no/true/false) が含まれている場合は、その値を引用符で囲む必要があります。

警告

暗黙的な IAM ロール認証情報を使用するには、IAM ロールに依存して AWS API にアクセスするときに、Automation Controller で AWS クラウド認証情報をアタッチしないでください。

AWS クラウド認証情報をジョブテンプレートにアタッチすると、IAM ロールの認証情報ではなく、AWS 認証情報が強制的に使用されます。

関連情報

IAM/EC2 STS トークンの詳細は、IAM の一時的なセキュリティー認証情報 を参照してください。

22.4.1.1. Ansible Playbook で Amazon EC2 の認証情報にアクセスする

ジョブランタイム環境から AWS 認証情報パラメーターを取得できます。

vars:
  aws:
    access_key: '{{ lookup("env", "AWS_ACCESS_KEY_ID") }}'
    secret_key: '{{ lookup("env", "AWS_SECRET_ACCESS_KEY") }}'
    security_token: '{{ lookup("env", "AWS_SECURITY_TOKEN") }}'

22.4.2. Ansible Galaxy/Automation Hub API トークン認証情報タイプ

Ansible Galaxy にアクセスするか、Private Automation Hub のインスタンスで公開されたコレクションを使用するには、この認証情報を選択します。

この画面で Galaxy サーバーの URL を入力します。

Red Hat Hybrid Cloud ConsoleGalaxy Server URL フィールドに Server URL フィールドの内容を入力します。Red Hat Hybrid Cloud Console で、Auth Server URL フィールドに SSO URL フィールドの内容を入力します。

関連情報

詳細は、Automation Hub でのコレクションの使用 を参照してください。

22.4.3. AWS Secrets Manager Lookup

これはシークレット管理機能の一部とみなされます。詳細は、AWS Secrets Manager Lookup を参照してください。

22.4.4. BitBucket data center HTTP access token

Bitbucket Data Center は、コラボレーションと管理のためのセルフホスト型 Git リポジトリーです。HTTPS 経由の Git のパスワードの代わりに HTTP アクセストークンを使用できるようにするには、この認証情報タイプを選択します。

詳細は、Bitbucket Data Center ドキュメントの HTTP access tokens を参照してください。

22.4.5. Centrify Vault Credential Provider Lookup 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、Centrify Vault Credential Provider Lookup を参照してください。

22.4.6. Container Registry 認証情報タイプ

Automation Controller がコンテナーイメージのコレクションにアクセスできるようにするには、この認証情報を選択します。詳細は、What is a container registry? を参照してください。

名前を指定する必要があります。Authentication URL フィールドにはデフォルト値が事前に入力されています。値を変更するには、別のコンテナーレジストリーの認証エンドポイントを指定します。

22.4.7. CyberArk Central Credential Provider Lookup 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、CyberArk Central Credential Provider (CCP) Lookup を参照してください。

22.4.8. CyberArk Conjur Secrets Manager Lookup 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、CyberArk Conjur Secrets Manager Lookup を参照してください。

22.4.9. GitHub Personal Access Token 認証情報タイプ

この認証情報を選択すると、GitHub から取得できる Personal Access Token (PAT) を使用して GitHub にアクセスできるようになります。

詳細は、GitHub Webhook の設定 を参照してください。

GitHub PAT の認証情報では、Token フィールドに値が必要です。これは GitHub プロファイル設定で提供されます。

この認証情報は、Webhook リスナージョブで使用する GitHub への API 接続を確立し、ステータスの更新を送信 (Post) するために使用できます。

22.4.10. GitLab Personal Access Token 認証情報タイプ

この認証情報を選択すると、GitLab から取得できる Personal Access Token (PAT) を使用して GitLab にアクセスできるようになります。

詳細は、GitLab Webhook の設定 を参照してください。

GitLab PAT の認証情報では、Token フィールドに値が必要です。これは GitLab プロファイル設定で提供されていす。

この認証情報は、Webhook リスナージョブで使用する GitLab への API 接続を確立し、ステータスの更新を送信 (Post) するために使用できます。

22.4.11. Google Compute Engine 認証情報タイプ

この認証情報を選択すると、クラウドインベントリーと Google Compute Engine (GCE) との同期が可能になります。

Automation Controller は、GCE 認証情報に次の環境変数を使用します。

GCE_EMAIL
GCE_PROJECT
GCE_CREDENTIALS_FILE_PATH

ユーザーインターフェイスでプロンプトが表示されるフィールドは次のとおりです。

GCE 認証情報には次の情報が必要です。

  • サービスアカウントのメールアドレス: Google Compute Engine サービスアカウント に割り当てられるメールアドレス。
  • オプション: Project: GCE によって割り当てられた ID またはプロジェクト作成時に指定した一意のプロジェクト ID を指定します。
  • オプション: Service Account JSON File: GCE サービスアカウントファイルをアップロードします。Browse をクリックして、GCE インスタンスで実行されているサービスやアプリケーションが他の Google Cloud API とやり取りするために使用できる特別なアカウント情報を含むファイルを参照します。これにより、サービスアカウントと仮想マシンインスタンスにパーミッションが付与されます。
  • RSA 秘密鍵: サービスアカウントメールに関連付けられる PEM ファイル。
22.4.11.1. Ansible Playbook で Google Compute Engine の認証情報にアクセスする

GCE 認証情報パラメーターはジョブランタイム環境から取得できます。

vars:
  gce:
    email: '{{ lookup("env", "GCE_EMAIL") }}'
    project: '{{ lookup("env", "GCE_PROJECT") }}'
    pem_file_path: '{{ lookup("env", "GCE_PEM_FILE_PATH") }}'

22.4.12. GPG Public Key 認証情報タイプ

この認証情報タイプを選択すると、ソースコントロールから同期するときに Automation Controller がプロジェクトの整合性を検証できるようになります。

有効なキーペアを生成する方法、CLI ツールを使用してコンテンツに署名する方法、およびコントローラーに公開鍵を追加する方法の詳細は、プロジェクトの署名と検証 を参照してください。

22.4.13. HashiCorp Vault Secret Lookup 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、HashiCorp Vault Secret Lookup を参照してください。

22.4.14. HashiCorp Vault Signed SSH 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、HashiCorp Vault Signed SSH を参照してください。

22.4.15. Insights 認証情報タイプ

Red Hat Insights とクラウドインベントリーの同期を有効にするには、この認証情報タイプを選択します。

Insights 認証情報は Insights の ユーザー名パスワード で、これはユーザーの Red Hat カスタマーポータルアカウントのユーザー名とパスワードです。

Insights の extra_vars および env インジェクターは次のとおりです。

ManagedCredentialType(
    namespace='insights',
....
....
....

injectors={
        'extra_vars': {
            "scm_username": "{{username}}",
            "scm_password": "{{password}}",
        },
        'env': {
            'INSIGHTS_USER': '{{username}}',
            'INSIGHTS_PASSWORD': '{{password}}',
        },

22.4.16. Machine 認証情報タイプ

Machine 認証情報を使用すると、Automation Controller は管理下のホスト上で Ansible を呼び出すことができます。SSH ユーザー名を指定して、必要に応じてパスワード、SSH 鍵、キーパスワードを指定したり、デプロイ時に Automation Controller がユーザーにパスワードの入力を求めるようにしたりできます。これらは、Playbook に対する SSH およびユーザーレベルの権限昇格アクセスを定義し、リモートホストで Playbook を実行するジョブを送信するときに使用されます。

ネットワーク接続 httpapinetconfnetwork_cli では、認証情報タイプとして Machine を使用します。

Machine/SSH 認証情報は、環境変数を使用しません。これらの認証情報は、ansible -u フラグを介してユーザー名を渡し、基盤となる SSH クライアントが SSH パスワードを要求したときにパスワードを対話的に書き込みます。

Machine 認証情報には次の入力が必要です。

  • Username: SSH 認証に使用するユーザー名。
  • Password: SSH 認証に使用するパスワード。このパスワードは、入力されると暗号化されてデータベースに保存されます。あるいは、Prompt on launch を選択して、起動時にユーザーにパスワードを要求するように Automation Controller を設定することもできます。このような場合、ジョブの起動時にダイアログが開き、ユーザーがパスワードとパスワードの確認を求められます。
  • SSH Private Key: マシン認証情報の SSH 秘密鍵をコピーまたはドラッグアンドドロップします。
  • Private Key Passphrase: 使用する SSH 秘密鍵がパスワードで保護されている場合は、秘密鍵のキーパスフレーズを設定できます。このパスワードは、入力されると暗号化されてデータベースに保存されます。Prompt on launch を選択して、起動時にユーザーにキーパスフレーズの入力を求めるように Automation Controller を設定することもできます。選択した場合、ジョブの起動時にダイアログが開き、ユーザーにキーパスフレーズの入力と確認を求めます。
  • Privilege Escalation Method: 特定のユーザーに割り当てる昇格権限のタイプを指定します。これは、--become-method=BECOME_METHOD パラメーターを指定するのと同じです。BECOME_METHOD は、既存の方法のいずれか、または作成したカスタムの方法です。方法の名前の入力を開始すると、適切な名前が自動入力されます。

    • 選択なし: タスクまたはプレイの becomeyes に設定されており、何も選択されていない場合は、デフォルトで sudo に設定されます。
    • sudo: スーパーユーザー (root ユーザー) 権限で単一のコマンドを実行します。
    • su: スーパーユーザー (root ユーザー) アカウント (または他のユーザーアカウント) に切り替えます。
    • pbrun: 制御されたアカウントでアプリケーションまたはコマンドが実行されるように要求し、詳細レベルの root 権限の委譲およびキーのロギングを可能にします。
    • pfexec: 特定のユーザー ID やグループ ID など、定義済みのプロセス属性を使用してコマンドを実行します。
    • dzdo: Centrify の Active Directory サービスの RBAC 情報を使用する sudo の拡張バージョン。詳細は、DZDO のサイト を参照してください。
    • pmrun: 制御されたアカウントでアプリケーションが実行されるように要求します。Privilege Manager for Unix 6.0 を参照してください。
    • runas: 現在のユーザーとして実行できるようにします。
    • enable: ネットワークデバイスで昇格された権限に切り替えます。
    • doas: リモート/ログインユーザーが doas ("Do as user") ユーティリティーを通じて別のユーザーとしてコマンドを実行できるようにします。
    • ksu: リモート/ログインユーザーが Kerberos アクセスで別のユーザーとしてコマンドを実行できるようにします。
    • machinectl: systemd マシンマネージャーを使用してコンテナーを管理できるようにします
    • sesu: リモート/ログインユーザーが CA Privileged Access Manager を使用して別のユーザーとしてコマンドを実行できるようにします。
注記

カスタムの become プラグインは Ansible 2.8 以降から利用可能です。詳細は、Understanding privilege escalationBecome plugins のリストを参照してください。

  • Privilege Escalation Username: 権限昇格のオプションを選択した場合にのみ、このフィールドが表示されます。リモートシステム上で昇格権限で使用するユーザー名を入力します。
  • Privilege Escalation Password: 権限昇格のオプションを選択した場合にのみ、このフィールドが表示されます。選択した権限昇格タイプによりリモートシステムでユーザーを認証するために使用するパスワードを入力します。このパスワードはデータベースに暗号化されて保存されます。Prompt on launch を選択して、起動時にユーザーにパスワードを要求するように Automation Controller を設定することもできます。このような場合、ジョブの起動時にダイアログが開き、ユーザーがパスワードとパスワードの確認を求められます。
注記

sudo パスワードは SSH パスワードまたは SSH 秘密鍵と組み合わせて使用する必要があります。Automation Controller は、sudo を呼び出して sudo ユーザーに変更する前に、まずホストとの認証された SSH 接続を確立する必要があるためです。

警告

スケジュール済みジョブで使用される認証情報は、Prompt on launch として設定しないでください。

22.4.16.1. Ansible Playbook でマシンの認証情報にアクセスする

ユーザー名とパスワードは Ansible ファクトから取得できます。

vars:
  machine:
    username: '{{ ansible_user }}'
    password: '{{ ansible_password }}'

22.4.17. Microsoft Azure Key Vault 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、Microsoft Azure Key Vault を参照してください。

22.4.18. Microsoft Azure Resource Manager 認証情報タイプ

Microsoft Azure Resource Manager とクラウドインベントリーの同期を有効にするには、この認証情報タイプを選択します。

Microsoft Azure Resource Manager の認証情報には次を入力する必要があります。

  • Subscription ID: Microsoft Azure アカウントのサブスクリプション UUID。
  • Username: Microsoft Azure アカウントに接続するために使用するユーザー名。
  • Password: Microsoft Azure アカウントに接続するために使用するパスワード。
  • Client ID: Microsoft Azure アカウントのクライアント ID。
  • Client Secret: Microsoft Azure アカウントのクライアントシークレット。
  • Tenant ID: Microsoft Azure アカウントのテナント ID。
  • Azure クラウド環境: Azure クラウドまたは Azure スタック環境に関連付けられる変数。

これらのフィールドは、API の変数に相当します。

サービスプリンシパルの認証情報を渡すには、以下の変数を定義します。

AZURE_CLIENT_ID
AZURE_SECRET
AZURE_SUBSCRIPTION_ID
AZURE_TENANT
AZURE_CLOUD_ENVIRONMENT

Active Directory のユーザー名およびパスワードのペアを渡すには、以下の変数を定義します。

AZURE_AD_USER
AZURE_PASSWORD
AZURE_SUBSCRIPTION_ID

認証情報をパラメーターとして Playbook 内のタスクに渡すこともできます。優先順位は、パラメーター、次に環境変数、最後にホームディレクトリーにあるファイルになります。

認証情報をパラメーターとしてタスクに渡すには、サービスプリンシパルの認証情報に関する以下のパラメーターを使用します。

client_id
secret
subscription_id
tenant
azure_cloud_environment

あるいは、Active Directory のユーザー名/パスワードに次のパラメーターを渡します。

ad_user
password
subscription_id
22.4.18.1. Ansible Playbook で Microsoft Azure リソースマネージャーの認証情報にアクセスする

Microsoft Azure 認証情報パラメーターはジョブランタイム環境から取得できます。

vars:
  azure:
    client_id: '{{ lookup("env", "AZURE_CLIENT_ID") }}'
    secret: '{{ lookup("env", "AZURE_SECRET") }}'
    tenant: '{{ lookup("env", "AZURE_TENANT") }}'
    subscription_id: '{{ lookup("env", "AZURE_SUBSCRIPTION_ID") }}'

22.4.19. Network 認証情報タイプ

注記

プロバイダー との ローカル 接続で Ansible ネットワークモジュールを使用してネットワークデバイスに接続および管理する場合は、Network 認証情報タイプを選択します。

ネットワークデバイスに接続する場合、認証情報タイプが接続の種類と一致する必要があります。

  • provider を使用した local 接続の場合は、認証情報タイプは Network に指定する必要があります。
  • それ以外のネットワーク接続 (httpapinetconf、および network_cli) は、認証情報タイプは Machine に指定する必要があります。

ネットワークデバイスで使用できる接続タイプの詳細は、複数の通信プロトコル を参照してください。

Automation Controller は、ネットワーク認証情報に次の環境変数を使用します。

ANSIBLE_NET_USERNAME
ANSIBLE_NET_PASSWORD

ネットワーク認証情報として次の情報を提供します。

  • Username: ネットワークデバイスと組み合わせて使用するユーザー名。
  • Password: ネットワークデバイスと組み合わせて使用するパスワード。
  • SSH Private Key: ユーザーを SSH 経由でネットワークに対して認証するために使用される実際の SSH 秘密鍵をコピーするか、またはドラッグアンドドロップします。
  • Private Key Passphrase: SSH 経由でネットワークに対してユーザーを認証するための秘密鍵のパスフレーズ。
  • Authorize: 特権モードに入るかどうかを制御するには、これを選択します。

    • Authorize チェックボックスをオンにした場合は、Authorize Password フィールドに、特権モードにアクセスするためのパスワードを入力ます。

詳細は、新しい接続プラグインを使用した Ansible Network Playbook の移植 を参照してください。

22.4.19.1. Ansible Playbook でネットワークの認証情報にアクセスする

ユーザー名とパスワードのパラメーターはジョブランタイム環境から取得できます。

vars:
  network:
    username: '{{ lookup("env", "ANSIBLE_NET_USERNAME") }}'
    password: '{{ lookup("env", "ANSIBLE_NET_PASSWORD") }}'
22.4.19.2. 複数の通信プロトコル

ネットワークモジュールは、管理対象ノードではなくコントロールノードで実行されるため、複数の通信プロトコルをサポートできます。各ネットワークモジュール用に選択される通信プロトコル (XML over SSH、CLI over SSH、または API over HTTPS) は、プラットフォームとモジュールの目的によって異なります。1 つのプロトコルしかサポートしていないネットワークモジュールもあれば、プロトコルの選択肢を提供するモジュールもあります。

最も一般的なプロトコルは CLI over SSH です。通信プロトコルは、ansible_connection 変数で設定します。

Expand
ansible_connection の値プロトコル必須永続的

ansible.netcommon.network_cli

CLI over SSH

network_os の設定

はい

ansible.netcommon.netconf

XML over SSH

network_os の設定

はい

ansible.netcommon.httpapi

API over HTTP/HTTPS

network_os の設定

はい

local

プロバイダーによって異なる

プロバイダー設定

いいえ

ansible_connection: local は非推奨です。代わりに、上記のいずれかの永続的な接続タイプを使用してください。永続的な接続を使用すると、ホストと認証情報をタスクごとに定義するのではなく、一度定義するだけで済みます。また、通信先の特定のネットワークプラットフォームに合わせて network_os 変数を設定する必要があります。

22.4.20. OpenShift or Kubernetes API Bearer Token 認証情報タイプ

Kubernetes または OpenShift コンテナーを参照するインスタンスグループを作成するには、この認証情報タイプを選択します。

詳細は、インスタンスとコンテナーグループ を参照してください。

コンテナーの認証情報として次の情報を提供します。

  • OpenShift or Kubernetes API Endpoint (必須): OpenShift または Kubernetes コンテナーへの接続に使用されるエンドポイントです。
  • API authentication bearer token (必須): 接続の認証に使用されるトークンです。
  • オプション: Verify SSL: このオプションをオンにすると、サーバーの SSL/TLS 証明書が有効で信頼できるかどうかを検証できます。内部またはプライベートの 認証局 (CA) を使用する環境で検証を無効にするには、このオプションをオフのままにする必要があります。
  • Certificate Authority data: 証明書を貼り付けるときに BEGIN CERTIFICATEEND CERTIFICATE の行を含めます (提供されている場合)。

コンテナーグループは、OpenShift クラスターへの接続を可能にする認証情報が関連付けられているインスタンスグループの一種です。コンテナーグループを設定するには、次の項目が必要です。

  • 最初に入ることができる namespace。すべてのクラスターにデフォルトの namespace がありますが、特定の namespace を使用することもできます。
  • この namespace で Pod を起動および管理できるロールを持つサービスアカウント。
  • プライベートレジストリーで実行環境を使用しており、Automation Controller でコンテナーレジストリー認証情報がその実行環境に関連付けられている場合、サービスアカウントには、namespace でシークレットを取得、作成、削除するためのロールも必要です。

    これらのロールをサービスアカウントに付与しない場合は、ImagePullSecrets を事前に作成し、コンテナーグループの Pod 仕様でそれらのロールを指定できます。この場合、実行環境にコンテナーレジストリーの認証情報を関連付けることはできません。関連付けられている場合、Automation Controller は namespace にシークレットを作成しようとします。

  • そのサービスアカウントに関連付けられたトークン (OpenShift または Kubernetes Bearer トークン)
  • クラスターに関連付けられた CA 証明書
22.4.20.1. Openshift クラスターでのサービスアカウントの作成

Automation Controller を介してコンテナーグループ内のジョブを実行するために使用するサービスアカウントを、Openshift または Kubernetes クラスターに作成します。サービスアカウントを作成すると、その認証情報が OpenShift または Kubernetes API Bearer Token 認証情報の形式で Automation Controller に提供されます。

サービスアカウントを作成したら、新しいサービスアカウントの情報を使用して Automation Controller を設定します。

手順

  1. サービスアカウントを作成するために、サンプルのサービスアカウント containergroup sa をダウンロードして使用します。認証情報を取得するために必要に応じて変更します。

    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: containergroup-service-account
      namespace: containergroup-namespace
    ---
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: role-containergroup-service-account
      namespace: containergroup-namespace
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    - apiGroups: [""]
      resources: ["pods/log"]
      verbs: ["get"]
    - apiGroups: [""]
      resources: ["pods/attach"]
      verbs: ["get", "list", "watch", "create"]
    ---
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: role-containergroup-service-account-binding
      namespace: containergroup-namespace
    subjects:
    - kind: ServiceAccount
      name: containergroup-service-account
      namespace: containergroup-namespace
    roleRef:
      kind: Role
      name: role-containergroup-service-account
      apiGroup: rbac.authorization.k8s.io
  2. containergroup-sa.yml から設定を適用します。

    oc apply -f containergroup-sa.yml
  3. サービスアカウントに関連付けられているシークレット名を取得します。

    export SA_SECRET=$(oc get sa containergroup-service-account -o json | jq '.secrets[0].name' | tr -d '"')
  4. シークレットからトークンを取得します。

    oc get secret $(echo ${SA_SECRET}) -o json | jq '.data.token' | xargs | base64 --decode > containergroup-sa.token
  5. CA 証明書を取得します。

    oc get secret $SA_SECRET -o json | jq '.data["ca.crt"]' | xargs | base64 --decode > containergroup-ca.crt
  6. containergroup-sa.token および containergroup-ca.crt の内容を使用して、コンテナーグループに必要な OpenShift or Kubernetes API Bearer Token の情報を提供します。

22.4.21. OpenStack 認証情報タイプ

クラウドインベントリーと OpenStack の同期を有効にするには、この認証情報タイプを選択します。

OpenStack 認証情報として次の情報を入力します。

  • Username: OpenStack への接続に使用するユーザー名。
  • Password (API Key): OpenStack への接続に使用するパスワードまたは API キー。
  • Host (Authentication URL): 認証に使用するホスト。
  • Project (Tenant Name): OpenStack に使用されるテナント名またはテナント ID。この値は通常、ユーザー名と同じです。
  • オプション: Project (Domain Name): ドメインに関連付けるプロジェクト名を指定します。
  • オプション: Domain Name: OpenStack への接続に使用する FQDN を指定します。
  • オプション: Region Name: リージョン名を指定します。OVH などの一部のクラウドプロバイダーでは、リージョンを指定する必要があります。

OpenStack クラウド認証情報を使用する場合は、クラウドインベントリーでのクラウド認証情報の使用 を参照してください。これにはサンプル Playbook が含まれています。

22.4.22. Red Hat Ansible Automation Platform 認証情報タイプ

別の Automation Controller インスタンスにアクセスするには、この認証情報を選択します。

Ansible Automation Platform の認証情報には次の入力が必要です。

  • Red Hat Ansible Automation Platform: 接続先の他のインスタンスのベース URL または IP アドレス。
  • Username: 接続に使用するユーザー名。
  • Password: 接続に使用するパスワード。
  • Oauth Token: ユーザー名とパスワードが使用されない場合は、認証に使用する OAuth トークンを指定します。

Ansible Automation Platform の env インジェクターは次のとおりです。

ManagedCredentialType(
    namespace='controller',

....
....
....

injectors={
        'env': {
            'TOWER_HOST': '{{host}}',
            'TOWER_USERNAME': '{{username}}',
            'TOWER_PASSWORD': '{{password}}',
            'TOWER_VERIFY_SSL': '{{verify_ssl}}',
            'TOWER_OAUTH_TOKEN': '{{oauth_token}}',
            'CONTROLLER_HOST': '{{host}}',
            'CONTROLLER_USERNAME': '{{username}}',
            'CONTROLLER_PASSWORD': '{{password}}',
            'CONTROLLER_VERIFY_SSL': '{{verify_ssl}}',
            'CONTROLLER_OAUTH_TOKEN': '{{oauth_token}}',
        }
22.4.22.1. Ansible Playbook で Automation Controller の認証情報にアクセスする

ホスト、ユーザー名、パスワードのパラメーターはジョブランタイム環境から取得できます。

vars:
  controller:
    host: '{{ lookup("env", "CONTROLLER_HOST") }}'
    username: '{{ lookup("env", "CONTROLLER_USERNAME") }}'
    password: '{{ lookup("env", "CONTROLLER_PASSWORD") }}'

22.4.23. Red Hat Satellite 6 認証情報タイプ

Red Hat Satellite 6 とクラウドインベントリーの同期を有効にするには、この認証情報タイプを選択します。

Automation Controller は、ユーザーインターフェイスで要求されたフィールドをもとに Satellite 設定ファイルを書き込みます。ファイルへの絶対パスは、次の環境変数に設定されます。

FOREMAN_INI_PATH

Satellite 認証情報には次の入力が必要になります。

  • Satellite 6 URL: 接続先の Satellite 6 URL または IP アドレス。
  • ユーザー名: Satellite 6 への接続に使用するユーザー名。
  • パスワード: Satellite 6 への接続に使用するパスワード。

22.4.24. Red Hat Virtualization 認証情報タイプ

この認証情報を選択すると、Automation Controller が Red Hat Virtualization によって管理される Ansible の oVirt4.py 動的インベントリープラグインにアクセスできるようになります。

Automation Controller は、Red Hat Virtualization 認証情報に次の環境変数を使用します。ユーザーインターフェイスのフィールドは次のとおりです。

OVIRT_URL
OVIRT_USERNAME
OVIRT_PASSWORD

Red Hat Virtualization 認証情報として次の情報を提供します。

  • ホスト (認証 URL): 接続するホスト URL または IP アドレス。インベントリーと同期するには、認証情報 URL に ovirt-engine/api パスが含まれている必要があります。
  • ユーザー名: oVirt4 への接続に使用するユーザー名。正常に実行させるには、ドメインプロファイル (例: username@ovirt.host.com) が含まれている必要があります。
  • Password: 接続に使用するパスワード。
  • オプション: CA File: oVirt 証明書ファイルへの絶対パスを指定します (拡張子は .pem.cer.crt である可能性がありますが、一貫性を保つために .pem を推奨します)。
22.4.24.1. Ansible Playbook で Virtualization の認証情報にアクセスする

ジョブランタイム環境から Red Hat Virtualization 認証情報パラメーターを取得できます。

vars:
  ovirt:
    ovirt_url: '{{ lookup("env", "OVIRT_URL") }}'
    ovirt_username: '{{ lookup("env", "OVIRT_USERNAME") }}'
    ovirt_password: '{{ lookup("env", "OVIRT_PASSWORD") }}'

Red Hat Virtualization の file および env インジェクターは次のとおりです。

ManagedCredentialType(
    namespace='rhv',

....
....
....

injectors={
        # The duplication here is intentional; the ovirt4 inventory plugin
        # writes a .ini file for authentication, while the ansible modules for
        # ovirt4 use a separate authentication process that support
        # environment variables; by injecting both, we support both
        'file': {
            'template': '\n'.join(
                [
                    '[ovirt]',
                    'ovirt_url={{host}}',
                    'ovirt_username={{username}}',
                    'ovirt_password={{password}}',
                    '{% if ca_file %}ovirt_ca_file={{ca_file}}{% endif %}',
                ]
            )
        },
        'env': {'OVIRT_INI_PATH': '{{tower.filename}}', 'OVIRT_URL': '{{host}}', 'OVIRT_USERNAME': '{{username}}', 'OVIRT_PASSWORD': '{{password}}'},
    },
)

22.4.25. Source Control 認証情報タイプ

Source Control 認証情報は、Git や Subversion などのリモートリビジョン管理システムからローカルソースコードリポジトリーを複製および更新するためにプロジェクトで使用されます。

ソースコントロールの認証情報には次の入力が必要です。

  • ユーザー名: ソースコントロールシステムと併用するユーザー名。
  • パスワード: ソースコントロールシステムと併用するパスワード。
  • SCM 秘密鍵: ユーザーを SSH 経由でソースコントロールシステムに対して認証するために使用される実際の SSH 秘密鍵をコピーするか、またはドラッグアンドドロップします。
  • 秘密鍵のパスフレーズ: 使用される SSH 秘密鍵がパスフレーズで保護される場合、秘密鍵のパスフレーズを設定できます。
注記

Source Control 認証情報を Prompt on launch として設定することはできません。

Source Control 認証情報に GitHub アカウントを使用しており、アカウントで 2FA (2 要素認証) が有効になっている場合は、パスワードフィールドで、アカウントのパスワードではなく Personal Access Token を使用する必要があります。

22.4.26. Terraform バックエンド設定

Terraform は、さまざまなインフラストラクチャータスクを自動化するために使用される HashiCorp ツールです。Terraform インベントリーソースとの同期を有効にするには、この認証情報タイプを選択します。

Terraform 認証情報には、Terraform バックエンドブロック からのデータを含む Backend configuration 属性が必要です。この属性を保存すると、バックエンド設定へのファイルパスが環境変数 TF_BACKEND_CONFIG_FILE に格納され、この環境変数が、認証情報がアタッチされたすべてのジョブで使用できるようになります。

ファイルを貼り付けたり、ドラッグしたり、参照してアップロードしたり、 Key アイコンをクリックして外部の シークレット管理システム からフィールドに入力したりできます。

Terraform バックエンド設定には次の入力が必要です。

  • Name
  • Credential type: Terraform backend configuration を選択します。
  • オプション: Organization
  • オプション: Description
  • Backend configuration: ファイルをここにドラッグするか、参照してアップロードします。

    S3 バックエンドの設定例:

    bucket = "my-terraform-state-bucket"
    key = "path/to/terraform-state-file"
    region = "us-east-1"
    access_key = "my-aws-access-key"
    secret_key = "my-aws-secret-access-key"
  • オプション: Google Cloud Platform アカウントの認証情報

22.4.27. Thycotic DevOps Secrets Vault 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、Thycotic DevOps Secrets Vault を参照してください。

22.4.28. Thycotic Secret Server 認証情報タイプ

これはシークレット管理機能の一部とみなされます。

詳細は、Thycotic Secret Server を参照してください。

22.4.29. Ansible Vault 認証情報タイプ

Ansible Vault とのインベントリーの同期を有効にするには、この認証情報タイプを選択します。

Vault 認証情報では、Vault パスワード と、オプションで複数の Vault 認証情報が適用される場合には Vault 識別子 が必要です。

あるいは、Prompt on launch を選択して、起動時にユーザーにパスワードを要求するように Automation Controller を設定することもできます。

Prompt on launch を選択すると、ジョブの起動時にダイアログが開き、ユーザーがパスワードの入力を求められます。

警告

スケジュール済みジョブで使用される認証情報は、Prompt on launch として設定しないでください。

Ansible Vault の詳細は、Ansible Vault による機密データの保護 を参照してください。

22.4.30. VMware vCenter 認証情報タイプ

VMware vCenter とのインベントリーの同期を有効にするには、この認証情報タイプを選択します。

Automation Controller は、VMware vCenter 認証情報に次の環境変数を使用します。

VMWARE_HOST
VMWARE_USER
VMWARE_PASSWORD
VMWARE_VALIDATE_CERTS

これらは、ユーザーインターフェイスでプロンプトが表示されるフィールドです。

VMware 認証情報には次の入力が必要です。

  • vCenter ホスト: 接続先の vCenter ホスト名または IP アドレス。
  • ユーザー名: vCenter への接続に使用するユーザー名。
  • パスワード: vCenter への接続に使用するパスワード。
注記

VMware ゲストツールがインスタンスで実行されていない場合、VMware インベントリーの同期により、そのインスタンスの IP アドレスが返されません。

22.4.30.1. Ansible Playbook で VMware vCenter の認証情報にアクセスする

VMware vCenter 認証情報パラメーターはジョブランタイム環境から取得できます。

vars:
  vmware:
    host: '{{ lookup("env", "VMWARE_HOST") }}'
    username: '{{ lookup("env", "VMWARE_USER") }}'
    password: '{{ lookup("env", "VMWARE_PASSWORD") }}'

22.5. Playbook での Automation Controller 認証情報の使用

次の Playbook は、Playbook で Automation Controller 認証情報を使用する方法の例です。

- hosts: all

  vars:
    machine:
      username: '{{ ansible_user }}'
      password: '{{ ansible_password }}'
    controller:
      host: '{{ lookup("env", "CONTROLLER_HOST") }}'
      username: '{{ lookup("env", "CONTROLLER_USERNAME") }}'
      password: '{{ lookup("env", "CONTROLLER_PASSWORD") }}'
    network:
      username: '{{ lookup("env", "ANSIBLE_NET_USERNAME") }}'
      password: '{{ lookup("env", "ANSIBLE_NET_PASSWORD") }}'
    aws:
      access_key: '{{ lookup("env", "AWS_ACCESS_KEY_ID") }}'
      secret_key: '{{ lookup("env", "AWS_SECRET_ACCESS_KEY") }}'
      security_token: '{{ lookup("env", "AWS_SECURITY_TOKEN") }}'
    vmware:
      host: '{{ lookup("env", "VMWARE_HOST") }}'
      username: '{{ lookup("env", "VMWARE_USER") }}'
      password: '{{ lookup("env", "VMWARE_PASSWORD") }}'
    gce:
      email: '{{ lookup("env", "GCE_EMAIL") }}'
      project: '{{ lookup("env", "GCE_PROJECT") }}'
    azure:
      client_id: '{{ lookup("env", "AZURE_CLIENT_ID") }}'
      secret: '{{ lookup("env", "AZURE_SECRET") }}'
      tenant: '{{ lookup("env", "AZURE_TENANT") }}'
      subscription_id: '{{ lookup("env", "AZURE_SUBSCRIPTION_ID") }}'

  tasks:
    - debug:
        var: machine

    - debug:
        var: controller

    - debug:
        var: network

    - debug:
        var: aws

    - debug:
        var: vmware

    - debug:
        var: gce

    - shell: 'cat {{ gce.pem_file_path }}'
      delegate_to: localhost

    - debug:
        var: azure
'delegate_to' と任意の検索変数の使用
- command: somecommand
  environment:
    USERNAME: '{{ lookup("env", "USERNAME") }}'
    PASSWORD: '{{ lookup("env", "PASSWORD") }}'
  delegate_to: somehost

第23章 カスタム認証情報タイプ

システム管理者は、YAML または JSON のような定義を使用して、標準形式でカスタム認証情報タイプを定義できます。既存の認証情報タイプと同様に機能するカスタム認証情報タイプを定義できます。たとえば、カスタム認証情報タイプを使用すると、Playbook やカスタムインベントリースクリプトで使用できるように、サードパーティーの Web サービスの API トークンを環境変数に注入できます。

カスタム認証情報は、認証情報を注入する以下の方法をサポートします。

  • 環境変数
  • Ansible の追加変数
  • ファイルベースのテンプレート (認証情報の値が含まれる .ini または .conf ファイルの生成)

1 つの SSH 認証情報と複数のクラウド認証情報をジョブテンプレートにアタッチできます。クラウド認証情報ごとに、違う種類を指定する必要があります。各タイプの認証情報は 1 つだけ許可されます。Vault の認証情報とマシンの認証情報は別個のエンティティーです。

注記
  • 新しい認証情報タイプを作成するときは、extra_varsenv、およびファイルの名前空間での競合を回避する必要があります。
  • 環境変数または追加変数の名前は予約されているため、ANSIBLE_ で始めることはできません。
  • 認証情報タイプ (CredentialType) の作成および編集と CredentialType.injection フィールドの表示をできるようにするには、システム管理者 (スーパーユーザー) パーミッションが必要です。

23.1. コレクションからのコンテンツ収集

「マネージド」認証情報タイプである kind=galaxy は、プロジェクトの更新を実行するときに requirements.yml で定義されたコレクションを取得するためのコンテンツソースを表します。コンテンツソースの例としては、galaxy.ansible.com、console.redhat.com、オンプレミス Automation Hub などがあります。この新しい認証情報タイプは、Ansible ドキュメントの Configuring the ansible-galaxy client で説明されているように、プロジェクトの更新で ansible-galaxy collection install 実行時に環境変数を構築するために必要な URL と (オプションの) 認証の詳細を表します。この認証情報タイプには、Ansible Galaxy CLI に公開される設定オプション (サーバーごとなど) に直接マップするフィールドがあります。

API のエンドポイントは、組織レベルでのこれらの認証情報の順序付きリストを反映します。

/api/v2/organizations/N/galaxy_credentials/

Automation Controller のインストールで既存の Galaxy 指向の設定値が移行されると、アップグレード後の適切な認証情報が作成され、すべての組織にアタッチされます。最新バージョンにアップグレードすると、アップグレード前に存在していたすべての組織に、関連付けられた 1 つ以上の"Galaxy" 認証情報のリストが作成されます。

さらに、アップグレード後は、これらの設定は /api/v2/settings/jobs/ エンドポイントから表示 (または編集) できなくなります。

Automation Controller は、galaxy.ansible.com が組織のリストの最初の認証情報でない場合でも、パブリック Galaxy から直接ロールを取得し続けます。グローバルな Galaxy 設定は、ジョブレベルではなく、ユーザーインターフェイスの組織レベルで設定されます。

組織の Create organization および Edit organization ウィンドウに、kind=galaxy の認証情報用のオプションの Galaxy Edit organization 検索フィールドがあります。

Create organization

順序によりコンテンツの同期と検索の優先順位が設定されるため、これらの認証情報の順序を指定することが重要です。詳細は、組織の作成 を参照してください。

コレクションを使用してプロジェクトを設定する方法の詳細は、Automation Hub でのコレクションの使用 を参照してください。

23.2. 後方互換 API の留意事項

バージョン 2 の API (api/v2/) がサポートされている場合、ジョブテンプレートと認証情報の一対多の関係を使用できます (マルチクラウドサポートを含む)。

v2 の API では、認証情報をフィルタリングできます。

curl "https://controller.example.org/api/v2/credentials/?credential_type__namespace=aws"

V2 Credential Type モデルでは、リレーションシップは以下のように定義されます。

Expand
マシンSSH

Vault

Vault

ネットワーク

環境変数を設定します (ANSIBLE_NET_AUTHORIZE など)。

SCM

ソースコントロール

クラウド

EC2、AWS

クラウド

その他多数

Insights

Insights

Galaxy

galaxy.ansible.com、console.redhat.com

Galaxy

オンプレミス Automation Hub

23.3. 内容検証

Automation Controller は GNU Privacy Guard (GPG) を使用してコンテンツを検証します。

詳細は、GNU プライバシーハンドブック を参照してください。

23.4. 認証情報タイプの使用開始

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureCredentials を選択します。カスタム認証情報タイプが作成されていない場合は、Credential Types ページで認証情報タイプを追加するように求められます。

    認証情報タイプが作成されていると、このページには、既存および利用可能な認証情報タイプのリストが表示されます。

  2. 認証情報タイプに関する詳細情報を表示するには、認証情報の名前または編集アイコン Edit をクリックします。
  3. Details タブで、該当する場合、各認証情報タイプごとに、Input Configuration フィールドと Injector Configuration フィールドに独自の設定が表示されます。YAML 形式と JSON 形式の両方が設定フィールドでサポートされています。

23.5. 新しい認証情報タイプの作成

新規の認証情報タイプを作成するには、以下を実行します。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureCredentials を選択します。
  2. Credential Types ビューで、Create credential type をクリックします。
  3. Name および Description フィールドに詳細を入力します。

    注記

    カスタムの認証タイプには無効であるため、認証タイプを新規作成する際には、INPUT 名、INJECTOR 名および ID に、ANSIBLE_ で始まる予約済変数名を使用しないでください。

  4. Input configuration フィールドで、対象のタイプの順序付きフィールドのセットを定義する入力スキーマを指定します。形式は YAML または JSON です。

    YAML

    fields:
      - type: string
        id: username
        label: Username
      - type: string
        id: password
        label: Password
        secret: true
    required:
      - username
      - password

    YAML ページ でさらに YAML の例をご覧ください。

    JSON

    {
    "fields": [
      {
      "type": "string",
      "id": "username",
      "label": "Username"
      },
      {
      "secret": true,
      "type": "string",
      "id": "password",
      "label": "Password"
       }
      ],
     "required": ["username", "password"]
    }

    その他の JSON の例は、JSON Web サイト をご覧ください。

    JSON 形式の次の設定は、各フィールドとその使用方法を示しています。

    {
      "fields": [{
        "id": "api_token",    # required - a unique name used to reference the field value
    
        "label": "API Token", # required - a unique label for the field
    
        "help_text": "User-facing short text describing the field.",
    
        "type": ("string" | "boolean")   # defaults to 'string'
    
        "choices": ["A", "B", "C"]   # (only applicable to `type=string`)
    
        "format": "ssh_private_key"  # optional, can be used to enforce data format validity
                                     for SSH private key data (only applicable to `type=string`)
    
        "secret": true,       # if true, the field value will be encrypted
    
        "multiline": false    # if true, the field should be rendered as multi-line for input entry
                              # (only applicable to `type=string`)
    },{
        # field 2...
    },{
        # field 3...
    }],
    
    "required": ["api_token"]   # optional; one or more fields can be marked as required
    },

    type=string の場合、フィールドではオプションで複数の選択オプションから指定できます。

    {
      "fields": [{
          "id": "api_token",    # required - a unique name used to reference the field value
          "label": "API Token", # required - a unique label for the field
          "type": "string",
          "choices": ["A", "B", "C"]
      }]
    },
  5. Injector configuration フィールドに、認証情報タイプが注入できる値を指定する環境変数または追加変数を入力します。形式は YAML または JSON に指定できます (前の手順の例を参照)。

    JSON 形式の次の設定は、各フィールドとその使用方法を示しています。

    {
      "file": {
          "template": "[mycloud]\ntoken={{ api_token }}"
      },
      "env": {
          "THIRD_PARTY_CLOUD_API_TOKEN": "{{ api_token }}"
      },
      "extra_vars": {
          "some_extra_var": "{{ username }}:{{ password }}"
      }
    }

    認証情報タイプは、.ini ファイルまたは証明書/キーデータをサポートする一時ファイルも生成します。

    {
      "file": {
          "template": "[mycloud]\ntoken={{ api_token }}"
      },
      "env": {
          "MY_CLOUD_INI_FILE": "{{ tower.filename }}"
      }
    }

    この例では、Automation Controller が次の内容を含む一時ファイルを書き込みます。

    [mycloud]\ntoken=SOME_TOKEN_VALUE

    生成されるファイルへの絶対ファイルパスは、MY_CLOUD_INI_FILE という名前の環境変数に保存されます。

    以下は、カスタム認証情報テンプレートで多数のファイルを参照する例です。

    Inputs

    {
      "fields": [{
        "id": "cert",
        "label": "Certificate",
        "type": "string"
      },{
        "id": "key",
        "label": "Key",
        "type": "string"
      }]
    }

    Injectors

    {
      "file": {
        "template.cert_file": "[mycert]\n{{ cert }}",
        "template.key_file": "[mykey]\n{{ key }}"
    },
    "env": {
        "MY_CERT_INI_FILE": "{{ tower.filename.cert_file }}",
        "MY_KEY_INI_FILE": "{{ tower.filename.key_file }}"
    }
    }
  6. Create credential type をクリックします。

    新しく作成した認証情報タイプが、認証情報タイプのリストに表示されます。

    New credential type

  7. 編集アイコン Edit をクリックして、認証情報タイプのオプションを変更します。

    注記

    Edit 画面では、詳細の変更や、認証情報の削除ができます。Delete オプションが無効になっている場合は、その認証情報タイプが認証情報によって使用されています。認証情報タイプを削除する前に、それを使用しているすべての認証情報からその認証情報タイプを削除する必要があります。

検証

  • 新規の認証情報の作成時に、新規に作成された認証情報タイプを Credential Type 選択ウィンドウから選択できることを確認します。

Verify new credential type

関連情報

新しい認証情報を作成する方法は、認証情報の作成 を参照してください。

第24章 アクティビティーストリーム

  • ナビゲーションパネルから、Automation ExecutionAdministrationActivity Stream を選択します。

    Activity Stream ページ

アクティビティーストリームには、特定のオブジェクトの変更がすべて表示されます。アクティビティーストリームには、変更ごとに、イベントの時刻、イベントを開始したユーザー、およびアクションが表示されます。表示される情報はイベントの種類によって異なります。

  • Examine アイコンをクリックすると、変更のイベントログが表示されます。

    Activity stream details

アクティビティーストリームは、開始ユーザー、システム (システムによって開始された場合)、または認証情報、ジョブテンプレート、スケジュールなどの関連オブジェクトによってフィルタリングできます。アクティビティーストリームには、インスタンス全体のアクティビティーストリームが表示されます。ほとんどのページで、対象となる特定のオブジェクトに対してフィルタリングされたアクティビティーストリームを表示できます。

Activity Stream アイコン activitystream をクリックすると、どのページでもアクティビティーストリームを表示できます。

第25章 Notifiers

メール、Slack、Webhook などの 通知タイプ は、通知テンプレートのインスタンスであり、通知テンプレートで定義された名前、説明、設定を持ちます。

以下に、通知テンプレートの追加に必要な詳細の例を示します。

  • メールの通知テンプレートには、ユーザー名、パスワード、サーバー、および受信者が必要です。
  • Slack 通知テンプレートには、トークンとチャネルのリストが必要です。
  • Webhook 通知テンプレートには、URL とヘッダーが必要です。

ジョブが失敗すると、通知テンプレートで定義した設定を使用して通知が送信されます。

以下に、通知システムの一般的なフローを示します。

  • API または UI を介して、/api/v2/notification_templates エンドポイントREST API への通知テンプレートを作成します。
  • 通知テンプレートは、サポートするさまざまなオブジェクト (ジョブテンプレートのすべてのバリアント、組織およびプロジェクト) のいずれかに対して、通知が必要な適切なトリガーレベル (開始、成功、またはエラー) に割り当てます。たとえば、ジョブテンプレート 1 が失敗したときにトリガーするように、特定の通知テンプレートを割り当てることができます。この場合、通知テンプレートを /api/v2/job_templates/n/notification_templates_error API エンドポイントにあるジョブテンプレートに関連付けます。
  • ジョブの開始時と終了時の通知を設定できます。ユーザーとチームは、任意のジョブに割り当てることができる独自の通知を定義することもできます。

25.1. 通知の階層

通知テンプレートは、次に示すように、親オブジェクトで定義されたテンプレートを継承します。

  • ジョブテンプレートは、ジョブテンプレート用に定義された通知テンプレートを使用します。さらに、ジョブテンプレートで使用されるプロジェクトや、ジョブテンプレートがリストされている組織から通知テンプレートを継承できます。
  • プロジェクトの更新は、プロジェクトで定義された通知テンプレートを使用し、そのプロジェクトに関連付けられている組織から通知テンプレートを継承します。
  • インベントリーの更新は、それがリストされている組織で定義された通知テンプレートを使用します。
  • アドホックコマンドは、インベントリーが関連付けられている組織で定義された通知テンプレートを使用します。

25.2. 通知ワークフロー

ジョブが成功または失敗すると、エラーハンドラーまたは成功ハンドラーが、Notifiers セクションに記載されている手順を使用して、関連する通知テンプレートのリストを取得します。

次に、ジョブに関する関連詳細を含む通知オブジェクトをそれぞれに作成し、宛先に送信します。これらには、メールアドレス、Slack チャネル、SMS 番号が含まれます。

これらの通知オブジェクトは、ジョブタイプ (ジョブ、インベントリー更新、プロジェクト更新) の関連リソースとして利用できるほか、/api/v2/notifications からも利用できます。また、関連リソースを調べるて、通知テンプレートからどのような通知が送信されたかを確認することもできます。

通知が失敗しても、それに関連付けられているジョブに影響を与えたり、ジョブが失敗したりすることはありません。通知のステータスは、詳細エンドポイント /api/v2/notifications/<n> で確認できます。

25.3. 通知テンプレートの作成

通知テンプレートを作成するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから、Automation ExecutionAdministrationNotifiers を選択します。
  2. Add notifier をクリックします。
  3. 以下のフィールドに入力します。

    • Name: 通知の名前を入力します。
    • Description: 通知の説明を入力します。このフィールドは任意です。
    • Organization: 通知が属する組織を指定します。
    • Type: ドロップダウンメニューから通知のタイプを選択します。詳細は、通知の種類 セクションを参照してください。
  4. Save notifier をクリックします。

25.4. 通知タイプ

次の通知タイプが Automation Controller でサポートされています。

各通知タイプには、独自の設定と動作セマンティクスがあります。さまざまな方法でテストする必要がある場合があります。さらに、各タイプの通知を特定の詳細または通知をトリガーする一連の基準までカスタマイズできます。

25.4.1. Email

メール通知タイプは、さまざまな SMTP サーバーをサポートし、SSL/TLS 接続もサポートしています。

メール通知を設定するには、次の詳細を入力します。

  • Host
  • Recipient list
  • Sender e-mail
  • Port
  • Timeout (秒単位): 最大 120 秒まで設定できます。これは、Automation Controller がメールサーバーへの接続を試行して失敗するまでの時間の長さです。
通知テンプレートメール

25.4.2. Grafana

Grafana を統合するには、まず Grafana システム で API キーを作成する必要があります。これは、Automation Controller に与えられるトークンです。

Grafana 通知を設定するには、次の詳細を入力します。

  • Grafana URL: Grafana API サービスの URL (例: http://yourcompany.grafana.com)。
  • Grafana API key: まず、Grafana システムで API キーを作成する必要があります。
  • オプション: ID of the dashboard Grafana アカウントの API キーを作成したら、一意の ID を使用してダッシュボードを設定できます。
  • オプション: ID of the panel: パネルとグラフを Grafana インターフェイスに追加した場合、この ID を指定できます。
  • オプション: Tags for the annotation: 設定している通知のイベントのタイプを識別するためのキーワードを入力します。
  • Disable SSL verification: SSL 検証はデフォルトでオンになっていますが、ターゲットの証明書の信頼性検証をオフにできます。内部 CA またはプライベート CA を使用する環境の検証を無効にするには、このオプションを選択します。
通知テンプレート Grafana

25.4.3. IRC

IRC 通知は、接続してチャネルまたは個々のユーザーにメッセージを配信し、その後切断する IRC ボットの形式をとります。通知ボットは SSL 認証もサポートしています。ボットは現在 Nickserv による認証をサポートしていません。チャネルまたはユーザーが存在しないか、オンラインではない場合、通知に失敗します。障害シナリオは、接続専用に予約されています。

IRC 通知を設定するには、次の詳細を入力します。

  • オプション: IRC server password: IRC サーバーには、接続用のパスワードが必要な場合があります。サーバーでパスワードが必要でない場合は、空白のままにしておきます。IRC Server Port: IRC サーバーポート。IRC Server Address: IRC サーバーのホスト名またはアドレス。IRC Nick: サーバー接続後のボットのニックネーム。Destination Channels or Users: 通知の送信先となるユーザーまたはチャネルのリスト。
  • オプション: Disable SSL verification: ボットが接続するときに SSL を使用するかどうかをチェックします。
通知テンプレート IRC

25.4.4. Mattermost

Mattermost 通知タイプは、Mattermost のメッセージングおよびコラボレーションワークスペースへのシンプルなインターフェイスを提供します。

Mattermost 通知を設定するには、次の詳細を入力します。

  • Target URL: 送信先の完全な URL。
  • オプション: Username: 通知のユーザー名を入力します。
  • オプション: Channel: 通知のチャネルを入力します。
  • Icon URL: この通知向けに表示するアイコンを指定します。
  • Disable SSL verification: ターゲットの証明書の信頼性の検証をオフにします。内部 CA またはプライベート CA を使用する環境の検証を無効にするには、このオプションを選択します。
通知テンプレート Mattermost

25.4.5. PagerDuty

PagerDuty を統合するには、まず PagerDuty システム で API キーを作成する必要があります。これは、Automation Controller に与えられるトークンです。次に、Automation Controller にも与えられる Integration Key を提供する Service を作成します。

PagerDuty 通知を設定するには、次の詳細を入力します。

  • API Token: まず、PagerDuty システムで API キーを作成する必要があります。これは、Automation Controller に与えられるトークンです。
  • PagerDuty subdomain: PagerDuty アカウントにサインアップすると、通信するための固有のサブドメインを受け取ります。たとえば、"testuser" としてサインアップした場合、Web ダッシュボードは testuser.pagerduty.com にあり、API testuser を完全なドメインではなくサブドメインとして指定します。
  • API service/Integration Key: PagerDuty で作成した API サービス/統合キーを入力します。
  • Client Identifier: これは、API キーとサービスを使用しているサービスを識別するために、アラートの内容とともに PagerDuty サービスに送信されます。これは、複数の統合で同じ API キーとサービスを使用している場合に役立ちます。
通知テンプレート PagerDuty

25.4.6. Rocket.Chat

Rocket.Chat 通知タイプは、Rocket.Chat のコラボレーションおよびコミュニケーションプラットフォームへのインターフェイスを提供します。

Rocket.Chat 通知を設定するには、次の詳細を入力します。

  • Target URL: POST 先の完全な URL。
  • オプション: Username: ユーザー名を入力します。
  • オプション: Icon URL: この通知向けに表示するアイコンを指定します。
  • Disable SSL Verification: ターゲットの証明書の信頼性の検証をオフにします。内部 CA またはプライベート CA を使用する環境の検証を無効にするには、このオプションを選択します。
通知テンプレート rocketchat

25.4.7. Slack

Slack は、チームの共同コミュニケーションおよびメッセージングツールです。

Slack 通知を設定するには、次の詳細を入力します。

  • Slack アプリケーション。詳細は、作成方法に関する Slack ドキュメントの クイックスタート ページを参照してください。
  • Token: トークン。詳細は、Current token types ドキュメントページの Legacy bots およびボットトークンの詳細を参照してください。
  • Destination Channel: 1 行につき 1 つの Slack チャネル。チャネルにはナンバー記号 (#) が必要です。特定のメッセージに返信するか、スレッドを開始するには、親メッセージ ID が 16 桁であるチャネルに親メッセージ ID を追加します。10 桁目の後にドット (.) を手動で挿入する必要があります。たとえば、:#destination-channel, 1231257890.006423 です。
  • Notification color: 通知の色を指定します。使用できる色は 16 進数の色コードです (#3af、#789abc など)。ボットまたはアプリを設定したら、次の手順を完了する必要があります。

    1. Apps に移動します。
    2. 新しく作成したアプリをクリックし、Add features and functionality に移動します。これにより、受信 Webhook、ボット、パーミッションを設定したり、アプリをワークスペースにインストール したりできます。
通知テンプレートのスラック

25.4.8. Twilio

Twilio は音声と SMS の自動化サービスです。サインインしたら、メッセージの送信元となる電話番号を作成する必要があります。次に、Programmable SMSメッセージングサービス を定義し、以前に作成した番号をそれに関連付けることができます。

この番号またはその他の情報を確認してからでないと、任意の番号に送信するときに使用できない可能性があります。Messaging Service には、ステータスコールバック URL は必要なく、受信メッセージを処理する機能も必要ありません。

個人 (またはサブ) アカウント設定の下に、API 認証情報があります。Twilio は 2 つの認証情報を使用して、API リクエストがどのアカウントから送信されているかを判断します。ユーザー名として機能する Account SID と、パスワードとして機能する Auth Token

Twilio 通知を設定するには、次の詳細を入力します。

  • Account SID: アカウント SID を入力します。
  • Account Token: アカウントトークンを入力します。
  • Source Phone Number: メッセージングサービスに関連付けられた番号を "+15556667777" の形式で入力します。
  • Destination SMS Numbers: SMS を受信する番号のリストを入力します。10 桁の電話番号である必要があります。
通知テンプレート Twilio

25.4.9. Webhook

Webhook 通知タイプは、事前定義された Web サービスに POST を送信するためのシンプルなインターフェイスを提供します。Automation Controller は、JSON 形式の関連する詳細を含むデータペイロードとともに、アプリケーションおよび JSON コンテンツタイプを使用して、このアドレスに POST を送信します。一部の Web サービス API は、HTTP リクエストが特定のフィールドを含む特定の形式であることを想定しています。

次のように Webhook 通知を設定します。

  • Basic 認証の PUT を使用して、HTTP メソッドを設定します。
  • 送信リクエストのボディー。
  • Basic 認証を使用して認証を設定します。

Webhook 通知を設定するには、次の詳細を入力します。

  • オプション: Username: ユーザー名を入力します。
  • オプション: Basic 認証パスワード:
  • ターゲット URL: Webhook 通知の PUT または POST の送信先となる完全な URL を入力します。
  • HTTP ヘッダー: キーと値が文字列である JSON 形式でヘッダーを入力します。以下に例を示します。
 {"Authentication": "988881adc9fc3655077dc2d4d757d480b5ea0e11", "MessageType": "Test"}`.
  • Disable SSL Verification: SSL 検証はデフォルトでオンになっていますが、ターゲットの証明書の信頼性の検証をオフにできます。内部 CA またはプライベート CA を使用する環境の検証を無効にするには、このオプションを選択します。
  • HTTP メソッド: Webhook のメソッドを選択します。
  • POST : 新しいリソースを作成します。他のカテゴリーに該当しない演算用の汎用動詞としても機能します。Webhook サービスで PUT が必要であるとわかっている場合を除き、POST が必要になる可能性が高くなります。
  • PUT: 特定のリソース (識別子によって) またはリソースのコレクションを更新します。リソース識別子が事前にわかっている場合は、PUT を使用して特定のリソースを作成することもできます。
通知テンプレート Webhook
25.4.9.1. Webhook ペイロード

次のデータは、Webhook エンドポイントの Automation Controller によって送信されます。

job id
name
url
created_by
started
finished
status
traceback
inventory
project
playbook
credential
limit
extra_vars
hosts
http method

以下は、Automation Controller から返される Webhook メッセージを介した started 通知の例です。

{"id": 38, "name": "Demo Job Template", "url": "https://host/#/jobs/playbook/38", "created_by": "bianca", "started":
"2020-07-28T19:57:07.888193+00:00", "finished": null, "status": "running", "traceback": "", "inventory": "Demo Inventory",
"project": "Demo Project", "playbook": "hello_world.yml", "credential": "Demo Credential", "limit": "", "extra_vars": "{}",
"hosts": {}}POST / HTTP/1.1

次のデータは、Webhook エンドポイントの Automation Controller によって success/fail ステータスとして返されます。

job id
name
url
created_by
started
finished
status
traceback
inventory
project
playbook
credential
limit
extra_vars
hosts

以下は、Webhook メッセージを通じて Automation Controller によって返される success/fail 通知の例です。

{"id": 46, "name": "AWX-Collection-tests-awx_job_wait-long_running-XVFBGRSAvUUIrYKn", "url": "https://host/#/jobs/playbook/46",
"created_by": "bianca", "started": "2020-07-28T20:43:36.966686+00:00", "finished": "2020-07-28T20:43:44.936072+00:00", "status": "failed",
"traceback": "", "inventory": "Demo Inventory", "project": "AWX-Collection-tests-awx_job_wait-long_running-JJSlglnwtsRJyQmw", "playbook":
"fail.yml", "credential": null, "limit": "", "extra_vars": "{\"sleep_interval\": 300}", "hosts": {"localhost": {"failed": true, "changed": 0,
"dark": 0, "failures": 1, "ok": 1, "processed": 1, "skipped": 0, "rescued": 0, "ignored": 0}}}

25.5. カスタム通知の作成

通知フォーム上の各 通知タイプテキストの内容をカスタマイズ できます。

手順

  1. ナビゲーションパネルから、Automation ExecutionAdministrationNotifiers を選択します。
  2. Create notifier をクリックします。
  3. Type リストから通知タイプを選択します。
  4. トグルを使用して Customize messages を有効にします。

    通知をカスタマイズする
  5. さまざまなジョブイベントに、次のようなカスタムメッセージを提供できます。

    • 開始メッセージの本文
    • 成功メッセージの本文
    • エラーメッセージの本文
    • ワークフロー承認の本文
    • ワークフロー拒否メッセージの本文
    • ワークフロー保留メッセージの本文
    • ワークフロータイムアウトメッセージの本文

      メッセージの形式は、設定している通知の種類によって異なります。たとえば、メールおよび PagerDuty 通知のメッセージは、本文と件名を備えた典型的なメールのように見えます。この場合、Automation Controller はフィールドを Message および Message Body として表示します。他の通知タイプでは、イベントのタイプごとに メッセージ のみが必要です。

      Message フィールドには、最上位の変数 (id または name など、属性と組み合わされている job) を含むテンプレートを使用して、事前に入力されます。テンプレートは、中括弧で囲まれており、Automation Controller が提供する一定のフィールドから取り込むことができ、次のように事前入力されたメッセージフィールドに表示されます。

      この事前入力フィールドは、イベントの通知の受信者に一般的に表示されるメッセージを提案します。必要に応じてジョブに独自の属性を追加することで、さまざまな基準でこれらのメッセージをカスタマイズできます。カスタム通知メッセージは、Jinja (Ansible Playbook で使用されるのと同じテンプレートエンジン) を使用してレンダリングされます。。

      以下に概要を示すように、メッセージとメッセージ本文にはさまざまな種類のコンテンツがあります。

    • メッセージは常に文字列のみであり、一行だけです。改行はサポートされていません。
    • メッセージ本文は、ディクショナリーまたはテキストのブロックのいずれかです。

      • Webhook と PagerDuty のメッセージ本文はディクショナリー定義を使用します。これらのデフォルトのメッセージ本文は {{ job_metadata }} です。そのまま使用することも、独自のディクショナリーを提供することもできます。
      • メールのメッセージ本文には、テキストのブロックまたは複数行の文字列が使用されます。デフォルトのメッセージ本文は次のとおりです。

        {{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }} {{ job_metadata }}

        このテキストは、{{ job_metadata }} を残したまま編集することも、{{ job_metadata }} をドロップすることもできます。本文はテキストのブロックであるため、任意の文字列を使用できます。{{ job_metadata }} は、実行中のジョブを説明するフィールドを含むディクショナリーとしてレンダリングされます。いずれの場合も、{{ job_metadata }} には次のフィールドが含まれます。

        • id
        • name
        • url
        • created_by
        • started
        • finished
        • status
        • traceback

          {{ job_metadata }} 内の個々のフィールドを照会することはできません。通知テンプレートで {{ job_metadata }} を使用すると、すべてのデータが返されます。

          結果のディクショナリーは次のようになります。

          {"id": 18,
           "name": "Project - Space Procedures",
           "url": "https://host/#/jobs/project/18",
           "created_by": "admin",
           "started": "2019-10-26T00:20:45.139356+00:00",
           "finished": "2019-10-26T00:20:55.769713+00:00",
           "status": "successful",
           "traceback": ""
          }

          {{ job_metadata }} がジョブでレンダリングされる場合、次の追加フィールドが含まれます。

        • inventory
        • project
        • Playbook
        • credential
        • limit
        • extra_vars
        • hosts

          結果のディクショナリーは次のようになります。

          {"id": 12,
           "name": "JobTemplate - Launch Rockets",
           "url": "https://host/#/jobs/playbook/12",
           "created_by": "admin",
           "started": "2019-10-26T00:02:07.943774+00:00",
           "finished": null,
           "status": "running",
           "traceback": "",
           "inventory": "Inventory - Fleet",
           "project": "Project - Space Procedures",
           "playbook": "launch.yml",
           "credential": "Credential - Mission Control",
           "limit": "",
           "extra_vars": "{}",
           "hosts": {}
          }

          {{ job_metadata }} がワークフロージョブでレンダリングされる場合、次の追加フィールドが含まれます。

        • body (これはワークフロージョブ内のノードを列挙し、各ノードに関連付けられたジョブの説明を含みます)

          結果のディクショナリーは次のようになります。

          {"id": 14,
           "name": "Workflow Job Template - Launch Mars Mission",
           "url": "https://host/#/workflows/14",
           "created_by": "admin",
           "started": "2019-10-26T00:11:04.554468+00:00",
           "finished": "2019-10-26T00:11:24.249899+00:00",
           "status": "successful",
           "traceback": "",
           "body": "Workflow job summary:
          
                   node #1 spawns job #15, \"Assemble Fleet JT\", which finished with status successful.
                   node #2 spawns job #16, \"Mission Start approval node\", which finished with status successful.\n
                   node #3 spawns job #17, \"Deploy Fleet\", which finished with status successful."
          }

無効な構文や使用できないフィールドの参照を使用する通知テンプレートを作成すると、エラーの内容を示すエラーメッセージが表示されます。通知のカスタムメッセージを削除すると、この場所にはデフォルトのメッセージが表示されます。

重要

カスタムメッセージを編集せずに通知テンプレートを保存した場合 (または編集してデフォルト値に戻した場合)、Details 画面にはデフォルトが表示されるはずで、カスタムメッセージテーブルは表示されません。いずれかの値を編集して保存すると、テーブル全体が Details 画面に表示されます。

25.6. 通知の有効化と無効化

特定のジョブの開始時、およびジョブ実行終了時の成功または失敗を通知するように設定できます。次の動作に注意してください。

  • ワークフロージョブテンプレートで開始時通知が有効になっており、そのワークフロー内のジョブテンプレートでも開始時通知が有効になっている場合、両方の通知を受け取ります。
  • ワークフロージョブテンプレート内の多くのジョブテンプレートで通知を実行できます。
  • スライスされたジョブテンプレートの開始時に通知を実行できるようにし、各スライスで通知が生成されます。
  • ジョブの開始時に通知を実行できるようにし、その通知が削除された場合、ジョブテンプレートは引き続き実行されますが、エラーメッセージが表示されます。

次のリソースの Details ページの Notifications タブから、ジョブの開始、ジョブの成功、ジョブの失敗に関する通知や、これらを任意に組み合わせた通知を有効にできます。

  • ジョブテンプレート
  • ワークフローテンプレート
  • プロジェクト

承認ノードがあるワークフローテンプレートの場合は、StartSuccess、および Failure に加えて、以下のように特定の承認関連のイベントを有効または無効にできます。

関連情報

25.7. 通知用のホスト名設定

System settings で、Base URL of the service フィールドのデフォルト値を、希望のホスト名に置き換えることで、通知ホスト名を変更できます。

ライセンスを更新すると、通知ホスト名も変更されます。Automation Controller の新規インストールでは、通知用のホスト名を設定する必要はありません。

25.7.1. TOWER_URL_BASE のリセット

Automation Controller は、着信リクエストを確認し、その着信リクエストに基づいてサーバーアドレスを設定することで、ベース URL (TOWER_URL_BASE) の定義方法を決定します。

Automation Controller は、最初にデータベースから設定値を取得します。設定値が見つからない場合は、設定ファイルの値が使用されます。Automation Controller ホストの IP アドレスに移動してライセンスに対して Post を送信すると、Post が実行されたライセンスはデータベースの設定エントリーに書き込まれます。

間違ったアドレスを取得した場合は、次の手順を使用して TOWER_URL_BASE をリセットします。

手順

  1. ナビゲーションパネルから SettingsSystem を選択します。
  2. Edit をクリックします。
  3. 通知に表示する DNS エントリーのアドレスを Base URL of the service フィールドに入力します。

25.8. 通知 API

startedsuccess、または error エンドポイントを使用します。

/api/v2/organizations/N/notification_templates_started/
/api/v2/organizations/N/notification_templates_success/
/api/v2/organizations/N/notification_templates_error/

さらに、../../../N/notification_templates_started エンドポイントには、以下に対する GET アクションと POST アクションがあります。

  • 組織
  • プロジェクト
  • インベントリーソース
  • ジョブテンプレート
  • システムジョブテンプレート
  • ワークフロージョブテンプレート

第26章 カスタム通知でサポートされている属性

サポートされているジョブ属性のリストと、通知のメッセージテキストを構築するための適切な構文を説明します。

サポートされているジョブ属性は次のとおりです。

  • allow_simultaneous - (ブール値) このジョブに関連付けられたジョブテンプレートから複数のジョブを同時に実行できるかどうかを示します。
  • controller_node - (文字列) 分離された実行環境を管理するインスタンス。
  • created - (日時) このジョブが作成されたタイムスタンプ。
  • custom_virtualenv - (文字列) ジョブの実行に使用されるカスタムの仮想環境。
  • description - (文字列) ジョブの説明 (任意)
  • diff_mode - (ブール値) 有効になっている場合、ホストのテンプレート化されたファイルに追加されるテキストの変更を標準出力に表示
  • elapsed - (10 進数) ジョブ実行の経過時間 (秒単位)
  • execution_node - (文字列) ジョブが実行するノード
  • failed - (ブール値) ジョブが失敗した場合は true
  • finished - (日時) ジョブが実行を完了した日時
  • force_handlers - (ブール値) ハンドラーを強制的に実行すると、そのホスト上でタスクが失敗した場合でも、通知されたらハンドラーが実行されます。到達不能なホストなどの状況によっては、ハンドラーが実行されない場合があることに注意してください。
  • forks - (整数) ジョブに要求されたフォークの数
  • id - (整数) ジョブのデータベース ID
  • job_explanation - (文字列) stdout の実行およびキャプチャーを実行できない場合のジョブの状態を示すための状態フィールド
  • job_slice_count - (整数) スライスされたジョブの一部として実行された場合には、スライスの合計数 (1 の場合はスライスされたジョブの一部ではない)
  • job_slice_number - (整数) スライスされたジョブの一部として実行された場合には、スライス処理が行われたインベントリーの ID (スライスされたジョブの一部でなければ属性は使用されない)
  • job_tags - (文字列) 指定されたタグを持つタスクのみが実行されます。
  • job_type - (選択肢) runcheck、または scan
  • launch_type - (選択肢) manualrelaunchcallbackscheduleddependencyworkflowsync、または scm
  • limit - (文字列) 指定された場合は、このホストのセットに制限された Playbook を実行
  • modified - (日時) ジョブの最終更新時のタイムスタンプ
  • name - (文字列) このジョブの名前
  • Playbook - (文字列) 実行された Playbook
  • scm_revision - (文字列) このジョブに使用するプロジェクトからの SCM リビジョン (存在する場合)
  • skip_tags - (文字列) 指定した場合は、このタグセットをスキップして Playbook を実行
  • start_at_task - (文字列) 指定した場合は、この名前に一致するタスクで Playbook の実行を開始
  • started - (日時) ジョブが開始するためにキューに入れられた日時
  • status - (選択肢) newpendingwaitingrunningsuccessfulfailederror、または canceled のいずれか
  • timeout - (整数) タスクが取り消されるまでの実行時間 (秒数)
  • type - (選択肢) このジョブのデータ型。
  • url - (文字列) このジョブの URL。
  • use_fact_cache - (ブール値) ジョブに対して有効化されている場合、データベースへの Playbook 実行の最後に Automation Controller は Ansible ファクトキャッシュプラグインとして機能し、Ansible で使用するファクトをキャッシュ。
  • verbosity - (選択肢) 0 - 5 (正常 - WinRM デバッグに対応)

    • host_status_counts - (各ステータスに一意に割り当てられたホスト数)

      • skipped: (整数)
      • ok: (整数)
      • changed: (整数)
      • failures: (整数)
      • dark: (整数)
      • processed: (整数)
      • rescued: (整数)
      • ignored (整数)
      • failed (ブール値)
    • summary_fields:

      • inventory

        • id - (整数) インベントリーのデータベース ID。
        • name - (文字列) インベントリーの名前。
        • description - (文字列) インベントリーの説明 (任意)
        • has_active_failures - (ブール値) (非推奨) このインベントリーのホストが失敗したかどうかを示すフラグ
        • total_hosts - (非推奨) (整数) このインベントリー内のホストの合計数
        • hosts_with_active_failures - (非推奨) (整数) このインベントリー内のアクティブなエラーのあるホストの数
        • total_groups - (非推奨) (整数) このインベントリー内のグループの合計数
        • groups_with_active_failures - (非推奨) (整数) このインベントリー内のアクティブなエラーのあるホストの数
        • has_inventory_sources - (非推奨) (ブール値) このインベントリーに外部のインベントリーソースがあるかどうかを示すフラグ
        • total_inventory_sources - インベントリー内で設定される外部インベントリーソースの合計数 (整数)
        • inventory_sources_with_failures - エラーのあるこのインベントリー内の外部インベントリーソースの数 (整数)
        • organization_id - このインベントリーが含まれる組織
        • kind - (選択肢) (空の文字列) (ホストにインベントリーとの直接リンクがあることを示す) または smart
      • project

        • id - (int) プロジェクトのデータベース ID。
        • name - (文字列) プロジェクトの名前。
        • description - (文字列) プロジェクトの説明 (任意)
        • status - (選択肢) newpendingwaitingrunningsuccessfulfailederrorcancelednever updatedok、または missing のいずれか。
        • scm_type - (選択肢) (空の文字列)、githgsvninsights のいずれか
      • job_template

        • id - (int) ジョブテンプレートのデータベース ID。
        • description - (文字列) プロジェクトの説明 (任意)
        • status - (選択肢) newpendingwaitingrunningsuccessfulfailederrorcancelednever updatedok、または missing のいずれか。
      • job_template

        • id - (int) ジョブテンプレートのデータベース ID。
        • name - (文字列) ジョブテンプレートの名前。
        • description - (文字列) ジョブテンプレートの説明 (任意)
      • unified_job_template

        • id - (int) 統合ジョブテンプレートのデータベース ID。
        • name - (文字列) 統合ジョブテンプレートの名前。
        • description - (文字列) 統合ジョブテンプレートの説明 (任意)
        • unified_job_type - (選択肢) 統合ジョブタイプ (jobworkflow_jobproject_update など)。
      • instance_group

        • id - (int) インスタンスグループのデータベース ID。
        • name - (文字列) インスタンスグループの名前。
      • created_by

        • id - (int) 操作を開始したユーザーのデータベース ID。
        • username - (文字列) 操作を開始したユーザー名
        • first_name - (文字列) 名。
        • last_name - (文字列) 姓。
      • labels

        • count - (int) ラベルの数。
        • results - ラベルを表すディクショナリーのリスト。例: {"id": 5, "name": "database jobs"}。

二重の中括弧 {{ }} を使用すると、カスタム通知メッセージ内のジョブに関する情報を参照できます。特定のジョブ属性にアクセスするには、ドット表記 (例: {{ job.summary_fields.inventory.name }}) を使用します。中括弧の前または前後に、説明のために任意の文字やプレーンテキストを追加できます。たとえば、ジョブ ID の場合は "#"、何らかの記述子を示す場合は一重引用符を追加できます。カスタムメッセージには、メッセージ全体に複数の変数を含めることができます。

{{ job_friendly_name }} {{ job.id }} ran on {{ job.execution_node }} in {{ job.elapsed }} seconds.

テンプレートに追加できる追加の変数は次のとおりです。

  • approval_node_name - (文字列) 承認ノード名
  • approval_status - (選択肢) approveddenied、および timed_out のいずれか
  • url - (文字列) 通知が送信されるジョブの URL (startsuccessfail、および approval notifications に適用)
  • workflow_url - (文字列) 関連する承認ノードへの URL。これにより、通知受信者は関連するワークフロージョブページに移動して状況を確認できます。たとえば、このノードは {{workflow_url }} で表示できます。承認関連の通知の場合は、urlworkflow_url の両方が同じです。
  • job_friendly_name - (文字列) ジョブの分かりやすい名前
  • job_metadata - (文字列) ジョブのメタデータを JSON 文字列として置き換えます。以下に例を示します。

    {'url': 'https://automationcontroller.example.com/$/jobs/playbook/13',
     'traceback': '',
     'status': 'running',
     'started': '2019-08-07T21:46:38.362630+00:00',
     'project': 'Stub project',
     'playbook': 'ping.yml',
     'name': 'Stub Job Template',
     'limit': '',
     'inventory': 'Stub Inventory',
     'id': 42,
     'hosts': {},
     'friendly_name': 'Job',
     'finished': False,
     'credential': 'Stub credential',
     'created_by': 'admin'}

第27章 Webhook の使用

Webhook は、Web 経由でアプリケーション間で指定のコマンドを実行するために使用します。Automation Controller は現在、GitHub および GitLab との Webhook インテグレーションを提供しています。

Webhook は次のサービスを使用して設定します。

GitHub および GitLab の Webhook ポストステータスバック機能は、特定の CI イベント下でのみ動作するように設計されています。別の種類のイベントを受信すると、サービスログに次のようなメッセージが記録されます。

awx.main.models.mixins Webhook event did not have a status API endpoint associated, skipping.

27.1. GitHub Webhook の設定

Automation Controller には、トリガーされた Webhook イベントに基づいてジョブを実行する機能があります。ジョブのステータス情報 (pending, error, success) は、プルリクエストイベントの場合にのみ送信できます。Automation Controller がジョブステータスを Webhook サービスにポストする必要がない場合は、直接ステップ 3 に進みます。

手順

  1. Automation Controller で使用する Personal Access Token (PAT) を生成します。

    1. GitHub アカウントのプロファイル設定で、Settings を選択します。
    2. ナビゲーションパネルから、<> Developer Settings を選択します。
    3. Developer Settings ページで、Personal access tokens を選択します。
    4. Tokens (classic) を選択します。
    5. Personal access tokens 画面で、Generate a personal access token をクリックします。
    6. プロンプトが表示されたら、GitHub アカウントのパスワードを入力して続行します。
    7. Note フィールドに、この PAT の用途に関する簡単な説明を入力します。
    8. Select scopes フィールドで、repo:statusrepo_deployment、および public_repo の横のボックスをオンにします。自動 Webhook には、招待の場合を除き、リポジトリースコープへのアクセス権だけが必要です。詳細は、OAuth アプリのスコープのドキュメント を参照してください。
    9. Generate token をクリックします。

      重要

      トークンが生成されたら、ステップ 2 で必要となるため、必ず PAT をコピーしてください。GitHub でこのトークンに再度アクセスすることはできません。

  2. 必要に応じて、PAT を使用して、GitHub の認証情報を作成します。

    1. インスタンスに移動し、生成されたトークンを使用して GitHub PAT の新しい認証情報を作成します。
    2. GitHub にポストバックするジョブテンプレートで使用するため、この認証情報の名前をメモしておきます。

      GitHub PAT トークン
    3. Webhook を有効にするジョブテンプレートに移動し、前の手順で作成した Webhook サービスと認証情報を選択します。

      GitLab Webhook 認証情報
    4. Save をクリックします。ジョブテンプレートは GitHub にポストバックするように設定されています。
  3. Webhook を設定する GitHub リポジトリーに移動し、Settings を選択します。
  4. ナビゲーションパネルから、WebhooksAdd webhook を選択します。
  5. Add webhook ページを完了するには、ジョブテンプレートまたはワークフロージョブテンプレートで Enable Webhook オプションをオンにする必要があります。詳細は、ジョブテンプレートの作成 および ワークフロージョブテンプレートの作成 のステップ 3 を参照してください。
  6. 以下のフィールドに入力します。

    • Payload URL: Webhook URL の内容をジョブテンプレートからコピーし、ここに貼り付けます。結果は GitHub からこのアドレスに送信されます。
    • Content type: application/json に設定します。
    • Secret: ジョブテンプレートから Webhook キー の内容をコピーし、ここに貼り付けます。
    • Which events would you like to trigger this webhook?: Webhook をトリガーするイベントのタイプを選択します。このようなイベントがあれば、ジョブまたはワークフローがトリガーされます。ジョブのステータス (保留中、エラー、成功) を GitHub に送り返すには、Let me select individual events セクションで Pull requests を選択する必要があります。

      Github リポジトリーでイベントを選択する
    • Active: これをチェックしたままにします。
  7. Add webhook をクリックします。
  8. Webhook が設定されると、編集または削除する機能とともに、リポジトリーでアクティブな Webhook のリストに表示されます。Webhook をクリックして、Manage webhook 画面に移動します。
  9. スクロールして、Webhook に対して行われた配信試行と、それらが成功したか失敗したかを表示します。

27.2. GitLab Webhook の設定

Automation Controller には、トリガーされた Webhook イベントに基づいてジョブを実行する機能があります。ジョブのステータス情報 (pending, error, success) は、プルリクエストイベントの場合にのみ送信できます。Automation Controller がジョブステータスを Webhook サービスにポストする必要がない場合は、直接手順 3 に進みます。

手順

  1. Automation Controller で使用する Personal Access Token (PAT) を生成します。

    1. GitLab のナビゲーションパネルから、アバターを選択して、プロファイルを編集 します。
    2. ナビゲーションパネルから Access tokens を選択します。
    3. 以下のフィールドに入力します。

      • Token name: この PAT が何に使用されるかについて、簡単な説明を入力します。
      • Expiration date: Webhook の有効期限を設定しない場合は、このフィールドをスキップします。
      • Select scopes: 統合に適用できるスコープを選択します。Automation Controller の場合、必要な選択は API のみです。
    4. Create personal access token をクリックします。

      重要

      トークンが生成されたら、ステップ 2 で必要となるため、必ず PAT をコピーしてください。GitLab ではこのトークンに再度アクセスすることはできません。

  2. 必要に応じて、PAT を使用して、GitLab の認証情報を作成します。

    1. インスタンスに移動し、生成されたトークンを使用して GitLab PAT の新しい認証情報を作成します。
    2. GitLab にポストバックするジョブテンプレートで使用するため、この認証情報の名前をメモしておきます。

      GitLab PAT トークン
    3. Webhook を有効にするジョブテンプレートに移動し、前の手順で作成した Webhook サービスと認証情報を選択します。

      GitLab Webhook 認証情報
    4. Save をクリックします。ジョブテンプレートは GitLab にポストバックするように設定されています。
  3. Webhook を設定する GitLab リポジトリーに移動します。
  4. ナビゲーションパネルから、SettingsIntegrations を選択します。
  5. Add webhook ページを完了するには、ジョブテンプレートまたはワークフロージョブテンプレートで Enable Webhook オプションをオンにする必要があります。詳細は、ジョブテンプレートの作成 および ワークフロージョブテンプレートの作成 のステップ 3 を参照してください。
  6. 以下のフィールドに入力します。

    • URL: Webhook URL の内容をジョブテンプレートからコピーし、ここに貼り付けます。結果は GitLab からこのアドレスに送信されます。
    • Secret Token: ジョブテンプレートから Webhook Key の内容をコピーし、ここに貼り付けます。
    • Trigger: Webhook をトリガーするイベントのタイプを選択します。このようなイベントがあれば、ジョブまたはワークフローがトリガーされます。ジョブのステータス (pending, error, success) を GitLab に送り返すには、Trigger セクションで Merge request events を選択する必要があります。
    • SSL verification: Enable SSL verification を選択したままにします。
  7. Add webhook をクリックします。
  8. Webhook が設定されると、リポジトリーの Project Webhooks リストに表示され、イベントのテスト、Webhook の編集または削除を行うことができます。Webhook イベントをテストすると、成功したか失敗したかの結果が各ページに表示されます。

関連情報

27.3. ペイロード出力の表示

追加の変数として公開されたペイロード全体を表示できます。

手順

  1. ナビゲーションパネルから、Automation ExecutionJobs を選択します。
  2. Webhook が有効になっているジョブテンプレートを選択します。
  3. Details タブを選択します。
  4. 次の例に示すように、Extra Variables フィールドで、awx_webhook_payload 変数からのペイロード出力を表示します。

    Webhook の追加変数ペイロード
    Webhook の追加変数ペイロード拡張

第28章 Red Hat Ansible Automation Platform 修復のための Red Hat Insights のセットアップ

Automation Controller は Red Hat Insights との統合をサポートします。

ホストが Red Hat Insights に登録されると、脆弱性や既知の設定の競合がないか継続的にスキャンされます。特定された各問題には、Ansible Playbook の形式で修正を関連付けできます。

Red Hat Insights を使用している場合は、メンテナンス計画を作成して修正をグループ化し、問題を軽減するための Playbook を作成できます。Automation Controller は、Red Hat Insights プロジェクトを通じてメンテナンス計画の Playbook を追跡します。

Basic 認証による Red Hat Insights への認証は特別な認証情報によって裏付けられており、最初に Automation Controller で確立する必要があります。

Red Hat Insights メンテナンスプランを実行するには、Red Hat Insights プロジェクトとインベントリーが必要です。

28.1. Red Hat Insights 認証情報の作成

Red Hat Insights 認証情報を作成するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから、Automation ExecutionInfrastructureCredentials を選択します。
  2. Create credential をクリックします。
  3. 次のフィールドに適切な詳細を入力します。

    • Name: 認証情報の名前を入力します。
    • オプション: Description: 認証情報の説明を入力します。
    • オプション: Organization: 認証情報が関連付けられている組織の名前を入力するか、検索 Search アイコンをクリックして、Select organization ウィンドウから選択します。
    • Credential type: Insights と入力するか、リストから選択します。

      認証情報 Insights のポップアップ表示
    • Username: 有効な Red Hat Insights 認証情報を入力します。
    • Password: 有効な Red Hat Insights 認証情報を入力します。

      Insights for Ansible Automation Platform の認証情報は、ユーザーの Red Hat カスタマーポータル アカウントのユーザー名とパスワードです。

  4. Create credential をクリックします。

28.2. Red Hat Insights プロジェクトの作成

Red Hat Insights で使用する新しいプロジェクトを作成するには、次の手順を使用します。

手順

  1. ナビゲーションパネルから、Automation ExecutionProjects を選択します。
  2. Create project をクリックします。
  3. 次のフィールドに適切な詳細を入力します。次のフィールドには、特定の Red Hat Insights 関連エントリーが必要であることに注意してください。

    • Name: Red Hat Insights プロジェクトの名前を入力します。
    • オプション: Description: プロジェクトの説明を入力します。
    • Organization: 認証情報が関連付けられている組織の名前を入力するか、検索アイコン Search をクリックし、Select organization ウィンドウから選択します。
    • オプション: Execution environment: このプロジェクトを使用するジョブで使用する実行環境。
    • Source control type: Red Hat Insights を選択します。
    • オプション: Content signature validation credential: コンテンツ署名を有効にして、プロジェクトの同期時にコンテンツがセキュアな状態に保たれていることを検証します。
    • Insights credential: 以前に作成した Red Hat Insights 認証情報が事前に入力されています。そうでない場合は、認証情報を入力するか、検索 Search アイコンをクリックし、Select Insights Credential ウィンドウから選択します。
  4. Options フィールドからこのプロジェクトの更新オプションを選択し、必要に応じて追加の値を入力します。各オプションの詳細は、それぞれの横にあるツールヒント Tooltip アイコンをクリックします。

    Insights 作成プロジェクト
  5. Create project をクリックします。

すべての SCM とプロジェクトの同期は、新しいプロジェクトを初めて保存するときに自動的に行われます。最新の Insights の内容で更新するには、プロジェクトのアクションの下にある更新 Update アイコンをクリックして SCM ベースのプロジェクトを手動で更新します。

このプロセスでは、Red Hat Insights プロジェクトと Red Hat Insights アカウントソリューションが同期されます。プロジェクトの名前の横にあるステータスを示す丸は、同期が実行されたら更新される点に注目してください。

28.3. Insights インベントリーの作成

Insights Playbook には hosts: 行が含まれており、値は Red Hat Insights に提供されるホスト名で、Automation Controller に提供されるホスト名とは異なる場合があります。

28.4. Red Hat Insights インベントリーの修復

Red Hat Insights インベントリーを修復すると、Automation Controller で 1 回クリックするだけで Red Hat Insights Playbook を実行できるようになります。

これを行うには、Red Hat Insights 修復を実行するジョブテンプレートを作成します。

手順

  1. ナビゲーションメニューから、Automation ExecutionTemplates を選択します。
  2. Templates リストビューで、Create template をクリックし、リストから選択します。
  3. 次のフィールドに適切な詳細を入力します。次のフィールドには、特定の Red Hat Insights 関連エントリーが必要であることに注意してください。

    • Name: メンテナンス計画の名前を入力します。
    • オプション: Description: ジョブテンプレートの説明を入力します。
    • Job Type: まだ入力されていない場合は、ジョブタイプリストから Run を選択します。
    • Inventory: 以前に作成した Red Hat Insights インベントリーを選択します。
    • Project: 以前に作成した Red Hat Insights プロジェクトを選択します。
    • オプション: Execution Environment: 実行に使用されるコンテナーイメージ。
    • Playbook: 実行するメンテナンスプランに関連付けられた Playbook を Playbook リストから選択します。
    • オプション: Credentials: このプロジェクトに使用する認証情報を入力するか、検索 ( Search ) アイコンをクリックし、ポップアップウィンドウから選択します。認証情報は Red Hat Insights 認証情報である必要はありません。
    • Verbosity: デフォルト設定をそのまま使用するか、リストから目的の詳細度を選択します。

      Insights ジョブテンプレート
  4. Create job template をクリックします。
  5. 起動 Launch アイコンをクリックしてジョブテンプレートを起動します。

完了すると、ジョブの結果が Job Details ページに表示されます。

第29章 Automation Controller のベストプラクティス

以下では、Automation Controller の使用に関するベストプラクティスを説明します。

29.1. ソースコントロールの使用

Automation Controller は、サーバーに直接保存された Playbook をサポートします。したがって、Playbook、ロール、および関連する詳細をソースコントロールに保存する必要があります。このようにして、インフラストラクチャーを自動化するルールを変更した時期と理由を説明する監査証跡を取得できます。さらに、インフラストラクチャーまたはチームの他の部分と Playbook を共有できるようになります。

29.2. Ansible ファイルおよびディレクトリー構造

複数のプロジェクトで使用する共通のロールセットを作成している場合、これらのロールには、ソースコントロールサブモジュール、または /opt などの共通の場所を介してアクセスする必要があります。プロジェクトにおいて、他のプロジェクトからロールやコンテンツがインポートされるとの想定はしないでください。

詳細は、Ansible ドキュメントのリンク 一般的なヒント を参照してください。

注記
  • Automation Controller では vars_prompt の質問を対話的に許可しないため、Playbook の vars_prompt 機能の使用は避けてください。vars_prompt の使用を避けられない場合は、ジョブテンプレートの Survey 機能を参照してください。
  • Automation Controller では対話的に一時停止をキャンセルできないため、タイムアウトなしで Playbook の pause 機能を使用することは避けてください。どうしても pause の使用を避けられない場合は、タイムアウトを設定する必要があります。

ジョブは Playbook ディレクトリーを現在の作業ディレクトリーとして使用しますが、これに依存するのではなく playbook_dir 変数を使用するようにジョブをコーディングする必要があります。

29.3. 動的インベントリーソースの使用

インフラストラクチャー用に外部の信頼できるソースが設定されている場合は、それがクラウドプロバイダーであろうとローカル CMDB であろうと、インベントリーの同期プロセスを定義し、動的インベントリーのサポート (クラウドインベントリーソースを含む) を使用することが最も適切な方法になります。これにより、インベントリーの状態が常に最新の状態に保たれます。

注記

インベントリーホスト変数の編集と追加は、--overwrite_vars が設定されて いない 限り、インベントリーの同期後も維持されます。

29.4. インベントリーの変数管理

group_vars/host_vars/ を使用するのではなく、変数データをホストとグループの定義とともに保持します (インベントリーエディターを参照)。動的インベントリーソースを使用する場合、Overwrite Variables オプションが設定されていない限り、Automation Controller は、上記の変数をデータベースと同期できます。

29.5. 自動スケーリング

「コールバック」機能を使用して、新しく起動するインスタンスが自動スケーリングシナリオまたはプロビジョニング統合の設定を要求できるようにします。

29.6. 大規模なホスト数

実行の並列性を高めるには、ジョブテンプレートの「フォーク」をより大きな値に設定します。

29.7. 継続的インテグレーションまたは継続的デプロイ

Jenkins などの継続的インテグレーションシステムでジョブを生成するには、ジョブテンプレートに対して CURL リクエストを作成する必要があります。ジョブテンプレートへの認証情報では、特定のパスワードの入力を求めるプロンプトは使用しないでください。設定と使用の手順は、Ansible ドキュメントの インストール を参照してください。

第30章 用語集

アドホック
アドホック とは、オーケストレーション言語 (/usr/bin/ansible-playbook) ではなく、/usr/bin/ansible を使用して Ansible でクイックコマンドを実行することを指します。アドホックコマンドの例としては、インフラストラクチャー内の 50 台のマシンを再起動することが考えられます。アドホックで可能なことは、Playbook に記述して実現できます。Playbook では、他の多くの操作を結合することもできます。
自動化メッシュ
ノードで構成されるネットワークを説明します。ノード間の通信は、TCP、UDP、Unix ソケットなどのプロトコルによってトランスポート層で確立されます。

ノード も参照してください。

Callback プラグイン
Ansible からの結果をインターセプトし、それに基づいて動作できるユーザー作成のコードを指します。GitHub プロジェクトのいくつかの例では、カスタムログを実行したり、メールを送信したり、効果音を再生したりしています。
コントロールグループ
'cgroups' としても知られるコントロールグループは、Linux カーネルの機能で、リソースをグループ化してプロセスを実行するために割り当てることができます。cgroups は、リソースをプロセスに割り当てるだけでなく、cgroup 内で実行されているすべてのプロセスによるリソースの使用状況をレポートすることもできます。
Check Mode (チェックモード)
--check オプションを使用して Ansible を実行することを指します。このオプションを使用すると、このフラグなしにこのコマンドを実行した場合に、加えられる可能性のある変更を出力するのみで、リモートシステムには変更が加えられません。これは、他のシステムのいわゆる「ドライラン」モードに似ています。ただし、これには予期しないコマンドの失敗やカスケード効果 (他のシステムの同様のモードにも当てはまります) は考慮されていません。チェックモードは、何が起こるかを把握するために使用しますが、適切なステージング環境の代わりにはなりません。
コンテナーグループ
コンテナーグループは、ジョブが実行される Kubernetes または OpenShift クラスターへの Pod のプロビジョニング設定を指定するインスタンスグループの一種です。これらの Pod はオンデマンドでプロビジョニングされ、Playbook の実行中のみ存在します。
認証情報
Automation Controller がマシンに対してジョブを起動したり、インベントリーソースと同期したり、バージョン管理システムからプロジェクトコンテンツをインポートしたりするために使用できる認証の詳細です。詳細は、ユーザー認証情報の管理 を参照してください。
認証情報プラグイン
外部の認証情報タイプ、メタデータフィールド、シークレット管理システムとの対話に必要なコードの定義を含む Python コード
分散ジョブ
ジョブテンプレート、インベントリー、スライスサイズで構成されるジョブ。実行されると、分散されたジョブは、各インベントリーを複数の「スライスサイズ」のチャンクにスライスし、これらをサイズの小さいジョブスライスの実行に使用します。
外部認証情報タイプ
シークレット管理システムとの認証に使用する管理認証情報タイプ
ファクト
ファクトとは、リモートノードに関して検出された情報です。これらは変数と同じように Playbook やテンプレートで使用できますが、ファクトは設定するのではなく推論されます。ファクトは、リモートノードで内部セットアップモジュールを実行することにより、プレイを実行するときに自動的に検出されます。セットアップモジュールを明示的に呼び出す必要はなく、ただ実行されるだけです。必要がない場合は、無効にして時間を節約できます。他の設定管理システムから切り替えるユーザーの利便性を考慮して、ファクトモジュールは、ohai ツールと facter ツールがインストールされている場合は、それぞれ Chef と Puppet のファクトライブラリーであるファクトも取り込みます。
Forks
Ansible と Automation Controller はリモートノードと並行して通信します。並列処理のレベルは、ジョブテンプレートの作成または編集中に、--forks を渡すか、設定ファイルのデフォルトを編集するなど、いくつかの方法で設定できます。デフォルトは、非常に保守的な設定の 5 フォークですが、大量の RAM がある場合は、これを 50 などのより高い値に設定して並列処理を増やすことができます。
Group
セットとして対応可能な Ansible 内の一連のホストを指します。それらの内の多くが単一インベントリーに存在する場合があります。
グループ変数
group_vars/ ファイルは、インベントリーファイルとともにディレクトリーに保存されるファイルで、オプションで各グループにちなんだファイル名が付けられます。このファイルは、特にデータ構造が複雑な場合などに、所定グループに提供される変数を配置できる便利な場所になります。これにより、これらの変数をインベントリーファイルまたは Playbook に埋め込む必要がなくなります。
ハンドラー
ハンドラーは Ansible Playbook の通常のタスクに似ています (タスク を参照) が、タスクに "notify" ディレクティブが含まれており、タスクで変更ありと示している場合にのみ実行されます。たとえば、設定ファイルが変更された場合、設定ファイルのテンプレート操作を参照するタスクがサービス再起動ハンドラーに通知する可能性があります。これは、サービスを再起動する必要がある場合にのみサービスをバウンスできることを意味します。ハンドラーはサービスの再起動以外にも使用できますが、最も一般的な用途はサービスの再起動です。
Host
Automation Controller によって管理されるシステム。物理サーバー、仮想サーバー、クラウドベースのサーバー、またはその他のデバイス (通常はオペレーティングシステムインスタンス) が含まれる場合があります。ホストはインベントリーに含まれます。「ノード」と呼ばれることもあります。
ホスト指定子
Ansible の各プレイは、一連のタスク (システムのロール、目的、または順序を定義する) を一連のシステムにマップします。各プレイの "hosts:" ディレクティブは、しばしばホスト指定子と呼ばれます。1 つのシステム、多数のシステム、1 つ以上のグループ、または 1 つのグループにあり明示的に別のグループにはない複数のホストを選択することができます。
インスタンスグループ
クラスター環境で使用するインスタンスを含むグループ。インスタンスグループは、ポリシーに基づいてインスタンスをグループ化する機能を提供します。
インベントリー
ジョブの起動対象となるホストのコレクションです。
インベントリースクリプト
SQL データベース、CMDB ソリューション、LDAP などの外部リソースからホスト、ホストのグループメンバーシップ、および変数情報を検索するプログラム。この概念は Puppet (「外部ノード分類子」と呼ばれる) から採用されており、同様に機能します。
インベントリーソース
現在のインベントリーグループにマージする必要のあるクラウドまたは他のスクリプトに関する情報のことです。グループ、ホストおよびグループやホストに関する変数が自動的に設定されます。
ジョブ
Automation Controller で起動される多くのバックグラウンドタスクの 1 つで、これは通常、Ansible Playbook の起動など、ジョブテンプレートのインスタンス化したものです。他の種類のジョブには、インベントリーのインポート、ソースコントロールからのプロジェクトの同期、管理上のクリーンアップアクションなどがあります。
ジョブの詳細
出力および成功/失敗を含む、特定ジョブの実行履歴のことです。
ジョブスライス
分散ジョブ を参照してください。
ジョブテンプレート
Ansible Playbook とその起動に必要なパラメーターのセットの組み合わせです。詳細は、ジョブテンプレート を参照してください。
JSON
JSON は、JavaScript オブジェクト構文に基づいて構造化データを表すためのテキストベースの形式です。Ansible と Automation Controller は、リモートモジュールからの戻りデータに JSON を使用します。これにより、Python だけでなく任意の言語でモジュールを作成できるようになります。
メタデータ
認証後に外部システム内のシークレットを見つけるための情報。ユーザーは、外部認証情報をターゲット認証情報フィールドにリンクするときにこの情報を提供します。
ノード

ノードは、インスタンスデータベースモデルのエントリー、または /api/v2/instances/ エンドポイントに対応し、クラスターまたはメッシュに参加するマシンです。統合ジョブ API は、controller_nodeexecution_node フィールドを報告します。実行ノードは、ジョブの実行先で、コントローラーノードはジョブとサーバー機能の間のインターフェイスとなります。

Expand
ノードタイプ説明

Control

永続的なサービスを実行し、ジョブをハイブリッドノードと実行ノードに委任するノード。

Hybrid

永続的なサービスを実行し、ジョブを実行するノード。

Hop

メッシュ間の中継のみに使用されます。

Execution

コントロールノードから配信されたジョブを実行するノード (ユーザーの Ansible Automation から送信されたジョブ)

通知テンプレート
名前、説明および定義された設定を持つ通知タイプ (メール、Slack、Webhook など) のことを指します。
通知
メール、Slack、Webhook などの通知には、通知テンプレートで定義された名前、説明、設定があります。たとえば、ジョブが失敗すると、通知テンプレートで定義された設定を使用して通知が送信されます。
Notify (通知)
タスクが変更イベントを登録し、プレイの終了時に別のアクションを実行する必要があることをハンドラータスクに通知する行為。ハンドラーが複数のタスクから通知された場合でも、ハンドラーは 1 回だけ実行されます。ハンドラーは、通知された順序ではなく、リストされている順序で実行されます。
組織
ユーザー、チーム、プロジェクト、インベントリーの論理的なコレクション。組織はオブジェクト階層の最上位レベルです。
組織管理者
組織内で新しいユーザーやプロジェクトを作成するなど、組織のメンバーシップと設定を変更する権限を持つユーザー。組織管理者は、組織内の他のユーザーに権限を付与することもできます。
権限
プロジェクト、インベントリーや他のオブジェクトの読み取り、変更および管理を実行するためにユーザーおよびチームに割り当てられる権限のセットを指します。
プレイ
最小単位のプレイは、ホスト指定子で選択されるホストのセット (通常はグループで選択されますが、ホスト名 glob で選択されることもある) と、システムが実行するロールを定義するためにホストで実行されるタスク間のマッピングです。Playbook はプレイのリストです。Playbook には 1 つまたは複数のプレイが存在します。
Playbook
Ansible playbook。詳細は、Playbook のスタートガイド を参照してください。
ポリシー
ポリシーは、インスタンスグループがどのように動作し、ジョブがどのように実行されるかを規定します。
プロジェクト
Automation Controller にある Ansible Playbook の論理的コレクションのことです。
ロール
ロールは、Ansible および Automation Controller の組織単位です。ホストのグループ (または一連のグループ、ホストパターンなど) にロールを割り当てると、ホストが特定の動作を実装します。ロールには、変数値、タスク、ハンドラー、またはこれらの組み合わせの適用を含めることができます。ロールに関連付けられたファイル構造により、ロールは再配布可能な単位となり、Playbook 間または他のユーザーと動作を共有できるようになります。
シークレット管理システム
トークン、パスワード、証明書、暗号化キー、他の機密データをセキュアに保存して、これらのデータへのアクセスを制御するサーバーまたはサービス
スケジュール
ジョブが自動的に実行される日時のカレンダーのことを指します。
スライスされたジョブ
分散ジョブ を参照してください。
ソース認証情報
ターゲット認証情報のフィールドにリンクされる外部認証情報
Sudo
Ansible は root ログインを必要とせず、デーモンレスであるため、root レベルのデーモンも必要ありません (これは、機密性の高い環境ではセキュリティー上の問題となる可能性があります)。Ansible は、ログインして sudo コマンドでラップされた多くの操作を実行でき、パスワードなしの sudo とパスワードベースの sudo の両方で動作します。通常 sudo では機能しない一部の操作 (scp ファイル転送など) は、sudo モードでの実行中に Ansible の copytemplate、および fetch モジュールを使用して実行できます。
スーパーユーザー
組織に関連付けられているかどうかに関係なく、システム内のオブジェクトを編集するパーミッションを持つサーバーの管理者。スーパーユーザーは組織や他のスーパーユーザーを作成できます。
Survey
ジョブテンプレート上で設定可能な、ジョブ起動時にジョブテンプレートによって尋ねられる質問のことを指します。
ターゲット認証情報
外部認証情報にリンクされている入力フィールドが含まれる外部以外の認証情報
チーム
ユーザー、プロジェクト、認証情報、パーミッションが関連付けられた組織の下位部門です。チームは、ロールベースのアクセス制御スキームを実装し、組織全体で責任を委譲する手段を提供します。
ユーザー
パーミッションおよび認証情報が関連付けられたオペレーターのことを指します。
Webhook
Webhook により、アプリケーション間の通信と情報共有が可能になります。これらは、SCM にプッシュされたコミットに応答し、ジョブテンプレートまたはワークフローテンプレートを起動するために使用されます。
ワークフロージョブテンプレート
単一ユニットとして実行するためにリンクされたジョブテンプレート、プロジェクトの同期、およびインベントリーの同期の任意の組み合わせで構成されるセットのことを指します。
YAML
設定ファイルの作成によく使用される人間が判読可能な言語。Ansible と Automation Controller は、YAML を使用して、Playbook 設定言語と変数ファイルを定義します。YAML には最小限の構文があり、非常に簡潔で、一見して判断しやすくなっています。これは設定ファイルや人間にとって優れたデータ形式であるだけでなく、機械でも読み取り可能です。YAML は動的言語コミュニティーで人気があり、この形式には多くの言語でシリアル化に使用できるライブラリーが含まれています。たとえば、Python、Perl、または Ruby が含まれます。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る