diff --git a/.chloggen/bug-fix-labeling-process.yaml b/.chloggen/bug-fix-labeling-process.yaml new file mode 100755 index 0000000000..da7f9219c6 --- /dev/null +++ b/.chloggen/bug-fix-labeling-process.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. operator, target allocator, github action) +component: Operator + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Fixed the labeling process which was broken at the moment to capture the current image tag when the users set the sha256 reference. + +# One or more tracking issues related to the change +issues: [1982] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: "" diff --git a/internal/manifests/collector/labels.go b/internal/manifests/collector/labels.go index d6aaa8ed4a..ca586d8b0c 100644 --- a/internal/manifests/collector/labels.go +++ b/internal/manifests/collector/labels.go @@ -33,6 +33,7 @@ func isFilteredLabel(label string, filterLabels []string) bool { // Labels return the common labels to all objects that are part of a managed OpenTelemetryCollector. func Labels(instance v1alpha1.OpenTelemetryCollector, name 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{} if nil != instance.Labels { @@ -48,9 +49,17 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels } version := strings.Split(instance.Spec.Image, ":") - if len(version) > 1 { - base["app.kubernetes.io/version"] = version[len(version)-1] - } else { + for _, v := range version { + if strings.HasSuffix(v, "@sha256") { + versionLabel = strings.TrimSuffix(v, "@sha256") + } + } + switch lenVersion := len(version); lenVersion { + case 3: + base["app.kubernetes.io/version"] = versionLabel + case 2: + base["app.kubernetes.io/version"] = naming.Truncate("%s", 63, version[len(version)-1]) + default: base["app.kubernetes.io/version"] = "latest" } diff --git a/internal/manifests/collector/labels_test.go b/internal/manifests/collector/labels_test.go index 222dec7cfa..a2bb7629cc 100644 --- a/internal/manifests/collector/labels_test.go +++ b/internal/manifests/collector/labels_test.go @@ -49,7 +49,45 @@ func TestLabelsCommonSet(t *testing.T) { assert.Equal(t, "opentelemetry", labels["app.kubernetes.io/part-of"]) assert.Equal(t, "opentelemetry-collector", labels["app.kubernetes.io/component"]) } +func TestLabelsSha256Set(t *testing.T) { + // prepare + otelcol := v1alpha1.OpenTelemetryCollector{ + ObjectMeta: metav1.ObjectMeta{ + Name: collectorName, + Namespace: collectorNamespace, + }, + Spec: v1alpha1.OpenTelemetryCollectorSpec{ + Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532", + }, + } + // test + labels := Labels(otelcol, collectorName, []string{}) + assert.Equal(t, "opentelemetry-operator", labels["app.kubernetes.io/managed-by"]) + assert.Equal(t, "my-ns.my-instance", labels["app.kubernetes.io/instance"]) + assert.Equal(t, "c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b53", labels["app.kubernetes.io/version"]) + assert.Equal(t, "opentelemetry", labels["app.kubernetes.io/part-of"]) + assert.Equal(t, "opentelemetry-collector", labels["app.kubernetes.io/component"]) + + // prepare + otelcolTag := v1alpha1.OpenTelemetryCollector{ + ObjectMeta: metav1.ObjectMeta{ + Name: collectorName, + Namespace: collectorNamespace, + }, + Spec: v1alpha1.OpenTelemetryCollectorSpec{ + Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.81.0@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532", + }, + } + + // test + labelsTag := Labels(otelcolTag, collectorName, []string{}) + assert.Equal(t, "opentelemetry-operator", labelsTag["app.kubernetes.io/managed-by"]) + assert.Equal(t, "my-ns.my-instance", labelsTag["app.kubernetes.io/instance"]) + assert.Equal(t, "0.81.0", labelsTag["app.kubernetes.io/version"]) + assert.Equal(t, "opentelemetry", labelsTag["app.kubernetes.io/part-of"]) + assert.Equal(t, "opentelemetry-collector", labelsTag["app.kubernetes.io/component"]) +} func TestLabelsTagUnset(t *testing.T) { // prepare otelcol := v1alpha1.OpenTelemetryCollector{ diff --git a/tests/e2e/smoke-pod-labels/00-assert.yaml b/tests/e2e/smoke-pod-labels/00-assert.yaml new file mode 100644 index 0000000000..8bb507544b --- /dev/null +++ b/tests/e2e/smoke-pod-labels/00-assert.yaml @@ -0,0 +1,12 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: testlabel-collector + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: testlabel-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: a0c6dea261b3d794971c23c5665173a39f0ce2aa09b9d88b753bd46776d7b05 +status: + readyReplicas: 1 diff --git a/tests/e2e/smoke-pod-labels/00-install.yaml b/tests/e2e/smoke-pod-labels/00-install.yaml new file mode 100644 index 0000000000..00843cf434 --- /dev/null +++ b/tests/e2e/smoke-pod-labels/00-install.yaml @@ -0,0 +1,30 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: testlabel +spec: + image: otel/opentelemetry-collector-contrib@sha256:a0c6dea261b3d794971c23c5665173a39f0ce2aa09b9d88b753bd46776d7b05b + config: | + receivers: + otlp: + protocols: + grpc: + http: + processors: + memory_limiter: + check_interval: 1s + limit_percentage: 75 + spike_limit_percentage: 15 + batch: + send_batch_size: 10000 + timeout: 10s + + exporters: + logging: + + service: + pipelines: + traces: + receivers: [otlp] + processors: [] + exporters: [logging]