导出和查看预览结果

本页介绍了如何导出和查看预览版的结果。预览描述了用于实现特定 Terraform 配置的操作。在创建新部署或更新部署之前,您可以预览部署,以验证计划更改的内容。

如果您尚未创建要查看的预览,请参阅预览部署

本页假定您熟悉 Terraform。如需了解详情,请参阅 Terraform 和 Infrastructure Manager

准备工作

  1. 启用基础设施管理器
  2. 确保您拥有导出预览版所需的 IAM 权限:roles/config.admin
  3. 创建预览版部署

导出预览结果

如需查看预览结果,请先导出结果。然后,使用合适的工具查看导出的结果。

如需导出预览版,其状态必须为 SUCCEEDEDSTALE。您可以使用 describe 或 list 命令查看预览版的当前状态。

使用以下命令导出预览结果并将其保存到本地:

gcloud infra-manager previews export projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID

您需要进行如下替换:

  • PROJECT_ID:运行 Infrastructure Manager 的项目 ID。
  • LOCATION:Infra Manager 的运行位置。如需查看有效位置的列表,请参阅 Infrastructure Manager 位置
  • PREVIEW_ID:您指定的预览标识符。如需详细了解预览版标识符的限制,请参阅预览版名称

查看预览结果

结果以两种格式导出:二进制方案文件JSON 表示法。您可以使用任一格式查看结果。如需查看结果,请使用适合相应格式的工具。

查看二进制方案文件

如需查看二进制计划文件,请执行以下操作:

  1. 验证您是否已安装 Terraform CLI

  2. 验证用于创建预览的 Terraform 配置是否位于本地,并已使用 terraform init 进行初始化。

  3. 使用 terraform show 打印建议的方案。

查看 JSON 表示法

如需查看 JSON 表示法,您可以使用 IDE 或 jq 等工具。

如需强制执行政策限制,您可以使用 JSON 表示法和 Terraform vet 等工具。

查看资源变更和漂移详细信息

您可以使用预览功能查看部署的资源漂移。查看部署的资源漂移有助于验证配置更改是否是预期行为,并总结部署在通过特定预览版更新后将如何变化

创建预览时,您可以使用 Infra Manager API 在更新部署时查看资源的变化。

查看资源漂移

如需查看资源漂移,请调用 ListResourceDrifts

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts"

您需要进行如下替换:

  • PROJECT_ID:预览版部署所在的 Google Cloud 项目的标识符。
  • LOCATION:预览版部署的区域或可用区。
  • PREVIEW_ID:预览版部署的标识符。

结果将如下所示:

{
    "resourceDrifts": [
        {
            "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts/RESOURCE_DRIFT_ID",
            "terraformInfo": {
                "address": "google_resource_type.resource_name",
                "type": "google_resource_type",
                "resourceName": "resource_name",
                "provider": "registry.terraform.io/hashicorp/google"
            },
            "propertyDrifts": [
                {
                    "path": "$.json_path_to_property_field",
                    "before": "config-defined-state",
                    "after": "remote-state"
                }
            ]
        }
    ]
}

查看漂移的详细信息

如需查看漂移的详细信息,请调用 GetResourceDrift

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts/RESOURCE_DRIFT_ID"

您需要进行如下替换:

  • PROJECT_ID:预览版部署所在的 Google Cloud 项目的标识符。
  • LOCATION:预览版部署的区域或可用区。
  • PREVIEW_ID:预览版部署的标识符。
  • RESOURCE_DRIFT_ID:漂移的标识符。

结果将如下所示:

{
    "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceDrifts/RESOURCE_DRIFT_ID",
    "terraformInfo": {
        "address": "google_resource_type.resource_name",
        "type": "google_resource_type",
        "resourceName": "resource_name",
        "provider": "registry.terraform.io/hashicorp/google"
    },
    "propertyDrifts": [
        {
            "path": "$.json_path_to_property_field",
            "before": "config-defined-state",
            "after": "remote-state"
        }
    ]
}

预览资源更改

您可以使用预览来检查从预览更新部署后资源会发生哪些变化。

查看资源更改

如需查看预览部署将如何影响资源,请调用 ListResourceChanges

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges"

您需要进行如下替换:

  • PROJECT_ID:预览版部署所在的 Google Cloud 项目的标识符。
  • LOCATION:预览版部署的区域或可用区。
  • PREVIEW_ID:预览版部署的标识符。
  • RESOURCE_CHANGE_ID:资源更改的标识符。

结果将如下所示:

{
    "resourceChanges": [
        {
            "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges/RESOURCE_CHANGE_ID",
            "terraformInfo": {
                "address": "google_resource_type.resource_name",
                "type": "google_resource_type",
                "resourceName": "resource_name",
                "provider": "registry.terraform.io/hashicorp/google",
                "actions": [
                    "update"
                ]
            },
            "intent": "UPDATE",
            "propertyChanges": [
                {
                    "path": "$.json_path_to_property_field1",
                    "before": "true"
                },
                {
                    "path": "$.json_path_to_property_field2",
                    "before": "old value",
                    "after": "new value"
                }
            ]
        }
    ]
}

查看资源变更的详细信息

如需查看资源变更的详细信息,请调用 GetResourceChange

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
"https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges/RESOURCE_CHANGE_ID"

您需要进行如下替换:

  • PROJECT_ID:预览版部署所在的 Google Cloud 项目的标识符。
  • LOCATION:预览版部署的区域或可用区。
  • PREVIEW_ID:预览版部署的标识符。
  • RESOURCE_CHANGE_ID:资源更改的标识符。

结果将如下所示:

{
    "name": "projects/PROJECT_ID/locations/LOCATION/previews/PREVIEW_ID/resourceChanges/RESOURCE_CHANGE_ID",
    "terraformInfo": {
        "address": "google_resource_type.resource_name",
        "type": "google_resource_type",
        "resourceName": "resource_name",
        "provider": "registry.terraform.io/hashicorp/google",
        "actions": [
            "update"
        ]
    },
    "intent": "UPDATE",
    "propertyChanges": [
        {
            "path": "$.json_path_to_property_field1",
            "before": "true"
        },
        {
            "path": "$.json_path_to_property_field2",
            "before": "old value",
            "after": "new value"
        }
    ]
}

后续步骤