internal/elasticsearch/index/commons.go (93 lines of code) (raw):
package index
import (
"encoding/json"
"github.com/elastic/terraform-provider-elasticstack/internal/models"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func ExpandIndexAliases(definedAliases *schema.Set) (map[string]models.IndexAlias, diag.Diagnostics) {
var diags diag.Diagnostics
aliases := make(map[string]models.IndexAlias, definedAliases.Len())
for _, a := range definedAliases.List() {
alias := a.(map[string]interface{})
ia, diags := ExpandIndexAlias(alias)
if diags.HasError() {
return nil, diags
}
aliases[alias["name"].(string)] = *ia
}
return aliases, diags
}
func ExpandIndexAlias(alias map[string]interface{}) (*models.IndexAlias, diag.Diagnostics) {
var diags diag.Diagnostics
ia := models.IndexAlias{}
ia.Name = alias["name"].(string)
if f, ok := alias["filter"]; ok {
if f.(string) != "" {
filterMap := make(map[string]interface{})
if err := json.Unmarshal([]byte(f.(string)), &filterMap); err != nil {
return nil, diag.FromErr(err)
}
ia.Filter = filterMap
}
}
ia.IndexRouting = alias["index_routing"].(string)
ia.IsHidden = alias["is_hidden"].(bool)
ia.IsWriteIndex = alias["is_write_index"].(bool)
ia.Routing = alias["routing"].(string)
ia.SearchRouting = alias["search_routing"].(string)
return &ia, diags
}
func FlattenIndexAliases(aliases map[string]models.IndexAlias) (interface{}, diag.Diagnostics) {
var diags diag.Diagnostics
als := make([]interface{}, 0)
for k, v := range aliases {
alias, diags := FlattenIndexAlias(k, v)
if diags.HasError() {
return nil, diags
}
als = append(als, alias)
}
return als, diags
}
func FlattenIndexAlias(name string, alias models.IndexAlias) (interface{}, diag.Diagnostics) {
var diags diag.Diagnostics
a := make(map[string]interface{})
a["name"] = name
if alias.Filter != nil {
f, err := json.Marshal(alias.Filter)
if err != nil {
return nil, diag.FromErr(err)
}
a["filter"] = string(f)
} else {
a["filter"] = ""
}
a["index_routing"] = alias.IndexRouting
a["is_hidden"] = alias.IsHidden
a["is_write_index"] = alias.IsWriteIndex
a["routing"] = alias.Routing
a["search_routing"] = alias.SearchRouting
return a, diags
}
func ExpandLifecycle(definedLifecycle *schema.Set) *models.LifecycleSettings {
if definedLifecycle.Len() == 0 {
return nil
}
lifecycleMap := definedLifecycle.List()[0].(map[string]interface{})
if lifecycleMap != nil {
lifecycle := &models.LifecycleSettings{}
if s, ok := lifecycleMap["data_retention"]; ok {
lifecycle.DataRetention = s.(string)
}
return lifecycle
}
return nil
}
func FlattenLifecycle(lifecycle *models.LifecycleSettings) interface{} {
lf := make([]interface{}, 1)
lfSettings := make(map[string]interface{})
lfSettings["data_retention"] = lifecycle.DataRetention
lf[0] = lfSettings
return lf
}