diff --git a/internal/components/extensions/jaeger_query_extension.go b/internal/components/extensions/jaeger_query_extension.go index 27f1862f06..8aa10f63df 100644 --- a/internal/components/extensions/jaeger_query_extension.go +++ b/internal/components/extensions/jaeger_query_extension.go @@ -20,9 +20,7 @@ const ( port = 16686 ) -var ( - _ components.Parser = &components.GenericParser[*JaegerQueryExtensionConfig]{} -) +var _ components.Parser = &components.GenericParser[*JaegerQueryExtensionConfig]{} type JaegerQueryExtensionConfig struct { HTTP jaegerHTTPAddress `mapstructure:"http,omitempty" yaml:"http,omitempty"` diff --git a/internal/components/generic_parser.go b/internal/components/generic_parser.go index 257f32f5f3..87b9459d4b 100644 --- a/internal/components/generic_parser.go +++ b/internal/components/generic_parser.go @@ -12,9 +12,7 @@ import ( rbacv1 "k8s.io/api/rbac/v1" ) -var ( - _ Parser = &GenericParser[SingleEndpointConfig]{} -) +var _ Parser = &GenericParser[SingleEndpointConfig]{} // GenericParser serves as scaffolding for custom parsing logic by isolating // functionality to idempotent functions. diff --git a/internal/components/single_endpoint.go b/internal/components/single_endpoint.go index 3f4bf347c7..73a5fde40d 100644 --- a/internal/components/single_endpoint.go +++ b/internal/components/single_endpoint.go @@ -16,9 +16,7 @@ import ( const DefaultRecAddress = "0.0.0.0" -var ( - _ Parser = &GenericParser[*SingleEndpointConfig]{} -) +var _ Parser = &GenericParser[*SingleEndpointConfig]{} // SingleEndpointConfig represents the minimal struct for a given YAML configuration input containing either // endpoint or listen_address. diff --git a/internal/controllers/builder_test.go b/internal/controllers/builder_test.go index e1419e045e..03bcd8afa3 100644 --- a/internal/controllers/builder_test.go +++ b/internal/controllers/builder_test.go @@ -44,27 +44,23 @@ var ( pathTypePrefix = networkingv1.PathTypePrefix ) -var ( - opampbridgeSelectorLabels = map[string]string{ - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/component": "opentelemetry-opamp-bridge", - "app.kubernetes.io/instance": "test.test", - } -) +var opampbridgeSelectorLabels = map[string]string{ + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/component": "opentelemetry-opamp-bridge", + "app.kubernetes.io/instance": "test.test", +} -var ( - taSelectorLabels = map[string]string{ - "app.kubernetes.io/managed-by": "opentelemetry-operator", - "app.kubernetes.io/part-of": "opentelemetry", - "app.kubernetes.io/component": "opentelemetry-targetallocator", - "app.kubernetes.io/instance": "test.test", - "app.kubernetes.io/name": "test-targetallocator", - } -) +var taSelectorLabels = map[string]string{ + "app.kubernetes.io/managed-by": "opentelemetry-operator", + "app.kubernetes.io/part-of": "opentelemetry", + "app.kubernetes.io/component": "opentelemetry-targetallocator", + "app.kubernetes.io/instance": "test.test", + "app.kubernetes.io/name": "test-targetallocator", +} func TestBuildCollector(t *testing.T) { - var goodConfigYaml = `receivers: + goodConfigYaml := `receivers: examplereceiver: endpoint: "0.0.0.0:12345" exporters: @@ -1054,7 +1050,6 @@ func TestBuildAll_OpAMPBridge(t *testing.T) { wantErr bool }{ { - name: "base case", args: args{ instance: v1alpha1.OpAMPBridge{ @@ -1219,7 +1214,8 @@ componentsAllowed: receivers: - otlp endpoint: ws://opamp-server:4320/v1/opamp -`}, +`, + }, }, &corev1.ServiceAccount{ ObjectMeta: metav1.ObjectMeta{ @@ -1291,7 +1287,7 @@ endpoint: ws://opamp-server:4320/v1/opamp } func TestBuildCollectorTargetAllocatorCR(t *testing.T) { - var goodConfigYaml = ` + goodConfigYaml := ` receivers: prometheus: config: diff --git a/internal/controllers/clusterobservability_controller.go b/internal/controllers/clusterobservability_controller.go index 6983000257..9b427834ac 100644 --- a/internal/controllers/clusterobservability_controller.go +++ b/internal/controllers/clusterobservability_controller.go @@ -242,7 +242,6 @@ func (r *ClusterObservabilityReconciler) reconcileOpenTelemetryResource(ctx cont return r.Update(ctx, latest) }) - if err != nil { return fmt.Errorf("failed to update OpenTelemetryCollector %s: %w", key, err) } @@ -272,7 +271,6 @@ func (r *ClusterObservabilityReconciler) reconcileOpenTelemetryResource(ctx cont return r.Update(ctx, latest) }) - if err != nil { return fmt.Errorf("failed to update Instrumentation %s: %w", key, err) } diff --git a/internal/controllers/opampbridge_controller_test.go b/internal/controllers/opampbridge_controller_test.go index 7fb70ebda9..b7f390e722 100644 --- a/internal/controllers/opampbridge_controller_test.go +++ b/internal/controllers/opampbridge_controller_test.go @@ -32,18 +32,20 @@ import ( "github.com/open-telemetry/opentelemetry-operator/internal/controllers" ) -var opampBridgeLogger = logf.Log.WithName("opamp-bridge-controller-unit-tests") -var opampBridgeMockAutoDetector = &mockAutoDetect{ - OpenShiftRoutesAvailabilityFunc: func() (openshift.RoutesAvailability, error) { - return openshift.RoutesAvailable, nil - }, - PrometheusCRsAvailabilityFunc: func() (prometheus.Availability, error) { - return prometheus.Available, nil - }, - RBACPermissionsFunc: func(context.Context) (rbac.Availability, error) { - return rbac.Available, nil - }, -} +var ( + opampBridgeLogger = logf.Log.WithName("opamp-bridge-controller-unit-tests") + opampBridgeMockAutoDetector = &mockAutoDetect{ + OpenShiftRoutesAvailabilityFunc: func() (openshift.RoutesAvailability, error) { + return openshift.RoutesAvailable, nil + }, + PrometheusCRsAvailabilityFunc: func() (prometheus.Availability, error) { + return prometheus.Available, nil + }, + RBACPermissionsFunc: func(context.Context) (rbac.Availability, error) { + return rbac.Available, nil + }, + } +) func TestNewObjectsOnReconciliation_OpAMPBridge(t *testing.T) { // prepare diff --git a/internal/controllers/opentelemetrycollector_controller.go b/internal/controllers/opentelemetrycollector_controller.go index ecd1313dd5..dbdd413722 100644 --- a/internal/controllers/opentelemetrycollector_controller.go +++ b/internal/controllers/opentelemetrycollector_controller.go @@ -48,12 +48,10 @@ import ( const resourceOwnerKey = ".metadata.owner" -var ( - ownedClusterObjectTypes = []client.Object{ - &rbacv1.ClusterRole{}, - &rbacv1.ClusterRoleBinding{}, - } -) +var ownedClusterObjectTypes = []client.Object{ + &rbacv1.ClusterRole{}, + &rbacv1.ClusterRoleBinding{}, +} // OpenTelemetryCollectorReconciler reconciles a OpenTelemetryCollector object. type OpenTelemetryCollectorReconciler struct { diff --git a/internal/controllers/reconcile_test.go b/internal/controllers/reconcile_test.go index 2af617a445..f668ea81ed 100644 --- a/internal/controllers/reconcile_test.go +++ b/internal/controllers/reconcile_test.go @@ -62,16 +62,14 @@ const ( annotationVal = "true" ) -var ( - extraPorts = v1beta1.PortsSpec{ - ServicePort: v1.ServicePort{ - Name: "port-web", - Protocol: "TCP", - Port: 8080, - TargetPort: intstr.FromInt32(8080), - }, - } -) +var extraPorts = v1beta1.PortsSpec{ + ServicePort: v1.ServicePort{ + Name: "port-web", + Protocol: "TCP", + Port: 8080, + TargetPort: intstr.FromInt32(8080), + }, +} type check[T any] func(t *testing.T, params T) @@ -1481,7 +1479,7 @@ func TestUpgrade(t *testing.T) { } } -func namespacedObjectName(name string, namespace string) types.NamespacedName { +func namespacedObjectName(name, namespace string) types.NamespacedName { return types.NamespacedName{ Namespace: namespace, Name: name, diff --git a/internal/controllers/suite_test.go b/internal/controllers/suite_test.go index b9452abe37..d00a8227b9 100644 --- a/internal/controllers/suite_test.go +++ b/internal/controllers/suite_test.go @@ -318,7 +318,8 @@ func testCollectorWithModeAndReplicas(t *testing.T, name string, mode v1beta1.Mo IntVal: 80, }, NodePort: 0, - }}}, + }, + }}, Replicas: &replicas, }, Config: otelConfig, @@ -327,7 +328,7 @@ func testCollectorWithModeAndReplicas(t *testing.T, name string, mode v1beta1.Mo } } -func testCollectorAssertNoErr(t *testing.T, name string, taContainerImage string, file string) v1beta1.OpenTelemetryCollector { +func testCollectorAssertNoErr(t *testing.T, name, taContainerImage, file string) v1beta1.OpenTelemetryCollector { p, err := testCollectorWithConfigFile(name, taContainerImage, file) assert.NoError(t, err) if len(taContainerImage) == 0 { @@ -336,7 +337,7 @@ func testCollectorAssertNoErr(t *testing.T, name string, taContainerImage string return p } -func testCollectorWithConfigFile(name string, taContainerImage string, file string) (v1beta1.OpenTelemetryCollector, error) { +func testCollectorWithConfigFile(name, taContainerImage, file string) (v1beta1.OpenTelemetryCollector, error) { replicas := int32(1) var configYAML []byte var err error @@ -375,7 +376,8 @@ func testCollectorWithConfigFile(name string, taContainerImage string, file stri IntVal: 80, }, NodePort: 0, - }}}, + }, + }}, Replicas: &replicas, }, Mode: v1beta1.ModeStatefulSet, @@ -419,7 +421,8 @@ func testCollectorWithHPA(t *testing.T, minReps, maxReps int32) v1beta1.OpenTele IntVal: 80, }, NodePort: 0, - }}}, + }, + }}, }, Config: otelConfig, @@ -484,7 +487,8 @@ func testCollectorWithPDB(t *testing.T, minAvailable, maxUnavailable int32) v1be IntVal: 80, }, NodePort: 0, - }}}, + }, + }}, PodDisruptionBudget: pdb, }, diff --git a/internal/fips/fipscheck.go b/internal/fips/fipscheck.go index d38281c915..594c7c750e 100644 --- a/internal/fips/fipscheck.go +++ b/internal/fips/fipscheck.go @@ -9,7 +9,7 @@ import ( type FIPSCheck interface { // DisabledComponents checks if a submitted components are denied or not. - DisabledComponents(receivers map[string]any, exporters map[string]any, processors map[string]any, extensions map[string]any) []string + DisabledComponents(receivers, exporters, processors, extensions map[string]any) []string } // FipsCheck holds configuration for FIPS deny list. @@ -38,7 +38,7 @@ func listToMap(list []string) map[string]bool { return m } -func (fips fipsCheck) DisabledComponents(receivers map[string]any, exporters map[string]any, processors map[string]any, extensions map[string]any) []string { +func (fips fipsCheck) DisabledComponents(receivers, exporters, processors, extensions map[string]any) []string { var disabled []string if comp := isDisabled(fips.receivers, receivers); comp != "" { disabled = append(disabled, comp) diff --git a/internal/instrumentation/apachehttpd.go b/internal/instrumentation/apachehttpd.go index 70f0c0f341..6e83c57a9c 100644 --- a/internal/instrumentation/apachehttpd.go +++ b/internal/instrumentation/apachehttpd.go @@ -64,7 +64,8 @@ func injectApacheHttpdagent(_ logr.Logger, apacheSpec v1alpha1.ApacheHttpd, pod EmptyDir: &corev1.EmptyDirVolumeSource{ SizeLimit: volumeSize(apacheSpec.VolumeSizeLimit), }, - }}) + }, + }) apacheConfDir := getApacheConfDir(apacheSpec.ConfigPath) @@ -139,7 +140,8 @@ func injectApacheHttpdagent(_ logr.Logger, apacheSpec v1alpha1.ApacheHttpd, pod Name: apacheAttributesEnvVar, Value: getApacheOtelConfig(pod, useLabelsForResourceAttributes, apacheSpec, container, otlpEndpoint, resourceMap), }, - {Name: apacheServiceInstanceIdEnvVar, + { + Name: apacheServiceInstanceIdEnvVar, ValueFrom: &corev1.EnvVarSource{ FieldRef: &corev1.ObjectFieldSelector{ FieldPath: "metadata.name", diff --git a/internal/instrumentation/exporter.go b/internal/instrumentation/exporter.go index b5a0a8d90d..f23cca036e 100644 --- a/internal/instrumentation/exporter.go +++ b/internal/instrumentation/exporter.go @@ -79,7 +79,8 @@ func configureExporter(exporter v1alpha1.Exporter, pod *corev1.Pod, container *c Secret: &corev1.SecretVolumeSource{ SecretName: exporter.TLS.SecretName, }, - }}) + }, + }) } addVolumeMount := true for _, vol := range container.VolumeMounts { @@ -112,7 +113,8 @@ func configureExporter(exporter v1alpha1.Exporter, pod *corev1.Pod, container *c Name: exporter.TLS.ConfigMapName, }, }, - }}) + }, + }) } addVolumeMount := true for _, vol := range container.VolumeMounts { diff --git a/internal/instrumentation/helper.go b/internal/instrumentation/helper.go index 52a9df6059..5be14c945d 100644 --- a/internal/instrumentation/helper.go +++ b/internal/instrumentation/helper.go @@ -132,7 +132,8 @@ func instrVolume(volumeClaimTemplate corev1.PersistentVolumeClaimTemplate, name EmptyDir: &corev1.EmptyDirVolumeSource{ SizeLimit: volumeSize(quantity), }, - }} + }, + } } func volumeSize(quantity *resource.Quantity) *resource.Quantity { @@ -158,7 +159,7 @@ func isValidContainersAnnotation(containersAnnotation string) error { } // setContainersFromAnnotation sets the containers associated to one intrumentation based on the content of the provided annotation. -func setContainersFromAnnotation(inst *instrumentationWithContainers, annotation string, ns metav1.ObjectMeta, pod metav1.ObjectMeta) error { +func setContainersFromAnnotation(inst *instrumentationWithContainers, annotation string, ns, pod metav1.ObjectMeta) error { annotationValue := annotationValue(ns, pod, annotation) if annotationValue == "" { return nil diff --git a/internal/instrumentation/helper_test.go b/internal/instrumentation/helper_test.go index 34619ca8c2..e248d31226 100644 --- a/internal/instrumentation/helper_test.go +++ b/internal/instrumentation/helper_test.go @@ -205,7 +205,8 @@ func TestInstrVolume(t *testing.T) { }, }, }, - }}, + }, + }, }, { name: "With volume size limit", @@ -218,7 +219,8 @@ func TestInstrVolume(t *testing.T) { EmptyDir: &corev1.EmptyDirVolumeSource{ SizeLimit: &defaultVolumeLimitSize, }, - }}, + }, + }, }, { name: "No volume or size limit", @@ -231,7 +233,8 @@ func TestInstrVolume(t *testing.T) { EmptyDir: &corev1.EmptyDirVolumeSource{ SizeLimit: &defaultSize, }, - }}, + }, + }, }, { name: "With volume and size limit", @@ -252,7 +255,8 @@ func TestInstrVolume(t *testing.T) { }, }, }, - }}, + }, + }, }, } diff --git a/internal/instrumentation/nginx.go b/internal/instrumentation/nginx.go index 7a171033d2..7aca0abd74 100644 --- a/internal/instrumentation/nginx.go +++ b/internal/instrumentation/nginx.go @@ -63,7 +63,8 @@ func injectNginxSDK(_ logr.Logger, nginxSpec v1alpha1.Nginx, pod corev1.Pod, use Name: nginxAgentConfigVolume, VolumeSource: corev1.VolumeSource{ EmptyDir: &corev1.EmptyDirVolumeSource{}, - }}) + }, + }) nginxConfFile := getNginxConfFile(nginxSpec.ConfigFile) nginxConfDir := getNginxConfDir(nginxSpec.ConfigFile) @@ -73,8 +74,7 @@ func injectNginxSDK(_ logr.Logger, nginxSpec v1alpha1.Nginx, pod corev1.Pod, use // 2) version of Nginx to select the proper version of OTel modules. // - run Nginx with -v to get the version // - store the version into a file where instrumentation initContainer can pick it up - nginxCloneScriptTemplate := - ` + nginxCloneScriptTemplate := ` cp -r %[2]s/* %[3]s && export %[4]s="$( { nginx -v ; } 2>&1 )" && echo ${%[4]s##*/} > %[3]s/version.txt ` @@ -138,7 +138,8 @@ export %[4]s="$( { nginx -v ; } 2>&1 )" && echo ${%[4]s##*/} > %[3]s/version.txt Name: nginxAgentVolume, VolumeSource: corev1.VolumeSource{ EmptyDir: &corev1.EmptyDirVolumeSource{}, - }}) + }, + }) // Following is the template for a shell script, which does the actual instrumentation // It does following: @@ -154,8 +155,7 @@ export %[4]s="$( { nginx -v ; } 2>&1 )" && echo ${%[4]s##*/} > %[3]s/version.txt // 9) Move OTel module configuration file to Nginx configuration directory. // Each line of the script MUST end with \n ! - nginxAgentI13nScript := - ` + nginxAgentI13nScript := ` NGINX_AGENT_DIR_FULL=$1 \n NGINX_AGENT_CONF_DIR_FULL=$2 \n NGINX_CONFIG_FILE=$3 \n diff --git a/internal/instrumentation/nginx_test.go b/internal/instrumentation/nginx_test.go index 94dc917b1f..fb9fc14df7 100644 --- a/internal/instrumentation/nginx_test.go +++ b/internal/instrumentation/nginx_test.go @@ -15,9 +15,11 @@ import ( "github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1" ) -var nginxSdkInitContainerTestCommand = "echo -e $OTEL_NGINX_I13N_SCRIPT > /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && chmod +x /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && cat /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh \"/opt/opentelemetry-webserver/agent\" \"/opt/opentelemetry-webserver/source-conf\" \"nginx.conf\" \"<>\"" -var nginxSdkInitContainerTestCommandCustomFile = "echo -e $OTEL_NGINX_I13N_SCRIPT > /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && chmod +x /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && cat /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh \"/opt/opentelemetry-webserver/agent\" \"/opt/opentelemetry-webserver/source-conf\" \"custom-nginx.conf\" \"<>\"" -var nginxSdkInitContainerI13nScript = "\nNGINX_AGENT_DIR_FULL=$1\t\\n\nNGINX_AGENT_CONF_DIR_FULL=$2 \\n\nNGINX_CONFIG_FILE=$3 \\n\nNGINX_SID_PLACEHOLDER=$4 \\n\nNGINX_SID_VALUE=$5 \\n\necho \"Input Parameters: $@\" \\n\nset -x \\n\n\\n\ncp -r /opt/opentelemetry/* ${NGINX_AGENT_DIR_FULL} \\n\n\\n\nNGINX_VERSION=$(cat ${NGINX_AGENT_CONF_DIR_FULL}/version.txt) \\n\nNGINX_AGENT_LOG_DIR=$(echo \"${NGINX_AGENT_DIR_FULL}/logs\" | sed 's,/,\\\\/,g') \\n\n\\n\ncat ${NGINX_AGENT_DIR_FULL}/conf/opentelemetry_sdk_log4cxx.xml.template | sed 's,__agent_log_dir__,'${NGINX_AGENT_LOG_DIR}',g' > ${NGINX_AGENT_DIR_FULL}/conf/opentelemetry_sdk_log4cxx.xml \\n\necho -e $OTEL_NGINX_AGENT_CONF > ${NGINX_AGENT_CONF_DIR_FULL}/opentelemetry_agent.conf \\n\nsed -i \"s,${NGINX_SID_PLACEHOLDER},${OTEL_NGINX_SERVICE_INSTANCE_ID},g\" ${NGINX_AGENT_CONF_DIR_FULL}/opentelemetry_agent.conf \\n\nsed -i \"1s,^,load_module ${NGINX_AGENT_DIR_FULL}/WebServerModule/Nginx/${NGINX_VERSION}/ngx_http_opentelemetry_module.so;\\\\n,g\" ${NGINX_AGENT_CONF_DIR_FULL}/${NGINX_CONFIG_FILE} \\n\nsed -i \"1s,^,env OTEL_RESOURCE_ATTRIBUTES;\\\\n,g\" ${NGINX_AGENT_CONF_DIR_FULL}/${NGINX_CONFIG_FILE} \\n\nmv ${NGINX_AGENT_CONF_DIR_FULL}/opentelemetry_agent.conf ${NGINX_AGENT_CONF_DIR_FULL}/conf.d \\n\n\t\t" +var ( + nginxSdkInitContainerTestCommand = "echo -e $OTEL_NGINX_I13N_SCRIPT > /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && chmod +x /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && cat /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh \"/opt/opentelemetry-webserver/agent\" \"/opt/opentelemetry-webserver/source-conf\" \"nginx.conf\" \"<>\"" + nginxSdkInitContainerTestCommandCustomFile = "echo -e $OTEL_NGINX_I13N_SCRIPT > /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && chmod +x /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && cat /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh && /opt/opentelemetry-webserver/agent/nginx_instrumentation.sh \"/opt/opentelemetry-webserver/agent\" \"/opt/opentelemetry-webserver/source-conf\" \"custom-nginx.conf\" \"<>\"" + nginxSdkInitContainerI13nScript = "\nNGINX_AGENT_DIR_FULL=$1\t\\n\nNGINX_AGENT_CONF_DIR_FULL=$2 \\n\nNGINX_CONFIG_FILE=$3 \\n\nNGINX_SID_PLACEHOLDER=$4 \\n\nNGINX_SID_VALUE=$5 \\n\necho \"Input Parameters: $@\" \\n\nset -x \\n\n\\n\ncp -r /opt/opentelemetry/* ${NGINX_AGENT_DIR_FULL} \\n\n\\n\nNGINX_VERSION=$(cat ${NGINX_AGENT_CONF_DIR_FULL}/version.txt) \\n\nNGINX_AGENT_LOG_DIR=$(echo \"${NGINX_AGENT_DIR_FULL}/logs\" | sed 's,/,\\\\/,g') \\n\n\\n\ncat ${NGINX_AGENT_DIR_FULL}/conf/opentelemetry_sdk_log4cxx.xml.template | sed 's,__agent_log_dir__,'${NGINX_AGENT_LOG_DIR}',g' > ${NGINX_AGENT_DIR_FULL}/conf/opentelemetry_sdk_log4cxx.xml \\n\necho -e $OTEL_NGINX_AGENT_CONF > ${NGINX_AGENT_CONF_DIR_FULL}/opentelemetry_agent.conf \\n\nsed -i \"s,${NGINX_SID_PLACEHOLDER},${OTEL_NGINX_SERVICE_INSTANCE_ID},g\" ${NGINX_AGENT_CONF_DIR_FULL}/opentelemetry_agent.conf \\n\nsed -i \"1s,^,load_module ${NGINX_AGENT_DIR_FULL}/WebServerModule/Nginx/${NGINX_VERSION}/ngx_http_opentelemetry_module.so;\\\\n,g\" ${NGINX_AGENT_CONF_DIR_FULL}/${NGINX_CONFIG_FILE} \\n\nsed -i \"1s,^,env OTEL_RESOURCE_ATTRIBUTES;\\\\n,g\" ${NGINX_AGENT_CONF_DIR_FULL}/${NGINX_CONFIG_FILE} \\n\nmv ${NGINX_AGENT_CONF_DIR_FULL}/opentelemetry_agent.conf ${NGINX_AGENT_CONF_DIR_FULL}/conf.d \\n\n\t\t" +) func TestInjectNginxSDK(t *testing.T) { tests := []struct { @@ -238,7 +240,8 @@ func TestInjectNginxSDK(t *testing.T) { }, }, }, - }}, + }, + }, // === Test init-container-incompatible fields not copied ============================= { name: "Init-container-incompatible fields not copied", diff --git a/internal/instrumentation/sdk.go b/internal/instrumentation/sdk.go index 333ddd04c4..c6516bfa0a 100644 --- a/internal/instrumentation/sdk.go +++ b/internal/instrumentation/sdk.go @@ -414,7 +414,7 @@ func (*sdkInjector) injectDefaultDotNetEnvVarsWrapper(pod corev1.Pod, container // and appIndex should be the same value. This is true for dotnet, java, nodejs, and python instrumentations. // Go requires the agent to be a different container in the pod, so the agentIndex should represent this new sidecar // and appIndex should represent the application being instrumented. -func (i *sdkInjector) injectCommonSDKConfig(ctx context.Context, otelinst v1alpha1.Instrumentation, ns corev1.Namespace, pod corev1.Pod, container *corev1.Container, appContainer *corev1.Container) corev1.Pod { +func (i *sdkInjector) injectCommonSDKConfig(ctx context.Context, otelinst v1alpha1.Instrumentation, ns corev1.Namespace, pod corev1.Pod, container, appContainer *corev1.Container) corev1.Pod { useLabelsForResourceAttributes := otelinst.Spec.Defaults.UseLabelsForResourceAttributes resourceMap := i.createResourceMap(ctx, otelinst, ns, pod, appContainer) idx := getIndexOfEnv(container.Env, constants.EnvOTELServiceName) @@ -798,7 +798,7 @@ func resourceMapToStr(res map[string]string) string { } sort.Strings(keys) - var str = "" + str := "" for _, k := range keys { if str != "" { str += "," diff --git a/internal/instrumentation/sdk_test.go b/internal/instrumentation/sdk_test.go index 641058a27d..eb00cae296 100644 --- a/internal/instrumentation/sdk_test.go +++ b/internal/instrumentation/sdk_test.go @@ -1944,13 +1944,15 @@ func TestInjectApacheHttpd(t *testing.T) { Image: "img:1", Command: []string{"/bin/sh", "-c"}, Args: []string{ - "cp -r /opt/opentelemetry/* /opt/opentelemetry-webserver/agent && export agentLogDir=$(echo \"/opt/opentelemetry-webserver/agent/logs\" | sed 's,/,\\\\/,g') && cat /opt/opentelemetry-webserver/agent/conf/opentelemetry_sdk_log4cxx.xml.template | sed 's/__agent_log_dir__/'${agentLogDir}'/g' > /opt/opentelemetry-webserver/agent/conf/opentelemetry_sdk_log4cxx.xml &&echo \"$OTEL_APACHE_AGENT_CONF\" > /opt/opentelemetry-webserver/source-conf/opentemetry_agent.conf && sed -i 's/<>/'${APACHE_SERVICE_INSTANCE_ID}'/g' /opt/opentelemetry-webserver/source-conf/opentemetry_agent.conf && echo -e '\nInclude /usr/local/apache2/conf/opentemetry_agent.conf' >> /opt/opentelemetry-webserver/source-conf/httpd.conf"}, + "cp -r /opt/opentelemetry/* /opt/opentelemetry-webserver/agent && export agentLogDir=$(echo \"/opt/opentelemetry-webserver/agent/logs\" | sed 's,/,\\\\/,g') && cat /opt/opentelemetry-webserver/agent/conf/opentelemetry_sdk_log4cxx.xml.template | sed 's/__agent_log_dir__/'${agentLogDir}'/g' > /opt/opentelemetry-webserver/agent/conf/opentelemetry_sdk_log4cxx.xml &&echo \"$OTEL_APACHE_AGENT_CONF\" > /opt/opentelemetry-webserver/source-conf/opentemetry_agent.conf && sed -i 's/<>/'${APACHE_SERVICE_INSTANCE_ID}'/g' /opt/opentelemetry-webserver/source-conf/opentemetry_agent.conf && echo -e '\nInclude /usr/local/apache2/conf/opentemetry_agent.conf' >> /opt/opentelemetry-webserver/source-conf/httpd.conf", + }, Env: []corev1.EnvVar{ { Name: apacheAttributesEnvVar, Value: "\n#Load the Otel Webserver SDK\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_common.so\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_resources.so\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_trace.so\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_otlp_recordable.so\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_exporter_ostream_span.so\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_exporter_otlp_grpc.so\n#Load the Otel ApacheModule SDK\nLoadFile /opt/opentelemetry-webserver/agent/sdk_lib/lib/libopentelemetry_webserver_sdk.so\n#Load the Apache Module. In this example for Apache 2.4\n#LoadModule otel_apache_module /opt/opentelemetry-webserver/agent/WebServerModule/Apache/libmod_apache_otel.so\n#Load the Apache Module. In this example for Apache 2.2\n#LoadModule otel_apache_module /opt/opentelemetry-webserver/agent/WebServerModule/Apache/libmod_apache_otel22.so\nLoadModule otel_apache_module /opt/opentelemetry-webserver/agent/WebServerModule/Apache/libmod_apache_otel.so\n#Attributes\nApacheModuleEnabled ON\nApacheModuleOtelExporterEndpoint https://collector:4318\nApacheModuleOtelSpanExporter otlp\nApacheModuleResolveBackends ON\nApacheModuleServiceInstanceId <>\nApacheModuleServiceName app\nApacheModuleServiceNamespace ns\nApacheModuleTraceAsError ON\n", }, - {Name: apacheServiceInstanceIdEnvVar, + { + Name: apacheServiceInstanceIdEnvVar, ValueFrom: &corev1.EnvVarSource{ FieldRef: &corev1.ObjectFieldSelector{ FieldPath: "metadata.name", diff --git a/internal/instrumentation/upgrade/upgrade_suite_test.go b/internal/instrumentation/upgrade/upgrade_suite_test.go index fac0736ca9..65d8ff07f6 100644 --- a/internal/instrumentation/upgrade/upgrade_suite_test.go +++ b/internal/instrumentation/upgrade/upgrade_suite_test.go @@ -18,11 +18,13 @@ import ( "github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1" ) -var k8sClient client.Client -var testEnv *envtest.Environment -var testScheme = scheme.Scheme -var err error -var cfg *rest.Config +var ( + k8sClient client.Client + testEnv *envtest.Environment + testScheme = scheme.Scheme + err error + cfg *rest.Config +) func TestMain(m *testing.M) { testEnv = &envtest.Environment{ diff --git a/internal/manifests/builder.go b/internal/manifests/builder.go index 1c6389fb8a..829d2731d1 100644 --- a/internal/manifests/builder.go +++ b/internal/manifests/builder.go @@ -11,9 +11,11 @@ import ( type Builder[Params any] func(params Params) ([]client.Object, error) -type ManifestFactory[T client.Object, Params any] func(params Params) (T, error) -type SimpleManifestFactory[T client.Object, Params any] func(params Params) T -type K8sManifestFactory[Params any] ManifestFactory[client.Object, Params] +type ( + ManifestFactory[T client.Object, Params any] func(params Params) (T, error) + SimpleManifestFactory[T client.Object, Params any] func(params Params) T + K8sManifestFactory[Params any] ManifestFactory[client.Object, Params] +) func FactoryWithoutError[T client.Object, Params any](f SimpleManifestFactory[T, Params]) K8sManifestFactory[Params] { return func(params Params) (client.Object, error) { diff --git a/internal/manifests/collector/adapters/config_from.go b/internal/manifests/collector/adapters/config_from.go index 7242a21ba6..20cb0c570f 100644 --- a/internal/manifests/collector/adapters/config_from.go +++ b/internal/manifests/collector/adapters/config_from.go @@ -10,10 +10,8 @@ import ( "gopkg.in/yaml.v2" ) -var ( - // ErrInvalidYAML represents an error in the format of the configuration file. - ErrInvalidYAML = errors.New("couldn't parse the opentelemetry-collector configuration") -) +// ErrInvalidYAML represents an error in the format of the configuration file. +var ErrInvalidYAML = errors.New("couldn't parse the opentelemetry-collector configuration") // ConfigFromString extracts a configuration map from the given string. // If the given string isn't a valid YAML, ErrInvalidYAML is returned. diff --git a/internal/manifests/collector/container_test.go b/internal/manifests/collector/container_test.go index f604e2981c..98ff5f4134 100644 --- a/internal/manifests/collector/container_test.go +++ b/internal/manifests/collector/container_test.go @@ -29,7 +29,7 @@ var metricContainerPort = corev1.ContainerPort{ func TestContainerNewDefault(t *testing.T) { // prepare - var defaultConfig = `receivers: + defaultConfig := `receivers: otlp: protocols: http: @@ -89,7 +89,7 @@ func TestContainerWithImageOverridden(t *testing.T) { } func TestContainerPorts(t *testing.T) { - var goodConfig = `receivers: + goodConfig := `receivers: examplereceiver: endpoint: "0.0.0.0:12345" exporters: @@ -477,7 +477,6 @@ func TestContainerCustomSecurityContext(t *testing.T) { c2 := Container(config.New(), testLogger, v1beta1.OpenTelemetryCollector{ Spec: v1beta1.OpenTelemetryCollectorSpec{ OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{ - SecurityContext: &corev1.SecurityContext{ Privileged: &isPrivileged, RunAsUser: &uid, @@ -1140,7 +1139,8 @@ service: pipelines: metrics: receivers: [kubeletstats] -`)}, +`), + }, }, expectedEnvVars: []corev1.EnvVar{ { diff --git a/internal/manifests/collector/ingress.go b/internal/manifests/collector/ingress.go index c59b9a7845..9e7ce8f9bd 100644 --- a/internal/manifests/collector/ingress.go +++ b/internal/manifests/collector/ingress.go @@ -59,7 +59,7 @@ func Ingress(params manifests.Params) (*networkingv1.Ingress, error) { }, nil } -func createPathIngressRules(otelcol string, hostname string, ports []corev1.ServicePort) networkingv1.IngressRule { +func createPathIngressRules(otelcol, hostname string, ports []corev1.ServicePort) networkingv1.IngressRule { pathType := networkingv1.PathTypePrefix paths := make([]networkingv1.HTTPIngressPath, len(ports)) for i, port := range ports { @@ -87,7 +87,7 @@ func createPathIngressRules(otelcol string, hostname string, ports []corev1.Serv } } -func createSubdomainIngressRules(otelcol string, hostname string, ports []corev1.ServicePort) []networkingv1.IngressRule { +func createSubdomainIngressRules(otelcol, hostname string, ports []corev1.ServicePort) []networkingv1.IngressRule { var rules []networkingv1.IngressRule pathType := networkingv1.PathTypePrefix for _, port := range ports { diff --git a/internal/manifests/manifestutils/labels.go b/internal/manifests/manifestutils/labels.go index 39645102d9..bc991f0450 100644 --- a/internal/manifests/manifestutils/labels.go +++ b/internal/manifests/manifestutils/labels.go @@ -26,7 +26,7 @@ func IsFilteredSet(sourceSet string, filterSet []string) bool { } // Labels return the common labels to all objects that are part of a managed CR. -func Labels(instance metav1.ObjectMeta, name string, image string, component string, filterLabels []string) map[string]string { +func Labels(instance metav1.ObjectMeta, name, image, component string, filterLabels []string) map[string]string { var versionLabel string // new map every time, so that we don't touch the instance's label base := map[string]string{} @@ -90,7 +90,7 @@ func TASelectorLabels(instance v1alpha1.TargetAllocator, component string) map[s } // AddExtraLabels adds extra labels to the ServiceMonitor labels map. -func AddExtraLabels(logger *logr.Logger, labels map[string]string, extraLabels map[string]string) { +func AddExtraLabels(logger *logr.Logger, labels, extraLabels map[string]string) { for k, v := range extraLabels { if existingValue, exists := (labels)[k]; exists { if existingValue != v { diff --git a/internal/manifests/mutate.go b/internal/manifests/mutate.go index d822405777..5c95b55b2a 100644 --- a/internal/manifests/mutate.go +++ b/internal/manifests/mutate.go @@ -32,9 +32,7 @@ func (e *ImmutableFieldChangeErr) Error() string { return fmt.Sprintf("Immutable field change attempted: %s", e.Field) } -var ( - ImmutableChangeErr *ImmutableFieldChangeErr -) +var ImmutableChangeErr *ImmutableFieldChangeErr // MutateFuncFor returns a mutate function based on the // existing resource's concrete type. It supports currently diff --git a/internal/manifests/targetallocator/service.go b/internal/manifests/targetallocator/service.go index e9215bf57f..52f7560dd2 100644 --- a/internal/manifests/targetallocator/service.go +++ b/internal/manifests/targetallocator/service.go @@ -23,13 +23,15 @@ func Service(params Params) *corev1.Service { ports = append(ports, corev1.ServicePort{ Name: "targetallocation", Port: 80, - TargetPort: intstr.FromString("http")}) + TargetPort: intstr.FromString("http"), + }) if params.Config.CertManagerAvailability == certmanager.Available && featuregate.EnableTargetAllocatorMTLS.IsEnabled() { ports = append(ports, corev1.ServicePort{ Name: "targetallocation-https", Port: 443, - TargetPort: intstr.FromString("https")}) + TargetPort: intstr.FromString("https"), + }) } return &corev1.Service{ diff --git a/internal/naming/main.go b/internal/naming/main.go index 3208bf2976..a100c50293 100644 --- a/internal/naming/main.go +++ b/internal/naming/main.go @@ -131,12 +131,12 @@ func TargetAllocatorNetworkPolicy(otelcol string) string { } // Route builds the route name based on the instance. -func Route(otelcol string, prefix string) string { +func Route(otelcol, prefix string) string { return DNSName(Truncate("%s-%s-route", 63, prefix, otelcol)) } // ClusterRole builds the cluster role name based on the instance. -func ClusterRole(otelcol string, namespace string) string { +func ClusterRole(otelcol, namespace string) string { return DNSName(Truncate("%s-%s-cluster-role", 63, otelcol, namespace)) } diff --git a/internal/naming/port.go b/internal/naming/port.go index 4b0c229a72..f67ea4da8f 100644 --- a/internal/naming/port.go +++ b/internal/naming/port.go @@ -9,10 +9,8 @@ import ( "strings" ) -var ( - // DNS_LABEL constraints: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names - dnsLabelValidation = regexp.MustCompile("^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$") -) +// DNS_LABEL constraints: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names +var dnsLabelValidation = regexp.MustCompile("^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$") // PortName defines the port name used in services, ingresses and routes. // The port name in pod and ingress spec has to be maximum 15 characters long. diff --git a/internal/operatornetworkpolicy/operatornetworkpolicy.go b/internal/operatornetworkpolicy/operatornetworkpolicy.go index 499898fdda..fd1322d735 100644 --- a/internal/operatornetworkpolicy/operatornetworkpolicy.go +++ b/internal/operatornetworkpolicy/operatornetworkpolicy.go @@ -34,8 +34,10 @@ type networkPolicy struct { apiServerNamespaceSelector *metav1.LabelSelector } -var _ manager.Runnable = (*networkPolicy)(nil) -var _ manager.LeaderElectionRunnable = (*networkPolicy)(nil) +var ( + _ manager.Runnable = (*networkPolicy)(nil) + _ manager.LeaderElectionRunnable = (*networkPolicy)(nil) +) func NewOperatorNetworkPolicy(clientset kubernetes.Interface, scheme *runtime.Scheme, options ...Option) manager.Runnable { n := &networkPolicy{