IBM Cloud Docs
使用代理政策

使用代理政策

代理程序 (分配) 策略告知 Schematics 要用于在特定网络区域中运行工作空间和操作作业的代理程序。 每个代理程序都有一个或多个与其关联的策略,用于标识在代理程序上运行的工作空间和操作作业。 例如,代理程序可能存在于以下隔离区域中,并且可以在这些隔离区域中执行作业:

  • 云区域 (region-1,region-2,region-3)
  • 应用层,数据层,管理层的 VPC 区域
  • 云供应商或内部部署
  • 组织中的部门区域,例如 HRFinanceManufacturing

只能将单个策略与工作空间或操作相关联。 如果存在以相同工作空间或操作为目标的现有策略,那么策略创建将失败。

您可以使用 Schematics 策略命令 CLI 来创建,更新和删除 agent assignment policy

代理程序的 agent-assignment-policy 是使用工作空间或操作的以下属性定义的。 选择属性可以是下列标志的组合:

  • tags-选择具有匹配用户标记的工作空间或操作。
  • locations-选择匹配的 Schematics 位置中的工作空间或操作。
  • resource-groups-选择具有匹配资源组的工作空间或操作。

如果 agent-1 指定 tags=[dev] 和 resource-group=[rg-2]的选择策略,那么 Schematics 会自动路由工作空间作业,包括 Git 下载,Terraform 计划,应用,销毁与 tagsresource-group 条件匹配的所有工作空间的作业,以在 agent-1 上执行。

使用 UI 创建代理程序策略

  1. 登录 IBM Cloud控制台
  2. 点击 "菜单图标,然后点击 "汉堡包图标"平台自动化"Schematics">"扩展">"政策标签>"制定政策
    • 创建策略 部分中:
      • 输入唯一的保单名称
      • 输入描述
      • 选择 策略类型 作为代理程序分配策略。
      • 从下拉选项中选择 位置资源组
      • 输入代理程序的 标记
      • 单击下一步
    • 策略参数 部分中:
      • 从下拉列表中选择您的代理商
      • 定义策略属性 部分中。
        • 选择 对象类型 作为 workspaceaction
        • 选择资源组。
        • 选择 对象位置
        • 输入 对象标记
        • 单击下一步
      • 策略预览 部分中:
        • 选择需要作为策略一部分的工作空间。
  3. 单击创建

使用 UI 列出所有策略

  1. 登录 IBM Cloud控制台
  2. 单击菜单图标汉堡包图标>平台自动化>Schematics>扩展>策略选项卡。

使用 UI 显示策略

  1. 登录 IBM Cloud控制台
  2. 单击菜单图标汉堡包图标>平台自动化>Schematics>扩展>策略选项卡。
  3. 单击列表中的策略以查看策略详细信息。
  4. 在“已分配的代理程序”窗口中,单击 代理程序详细信息 以查看代理程序配置。

使用 UI 更新代理程序策略

您可以通过使用 AGENT_ID 引用代理程序来更新代理程序策略以更改选择标记或描述。

  1. 登录 IBM Cloud控制台
  2. 单击菜单图标汉堡包图标>平台自动化>Schematics>扩展>策略选项卡。
  3. 单击列表中的策略以查看策略详细信息。
  4. 单击 操作 > 编辑策略 以更新参数。

使用 UI 删除策略

  1. 登录 IBM Cloud控制台
  2. 单击菜单图标汉堡包图标>平台自动化>Schematics>扩展>策略选项卡。
  3. 单击列表中的策略以查看策略详细信息。
  4. 单击 操作 > 删除策略 以删除参数。

使用 CLI 创建代理程序策略

使用 CLI 创建代理程序策略。 有关代理程序策略选项的完整列表,请参阅 策略命令 文档。

开始之前:

  • Schematics 插件 版本安装或更新为 1.12.12 或更高版本。
  • 选择定义了代理程序的 IBM Cloud 区域。 通过运行 ibmcloud target -r <region> 命令来设置 CLI 区域。
  • 创建代理程序策略文件

定义 JSON 策略文件

此处提供了样本 JSON 策略文件。 将 <...> 占位符替换为实际值。

  • 要在其上运行的代理程序作业是使用 target 块定义的。
  • 用于选择要在代理程序上运行的工作空间或操作的属性由 parameter 块定义。

可以在任何编辑器或 IDE 中编辑策略 JSON 文件。 它们必须是有效的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 创建代理程序策略

执行 步骤 以检索 IAM 访问令牌并使用 API 向 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 ---

后续步骤

您可以查看 代理程序常见问题,以了解与代理程序相关的任何常见问题。

不再需要代理程序时,可以遵循 删除代理程序 中的步骤将其除去。