Skip to content

Commit 8dba0ce

Browse files
authored
Add recommended label "app.kubernetes.io/version" for operand (open-telemetry#797)
* Including new label Signed-off-by: Yuri Sa <yurimsa@gmail.com> * Checking len of version var Signed-off-by: Yuri Sa <yurimsa@gmail.com> * Fixing function signature Signed-off-by: Yuri Sa <yurimsa@gmail.com> * Fixing linters Signed-off-by: Yuri Sa <yurimsa@gmail.com> * Fixing number of labels in test files Signed-off-by: Yuri Sa <yurimsa@gmail.com> * Test len of label version for configmap Signed-off-by: Yuri Sa <yurimsa@gmail.com> * Added missing len check Signed-off-by: Yuri Sa <yurimsa@gmail.com>
1 parent d7f166a commit 8dba0ce

8 files changed

+53
-5
lines changed

pkg/collector/daemonset_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func TestDaemonsetFilterLabels(t *testing.T) {
148148

149149
d := DaemonSet(cfg, logger, otelcol)
150150

151-
assert.Len(t, d.ObjectMeta.Labels, 5)
151+
assert.Len(t, d.ObjectMeta.Labels, 6)
152152
for k := range excludedLabels {
153153
assert.NotContains(t, d.ObjectMeta.Labels, k)
154154
}

pkg/collector/deployment_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func TestDeploymentFilterLabels(t *testing.T) {
170170

171171
d := Deployment(cfg, logger, otelcol)
172172

173-
assert.Len(t, d.ObjectMeta.Labels, 5)
173+
assert.Len(t, d.ObjectMeta.Labels, 6)
174174
for k := range excludedLabels {
175175
assert.NotContains(t, d.ObjectMeta.Labels, k)
176176
}

pkg/collector/labels.go

+7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package collector
1616

1717
import (
1818
"regexp"
19+
"strings"
1920

2021
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2122
"github.com/open-telemetry/opentelemetry-operator/pkg/naming"
@@ -46,6 +47,12 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, filterLabels []string) map
4647
base["app.kubernetes.io/instance"] = naming.Truncate("%s.%s", 63, instance.Namespace, instance.Name)
4748
base["app.kubernetes.io/part-of"] = "opentelemetry"
4849
base["app.kubernetes.io/component"] = "opentelemetry-collector"
50+
version := strings.Split(instance.Spec.Image, ":")
51+
if len(version) > 1 {
52+
base["app.kubernetes.io/version"] = version[len(version)-1]
53+
} else {
54+
base["app.kubernetes.io/version"] = "latest"
55+
}
4956

5057
return base
5158
}

pkg/collector/labels_test.go

+27-2
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,37 @@ func TestLabelsCommonSet(t *testing.T) {
3131
Name: "my-instance",
3232
Namespace: "my-ns",
3333
},
34+
Spec: v1alpha1.OpenTelemetryCollectorSpec{
35+
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.47.0",
36+
},
37+
}
38+
39+
// test
40+
labels := Labels(otelcol, []string{})
41+
assert.Equal(t, "opentelemetry-operator", labels["app.kubernetes.io/managed-by"])
42+
assert.Equal(t, "my-ns.my-instance", labels["app.kubernetes.io/instance"])
43+
assert.Equal(t, "0.47.0", labels["app.kubernetes.io/version"])
44+
assert.Equal(t, "opentelemetry", labels["app.kubernetes.io/part-of"])
45+
assert.Equal(t, "opentelemetry-collector", labels["app.kubernetes.io/component"])
46+
}
47+
48+
func TestLabelsTagUnset(t *testing.T) {
49+
// prepare
50+
otelcol := v1alpha1.OpenTelemetryCollector{
51+
ObjectMeta: metav1.ObjectMeta{
52+
Name: "my-instance",
53+
Namespace: "my-ns",
54+
},
55+
Spec: v1alpha1.OpenTelemetryCollectorSpec{
56+
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator",
57+
},
3458
}
3559

3660
// test
3761
labels := Labels(otelcol, []string{})
3862
assert.Equal(t, "opentelemetry-operator", labels["app.kubernetes.io/managed-by"])
3963
assert.Equal(t, "my-ns.my-instance", labels["app.kubernetes.io/instance"])
64+
assert.Equal(t, "latest", labels["app.kubernetes.io/version"])
4065
assert.Equal(t, "opentelemetry", labels["app.kubernetes.io/part-of"])
4166
assert.Equal(t, "opentelemetry-collector", labels["app.kubernetes.io/component"])
4267
}
@@ -53,7 +78,7 @@ func TestLabelsPropagateDown(t *testing.T) {
5378
labels := Labels(otelcol, []string{})
5479

5580
// verify
56-
assert.Len(t, labels, 5)
81+
assert.Len(t, labels, 6)
5782
assert.Equal(t, "mycomponent", labels["myapp"])
5883
}
5984

