in internal/kibana/role.go [380:524]
func expandKibanaRoleElasticsearch(v interface{}, serverVersion *version.Version) (*kbapi.KibanaRoleElasticsearch, diag.Diagnostics) {
elasticConfig := &kbapi.KibanaRoleElasticsearch{}
var diags diag.Diagnostics
if definedElasticConfigs := v.(*schema.Set); definedElasticConfigs.Len() > 0 {
userElasticConfig := definedElasticConfigs.List()[0].(map[string]interface{})
if v, ok := userElasticConfig["cluster"]; ok {
definedCluster := v.(*schema.Set)
cls := make([]string, definedCluster.Len())
for i, cl := range definedCluster.List() {
cls[i] = cl.(string)
}
elasticConfig.Cluster = cls
if v, ok := userElasticConfig["indices"]; ok {
definedIndices := v.(*schema.Set)
indices := make([]kbapi.KibanaRoleElasticsearchIndice, definedIndices.Len())
for i, idx := range definedIndices.List() {
index := idx.(map[string]interface{})
definedNames := index["names"].(*schema.Set)
names := make([]string, definedNames.Len())
for i, name := range definedNames.List() {
names[i] = name.(string)
}
definedPrivileges := index["privileges"].(*schema.Set)
privileges := make([]string, definedPrivileges.Len())
for i, pr := range definedPrivileges.List() {
privileges[i] = pr.(string)
}
newIndex := kbapi.KibanaRoleElasticsearchIndice{
Names: names,
Privileges: privileges,
}
if query := index["query"].(string); query != "" {
newIndex.Query = &query
}
if fieldSec := index["field_security"].([]interface{}); len(fieldSec) > 0 {
fieldSecurity := map[string]interface{}{}
// there must be only 1 entry
definedFieldSec := fieldSec[0].(map[string]interface{})
// grants
if gr := definedFieldSec["grant"].(*schema.Set); gr != nil {
grants := make([]string, gr.Len())
for i, grant := range gr.List() {
grants[i] = grant.(string)
}
fieldSecurity["grant"] = grants
}
// except
if exp := definedFieldSec["except"].(*schema.Set); exp != nil {
excepts := make([]string, exp.Len())
for i, except := range exp.List() {
excepts[i] = except.(string)
}
fieldSecurity["except"] = excepts
}
newIndex.FieldSecurity = fieldSecurity
}
indices[i] = newIndex
}
elasticConfig.Indices = indices
}
if v, ok := userElasticConfig["remote_indices"]; ok {
definedRemoteIndices := v.(*schema.Set)
if definedRemoteIndices.Len() > 0 {
if serverVersion.LessThan(minSupportedRemoteIndicesVersion) {
return nil, diag.FromErr(fmt.Errorf("'remote_indices' is supported only for Kibana v%s and above", minSupportedRemoteIndicesVersion.String()))
}
}
remote_indices := make([]kbapi.KibanaRoleElasticsearchRemoteIndice, definedRemoteIndices.Len())
for i, idx := range definedRemoteIndices.List() {
index := idx.(map[string]interface{})
definedNames := index["names"].(*schema.Set)
names := make([]string, definedNames.Len())
for i, name := range definedNames.List() {
names[i] = name.(string)
}
definedClusters := index["clusters"].(*schema.Set)
clusters := make([]string, definedClusters.Len())
for i, cluster := range definedClusters.List() {
clusters[i] = cluster.(string)
}
definedPrivileges := index["privileges"].(*schema.Set)
privileges := make([]string, definedPrivileges.Len())
for i, pr := range definedPrivileges.List() {
privileges[i] = pr.(string)
}
newRemoteIndex := kbapi.KibanaRoleElasticsearchRemoteIndice{
Names: names,
Clusters: clusters,
Privileges: privileges,
}
if query := index["query"].(string); query != "" {
newRemoteIndex.Query = &query
}
if fieldSec := index["field_security"].([]interface{}); len(fieldSec) > 0 {
fieldSecurity := map[string]interface{}{}
// there must be only 1 entry
definedFieldSec := fieldSec[0].(map[string]interface{})
// grants
if gr := definedFieldSec["grant"].(*schema.Set); gr != nil {
grants := make([]string, gr.Len())
for i, grant := range gr.List() {
grants[i] = grant.(string)
}
fieldSecurity["grant"] = grants
}
// except
if exp := definedFieldSec["except"].(*schema.Set); exp != nil {
excepts := make([]string, exp.Len())
for i, except := range exp.List() {
excepts[i] = except.(string)
}
fieldSecurity["except"] = excepts
}
newRemoteIndex.FieldSecurity = fieldSecurity
}
remote_indices[i] = newRemoteIndex
}
elasticConfig.RemoteIndices = remote_indices
}
if v, ok := userElasticConfig["run_as"]; ok {
definedRuns := v.(*schema.Set)
runs := make([]string, definedRuns.Len())
for i, run := range definedRuns.List() {
runs[i] = run.(string)
}
elasticConfig.RunAs = runs
}
}
}
return elasticConfig, diags
}