Skip to content

Commit ef474b3

Browse files
committed
Add support to set additional pod labels
1 parent 922e7a1 commit ef474b3

36 files changed

+330
-52
lines changed

apis/v1beta1/common.go

+4
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ type OpenTelemetryCommonFields struct {
134134
// the generated pods.
135135
// +optional
136136
PodAnnotations map[string]string `json:"podAnnotations,omitempty"`
137+
// PodLabels is the set of labels that will be attached to
138+
// Collector and Target Allocator pods.
139+
// +optional
140+
PodLabels map[string]string `json:"podLabels,omitempty"`
137141
// ServiceAccount indicates the name of an existing service account to use with this instance. When set,
138142
// the operator will not automatically create a ServiceAccount.
139143
// +optional

apis/v1beta1/zz_generated.deepcopy.go

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/manifests/collector/configmap.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func ConfigMap(params manifests.Params) (*corev1.ConfigMap, error) {
2525
}
2626
name := naming.ConfigMap(params.OtelCol.Name, hash)
2727
collectorName := naming.Collector(params.OtelCol.Name)
28-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, collectorName, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
28+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, collectorName, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
2929

3030
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
3131
if err != nil {

internal/manifests/collector/daemonset.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,22 @@ import (
1616
// DaemonSet builds the deployment for the given instance.
1717
func DaemonSet(params manifests.Params) (*appsv1.DaemonSet, error) {
1818
name := naming.Collector(params.OtelCol.Name)
19-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
19+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
2020

2121
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
2222
if err != nil {
2323
return nil, err
2424
}
2525

26+
podLabels := manifestutils.Labels(
27+
params.OtelCol.ObjectMeta,
28+
name,
29+
params.OtelCol.Spec.Image,
30+
ComponentOpenTelemetryCollector,
31+
manifestutils.WithFilterLabels(params.Config.LabelsFilter()),
32+
manifestutils.WithAdditionalLabels(params.OtelCol.Spec.PodLabels),
33+
)
34+
2635
podAnnotations, err := manifestutils.PodAnnotations(params.OtelCol, params.Config.AnnotationsFilter())
2736
if err != nil {
2837
return nil, err
@@ -41,7 +50,7 @@ func DaemonSet(params manifests.Params) (*appsv1.DaemonSet, error) {
4150
},
4251
Template: corev1.PodTemplateSpec{
4352
ObjectMeta: metav1.ObjectMeta{
44-
Labels: labels,
53+
Labels: podLabels,
4554
Annotations: podAnnotations,
4655
},
4756
Spec: corev1.PodSpec{

internal/manifests/collector/daemonset_test.go

+40-1
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,49 @@ func TestDaemonsetPodAnnotations(t *testing.T) {
159159

160160
// verify
161161
assert.Equal(t, "my-instance-collector", ds.Name)
162-
assert.Len(t, ds.Spec.Template.Annotations, 5)
163162
assert.Equal(t, expectedAnnotations, ds.Spec.Template.Annotations)
164163
}
165164

165+
func TestDaemonsetPodLabels(t *testing.T) {
166+
// prepare
167+
testPodLabelValues := map[string]string{"label-key": "label-value"}
168+
otelcol := v1beta1.OpenTelemetryCollector{
169+
ObjectMeta: metav1.ObjectMeta{
170+
Name: "my-instance",
171+
},
172+
Spec: v1beta1.OpenTelemetryCollectorSpec{
173+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
174+
PodLabels: testPodLabelValues,
175+
},
176+
},
177+
}
178+
cfg := config.New()
179+
180+
params := manifests.Params{
181+
Config: cfg,
182+
OtelCol: otelcol,
183+
Log: logger,
184+
}
185+
186+
// test
187+
ds, err := DaemonSet(params)
188+
require.NoError(t, err)
189+
190+
expectedLabels := map[string]string{
191+
"label-key": "label-value",
192+
"app.kubernetes.io/component": "opentelemetry-collector",
193+
"app.kubernetes.io/instance": "my-instance",
194+
"app.kubernetes.io/managed-by": "opentelemetry-operator",
195+
"app.kubernetes.io/name": "my-instance-collector",
196+
"app.kubernetes.io/part-of": "opentelemetry",
197+
"app.kubernetes.io/version": "latest",
198+
}
199+
200+
// verify
201+
assert.Equal(t, "my-instance-collector", ds.Name)
202+
assert.Equal(t, expectedLabels, ds.Spec.Template.Labels)
203+
}
204+
166205
func TestDaemonstPodSecurityContext(t *testing.T) {
167206
runAsNonRoot := true
168207
runAsUser := int64(1337)

internal/manifests/collector/deployment.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,21 @@ import (
1616
// Deployment builds the deployment for the given instance.
1717
func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
1818
name := naming.Collector(params.OtelCol.Name)
19-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
19+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
2020
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
2121
if err != nil {
2222
return nil, err
2323
}
2424

25+
podLabels := manifestutils.Labels(
26+
params.OtelCol.ObjectMeta,
27+
name,
28+
params.OtelCol.Spec.Image,
29+
ComponentOpenTelemetryCollector,
30+
manifestutils.WithFilterLabels(params.Config.LabelsFilter()),
31+
manifestutils.WithAdditionalLabels(params.OtelCol.Spec.PodLabels),
32+
)
33+
2534
podAnnotations, err := manifestutils.PodAnnotations(params.OtelCol, params.Config.AnnotationsFilter())
2635
if err != nil {
2736
return nil, err
@@ -42,7 +51,7 @@ func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
4251
Strategy: params.OtelCol.Spec.DeploymentUpdateStrategy,
4352
Template: corev1.PodTemplateSpec{
4453
ObjectMeta: metav1.ObjectMeta{
45-
Labels: labels,
54+
Labels: podLabels,
4655
Annotations: podAnnotations,
4756
},
4857
Spec: corev1.PodSpec{

internal/manifests/collector/deployment_test.go

+40-1
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,50 @@ func TestDeploymentPodAnnotations(t *testing.T) {
160160
}
161161

162162
// verify
163-
assert.Len(t, d.Spec.Template.Annotations, 5)
164163
assert.Equal(t, "my-instance-collector", d.Name)
165164
assert.Equal(t, expectedPodAnnotationValues, d.Spec.Template.Annotations)
166165
}
167166

167+
func TestDeploymentPodLabels(t *testing.T) {
168+
// prepare
169+
testPodLabelValues := map[string]string{"label-key": "label-value"}
170+
otelcol := v1beta1.OpenTelemetryCollector{
171+
ObjectMeta: metav1.ObjectMeta{
172+
Name: "my-instance",
173+
},
174+
Spec: v1beta1.OpenTelemetryCollectorSpec{
175+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
176+
PodLabels: testPodLabelValues,
177+
},
178+
},
179+
}
180+
cfg := config.New()
181+
182+
params := manifests.Params{
183+
Config: cfg,
184+
OtelCol: otelcol,
185+
Log: logger,
186+
}
187+
188+
// test
189+
d, err := Deployment(params)
190+
require.NoError(t, err)
191+
192+
expectedLabels := map[string]string{
193+
"label-key": "label-value",
194+
"app.kubernetes.io/component": "opentelemetry-collector",
195+
"app.kubernetes.io/instance": "my-instance",
196+
"app.kubernetes.io/managed-by": "opentelemetry-operator",
197+
"app.kubernetes.io/name": "my-instance-collector",
198+
"app.kubernetes.io/part-of": "opentelemetry",
199+
"app.kubernetes.io/version": "latest",
200+
}
201+
202+
// verify
203+
assert.Equal(t, "my-instance-collector", d.Name)
204+
assert.Equal(t, expectedLabels, d.Spec.Template.Labels)
205+
}
206+
168207
func TestDeploymenttPodSecurityContext(t *testing.T) {
169208
runAsNonRoot := true
170209
runAsUser := int64(1337)

internal/manifests/collector/horizontalpodautoscaler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616

1717
func HorizontalPodAutoscaler(params manifests.Params) (*autoscalingv2.HorizontalPodAutoscaler, error) {
1818
name := naming.Collector(params.OtelCol.Name)
19-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
19+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
2020
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
2121
if err != nil {
2222
return nil, err

internal/manifests/collector/ingress.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919

2020
func Ingress(params manifests.Params) (*networkingv1.Ingress, error) {
2121
name := naming.Ingress(params.OtelCol.Name)
22-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
22+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
2323
if params.OtelCol.Spec.Ingress.Type != v1beta1.IngressTypeIngress {
2424
return nil, nil
2525
}

internal/manifests/collector/poddisruptionbudget.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func PodDisruptionBudget(params manifests.Params) (*policyV1.PodDisruptionBudget
3131
}
3232

3333
name := naming.Collector(params.OtelCol.Name)
34-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
34+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
3535
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
3636
if err != nil {
3737
return nil, err

internal/manifests/collector/podmonitor.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func PodMonitor(params manifests.Params) (*monitoringv1.PodMonitor, error) {
2424
}
2525

2626
name := naming.PodMonitor(params.OtelCol.Name)
27-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, nil)
27+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
2828
selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector)
2929
pm := monitoringv1.PodMonitor{
3030
ObjectMeta: metav1.ObjectMeta{

internal/manifests/collector/rbac.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func ClusterRole(params manifests.Params) (*rbacv1.ClusterRole, error) {
2525
}
2626

2727
name := naming.ClusterRole(params.OtelCol.Name, params.OtelCol.Namespace)
28-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
28+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
2929

3030
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
3131
if err != nil {
@@ -51,7 +51,7 @@ func ClusterRoleBinding(params manifests.Params) (*rbacv1.ClusterRoleBinding, er
5151
}
5252

5353
name := naming.ClusterRoleBinding(params.OtelCol.Name, params.OtelCol.Namespace)
54-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
54+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
5555

5656
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
5757
if err != nil {

internal/manifests/collector/service.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func HeadlessService(params manifests.Params) (*corev1.Service, error) {
6363

6464
func MonitoringService(params manifests.Params) (*corev1.Service, error) {
6565
name := naming.MonitoringService(params.OtelCol.Name)
66-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
66+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
6767
labels[monitoringLabel] = valueExists
6868
labels[serviceTypeLabel] = MonitoringServiceType.String()
6969

@@ -99,7 +99,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) {
9999

100100
func ExtensionService(params manifests.Params) (*corev1.Service, error) {
101101
name := naming.ExtensionService(params.OtelCol.Name)
102-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
102+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
103103
labels[serviceTypeLabel] = ExtensionServiceType.String()
104104

105105
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
@@ -132,7 +132,7 @@ func ExtensionService(params manifests.Params) (*corev1.Service, error) {
132132

133133
func Service(params manifests.Params) (*corev1.Service, error) {
134134
name := naming.Service(params.OtelCol.Name)
135-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
135+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
136136
labels[serviceTypeLabel] = BaseServiceType.String()
137137

138138
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())

internal/manifests/collector/service_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ func service(name string, ports []v1beta1.PortsSpec) v1.Service {
517517

518518
func serviceWithInternalTrafficPolicy(name string, ports []v1beta1.PortsSpec, internalTrafficPolicy v1.ServiceInternalTrafficPolicyType) v1.Service {
519519
params := deploymentParams()
520-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
520+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
521521
labels[serviceTypeLabel] = BaseServiceType.String()
522522

523523
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())

internal/manifests/collector/serviceaccount.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func ServiceAccount(params manifests.Params) (*corev1.ServiceAccount, error) {
2929
}
3030

3131
name := naming.ServiceAccount(params.OtelCol.Name)
32-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
32+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
3333

3434
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
3535
if err != nil {

internal/manifests/collector/servicemonitor.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func createServiceMonitor(name string, params manifests.Params, serviceType Serv
4848

4949
var sm monitoringv1.ServiceMonitor
5050

51-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
51+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
5252
selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector)
5353
// This label is the one which differentiates the services
5454
selectorLabels[serviceTypeLabel] = serviceType.String()

internal/manifests/collector/statefulset.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,22 @@ import (
1616
// StatefulSet builds the statefulset for the given instance.
1717
func StatefulSet(params manifests.Params) (*appsv1.StatefulSet, error) {
1818
name := naming.Collector(params.OtelCol.Name)
19-
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
19+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
2020

2121
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
2222
if err != nil {
2323
return nil, err
2424
}
2525

26+
podLabels := manifestutils.Labels(
27+
params.OtelCol.ObjectMeta,
28+
name,
29+
params.OtelCol.Spec.Image,
30+
ComponentOpenTelemetryCollector,
31+
manifestutils.WithFilterLabels(params.Config.LabelsFilter()),
32+
manifestutils.WithAdditionalLabels(params.OtelCol.Spec.PodLabels),
33+
)
34+
2635
podAnnotations, err := manifestutils.PodAnnotations(params.OtelCol, params.Config.AnnotationsFilter())
2736
if err != nil {
2837
return nil, err
@@ -42,7 +51,7 @@ func StatefulSet(params manifests.Params) (*appsv1.StatefulSet, error) {
4251
},
4352
Template: corev1.PodTemplateSpec{
4453
ObjectMeta: metav1.ObjectMeta{
45-
Labels: labels,
54+
Labels: podLabels,
4655
Annotations: podAnnotations,
4756
},
4857
Spec: corev1.PodSpec{

internal/manifests/collector/statefulset_test.go

+39
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,45 @@ func TestStatefulSetPodAnnotations(t *testing.T) {
246246
assert.Equal(t, expectedAnnotations, ss.Spec.Template.Annotations)
247247
}
248248

249+
func TestStatefulSetPodLabels(t *testing.T) {
250+
// prepare
251+
testPodLabelValues := map[string]string{"label-key": "label-value"}
252+
otelcol := v1beta1.OpenTelemetryCollector{
253+
ObjectMeta: metav1.ObjectMeta{
254+
Name: "my-instance",
255+
},
256+
Spec: v1beta1.OpenTelemetryCollectorSpec{
257+
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
258+
PodLabels: testPodLabelValues,
259+
},
260+
},
261+
}
262+
cfg := config.New()
263+
264+
params := manifests.Params{
265+
OtelCol: otelcol,
266+
Config: cfg,
267+
Log: logger,
268+
}
269+
270+
// test
271+
ss, err := StatefulSet(params)
272+
require.NoError(t, err)
273+
274+
expectedLabels := map[string]string{
275+
"label-key": "label-value",
276+
"app.kubernetes.io/component": "opentelemetry-collector",
277+
"app.kubernetes.io/instance": "my-instance",
278+
"app.kubernetes.io/managed-by": "opentelemetry-operator",
279+
"app.kubernetes.io/name": "my-instance-collector",
280+
"app.kubernetes.io/part-of": "opentelemetry",
281+
"app.kubernetes.io/version": "latest",
282+
}
283+
// verify
284+
assert.Equal(t, "my-instance-collector", ss.Name)
285+
assert.Equal(t, expectedLabels, ss.Spec.Template.Labels)
286+
}
287+
249288
func TestStatefulSetPodSecurityContext(t *testing.T) {
250289
runAsNonRoot := true
251290
runAsUser := int64(1337)

internal/manifests/collector/targetallocator.go

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func TargetAllocator(params manifests.Params) (*v1alpha1.TargetAllocator, error)
4040
Tolerations: taSpec.Tolerations,
4141
Env: taSpec.Env,
4242
PodAnnotations: params.OtelCol.Spec.PodAnnotations,
43+
PodLabels: params.OtelCol.Spec.PodLabels,
4344
PodDisruptionBudget: taSpec.PodDisruptionBudget,
4445
},
4546
AllocationStrategy: taSpec.AllocationStrategy,

0 commit comments

Comments
 (0)