Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support to set additional pod labels #3733

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions apis/v1beta1/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,10 @@ type OpenTelemetryCommonFields struct {
// the generated pods.
// +optional
PodAnnotations map[string]string `json:"podAnnotations,omitempty"`
// PodLabels is the set of labels that will be attached to
// Collector and Target Allocator pods.
// +optional
PodLabels map[string]string `json:"podLabels,omitempty"`
// ServiceAccount indicates the name of an existing service account to use with this instance. When set,
// the operator will not automatically create a ServiceAccount.
// +optional
Expand Down
7 changes: 7 additions & 0 deletions apis/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -7000,6 +7000,10 @@ spec:
type: array
x-kubernetes-list-type: atomic
type: object
podLabels:
additionalProperties:
type: string
type: object
podSecurityContext:
properties:
appArmorProfile:
Expand Down
4 changes: 4 additions & 0 deletions config/crd/bases/opentelemetry.io_targetallocators.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2142,6 +2142,10 @@ spec:
type: array
x-kubernetes-list-type: atomic
type: object
podLabels:
additionalProperties:
type: string
type: object
podSecurityContext:
properties:
appArmorProfile:
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/configmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func ConfigMap(params manifests.Params) (*corev1.ConfigMap, error) {
}
name := naming.ConfigMap(params.OtelCol.Name, hash)
collectorName := naming.Collector(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, collectorName, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, collectorName, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)

annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
Expand Down
13 changes: 11 additions & 2 deletions internal/manifests/collector/daemonset.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,22 @@ import (
// DaemonSet builds the deployment for the given instance.
func DaemonSet(params manifests.Params) (*appsv1.DaemonSet, error) {
name := naming.Collector(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))

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

podLabels := manifestutils.Labels(
params.OtelCol.ObjectMeta,
name,
params.OtelCol.Spec.Image,
ComponentOpenTelemetryCollector,
manifestutils.WithFilterLabels(params.Config.LabelsFilter()),
manifestutils.WithAdditionalLabels(params.OtelCol.Spec.PodLabels),
)

podAnnotations, err := manifestutils.PodAnnotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
return nil, err
Expand All @@ -41,7 +50,7 @@ func DaemonSet(params manifests.Params) (*appsv1.DaemonSet, error) {
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: labels,
Labels: podLabels,
Annotations: podAnnotations,
},
Spec: corev1.PodSpec{
Expand Down
41 changes: 40 additions & 1 deletion internal/manifests/collector/daemonset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,49 @@ func TestDaemonsetPodAnnotations(t *testing.T) {

// verify
assert.Equal(t, "my-instance-collector", ds.Name)
assert.Len(t, ds.Spec.Template.Annotations, 5)
assert.Equal(t, expectedAnnotations, ds.Spec.Template.Annotations)
}

func TestDaemonsetPodLabels(t *testing.T) {
// prepare
testPodLabelValues := map[string]string{"label-key": "label-value"}
otelcol := v1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "my-instance",
},
Spec: v1beta1.OpenTelemetryCollectorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
PodLabels: testPodLabelValues,
},
},
}
cfg := config.New()

params := manifests.Params{
Config: cfg,
OtelCol: otelcol,
Log: logger,
}

// test
ds, err := DaemonSet(params)
require.NoError(t, err)

expectedLabels := map[string]string{
"label-key": "label-value",
"app.kubernetes.io/component": "opentelemetry-collector",
"app.kubernetes.io/instance": "my-instance",
"app.kubernetes.io/managed-by": "opentelemetry-operator",
"app.kubernetes.io/name": "my-instance-collector",
"app.kubernetes.io/part-of": "opentelemetry",
"app.kubernetes.io/version": "latest",
}

// verify
assert.Equal(t, "my-instance-collector", ds.Name)
assert.Equal(t, expectedLabels, ds.Spec.Template.Labels)
}

