エージェント・ポリシー

エージェント (割り当て) ポリシーは、特定のネットワーク・ゾーンでワークスペースおよびアクション・ジョブを実行するために使用するエージェントを Schematics に指示します。 各エージェントには、そのエージェントで実行されるワークスペース・ジョブとアクション・ジョブを識別するための 1 つ以上のポリシーが関連付けられています。 例えば、エージェントが存在する可能性があり、以下の分離ゾーンでジョブを実行できます。

  • クラウド領域 (region-1、 region-2、 region-3)
  • アプリケーション層、データ層、管理層の VPC ゾーン
  • クラウド・ベンダーまたはオンプレミス
  • 組織内の部門別ゾーン( HRFinance など) Manufacturing

ワークスペースまたはアクションに関連付けることができるポリシーは 1 つだけです。 同じワークスペースまたはアクションをターゲットとする既存のポリシーが存在する場合、ポリシーの作成は失敗します。

Schematics ポリシー・コマンド CLI を使用して、 agent assignment policy を作成、更新、および削除できます。

エージェントの agent-assignment-policy は、ワークスペースまたはアクションの以下の属性を使用して定義されます。 選択属性は、以下のフラグの組み合わせにすることができます。

  • tags-一致するユーザー・タグを持つワークスペースまたはアクションが選択されます。
  • locations-一致する Schematics ロケーションにあるワークスペースまたはアクションが選択されます。
  • resource-groups-一致するリソース・グループを持つワークスペースまたはアクションが選択されます。

agent-1 の選択ポリシーで、tags=[dev] およびresource-group=[rg-2]が指定されている場合、 Schematics は、 tags および resource-group の条件に一致するすべてのワークスペースについて、 Git のダウンロード、Terraformのplan、apply、destroyジョブを含むワークスペースジョブを、 agent-1 上で実行されるよう自動的にルーティングします。

UI を使用したエージェントポリシーの作成

  1. IBM Cloudコンソールにログインします。
  2. メニューアイコンハンバーガーアイコン>Platform Automation>Schematics>Extensions>Policies タブ >Create policyをクリックします。
    • 「ポリシーの作成」 セクションで、以下のようにします。
      • 一意のポリシー名を入力してください。
      • 説明を入力してください。
      • エージェント割り当てポリシーとして 「ポリシー・タイプ」 を選択します。
      • 「ロケーション」 を選択し、ドロップダウン・オプションから 「リソース・グループ」 を選択します。
      • エージェントの 「タグ」 を入力します。
      • 次へ をクリックします。
    • 「ポリシー・パラメーター」 セクションで、以下を行います。
      • ドロップダウンリストからエージェントを選択してください。
      • 「ポリシー属性の定義」 セクションで、以下のようにします。
        • 「オブジェクト・タイプ」 として workspace または action を選択します。
        • **「リソース・グループ」**を選択します。
        • 「オブジェクトの場所」 を選択します。
        • 「オブジェクト・タグ」 と入力します。
        • 次へ をクリックします。
      • 「ポリシーのプレビュー」 セクションで、以下のようにします。
        • ポリシーの一部にする必要があるワークスペースを選択します。
  3. 「作成」 をクリックします。

UI を使用したすべてのポリシーのリスト

  1. IBM Cloudコンソールにログインします。
  2. メニューアイコンハンバーガーアイコン>Platform Automation>Schematics>Extensions>Policies タブをクリックします。

UI を使用したポリシーの表示

  1. IBM Cloudコンソールにログインします。
  2. メニューアイコンハンバーガーアイコン>Platform Automation>Schematics>Extensions>Policies タブをクリックします。
  3. リストからポリシーをクリックして、ポリシーの詳細を表示します。
  4. 「割り当て済みエージェント」 ウィンドウで、 「エージェントの詳細」 をクリックしてエージェント構成を表示します。

UI を使用したエージェント・ポリシーの更新

エージェントを AGENT_ID で参照することにより、エージェント・ポリシーを更新して選択タグまたは説明を変更することができます。

  1. IBM Cloudコンソールにログインします。
  2. メニューアイコンハンバーガーアイコン>Platform Automation>Schematics>Extensions>Policies タブをクリックします。
  3. リストからポリシーをクリックして、ポリシーの詳細を表示します。
  4. 「アクション」 > 「ポリシーの編集」 をクリックして、パラメーターを更新します。

UI を使用してポリシーを削除する

  1. IBM Cloudコンソールにログインします。
  2. メニューアイコンハンバーガーアイコン>Platform Automation>Schematics>Extensions>Policies タブをクリックします。
  3. リストからポリシーをクリックして、ポリシーの詳細を表示します。
  4. パラメーターを削除するには、 「アクション」 > 「ポリシーの削除」 をクリックします。

CLI を使用したエージェントポリシーの作成

CLI を使用してエージェント・ポリシーを作成します。 エージェント・ポリシー・オプションの完全なリストについては、 ポリシー・コマンド の資料を参照してください。

