func expandKibanaRoleKibana()

in internal/kibana/role.go [526:568]


func expandKibanaRoleKibana(v interface{}) ([]kbapi.KibanaRoleKibana, diag.Diagnostics) {
	kibanaConfigs := []kbapi.KibanaRoleKibana{}
	definedKibanaConfigs := v.(*schema.Set)

	for _, item := range definedKibanaConfigs.List() {
		each := item.(map[string]interface{})
		config := kbapi.KibanaRoleKibana{
			Base:    []string{},
			Feature: map[string][]string{},
		}

		if basePrivileges, ok := each["base"].(*schema.Set); ok && basePrivileges.Len() > 0 {
			if _features, ok := each["feature"].(*schema.Set); ok && _features.Len() > 0 {
				return nil, diag.Errorf("Only one of the `feature` or `base` privileges allowed!")
			}
			config.Base = make([]string, basePrivileges.Len())
			for i, name := range basePrivileges.List() {
				config.Base[i] = name.(string)
			}
		} else if kibanaFeatures, ok := each["feature"].(*schema.Set); ok && kibanaFeatures.Len() > 0 {
			for _, item := range kibanaFeatures.List() {
				featureData := item.(map[string]interface{})
				featurePrivileges := featureData["privileges"].(*schema.Set)
				_features := make([]string, featurePrivileges.Len())
				for i, f := range featurePrivileges.List() {
					_features[i] = f.(string)
				}
				config.Feature[featureData["name"].(string)] = _features
			}
		} else {
			return nil, diag.Errorf("Either on of the `feature` or `base` privileges must be set for kibana role!")
		}

		if roleSpaces, ok := each["spaces"].(*schema.Set); ok && roleSpaces.Len() > 0 {
			config.Spaces = make([]string, roleSpaces.Len())
			for i, name := range roleSpaces.List() {
				config.Spaces[i] = name.(string)
			}
		}
		kibanaConfigs = append(kibanaConfigs, config)
	}
	return kibanaConfigs, nil
}