@@ -68,7 +93,7 @@ func TestLabelsFilter(t *testing.T) {
6893
labels := Labels(otelcol, []string{".*.bar.io"})
6994

7095
// verify
71-
assert.Len(t, labels, 5)
96+
assert.Len(t, labels, 6)
7297
assert.NotContains(t, labels, "test.bar.io")
7398
assert.Equal(t, "bar", labels["test.foo.io"])
7499
}

pkg/collector/reconcile/configmap.go

+13
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"context"
1919
"fmt"
2020
"reflect"
21+
"strings"
2122

2223
"gopkg.in/yaml.v2"
2324
corev1 "k8s.io/api/core/v1"
@@ -64,8 +65,14 @@ func ConfigMaps(ctx context.Context, params Params) error {
6465

6566
func desiredConfigMap(_ context.Context, params Params) corev1.ConfigMap {
6667
name := naming.ConfigMap(params.Instance)
68+
version := strings.Split(params.Instance.Spec.Image, ":")
6769
labels := collector.Labels(params.Instance, []string{})
6870
labels["app.kubernetes.io/name"] = name
71+
if len(version) > 1 {
72+
labels["app.kubernetes.io/version"] = version[len(version)-1]
73+
} else {
74+
labels["app.kubernetes.io/version"] = "latest"
75+
}
6976
config, err := ReplaceConfig(params)
7077
if err != nil {
7178
params.Log.V(2).Info("failed to update prometheus config to use sharded targets: ", err)
@@ -86,8 +93,14 @@ func desiredConfigMap(_ context.Context, params Params) corev1.ConfigMap {
8693

8794
func desiredTAConfigMap(params Params) (corev1.ConfigMap, error) {
8895
name := naming.TAConfigMap(params.Instance)
96+
version := strings.Split(params.Instance.Spec.Image, ":")
8997
labels := targetallocator.Labels(params.Instance)
9098
labels["app.kubernetes.io/name"] = name
99+
if len(version) > 1 {
100+
labels["app.kubernetes.io/version"] = version[len(version)-1]
101+
} else {
102+
labels["app.kubernetes.io/version"] = "latest"
103+
}
91104

92105
promConfig, err := ta.ConfigToPromConfig(params.Instance.Spec.Config)
93106
if err != nil {

pkg/collector/reconcile/configmap_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ func TestDesiredConfigMap(t *testing.T) {
3636
"app.kubernetes.io/managed-by": "opentelemetry-operator",
3737
"app.kubernetes.io/instance": "default.test",
3838
"app.kubernetes.io/part-of": "opentelemetry",
39+
"app.kubernetes.io/version": "0.47.0",
3940
}
4041

4142
t.Run("should return expected collector config map", func(t *testing.T) {
4243
expectedLables["app.kubernetes.io/component"] = "opentelemetry-collector"
4344
expectedLables["app.kubernetes.io/name"] = "test-collector"
45+
expectedLables["app.kubernetes.io/version"] = "0.47.0"
4446

4547
expectedData := map[string]string{
4648
"collector.yaml": `processors:

pkg/collector/reconcile/suite_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ func params() Params {
182182
UID: instanceUID,
183183
},
184184
Spec: v1alpha1.OpenTelemetryCollectorSpec{
185+
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.47.0",
185186
Ports: []v1.ServicePort{{
186187
Name: "web",
187188
Port: 80,

pkg/collector/statefulset_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ func TestStatefulSetFilterLabels(t *testing.T) {
229229

230230
d := StatefulSet(cfg, logger, otelcol)
231231

232-
assert.Len(t, d.ObjectMeta.Labels, 5)
232+
assert.Len(t, d.ObjectMeta.Labels, 6)
233233
for k := range excludedLabels {
234234
assert.NotContains(t, d.ObjectMeta.Labels, k)
235235
}

0 commit comments

Comments
 (0)