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
}