自動化実行の使用
自動化実行を使用したデプロイ、定義、操作、拡張、委譲の自動化
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
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. 通知の統合 リンクのコピーリンクがクリップボードにコピーされました!
自動化のステータスを追跡します。
次の通知を設定できます。
- ジョブテンプレート、プロジェクト、または組織全体でスタック可能な通知
- ジョブの開始、ジョブの成功、ジョブの失敗、およびジョブの承認に関するさまざまな通知 (ワークフローノードの場合)
次の通知ソースがサポートされています。
- メール
- Grafana
- IRC
- Mattermost
- PagerDuty
- Rocket.Chat
- Slack
- Twilio
- Webhook (他のツールと統合するには、任意の Webhook に POST 要求を送信)
前述の通知タイプごとに通知メッセージをカスタマイズすることもできます。
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 をインストールした後、ログインする必要があります。
手順
- インストール完了後に提供されたログイン情報を使用して、Web ブラウザーを開き、サーバー URL https://<CONTROLLER_SERVER_NAME>/ に移動して Ansible Automation Platform にログインします。
インストールプロセス中に指定した認証情報を使用してログインします。
- デフォルトのユーザー名は admin です。
- admin のパスワードは指定した値です。
- 必要なユーザーの横にある アイコン ⋮ をクリックします。
- をクリックします。
- 必要な詳細を編集し、 をクリックします。
2.1. サービスアカウントの認証情報を使用したサブスクリプションの確認 リンクのコピーリンクがクリップボードにコピーされました!
Ansible Automation Platform に初めてログインするときは、サブスクリプション情報を追加する必要があります。
すでにサブスクリプションを追加している場合は、 → → に移動して、サブスクリプションウィザードでサブスクリプションの詳細を更新できます。
前提条件
- 組織管理者である。
- サービスアカウントを作成 し、クライアント ID とクライアントシークレットを保存した。
管理者アクセス権がない場合は、ユーザー名とパスワード タブに Red Hat のユーザー名とパスワードを入力して、サブスクリプションを検索し、Ansible Automation Platform インスタンスに追加できます。
手順
サービスアカウントの認証情報を入力して、プロファイルに関連付けられているサブスクリプションを確認します。
- サブスクリプションを見つけるには、Service Account というタブをクリックします。
- Client ID フィールドに、サービスアカウントの作成時に受け取ったクライアント ID を入力します。
- Client secret フィールドに、サービスアカウントの作成時に受け取ったクライアントシークレットを入力します。サブスクリプションが、Subscription というラベルの付いたリストメニューに表示されます。サブスクリプションを選択します。
- サブスクリプションを追加したら、 をクリックします。
- End User License Agreement に同意することを示すボックスをチェックします。
- 情報を確認して、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 ページでは、管理者は次の項目を設定できます。
第4章 検索 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller の検索ツールでは、さまざまな機能にわたる検索およびフィルター機能を使用できます。検索フィールドの Name メニューから、リストを展開して検索条件を使用できます。
4.1. 検索のルール リンクのコピーリンクがクリップボードにコピーされました!
これらの検索のヒントは、ホストの検索を前提にはしていません。
- 検索の一般的な構文は、フィールドとそれに続く値で構成されます。
- コロンは、検索するフィールドと値を区切るために使用されます。
-
検索にコロンがない場合 (例 3 を参照)
?search=foobarが送信される単純な文字列検索として扱われます。
ジョブテンプレートの検索機能は、英数字だけに制限されています。
以下は、検索に使用される構文の例です。
-
name:localhostこの例では、name 属性で文字列localhostを検索します。この文字列が Fields または Related Fields の内容と一致しない場合は、検索全体が文字列として扱われます。 -
Organization.name:Defaultこの例は、関連フィールドの検索を示しています。organization.nameのピリオドは、モデルとフィールドを区切ります。検索の深さまたは複雑さに応じて、クエリーの対象部分に複数のピリオドを含めることができます。 foobarこれは、単純な文字列 (キーワード) 検索で、名前および説明フィールドに対してicontains検索を使用して検索用語のすべてのケースを検出します。foo barのように用語の間にスペースを使用すると、両方の用語を含む結果が返されます。"foo bar"のように用語が引用符で囲まれている場合、Automation Controller は、これらの用語が一緒に出現する文字列を検索します。固有名の検索は、API 名に対して検索を行います。たとえば、ユーザーインターフェイスの
Management jobは、API のsystem_jobと同じです。-
Organization:Defaultこの例は、関連フィールドの検索を示していますが、組織に関連するフィールドは指定されていません。これは API でサポートされており、単純な文字列検索に似ていますが、組織に対して実行されます (icontainsは名前と説明の両方に対する検索が含まれます)。
4.1.1. 検索フィールドの値 リンクのコピーリンクがクリップボードにコピーされました!
特定のフィールドの値を見つけるには、API エンドポイントで広範なオプションとその有効な値を参照してください。たとえば、/api/v2/jobs > type フィールドに対して検索する場合は、/api/v2/jobs に対して OPTIONS リクエストを実行し、API で "type" のエントリーを検索して値を見つけることができます。さらに、各画面の一番下までスクロールすると、関連する検索を表示できます。/api/v2/jobs の例では、関連する検索に次の結果が表示されます。
"related_search_fields": [
"modified_by__search",
"project__search",
"project_update__search",
"credentials__search",
"unified_job_template__search",
"created_by__search",
"inventory__search",
"labels__search",
"schedule__search",
"webhook_credential__search",
"job_template__search",
"job_events__search",
"dependent_jobs__search",
"launch_config__search",
"unifiedjob_ptr__search",
"notifications__search",
"unified_job_node__search",
"instance_group__search",
"hosts__search",
"job_host_summaries__search"
Fields の値は、GET リクエストのキーから取得されます。url、related、および summary_fields は使用されません。Related Fields の値も OPTIONS のレスポンスから取得されますが、別の属性から取得されます。Related Fields は、related_search_fields からすべての値を取得し、末尾から __search を削除することによって設定されます。
Fields の値または Related Fields の値で始まらない検索は、一般的な文字列検索として扱われます。たとえば、localhost を検索すると、UI は ?search=localhost をクエリーパラメーターとして API エンドポイントに送信します。これは、名前フィールドと説明フィールドで icontains を検索するショートカットです。
4.1.3. その他の検索に関する留意事項 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller で検索する場合は、次の問題に注意してください。
- 現在、OR クエリーでサポートされている構文はありません。すべての検索語はクエリーパラメーター内で AND 演算が実行されます。
- 検索パラメーターの左側を引用符で囲むと、スペースを含む文字列の検索がサポートされます。詳細は、検索のルール を参照してください。
-
現在、Fields 内の値は、GET リクエストで返されることが想定されている直接属性です。いずれかの値に対して検索するたびに、Automation Controller は
__icontains検索を実行します。したがって、たとえば、name:localhostは?name__icontains=localhostを返します。Automation Controller は現在、すべての Field 値 (idも含む) に対してこの検索を実行します。
4.2. 並び替え リンクのコピーリンクがクリップボードにコピーされました!
必要に応じて、各列の矢印を使用して昇順で並べ替えます。以下はスケジュールリストの例です。
矢印の方向は、列の並べ替え順序を示します。
第5章 Automation Controller のジョブ リンクのコピーリンクがクリップボードにコピーされました!
ジョブは、Ansible Playbook をホストのインベントリーに対して起動する Automation Controller のインスタンスです。
Jobs リストビューには、ジョブとそのステータスのリストが表示され、completed successfully、failed または active (running) ジョブとして表示されます。デフォルトのビューは折りたたまれて (コンパクト)、ジョブ名、ステータス、ジョブタイプ、開始時刻、終了時刻が表示されます。矢印
アイコンをクリックして、展開し、詳細を表示します。このリストをさまざまな基準で並べ替えたり、検索を実行して目的のジョブをフィルタリングしたりできます。
この画面から、次のタスクを実行できます。
-
Domains タスクバーで、ドメインを指定して、関連するリソースに簡単にアクセスできます。
アイコンをクリックして既存のラベルを編集するか、 して独自のラベルを設定します。
- 特定のジョブの詳細と標準出力を表示する
-
ジョブを再起動する
- 選択したジョブをキャンセルまたは削除する
再起動操作は、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_STDOUT を True に設定します。
詳細は、Ansible 設定の ANSIBLE_DISPLAY_ARGS_TO_STDOUT を参照してください。
、、ジョブ出力のダウンロード
、またはジョブの削除
を実行できます。
関連ジョブの実行中にインベントリーの更新を実行できます。大規模なプロジェクト (約 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 に同じ情報が表示されます。これはデバッグに役立ちます。
ナビゲーションメニューを使用して、、、ジョブ出力のダウンロード
、またはジョブの削除
を実行できます。
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 の実行を完了するのにかかった時間
、、ジョブ出力のダウンロード
、またはジョブの削除
を実行できます。
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
手順
容量を表示または編集します。
- ナビゲーションパネルから、 → → を選択します。
- Instance Groups リストビューで、必要なインスタンスを選択します。
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章 ジョブテンプレート リンクのコピーリンクがクリップボードにコピーされました!
→ から、ジョブテンプレートとワークフロージョブテンプレートの両方を作成できます。
ワークフロージョブテンプレートについては、ワークフロージョブテンプレート を参照してください。
ジョブテンプレートは、Ansible ジョブを実行するための定義とパラメーターのセットです。ジョブテンプレートは、同じジョブを何度も実行する場合に役立ちます。また、Ansible Playbook コンテンツの再利用とチーム間のコラボレーションを促進します。
6.1. 自動化テンプレート リンクのコピーリンクがクリップボードにコピーされました!
Automation Templates ページには、現在使用可能な ジョブテンプレート と ワークフロージョブテンプレート の両方が表示されます。
自動化テンプレートは、複雑な IT タスクを自動化および調整するための強力な青写真として機能します。
ジョブテンプレートまたはワークフローテンプレートとして定義されているかどうかに関係なく、自動化テンプレートは日常的な操作を標準化および合理化し、さまざまな環境で一貫した実行を可能にします。
自動化テンプレートは、Playbook、インベントリー、認証情報、その他の設定詳細を指定することにより、手動による介入を排除し、エラーを削減し、タスクの完了を加速します。
また、ワークフローテンプレートで複数のタスクを連鎖できるようにすることで柔軟性も提供し、複数のシステムやプロセスにまたがる高度な自動化ユースケースに対応します。
これにより、IT チームは高い効率性と制御性を維持しながら、自動化を確実に拡張できます。
デフォルトのビューは折りたたまれており (コンパクト)、テンプレート名、テンプレートタイプ、およびそのテンプレートを使用して実行された最後のジョブのタイムスタンプが表示されます。各エントリーの横にある
アイコンをクリックすると、詳細を展開して表示できます。このリストは名前のアルファベット順に並べ替えられていますが、他の条件で並べ替えたり、テンプレートのさまざまなフィールドや属性で検索したりできます。
この画面から、ジョブテンプレートを起動
、編集
、複製
できます。
テンプレート名を選択すると、テンプレートが最後に実行された日時など、テンプレートの詳細情報が表示されます。
このリストは名前のアルファベット順に並べ替えられていますが、他の条件で並べ替えたり、テンプレートのさまざまなフィールドや属性で検索したりできます。
ジョブテンプレートの検索機能は、英数字だけに制限されています。
ワークフローテンプレートには、ワークフロービジュアライザーアイコン (
) があります。これはワークフローエディターにアクセスするためのショートカットとして使用できます。
ワークフローテンプレートは、ジョブテンプレートを使用して構築できます。ジョブテンプレートの隣にある、Workflow Visualizer
アイコンを表示するテンプレートが、ワークフローテンプレートです。アイコンをクリックすると、ワークフローをグラフィカルに構築できます。ジョブテンプレートの多くのパラメーターで、Prompt on Launch を選択できます。これはワークフローレベルで変更でき、ジョブテンプレートレベルで割り当てられた値には影響しません。手順は、ワークフロービジュアライザー セクションを参照してください。
6.2. 関心のあるドメインの設定 リンクのコピーリンクがクリップボードにコピーされました!
ドメインフィルタリングを使用すると、自動化実行の Jobs と Templates のサブセクションに表示されるコンテンツをカスタマイズできます。ジョブとテンプレートは説明ラベルにリンクされています。ラベルを選択すると、関連性の低いリソースを除外できるため、関心のある分野に関連するリソースに簡単にアクセスできるようになります。
手順
- ナビゲーションパネルから、 → または → を選択します。
- ページ見出しの下、Domains の横にトピック関連のラベルのリストがあります。ラベルを選択してジョブとジョブテンプレートをフィルタリングし、ラベルに関連するコンテンツのみを表示します。複数のラベルを選択できます。
- 選択をクリアするには、X をクリックします。
-
ドメインオプションをカスタマイズするには、
アイコンを選択します。表示されるモーダルで、Add Domain を選択して、フィルタリングに使用する新しいドメインを追加します。
個々のジョブテンプレートにラベルを追加すると、関連するドメインのラベルでフィルタリングしたときに、テンプレートがリソースとして表示されます。 → に移動し、ジョブテンプレートを選択して、 をクリックします。編集画面で、Labels フィールドに使用するラベルを入力し、 をクリックします。
6.3. ジョブテンプレートの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順
- ナビゲーションパネルから、 → を選択します。
- Automation Templates ページで、Create template リストから Create job template を選択します。
次のフィールドに適切な詳細を入力します。
注記フィールドで 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
アイコンを選択すると、別のウィンドウが開きます。
利用可能なオプションから、このジョブテンプレートで使用する認証情報を選択します。
リストが膨大な場合は、ドロップダウンメニューリストを使用して認証情報タイプでフィルタリングします。一部の認証情報タイプは、特定のジョブテンプレートに適用されないため、リストされていません。
- 選択した場合、デフォルトの認証情報が含まれるジョブテンプレートが起動したときに、別の認証情報を指定すると、デフォルトの認証情報が置き換えられます (認証情報が同じタイプの場合)。以下はこのメッセージの例です。
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
-
必要に応じて、このジョブテンプレートを説明するラベル (
devやtestなど) を指定します。 - ラベルを使用して、表示内のジョブテンプレートと完了したジョブをグループ化およびフィルタリングします。
- ラベルはジョブテンプレートの追加時に作成されます。ラベルは、ジョブテンプレートで指定されたプロジェクトを使用して、単一の組織に関連付けられます。組織のメンバーは、編集パーミッション (管理者ロールなど) を持っている場合、ジョブテンプレートにラベルを作成できます。
- ジョブテンプレートを保存すると、Expanded ビューの Job Templates の概要にラベルが表示されます。
-
ラベルの横にある
を選択して削除します。ラベルが削除されると、そのラベルはその特定のジョブまたはジョブテンプレートとの関連付けが解除されますが、ラベルを参照する他のジョブには関連付けられたままになります。
- ジョブは、起動時にジョブテンプレートからラベルを継承します。ジョブテンプレートからラベルを削除すると、ジョブからも削除されます。
- 選択すると、デフォルト値が指定されている場合でも、必要に応じて起動時に追加のラベルを指定するようにプロンプトが表示されます。
-
既存のラベルを削除することはできません。
を選択しても、新しく追加されたラベルだけが削除され、既存のデフォルトのラベルは削除されません。
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
このジョブテンプレートに関連付ける インスタンスおよびコンテナーグループ を選択します。リストが膨大な場合は、
アイコンを使用してオプションを絞り込みます。ジョブテンプレートのインスタンスグループは、ジョブのスケジュール基準に影響します。ルールは、ジョブランタイムの動作 および ジョブ実行場所の制御 を参照してください。システム管理者は、ジョブテンプレート内のインスタンスグループを使用できるように、ユーザーまたはチームのパーミッションを割り当てる必要があります。コンテナーグループを使用するには管理者権限が必要です。
- 必須です。
選択すると、ジョブの優先インスタンスグループが優先順に提供されます。最初のグループの容量が不足している場合は、容量のあるグループが見つかるまでリスト内の後続のグループが検討され、見つかった時点でそのグループが選択されてジョブが実行されます。
- インスタンスグループの入力を求めるプロンプトが表示された場合は、入力した内容が通常のインスタンスグループ階層を置き換え、組織とインベントリーのすべてのインスタンスグループをオーバーライドします。
- インスタンスグループのプロンプトは、後続のプロンプトウィンドウに独自のステップとして表示されます。
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になります。必要に応じて、このテンプレートを起動するための次のオプションを設定できます。
-
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 フィールドにリストされているインスタンスグループのみがジョブを実行できます。オフの場合、ジョブの実行場所の制御 で説明されている階層に基づいて、実行プール内の使用可能なすべてのインスタンスが使用されます。
-
Privilege escalation: オンにすると、この Playbook を管理者として実行できるようになります。これは、
- ジョブテンプレートの詳細の設定が完了したら、 をクリックします。
テンプレートを作成してもジョブテンプレートページは終了せず、ジョブテンプレートの Details タブに進みます。テンプレートを保存したら、 をクリックしてジョブを開始できます。また、 をクリックして、権限、通知、完了したジョブの表示、アンケートの追加 (ジョブタイプがスキャンでない場合) などのテンプレートの属性を追加または変更することもできます。起動する前にまずテンプレートを保存する必要があります。そうしないと、 は無効のままになります。
検証
- ナビゲーションパネルから、 → を選択します。
- 新しく作成したテンプレートが Templates ページに表示されることを確認します。
6.4. テンプレートへのパーミッションの追加 リンクのコピーリンクがクリップボードにコピーされました!
次の手順に従って、チームのパーミッションを追加します。
手順
- ナビゲーションパネルから、 → を選択します。
- テンプレートを選択し、Team Access または User Access タブで をクリックします。
Teams または Users を選択し、 をクリックします。
- リストから 1 つまたは複数のユーザーを選択します。これには、メンバーとして追加するユーザーの隣にあるチェックボックスをクリックして、 をクリックします。
- ユーザーまたはチームに割り当てるロールを選択します。ロールの完全なリストを確認するには、必ず下にスクロールしてください。各リソースには、使用可能なさまざまなオプションがあります。
- をクリックして、選択したユーザーまたはチームにロールを適用し、メンバーとして追加します。
ユーザーとチームを追加するウィンドウが閉じて、各ユーザーとチームに割り当てられた更新されたロールが表示されます。
特定のユーザーのロールを削除するには、リソースの横にある
アイコンをクリックします。
これにより確認ダイアログが起動し、関連付けの解除を確定するように求められます。
6.5. ジョブテンプレートの削除 リンクのコピーリンクがクリップボードにコピーされました!
ジョブテンプレートを削除する前に、そのジョブテンプレートがワークフロージョブテンプレートで使用されていないことを確認してください。
手順
次の方法を使用してジョブテンプレートを削除します。
-
⋮ アイコンをクリックして、Delete Template
を選択します。
-
または、必要なジョブテンプレートを選択します。Details ページで ⋮ アイコンをクリックし、
を選択します。
-
⋮ アイコンをクリックして、Delete Template
他の作業項目で使用されている項目を削除すると、削除の影響を受ける項目がリストされ、削除の確認を求めるメッセージが表示されます。一部の画面には、無効な項目または以前に削除された項目が含まれており、実行に失敗します。
6.6. 通知の使用 リンクのコピーリンクがクリップボードにコピーされました!
ナビゲーションパネルから、 → → を選択します。セットアップした通知インテグレーションとそのステータスを確認できます (実行されている場合)。
トグルを使用して、特定のテンプレートで使用する通知を有効または無効にします。詳細は、通知の有効化と無効化 を参照してください。
通知が設定されていない場合は、 をクリックして新しい通知を作成します。さまざまな通知タイプと拡張メッセージングの設定の詳細は、通知タイプ を参照してください。
6.7. 完了したジョブの表示 リンクのコピーリンクがクリップボードにコピーされました!
Jobs タブには、実行されたジョブテンプレートのリストが表示されます。各ジョブの横にある展開アイコンをクリックすると、次の詳細が表示されます。
- ID および名前
- Status
- ジョブの種類
- 実行時間
- 開始時間および終了時間
- ジョブの開始者、使用したテンプレート、インベントリー、プロジェクト、認証情報
これらの基準のいずれかを使用して、完了したジョブのリストをフィルタリングできます。
このリストに表示されるスライスされたジョブには、実行済みのスライスされたジョブの数に応じてラベルが付けられます。
6.8. ジョブテンプレートのスケジュール設定 リンクのコピーリンクがクリップボードにコピーされました!
Schedules タブから特定のジョブテンプレートのスケジュールにアクセスします。
手順
ジョブテンプレートをスケジュールするには、ジョブテンプレートから Schedules タブを選択し、適切な方法を選択します。
- スケジュールがすでに設定されている場合は、スケジュール設定を確認、編集、有効化または無効化します。
- スケジュールが設定されていない場合の詳細は スケジュール を参照してください。
Credentials フィールド で Prompt on Launch を選択し、ジョブテンプレートのスケジュール情報を作成または編集すると、スケジュールフォームに Prompt オプションが表示されます。
Prompt ダイアログでデフォルトのマシン認証情報を削除するには、保存する前に別のマシン認証情報に置き換える必要があります。
スケジュールに extra_vars を設定するには、ジョブテンプレートで Variables の Prompt 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 の作成 リンクのコピーリンクがクリップボードにコピーされました!
手順
- ナビゲーションパネルから、 → を選択します。
- Survey を作成するジョブテンプレートを選択します。
- Survey タブから、 をクリックします。
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 length と Maximum length: 回答に特定の長さが必要な場合に指定します。
- Default answer: 質問に対するデフォルトの回答。この値は、インターフェイスに事前に入力されており、ユーザーが回答を指定しない場合に使用されます。
質問の情報を入力したら、 をクリックして質問を追加します。
Survey の質問が Survey リストに表示されます。質問がある場合は、
をクリックして編集してください。
各質問の横にあるボックスをオンにし、 をクリックして質問を削除するか、メニューバーの切り替えオプションを使用して Survey プロンプトを有効または無効にします。
Survey の質問が複数ある場合は、グリッドアイコンをクリックしてドラッグし、 をクリックして質問の順序を並べ替えます。
- さらに質問を追加するには、 をクリックします。
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 を実行し、責任を委任できるため、一貫性が高まります。
手順
次のいずれかの方法を使用して、ジョブテンプレートを起動します。
-
ナビゲーションパネルから、 → を選択し、ジョブテンプレートカード上の Launch template
をクリックします。
- 起動するジョブテンプレートのジョブテンプレートの 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. ジョブテンプレートの複製 リンクのコピーリンクがクリップボードにコピーされました!
ジョブテンプレートを複製しても、関連付けられているスケジュール、通知、または権限は複製されません。スケジュールと通知は、ジョブテンプレートの複製を作成するユーザーまたは管理者が再作成する必要があります。ジョブテンプレートを複製するユーザーに管理者権限が付与されていても、ジョブテンプレートに権限が割り当てられる (複製される) ことはありません。
手順
- ナビゲーションパネルから、 → を選択します。
複製するテンプレートに関連する {MoreActionIcon} アイコンをクリックし、
Duplicate Template アイコンを選択します。
- 複製元のテンプレートの名前とタイムスタンプが付いた新しいテンプレートがテンプレートのリストに表示されます。
- クリックして新しいテンプレートを開き、 をクリックします。
- Name フィールドの内容を新しい名前に置き換え、他のフィールドのエントリーを入力または変更して、このページを完成させます。
- をクリックします。
6.12. ファクトキャッシング リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller は、Ansible Fact Cache プラグインを通じてホストごとにファクトを保存および取得できます。この動作はジョブテンプレートごとに設定できます。ファクトキャッシングはデフォルトでオフになっていますが、こちらを有効にして、実行中のジョブに関連するインベントリーの全ホストに対するファクトリクエストに対応できます。これにより、ホストファクトのインベントリー全体にアクセスしながら、--limit を指定してジョブテンプレートを使用できるようになります。プラグインによってホストごとに適用されるグローバルタイムアウト設定 (秒単位) を指定するには、ナビゲーションパネルから → → を選択し、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_email、project_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 を使用して手動でコールバックするには以下を実行します。
手順
UI で、https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/ という形式のコールバック URL を確認します。
- このサンプル URL の "7" は、Automation Controller のジョブテンプレート ID です。
ホストからのリクエストが 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/- コールバックを成功させるには、要求元のホストがインベントリーに定義されていることを確認してください。
検証
リクエストが成功すると、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_launchが True に設定されている。
例
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 と比較したものです。
| Ansible | Automation Controller |
|---|---|
| ロールのデフォルト | ロールのデフォルト |
| 動的インベントリー変数 | 動的インベントリー変数 |
| インベントリー変数 | Automation Controller インベントリー変数 |
|
インベントリーの | Automation Controller グループ変数 |
|
インベントリーの | Automation Controller ホスト変数 |
|
Playbook の |
Playbook の |
|
Playbook の |
Playbook の |
| ホストのファクト | ホストのファクト |
| 登録された変数 | 登録された変数 |
| ファクトの設定 | ファクトの設定 |
| プレイ変数 | プレイ変数 |
|
プレイの | (サポート対象外) |
|
プレイの |
プレイの |
| ロールと include 変数 | ロールと include 変数 |
| ブロック変数 | ブロック変数 |
| タスク変数 | タスク変数 |
| 追加変数 | ジョブテンプレートの追加変数 |
| ジョブテンプレートの Survey (デフォルト) | |
| ジョブ起動の追加変数 |
6.17.1. ジョブテンプレートの起動 リンクのコピーリンクがクリップボードにコピーされました!
ジョブを手動で再起動する代わりに、launch_type を relaunch に設定することで再起動を指定します。再起動の動作は、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章 ワークフロージョブテンプレート リンクのコピーリンクがクリップボードにコピーされました!
→ から、ジョブテンプレートとワークフロージョブテンプレートの両方を作成できます。
ジョブテンプレートは、ジョブテンプレート を参照してください。
ワークフロージョブテンプレートは、一連の異種リソースをリンクして、リリースプロセスに含まれていたジョブ全体を 1 つの単位として追跡します。これらのリソースには以下が含まれます。
- ジョブテンプレート
- ワークフロージョブテンプレート
- プロジェクト同期
- インベントリーソース同期
Automation Templates ページには、現在利用可能なワークフローとジョブテンプレートが表示されます。
テンプレート名を選択すると、テンプレートが最後に実行された日時など、テンプレートの詳細情報が表示されます。このリストは名前のアルファベット順に並べ替えられていますが、他の条件で並べ替えたり、テンプレートのさまざまなフィールドや属性で検索したりできます。
この画面から、ワークフロージョブテンプレートを起動
、編集
、複製
できます。
ワークフローテンプレートにのみ、ワークフローエディターにアクセスするためのショートカットとしてワークフロービジュアライザーアイコン (
) があります。
ワークフローテンプレートは、別のワークフローテンプレートの設定要素として使用できます。ワークフローテンプレートでいくつかの設定を指定することで、Prompt on Launch を有効にできます。これらの設定は、ワークフロージョブテンプレートレベルで編集できます。これらは、個々のワークフローテンプレートレベルで割り当てられた値には影響しません。詳しい手順は、ワークフロービジュアライザー セクションを参照してください。
8.1. ワークフロージョブテンプレートの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しいワークフロージョブテンプレートを作成するには、次の手順を実行します。
ワークフローテンプレートに制限を設定する場合、Prompt on launch をオンにしないと、制限がジョブテンプレートに渡されません。実行している Playbook に制限が必須である場合、これにより Playbook が失敗する可能性があります。
手順
- ナビゲーションパネルから、 → を選択します。
- Automation Templates ページで、Create template リストから Create workflow job template を選択します。
次のフィールドに適切な詳細を入力します。
注記フィールドで 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
-
必要に応じて、このワークフロージョブテンプレートを説明するラベル (
devやtestなど) を指定します。ラベルを使用して、表示内のワークフロージョブテンプレートと完了したジョブをグループ化およびフィルタリングします。 - ラベルは、ワークフローテンプレートの追加時に作成されます。ラベルは、ワークフローテンプレートで提供されるプロジェクトを使用して、単一の組織に関連付けられます。組織のメンバーは、編集パーミッション (管理者ロールなど) を持っている場合、ジョブテンプレートにラベルを作成できます。
- ジョブテンプレートを保存すると、ワークフロージョブテンプレートの Details ビューにラベルが表示されます。
- ラベルはワークフローテンプレートにのみ適用され、ワークフローで使用されるジョブテンプレートノードには適用されません。
-
ラベルの横にある
を選択して削除します。ラベルが削除されると、そのラベルはその特定のジョブまたはジョブテンプレートとの関連付けが解除されますが、ラベルを参照する他のジョブには関連付けられたままになります。
はい
選択すると、デフォルト値が指定されている場合でも、必要に応じて起動時に追加のラベルを指定するように求められます。- 既存のラベルは削除できません。
を選択すると、新たに追加されたラベルだけが削除され、既存のデフォルトラベルは削除されません。
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 variables の Prompt on launch を選択するか、ジョブテンプレートで Survey を有効にする必要があります。回答された Survey の質問はextra_varsになります。追加変数の詳細は、追加変数 を参照してください。必要に応じて、このテンプレートを起動するための次の 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 の容量決定とジョブへの影響 を参照してください。
- ワークフローテンプレートの設定が完了したら、 をクリックします。
テンプレートを保存すると、ワークフローテンプレートページが終了し、ワークフロービジュアライザーが開きます。ここでワークフローを構築できます。詳細は、ワークフロービジュアライザー セクションを参照してください。それ以外の場合は、次のいずれかの方法を選択します。
ワークフロービジュアライザーを閉じて、新しく保存したテンプレートの Details タブに戻ります。そこで次のタスクを実行できます。
- パーミッション、通知、スケジュール、Survey を確認、編集、追加する
- 完了したジョブの表示
- ワークフローテンプレートを構築する
をクリックし、ワークフローを起動します。
注記起動する前にテンプレートを保存してください。保存しないと、 を使用できるようになりません。Notifications タブは、テンプレートを保存した後にのみ表示されます。
8.2. 権限の使用 リンクのコピーリンクがクリップボードにコピーされました!
Team Access または User Access タブをクリックして、ユーザーとチームメンバーに関連付けられた権限を確認、付与、編集、削除します。
をクリックし、プロンプトに従ってこのワークフローテンプレート用の新しい権限を作成し、権限を割り当てます。
8.3. 通知の使用 リンクのコピーリンクがクリップボードにコピーされました!
ワークフロージョブテンプレートでの通知の操作は、通知の操作 を参照してください。
8.4. 完了したワークフロージョブの表示 リンクのコピーリンクがクリップボードにコピーされました!
Jobs タブには、実行されたジョブテンプレートのリストが表示されます。各ジョブの横にある
アイコンをクリックして、各ジョブの詳細を表示します。
このビューから、ジョブ ID、ワークフロージョブの名前をクリックすると、その内容が図で表示されます。次の例は、ワークフロージョブのジョブの詳細を示しています。
ノードには、識別しやすいようにラベルが付けられています。詳細は、ワークフロービジュアライザー セクションの凡例を参照してください。
8.5. ワークフロージョブテンプレートのスケジュール設定 リンクのコピーリンクがクリップボードにコピーされました!
Schedules タブを選択して、特定のワークフロージョブテンプレートのスケジュールにアクセスします。
ワークフロージョブテンプレートの実行をスケジュールする方法の詳細は、ジョブテンプレートのスケジュール設定 セクションを参照してください。
ネストされたワークフローで使用されるワークフロージョブテンプレートに Survey が含まれている場合、またはインベントリーオプションで Prompt on launch が選択されている場合、スケジュールフォームの および オプションの横に オプションが表示されます。 をクリックすると、オプションの INVENTORY ステップが表示され、インベントリーを指定または削除できます。変更せずにこのステップをスキップすることもできます。
8.6. ワークフロージョブテンプレートでの Survey リンクのコピーリンクがクリップボードにコピーされました!
Run または Check のジョブタイプを含むワークフローでは、ワークフロージョブテンプレートの作成画面または編集画面で Survey を設定する方法が提供されます。
ワークフロージョブテンプレートでの Survey の作成方法やオプションの Survey の質問など、ジョブ Survey の詳細は、ジョブテンプレートでの Survey セクションを参照してください。
8.7. ワークフロービジュアライザー リンクのコピーリンクがクリップボードにコピーされました!
ワークフロービジュアライザーは、ジョブテンプレート、ワークフローテンプレート、プロジェクト同期、およびインベントリー同期をグラフィカルにリンクして、ワークフローテンプレートを構築する方法を提供します。ワークフローテンプレートを構築する前に、親ノード、子ノード、兄弟ノードのさまざまなシナリオに関連する考慮事項について、Automation Controller のワークフロー セクションを参照してください。
8.7.1. ワークフローの構築 リンクのコピーリンクがクリップボードにコピーされました!
次のノードタイプの 2 つ以上を任意に組み合わせて設定して、ワークフローを構築できます。
- テンプレート (ジョブテンプレートまたはワークフロージョブテンプレート)
- プロジェクトの同期
- インベントリー同期
- 承認
手順
ワークフロービジュアライザーを起動するには、次のいずれかの方法を使用します。
ナビゲーションパネルから、 → を選択します。
- ワークフローテンプレートを選択し、 をクリックします。
-
Automation Templates リストビューから、ワークフロージョブテンプレートの横にあるアイコン
をクリックします。
- をクリックすると、ワークフローに追加するノードのリストが表示されます。
Node type リストから、追加するノードのタイプを選択します。
Approval ノードを選択した場合は、承認ノード で詳細を確認してください。
ノードを選択すると、そのノードに関連する有効なオプションが表示されます。
注記ワークフローグラフにデータを入力するときに、デフォルトのインベントリーがないジョブテンプレートを選択すると、親ワークフローのインベントリーが使用されます。ジョブテンプレートでは認証情報は必須ではありません。ただし、パスワードを必要とする認証情報がジョブテンプレートに含まれている場合、その認証情報を要求されている認証情報に置き換えないと、ワークフローのジョブテンプレートを選択できません。
- ノードタイプを選択すると、ワークフローの構築が開始され、選択したノードに対して実行するアクションのタイプを指定する必要があります。このアクションはエッジタイプとも呼ばれます。
ノードが root ノードの場合には、エッジタイプはデフォルトで Always になり、編集できません。後続のノードでは、次のシナリオ (エッジタイプ) のいずれかを選択して、それぞれに適用できます。
- Always run: 成功または失敗にかかわらず、実行を継続します。
- Run on success: 正常に完了したら、次のテンプレートを実行します。
- Run on fail: 失敗後、別のテンプレートを実行します。
Convergence フィールドから、ノードが収束ノードである場合のノードの動作を選択します。
- Any はデフォルトの動作で、次の収束ノードをトリガーする前に、任意のノードが指定どおりに完了できます。いずれかの親のステータスがいずれかの実行条件を満たしている場合、任意 の子ノードが実行されます。任意 のノードではすべてのノードが完了させる必要がありますが、想定した結果で完了させる必要があるのは 1 つのノードのみです。
次のノードを収束してトリガーする前に、すべてのノードが指定どおりに完了させるようにするには、All を選択します。all * ノードの目的は、子ノードが実行できるように、親ノードすべてを想定の結果で完了させることです。ワークフローは、子ノードを実行するためにすべての親が期待どおりに動作することを確認します。それ以外の場合は、子ノードは実行されません。
選択すると、グラフィカルビューでノードに ALL というラベルが付けられます。
注記ノードがルートノードであるか、またはノードが収束していないノードである場合、Convergence ルールの設定は適用されません。その動作は、それをトリガーするアクションによって決定されるためです。
ワークフローで使用されるジョブテンプレートのパラメーターのいずれかで Prompt on launch が選択されている場合、 オプションが表示され、ノードレベルでそれらの値を変更できるようになります。ウィザードを使用して各タブの値を変更し、Preview タブで をクリックします。
ワークフローで使用されるワークフローテンプレートのインベントリーオプションとして Prompt on launch が選択されている場合は、ウィザードを使用してプロンプトでインベントリーを指定します。親ワークフローに独自のインベントリーがある場合、ここで提供されるインベントリーはオーバーライドされます。
注記ワークフロージョブテンプレートに、詳細情報の入力を求める必須フィールドがあるが、デフォルトの値がない場合、ノードの作成時に SELECT オプションを有効にする前にその値を指定する必要があります。
次の 2 つのケースでは、 オプションによって値が指定されるまで、 オプションが無効になります。
- ワークフロージョブテンプレートで Prompt on launch チェックボックスをオンにしたが、デフォルトを指定しない場合。
- 必須であるがデフォルトの回答を指定しない Survey の質問を作成する場合。
ただし、認証情報の場合はこの限りではありません。ノードの作成時にノードの起動に必要なものをすべて指定する必要があるため、ワークフローノードの作成時には、起動時にパスワードを必要とする認証情報は許可されません。ワークフロージョブテンプレートで認証情報の入力を求められた場合、Automation Controller でパスワードを必要とする認証情報を選択できません。
そのノードでの変更を適用するには、プロンプトウィザードが閉じたときに をクリックする必要もあります。それ以外の場合、加えた変更はジョブテンプレートに設定された値に戻ります。
ノードが作成されると、そのジョブタイプのラベルが付けられます。各ワークフローノードに関連付けられたテンプレートは、進行中に選択された実行シナリオに基づいて実行されます。 をクリックすると、各実行シナリオとそのジョブタイプの凡例が表示されます。
ノードの上にマウスをかざすと、ノードを編集したり、ステップとリンクを追加したり、選択したノードを削除したりできます。
注記リンクを追加する際、ステップの上にカーソルを合わせたときに赤い枠線が表示される場合、その 2 つのステップを接続することはできません。これは、ユーザーが "循環依存関係" を作成し、ワークフローが無限ループに陥って終了しない状態になるのを防ぐための予防策です。
- ノードを追加または編集したら、 をクリックして変更を保存し、グラフィカルビューにレンダリングします。ワークフローを構築する可能な方法は、ノードの構築シナリオ を参照してください。
- ワークフロージョブテンプレートのビルドが完了したら、 をクリックしてワークフロージョブテンプレート全体を保存し、新しいワークフローテンプレートの詳細ページに戻ります。
をクリックしても作業内容は保存されませんが、ワークフロービジュアライザー全体が閉じられるため、再度開始する必要があります。
8.7.2. 承認ノード リンクのコピーリンクがクリップボードにコピーされました!
Approval ノードを選択すると、ワークフローを進めるために介入が必要になります。これは、ワークフローで次の Playbook に進むことを承認できるように、Playbook 間でワークフローを一時停止する手段として機能します。これにより、ユーザーは指定された介入時間が与えられますが、別のトリガーを待たずにできるだけ早く続行できるようになります。
タイムアウトのデフォルトはなしですが、リクエストの有効期限が切れて自動的に拒否されるまでの時間を指定できます。承認ノードの情報を選択して指定すると、横に一時停止アイコンが付いた状態でグラフィカルビューに表示されます。
承認者は、次の基準を満たします。
- 承認ノードを含むワークフロージョブテンプレートを実行できるユーザー。
- 組織管理者以上の権限を持つユーザー (そのワークフロージョブテンプレートに関連付けられた組織に対して)。
- 特定のワークフロージョブテンプレート内で明示的に割り当てられた Approve パーミッションを持つユーザー。
保留中の承認ノードが指定された制限時間内に承認されない場合 (有効期限が割り当てられている場合)、または拒否された場合、それらのノードは "timed out" または "failed" としてマークされ、次の "on fail node" または "always node" に移動します。承認された場合は、"on success" パスが選択されます。すでに承認、拒否、またはタイムアウトしたノードに API で POST を実行しようとすると、このアクションが冗長であることがエラーメッセージで通知され、それ以上の手順は実行されません。
次の表は、承認ワークフローで許可されるさまざまなレベルのパーミッションを示しています。
8.7.3. ノードの構築シナリオ リンクのコピーリンクがクリップボードにコピーされました!
次のシナリオでノードを管理する方法を学習します。
手順
親ノードの (
) アイコンをクリックして ステップおよびリンクの追加 を行い、兄弟ノードを追加します。
-
または (
) と Add step をクリックして、分割シナリオを表すルートノードを追加します。
-
分割シナリオを作成する任意のノードで、分割シナリオの開始ノードにマウスを移動し、プラス (
) アイコンをクリックし、ステップとリンクを追加 します。これにより、同じ親ノードから複数のノードが追加され、兄弟ノードが作成されます。
グラフィック表現に関連付けられている記号と色の意味を確認するには、 をクリックしてキーを参照してください。
ワークフローで、兄弟ノードにさまざまなエッジタイプが指定されていて、後続のノードがアタッチされたノードを削除した場合には、アタッチされたノードが自動的に兄弟ノードセットと結合されて、そのエッジタイプを保持します。
8.7.4. ノードの編集 リンクのコピーリンクがクリップボードにコピーされました!
手順
次のいずれかの方法を使用してノードを編集します。
- ノードを編集する場合は、ノードのアイコンをクリックします。ウィンドウには現在の選択が表示され、 をクリックしてこれらの内容を変更します。変更を加えて をクリックすると、変更がグラフィカルビューに適用されます。
-
既存のリンクのエッジタイプ (Run on success, Run on fail, Run always) を編集するには、既存のステータスの (
) をクリックします。
-
リンクを削除するには、(
) をクリックし、 をクリックします。このオプションは、ターゲットまたは子ノードに複数の親がある場合にのみペインに表示されます。すべてのノードは、少なくとも 1 つの他のノードに常にリンクされている必要があるため、古いリンクを削除する前に新しいリンクを作成する必要があります。
次のいずれかの方法を使用して、ワークフロー図のビューを編集します。
-
調査アイコン (
) をクリックすると拡大し、縮小アイコン (
) をクリックするとズームアウトし、拡大アイコン (
) をクリックすると、画面のサイズに合わせます。またはリセットアイコン (
) を使用してビューの位置を変更します。
- ワークフロー図をドラッグして画面上の位置を変更するか、マウスのスクロールを使用してズームします。
-
調査アイコン (
8.8. ワークフロージョブテンプレートの起動 リンクのコピーリンクがクリップボードにコピーされました!
手順
次のいずれかの方法を使用して、ワークフロージョブテンプレートを起動します。
-
ナビゲーションパネルから → を選択し、ジョブテンプレートの横にある
アイコンをクリックします。
- 起動するワークフロージョブテンプレートの Details タブで をクリックします。
-
ナビゲーションパネルから → を選択し、ジョブテンプレートの横にある
ワークフロージョブテンプレートに追加された変数は、ワークフロージョブテンプレートおよび Survey に設定された追加の変数とともに、起動時に Automation Controller に自動的に追加されます。
ワークフローの承認に関連するイベントは、承認リクエストがある場合は、その詳細情報とともにアクティビティーストリーム (
) に表示されます。
8.9. ワークフロージョブテンプレートの複製 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller を使用すると、ワークフロージョブテンプレートを複製できます。ワークフロージョブテンプレートを複製しても、関連付けられているスケジュール、通知、または権限は複製されません。スケジュールと通知は、ワークフローテンプレートの複製を作成するユーザーまたはシステム管理者が再作成する必要があります。ワークフローテンプレートを複製するユーザーに管理者権限が付与されていても、ワークフローテンプレートに権限が割り当てられる (複製される) ことはありません。
手順
- ナビゲーションパネルから、 → を選択します。
複製するテンプレートに関連する
アイコンをクリックし、
Duplicate template アイコンを選択します。
- 複製元のテンプレートの名前とタイムスタンプが付いた新しいテンプレートがテンプレートのリストに表示されます。
- クリックして新しいテンプレートを開き、 をクリックします。
- Name フィールドの内容を新しい名前に置き換え、他のフィールドのエントリーを入力または変更して、このページを完成させます。
- をクリックします。
リソースに関連リソースがあり、その関連リソースに対してユーザーが適切なレベルの権限を持っていない場合、そのリソースを複製することはできません。たとえば、プロジェクトで、読み取り権限しか持たない現在のユーザーの認証情報を使用する場合などです。しかし、ワークフロージョブテンプレートの場合、そのいずれかのノードで、許可されていないジョブテンプレート、インベントリー、または認証情報が使用されていても、ワークフローテンプレートを複製できます。ただし、複製されたワークフロージョブテンプレートには、ワークフローテンプレートのノードの対応するフィールドが存在しません。
8.10. ワークフロージョブテンプレートの追加変数 リンクのコピーリンクがクリップボードにコピーされました!
詳細は、追加変数 セクションを参照してください。
第9章 Automation Controller のワークフロー リンクのコピーリンクがクリップボードにコピーされました!
ワークフローを使用すると、インベントリー、Playbook、または権限を共有する場合と共有しない場合がある、一連の異なるジョブテンプレート (またはワークフローテンプレート) を設定できます。
ワークフローには、ジョブテンプレートと同様に、admin 権限と execute 権限があります。ワークフローは、1 つの単位としてリリースプロセスに含まれる全ジョブセットをトラッキングするタスクを実行します。
ジョブまたはワークフローテンプレートは、ノードと呼ばれるグラフのような構造を使用して相互にリンクされます。これらのノードは、ジョブ、プロジェクト同期、またはインベントリー同期です。テンプレートは、異なるワークフローの一部にすることも、同じワークフロー内で複数回使用することもできます。ワークフローを起動すると、グラフ構造のコピーがワークフロージョブに保存されます。
次の例は、上記の 3 つをすべて含むワークフローとワークフロージョブテンプレートを示しています。
ワークフローが実行されると、ノード内のリンクされたテンプレートからジョブが生成されます。プロンプトフィールド (job_type、job_tags、skip_tags、limit) を持つジョブテンプレートにリンクしているノードには、それらのフィールドを含めることができ、起動時にプロンプトは表示されません。認証情報またはインベントリーの入力を求めるジョブテンプレート (デフォルトなし) は、ワークフローに含めることができません。
9.1. ワークフローのシナリオおよび留意事項 リンクのコピーリンクがクリップボードにコピーされました!
ワークフローを構築するときは、次の点を考慮してください。
- ルートノードは、デフォルトで ALWAYS に設定されており、編集できません。
- ノードは複数の親を持つことができ、子は Success、Failure、または Always のいずれかの状態にリンクできます。Always の場合、状態は Success でも Failure でもありません。状態は、ワークフロージョブテンプレートレベルではなく、ノードレベルで適用されます。ワークフロージョブは、キャンセルされるかエラーが発生しない限り、Success としてマークされます。
- 以下の例のように、ワークフロー内のジョブまたはワークフローテンプレートを削除した場合に、以前に削除済みのジョブやワークフローに連携されていたノードが自動的にアップストリームに接続され、エッジタイプが保持されます。
複数のジョブが 1 つに収束する収束ワークフローを実現できます。このシナリオでは、以下の例に示すように、次のジョブが実行される前に、いずれかのジョブまたはすべてのジョブを完了する必要があります。
- この例では、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 モジュールはこのワークフローを以下のように処理します。
- 統合結果の内容は Web 上にアップロードされます。
-
次に、
invoke_set_statsPlaybook を通じてset_statsが呼び出され、アップロードされたintegration_results.txtの URL が、Ansible 変数integration_results_urlに成果物として保存されます。 -
ワークフローの 2 番目の Playbook は、Ansible の追加変数
integration_results_urlを使用します。URI モジュールを使用して Web を呼び出し、前のジョブテンプレートジョブによってアップロードされたファイルの内容を取得します。次に、取得したファイルの内容を出力します。
アーティファクトを機能させるには、set_stats モジュールの per_host = False というデフォルト設定をそのまま使用してください。
9.3. ワークフローの状態 リンクのコピーリンクがクリップボードにコピーされました!
ワークフロージョブには以下の状態が設定されます (失敗状態は含まれなし)。
- 待機中
- 実行中
- 成功 (終了)
- 取り消し
- エラー
- 失敗
ワークフローのスキームでは、ジョブを取り消すとブランチが取り消され、ワークフロージョブを取り消すとワークフロー全体が取り消されます。
9.4. ロールベースのアクセス制御 リンクのコピーリンクがクリップボードにコピーされました!
ワークフロージョブテンプレートを編集および削除するには、管理者のロールが必要です。ワークフロージョブテンプレートを作成するには、組織管理者またはシステム管理者である必要があります。ただし、管理者は、権限を持っていないジョブテンプレートが含まれるワークフロージョブテンプレートを実行することはできます。システム管理者は空のワークフローを作成し、下位レベルのユーザーに admin_role を付与し、その後さらに多くのアクセスを委譲してグラフを構築できます。ワークフロージョブテンプレートにジョブテンプレートを追加するには、ジョブテンプレートに対する execute アクセス権が必要です。
ユーザーに付与されているパーミッションに応じて、複製コピーの作成やワークフローの再起動など、他のタスクを実行することもできます。再起動またはコピーを作成する前に、ワークフローで使用されるすべてのリソース (ジョブテンプレートなど) に対するアクセス権限が必要です。
詳細は、ロールベースのアクセス制御によるアクセスの管理 を参照してください。
説明したタスクの実行の詳細は、ワークフロージョブテンプレート を参照してください。
第10章 スケジュール リンクのコピーリンクがクリップボードにコピーされました!
ナビゲーションパネルから → をクリックして、設定したスケジュールにアクセスします。スケジュールのリストは、方向矢印を使用して各列の任意の属性によって並べ替えることができます。名前、日付、またはスケジュールが実行される月で検索することもできます。
オン または オフ の切り替えを使用して、アクティブなスケジュールを停止するか、停止したスケジュールをアクティブにします。
編集
アイコンをクリックしてスケジュールを編集します。
テンプレート、プロジェクト、またはインベントリーソースを設定する場合は、そのリソースの Details ページの Schedules タブをクリックして、これらのリソースのスケジュールを設定します。スケジュールを作成するときには、次のパラメーターを使用できます。
- 名前
- スケジュール名をクリックして詳細を開きます。
- 関連リソース
- スケジュールの機能を説明します。
- タイプ
- スケジュールがソースコントロールの更新に関連しているのか、システム管理されたジョブスケジュールに関連しているのかを識別します。
- 次回実行日時
- 次に予定されているタスクの実行
10.1. 新しいスケジュールの追加 リンクのコピーリンクがクリップボードにコピーされました!
スケジュールは、テンプレート、プロジェクト、またはインベントリーソースから作成することも、メインの Schedules ページから直接作成することもできます。
Schedules ページで新しいスケジュールを作成するには、次の手順を実行します。
手順
- ナビゲーションパネルから、 → を選択します。
- をクリックします。Create schedule ウィンドウが開きます。
このスケジュールを適用する Resource type を選択します。
以下から選択します。
Job template
- Job template の場合は、メニューから Job template を選択します。
Workflow job template
- Workflow job template の場合は、メニューから Workflow job template を選択します。
Inventory source
- Inventory source の場合は、適切なメニューから Inventory と Inventory source を選択します。
Project sync
- Project sync の場合は、メニューから Project を選択します。
Management job template
- Management job template の場合は、メニューから Workflow job template を選択します。
Job template と Project sync の場合は、次のフィールドに適切な詳細を入力します。
- Schedule name: 名前を入力します。
- オプション: Description: 説明を入力します。
- Start date/time: スケジュールを開始する日時を入力します。
Time zone: タイムゾーンを選択します。入力する Start date/time は、このタイムゾーンの日時である必要があります。
スケジュールを設定すると Schedule Details が表示され、スケジュールの設定や、選択した Local Time Zone でのスケジュールの発生状況を確認することができます。
重要ジョブは UTC でスケジュールされます。特定の時間に実行される繰り返しのジョブは、夏時間への切り替えまたは夏時間からの切り替えが発生すると、ローカルタイムゾーンに合わせて移動できます。スケジュールが保存されると、システムはローカルタイムゾーンベースの時刻を UTC に解決します。スケジュールが正しく作成されていることを確認するには、スケジュールを UTC 時間で設定します。
- をクリックします。Define rules ページが表示されます。
10.2. リソースページからの新しいスケジュールの追加 リンクのコピーリンクがクリップボードにコピーされました!
リソースページから新しいスケジュールを作成するには、次の手順を実行します。
手順
- 設定しているリソースの Schedules タブをクリックします。これには、テンプレート、プロジェクト、またはインベントリーソースを指定できます。
- をクリックします。Create schedule ウィンドウが開きます。
以下のフィールドに該当する詳細を入力します。
- Schedule name: 名前を入力します。
- オプション: Description: 説明を入力します。
- Start date/time: スケジュールを開始する日時を入力します。
Time zone: タイムゾーンを選択します。入力する Start date/time は、このタイムゾーンの日時である必要があります。
スケジュールを設定すると Schedule Details が表示され、スケジュールの設定や、選択した Local Time Zone でのスケジュールの発生状況を確認することができます。
重要ジョブは UTC でスケジュールされます。特定の時間に実行される繰り返しのジョブは、夏時間への切り替えまたは夏時間からの切り替えが発生すると、ローカルタイムゾーンに合わせて移動できます。スケジュールが保存されると、システムはローカルタイムゾーンベースの時刻を UTC に解決します。スケジュールが正しく作成されていることを確認するには、スケジュールを UTC 時間で設定します。
- をクリックします。Define rules ページが表示されます。
10.2.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フィールドへの リンク で詳細を確認してください。
- をクリックします。Schedule Rules 概要ページが表示されます。
- ルールをさらに追加するには、 をクリックします。
をクリックします。
Schedule Exceptions ページが表示されます。
10.2.2. スケジュールの例外の設定 リンクのコピーリンクがクリップボードにコピーされました!
手順
Schedule Exceptions ページで、 をクリックします。
スケジュールのルールと同じ形式を使用して、スケジュールの例外を作成します。
- をクリックして、スケジュールと例外の両方を保存して確認します。
第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 リビジョンの取得
、プロジェクトの編集
、またはプロジェクト属性の複製
を実行できます。
プロジェクトは、関連ジョブの実行中に更新できます。
大規模なプロジェクト (約 10 GB) がある場合、/tmp のディスク領域が問題になる可能性があります。
ステータス はプロジェクトの状態を示し、以下のいずれかになる可能性があります (特定のステータスタイプでビューをフィルターできることにも留意してください)。
Pending - ソースコントロールの更新は作成されましたが、まだキューに入れられていない、または開始されていません。ジョブ (ソースコントロールの更新だけでなく) は、システムで実行できる状態になるまで保留状態になります。準備ができていない理由としては次のことが考えられます。
- 現在実行中の依存関係があるため、完了するまで待つ必要があります。
- 設定されている場所で実行するのに十分な容量がありません。
- Waiting - ソースコントロールの更新はキューに入れられており、実行を待機中です。
- Running - ソースコントロールの更新が進行中です。
- 成功 - このプロジェクトの最後のソースコントロールの更新が成功しました。
- Failed - このプロジェクトの最後のソースコントロールの更新が失敗しました。
- Error - 最後のソースコントロール更新ジョブは実行にまったく失敗しました。
- 取り消し - このプロジェクトの最後のソースコントロールの更新が取り消されました。
- 未更新 - このプロジェクトはソースコントロール用に設定されていますが、更新されていません。
- OK - プロジェクトはソースコントロール用に設定されておらず、正しく配置されています。
-
Missing -
/var/lib/awx/projectsのプロジェクトベースパスにプロジェクトがありません。これは、手動またはソースコントロール管理プロジェクトに適用されます。
認証情報タイプが 手動 のプロジェクトでは、SCM タイプの認証情報として再設定されない限りソースコントロールベースのアクションを更新したり、スケジュールしたりすることはできません。
11.1. 新しいプロジェクトの追加 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller では、プロジェクトと呼ばれる Playbook の論理コレクションを作成できます。
手順
- ナビゲーションパネルから、 → を選択します。
- Projects ページで、 をクリックして、Create Project ウィンドウを起動します。
以下の必須フィールドに適切な情報を入力します。
- Name (必須)
- オプション: Description
- Organization (必須): プロジェクトには少なくとも 1 つの組織が必要です。ここで組織を 1 つ選択してプロジェクトを作成します。プロジェクトの作成時に、組織を追加できます。
- オプション: Execution environment: このプロジェクトを実行するための実行環境の名前を入力するか、既存の環境のリストから検索します。詳細は、実行環境の作成と使用 を参照してください。
- Source control type (必須): このプロジェクトに関連付けられた SCM タイプをメニューから選択します。選択したタイプに応じて、次のセクションのオプションが使用可能になります。詳細は、Playbook の手動管理 または ソースコントロールを使用した Playbook の管理 を参照してください。
- オプション: Content signature validation credential: このフィールドを使用して、コンテンツ検証を有効にします。プロジェクトの同期中にコンテンツの署名を検証するために使用する GPG キーを指定します。コンテンツが改ざんされている場合、ジョブは実行されません。詳細は、プロジェクトの署名と検証 を参照してください。
- をクリックします。
関連情報
以下に、プロジェクトの調達方法を説明します。
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 を常に直接環境で使用できるようになります。
手順
- ナビゲーションパネルから、 → を選択します。
- 使用するプロジェクト名をクリックします。
- プロジェクトの Details タブで、 をクリックします。
- Source control type メニューから適切なオプション (Git または Subversion) を選択します。
以下のフィールドに該当する詳細を入力します。
- Source control URL - ツールチップの例を参照してください。
-
オプション: Source control branch/tag/commit: チェックアウトするソースコントロール (Git または Subversion) からの SCM ブランチ、タグ、コミットハッシュ、任意の参照、またはリビジョン番号 (該当する場合) を入力します。次のフィールドにカスタム refspec も指定しない限り、一部のコミットハッシュと参照は使用できない場合があります。空白のままにした場合、デフォルトは
HEADです。これは、このプロジェクトで最後にチェックアウトされたブランチ、タグ、またはコミットのことです。 - Source control refspec - このフィールドは、git ソースコントロール専用のオプションです。git の知識があり、問題なく使用できる上級ユーザーである場合にのみ、リモートリポジトリーからダウンロードする参照を指定してください。詳細は、ジョブブランチのオーバーライド を参照してください。
- Source control credential - 認証が必要な場合は、適切なソースコントロール認証情報を選択します。
オプション: Options - 該当する場合、起動動作を選択します。
- Clean - 更新を実行する前にローカルの変更を削除します。
- Delete - 更新を実行する前に、ローカルリポジトリー全体を削除します。リポジトリーのサイズにより、更新の完了までに必要な時間が大幅に長くなる可能性があります。
-
Track submodules - 最新のコミットを追跡します。ツールチップに、詳細情報があります
。
- Update revision on launch - プロジェクトのリビジョンをリモートソースコントロールの現在のリビジョンに更新し、Ansible Galaxy サポート または コレクションサポート からロールディレクトリーをキャッシュします。Automation Controller は、ローカルリビジョンが一致し、ロールとコレクションが最終更新で最新であることを確認します。さらに、プロジェクトが同期できるよりも早くジョブが生成された場合にジョブのオーバーフローを回避するために、これを選択すると、以前のプロジェクトの同期を指定した秒数キャッシュするようにキャッシュタイムアウトを設定できます。
- Allow branch override - このプロジェクトを使用するジョブテンプレートまたはインベントリーソースが、プロジェクト以外の指定された SCM ブランチまたはリビジョンで起動できるようにします。詳細は、ジョブブランチのオーバーライド を参照してください。
- をクリックします。
11.1.2.2. SCM タイプ - Red Hat Insights を使用するための Playbook の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Insights から Ansible Playbook を直接取得するようにプロジェクトを設定します。Red Hat Insights と統合することで、Red Hat Enterprise Linux 環境の分析を通じて特定された修復 Playbook を管理およびデプロイできるようになります。この統合により、特定された脆弱性に対処してシステム設定を最適化するプロセスが合理化され、ベストプラクティスとセキュリティー推奨事項に準拠した自動化が実現します。
手順
- ナビゲーションパネルから、 → を選択します。
- 使用するプロジェクト名をクリックします。
- プロジェクトの Details タブで、 をクリックします。
- Source Control Type メニューから Red Hat Insights を選択します。
- Red Hat Insights では認証に認証情報が必要です。Insights で使用する適切な認証情報を Insights credential フィールドで選択します。
オプション: 該当する場合、Options フィールドで起動動作を選択します。
- Clean - 更新を実行する前にローカルの変更を削除します。
- Delete - 更新を実行する前に、ローカルリポジトリー全体を削除します。リポジトリーのサイズにより、更新の完了までに必要な時間が大幅に長くなる可能性があります。
- Update revision on launch - プロジェクトのリビジョンをリモートソースコントロールの現在のリビジョンに更新し、Ansible Galaxy サポート または コレクションサポート からロールディレクトリーをキャッシュします。Automation Controller は、ローカルリビジョンが一致し、ロールとコレクションが最新であることを保証します。さらに、プロジェクトが同期できるよりも早くジョブが生成された場合に、これを選択すると、以前のプロジェクトの同期を指定した秒数キャッシュするようにキャッシュタイムアウトを設定できます。
- をクリックします。
11.1.2.3. SCM タイプ - リモートアーカイブを使用するための Playbook の設定 リンクのコピーリンクがクリップボードにコピーされました!
リモートアーカイブを使用する Playbook により、バージョン付けされたアーティファクトを生成するビルドプロセスまたはリリースに基づいてプロジェクトを提供することができます。これには、単一のアーカイブ内のそのプロジェクトのすべての要件が含まれます。
手順
- ナビゲーションパネルから、 → を選択します。
- 使用するプロジェクト名をクリックします。
- プロジェクトの Details タブで、 をクリックします。
- Source control type メニューから Remote Archive を選択します。
以下のフィールドに該当する詳細を入力します。
- Source control URL - GitHub Release や Artifactory に保存されているビルドアーティファクトなど、リモートアーカイブへの URL を要求し、それを使用するためにプロジェクトパスに展開します。
- Source control credential - 認証が必要な場合は、適切なソースコントロール認証情報を選択します。
オプション: 該当する場合、Options フィールドで起動動作を選択します。
- Clean - 更新を実行する前にローカルの変更を削除します。
- Delete - 更新を実行する前に、ローカルリポジトリー全体を削除します。リポジトリーのサイズにより、更新の完了までに必要な時間が大幅に長くなる可能性があります。
- Update revision on launch - 推奨されません。このオプションは、プロジェクトのリビジョンをリモートソースコントロールの現在のリビジョンに更新し、Ansible Galaxy サポート または コレクションサポート からのロールディレクトリーをキャッシュします。
Allow branch override - 推奨されません。このオプションを使用すると、このプロジェクトを使用するジョブテンプレートが、指定された SCM ブランチまたはプロジェクト以外のリビジョンで起動できるようになります。
注記このソースコントロールタイプは、不変のアーティファクトという概念のサポートを目的としているため、(少なくともロールに対して) Galaxy 統合を無効にすることを推奨します。
- をクリックします。
11.2. ソースコントロールからのプロジェクトの更新 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトを定期的に更新することで、環境が最新バージョンの Playbook、ロール、コレクションにアクセスできるようになり、Git、Subversion、その他の統合された SCM リポジトリーに加えられた変更が反映されます。このプロセスは、SCM と Ansible Automation Platform 間の同期を維持するために重要です。
手順
- ナビゲーションパネルから、 → を選択します。
更新するプロジェクトの横にある同期アイコン
をクリックします。
注記ソースコントロールを使用するためのプロジェクト設定を追加すると、設定したソースコントロールからプロジェクトの詳細を取得する同期がすぐに開始します。
- 更新プロセスの詳細は、Status 列の下にあるプロジェクトのステータスをクリックしてください。Jobs セクションの Output タブが表示されます。
11.3. 権限の使用 リンクのコピーリンクがクリップボードにコピーされました!
プロジェクトに割り当てられており、プロジェクト、インベントリー、ジョブテンプレート、およびその他の要素の読み取り、変更、および管理を行う機能を提供する権限のセット (ロールベースのアクセス制御) は、特権とも呼ばれます。
プロジェクトの権限にアクセスするには、Projects ページの User Access タブまたは Team Access タブを選択します。この画面には、現在このプロジェクトに対する権限を持っているユーザーのリストが表示されます。
このリストは、Username、First Name、または Last Name で並べ替えおよび検索できます。
11.3.1. プロジェクト権限の追加 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーとチームがプロジェクトにアクセスするために必要な権限を管理します。
手順
- ナビゲーションパネルから、 → を選択します。
- 更新するプロジェクトを選択し、User Access または Team Access タブをクリックします。
- をクリックします。
- 追加するユーザーまたはチームを選択し、 をクリックします。
- 名前の横にあるチェックボックスをクリックしてリストからユーザーまたはチームを 1 つ以上選択し、メンバーとして追加します。
- をクリックします。
- 選択したユーザーまたはチームに付与するロールを選択します。リソースが異なれば、利用可能なオプションも異なります。
- をクリックして、選択したユーザーまたはチームにロールを適用し、メンバーとして追加します。各ユーザーおよびチームに割り当てられた更新済みのロールが表示されます。
11.3.2. プロジェクトからの権限の削除 リンクのコピーリンクがクリップボードにコピーされました!
特定のユーザーのロールを削除します。
手順
- ナビゲーションパネルから、 → を選択します。
- 更新するプロジェクトを選択し、User Access または Team Access タブをクリックします。
-
Roles 列のユーザーロールの横にある
アイコンをクリックします。
- 確認ウィンドウで をクリックして、関連付けの解除を確認します。
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 ファイルからロールを動的にダウンロードできるようにするシステム全体の設定があります。この設定をオフにするには、ナビゲーションパネルの → → から 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 ファイルによって参照されます。
ジョブは、すべてのジョブの実行前に最新のロールをダウンロードします。パフォーマンス上の理由から、ロールとコレクションはローカルにキャッシュされます。各ジョブの実行前にアップストリームロールを再ダウンロードするには、プロジェクトの Options で Update revision on launch を選択する必要があります。
更新は同期よりもはるかに前のプロセスで行われるため、これによりエラーと詳細がより速く、より論理的な場所で詳細が表示されます。
requirements.yml ファイルの構文の詳細と例は、Ansible ドキュメントの ロール要件セクション を参照してください。
特に公開する必要があるディレクトリーがある場合は、ナビゲーションパネルの → → から 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 ウィンドウでこれらの設定を行うことができます。
11.5. コレクションのサポート リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller は、ジョブ実行でプロジェクト固有の Ansible コレクション をサポートします。collections/requirements.yml で SCM のコレクション要件ファイルを指定すると、Automation Controller はジョブの実行前にプロジェクトを暗黙的に同期するときに、そのファイルにコレクションをインストールします。
Automation Controller には、SCM プロジェクトの collections/requirements.yml ファイルからコレクションを動的にダウンロードできるようにするシステム全体の設定があります。この設定をオフにするには、ナビゲーションパネルの → → から Job Settings 画面に移動し、Enable Collection(s) Download チェックボックスをオフにします。
ロールとコレクションは、パフォーマンス上の理由からローカルにキャッシュされます。ダウンロードを確実に行うためには、次のように、プロジェクトの Options で Update 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 のみが異なります。
手順
- https://console.redhat.com/ansible/automation-hub/token にアクセスします。
- をクリックします。
-
コピー
アイコンをクリックして、API トークンをクリップボードにコピーします。
次のいずれかの方法を選択して認証情報を作成します。
Automation Hub を使用するには、コピーしたトークンを使用し、トークンページの Server URL および SSO URL フィールドに表示される URL を指定して、Automation Hub 認証情報を作成します。
-
Galaxy Server URL =
https://console.redhat.com/ansible/automation-hub/token
-
Galaxy Server URL =
Private Automation Hub を使用するには、Private Automation Hub の Repo Management ダッシュボードから取得したトークンを使用し、次に示すように公開されたリポジトリー URL を指す Automation Hub 認証情報を作成します。
さまざまな名前空間またはコレクションを含む各種リポジトリーを作成できます。Automation Hub のリポジトリーごとに、異なる認証情報を作成する必要があります。
UI から
/https://$<hub_url>/api/galaxy/content/<repo you want to pull from>という形式の Ansible CLI URL をコピーし、Create Credential の Galaxy Server URL フィールドに入力します。UI 固有の手順は、Automation Hub の Red Hat 認定済み、検証済み、および Ansible Galaxy コンテンツ を参照してください。
コンテンツを同期する組織に移動し、新しい認証情報を組織に追加します。これにより、コンテンツを使用する認証情報またはリポジトリーに各組織を関連付けることができます。
例
次の 2 つのリポジトリーがあるとします。
-
Prod:
Namespace 1とNamespace 2があり、それぞれにコレクションAとB(namespace1.collectionA:v2.0.0とnamespace2.collectionB:v2.0.0) があります。 Stage:
Namespace 1があり、そこにコレクションA(namespace1.collectionA:v1.5.0) だけがあります。Prod と Stage のリポジトリー URL があります。それぞれに対して認証情報を作成できます。
その後、さまざまな組織に各種レベルのアクセスを割り当てることができます。たとえば、
Developers組織を作成して両方のリポジトリーへのアクセス権を付与し、Operations 組織には Prod リポジトリーへのアクセス権だけを付与することができます。UI 固有の手順は、Private Automation Hub でコンテナーリポジトリーのユーザーアクセスを設定する を参照してください。
-
Prod:
- Automation Hub に自己署名証明書がある場合は、トグルを使用して Job Settings の Ignore Ansible Galaxy SSL Certificate Verification 設定を有効にします。署名付き証明書を使用する Automation Hub の場合は、代わりにトグルを使用して無効にします。これはグローバル設定です。
-
ソースリポジトリーが
collections/requirements.ymlファイルにある要件ファイルで必要なコレクションを指定するプロジェクトを作成します。使用する構文の詳細は、Ansible ドキュメントの Using Ansible collections を参照してください。 -
Projects リストビューで、同期アイコン
をクリックしてこのプロジェクトを更新します。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 は、署名中に含まれたファイルが変更されていないこと、およびファイルが予期せず追加または削除されていないことを検証します。署名が無効であるかファイルが変更されている場合、プロジェクトは更新に失敗し、プロジェクトを使用するジョブは起動されません。プロジェクトの検証ステータスにより、セキュアで改ざんされていないコンテンツのみがジョブで実行できることが保証されます。
リポジトリーが署名と検証用にすでに設定されている場合、プロジェクト変更用の通常のワークフローは次のようになります。
- プロジェクトリポジトリーがすでに設定されており、ファイルに変更を加えるとします。
変更を加えて、次のコマンドを実行します。
ansible-sign project gpg-sign /path/to/projectこのコマンドは、チェックサムマニフェストを更新し、署名します。
- 変更、更新されたチェックサムマニフェスト、および署名をリポジトリーにコミットします。
プロジェクトを同期すると、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
- ナビゲーションパネルから、 → → を選択します。
- をクリックします。
- 新しい認証情報にわかりやすい名前を付けます (例: "インフラストラクチャーチーム GPG 公開鍵")。
- Credential type フィールドで、GPG Public Key を選択します。
-
Browse をクリックして、公開鍵ファイル (
my_public_key.ascなど) を見つけて選択します。 をクリックします。
この認証情報は
projects <ug_projects_add>で選択できるようになり、今後のプロジェクト同期時にコンテンツ検証が自動的に実行されます。
プロジェクトキャッシュ SCM タイムアウトを使用して、Automation Controller が署名されたコンテンツを再検証する頻度を制御します。プロジェクトが (そのプロジェクトを使用するように設定されたジョブテンプレートの) 起動時に更新されるように設定されている場合は、キャッシュタイムアウト設定を有効にして、最後の更新から N 秒経過後に更新するように設定できます。検証が頻繁に実行される場合は、プロジェクトの Options Details ビューの Cache Timeout フィールドに時間を指定して、プロジェクトの更新頻度を下げることができます。
12.4. ansible-sign CLI ユーティリティーのインストール リンクのコピーリンクがクリップボードにコピーされました!
ansible-sign ユーティリティーを使用して、ユーザーが署名し、プロジェクトが署名されているかどうかを確認するためのオプションを提供します。
手順
次のコマンドを実行して
ansible-signをインストールします。$ dnf install ansible-sign次のコマンドを使用して、
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 で使用されている現在の終了コードであり、安定しているとみなされます。
| 終了コード | 概説 | シナリオ例 |
|---|---|---|
| 0 | Success |
|
| 1 | 一般的な障害 |
|
| 2 | チェックサム検証の失敗 |
|
| 3 | 署名検証の失敗 |
|
| 4 | 署名プロセスの失敗 |
|
第13章 トポロジービュー リンクのコピーリンクがクリップボードにコピーされました!
メッシュトポロジーがすでにデプロイされている場合は、トポロジービュー を使用して、ノードタイプ、ノードの健全性、および各ノードに関する特定の詳細を表示します。
Automation Controller UI からトポロジービューアーにアクセスするには、System Administrator 権限が必要です。
仮想マシンベースのインストールにおける自動化メッシュの詳細は、仮想マシン環境向け自動化メッシュ を参照してください。
Operator ベースのインストールにおける自動化メッシュの詳細は、マネージドクラウドまたは Operator 環境向けの自動化メッシュ を参照してください。
13.1. トポロジービューアーへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller UI からトポロジービューアーにアクセスするには、次の手順を使用します。
手順
- ナビゲーションパネルから、 → → を選択します。Topology View が開き、各 receptor ノード間のリンクがグラフィック表示されます。
ズームレベルを調整したり、グラフィックビューを操作したりするには、ツールバーにあるズームイン (
)、ズームアウト (
)、拡大 (
)、リセット (
) のコントロールアイコンを使用します。
クリックおよびドラッグして移動したり、マウスやトラックパッドでスクロールすることでズームしたりすることもできます。画面に合わせる機能は、画面に合わせて自動的にグラフィックを拡大縮小し、中央に再配置します。これは、大きなメッシュ全体を表示する場合に特に便利です。
ビューをデフォルトのビューにリセットするには、Reset view (
) アイコンをクリックします。
表示されているノードのタイプを特定するには、Legend を参照します。
仮想マシンベースのインストール環境の場合は、コントロールプレーンおよび実行プレーン を参照してください。
Operator ベースのインストール環境の場合は、コントロールプレーンおよび実行プレーン で各タイプのノードの詳細を参照してください。
Legend には、
node status <node_statuses>が色別に表示され、ノードの健全性を示します。Legend の Error ステータスには、Unavailable 状態 (Instances リストビューに表示されるもの) に加えて、Automation Controller の新しいバージョンで生じる今後のエラー状態が含まれます。Legend には、次のリンクステータスも表示されます。
- Established: このリンク状態は、準備完了、使用不可、または無効であるノード間のピア接続を示します。
- Adding: このリンク状態は、メッシュトポロジーに追加するように選択されたノード間のピア接続を示します。
- Removing: このリンク状態は、トポロジーから削除するように選択されたノード間のピア接続を示します。
- ノードにカーソルを合わせると、コネクターが強調表示され、そのノードに直接接続されているノード (ピア) が表示されます。また、ノードをクリックすると、そのホスト名、ノードタイプ、ステータスなどの詳細が取得されます。
表示された詳細からインスタンスのホスト名のリンクをクリックすると、Details ページにリダイレクトされ、そのノードに関する詳細情報、特に
Errorステータスに関する情報が表示されます。次の例を参照してください。Details ページを使用して、インスタンスを削除したり、必要に応じてインスタンスのヘルスチェックを実行したり、インスタンスからジョブの割り当てを解除したりできます。デフォルトでは、ジョブを各ノードに割り当てることができます。ただし、これを無効にして、ノードでジョブが実行されないようにすることもできます。
- 関連情報: 新しいノードの作成とメッシュのスケーリングの詳細は、インスタンスによる容量の管理 を参照してください。
第14章 インベントリー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Ansible Automation Platform は、インベントリーファイルを使用して、論理的に編成されたインフラストラクチャー内の管理対象ノードまたはホストのリストに対して機能します。Red Hat Ansible Automation Platform インストーラーインベントリーファイルを使用して、インストールシナリオを指定し、Ansible へのホストのデプロイを説明できます。インベントリーファイルを使用することで、Ansible は単一のコマンドで多数のホストを管理できます。インベントリーは、指定する必要があるコマンドラインオプションの数を減らすことで、Ansible をより効率的に使用するのにも役立ちます。インベントリーはグループに分割されており、これらのグループにはホストが含まれます。
グループは、Automation Controller にホスト名を入力して手動で取得することも、サポートされているクラウドプロバイダーの 1 つから取得することもできます。
カスタム動的インベントリースクリプト、または Automation Controller でまだネイティブにサポートされていないクラウドプロバイダーがある場合は、それを Automation Controller にインポートすることもできます。
詳細は、「自動化実行の設定」の インベントリーファイルのインポート を参照してください。
ナビゲーションパネルから → → を選択します。Inventories ウィンドウには、現在使用可能なインベントリーのリストが表示されます。
Inventory details ページには次の内容が含まれます。
- Name: インベントリー名。
Status
ステータスは以下のとおりです。
- Success: インベントリーソースの同期が正常に完了した時
- Disabled: インベントリーに追加されたインベントリーソースがない
- Error: インベントリーソースの同期がエラーを出して完了する場合
- Type: 標準インベントリー、スマートインベントリー、構築インベントリーのいずれであるかを識別します。
Organization: インベントリーが属する組織。選択したインベントリーに以下のアクションを実行できます。
-
Edit
: 選択したインベントリーのプロパティーを編集します。
-
複製
: 新しいインベントリーの作成用のテンプレートとして、既存のインベントリーのコピーを作成します。
- Delete inventory: 選択したインベントリーを削除します。
-
Edit
インベントリー名をクリックすると、選択したインベントリーの Details ページが表示され、インベントリーのグループとホストが表示されます。
14.1. スマートインベントリー リンクのコピーリンクがクリップボードにコピーされました!
スマートインベントリーは、保存された検索によって定義されたホストのコレクションであり、標準インベントリーと同様に表示でき、ジョブの実行で簡単に使用できます。組織管理者は組織内のインベントリーに対する管理者パーミッションを持っており、スマートインベントリーを作成できます。
スマートインベントリーは、KIND=smart で識別されます。
スマートインベントリーは、検索で使用されているのと同じ方法を使用して定義できます。InventorySource はインベントリーに直接関連付けられます。
スマートインベントリーは非推奨となり、今後のリリースでは削除される予定です。機能の拡張と置き換えのために、構築型インベントリーへの移行を検討してください。
Inventory モデルには、デフォルトで空白にされる以下の新規フィールドがありますが、スマートインベントリーは以下のように設定されます。
-
スマートインベントリーの場合、
kindがsmartに設定されます。 -
スマートインベントリーの場合、
host_filterが設定され、かつkindがsmartに設定されます。
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 キーワード (例: null、true、または false) の値を有効にするには、値の前後に二重引用符を追加して、コントローラーが検索語を二重引用符で囲み、非文字列として解析されないようにします。
host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"
14.2. 構築型インベントリー リンクのコピーリンクがクリップボードにコピーされました!
入力インベントリーのリストから新しいインベントリーを作成できます。これは構築型インベントリー (Constructed Inventory) と呼ばれます。
構築型インベントリーには、入力インベントリー内のホストとグループのコピーが含まれています。これにより、ジョブが多数のインベントリーにわたるサーバーグループをターゲットにすることが可能になります。グループと hostvars をインベントリーの内容に追加したり、ホストをフィルタリングして構築型インベントリーのサイズを制限したりできます。
構築型インベントリーは、ansible.builtin.constructed inventory モデルを使用します。
構築型インベントリーの重要なポイントは次のとおりです。
- 通常の Ansible hostvars 名前空間が利用可能である
- グループがある
構築型インベントリーは、source_vars と limit を入力として受け取り、その 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 形式で示されています。最初に提案する内容が推奨されます。
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")を使用します。これは、デバッグのヒント で説明されているように、デバッグに役立ちます。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: {}
host1 は groupB に属しているため、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_vars と limit) は、インベントリーソースのモデルにすでに存在するフィールドです。
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. 新しいインベントリーの追加 リンクのコピーリンクがクリップボードにコピーされました!
新しいインベントリーの追加には、次のコンポーネントが含まれます。
インベントリーを作成するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。Inventories ウィンドウには、現在使用可能なインベントリーのリストが表示されます。
- をクリックし、作成するインベントリーのタイプを選択します。
以下のフィールドに該当する詳細を入力します。
- 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 リモート管理に特有の詳細レベルに使用されます。
構築型インベントリープラグインの使用方法 に関する情報を参照するには、
アイコンをクリックします。
- 構築型インベントリーにのみ適用: 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 フィールドに貼り付けて、そのグループ内のホストのみを含めることができるため、特に便利です。
- をクリックします。
次のステップ
新規インベントリーが保存された後に、パーミッション、グループ、ホスト、およびソースの設定や、完了したジョブの表示に進みます (インベントリーのタイプに応じて適用可能な場合)。
14.4.1. インベントリーへの権限の追加 リンクのコピーリンクがクリップボードにコピーされました!
インベントリーに権限を追加するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- テンプレートを選択し、User Access または Team Access タブで をクリックします。
- 追加するユーザーまたはチームを選択し、 をクリックします。
- 名前の横にあるチェックボックスを選択して、リストからユーザーまたはチームを 1 つ以上メンバーとして追加します。
- をクリックします。
- 選択したユーザーまたはチームに付与するロールを選択します。リソースが異なれば、利用可能なオプションも異なります。
- をクリックして、選択したユーザーまたはチームにロールを適用し、メンバーとして追加します。各ユーザーおよびチームに割り当てられた更新済みのロールが表示されます。
14.4.2. 権限の削除 リンクのコピーリンクがクリップボードにコピーされました!
リソースに関連付けられたユーザーから特定の権限を削除します。ロールの関連付けを解除すると、ユーザーが不要になった機能やデータにアクセスできなくなります。
手順
-
特定のユーザーのロールを削除するには、リソースの横にある
アイコンをクリックします。これにより、確認ウィンドウが起動し、関連付けの解除を確認するよう求められます。
14.4.3. インベントリーへのグループの追加 リンクのコピーリンクがクリップボードにコピーされました!
インベントリーはグループに分割されており、グループにはホストと他のグループを含めることができます。グループは標準インベントリーにのみ適用できます。スマートインベントリーを使用して直接設定できません。標準インベントリーで使用されるホストを介して既存のグループを関連付けることができます。
標準インベントリーでは次のアクションを使用できます。
- 新規グループの作成
- 新規ホストの作成
- 選択したインベントリーでのコマンドの実行
- インベントリープロパティーの編集
- グループおよびホストのアクティビティーストリームの表示
- インベントリーの構築に関するヘルプの取得
インベントリーソースはグループに関連付けられません。生成されたグループはトップレベルであり、引き続き子グループを持つことができます。これらの生成されたグループはいずれも、ホストを持つことができます。
手順
- ナビゲーションパネルから → → を選択します。
- グループを追加するインベントリー名を選択します。
- インベントリーの Details ページで、Groups タブを選択します。
- をクリックします。
適切な詳細を入力します。
- Name: 必須
- オプション: Description: 必要に応じて説明を入力します。
- オプション: Variables: このグループ内のすべてのホストに適用される定義と値を入力します。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。
- をクリックします。
結果
テンプレートにグループを追加すると、Group Details ページが表示されます。
14.4.3.1. グループ内でのグループの追加 リンクのコピーリンクがクリップボードにコピーされました!
テンプレートにグループを追加すると、Group Details ページが表示されます。
手順
- Related Groups タブを選択します。
- 設定内にすでに存在するグループを追加するには をクリックします。新しいグループを作成するには をクリックします。
新規グループを作成する場合、該当する詳細情報を必須およびオプションフィールドに入力します。
- Name (必須):
- オプション: Description: 必要に応じて説明を入力します。
- オプション: Variables: このグループ内のすべてのホストに適用される定義と値を入力します。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。
- をクリックします。
- Create group ウィンドウが閉じ、新規に作成されたグループが、元のグループに関連付けられたグループのリストのエントリーとして表示されます。
次のステップ
既存のグループを追加することを選択した場合、利用可能なグループが別の選択ウィンドウに表示されます。グループを選択すると、そのグループに関連付けられているグループのリストに表示されます。
- サブグループ配下に追加のグループとホストを設定するには、グループのリストからサブグループの名前をクリックし、上記の手順を繰り返します。
14.4.3.2. インベントリーグループの表示または編集 リンクのコピーリンクがクリップボードにコピーされました!
グループリストビューにはすべてのインベントリーグループが表示されます。また、ルートグループのみを表示するようにフィルタリングすることもできます。インベントリーグループは、別のグループのサブセットではない場合、ルートグループとみなされます。
Automation Controller は子グループやホストなどの依存関係を検索するため、依存関係を気にせずにサブグループを削除できます。存在する場合は、ルートグループとそのすべてのサブグループおよびホストを削除するか、サブグループをプロモートしてホストとともに最上位のインベントリーグループにするかを選択する確認ウィンドウが表示されます。
14.4.4. インベントリーへのホストの追加 リンクのコピーリンクがクリップボードにコピーされました!
インベントリーのホストと、グループおよびグループ内グループのホストを設定できます。
手順
- ナビゲーションパネルから → → を選択します。
- グループを追加するインベントリー名を選択します。
- インベントリーの Details ページで、Hosts タブを選択します。
- をクリックします。
- 設定にすでに存在するホストを追加するか、新しいホストを作成するかを選択します。
- 新しいホストを作成する場合は、トグルを On に設定して、ジョブの実行中にこのホストを含めます。
適切な詳細を入力します。
- 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 つを切り替えます。
- をクリックします。
Create host ウィンドウが閉じ、新規に作成されたホストが、元のグループに関連付けられたホストのリストのエントリーとして表示されます。
既存のホストを追加することを選択した場合、使用可能なホストが別の選択ウィンドウに表示されます。
ホストを選択すると、グループに関連付けられているホストのリストに表示されます。
この画面でホストを選択し、
アイコンをクリックしてホストの関連付けを解除します。
注記この画面からアドホックコマンドを実行することもできます。詳細は、アドホックコマンドの実行 を参照してください。
ホストの追加グループを設定するには、ホストのリストからホストの名前をクリックします。
これにより、選択したホストの Details タブが開きます。
- Groups タブをクリックして、ホストのグループを設定します。
- をクリックして、ホストを既存のグループに関連付けます。選択可能なグループが別個の選択ウィンドウに表示されます。
ホストに関連付けるグループを選択し、 をクリックします。
グループが関連付けられている場合、そのグループはホストに関連付けられているグループのリストに表示されます。
- ホストを使用してジョブを実行した場合、ホストの Completed Jobs タブでそのジョブの詳細を表示できます。
- をクリックして、各ジョブの詳細を表示します。
API に新しく追加されたエンドポイント /api/v2/bulk/host_create を使用して、ホストを一括で作成できます。このエンドポイントは JSON を受け入れ、ターゲットインベントリーとインベントリーに追加するホストのリストを指定できます。これらのホストはインベントリー内で一意である必要があります。すべてのホストが追加されるか、操作が完了できなかった理由を示したエラーが返されます。OPTIONS リクエストを使用して、関連するスキーマを返します。
14.4.5. ソースの追加 リンクのコピーリンクがクリップボードにコピーされました!
インベントリーソースはグループに関連付けられません。生成されたグループはトップレベルであり、引き続き子グループを持つことができます。これらの生成されたグループはいずれも、ホストを持つことができます。インベントリーへのソースの追加は、標準インベントリーにのみ適用されます。
手順
- ナビゲーションパネルから → → を選択します。
- ソースを追加するインベントリー名を選択します。
- インベントリーの Details ページで、Sources タブを選択します。
- をクリックします。
適切な詳細を入力します。
- Name (必須):
- オプション: Description: 必要に応じて説明を入力します。
-
オプション: Execution Environment:
アイコンを選択するか、インベントリーのインポートを実行する実行環境の名前を入力します。実行環境の構築の詳細は、実行環境 を参照してください。
- Source: インベントリーのソースを選択します。ソースの詳細と適切な情報の提供は、インベントリーソース を参照してください。
- 選択した インベントリーソース の情報がすべて揃ったら、オプションで、冗長性、ホストフィルター、変数などの他の共通パラメーターを指定できます。
- Verbosity メニューを使用して、インベントリーソースの更新ジョブの出力レベルを選択します。
- Host filter フィールドを使用して、Automation Controller にインポートする一致するホスト名のみを指定します。
Enabled variable フィールドで、Automation Controller がホスト変数のディクショナリーから有効な状態を取得することを指定します。有効な変数は、ドット表記を使用して 'foo.bar' のように指定できます。この場合、ネストされたディクショナリーが検索されます (
from_dict.get('foo', {}).get('bar', default)と同等)。Enabled variable フィールドは、Enabled value フィールドを設定しない限り無視されます。Enabled variable がこの値と一致する場合、インポート時にホストが有効になります。
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_stateがpowered_on以外の値の場合、Automation Controller へのインポート時にホストは無効になります。キーが見つからない場合、ホストは有効になっています。すべてのクラウドインベントリーソースには、以下の更新オプションがあります。
Overwrite: チェックされている場合は、外部ソースにこれまで存在していたが現在は削除されているホストとグループが Automation Controller インベントリーから削除されます。インベントリーソースの管理対象ではなかったホストとグループは、次に手動で作成されたグループにプロモートされます。または、これらをプロモートする手動で作成されたグループがない場合は、インベントリーの「すべて」のデフォルトグループに残されます。
チェックが付けられていない場合、外部ソースにないローカルの子ホストおよびグループは、インベントリーの更新プロセスによって処理されないままになります。
Overwrite variables: チェックが付けられている場合、子グループとホストのすべての変数が削除され、外部ソースで見つかった変数に置き換えられます。
チェックが付けられていない場合は、ローカル変数と外部ソースにあるものを組み合わせるマージが実行されます。
Update on launch: このインベントリーを使用してジョブを実行するたびに、ジョブタスクの実行前に選択したソースからのインベントリーが更新されます。
インベントリーの同期よりも早くジョブが生成された場合のジョブのオーバーフローを回避するために、こちらを選択すると、以前のインベントリー同期を一定の秒数キャッシュするための Cache Timeout を設定できます。
Update on launch 設定は、プロジェクトとインベントリーの依存関係システムを参照しており、2 つのジョブの同時実行を特に除外するものではありません。
キャッシュタイムアウトが指定されている場合、2 番目のジョブの依存関係が作成され、最初のジョブが生成したプロジェクトとインベントリーの更新が使用されます。
その後、両方のジョブは、そのプロジェクトまたはインベントリーの更新が完了するのを待ってから続行します。ジョブテンプレートが異なり、システムにその機能がある場合は、両方を同時に開始および実行できます。動的インベントリーソースで Automation Controller のプロビジョニングコールバック機能を使用する場合は、インベントリーグループに対して Update on launch を設定する必要があります。
Update On launch が設定されているプロジェクトを使用するインベントリーソースを同期すると、インベントリーの更新が開始される前に、(キャッシュタイムアウトルールに従って) プロジェクトが自動的に更新される可能性があります。
テンプレートが使用するのと同じプロジェクトから取得するインベントリーを使うように、ジョブテンプレートを作成できます。このような場合、プロジェクトが更新されてからインベントリーが更新されます (更新がまだ進行中でない場合、またはキャッシュタイムアウトがまだ期限切れになっていない場合)。
- 入力内容と選択内容を確認します。これにより、スケジュールや通知などの追加の詳細を設定できます。
このインベントリーソースに関連付けられているスケジュールを設定するには、Schedules タブをクリックします。
- スケジュールがすでに設定されている場合は、スケジュール設定を確認、編集、有効化または無効化します。
- スケジュールが設定されていない場合、スケジュールの設定の詳細は、スケジュール を参照してください。
14.4.6. ソースの通知の設定 リンクのコピーリンクがクリップボードにコピーされました!
ソースの通知を設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- 通知を設定するインベントリー名を選択します。
インベントリーの Details ページで、Notifications を選択します。
注記Notifications タブは、新しく作成したソースを保存した場合にのみ表示されます。
- 通知がすでに設定されている場合は、トグルを使用して、特定のソースで使用する通知を有効または無効にします。詳細は、通知の有効化と無効化 を参照してください。
- 通知を設定していない場合は、通知機能 で詳細を確認してください。
- 入力内容と選択内容を確認します。
- をクリックします。
次のステップ
ソースを定義すると、インベントリーに関連付けられているソースのリストにそのソースが表示されます。Sources タブから、単一のソースに対して同期を実行することも、すべてのソースを一度に同期することもできます。同期プロセスのスケジュール設定など、追加アクションを実行したり、ソースを編集または削除したりすることもできます。
14.4.7. インベントリーソース リンクのコピーリンクがクリップボードにコピーされました!
ホストを入力できるインベントリータイプに一致するソースを選択します。
14.4.7.1. プロジェクトからの取得 リンクのコピーリンクがクリップボードにコピーされました!
イベントリーをプロジェクトから取得する場合は、紐づけられているプロジェクトの SCM タイプを使用します。たとえば、プロジェクトのソースが GitHub からのものである場合、インベントリーでは同じソースが使用されます。
プロジェクトをソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Sourced from a Project を選択します。
追加フィールドに次の詳細を入力します。
オプション: Source control branch/tag/commit: チェックアウトするソースコントロール (Git または Subversion) からの SCM ブランチ、タグ、コミットハッシュ、任意の参照、またはリビジョン番号 (該当する場合) を入力します。
このフィールドは、ソースプロジェクトで Allow branch override オプションがチェックされている場合にのみ表示されます。詳細は、SCM タイプ - Git と Subversion を使用するための Playbook の設定 を参照してください。
次のフィールドにカスタム refspec も指定しない限り、一部のコミットハッシュと参照は使用できない場合があります。空白のままにした場合、デフォルトは HEAD です。これは、このプロジェクトで最後にチェックアウトされたブランチ/タグ/コミットです。
- オプション: Credential: このソースに使用する認証情報を指定します。
-
Project (必須): デフォルトのプロジェクトが事前に入力されます。それ以外の場合は、このインベントリーがソースとして使用しているプロジェクトを指定します。
アイコンをクリックして、プロジェクトのリストから選択します。リストが膨大な場合は、検索を使用してオプションを絞り込みます。
Inventory file (必須): 取得したプロジェクトに関連付けられたインベントリーファイルを選択します。まだ入力されていない場合は、メニュー内のテキストフィールドに入力して、無関係なファイルタイプをフィルタリングできます。フラットファイルインベントリーに加えて、ディレクトリーまたはインベントリースクリプトを参照することもできます。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
- オプション: カスタムインベントリースクリプトに渡すために、Source variables フィールドに環境変数を設定できます。インベントリースクリプトをソースコントロールに配置し、プロジェクトから実行することもできます。詳細は、自動化実行の設定 の インベントリーファイルのインポート を参照してください。
トラブルシューティング
SCM からカスタムインベントリースクリプトを実行する場合は、アップストリームのソースコントロールでスクリプトの実行ビット (chmod +x) を必ず設定してください。
そうしないと、Automation Controller が実行時に [Error 13] Permission denied エラーを出力します。
14.4.7.2. Amazon Web Services EC2 リンクのコピーリンクがクリップボードにコピーされました!
AWS EC2 をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Amazon EC2 を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
オプション: Credential: 既存の AWS 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
Automation Controller が IAM ロールが割り当てられた EC2 インスタンス上で実行されている場合、認証情報は省略でき、代わりにインスタンスメタデータのセキュリティー認証情報が使用されます。IAM ロールの使用に関する詳細は、Amazon のドキュメント IAM roles for Amazon EC2_documentation_at_Amazon を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
Source variables フィールドを使用して、
aws_ec2インベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、aws インベントリープラグインのドキュメント を参照してください。
トラブルシューティング
include_filters のみを使用する場合、AWS プラグインは常にすべてのホストを返します。これを正しく使用するには、フィルター に or の最初の条件を設定し、残りの OR 条件を include_filters のリストに基づいて構築する必要があります。
14.4.7.3. Google Compute Engine リンクのコピーリンクがクリップボードにコピーされました!
Google をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Add new source ページで、Source リストから Google Compute Engine を選択します。
- Create source ウィンドウが展開され、必須の Credential フィールドが表示されます。既存の GCE 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
Source Variables フィールドを使用して、
gcp_computeインベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、gcp_compute インベントリープラグインのドキュメント を参照してください。
14.4.7.4. Microsoft Azure Resource Manager リンクのコピーリンクがクリップボードにコピーされました!
Microsoft Azure Resource Manager をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Microsoft Azure Resource Manager を選択します。
- 追加フィールドに次の詳細を入力します。
- オプション: Credential: 既存の Azure 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
Source variables フィールドを使用して、
azure_rmインベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、azure_rm インベントリープラグインのドキュメント を参照してください。
14.4.7.5. VMware vCenter リンクのコピーリンクがクリップボードにコピーされました!
VMware をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから VMware vCenter を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- オプション: Credential: 既存の VMware 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
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 をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースを追加するインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- ソースの Name を入力します (必須)。
- Create source ページで、Source リストから VMware ESXi を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- Credential: 既存の VMware 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- Verbosity メニューを使用して、インベントリーソースの更新ジョブの出力レベルを選択します。
- オプション: ソースの追加 で説明されているように、ホストフィルター、有効な変数または値、更新オプションを指定できます。
-
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 をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Red Hat Satellite 6 を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- オプション: Credential: 既存の Satellite 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
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 をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Red Hat Insights を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- オプション: Credential: 既存の Red Hat Insights 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
Source Variables フィールドを使用して、
insightsインベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、insights インベントリープラグイン を参照してください。
14.4.7.9. OpenStack リンクのコピーリンクがクリップボードにコピーされました!
OpenStack をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから OpenStack を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- オプション: Credential: 既存の OpenStack 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
Source Variables フィールドを使用して、
openstackインベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、openstack インベントリープラグイン を参照してください。
14.4.7.10. Red Hat Virtualization リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Virtualization をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Red Hat Virtualization を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- オプション: Credential: 既存の Red Hat Virtualization 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
Source Variables フィールドを使用して、
ovirtインベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、ovirt インベントリープラグイン を参照してください。
Red Hat Virtualization (ovirt) インベントリーソースリクエストはデフォルトでセキュアです。このデフォルト設定を変更するには、source_variables で ovirt_insecure のキーを true に設定します。これは、/api/v2/inventory_sources/N/ エンドポイントにあるインベントリーソースの API 詳細からのみ使用できます。
14.4.7.11. Red Hat Ansible Automation Platform リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller をソースとするインベントリーを設定するには、次の手順を使用します。
手順
- ナビゲーションパネルから → → を選択します。
- ソースにするインベントリー名を選択し、Sources タブをクリックします。
- をクリックします。
- Create source ページで、Source リストから Red Hat Ansible Automation Platform を選択します。
Create source ウィンドウが展開され、追加のフィールドが表示されます。以下の詳細を入力します。
- オプション: Credential: 既存の Red Hat Ansible Automation Platform 認証情報から選択します。詳細は、ユーザー認証情報の管理 を参照してください。
- オプション: ソースの追加 で説明されているように、詳細度、ホストフィルター、有効な変数または値、および更新オプションを指定できます。
-
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 インスタンスのホストを追加します。
手順
- ナビゲーションパネルから、 → を選択します。
Projects ページで、 をクリックして、Create project ウィンドウを起動します。
- 新しいプロジェクトの追加 の手順に従って適切な詳細を入力します。
- ナビゲーションパネルから → → を選択します。
- ソースを追加するインベントリーを選択します。
- Sources タブで、 をクリックします。
メニューから、Terraform State を選択します。
Create source ウィンドウが展開され、任意指定の Credential フィールドが表示されます。
既存の Terraform バックエンド設定の認証情報を選択します。詳細は、Terraform バックエンド設定 を参照してください。
- Overwrite および Update on launch オプションを有効にします。
Source variables フィールドを使用して、
terraform_stateインベントリープラグインで使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、terraform_state ファイルを参照してください。Terraform State インベントリープラグインには、
backend_type変数が必要です。これは、Terraform バックエンドの認証情報 で設定するリモートバックエンドと同じものである必要があります。以下は Amazon S3 バックエンドの例です。backend_type: s3- 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 認証情報が必要です。
手順
- ナビゲーションパネルから → → を選択します。
- ソースを追加するインベントリーを選択します。
- Sources タブで、 をクリックします。
メニューから OpenShift Virtualization を選択します。
Add new source ウィンドウが展開され、必須の Credential フィールドが表示されます。
既存の Kubernetes API Bearer Token 認証情報から選択します。詳細は、OpenShift or Kubernetes API Bearer Token 認証情報タイプ を参照してください。この例では、
cmv2.engineering.redhat.comの認証情報を使用します。
- ソースの追加 の手順で説明されているように、必要に応じて Verbosity、Host Filter、Enabled Variable/Value、Update options を指定できます。
Source Variables フィールドを使用して、
kubernetesインベントリープラグインによって使用される変数をオーバーライドします。JSON または YAML 構文を使用して変数を入力します。ラジオボタンを使用して、その 2 つを切り替えます。これらの変数の詳細は、kubevirt.core.kubevirt インベントリーソース のドキュメントを参照してください。次の例では、connections 変数を使用して、クラスター内の特定 namespace へのアクセスを指定します。
--- connections: - namespaces: - hao-test- をクリックし、 をクリックしてインベントリーを同期します。
14.4.7.14. カスタムインベントリープラグインの使用 リンクのコピーリンクがクリップボードにコピーされました!
ここでは、servicenow.itsm コレクションインベントリープラグインを使用して、Ansible Automation Platform でインベントリーを同期する方法を説明します。
手順
次のファイルを含むソースコントロール 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 ドキュメント を参照してください。-
ソースを Sourced from a Project に設定し、新しいプロジェクトを選択し、インベントリーファイルセクションで
/(project root)を選択して、インベントリーを作成します。 - インベントリー内のソースを同期します。
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_scripts に cd で移動して git init コマンドを発行し、必要なスクリプトを追加してソースコントロールにプッシュし、ユーザーインターフェイスで SCM インベントリーソースを作成できます。
カスタムインベントリースクリプトの同期または使用の詳細は、自動化実行の設定 の インベントリーファイルのインポート を参照してください。
14.5. 完了したジョブの表示 リンクのコピーリンクがクリップボードにコピーされました!
インベントリーを使用してジョブを実行する場合は、インベントリーの Jobs タブでそのジョブの詳細を表示し、Expanded をクリックして各ジョブの詳細を表示できます。
14.6. アドホックコマンドの実行 リンクのコピーリンクがクリップボードにコピーされました!
アドホック とは、オーケストレーション言語 (/usr/bin/ansible-playbook) ではなく、/usr/bin/ansible を使用して Ansible でクイックコマンドを実行することを指します。アドホックコマンドの例としては、インフラストラクチャー内の 50 台のマシンを再起動することが考えられます。アドホックで可能なことは、Playbook に記述して実現できます。Playbook では、他の多くの操作を結合することもできます。
手順
- ナビゲーションパネルから → → を選択します。
- アドホックコマンドを実行するインベントリー名を選択します。
- Hosts または Groups タブからインベントリーソースを選択します。インベントリーソースは、単一のグループまたはホスト、選択した多数のホスト、または選択した多数のグループにすることができます。
- をクリックします。コマンドの実行ウィンドウが開きます。
以下の情報を入力します。
モジュール: コマンドの実行での使用をサポートしているモジュールのいずれかを選択します。
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 つを切り替えます。
- をクリックして、アドホックコマンドを実行する実行環境を選択します。
- をクリックして、使用する認証情報を選択します。
- をクリックします。結果は、モジュールのジョブウィンドウの 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. ホストの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しいホストを作成します。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックします。
Create Host ページで次の情報を入力します。
- Name: ホストの名前を入力します。
- (オプション) Description: ホストの説明を入力します。
- Inventory: このホストが属するインベントリーを選択します。
- Variables: ホストに関連付けるインベントリーファイル変数を入力します。
- をクリックして変更を保存します。
16.2. ホストの詳細の表示 リンクのコピーリンクがクリップボードにコピーされました!
ジョブ実行のホストの詳細を表示します。
手順
- ナビゲーションパネルから、 → → を選択します。Hosts ページには、最近のジョブ実行によって影響を受けたホストに関する次の情報が表示されます。
特定のホストを選択すると、そのホストの Details ページが開き、次の情報が表示されます。
- ホストの名前 (Name)。
- そのホストに関連付けられたインベントリー (Inventory)。このインベントリーを選択すると、インベントリーの詳細が表示されます。
- ホストの作成日と作成者 (Created)。作成者を選択すると、作成者の詳細が表示されます。
- ホストの最終変更日 (Last modified)。作成者を選択すると、作成者の詳細が表示されます。
- ホストに関連付けられた変数 (Variables)。変数は YAML または JSON 形式で表示できます。
をクリックして、ホストの詳細を編集します。
- ホストに関連付けられたファクトを表示するには、Facts タブを選択します。
ホストに関連付けられたグループを表示するには、Groups タブを選択します。
- グループをホストに関連付けるには、 をクリックします。
ホスト上で実行されたジョブを表示するには、Jobs タブを選択します。
ジョブの詳細を表示するには、
アイコンをクリックします。
第17章 インスタンスグループの管理 リンクのコピーリンクがクリップボードにコピーされました!
インスタンスグループを使用すると、クラスター環境でインスタンスをグループ化できます。ポリシーは、インスタンスグループがどのように動作し、ジョブがどのように実行されるかを規定します。次のビューには、ポリシーアルゴリズムに基づいた容量レベルが表示されます。
詳細は、
17.1. インスタンスグループの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しいインスタンスグループを作成するには、次の手順を実行します。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックし、リストから Create instance group を選択します。
以下のフィールドに該当する詳細を入力します。
- Name: 名前は一意でなければならず、"controller" という名前に指定しないようにしてください。
- Policy instance minimum: 新規インスタンスがオンラインになると、このグループに自動的に最小限割り当てられるインスタンス数を入力します。
*Policy instance percentage: スライダーを使用して、新規インスタンスがオンラインになると、このグループに自動的に最小限割り当てられるインスタンスの割合を選択します。
注記新しいインスタンスグループを作成する場合、ポリシーインスタンスフィールドは必要ありません。値を指定しない場合、Policy instance minimum と Policy instance percentage は、デフォルトで 0 に設定されます。
- Max concurrent jobs: 特定のジョブに対して実行できるフォークの最大数を指定します。
Max forks: 特定のジョブに対して実行できる同時ジョブの最大数を指定します。
注記Max concurrent jobs と Max forks のデフォルト値 0 は、制限がないことを示します。詳細は、インスタンスグループの容量制限 を参照してください。
- をクリックするか、既存のインスタンスグループを編集した場合は をクリックします。
次のステップ
インスタンスグループが正常に作成されると、新しく作成されたインスタンスグループの Details タブでインスタンスグループ情報を確認および編集できるようになります。
Instances を編集し、このインスタンスグループに関連付けられた Jobs を確認することもできます。
17.1.1. インスタンスグループへのインスタンスの関連付け リンクのコピーリンクがクリップボードにコピーされました!
手順
- インスタンスグループの Details ページで、Instances タブを選択します。
- をクリックします。
- リストから 1 つ以上の使用可能なインスタンスの横にあるチェックボックスをクリックして、インスタンスグループに関連付けるインスタンスを選択し、 をクリックします。
17.1.2. インスタンスグループに関連付けられたジョブの表示 リンクのコピーリンクがクリップボードにコピーされました!
手順
- Instance Group 画面の Jobs タブをクリックします。
ジョブの横にある矢印
アイコンをクリックしてビューを展開し、各ジョブの詳細を表示します。
各ジョブには次の詳細が表示されます。
- ジョブステータス
- 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インスタンスグループを変更することはできません。変更しようとすると、すべてのユーザーに対してパーミッション拒否エラーが発生します。したがって、
controlplaneの Instances タブでは、Disassociate オプションを使用できません。-
defaultAPI インスタンスグループは、ジョブを実行可能なすべてのノードで自動的に作成されます。これは他のインスタンスグループと同様ですが、特定のインスタンスグループが特定のリソースに関連付けられていない場合、ジョブの実行は常にデフォルトのインスタンスグループにフォールバックします。デフォルトのインスタンスグループは常に存在し、削除したり名前を変更したりすることはできません。 -
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 リストビューには、インスタンスグループポリシーをもとにした各インスタンスグループのキャパシティーレベルの概要が表示されます。
関連情報
詳細は、インスタンスグループの管理 セクションを参照してください。
18.1.4. 主なポリシーの考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
ポリシーに関して以下の点を考慮してください。
policy_instance_percentageとpolicy_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 つ以上のインスタンスグループの
policy_instance_listに追加します。 -
インスタンスの
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 つのリソースに関連付けられたインスタンスグループ内のすべてのインスタンスが容量不足の場合、容量が利用可能になるまでジョブが保留状態になります。
ジョブ送信先のインスタンスグループを決定する際の優先順位は、以下のとおりです。
- ジョブテンプレート
- インベントリー
- 組織 (プロジェクトの形式)
インスタンスグループをジョブテンプレートに関連付け、すべてのインスタンスグループが容量に達している場合、ジョブはインベントリーで指定したインスタンスグループに送信され、次に組織で指定したインスタンスグループに送信されます。リソースが利用可能な場合、優先順位の高いグループから順にジョブを実行する必要があります。
Playbook で定義されたカスタムインスタンスグループなどのリソースに、グローバルの default グループを関連付けることもできます。これを使用して、ジョブテンプレートまたはインベントリーで優先インスタンスグループを指定できます。一方で、容量が不足している場合には任意のインスタンスにジョブを送信できます。
-
group_aをジョブテンプレートに関連付け、defaultグループをそのインベントリーに関連付けると、group_aが容量不足の場合にdefaultグループをフォールバックとして使用できるようになります。 - さらに、インスタンスグループを 1 つのリソースに関連付けずに、別のリソースをフォールバックとして選択することもできます。たとえば、インスタンスグループをジョブテンプレートに関連付けず、インベントリーまたは組織のインスタンスグループにフォールバックさせます。
これにより、以下のことが可能になります。
- インスタンスグループをインベントリーに関連付けた場合 (インスタンスグループへのジョブテンプレートの割り当てを省略)、特定のインベントリーに対して Playbook を実行すると、そのインベントリーに関連付けられたグループでのみ実行されます。これは、それらのインスタンスのみが管理対象ノードへの直接リンクを有する状況で役立ちます。
管理者はインスタンスグループを組織に割り当てることができます。
これにより、管理者はインフラストラクチャー全体をセグメント化し、他の組織のジョブ実行能力を妨げることなくジョブを実行できる容量を、各組織が確保できるようになります。
管理者は、次のシナリオのように、各組織に複数のグループを割り当てることができます。
- A、B、および C の 3 つのインスタンスグループがあります。Org1 と Org2 の 2 つの組織があります。
- 管理者は、グループ A を Org1 に、グループ B を Org2 に割り当てます。次に、必要になる可能性がある追加容量のオーバーフローとして、グループ C を Org1 と Org2 の両方に割り当てます。
- 組織管理者は、必要なグループにインベントリーまたはジョブテンプレートを自由に割り当てたり、組織からデフォルトの順序を継承させたりすることができます。
このようにリソースを配置すると、柔軟性が得られます。また、インスタンスを 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 インスタンスの全サービスをシャットダウンした後に、他のインスタンスからプロビジョニング解除ツールを実行します。
手順
次のコマンドで、インスタンスをシャットダウンするか、サービスを停止します。
automation-controller-service stop別のインスタンスから次のプロビジョニング解除コマンドを実行して、コントローラーのクラスターレジストリーからインスタンスを削除します。
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 Guide の Migrate 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 証明書がある。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックし、Create container group を選択します。
- 新しいコンテナーグループの名前を入力し、以前に作成した認証情報を選択してコンテナーグループに関連付けます。
- をクリックします。
- 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 に提供されます。
手順
サービスアカウントを作成するには、以下のサンプルのサービスアカウント (
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.iocontainergroup-sa.ymlから設定を適用します。oc apply -f containergroup-sa.ymlサービスアカウントトークンを生成して API トークンを取得します。
oc create token containergroup-service-account --duration=$((365*24))h > containergroup-sa.tokenCA 証明書を取得します。
oc get secret -n openshift-ingress wildcard-tls -o jsonpath='{.data.ca\.crt}' | base64 -d > containergroup-ca.crt-
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 セクションを参照してください。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックし、Create container group を選択します。
- Customize pod spec オプションをオンにします。
Pod spec override フィールドに、カスタムの Kubernetes または OpenShift Pod 仕様を入力します。
- をクリックします。
ジョブ起動時のイメージは、どの実行環境がジョブに関連付けられているかによって決まります。コンテナーレジストリーの認証情報を実行環境に関連付ける場合、Automation Controller はイメージをプルするために ImagePullSecret を作成しようとします。シークレットを管理するパーミッションをサービスアカウントに付与しない場合は、ImagePullSecret を事前に作成してそれを Pod 仕様で指定し、使用する実行環境から認証情報を削除する必要があります。
詳細は、Red Hat Container Registry Authentication の Allowing Pods to Reference Images from Other Secured Registries セクションを参照してください。
コンテナーグループが正常に作成されると、新しく作成されたコンテナーグループの Details タブが表示され、そこでコンテナーグループ情報を確認および編集できます。これは、Instance Groups リストビューから
アイコンをクリックした場合に開くメニューと同じです。
Instances を編集し、このインスタンスグループに関連付けられた Jobs を確認することもできます。
コンテナーグループとインスタンスグループは適宜ラベル付けされます。
18.2.4. コンテナーグループ機能の検証 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーのデプロイと終了を確認するには、以下を実行します。
手順
モックインベントリーを作成し、Instance groups フィールドにコンテナーグループの名前を入力して、コンテナーグループをそのインベントリーに関連付けます。詳細は、新しいインベントリーの追加 を参照してください。
次の変数を使用して、インベントリーに
localhostホストを作成します。{'ansible_host': '127.0.0.1', 'ansible_connection': 'local'}ping または setup モジュールを使用して、ローカルホストに対してアドホックジョブを起動します。Machine Credential フィールドは必須ですが、このテストでどれを選択するかは重要ではありません。
Jobs 詳細ビューで、アドホックジョブの 1 つを使用してコンテナーに正常にアクセスしたことが表示されます。
OpenShift UI を使用している場合、Pod はデプロイされると表示され、終了すると非表示になります。CLI を使用して namespace で get pod 操作を実行し、同イベントの発生をリアルタイムで監視することもできます。
18.2.5. コンテナーグループジョブの表示 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーグループに関連付けられたジョブを実行すると、そのジョブの詳細が Details タブに表示されます。関連付けられたコンテナーグループと起動された実行環境も表示できます。
手順
- ナビゲーションパネルから、 → を選択します。
- コンテナーグループジョブを表示するジョブをクリックします。
- 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 インスタンスを準備します。
- Red Hat Enterprise Linux オペレーティングシステムが必要です。メッシュ内の各ノードには、静的 IP アドレス、または Ansible Automation Platform がアクセスできる解決可能な DNS ホスト名が必要です。
- 続行する前に、RHEL 仮想マシンの最小要件を満たしていることを確認している。詳細は、システム要件 を参照してください。
通信が必要なリモートネットワーク内に 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 パラメーターを設定します。
手順
シークレットを作成します。
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>ee_pull_credentials_secret ee-pull-secretを仕様に追加します。spec.ee_pull_credentials_secret=ee-pull-secret
Automation Controller UI からインスタンスを管理するには、システム管理者権限が必要です。
19.3. 自動化メッシュで使用するための仮想マシンのセットアップ リンクのコピーリンクがクリップボードにコピーされました!
手順
各 RHEL インスタンスに SSH で接続し、次の手順を実行します。ネットワークアクセスと制御によっては、SSH プロキシーまたは他のアクセスモデルが必要になる場合があります。
以下のコマンドを使用します。
ssh [username]@[host_ip_address]たとえば、Amazon Web Services で実行されている Ansible Automation Platform インスタンスの場合は、以下のようになります。
ssh ec2-user@10.0.0.6- 後のステップで、ホップノードから実行ノードに接続するために使用できる SSH キーを作成またはコピーします。これは、自動化メッシュ設定のためだけに使用される一時キー、または長期間有効なキーの場合があります。SSH ユーザーとキーは、後の手順で使用されます。
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 registerSimple Content Access の詳細は、Simple Content Access のスタートガイド を参照してください。
Ansible Automation Platform サブスクリプションと適切な Red Hat Ansible Automation Platform チャネルを有効にします。
RHEL 8 の場合:
# subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-8-x86_64-rpmsRHEL 9 の場合:
# subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpmsARM の場合:
# subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-aarch64-rpmsパッケージが最新であることを確認します。
sudo dnf upgrade -yダウンロードしたバンドルを実行するマシンに 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 に登録されます。つまり、別のネットワークまたはより厳密なネットワーク内で到達不可能なノードへの受信および送信のトラフィックのみを処理します。
次の手順は、ホストのノードタイプを設定する方法を示しています。
手順
- ナビゲーションパネルから → → を選択します。
Instances リストページで、 をクリックします。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 チェックボックスがオンになっていないことを確認します。
- をクリックします。
更新したトポロジーをグラフィック表示するには、トポロジービュー を参照してください。
注記次の手順は、新しく作成したインスタンスへの SSH アクセスが可能な任意のコンピューターから実行してください。
Download Bundle の横にある
アイコンをクリックして、この新しいインスタンスと、作成されたノードを自動化メッシュにインストールするために必要なファイルを含む tar ファイルをダウンロードします。
インストールバンドルには、TLS 証明書および鍵、認証局、適切な Receptor 設定ファイルが含まれています。
receptor-ca.crt work-public-key.pem receptor.key install_receptor.yml inventory.yml group_vars/all.yml requirements.yml-
ダウンロードした
tar.gzインストールバンドルを、ダウンロードした場所から展開します。これらのファイルがリモートマシン上の正しい場所にあることを確認するために、インストールバンドルにはinstall_receptor.ymlPlaybook が含まれています。 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 を参照してください。
-
プライベート DNS を使用するノードの場合は、次の行を
inventory.ymlに追加します。ansible_ssh_common_args: <your ssh ProxyCommand setting>これにより、
install-receptor.ymlPlaybook が、プロキシーコマンドを使用してローカル DNS ノード経由でプライベートノードに接続するように指示されます。- 属性を設定したら、 をクリックします。作成したインスタンスの Details ページが開きます。
- ファイルを保存して続行します。
インストールバンドルを実行してリモートノードをセットアップし、
ansible-playbookを実行するシステムには、ansible.receptorコレクションがインストールされている必要があります。ansible-galaxy collection install ansible.receptorまたは
ansible-galaxy install -r requirements.yml-
requirements.ymlファイルから receptor コレクションの依存関係をインストールすると、そこで指定された receptor のバージョンが一貫して取得されます。さらに、今後必要になる可能性のある他のコレクションの依存関係も取得されます。 - Playbook が実行されるすべてのノードに receptor コレクションをインストールします。インストールしない場合は、エラーが発生します。
-
receptor_listener_portが定義されている場合、マシンには、受信 TCP 接続を確立するために使用可能なオープンポート (27199 など) も必要です。次のコマンドを実行して、Receptor 通信用にポート 27199 を開きます (ファイアウォールでポート 27199 が開いていることを確認してください)。sudo firewall-cmd --permanent --zone=public --add-port=27199/tcp- 自動化メッシュを更新するマシン上で、次の 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) になっています。実行環境名を選択すると、エントリーが展開され、詳細情報が表示されます。
リストされている各実行環境について、
を使用して、選択した実行環境のプロパティーを編集するか、⋮ をクリックして実行環境を複製することができます。これらは 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 build や podman 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 からアップグレードした場合は、次の手順を使用してください。
手順
-
マウントされたボリュームのコンテナー所有権を
rootに変更します。 - ナビゲーションパネルから、 → → を選択します。
- をクリックします。
現在の例を使用して、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 Groups を On に設定します。
Playbook が実行されると、結果として得られる Pod 仕様は次の例のようになります。volumeMounts セクションと volumes セクションの詳細に注目してください。
20.1.4.2. 実行ノード内のディレクトリーを実行環境コンテナーにマウントする リンクのコピーリンクがクリップボードにコピーされました!
この手順では、実行ノードまたはハイブリッドノードからジョブコンテナーにボリュームをマウントできるように、分離されたジョブに公開されるパスを設定する方法を説明します。
手順
- ナビゲーションパネルから、 → → を選択します。
Paths to expose to isolated jobs を編集します。
- 実行ノードまたはハイブリッドノードからコンテナーにボリュームをマウントするパスのリストを入力します。
- 1 行に 1 つのパスを入力します。
サポートされている形式は、
HOST-DIR[:CONTAINER-DIR[:OPTIONS]です。許可されるパスは、z、O、ro、およびrwです。例
[ "/var/lib/awx/.ssh:/root/.ssh:O" ]rwオプションの場合、SELinux ラベルを正しく設定します。たとえば、/fooディレクトリーをマウントするには、次のコマンドを実行します。sudo sumkdir /foochmod 777 /foosemanage 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 でジョブテンプレートなどで使用できるようにする必要があります。
- 実行環境がグローバルに使用できるように指定されているか、組織に関連付けられているかに応じて、ジョブで実行環境を使用するための適切なレベルの管理者権限を持っている。組織に関連付けられた実行環境では、組織管理者がそれらの実行環境でジョブを実行できる必要があります。
- 認証情報が割り当てられた実行環境を使用するジョブまたはジョブテンプレートを実行する前に、認証情報にユーザー名、ホスト、およびパスワードが含まれていることを確認する。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックして、実行環境を追加します。
以下のフィールドに該当する詳細を入力します。
- 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: イメージに保護されたコンテナーレジストリーがある場合は、それにアクセスするための認証情報を指定します。
をクリックします。
新しく追加した実行環境をジョブテンプレートで使用する準備ができました。
- ジョブテンプレートに実行環境を追加するには、ジョブテンプレートの 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 のキーと値を含めます。
各リスト項目は、次の必須キーを含むディクショナリーである必要があります。
| src | ビルドコンテキストディレクトリーにコピーするソースファイルを指定します。
これは、 |
| dest |
ソースファイル (例:
この値を絶対パスで指定することや、パス内に 注記
|
21.3. additional_build_steps リンクのコピーリンクがクリップボードにコピーされました!
ビルドステップは、任意のビルドフェーズのカスタムビルドコマンドを指定するものです。これらのコマンドは、コンテナーランタイムのビルド指示ファイル (Containerfile や Dockerfile など) に直接挿入されます。コマンドは、コンテナー化ツールで必要なルールに準拠する必要があります。
ビルドステップは、イメージ作成プロセスのどの段階の前後にも追加できます。たとえば、依存関係をインストールする前に git をインストールする必要がある場合は、ベースビルド段階の最後にビルドステップを追加できます。
有効なキーは次のとおりです。それぞれが複数行の文字列または文字列のリストをサポートします。
| 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 は次のビルド引数を使用します。
| ANSIBLE_GALAXY_CLI_COLLECTION_OPTS |
|
| ANSIBLE_GALAXY_CLI_ROLE_OPTS |
使用すると、 |
| PKGMGR_PRESERVE_CACHE | これは、イメージのビルドプロセス中にパッケージマネージャーのキャッシュがクリアされる頻度を制御します。
この値が設定されていない場合 (デフォルト)、キャッシュは頻繁にクリアされます。値が |
Ansible Builder は、build_arg_defaults 内で指定された値をビルド指示ファイルにハードコーディングするため、コンテナーのビルドを手動で実行した場合でも値は保持されます。
定義と CLI build-arg フラグを使用したコマンドラインで同じ変数を指定すると、CLI の値によって定義の値がオーバーライドされます。
21.3.2. 依存関係 リンクのコピーリンクがクリップボードにコピーされました!
ansible-core、ansible-runner、Python パッケージ、システムパッケージ、コレクションなど、最終イメージにインストールする依存関係を指定します。Ansible Builder は、ユーザーがインストールする Ansible コレクションの依存関係を自動的にインストールします。
一般に、標準の構文を使用してパッケージのバージョンを制限できます。dnf、pip、ansible-galaxy、またはその他のパッケージ管理ユーティリティーに渡すのと同じ構文を使用します。パッケージまたはコレクションを別のファイルで定義し、定義ファイルの dependencies セクションで上記のファイルを参照することもできます。
有効なキーは次のとおりです。
| ansible_core |
インストールされる
この値は、キー (
|
| ansible_runner | インストールする Ansible Runner Python パッケージのバージョン。
この値は、キー (
|
| galaxy | Ansible Galaxy からインストールするコレクション。
これは、ファイル名、ディクショナリー、または Ansible Galaxy |
| python | Python のインストール要件。
これには、ファイル名または要件のリストなどを使用できます。Ansible Builder は、 このライブラリーは、他のファイルへの参照を含む複雑な構文をサポートします。多数のコレクションに同じ パッケージ名 が必要な場合、Ansible Builder はそれらを 1 つのエントリーにまとめ、制約を結合します。
Ansible Builder は、コレクションにパッケージが依存関係としてリストされている場合でも、Python 依存関係の結合ファイル内の一部のパッケージを除外します。これには、テストパッケージと、Ansible 自体を提供するパッケージが含まれます。完全なリストは、
このような除外されるパッケージ名のいずれかを含める必要がある場合は、 この方法で提供されたパッケージは、除外された Python パッケージのリストに対して処理されません。 |
| python_interpreter |
dnf によってインストールされる Python システムパッケージ名 ( |
| system | インストールされるシステムパッケージ (bindep 形式)。ファイル名または要件のリストを指定できます。 bindep の詳細は、OpenDev のドキュメント を参照してください。
システムパッケージの場合、 |
次の例では、さまざまな依存関係を含むファイル名を使用しています。
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 のショートカット構文を使用することもできますが、完全な定義の方が信頼性と移植性が高くなります。
このセクションの有効なキーは次のとおりです。
| base_image | 実行環境の親イメージを定義するディクショナリー。
使用するコンテナーイメージには |
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 :
CMDContainerfile ディレクティブのリテラル値。デフォルト値は["bash"]です。 -
entrypoint:
ENTRYPOINTContainerfile ディレクティブのリテラル値。デフォルトのエントリーポイントの動作は、サブプロセスへのシグナルの伝播を処理するだけでなく、実行時に、コンテナーユーザーが有効で書き込み可能なホームディレクトリーが含まれる適切な環境が含まれます。このディレクトリーは、/etc/passwdで表現されており、HOME環境変数と一致するように設定されています。デフォルトのエントリーポイントスクリプトは、ユーザーのランタイム環境を適切に調整できない場合に、stderrに警告を発行できます。この動作は無視されるか、致命的なエラーに格上げされる可能性があります。詳細は、エントリーポイントターゲットスクリプトのソースを参照してください。 - package_pip : エントリーポイントのサポートのために pip を使用してインストールするパッケージ。このパッケージは、最終的なビルドイメージにインストールされます。
-
cmd :
- 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) で、認証情報の名前と認証情報の種類が表示されます。
この画面から、認証情報を編集
、複製
、または削除 ⋮ できます。
組織を指定せずに、同じ名前を持つ重複した認証情報を作成することが可能です。ただし、同じ組織内に重複する 2 つの認証情報を作成することはできません。
例
- 組織を指定せずに、同じ名前を持つ 2 つのマシン認証情報を作成します。
-
モジュール
ansible.controller.exportを使用して、認証情報をエクスポートします。 -
別の自動化実行ノードでモジュール
ansible.controller.importを使用します。 - インポートされた認証情報を確認します。
重複する 2 つの認証情報をエクスポートし、別のノードにインポートすると、1 つの認証情報のみがインポートされます。
22.2. 新しい認証情報の作成 リンクのコピーリンクがクリップボードにコピーされました!
チームに追加された認証情報は、チームのすべてのメンバーが利用できるようになります。個々のユーザーに認証情報を追加することもできます。
初期設定の一環として、デモ認証情報と Ansible Galaxy の 2 つの認証情報を使用できます。Ansible Galaxy 認証情報は、テンプレートとして使用してください。この認証情報はコピーできますが、編集することはできません。必要に応じて認証情報を追加してください。
手順
- ナビゲーションパネルから、 → → を選択します。
- Credentials ページで、 をクリックします。
以下の情報を入力します。
- Name: 新しい認証情報の名前。
- (オプション) Description: 新しい認証情報の説明。
- オプション: Organization: 認証情報を関連付ける組織の名前。デフォルトは Default です。
- Credential type: 作成する認証情報のタイプを入力または選択します。
認証情報タイプ の説明に従い、選択した認証情報タイプに応じて適切な詳細を入力します。
- をクリックします。
22.3. 既存の認証情報に新しいユーザーとジョブテンプレートを追加する リンクのコピーリンクがクリップボードにコピーされました!
手順
- ナビゲーションパネルから、 → → を選択します。
- 追加のユーザーに割り当てる認証情報を選択します。
- User Access タブをクリックします。この認証情報に関連付けられているユーザーとチーム、およびそのロールを確認できます。ユーザーが存在しない場合は、Users メニューから追加します。詳細は、ユーザー を参照してください。
- をクリックします。
- 認証情報へのアクセスを許可するユーザーを選択し、 をクリックします。
- Select roles to apply ページで、ユーザーに追加するロールを選択します。
- をクリックします。
選択内容を確認し、 をクリックしてロールを追加するか、 をクリックして変更を加えます。
操作が成功したかどうかを示す Add roles ウィンドウが表示されます。
操作が成功しなかった場合は、警告が表示されます。
- をクリックします。
- User Access ページに概要情報が表示されます。
- Job templates タブを選択して、この認証情報を割り当てるジョブテンプレートを選択します。
ジョブテンプレートを選択するか、Create template リストから Create job template を選択して、追加のジョブテンプレートに認証情報を割り当てます。
新しいジョブテンプレートの作成の詳細は、ジョブテンプレート を参照してください。
22.4. 認証情報タイプ リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller は次の種類の認証情報をサポートしています。
- Amazon Web Services
- Ansible Galaxy/Automation Hub API Token
- AWS Secrets Manager Lookup
- Bitbucket Data Center HTTP Access Token
- Centrify Vault Credential Provider Lookup
- Container Registry
- CyberArk Central Credential Provider Lookup
- CyberArk Conjur Secrets Manager Lookup
- GitHub Personal Access Token
- GitLab Personal Access Token
- Google Compute Engine
- GPG Public Key
- HashiCorp Vault Secret Lookup
- HashiCorp Vault Signed SSH
- Insights
- Machine
- Microsoft Azure Key Vault
- Microsoft Azure Resource Manager
- Network
- OpenShift or Kubernetes API Bearer Token
- OpenStack
- Red Hat Ansible Automation Platform
- Red Hat Satellite 6
- Red Hat Virtualization
- Source Control
- Terraform Backend Configuration
- Thycotic DevOps Secrets Vault
- Thycotic Secret Server
- Vault
- VMware vCenter
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 Console の Galaxy 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 サービスアカウントファイルをアップロードします。 をクリックして、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 を実行するジョブを送信するときに使用されます。
ネットワーク接続 httpapi、netconf、network_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は、既存の方法のいずれか、または作成したカスタムの方法です。方法の名前の入力を開始すると、適切な名前が自動入力されます。-
選択なし: タスクまたはプレイの
becomeがyesに設定されており、何も選択されていない場合は、デフォルトで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 escalation と Become 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 に指定する必要があります。 -
それ以外のネットワーク接続 (
httpapi、netconf、および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 変数で設定します。
| ansible_connection の値 | プロトコル | 必須 | 永続的 |
|---|---|---|---|
|
| CLI over SSH | network_os の設定 | はい |
|
| XML over SSH | network_os の設定 | はい |
|
| API over HTTP/HTTPS | network_os の設定 | はい |
|
| プロバイダーによって異なる | プロバイダー設定 | いいえ |
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 CERTIFICATEとEND 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 を設定します。
手順
サービスアカウントを作成するために、サンプルのサービスアカウント
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.iocontainergroup-sa.ymlから設定を適用します。oc apply -f containergroup-sa.ymlサービスアカウントに関連付けられているシークレット名を取得します。
export SA_SECRET=$(oc get sa containergroup-service-account -o json | jq '.secrets[0].name' | tr -d '"')シークレットからトークンを取得します。
oc get secret $(echo ${SA_SECRET}) -o json | jq '.data.token' | xargs | base64 --decode > containergroup-sa.tokenCA 証明書を取得します。
oc get secret $SA_SECRET -o json | jq '.data["ca.crt"]' | xargs | base64 --decode > containergroup-ca.crt-
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 に格納され、この環境変数が、認証情報がアタッチされたすべてのジョブで使用できるようになります。
ファイルを貼り付けたり、ドラッグしたり、参照してアップロードしたり、
アイコンをクリックして外部の シークレット管理システム からフィールドに入力したりできます。
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_vars、env、およびファイルの名前空間での競合を回避する必要があります。 -
環境変数または追加変数の名前は予約されているため、
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 検索フィールドがあります。
順序によりコンテンツの同期と検索の優先順位が設定されるため、これらの認証情報の順序を指定することが重要です。詳細は、組織の作成 を参照してください。
コレクションを使用してプロジェクトを設定する方法の詳細は、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 モデルでは、リレーションシップは以下のように定義されます。
| マシン | SSH |
|---|---|
| Vault | Vault |
| ネットワーク |
環境変数を設定します ( |
| 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. 認証情報タイプの使用開始 リンクのコピーリンクがクリップボードにコピーされました!
手順
ナビゲーションパネルから、 → → を選択します。カスタム認証情報タイプが作成されていない場合は、Credential Types ページで認証情報タイプを追加するように求められます。
認証情報タイプが作成されていると、このページには、既存および利用可能な認証情報タイプのリストが表示されます。
-
認証情報タイプに関する詳細情報を表示するには、認証情報の名前または編集アイコン
をクリックします。
- Details タブで、該当する場合、各認証情報タイプごとに、Input Configuration フィールドと Injector Configuration フィールドに独自の設定が表示されます。YAML 形式と JSON 形式の両方が設定フィールドでサポートされています。
23.5. 新しい認証情報タイプの作成 リンクのコピーリンクがクリップボードにコピーされました!
新規の認証情報タイプを作成するには、以下を実行します。
手順
- ナビゲーションパネルから、 → → を選択します。
- Credential Types ビューで、 をクリックします。
Name および Description フィールドに詳細を入力します。
注記カスタムの認証タイプには無効であるため、認証タイプを新規作成する際には、INPUT 名、INJECTOR 名および ID に、
ANSIBLE_で始まる予約済変数名を使用しないでください。Input configuration フィールドで、対象のタイプの順序付きフィールドのセットを定義する入力スキーマを指定します。形式は YAML または JSON です。
YAML
fields: - type: string id: username label: Username - type: string id: password label: Password secret: true required: - username - passwordYAML ページ でさらに 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"] }] },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 }}" } }をクリックします。
新しく作成した認証情報タイプが、認証情報タイプのリストに表示されます。
編集アイコン
をクリックして、認証情報タイプのオプションを変更します。
注記Edit 画面では、詳細の変更や、認証情報の削除ができます。Delete オプションが無効になっている場合は、その認証情報タイプが認証情報によって使用されています。認証情報タイプを削除する前に、それを使用しているすべての認証情報からその認証情報タイプを削除する必要があります。
検証
- 新規の認証情報の作成時に、新規に作成された認証情報タイプを Credential Type 選択ウィンドウから選択できることを確認します。
関連情報
新しい認証情報を作成する方法は、認証情報の作成 を参照してください。
第24章 アクティビティーストリーム リンクのコピーリンクがクリップボードにコピーされました!
ナビゲーションパネルから、 → → を選択します。
アクティビティーストリームには、特定のオブジェクトの変更がすべて表示されます。アクティビティーストリームには、変更ごとに、イベントの時刻、イベントを開始したユーザー、およびアクションが表示されます。表示される情報はイベントの種類によって異なります。
アイコンをクリックすると、変更のイベントログが表示されます。
アクティビティーストリームは、開始ユーザー、システム (システムによって開始された場合)、または認証情報、ジョブテンプレート、スケジュールなどの関連オブジェクトによってフィルタリングできます。アクティビティーストリームには、インスタンス全体のアクティビティーストリームが表示されます。ほとんどのページで、対象となる特定のオブジェクトに対してフィルタリングされたアクティビティーストリームを表示できます。
アイコン
をクリックすると、どのページでもアクティビティーストリームを表示できます。
第25章 Notifiers リンクのコピーリンクがクリップボードにコピーされました!
メール、Slack、Webhook などの 通知タイプ は、通知テンプレートのインスタンスであり、通知テンプレートで定義された名前、説明、設定を持ちます。
以下に、通知テンプレートの追加に必要な詳細の例を示します。
- メールの通知テンプレートには、ユーザー名、パスワード、サーバー、および受信者が必要です。
- Slack 通知テンプレートには、トークンとチャネルのリストが必要です。
- Webhook 通知テンプレートには、URL とヘッダーが必要です。
ジョブが失敗すると、通知テンプレートで定義した設定を使用して通知が送信されます。
以下に、通知システムの一般的なフローを示します。
-
API または UI を介して、
/api/v2/notification_templates エンドポイントでREST APIへの通知テンプレートを作成します。 -
通知テンプレートは、サポートするさまざまなオブジェクト (ジョブテンプレートのすべてのバリアント、組織およびプロジェクト) のいずれかに対して、通知が必要な適切なトリガーレベル (開始、成功、またはエラー) に割り当てます。たとえば、ジョブテンプレート 1 が失敗したときにトリガーするように、特定の通知テンプレートを割り当てることができます。この場合、通知テンプレートを
/api/v2/job_templates/n/notification_templates_errorAPI エンドポイントにあるジョブテンプレートに関連付けます。 - ジョブの開始時と終了時の通知を設定できます。ユーザーとチームは、任意のジョブに割り当てることができる独自の通知を定義することもできます。
25.1. 通知の階層 リンクのコピーリンクがクリップボードにコピーされました!
通知テンプレートは、次に示すように、親オブジェクトで定義されたテンプレートを継承します。
- ジョブテンプレートは、ジョブテンプレート用に定義された通知テンプレートを使用します。さらに、ジョブテンプレートで使用されるプロジェクトや、ジョブテンプレートがリストされている組織から通知テンプレートを継承できます。
- プロジェクトの更新は、プロジェクトで定義された通知テンプレートを使用し、そのプロジェクトに関連付けられている組織から通知テンプレートを継承します。
- インベントリーの更新は、それがリストされている組織で定義された通知テンプレートを使用します。
- アドホックコマンドは、インベントリーが関連付けられている組織で定義された通知テンプレートを使用します。
25.2. 通知ワークフロー リンクのコピーリンクがクリップボードにコピーされました!
ジョブが成功または失敗すると、エラーハンドラーまたは成功ハンドラーが、Notifiers セクションに記載されている手順を使用して、関連する通知テンプレートのリストを取得します。
次に、ジョブに関する関連詳細を含む通知オブジェクトをそれぞれに作成し、宛先に送信します。これらには、メールアドレス、Slack チャネル、SMS 番号が含まれます。
これらの通知オブジェクトは、ジョブタイプ (ジョブ、インベントリー更新、プロジェクト更新) の関連リソースとして利用できるほか、/api/v2/notifications からも利用できます。また、関連リソースを調べるて、通知テンプレートからどのような通知が送信されたかを確認することもできます。
通知が失敗しても、それに関連付けられているジョブに影響を与えたり、ジョブが失敗したりすることはありません。通知のステータスは、詳細エンドポイント /api/v2/notifications/<n> で確認できます。
25.3. 通知テンプレートの作成 リンクのコピーリンクがクリップボードにコピーされました!
通知テンプレートを作成するには、次の手順を使用します。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックします。
以下のフィールドに入力します。
- Name: 通知の名前を入力します。
- Description: 通知の説明を入力します。このフィールドは任意です。
- Organization: 通知が属する組織を指定します。
- Type: ドロップダウンメニューから通知のタイプを選択します。詳細は、通知の種類 セクションを参照してください。
- をクリックします。
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 を使用する環境の検証を無効にするには、このオプションを選択します。
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 を使用するかどうかをチェックします。
25.4.4. Mattermost リンクのコピーリンクがクリップボードにコピーされました!
Mattermost 通知タイプは、Mattermost のメッセージングおよびコラボレーションワークスペースへのシンプルなインターフェイスを提供します。
Mattermost 通知を設定するには、次の詳細を入力します。
- Target URL: 送信先の完全な URL。
- オプション: Username: 通知のユーザー名を入力します。
- オプション: Channel: 通知のチャネルを入力します。
- Icon URL: この通知向けに表示するアイコンを指定します。
- Disable SSL verification: ターゲットの証明書の信頼性の検証をオフにします。内部 CA またはプライベート CA を使用する環境の検証を無効にするには、このオプションを選択します。
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にあり、APItestuserを完全なドメインではなくサブドメインとして指定します。 - API service/Integration Key: PagerDuty で作成した API サービス/統合キーを入力します。
- Client Identifier: これは、API キーとサービスを使用しているサービスを識別するために、アラートの内容とともに PagerDuty サービスに送信されます。これは、複数の統合で同じ API キーとサービスを使用している場合に役立ちます。
25.4.6. Rocket.Chat リンクのコピーリンクがクリップボードにコピーされました!
Rocket.Chat 通知タイプは、Rocket.Chat のコラボレーションおよびコミュニケーションプラットフォームへのインターフェイスを提供します。
Rocket.Chat 通知を設定するには、次の詳細を入力します。
-
Target URL:
POST先の完全な URL。 - オプション: Username: ユーザー名を入力します。
- オプション: Icon URL: この通知向けに表示するアイコンを指定します。
- Disable SSL Verification: ターゲットの証明書の信頼性の検証をオフにします。内部 CA またはプライベート CA を使用する環境の検証を無効にするには、このオプションを選択します。
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 など)。ボットまたはアプリを設定したら、次の手順を完了する必要があります。
- Apps に移動します。
- 新しく作成したアプリをクリックし、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 桁の電話番号である必要があります。
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 を使用して特定のリソースを作成することもできます。
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. カスタム通知の作成 リンクのコピーリンクがクリップボードにコピーされました!
通知フォーム上の各 通知タイプ の テキストの内容をカスタマイズ できます。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックします。
- Type リストから通知タイプを選択します。
トグルを使用して Customize messages を有効にします。
さまざまなジョブイベントに、次のようなカスタムメッセージを提供できます。
- 開始メッセージの本文
- 成功メッセージの本文
- エラーメッセージの本文
- ワークフロー承認の本文
- ワークフロー拒否メッセージの本文
- ワークフロー保留メッセージの本文
ワークフロータイムアウトメッセージの本文
メッセージの形式は、設定している通知の種類によって異なります。たとえば、メールおよび 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." }
-
-
Webhook と PagerDuty のメッセージ本文はディクショナリー定義を使用します。これらのデフォルトのメッセージ本文は
無効な構文や使用できないフィールドの参照を使用する通知テンプレートを作成すると、エラーの内容を示すエラーメッセージが表示されます。通知のカスタムメッセージを削除すると、この場所にはデフォルトのメッセージが表示されます。
カスタムメッセージを編集せずに通知テンプレートを保存した場合 (または編集してデフォルト値に戻した場合)、Details 画面にはデフォルトが表示されるはずで、カスタムメッセージテーブルは表示されません。いずれかの値を編集して保存すると、テーブル全体が Details 画面に表示されます。
25.6. 通知の有効化と無効化 リンクのコピーリンクがクリップボードにコピーされました!
特定のジョブの開始時、およびジョブ実行終了時の成功または失敗を通知するように設定できます。次の動作に注意してください。
- ワークフロージョブテンプレートで開始時通知が有効になっており、そのワークフロー内のジョブテンプレートでも開始時通知が有効になっている場合、両方の通知を受け取ります。
- ワークフロージョブテンプレート内の多くのジョブテンプレートで通知を実行できます。
- スライスされたジョブテンプレートの開始時に通知を実行できるようにし、各スライスで通知が生成されます。
- ジョブの開始時に通知を実行できるようにし、その通知が削除された場合、ジョブテンプレートは引き続き実行されますが、エラーメッセージが表示されます。
次のリソースの Details ページの Notifications タブから、ジョブの開始、ジョブの成功、ジョブの失敗に関する通知や、これらを任意に組み合わせた通知を有効にできます。
- ジョブテンプレート
- ワークフローテンプレート
- プロジェクト
承認ノードがあるワークフローテンプレートの場合は、Start、Success、および 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 をリセットします。
手順
- ナビゲーションパネルから → を選択します。
- をクリックします。
- 通知に表示する DNS エントリーのアドレスを Base URL of the service フィールドに入力します。
25.8. 通知 API リンクのコピーリンクがクリップボードにコピーされました!
started、success、または 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- (選択肢)run、check、またはscan -
launch_type- (選択肢)manual、relaunch、callback、scheduled、dependency、workflow、sync、またはscm -
limit- (文字列) 指定された場合は、このホストのセットに制限された Playbook を実行 -
modified- (日時) ジョブの最終更新時のタイムスタンプ -
name- (文字列) このジョブの名前 -
Playbook- (文字列) 実行された Playbook -
scm_revision- (文字列) このジョブに使用するプロジェクトからの SCM リビジョン (存在する場合) -
skip_tags- (文字列) 指定した場合は、このタグセットをスキップして Playbook を実行 -
start_at_task- (文字列) 指定した場合は、この名前に一致するタスクで Playbook の実行を開始 -
started- (日時) ジョブが開始するためにキューに入れられた日時 -
status- (選択肢)new、pending、waiting、running、successful、failed、error、または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- (選択肢)new、pending、waiting、running、successful、failed、error、canceled、never updated、ok、またはmissingのいずれか。 -
scm_type- (選択肢) (空の文字列)、git、hg、svn、insightsのいずれか
-
job_template-
id- (int) ジョブテンプレートのデータベース ID。 -
description- (文字列) プロジェクトの説明 (任意) -
status- (選択肢)new、pending、waiting、running、successful、failed、error、canceled、never updated、ok、またはmissingのいずれか。
-
job_template-
id- (int) ジョブテンプレートのデータベース ID。 -
name- (文字列) ジョブテンプレートの名前。 -
description- (文字列) ジョブテンプレートの説明 (任意)
-
unified_job_template-
id- (int) 統合ジョブテンプレートのデータベース ID。 -
name- (文字列) 統合ジョブテンプレートの名前。 -
description- (文字列) 統合ジョブテンプレートの説明 (任意) -
unified_job_type- (選択肢) 統合ジョブタイプ (job、workflow_job、project_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- (選択肢)approved、denied、およびtimed_outのいずれか -
url- (文字列) 通知が送信されるジョブの URL (start、success、fail、およびapproval notificationsに適用) -
workflow_url- (文字列) 関連する承認ノードへの URL。これにより、通知受信者は関連するワークフロージョブページに移動して状況を確認できます。たとえば、このノードは {{workflow_url }} で表示できます。承認関連の通知の場合は、urlとworkflow_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 に進みます。
手順
Automation Controller で使用する Personal Access Token (PAT) を生成します。
- GitHub アカウントのプロファイル設定で、Settings を選択します。
- ナビゲーションパネルから、 を選択します。
- Developer Settings ページで、Personal access tokens を選択します。
- Tokens (classic) を選択します。
- Personal access tokens 画面で、 をクリックします。
- プロンプトが表示されたら、GitHub アカウントのパスワードを入力して続行します。
- Note フィールドに、この PAT の用途に関する簡単な説明を入力します。
- Select scopes フィールドで、repo:status、repo_deployment、および public_repo の横のボックスをオンにします。自動 Webhook には、招待の場合を除き、リポジトリースコープへのアクセス権だけが必要です。詳細は、OAuth アプリのスコープのドキュメント を参照してください。
をクリックします。
重要トークンが生成されたら、ステップ 2 で必要となるため、必ず PAT をコピーしてください。GitHub でこのトークンに再度アクセスすることはできません。
必要に応じて、PAT を使用して、GitHub の認証情報を作成します。
- インスタンスに移動し、生成されたトークンを使用して GitHub PAT の新しい認証情報を作成します。
GitHub にポストバックするジョブテンプレートで使用するため、この認証情報の名前をメモしておきます。
Webhook を有効にするジョブテンプレートに移動し、前の手順で作成した Webhook サービスと認証情報を選択します。
- をクリックします。ジョブテンプレートは GitHub にポストバックするように設定されています。
- Webhook を設定する GitHub リポジトリーに移動し、 を選択します。
- ナビゲーションパネルから、 → を選択します。
- Add webhook ページを完了するには、ジョブテンプレートまたはワークフロージョブテンプレートで Enable Webhook オプションをオンにする必要があります。詳細は、ジョブテンプレートの作成 および ワークフロージョブテンプレートの作成 のステップ 3 を参照してください。
以下のフィールドに入力します。
- 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 を選択する必要があります。
- Active: これをチェックしたままにします。
- をクリックします。
- Webhook が設定されると、編集または削除する機能とともに、リポジトリーでアクティブな Webhook のリストに表示されます。Webhook をクリックして、Manage webhook 画面に移動します。
- スクロールして、Webhook に対して行われた配信試行と、それらが成功したか失敗したかを表示します。
27.2. GitLab Webhook の設定 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller には、トリガーされた Webhook イベントに基づいてジョブを実行する機能があります。ジョブのステータス情報 (pending, error, success) は、プルリクエストイベントの場合にのみ送信できます。Automation Controller がジョブステータスを Webhook サービスにポストする必要がない場合は、直接手順 3 に進みます。
手順
Automation Controller で使用する Personal Access Token (PAT) を生成します。
- GitLab のナビゲーションパネルから、アバターを選択して、 します。
- ナビゲーションパネルから を選択します。
以下のフィールドに入力します。
- Token name: この PAT が何に使用されるかについて、簡単な説明を入力します。
- Expiration date: Webhook の有効期限を設定しない場合は、このフィールドをスキップします。
- Select scopes: 統合に適用できるスコープを選択します。Automation Controller の場合、必要な選択は API のみです。
をクリックします。
重要トークンが生成されたら、ステップ 2 で必要となるため、必ず PAT をコピーしてください。GitLab ではこのトークンに再度アクセスすることはできません。
必要に応じて、PAT を使用して、GitLab の認証情報を作成します。
- インスタンスに移動し、生成されたトークンを使用して GitLab PAT の新しい認証情報を作成します。
GitLab にポストバックするジョブテンプレートで使用するため、この認証情報の名前をメモしておきます。
Webhook を有効にするジョブテンプレートに移動し、前の手順で作成した Webhook サービスと認証情報を選択します。
- をクリックします。ジョブテンプレートは GitLab にポストバックするように設定されています。
- Webhook を設定する GitLab リポジトリーに移動します。
- ナビゲーションパネルから、 → を選択します。
- Add webhook ページを完了するには、ジョブテンプレートまたはワークフロージョブテンプレートで Enable Webhook オプションをオンにする必要があります。詳細は、ジョブテンプレートの作成 および ワークフロージョブテンプレートの作成 のステップ 3 を参照してください。
以下のフィールドに入力します。
- URL: Webhook URL の内容をジョブテンプレートからコピーし、ここに貼り付けます。結果は GitLab からこのアドレスに送信されます。
- Secret Token: ジョブテンプレートから Webhook Key の内容をコピーし、ここに貼り付けます。
- Trigger: Webhook をトリガーするイベントのタイプを選択します。このようなイベントがあれば、ジョブまたはワークフローがトリガーされます。ジョブのステータス (pending, error, success) を GitLab に送り返すには、Trigger セクションで Merge request events を選択する必要があります。
- SSL verification: Enable SSL verification を選択したままにします。
- をクリックします。
- Webhook が設定されると、リポジトリーの Project Webhooks リストに表示され、イベントのテスト、Webhook の編集または削除を行うことができます。Webhook イベントをテストすると、成功したか失敗したかの結果が各ページに表示されます。
関連情報
27.3. ペイロード出力の表示 リンクのコピーリンクがクリップボードにコピーされました!
追加の変数として公開されたペイロード全体を表示できます。
手順
- ナビゲーションパネルから、 → を選択します。
- Webhook が有効になっているジョブテンプレートを選択します。
- Details タブを選択します。
次の例に示すように、Extra Variables フィールドで、
awx_webhook_payload変数からのペイロード出力を表示します。
第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 認証情報を作成するには、次の手順を使用します。
手順
- ナビゲーションパネルから、 → → を選択します。
- をクリックします。
次のフィールドに適切な詳細を入力します。
- Name: 認証情報の名前を入力します。
- オプション: Description: 認証情報の説明を入力します。
-
オプション: Organization: 認証情報が関連付けられている組織の名前を入力するか、検索
アイコンをクリックして、Select organization ウィンドウから選択します。
Credential type: Insights と入力するか、リストから選択します。
- Username: 有効な Red Hat Insights 認証情報を入力します。
Password: 有効な Red Hat Insights 認証情報を入力します。
Insights for Ansible Automation Platform の認証情報は、ユーザーの Red Hat カスタマーポータル アカウントのユーザー名とパスワードです。
- をクリックします。
28.2. Red Hat Insights プロジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Insights で使用する新しいプロジェクトを作成するには、次の手順を使用します。
手順
- ナビゲーションパネルから、 → を選択します。
- をクリックします。
次のフィールドに適切な詳細を入力します。次のフィールドには、特定の Red Hat Insights 関連エントリーが必要であることに注意してください。
- Name: Red Hat Insights プロジェクトの名前を入力します。
- オプション: Description: プロジェクトの説明を入力します。
-
Organization: 認証情報が関連付けられている組織の名前を入力するか、検索アイコン
をクリックし、Select organization ウィンドウから選択します。
- オプション: Execution environment: このプロジェクトを使用するジョブで使用する実行環境。
- Source control type: Red Hat Insights を選択します。
- オプション: Content signature validation credential: コンテンツ署名を有効にして、プロジェクトの同期時にコンテンツがセキュアな状態に保たれていることを検証します。
-
Insights credential: 以前に作成した Red Hat Insights 認証情報が事前に入力されています。そうでない場合は、認証情報を入力するか、検索
アイコンをクリックし、Select Insights Credential ウィンドウから選択します。
Options フィールドからこのプロジェクトの更新オプションを選択し、必要に応じて追加の値を入力します。各オプションの詳細は、それぞれの横にあるツールヒント
アイコンをクリックします。
- をクリックします。
すべての SCM とプロジェクトの同期は、新しいプロジェクトを初めて保存するときに自動的に行われます。最新の Insights の内容で更新するには、プロジェクトのアクションの下にある更新
アイコンをクリックして 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 修復を実行するジョブテンプレートを作成します。
手順
- ナビゲーションメニューから、 → を選択します。
- Templates リストビューで、 をクリックし、リストから選択します。
次のフィールドに適切な詳細を入力します。次のフィールドには、特定の Red Hat Insights 関連エントリーが必要であることに注意してください。
- Name: メンテナンス計画の名前を入力します。
- オプション: Description: ジョブテンプレートの説明を入力します。
- Job Type: まだ入力されていない場合は、ジョブタイプリストから Run を選択します。
- Inventory: 以前に作成した Red Hat Insights インベントリーを選択します。
- Project: 以前に作成した Red Hat Insights プロジェクトを選択します。
- オプション: Execution Environment: 実行に使用されるコンテナーイメージ。
- Playbook: 実行するメンテナンスプランに関連付けられた Playbook を Playbook リストから選択します。
-
オプション: Credentials: このプロジェクトに使用する認証情報を入力するか、検索 (
) アイコンをクリックし、ポップアップウィンドウから選択します。認証情報は Red Hat Insights 認証情報である必要はありません。
Verbosity: デフォルト設定をそのまま使用するか、リストから目的の詳細度を選択します。
- をクリックします。
-
起動
アイコンをクリックしてジョブテンプレートを起動します。
完了すると、ジョブの結果が 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_nodeとexecution_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 の copy、template、および fetch モジュールを使用して実行できます。 - スーパーユーザー
- 組織に関連付けられているかどうかに関係なく、システム内のオブジェクトを編集するパーミッションを持つサーバーの管理者。スーパーユーザーは組織や他のスーパーユーザーを作成できます。
- Survey
- ジョブテンプレート上で設定可能な、ジョブ起動時にジョブテンプレートによって尋ねられる質問のことを指します。
- ターゲット認証情報
- 外部認証情報にリンクされている入力フィールドが含まれる外部以外の認証情報
- チーム
- ユーザー、プロジェクト、認証情報、パーミッションが関連付けられた組織の下位部門です。チームは、ロールベースのアクセス制御スキームを実装し、組織全体で責任を委譲する手段を提供します。
- ユーザー
- パーミッションおよび認証情報が関連付けられたオペレーターのことを指します。
- Webhook
- Webhook により、アプリケーション間の通信と情報共有が可能になります。これらは、SCM にプッシュされたコミットに応答し、ジョブテンプレートまたはワークフローテンプレートを起動するために使用されます。
- ワークフロージョブテンプレート
- 単一ユニットとして実行するためにリンクされたジョブテンプレート、プロジェクトの同期、およびインベントリーの同期の任意の組み合わせで構成されるセットのことを指します。
- YAML
- 設定ファイルの作成によく使用される人間が判読可能な言語。Ansible と Automation Controller は、YAML を使用して、Playbook 設定言語と変数ファイルを定義します。YAML には最小限の構文があり、非常に簡潔で、一見して判断しやすくなっています。これは設定ファイルや人間にとって優れたデータ形式であるだけでなく、機械でも読み取り可能です。YAML は動的言語コミュニティーで人気があり、この形式には多くの言語でシリアル化に使用できるライブラリーが含まれています。たとえば、Python、Perl、または Ruby が含まれます。