本页介绍了如何导出和查看预览版的结果。预览描述了用于实现特定 Terraform 配置的操作。在创建新部署或更新部署之前,您可以预览部署,以验证计划更改的内容。
如果您尚未创建要查看的预览,请参阅预览部署。
本页假定您熟悉 Terraform。如需了解详情,请参阅 Terraform 和 Infrastructure Manager。
准备工作
导出预览结果
如需查看预览结果,请先导出结果。然后,使用合适的工具查看导出的结果。
如需导出预览版,其状态必须为 SUCCEEDED
或 STALE
。您可以使用 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 表示法。您可以使用任一格式查看结果。如需查看结果,请使用适合相应格式的工具。
查看二进制方案文件
如需查看二进制计划文件,请执行以下操作:
验证您是否已安装 Terraform CLI。
验证用于创建预览的 Terraform 配置是否位于本地,并已使用
terraform init
进行初始化。使用
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"
}
]
}