我正在为terraform开发自定义提供程序,并且遇到类型schema.TypeSet
的资源配置参数时遇到了麻烦。当我仅更改集合terraform plan
中的参数时,现在与已部署版本的差异。当我添加另一个设置条目时,还会显示现有设置条目中的更改。
我的架构定义如下:
"variable": &schema.Schema{
Type: schema.TypeSet,
Required: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"type": {
Type: schema.TypeString,
},
"name": {
Type: schema.TypeString,
},
...
},
},
Set: func(v interface{}) int {
m := v.(map[string]interface{})
return hashcode.String(m["name"].(string))
},
}
我的读取功能(据我所知,该功能将已部署的配置作为diff的输入返回)执行以下操作:
func resourceAspectTypeRead(d *schema.ResourceData,
meta interface{}) error {
...
result := restcall()
var variablesData []map[string]interface{}
for _, variable := range result.Payload.Variables {
variableData := map[string]interface{}{
"type": *variable.Type,
"name": *variable.Name,
...
}
variablesData = append(variablesData, variableData)
}
d.Set("variable", &variablesData)
return nil
}
我的main.tf
大致具有以下内容:
resource "platform_type" "my-type" {
...
variable {
name ="temperature"
# Changed from "STRING" to "DOUBLE"
type = "DOUBLE"
}
}
运行terraform plan
时,我得到以下输出:
$ terraform plan -out=terraform.tfplan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
platform_type.my-type: Refreshing state... (ID: XYZ)
------------------------------------------------------------------------
No changes. Infrastructure is up-to-date.
This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, no
actions need to be performed.
我想我在读取函数中弄乱了一些东西,但我不知道有什么不同。t