Схема провайдера Terraform с TypeSet и непоследовательной записью
Я нахожу некоторые несоответствия, когда файл состояния записывается после создания провайдера.
Это мой ресурс:
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"
]
}
когда я запускаю приложение в первый раз, я получаю это в состоянии
"name": "AnakinCreate"
(как и ожидалось), но
"kids": ["Luke"]
вместо
LukeCreate
.
после обновления (читать) я получаю
AnakinRead
и
LukeRead
как и ожидалось.
когда я снова применяю, он обнаруживает дрейф, как и ожидалось.
после подачи заявления у государства есть
"name": "AnakinUpdate"
(как и ожидалось), но `" kids ": [" Luke "]
instead of
LukeUpdate`.
Пример минималистичен, моя структура намного сложнее, но если я смогу устранить это несоответствие, я, вероятно, смогу решить свою исходную проблему.
Спасибо.