始める前に

  • Schematics プラグイン のバージョンを 1.12.12 以上にインストールまたは更新します。
  • エージェントが定義されている IBM Cloud 地域を選択します。 ibmcloud target -r <region> コマンドを実行して、CLI リージョンを設定します。
  • エージェント・ポリシー・ファイルの作成

JSONポリシーファイルの定義

サンプルの JSON ポリシー・ファイルを以下に示します。 <...> プレースホルダーを実際の値に置き換えます。

  • 実行されるエージェント・ジョブは、 target ブロックを使用して定義されます。
  • エージェントで実行するワークスペースまたはアクションを選択するための属性は、 parameter ブロックによって定義されます。

ポリシー JSON ファイルは、任意のエディターまたは IDE で編集できます。 それらは有効なJSONでなければなりません。

ポリシー JSON ファイルの構文:

  {
      "target": {
      "selector_kind": "ids",
      "selector_ids": [
        "<agent id>"
      ]
    },
    "parameter": {
      "agent_assignment_policy_parameter": {
        "selector_kind": "scoped",
        "selector_scope": [{
          "kind": "workspace",
          "tags": [
            "<user_tag>"
          ],
          "resource_groups": [
            "<resource_group>"
          ],
          "locations": [
            "<region>"
          ]
        }]
      }
    }
  }

  {
      "target": {
      "selector_kind": "ids",
      "selector_ids": [
        "agent-prod-live.deA.e055"
      ]
    },
    "parameter": {
      "agent_assignment_policy_parameter": {
        "selector_kind": "scoped",
        "selector_scope": [{
          "kind": "workspace",
          "tags": [
            "live-prod"
          ],
          "resource_groups": [
            "Default"
          ],
          "locations": [
            "eu-de"
          ]
        }]
      }
    }
  }

エージェント・ポリシーの作成

ibmcloud schematics policy create --name agent-policy-testing-cli-jan-10 --kind agent_assignment_policy --location eu-de --resource-group Default --target-file policy.json

出力

Creating policy...
                    
ID               agent-policy-testing-cli-jan-10.deP.c737   
Name             agent-policy-testing-cli-jan-10-27   
Description         
Kind             agent_assignment_policy   
Location         eu-de   
Resource Group   aac37f57b20142dba1a435c70aeb12df   
Target              
Tags             [TAGS]   
                  - workspace-policy:prod

CLI を使用してすべてのポリシーを一覧表示する

policy list コマンドを使用して、アカウントで定義されているポリシーのリストを表示できます。

ibmcloud schematics policy list

出力

Retrieving policies...
OK
Name                                          ID                                                     Description                                   Kind   Tags   
agent-policy-testing-cli-jan-10               agent-policy-testing-cli-jan-10.deP.c737                                                                    workspace-policy:prod   
policy-023e7204-c33d-49b8-a9f3-695ff085290d   policy-023e7204-c33d-49b8-a9f3-695ff085290d.gbP.8b3c   Created agent-assignment-policy for the ...             
policy-067dfb28-928b-4e90-ad2b-9d26343a1ceb   policy-067dfb28-928b-4e90-ad2b-9d26343a1ceb.deP.796d   Created agent-assignment-policy for
                                                                                       
Showing 1-3 of 3 items

CLI を使用したポリシーの表示

policy get コマンドを使用して、エージェント・ポリシーの構成を表示できます。

ibmcloud schematics policy get agent-policy-testing-cli-jan-10.deP.c737

出力

Retrieving policy...
                    
ID               agent-policy-testing-cli-jan-10.deP.c737   
Name             agent-policy-testing-cli-jan-10  
Description         
Kind             agent_assignment_policy   
Location         eu-de   
Resource Group   aac37f57b20142dba1a435c70aeb12df   
Target              
Tags             [TAGS]   
                  - workspace-policy:prod

CLI を使用したエージェント・ポリシーの更新

AGENT_ID 入力引数を使用してエージェントを参照することにより、エージェント・ポリシーを更新して選択タグまたは説明を変更することができます。

ibmcloud schematics policy update --id agent-policy-testing-cli-jan-10.deP.c737 --kind agent_assignment_policy --resource-group Default --tags workspace-policy:prod --description testing-policy-cli --tags jobtag
Updating policy...
                    
ID               agent-policy-testing-cli-jan-10.deP.c737   
Name             agent-policy-testing-cli-jan-10   
Description      testing-policy-cli   
Kind             agent_assignment_policy   
Location         eu-de   
Resource Group   Default   
Target              
Tags             [TAGS]   
                  - workspace-policy:prod	   
                  - jobtag

更新後、ポリシーを取得して変更を確認します。

ibmcloud schematics policy get --id agent-policy-testing-cli-jan-10.deP.c737

出力

Retrieving policy...
                    
ID               agent-policy-testing-cli-jan-10.deP.c737   
Name             agent-policy-testing-cli-jan-10   
Description      testing-policy-cli   
Kind             agent_assignment_policy   
Location         eu-de   
Resource Group   Default   
Target              
Tags             [TAGS]   
                  - workspace-policy:prod	   
                  - jobtag	   
                    

