func resourceSlmPut()

in internal/elasticsearch/cluster/slm.go [157:237]


func resourceSlmPut(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
	client, diags := clients.NewApiClientFromSDKResource(d, meta)
	if diags.HasError() {
		return diags
	}
	slmId := d.Get("name").(string)
	id, diags := client.ID(ctx, slmId)
	if diags.HasError() {
		return diags
	}

	var slm models.SnapshotPolicy
	slm.Id = slmId
	var slmConfig models.SnapshotPolicyConfig
	slmRetention := models.SnapshortRetention{}

	slm.Repository = d.Get("repository").(string)
	slm.Schedule = d.Get("schedule").(string)
	if v, ok := d.GetOk("snapshot_name"); ok {
		slm.Name = v.(string)
	}
	if v, ok := d.GetOk("expire_after"); ok {
		vv := v.(string)
		slmRetention.ExpireAfter = &vv
	}
	if v, ok := d.GetOk("max_count"); ok {
		vv := v.(int)
		slmRetention.MaxCount = &vv
	}
	if v, ok := d.GetOk("min_count"); ok {
		vv := v.(int)
		slmRetention.MinCount = &vv
	}
	slm.Retention = &slmRetention

	if v, ok := d.GetOk("expand_wildcards"); ok {
		vv := v.(string)
		slmConfig.ExpandWildcards = &vv
	}
	if v, ok := d.Get("ignore_unavailable").(bool); ok {
		slmConfig.IgnoreUnavailable = &v
	}
	if v, ok := d.Get("include_global_state").(bool); ok {
		slmConfig.IncludeGlobalState = &v
	}
	indices := make([]string, 0)
	if v, ok := d.GetOk("indices"); ok {
		list := v.([]interface{})
		for _, idx := range list {
			indices = append(indices, idx.(string))
		}
	}
	slmConfig.Indices = indices
	states := make([]string, 0)
	if v, ok := d.GetOk("feature_states"); ok {
		p := v.(*schema.Set)
		for _, e := range p.List() {
			states = append(states, e.(string))
		}
	}
	slmConfig.FeatureStates = states
	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)
		}
		slmConfig.Metadata = metadata
	}
	if v, ok := d.GetOk("partial"); ok {
		vv := v.(bool)
		slmConfig.Partial = &vv
	}

	slm.Config = &slmConfig

	if diags := elasticsearch.PutSlm(ctx, client, &slm); diags.HasError() {
		return diags
	}
	d.SetId(id.String())
	return resourceSlmRead(ctx, d, meta)
}