@@ -530,100 +530,9 @@ func ParseConfigMap(ctx context.Context, cfgm *v1.ConfigMap, nginxPlus bool, has
530530 }
531531 }
532532
533- if otelExporterEndpoint , exists := cfgm .Data ["otel-exporter-endpoint" ]; exists {
534- otelExporterEndpoint = strings .TrimSpace (otelExporterEndpoint )
535- if otelExporterEndpoint != "" {
536- cfgParams .MainOtelExporterEndpoint = otelExporterEndpoint
537- }
538- }
539-
540- if otelExporterTrustedCA , exists := cfgm .Data ["otel-exporter-trusted-ca" ]; exists {
541- otelExporterTrustedCA = strings .TrimSpace (otelExporterTrustedCA )
542- if otelExporterTrustedCA != "" {
543- cfgParams .MainOtelExporterTrustedCA = otelExporterTrustedCA
544- }
545- }
546-
547- if otelExporterHeaderName , exists := cfgm .Data ["otel-exporter-header-name" ]; exists {
548- otelExporterHeaderName = strings .TrimSpace (otelExporterHeaderName )
549- if otelExporterHeaderName != "" {
550- cfgParams .MainOtelExporterHeaderName = otelExporterHeaderName
551- }
552- }
553-
554- if otelExporterHeaderValue , exists := cfgm .Data ["otel-exporter-header-value" ]; exists {
555- otelExporterHeaderValue = strings .TrimSpace (otelExporterHeaderValue )
556- if otelExporterHeaderValue != "" {
557- cfgParams .MainOtelExporterHeaderValue = otelExporterHeaderValue
558- }
559- }
560-
561- if otelServiceName , exists := cfgm .Data ["otel-service-name" ]; exists {
562- otelServiceName = strings .TrimSpace (otelServiceName )
563- if otelServiceName != "" {
564- cfgParams .MainOtelServiceName = otelServiceName
565- }
566- }
567-
568- if otelGlobalTraceEnabled , exists , err := GetMapKeyAsBool (cfgm .Data , "otel-global-trace-enabled" , cfgm ); exists {
569- if err != nil {
570- nl .Error (l , err )
571- eventLog .Event (cfgm , v1 .EventTypeWarning , nl .EventReasonInvalidValue , err .Error ())
572- configOk = false
573- }
574- cfgParams .MainOtelGlobalTraceEnabled = otelGlobalTraceEnabled
575- }
576-
577- if cfgParams .MainOtelExporterEndpoint != "" {
578- cfgParams .MainOtelLoadModule = true
579- }
580-
581- if otelExporterEndpoint , exists := cfgm .Data ["otel-exporter-endpoint" ]; exists {
582- otelExporterEndpoint = strings .TrimSpace (otelExporterEndpoint )
583- if otelExporterEndpoint != "" {
584- cfgParams .MainOtelExporterEndpoint = otelExporterEndpoint
585- }
586- }
587-
588- if otelExporterTrustedCA , exists := cfgm .Data ["otel-exporter-trusted-ca" ]; exists {
589- otelExporterTrustedCA = strings .TrimSpace (otelExporterTrustedCA )
590- if otelExporterTrustedCA != "" {
591- cfgParams .MainOtelExporterTrustedCA = otelExporterTrustedCA
592- }
593- }
594-
595- if otelExporterHeaderName , exists := cfgm .Data ["otel-exporter-header-name" ]; exists {
596- otelExporterHeaderName = strings .TrimSpace (otelExporterHeaderName )
597- if otelExporterHeaderName != "" {
598- cfgParams .MainOtelExporterHeaderName = otelExporterHeaderName
599- }
600- }
601-
602- if otelExporterHeaderValue , exists := cfgm .Data ["otel-exporter-header-value" ]; exists {
603- otelExporterHeaderValue = strings .TrimSpace (otelExporterHeaderValue )
604- if otelExporterHeaderValue != "" {
605- cfgParams .MainOtelExporterHeaderValue = otelExporterHeaderValue
606- }
607- }
608-
609- if otelServiceName , exists := cfgm .Data ["otel-service-name" ]; exists {
610- otelServiceName = strings .TrimSpace (otelServiceName )
611- if otelServiceName != "" {
612- cfgParams .MainOtelServiceName = otelServiceName
613- }
614- }
615-
616- if otelGlobalTraceEnabled , exists , err := GetMapKeyAsBool (cfgm .Data , "otel-global-trace-enabled" , cfgm ); exists {
617- if err != nil {
618- nl .Error (l , err )
619- eventLog .Event (cfgm , v1 .EventTypeWarning , nl .EventReasonInvalidValue , err .Error ())
620- configOk = false
621- }
622- cfgParams .MainOtelGlobalTraceEnabled = otelGlobalTraceEnabled
623- }
624-
625- if cfgParams .MainOtelExporterEndpoint != "" {
626- cfgParams .MainOtelLoadModule = true
533+ _ , otelErr := parseConfigMapOpenTelemetry (l , cfgm , cfgParams , eventLog )
534+ if otelErr != nil {
535+ configOk = false
627536 }
628537
629538 if hasAppProtect {
@@ -836,6 +745,79 @@ func parseConfigMapZoneSync(l *slog.Logger, cfgm *v1.ConfigMap, cfgParams *Confi
836745 return & cfgParams .ZoneSync , nil
837746}
838747
748+ //nolint:gocyclo
749+ func parseConfigMapOpenTelemetry (l * slog.Logger , cfgm * v1.ConfigMap , cfgParams * ConfigParams , eventLog record.EventRecorder ) (* ConfigParams , error ) {
750+ if otelExporterEndpoint , exists := cfgm .Data ["otel-exporter-endpoint" ]; exists {
751+ otelExporterEndpoint = strings .TrimSpace (otelExporterEndpoint )
752+ if otelExporterEndpoint != "" {
753+ cfgParams .MainOtelExporterEndpoint = otelExporterEndpoint
754+ }
755+ }
756+
757+ if otelExporterHeaderName , exists := cfgm .Data ["otel-exporter-header-name" ]; exists {
758+ otelExporterHeaderName = strings .TrimSpace (otelExporterHeaderName )
759+ if otelExporterHeaderName != "" {
760+ cfgParams .MainOtelExporterHeaderName = otelExporterHeaderName
761+ }
762+ }
763+
764+ if otelExporterHeaderValue , exists := cfgm .Data ["otel-exporter-header-value" ]; exists {
765+ otelExporterHeaderValue = strings .TrimSpace (otelExporterHeaderValue )
766+ if otelExporterHeaderValue != "" {
767+ cfgParams .MainOtelExporterHeaderValue = otelExporterHeaderValue
768+ }
769+ }
770+
771+ if otelServiceName , exists := cfgm .Data ["otel-service-name" ]; exists {
772+ otelServiceName = strings .TrimSpace (otelServiceName )
773+ if otelServiceName != "" {
774+ cfgParams .MainOtelServiceName = otelServiceName
775+ }
776+ }
777+
778+ otelValid := true
779+
780+ if otelTraceInHTTP , exists , err := GetMapKeyAsBool (cfgm .Data , "otel-trace-in-http" , cfgm ); exists {
781+ if err != nil {
782+ nl .Error (l , err )
783+ eventLog .Event (cfgm , v1 .EventTypeWarning , nl .EventReasonInvalidValue , err .Error ())
784+ otelValid = false
785+ }
786+ cfgParams .MainOtelTraceInHTTP = otelTraceInHTTP
787+ }
788+
789+ if (cfgParams .MainOtelExporterHeaderName != "" && cfgParams .MainOtelExporterHeaderValue == "" ) ||
790+ (cfgParams .MainOtelExporterHeaderName == "" && cfgParams .MainOtelExporterHeaderValue != "" ) {
791+ errorText := "Both 'otel-exporter-header-name' and 'otel-exporter-header-value' must be set or neither"
792+ nl .Error (l , errorText )
793+ eventLog .Event (cfgm , v1 .EventTypeWarning , nl .EventReasonInvalidValue , errorText )
794+ otelValid = false
795+ }
796+
797+ if cfgParams .MainOtelExporterEndpoint != "" {
798+ cfgParams .MainOtelLoadModule = true
799+ }
800+
801+ if cfgParams .MainOtelExporterEndpoint == "" &&
802+ (cfgParams .MainOtelExporterTrustedCA != "" ||
803+ cfgParams .MainOtelExporterHeaderName != "" ||
804+ cfgParams .MainOtelExporterHeaderValue != "" ||
805+ cfgParams .MainOtelServiceName != "" ||
806+ cfgParams .MainOtelTraceInHTTP ) {
807+ errorText := "ConfigMap key 'otel-exporter-endpoint' is required when other otel fields are set"
808+ nl .Error (l , errorText )
809+ eventLog .Event (cfgm , v1 .EventTypeWarning , nl .EventReasonInvalidValue , errorText )
810+ otelValid = false
811+ cfgParams .MainOtelTraceInHTTP = false
812+ }
813+
814+ if ! otelValid {
815+ return nil , errors .New ("invalid OpenTelemetry configuration" )
816+ }
817+
818+ return cfgParams , nil
819+ }
820+
839821// ParseMGMTConfigMap parses the mgmt block ConfigMap into MGMTConfigParams.
840822//
841823//nolint:gocyclo
@@ -988,11 +970,6 @@ func GenerateNginxMainConfig(staticCfgParams *StaticConfigParams, config *Config
988970 ResolverValid : config .ZoneSync .ResolverValid ,
989971 }
990972
991- mainOtelExporterTrustedCA := ""
992- if config .MainOtelExporterTrustedCA != "" {
993- mainOtelExporterTrustedCA = fmt .Sprintf ("%s-%s-%s" , os .Getenv ("POD_NAMESPACE" ), config .MainOtelExporterTrustedCA , CACrtKey )
994- }
995-
996973 nginxCfg := & version1.MainConfig {
997974 AccessLog : config .MainAccessLog ,
998975 DefaultServerAccessLogOff : config .DefaultServerAccessLogOff ,
@@ -1015,9 +992,8 @@ func GenerateNginxMainConfig(staticCfgParams *StaticConfigParams, config *Config
1015992 NginxStatusAllowCIDRs : staticCfgParams .NginxStatusAllowCIDRs ,
1016993 NginxStatusPort : staticCfgParams .NginxStatusPort ,
1017994 MainOtelLoadModule : config .MainOtelLoadModule ,
1018- MainOtelGlobalTraceEnabled : config .MainOtelGlobalTraceEnabled ,
995+ MainOtelGlobalTraceEnabled : config .MainOtelTraceInHTTP ,
1019996 MainOtelExporterEndpoint : config .MainOtelExporterEndpoint ,
1020- MainOtelExporterTrustedCA : mainOtelExporterTrustedCA ,
1021997 MainOtelExporterHeaderName : config .MainOtelExporterHeaderName ,
1022998 MainOtelExporterHeaderValue : config .MainOtelExporterHeaderValue ,
1023999 MainOtelServiceName : config .MainOtelServiceName ,
0 commit comments