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
}