From a476218f4ae7a725859ad85acc53e87494c50102 Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Tue, 17 Oct 2023 12:34:45 +0200 Subject: [PATCH 1/7] Fixed Labels with sha256 image ref Signed-off-by: Yuri Sa --- internal/manifests/collector/labels.go | 13 +++++++++++-- internal/manifests/collector/labels_test.go | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/internal/manifests/collector/labels.go b/internal/manifests/collector/labels.go index d6aaa8ed4a..1169dc418f 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 { + 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"] = version[len(version)-1] - } else { + 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..bf4c5e0d27 100644 --- a/internal/manifests/collector/labels_test.go +++ b/internal/manifests/collector/labels_test.go @@ -49,7 +49,26 @@ 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:0.81.0@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, "0.81.0", 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"]) +} func TestLabelsTagUnset(t *testing.T) { // prepare otelcol := v1alpha1.OpenTelemetryCollector{ From 2873ab6e76fe39a6c80292e015b0ba5ffcca9208 Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Tue, 17 Oct 2023 12:42:07 +0200 Subject: [PATCH 2/7] Fixed Labels with sha256 image ref Signed-off-by: Yuri Sa --- .chloggen/bug-fix-labeling-process.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100755 .chloggen/bug-fix-labeling-process.yaml 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: "" From ca3c711c18d012d3937ea3574bafc4df6824abef Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Wed, 18 Oct 2023 16:34:31 +0200 Subject: [PATCH 3/7] Added required unit tests Signed-off-by: Yuri Sa --- tests/e2e/smoke-pod-labels/00-assert.yaml | 18 +++++++++++++ tests/e2e/smoke-pod-labels/00-install.yaml | 30 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 tests/e2e/smoke-pod-labels/00-assert.yaml create mode 100644 tests/e2e/smoke-pod-labels/00-install.yaml 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..9d77a038ec --- /dev/null +++ b/tests/e2e/smoke-pod-labels/00-assert.yaml @@ -0,0 +1,18 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: testlabel + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: testlabel + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: 0.81.0 +spec: + selector: + matchLabels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/part-of: opentelemetry +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..516a1732c6 --- /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:0.81.0@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532 + 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] From fca1d096256a153c06e500e3d025303bc5f07cdb Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Wed, 18 Oct 2023 16:58:24 +0200 Subject: [PATCH 4/7] Added required unit tests Signed-off-by: Yuri Sa --- internal/manifests/collector/labels.go | 2 +- internal/manifests/collector/labels_test.go | 23 +++++++++++++++++++-- tests/e2e/smoke-pod-labels/00-assert.yaml | 2 +- tests/e2e/smoke-pod-labels/00-install.yaml | 2 +- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/internal/manifests/collector/labels.go b/internal/manifests/collector/labels.go index 1169dc418f..ca586d8b0c 100644 --- a/internal/manifests/collector/labels.go +++ b/internal/manifests/collector/labels.go @@ -58,7 +58,7 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels case 3: base["app.kubernetes.io/version"] = versionLabel case 2: - base["app.kubernetes.io/version"] = version[len(version)-1] + 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 bf4c5e0d27..a2bb7629cc 100644 --- a/internal/manifests/collector/labels_test.go +++ b/internal/manifests/collector/labels_test.go @@ -57,7 +57,7 @@ func TestLabelsSha256Set(t *testing.T) { Namespace: collectorNamespace, }, Spec: v1alpha1.OpenTelemetryCollectorSpec{ - Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.81.0@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532", + Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532", }, } @@ -65,9 +65,28 @@ func TestLabelsSha256Set(t *testing.T) { 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, "0.81.0", labels["app.kubernetes.io/version"]) + 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 diff --git a/tests/e2e/smoke-pod-labels/00-assert.yaml b/tests/e2e/smoke-pod-labels/00-assert.yaml index 9d77a038ec..35e1326168 100644 --- a/tests/e2e/smoke-pod-labels/00-assert.yaml +++ b/tests/e2e/smoke-pod-labels/00-assert.yaml @@ -7,7 +7,7 @@ metadata: app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: testlabel app.kubernetes.io/part-of: opentelemetry - app.kubernetes.io/version: 0.81.0 + app.kubernetes.io/version: c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b53 spec: selector: matchLabels: diff --git a/tests/e2e/smoke-pod-labels/00-install.yaml b/tests/e2e/smoke-pod-labels/00-install.yaml index 516a1732c6..36927d3125 100644 --- a/tests/e2e/smoke-pod-labels/00-install.yaml +++ b/tests/e2e/smoke-pod-labels/00-install.yaml @@ -3,7 +3,7 @@ kind: OpenTelemetryCollector metadata: name: testlabel spec: - image: otel/opentelemetry-collector-contrib:0.81.0@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532 + image: otel/opentelemetry-collector-contrib@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532 config: | receivers: otlp: From 03fb0251e1c524df9f547bd5e932ab5464aea377 Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Thu, 19 Oct 2023 13:44:27 +0200 Subject: [PATCH 5/7] Changed unit tests Signed-off-by: Yuri Sa --- tests/e2e/smoke-pod-labels/00-install.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/smoke-pod-labels/00-install.yaml b/tests/e2e/smoke-pod-labels/00-install.yaml index 36927d3125..00843cf434 100644 --- a/tests/e2e/smoke-pod-labels/00-install.yaml +++ b/tests/e2e/smoke-pod-labels/00-install.yaml @@ -3,7 +3,7 @@ kind: OpenTelemetryCollector metadata: name: testlabel spec: - image: otel/opentelemetry-collector-contrib@sha256:c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b532 + image: otel/opentelemetry-collector-contrib@sha256:a0c6dea261b3d794971c23c5665173a39f0ce2aa09b9d88b753bd46776d7b05b config: | receivers: otlp: From 697f4798a0f57b0be65baa2f7f656746d9e132e1 Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Thu, 19 Oct 2023 14:09:42 +0200 Subject: [PATCH 6/7] Changed unit tests Signed-off-by: Yuri Sa --- tests/e2e/smoke-pod-labels/00-assert.yaml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/e2e/smoke-pod-labels/00-assert.yaml b/tests/e2e/smoke-pod-labels/00-assert.yaml index 35e1326168..989a17b469 100644 --- a/tests/e2e/smoke-pod-labels/00-assert.yaml +++ b/tests/e2e/smoke-pod-labels/00-assert.yaml @@ -1,18 +1,12 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: testlabel + name: testlabel-collector labels: app.kubernetes.io/component: opentelemetry-collector app.kubernetes.io/managed-by: opentelemetry-operator app.kubernetes.io/name: testlabel app.kubernetes.io/part-of: opentelemetry - app.kubernetes.io/version: c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b53 -spec: - selector: - matchLabels: - app.kubernetes.io/component: opentelemetry-collector - app.kubernetes.io/managed-by: opentelemetry-operator - app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: a0c6dea261b3d794971c23c5665173a39f0ce2aa09b9d88b753bd46776d7b05 status: readyReplicas: 1 From 674710fd85c49e91fe0b449bd21c6b7949154cba Mon Sep 17 00:00:00 2001 From: Yuri Sa Date: Thu, 19 Oct 2023 14:57:55 +0200 Subject: [PATCH 7/7] Changed unit tests Signed-off-by: Yuri Sa --- tests/e2e/smoke-pod-labels/00-assert.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/smoke-pod-labels/00-assert.yaml b/tests/e2e/smoke-pod-labels/00-assert.yaml index 989a17b469..8bb507544b 100644 --- a/tests/e2e/smoke-pod-labels/00-assert.yaml +++ b/tests/e2e/smoke-pod-labels/00-assert.yaml @@ -5,7 +5,7 @@ metadata: labels: app.kubernetes.io/component: opentelemetry-collector app.kubernetes.io/managed-by: opentelemetry-operator - app.kubernetes.io/name: testlabel + app.kubernetes.io/name: testlabel-collector app.kubernetes.io/part-of: opentelemetry app.kubernetes.io/version: a0c6dea261b3d794971c23c5665173a39f0ce2aa09b9d88b753bd46776d7b05 status: