我正在使用 Go 构建 Terraform 插件 / 提供程序。我的 schema 如下(链接):
Importer: &schema.ResourceImporter{
State: resourceKubernetesClusterNodePoolImport,
}
这是函数(链接):
func resourceKubernetesClusterNodePoolImport(d *schema.ResourceData, m interface{}) ([]*schema.ResourceData, error) {
apiClient := m.(*civogo.Client)
clusterID, nodePoolID, err := utils.ResourceCommonParseID(d.Id())
if err != nil {
return nil, err
}
log.Printf("[INFO] retriving the node pool %s", nodePoolID)
resp, err := apiClient.GetKubernetesCluster(clusterID)
if err != nil {
if resp != nil {
return nil, err
}
}
d.Set("cluster_id", resp.ID)
for _, v := range resp.Pools {
if v.ID == nodePoolID {
d.Set("num_target_nodes", v.Count)
d.Set("target_nodes_size", v.Size)
}
}
return []*schema.ResourceData{d}, nil
}
当我在上面函数的顶部添加了这些调试行之后,结果(reg
和ok
)为空并且是false
:
reg, ok := d.GetOk("region")
log.Printf("resourceKubernetesClusterNodePoolImport reg %+v\n", reg)
log.Println("resourceKubernetesClusterNodePoolImport ok", ok)
log.Println("resourceKubernetesClusterNodePoolImport d.Get()", d.Get("region"))
if !ok {
return nil, fmt.Errorf("[ERR] Please provide a region in your import configuration")
}
跟踪信息:
$ echo $TF_LOG
INFO
$ tf import civo_kubernetes_node_pool.my_pool 1b272dc1-836c-4ea7-8f20-4569f20ddbdd:d0c22622-54b3-41c2-9eae-24591737d5ad
2021-08-12T11:22:30.552+0800 [INFO] Terraform version: 1.0.3
2021-08-12T11:22:30.552+0800 [INFO] Go runtime version: go1.16.4
2021-08-12T11:22:30.552+0800 [INFO] CLI args: []string{"/usr/local/bin/terraform", "import", "civo_kubernetes_node_pool.my_pool", "1b272dc1-836c-4ea7-8f20-4569f20ddbdd:d0c22622-54b3-41c2-9eae-24591737d5ad"}
2021-08-12T11:22:30.552+0800 [INFO] Loading CLI configuration from /Users/zulh/.terraformrc
2021-08-12T11:22:30.553+0800 [INFO] CLI command args: []string{"import", "civo_kubernetes_node_pool.my_pool", "1b272dc1-836c-4ea7-8f20-4569f20ddbdd:d0c22622-54b3-41c2-9eae-24591737d5ad"}
2021-08-12T11:22:30.629+0800 [INFO] Failed to read plugin lock file .terraform/plugins/darwin_amd64/lock.json: open .terraform/plugins/darwin_amd64/lock.json: no such file or directory
2021-08-12T11:22:30.631+0800 [INFO] provider: configuring client automatic mTLS
2021-08-12T11:22:31.284+0800 [INFO] provider.terraform-provider-civo_v99.0.0: configuring server automatic mTLS: timestamp=2021-08-12T11:22:31.283+0800
2021-08-12T11:22:31.358+0800 [INFO] provider: configuring client automatic mTLS
2021-08-12T11:22:31.404+0800 [INFO] provider.terraform-provider-civo_v99.0.0: configuring server automatic mTLS: timestamp=2021-08-12T11:22:31.404+0800
2021-08-12T11:22:31.478+0800 [WARN] ValidateProviderConfig from "provider[\"registry.terraform.io/civo/civo\"]" changed the config value, but that value is unused
civo_kubernetes_node_pool.my_pool: Importing from ID "1b272dc1-836c-4ea7-8f20-4569f20ddbdd:d0c22622-54b3-41c2-9eae-24591737d5ad"...
2021-08-12T11:22:31.479+0800 [INFO] provider.terraform-provider-civo_v99.0.0: 2021/08/12 11:22:31 resourceKubernetesClusterNodePoolImport reg: timestamp=2021-08-12T11:22:31.479+0800 <-- this line
2021-08-12T11:22:31.479+0800 [INFO] provider.terraform-provider-civo_v99.0.0: 2021/08/12 11:22:31 resourceKubernetesClusterNodePoolImport ok false: timestamp=2021-08-12T11:22:31.479+0800 <-- this line
2021-08-12T11:22:31.479+0800 [INFO] provider.terraform-provider-civo_v99.0.0: 2021/08/12 11:22:31 resourceKubernetesClusterNodePoolImport d.Get(): timestamp=2021-08-12T11:22:31.479+0800 <-- this line
╷
│ Error: [ERR] Please provide a region in your import configuration
│
│
╵
问题在于,我已经在运行上面的tf import
命令之前将region
添加到了我的 Terraform 配置文件_main.tf_中(并保存了它)。以下是我的 main.tf 文件:
resource "civo_kubernetes_cluster" "my_cluster" {
name = "my-cluster"
}
resource "civo_kubernetes_node_pool" "my_pool" {
region = "LON1" <-- this line
}
为什么我的 Terraform 插件 / 提供程序看到区域为空?
从我的理解,Terraform 会在运行导入逻辑之前先读取配置文件。我错了吗?我是否漏掉了什么东西?
为了完整性,我正在使用 Terraform v1.0.3,这是我的_provider.tf_文件...
terraform {
required_providers {
civo = {
source = "civo/civo"
version = "99.0.0"
}
}
}
provider "civo" {
token = “my-api-key-here”
}
... 其中99.0.0
是我仅用于测试构建的版本。当我发布此问题时,该提供程序的最新 / 生产版本为0.10.9。