0

在创建提供程序后写入状态文件时,我发现一些不一致之处。

这是我的资源:

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.

刷新(读取)后,我得到AnakinReadLukeRead预期的结果。

当我再次申请时,它会按预期检测到漂移。

申请后,该州"name": "AnakinUpdate"(如预期的那样)但是 ``"kids": ["Luke"] instead ofLukeUpdate`。

这个例子是极简主义的,我的结构远比这复杂得多——但如果我能解决这种不一致,我可能会解决我原来的问题。

谢谢你。

4

0 回答 0