func TestDaemonstPodSecurityContext(t *testing.T) {
runAsNonRoot := true
runAsUser := int64(1337)
Expand Down
13 changes: 11 additions & 2 deletions internal/manifests/collector/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,21 @@ import (
// Deployment builds the deployment for the given instance.
func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
name := naming.Collector(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
return nil, err
}

podLabels := manifestutils.Labels(
params.OtelCol.ObjectMeta,
name,
params.OtelCol.Spec.Image,
ComponentOpenTelemetryCollector,
manifestutils.WithFilterLabels(params.Config.LabelsFilter()),
manifestutils.WithAdditionalLabels(params.OtelCol.Spec.PodLabels),
)

podAnnotations, err := manifestutils.PodAnnotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
return nil, err
Expand All @@ -42,7 +51,7 @@ func Deployment(params manifests.Params) (*appsv1.Deployment, error) {
Strategy: params.OtelCol.Spec.DeploymentUpdateStrategy,
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: labels,
Labels: podLabels,
Annotations: podAnnotations,
},
Spec: corev1.PodSpec{
Expand Down
41 changes: 40 additions & 1 deletion internal/manifests/collector/deployment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,11 +160,50 @@ func TestDeploymentPodAnnotations(t *testing.T) {
}

// verify
assert.Len(t, d.Spec.Template.Annotations, 5)
assert.Equal(t, "my-instance-collector", d.Name)
assert.Equal(t, expectedPodAnnotationValues, d.Spec.Template.Annotations)
}

func TestDeploymentPodLabels(t *testing.T) {
// prepare
testPodLabelValues := map[string]string{"label-key": "label-value"}
otelcol := v1beta1.OpenTelemetryCollector{
ObjectMeta: metav1.ObjectMeta{
Name: "my-instance",
},
Spec: v1beta1.OpenTelemetryCollectorSpec{
OpenTelemetryCommonFields: v1beta1.OpenTelemetryCommonFields{
PodLabels: testPodLabelValues,
},
},
}
cfg := config.New()

params := manifests.Params{
Config: cfg,
OtelCol: otelcol,
Log: logger,
}

// test
d, err := Deployment(params)
require.NoError(t, err)

expectedLabels := map[string]string{
"label-key": "label-value",
"app.kubernetes.io/component": "opentelemetry-collector",
"app.kubernetes.io/instance": "my-instance",
"app.kubernetes.io/managed-by": "opentelemetry-operator",
"app.kubernetes.io/name": "my-instance-collector",
"app.kubernetes.io/part-of": "opentelemetry",
"app.kubernetes.io/version": "latest",
}

// verify
assert.Equal(t, "my-instance-collector", d.Name)
assert.Equal(t, expectedLabels, d.Spec.Template.Labels)
}

func TestDeploymenttPodSecurityContext(t *testing.T) {
runAsNonRoot := true
runAsUser := int64(1337)
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/horizontalpodautoscaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (

func HorizontalPodAutoscaler(params manifests.Params) (*autoscalingv2.HorizontalPodAutoscaler, error) {
name := naming.Collector(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (

func Ingress(params manifests.Params) (*networkingv1.Ingress, error) {
name := naming.Ingress(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
if params.OtelCol.Spec.Ingress.Type != v1beta1.IngressTypeIngress {
return nil, nil
}
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/poddisruptionbudget.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func PodDisruptionBudget(params manifests.Params) (*policyV1.PodDisruptionBudget
}

name := naming.Collector(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))
annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/podmonitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ func PodMonitor(params manifests.Params) (*monitoringv1.PodMonitor, error) {
}

name := naming.PodMonitor(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, nil)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector)
pm := monitoringv1.PodMonitor{
ObjectMeta: metav1.ObjectMeta{
Expand Down
4 changes: 2 additions & 2 deletions internal/manifests/collector/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func ClusterRole(params manifests.Params) (*rbacv1.ClusterRole, error) {
}

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

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

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

annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
Expand Down
6 changes: 3 additions & 3 deletions internal/manifests/collector/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func HeadlessService(params manifests.Params) (*corev1.Service, error) {

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

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

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

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

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

annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ func service(name string, ports []v1beta1.PortsSpec) v1.Service {

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

annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/serviceaccount.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func ServiceAccount(params manifests.Params) (*corev1.ServiceAccount, error) {
}

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

annotations, err := manifestutils.Annotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion internal/manifests/collector/servicemonitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func createServiceMonitor(name string, params manifests.Params, serviceType Serv

var sm monitoringv1.ServiceMonitor

labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector)
selectorLabels := manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector)
// This label is the one which differentiates the services
selectorLabels[serviceTypeLabel] = serviceType.String()
Expand Down
13 changes: 11 additions & 2 deletions internal/manifests/collector/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,22 @@ import (
// StatefulSet builds the statefulset for the given instance.
func StatefulSet(params manifests.Params) (*appsv1.StatefulSet, error) {
name := naming.Collector(params.OtelCol.Name)
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, manifestutils.WithFilterLabels(params.Config.LabelsFilter()))

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

podLabels := manifestutils.Labels(
params.OtelCol.ObjectMeta,
name,
params.OtelCol.Spec.Image,
ComponentOpenTelemetryCollector,
manifestutils.WithFilterLabels(params.Config.LabelsFilter()),
manifestutils.WithAdditionalLabels(params.OtelCol.Spec.PodLabels),
)

podAnnotations, err := manifestutils.PodAnnotations(params.OtelCol, params.Config.AnnotationsFilter())
if err != nil {
return nil, err
Expand All @@ -42,7 +51,7 @@ func StatefulSet(params manifests.Params) (*appsv1.StatefulSet, error) {
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: labels,
Labels: podLabels,
Annotations: podAnnotations,
},
Spec: corev1.PodSpec{
Expand Down
Loading