func NewConfigSettings()

in pkg/controller/kibana/config_settings.go [83:166]


func NewConfigSettings(ctx context.Context, client k8s.Client, kb kbv1.Kibana, v version.Version, ipFamily corev1.IPFamily, kibanaConfigFromPolicy *settings.CanonicalConfig) (CanonicalConfig, error) {
	span, _ := apm.StartSpan(ctx, "new_config_settings", tracing.SpanTypeApp)
	defer span.End()

	reusableSettings, err := getOrCreateReusableSettings(ctx, client, kb)
	if err != nil {
		return CanonicalConfig{}, err
	}

	// hack to support pre-7.6.0 Kibana configs as it errors out with unsupported keys, ideally we would not unpack empty values and could skip this
	err = filterConfigSettings(kb, reusableSettings)
	if err != nil {
		return CanonicalConfig{}, err
	}

	// parse user-provided settings
	specConfig := kb.Spec.Config
	if specConfig == nil {
		specConfig = &commonv1.Config{}
	}
	userSettings, err := settings.NewCanonicalConfigFrom(specConfig.Data)
	if err != nil {
		return CanonicalConfig{}, err
	}

	baseSettingsMap, err := baseSettings(&kb, ipFamily)
	if err != nil {
		return CanonicalConfig{}, err
	}

	cfg := settings.MustCanonicalConfig(baseSettingsMap)
	kibanaTLSCfg := settings.MustCanonicalConfig(kibanaTLSSettings(kb))
	versionSpecificCfg := VersionDefaults(&kb, v)
	entSearchCfg := settings.MustCanonicalConfig(enterpriseSearchSettings(kb))
	monitoringCfg, err := settings.NewCanonicalConfigFrom(stackmon.MonitoringConfig(kb).Data)
	if err != nil {
		return CanonicalConfig{}, err
	}

	err = cfg.MergeWith(
		reusableSettings,
		versionSpecificCfg,
		kibanaTLSCfg,
		entSearchCfg,
		monitoringCfg)
	if err != nil {
		return CanonicalConfig{}, err
	}

	// Elasticsearch configuration
	esAssocConf, err := kb.EsAssociation().AssociationConf()
	if err != nil {
		return CanonicalConfig{}, err
	}
	if esAssocConf.IsConfigured() {
		credentials, err := association.ElasticsearchAuthSettings(ctx, client, kb.EsAssociation())
		if err != nil {
			return CanonicalConfig{}, err
		}
		var esCreds map[string]interface{}
		if credentials.HasServiceAccountToken() {
			esCreds = map[string]interface{}{
				ElasticsearchServiceAccountToken: credentials.ServiceAccountToken,
			}
		} else {
			esCreds = map[string]interface{}{
				ElasticsearchUsername: credentials.Username,
				ElasticsearchPassword: credentials.Password,
			}
		}
		credentialsCfg := settings.MustCanonicalConfig(esCreds)
		esAssocCfg := settings.MustCanonicalConfig(elasticsearchTLSSettings(*esAssocConf))
		if err = cfg.MergeWith(esAssocCfg, credentialsCfg); err != nil {
			return CanonicalConfig{}, err
		}
	}

	// Kibana settings from a StackConfigPolicy takes precedence over user provided settings, merge them last.
	if err = cfg.MergeWith(userSettings, kibanaConfigFromPolicy); err != nil {
		return CanonicalConfig{}, err
	}

	return CanonicalConfig{cfg}, nil
}