CLI を使用したポリシーの削除

AGENT_ID 入力引数を渡して、 ポリシーを削除 できます。

ibmcloud schematics policy delete --id agent-policy-testing-cli-jan-10.deP.c737
Do you really want to delete the policy? [y/N]> y
Initiating policy delete...

API を使用したエージェント・ポリシーの作成

手順に従って、API を使用して IAM アクセス・トークンを取得し、IBM Cloud Schematics で認証します。 エージェント・ポリシー API について詳しくは、 エージェント・ポリシー API のジョブ状況を参照してください。

API を使用してポリシーを作成する例

POST /v2/settings/policies HTTP/1.1
Host: schematics.cloud.ibm.com
Content-Type: application/json
Authorization: Bearer <auth_token>
{
    "name": "policy-1",
    "description": "Policy for job execution of secured workspaces on agent1",
    "resource_group": "Default",
    "tags": [
      "policy:secured-job"
    ],
    "location": "us-south",
    "kind": "agent_assignment_policy",
    "target": {
      "selector_kind": "ids",
      "selector_ids": [
        "agent5.8442"
      ]
    },
    "parameter": {
      "agent_assignment_policy_parameter": {
        "selector_kind": "scoped",
        "selector_scope": [
          {
            "kind": "workspace",
            "tags": [
              "env:dev",
              "k8s"
            ],
            "resource_groups": [
              "test"
            ],
            "locations": [
              "us-south"
            ]
          }
        ]
      }
    }
  }

API を使用してポリシーを取得する例

GET /v2/settings/policies/<your policy_id> HTTP/1.1
Host: schematics.cloud.ibm.com
Content-Type: application/json
X-ENABLE-POLICIES: true
Authorization: Bearer <auth_token>

API を使用してポリシーを更新する例

PATCH /v2/settings/policies/<your policy_id> HTTP/1.1
Host: schematics.cloud.ibm.com
Content-Type: application/json
X-ENABLE-POLICIES: true
Authorization: Bearer <auth_token>
{
    "name": "policy-1",
    "description": "updated Policy for job execution of secured workspaces on agent1",
    "resource_group": "Default",
    "tags": [
      "policy:secured-job"
    ],
    "location": "us-south",
    "kind": "agent_assignment_policy",
    "target": {
      "selector_kind": "ids",
      "selector_ids": [
        "agent5.13a6"
      ]
    },
    "parameter": {
      "agent_assignment_policy_parameter": {
        "selector_kind": "scoped",
        "selector_scope": [
          {
            "kind": "action",
            "tags": [
              "env:dev",
              "k8s"
            ],
            "resource_groups": [
              "dummy_resource_group"
            ],
            "locations": [
              "us-south"
            ]
          }
        ]
      }
    }
  }

API を使用してポリシーを検索する例

POST /v2/settings/policies/search HTTP/1.1
Host: schematics.cloud.ibm.com
Content-Type: application/json
Authorization: Bearer <auth_token>
{
   "parameter": {
            "kind": "workspace",
            "tags": [
              "env:dev",
              "k8s"
            ],
            "resource_groups": [
              "test"
            ],
            "locations": [
              "us-south"
            ]
          },
    "target": "action"
  }

これで、エージェントを使用して Schematics Terraform ジョブまたは Ansible ジョブを実行できます。 エージェントは、定義された選択ポリシー・パラメーターに一致するワークスペースまたはアクションのすべてのジョブを実行します。

  • リソース・グループ
  • ロケーション
  • タグ

ここで、ワークスペースまたはアクションの作成時にタグを設定する必要があることに注意してください。 Schematics のUIを通じて行われたタグの変更は、ポリシーの評価時には検出も考慮もされません。

実行後、ワークスペースまたはアクションのジョブ・ログには、ジョブが実行されたエージェントを示すヘッダーが含まれます。

2023/04/08 15:22:07 -----  New Workspace Action  -----
2023/04/08 15:22:07 Request: activitId=e3fcfdfdb13b07a1c60176e4b95c41ba, account=, owner=steve_strutt@uk.ibm.com, requestID=0a8a3428-b461-4dd0-8104-e859d68d35f6, OrchestratorID=orchestrator-5c8585dc74-6z9s5, agentID=agent-test-da.deA.e055, agentName=agent-test-da, jobRunnerID=jobrunner-5d99b5cfb7-p5xcz
2023/04/08 15:22:07 Related Workspace: name=myworkspace, agentID=agent-test-da.deA.e055 sourcerelease=(not specified), sourceurl=https://github.com/stevestrutt/multitier-vpc-bastion-host, branch=(not specified), folder=.
2023/04/08 15:22:07  --- Ready to execute the command on Agent agent-test-da.deA.e055 ---

次のステップ

エージェントに関連する一般的な質問については、 エージェントの FAQ を確認してください。

エージェントが不要になったら、 エージェントの削除 の手順に従って削除することができます。