func expandPhase()

in internal/elasticsearch/index/ilm.go [501:568]


func expandPhase(p map[string]interface{}, serverVersion *version.Version) (*models.Phase, diag.Diagnostics) {
	var diags diag.Diagnostics
	var phase models.Phase

	if v := p["min_age"].(string); v != "" {
		phase.MinAge = v
	}
	delete(p, "min_age")

	actions := make(map[string]models.Action)
	for actionName, action := range p {
		if a := action.([]interface{}); len(a) > 0 {
			switch actionName {
			case "allocate":
				actions[actionName], diags = expandAction(a, serverVersion, "number_of_replicas", "total_shards_per_node", "include", "exclude", "require")
			case "delete":
				actions[actionName], diags = expandAction(a, serverVersion, "delete_searchable_snapshot")
			case "forcemerge":
				actions[actionName], diags = expandAction(a, serverVersion, "max_num_segments", "index_codec")
			case "freeze":
				if a[0] != nil {
					ac := a[0].(map[string]interface{})
					if ac["enabled"].(bool) {
						actions[actionName], diags = expandAction(a, serverVersion)
					}
				}
			case "migrate":
				actions[actionName], diags = expandAction(a, serverVersion, "enabled")
			case "readonly":
				if a[0] != nil {
					ac := a[0].(map[string]interface{})
					if ac["enabled"].(bool) {
						actions[actionName], diags = expandAction(a, serverVersion)
					}
				}
			case "rollover":
				actions[actionName], diags = expandAction(a, serverVersion, "max_age", "max_docs", "max_size", "max_primary_shard_docs", "max_primary_shard_size", "min_age", "min_docs", "min_size", "min_primary_shard_docs", "min_primary_shard_size")
			case "searchable_snapshot":
				actions[actionName], diags = expandAction(a, serverVersion, "snapshot_repository", "force_merge_index")
			case "set_priority":
				actions[actionName], diags = expandAction(a, serverVersion, "priority")
			case "shrink":
				actions[actionName], diags = expandAction(a, serverVersion, "number_of_shards", "max_primary_shard_size", "allow_write_after_shrink")
			case "unfollow":
				if a[0] != nil {
					ac := a[0].(map[string]interface{})
					if ac["enabled"].(bool) {
						actions[actionName], diags = expandAction(a, serverVersion)
					}
				}
			case "wait_for_snapshot":
				actions[actionName], diags = expandAction(a, serverVersion, "policy")
			case "downsample":
				actions[actionName], diags = expandAction(a, serverVersion, "fixed_interval", "wait_timeout")
			default:
				diags = append(diags, diag.Diagnostic{
					Severity: diag.Error,
					Summary:  "Unknown action defined.",
					Detail:   fmt.Sprintf(`Configured action "%s" is not supported`, actionName),
				})
				return nil, diags
			}
		}
	}

	phase.Actions = actions
	return &phase, diags
}