在创建提供程序后写入状态文件时,我发现一些不一致之处。
这是我的资源:
package provider
import (
"context"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceTest() *schema.Resource {
return &schema.Resource{
CreateContext: resourceTestCreate,
ReadContext: resourceTestRead,
UpdateContext: resourceTestUpdate,
DeleteContext: resourceTestDelete,
Schema: map[string]*schema.Schema{
"name": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"kids": &schema.Schema{
Type: schema.TypeSet,
Required: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
}
}
func resourceTestCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
d.SetId("id")
d.Set("name", "AnakinCreate")
d.Set("kids", []string{"LukeCreate"})
return nil
}
func resourceTestRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
d.Set("name", "AnakinRead")
d.Set("kids", []string{"LukeRead"})
return nil
}
func resourceTestUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
d.Set("name", "AnakinUpdate")
d.Set("kids", []string{"LukeUpdate"})
return nil
}
func resourceTestDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
d.SetId("")
return nil
}
这是我的定义:
resource "hue_test" "test" {
name = "Anakin"
kids = [
"Luke"
]
}
当我第一次运行 apply 时,我得到了这个状态"name": "AnakinCreate"
(如预期的那样),而"kids": ["Luke"]
不是LukeCreate
.
刷新(读取)后,我得到AnakinRead
了LukeRead
预期的结果。
当我再次申请时,它会按预期检测到漂移。
申请后,该州"name": "AnakinUpdate"
(如预期的那样)但是 ``"kids": ["Luke"] instead of
LukeUpdate`。
这个例子是极简主义的,我的结构远比这复杂得多——但如果我能解决这种不一致,我可能会解决我原来的问题。
谢谢你。