in internal/elasticsearch/index/template.go [203:300]
func resourceIndexTemplatePut(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client, diags := clients.NewApiClientFromSDKResource(d, meta)
if diags.HasError() {
return diags
}
templateId := d.Get("name").(string)
id, diags := client.ID(ctx, templateId)
if diags.HasError() {
return diags
}
var indexTemplate models.IndexTemplate
indexTemplate.Name = templateId
compsOf := make([]string, 0)
if v, ok := d.GetOk("composed_of"); ok {
for _, c := range v.([]interface{}) {
compsOf = append(compsOf, c.(string))
}
}
indexTemplate.ComposedOf = compsOf
if v, ok := d.GetOk("data_stream"); ok {
// 8.x workaround
hasAllowCustomRouting := false
if d.HasChange("data_stream") {
old, _ := d.GetChange("data_stream")
if old != nil && len(old.([]interface{})) == 1 {
if old.([]interface{})[0] != nil {
setting := old.([]interface{})[0].(map[string]interface{})
if acr, ok := setting["allow_custom_routing"]; ok && acr.(bool) {
hasAllowCustomRouting = true
}
}
}
}
// only one definition of stream allowed
if v.([]interface{})[0] != nil {
stream := v.([]interface{})[0].(map[string]interface{})
dSettings := &models.DataStreamSettings{}
if s, ok := stream["hidden"]; ok {
hidden := s.(bool)
dSettings.Hidden = &hidden
}
if s, ok := stream["allow_custom_routing"]; ok && (hasAllowCustomRouting || s.(bool)) {
allow := s.(bool)
dSettings.AllowCustomRouting = &allow
}
indexTemplate.DataStream = dSettings
}
}
if v, ok := d.GetOk("index_patterns"); ok {
definedIndPats := v.(*schema.Set)
indPats := make([]string, definedIndPats.Len())
for i, p := range definedIndPats.List() {
indPats[i] = p.(string)
}
indexTemplate.IndexPatterns = indPats
}
if v, ok := d.GetOk("metadata"); ok {
metadata := make(map[string]interface{})
if err := json.NewDecoder(strings.NewReader(v.(string))).Decode(&metadata); err != nil {
return diag.FromErr(err)
}
indexTemplate.Meta = metadata
}
if v, ok := d.GetOk("priority"); ok {
definedPr := v.(int)
indexTemplate.Priority = &definedPr
}
if v, ok := d.GetOk("template"); ok {
templ, ok, diags := expandTemplate(v)
if diags != nil {
return diags
}
if ok {
indexTemplate.Template = &templ
}
}
if v, ok := d.GetOk("version"); ok {
definedVer := v.(int)
indexTemplate.Version = &definedVer
}
if diags := elasticsearch.PutIndexTemplate(ctx, client, &indexTemplate); diags.HasError() {
return diags
}
d.SetId(id.String())
return resourceIndexTemplateRead(ctx, d, meta)
}