Skip to content

Commit 6cc60bd

Browse files
make label functions generic (#2254)
1 parent 55f19a0 commit 6cc60bd

14 files changed

+57
-38
lines changed

internal/manifests/collector/collector.go

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ import (
2222
"github.com/open-telemetry/opentelemetry-operator/pkg/featuregate"
2323
)
2424

25+
const (
26+
ComponentOpenTelemetryCollector = "opentelemetry-collector"
27+
)
28+
2529
// Build creates the manifest for the collector resource.
2630
func Build(params manifests.Params) ([]client.Object, error) {
2731
var resourceManifests []client.Object

internal/manifests/collector/configmap.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ import (
1919
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2020

2121
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
22+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2223
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2324
)
2425

2526
func ConfigMap(params manifests.Params) *corev1.ConfigMap {
2627
name := naming.ConfigMap(params.OtelCol.Name)
27-
labels := Labels(params.OtelCol, name, []string{})
28+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
2829

2930
replacedConf, err := ReplaceConfig(params.OtelCol)
3031
if err != nil {

internal/manifests/collector/daemonset.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ import (
2020
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2121

2222
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
23+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2324
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2425
)
2526

2627
// DaemonSet builds the deployment for the given instance.
2728
func DaemonSet(params manifests.Params) *appsv1.DaemonSet {
2829
name := naming.Collector(params.OtelCol.Name)
29-
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
30+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
3031

3132
annotations := Annotations(params.OtelCol)
3233
podAnnotations := PodAnnotations(params.OtelCol)
@@ -39,7 +40,7 @@ func DaemonSet(params manifests.Params) *appsv1.DaemonSet {
3940
},
4041
Spec: appsv1.DaemonSetSpec{
4142
Selector: &metav1.LabelSelector{
42-
MatchLabels: SelectorLabels(params.OtelCol),
43+
MatchLabels: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
4344
},
4445
Template: corev1.PodTemplateSpec{
4546
ObjectMeta: metav1.ObjectMeta{

internal/manifests/collector/deployment.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ import (
2020
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2121

2222
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
23+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2324
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2425
)
2526

2627
// Deployment builds the deployment for the given instance.
2728
func Deployment(params manifests.Params) *appsv1.Deployment {
2829
name := naming.Collector(params.OtelCol.Name)
29-
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
30+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
3031

3132
annotations := Annotations(params.OtelCol)
3233
podAnnotations := PodAnnotations(params.OtelCol)
@@ -41,7 +42,7 @@ func Deployment(params manifests.Params) *appsv1.Deployment {
4142
Spec: appsv1.DeploymentSpec{
4243
Replicas: params.OtelCol.Spec.Replicas,
4344
Selector: &metav1.LabelSelector{
44-
MatchLabels: SelectorLabels(params.OtelCol),
45+
MatchLabels: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
4546
},
4647
Template: corev1.PodTemplateSpec{
4748
ObjectMeta: metav1.ObjectMeta{

internal/manifests/collector/horizontalpodautoscaler.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ import (
2222

2323
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2424
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
25+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2526
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2627
)
2728

2829
func HorizontalPodAutoscaler(params manifests.Params) client.Object {
2930
name := naming.Collector(params.OtelCol.Name)
30-
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
31+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
3132
annotations := Annotations(params.OtelCol)
3233
var result client.Object
3334

internal/manifests/collector/poddisruptionbudget.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"sigs.k8s.io/controller-runtime/pkg/client"
2121

2222
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
23+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2324
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2425
)
2526

@@ -31,7 +32,7 @@ func PodDisruptionBudget(params manifests.Params) client.Object {
3132
}
3233

3334
name := naming.Collector(params.OtelCol.Name)
34-
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
35+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
3536
annotations := Annotations(params.OtelCol)
3637

3738
objectMeta := metav1.ObjectMeta{

internal/manifests/collector/service.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2626
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
2727
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/adapters"
28+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2829
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2930
)
3031

@@ -58,7 +59,7 @@ func HeadlessService(params manifests.Params) *corev1.Service {
5859

5960
func MonitoringService(params manifests.Params) *corev1.Service {
6061
name := naming.MonitoringService(params.OtelCol.Name)
61-
labels := Labels(params.OtelCol, name, []string{})
62+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
6263

6364
c, err := adapters.ConfigFromString(params.OtelCol.Spec.Config)
6465
// TODO: Update this to properly return an error https://github.com/open-telemetry/opentelemetry-operator/issues/1972
@@ -81,7 +82,7 @@ func MonitoringService(params manifests.Params) *corev1.Service {
8182
Annotations: params.OtelCol.Annotations,
8283
},
8384
Spec: corev1.ServiceSpec{
84-
Selector: SelectorLabels(params.OtelCol),
85+
Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
8586
ClusterIP: "",
8687
Ports: []corev1.ServicePort{{
8788
Name: "monitoring",
@@ -93,7 +94,7 @@ func MonitoringService(params manifests.Params) *corev1.Service {
9394

9495
func Service(params manifests.Params) *corev1.Service {
9596
name := naming.Service(params.OtelCol.Name)
96-
labels := Labels(params.OtelCol, name, []string{})
97+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
9798

9899
configFromString, err := adapters.ConfigFromString(params.OtelCol.Spec.Config)
99100
if err != nil {
@@ -151,7 +152,7 @@ func Service(params manifests.Params) *corev1.Service {
151152
},
152153
Spec: corev1.ServiceSpec{
153154
InternalTrafficPolicy: &trafficPolicy,
154-
Selector: SelectorLabels(params.OtelCol),
155+
Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
155156
ClusterIP: "",
156157
Ports: ports,
157158
},

internal/manifests/collector/service_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323

2424
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
25+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2526

2627
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2728
"github.com/open-telemetry/opentelemetry-operator/internal/config"
@@ -207,7 +208,7 @@ func service(name string, ports []v1.ServicePort) v1.Service {
207208

208209
func serviceWithInternalTrafficPolicy(name string, ports []v1.ServicePort, internalTrafficPolicy v1.ServiceInternalTrafficPolicyType) v1.Service {
209210
params := deploymentParams()
210-
labels := Labels(params.OtelCol, name, []string{})
211+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
211212

212213
return v1.Service{
213214
ObjectMeta: metav1.ObjectMeta{
@@ -218,7 +219,7 @@ func serviceWithInternalTrafficPolicy(name string, ports []v1.ServicePort, inter
218219
},
219220
Spec: v1.ServiceSpec{
220221
InternalTrafficPolicy: &internalTrafficPolicy,
221-
Selector: SelectorLabels(params.OtelCol),
222+
Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
222223
ClusterIP: "",
223224
Ports: ports,
224225
},

internal/manifests/collector/serviceaccount.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2222
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
23+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2324
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2425
)
2526

@@ -35,7 +36,7 @@ func ServiceAccountName(instance v1alpha1.OpenTelemetryCollector) string {
3536
// ServiceAccount returns the service account for the given instance.
3637
func ServiceAccount(params manifests.Params) *corev1.ServiceAccount {
3738
name := naming.ServiceAccount(params.OtelCol.Name)
38-
labels := Labels(params.OtelCol, name, []string{})
39+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
3940

4041
return &corev1.ServiceAccount{
4142
ObjectMeta: metav1.ObjectMeta{

internal/manifests/collector/statefulset.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ import (
2020
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2121

2222
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
23+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2324
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2425
)
2526

2627
// StatefulSet builds the statefulset for the given instance.
2728
func StatefulSet(params manifests.Params) *appsv1.StatefulSet {
2829
name := naming.Collector(params.OtelCol.Name)
29-
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
30+
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
3031

3132
annotations := Annotations(params.OtelCol)
3233
podAnnotations := PodAnnotations(params.OtelCol)
@@ -41,7 +42,7 @@ func StatefulSet(params manifests.Params) *appsv1.StatefulSet {
4142
Spec: appsv1.StatefulSetSpec{
4243
ServiceName: naming.Service(params.OtelCol.Name),
4344
Selector: &metav1.LabelSelector{
44-
MatchLabels: SelectorLabels(params.OtelCol),
45+
MatchLabels: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
4546
},
4647
Template: corev1.PodTemplateSpec{
4748
ObjectMeta: metav1.ObjectMeta{

internal/manifests/collector/labels.go internal/manifests/manifestutils/labels.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package collector
15+
package manifestutils
1616

1717
import (
1818
"regexp"
1919
"strings"
2020

21-
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
21+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22+
2223
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2324
)
2425

@@ -27,12 +28,11 @@ func isFilteredLabel(label string, filterLabels []string) bool {
2728
match, _ := regexp.MatchString(pattern, label)
2829
return match
2930
}
30-
3131
return false
3232
}
3333

34-
// Labels return the common labels to all objects that are part of a managed OpenTelemetryCollector.
35-
func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels []string) map[string]string {
34+
// Labels return the common labels to all objects that are part of a managed CR.
35+
func Labels(instance metav1.ObjectMeta, name string, image string, component string, filterLabels []string) map[string]string {
3636
var versionLabel string
3737
// new map every time, so that we don't touch the instance's label
3838
base := map[string]string{}
@@ -44,11 +44,11 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels
4444
}
4545
}
4646

47-
for k, v := range SelectorLabels(instance) {
47+
for k, v := range SelectorLabels(instance, component) {
4848
base[k] = v
4949
}
5050

51-
version := strings.Split(instance.Spec.Image, ":")
51+
version := strings.Split(image, ":")
5252
for _, v := range version {
5353
if strings.HasSuffix(v, "@sha256") {
5454
versionLabel = strings.TrimSuffix(v, "@sha256")
@@ -67,18 +67,17 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels
6767
if _, ok := base["app.kubernetes.io/name"]; !ok {
6868
base["app.kubernetes.io/name"] = name
6969
}
70-
7170
return base
7271
}
7372

74-
// SelectorLabels return the common labels to all objects that are part of a managed OpenTelemetryCollector to use as selector.
73+
// SelectorLabels return the common labels to all objects that are part of a managed CR to use as selector.
7574
// Selector labels are immutable for Deployment, StatefulSet and DaemonSet, therefore, no labels in selector should be
7675
// expected to be modified for the lifetime of the object.
77-
func SelectorLabels(instance v1alpha1.OpenTelemetryCollector) map[string]string {
76+
func SelectorLabels(instance metav1.ObjectMeta, component string) map[string]string {
7877
return map[string]string{
7978
"app.kubernetes.io/managed-by": "opentelemetry-operator",
8079
"app.kubernetes.io/instance": naming.Truncate("%s.%s", 63, instance.Namespace, instance.Name),
8180
"app.kubernetes.io/part-of": "opentelemetry",
82-
"app.kubernetes.io/component": "opentelemetry-collector",
81+
"app.kubernetes.io/component": component,
8382
}
8483
}

internal/manifests/collector/labels_test.go internal/manifests/manifestutils/labels_test.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package collector_test
15+
package manifestutils
1616

1717
import (
1818
"testing"
@@ -21,7 +21,6 @@ import (
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2222

2323
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
24-
. "github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector"
2524
)
2625

2726
const (
@@ -42,7 +41,7 @@ func TestLabelsCommonSet(t *testing.T) {
4241
}
4342

4443
// test
45-
labels := Labels(otelcol, collectorName, []string{})
44+
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []string{})
4645
assert.Equal(t, "opentelemetry-operator", labels["app.kubernetes.io/managed-by"])
4746
assert.Equal(t, "my-ns.my-instance", labels["app.kubernetes.io/instance"])
4847
assert.Equal(t, "0.47.0", labels["app.kubernetes.io/version"])
@@ -62,7 +61,7 @@ func TestLabelsSha256Set(t *testing.T) {
6261
}
6362

6463
// test
65-
labels := Labels(otelcol, collectorName, []string{})
64+
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []string{})
6665
assert.Equal(t, "opentelemetry-operator", labels["app.kubernetes.io/managed-by"])
6766
assert.Equal(t, "my-ns.my-instance", labels["app.kubernetes.io/instance"])
6867
assert.Equal(t, "c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b53", labels["app.kubernetes.io/version"])
@@ -81,7 +80,7 @@ func TestLabelsSha256Set(t *testing.T) {
8180
}
8281

8382
// test
84-
labelsTag := Labels(otelcolTag, collectorName, []string{})
83+
labelsTag := Labels(otelcolTag.ObjectMeta, collectorName, otelcolTag.Spec.Image, "opentelemetry-collector", []string{})
8584
assert.Equal(t, "opentelemetry-operator", labelsTag["app.kubernetes.io/managed-by"])
8685
assert.Equal(t, "my-ns.my-instance", labelsTag["app.kubernetes.io/instance"])
8786
assert.Equal(t, "0.81.0", labelsTag["app.kubernetes.io/version"])
@@ -101,7 +100,7 @@ func TestLabelsTagUnset(t *testing.T) {
101100
}
102101

103102
// test
104-
labels := Labels(otelcol, collectorName, []string{})
103+
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []string{})
105104
assert.Equal(t, "opentelemetry-operator", labels["app.kubernetes.io/managed-by"])
106105
assert.Equal(t, "my-ns.my-instance", labels["app.kubernetes.io/instance"])
107106
assert.Equal(t, "latest", labels["app.kubernetes.io/version"])
@@ -118,10 +117,13 @@ func TestLabelsPropagateDown(t *testing.T) {
118117
"app.kubernetes.io/name": "test",
119118
},
120119
},
120+
Spec: v1alpha1.OpenTelemetryCollectorSpec{
121+
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator",
122+
},
121123
}
122124

123125
// test
124-
labels := Labels(otelcol, collectorName, []string{})
126+
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []string{})
125127

126128
// verify
127129
assert.Len(t, labels, 7)
@@ -134,10 +136,13 @@ func TestLabelsFilter(t *testing.T) {
134136
ObjectMeta: metav1.ObjectMeta{
135137
Labels: map[string]string{"test.bar.io": "foo", "test.foo.io": "bar"},
136138
},
139+
Spec: v1alpha1.OpenTelemetryCollectorSpec{
140+
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator",
141+
},
137142
}
138143

139144
// This requires the filter to be in regex match form and not the other simpler wildcard one.
140-
labels := Labels(otelcol, collectorName, []string{".*.bar.io"})
145+
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []string{".*.bar.io"})
141146

142147
// verify
143148
assert.Len(t, labels, 7)
@@ -158,7 +163,7 @@ func TestSelectorLabels(t *testing.T) {
158163
}
159164

160165
// test
161-
result := SelectorLabels(otelcol)
166+
result := SelectorLabels(otelcol.ObjectMeta, "opentelemetry-collector")
162167

163168
// verify
164169
assert.Equal(t, expected, result)

internal/manifests/targetallocator/configmap.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
2525
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
2626
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector"
27+
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
2728
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/targetallocator/adapters"
2829
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2930
)
@@ -51,7 +52,7 @@ func ConfigMap(params manifests.Params) (*corev1.ConfigMap, error) {
5152

5253
taConfig := make(map[interface{}]interface{})
5354
prometheusCRConfig := make(map[interface{}]interface{})
54-
taConfig["label_selector"] = collector.SelectorLabels(params.OtelCol)
55+
taConfig["label_selector"] = manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, collector.ComponentOpenTelemetryCollector)
5556
// We only take the "config" from the returned object, if it's present
5657
if prometheusConfig, ok := prometheusReceiverConfig["config"]; ok {
5758
taConfig["config"] = prometheusConfig

0 commit comments

Comments
 (0)