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

[chore] Make label functions generic #2254

Merged
Merged
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 internal/manifests/collector/collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ import (
"github.com/open-telemetry/opentelemetry-operator/pkg/featuregate"
)

const (
ComponentOpenTelemetryCollector = "opentelemetry-collector"
)

// Build creates the manifest for the collector resource.
func Build(params manifests.Params) ([]client.Object, error) {
var resourceManifests []client.Object
Expand Down
3 changes: 2 additions & 1 deletion internal/manifests/collector/configmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

replacedConf, err := ReplaceConfig(params.OtelCol)
if err != nil {
Expand Down
5 changes: 3 additions & 2 deletions internal/manifests/collector/daemonset.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

annotations := Annotations(params.OtelCol)
podAnnotations := PodAnnotations(params.OtelCol)
Expand All @@ -39,7 +40,7 @@ func DaemonSet(params manifests.Params) *appsv1.DaemonSet {
},
Spec: appsv1.DaemonSetSpec{
Selector: &metav1.LabelSelector{
MatchLabels: SelectorLabels(params.OtelCol),
MatchLabels: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Expand Down
5 changes: 3 additions & 2 deletions internal/manifests/collector/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

annotations := Annotations(params.OtelCol)
podAnnotations := PodAnnotations(params.OtelCol)
Expand All @@ -41,7 +42,7 @@ func Deployment(params manifests.Params) *appsv1.Deployment {
Spec: appsv1.DeploymentSpec{
Replicas: params.OtelCol.Spec.Replicas,
Selector: &metav1.LabelSelector{
MatchLabels: SelectorLabels(params.OtelCol),
MatchLabels: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Expand Down
3 changes: 2 additions & 1 deletion internal/manifests/collector/horizontalpodautoscaler.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ import (

"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

func HorizontalPodAutoscaler(params manifests.Params) client.Object {
name := naming.Collector(params.OtelCol.Name)
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
annotations := Annotations(params.OtelCol)
var result client.Object

Expand Down
3 changes: 2 additions & 1 deletion internal/manifests/collector/poddisruptionbudget.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

name := naming.Collector(params.OtelCol.Name)
labels := Labels(params.OtelCol, name, params.Config.LabelsFilter())
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, params.Config.LabelsFilter())
annotations := Annotations(params.OtelCol)

objectMeta := metav1.ObjectMeta{
Expand Down
9 changes: 5 additions & 4 deletions internal/manifests/collector/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/adapters"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

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

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

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

configFromString, err := adapters.ConfigFromString(params.OtelCol.Spec.Config)
if err != nil {
Expand Down Expand Up @@ -151,7 +152,7 @@ func Service(params manifests.Params) *corev1.Service {
},
Spec: corev1.ServiceSpec{
InternalTrafficPolicy: &trafficPolicy,
Selector: SelectorLabels(params.OtelCol),
Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
ClusterIP: "",
Ports: ports,
},
Expand Down
5 changes: 3 additions & 2 deletions internal/manifests/collector/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"

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

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

return v1.Service{
ObjectMeta: metav1.ObjectMeta{
Expand All @@ -218,7 +219,7 @@ func serviceWithInternalTrafficPolicy(name string, ports []v1.ServicePort, inter
},
Spec: v1.ServiceSpec{
InternalTrafficPolicy: &internalTrafficPolicy,
Selector: SelectorLabels(params.OtelCol),
Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
ClusterIP: "",
Ports: ports,
},
Expand Down
3 changes: 2 additions & 1 deletion internal/manifests/collector/serviceaccount.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (

"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

return &corev1.ServiceAccount{
ObjectMeta: metav1.ObjectMeta{
Expand Down
5 changes: 3 additions & 2 deletions internal/manifests/collector/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

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

annotations := Annotations(params.OtelCol)
podAnnotations := PodAnnotations(params.OtelCol)
Expand All @@ -41,7 +42,7 @@ func StatefulSet(params manifests.Params) *appsv1.StatefulSet {
Spec: appsv1.StatefulSetSpec{
ServiceName: naming.Service(params.OtelCol.Name),
Selector: &metav1.LabelSelector{
MatchLabels: SelectorLabels(params.OtelCol),
MatchLabels: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,14 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package collector
package manifestutils

import (
"regexp"
"strings"

"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)

Expand All @@ -27,12 +28,11 @@ func isFilteredLabel(label string, filterLabels []string) bool {
match, _ := regexp.MatchString(pattern, label)
return match
}

return false
}

// 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 {
// Labels return the common labels to all objects that are part of a managed CR.
func Labels(instance metav1.ObjectMeta, name string, image string, component 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{}
Expand All @@ -44,11 +44,11 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels
}
}

for k, v := range SelectorLabels(instance) {
for k, v := range SelectorLabels(instance, component) {
base[k] = v
}

version := strings.Split(instance.Spec.Image, ":")
version := strings.Split(image, ":")
for _, v := range version {
if strings.HasSuffix(v, "@sha256") {
versionLabel = strings.TrimSuffix(v, "@sha256")
Expand All @@ -67,18 +67,17 @@ func Labels(instance v1alpha1.OpenTelemetryCollector, name string, filterLabels
if _, ok := base["app.kubernetes.io/name"]; !ok {
base["app.kubernetes.io/name"] = name
}

return base
}

// SelectorLabels return the common labels to all objects that are part of a managed OpenTelemetryCollector to use as selector.
// SelectorLabels return the common labels to all objects that are part of a managed CR to use as selector.
// Selector labels are immutable for Deployment, StatefulSet and DaemonSet, therefore, no labels in selector should be
// expected to be modified for the lifetime of the object.
func SelectorLabels(instance v1alpha1.OpenTelemetryCollector) map[string]string {
func SelectorLabels(instance metav1.ObjectMeta, component string) map[string]string {
return map[string]string{
"app.kubernetes.io/managed-by": "opentelemetry-operator",
"app.kubernetes.io/instance": naming.Truncate("%s.%s", 63, instance.Namespace, instance.Name),
"app.kubernetes.io/part-of": "opentelemetry",
"app.kubernetes.io/component": "opentelemetry-collector",
"app.kubernetes.io/component": component,
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package collector_test
package manifestutils

import (
"testing"
Expand All @@ -21,7 +21,6 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

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

const (
Expand All @@ -42,7 +41,7 @@ func TestLabelsCommonSet(t *testing.T) {
}

// test
labels := Labels(otelcol, collectorName, []string{})
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []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.47.0", labels["app.kubernetes.io/version"])
Expand All @@ -62,7 +61,7 @@ func TestLabelsSha256Set(t *testing.T) {
}

// test
labels := Labels(otelcol, collectorName, []string{})
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []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, "c6671841470b83007e0553cdadbc9d05f6cfe17b3ebe9733728dc4a579a5b53", labels["app.kubernetes.io/version"])
Expand All @@ -81,7 +80,7 @@ func TestLabelsSha256Set(t *testing.T) {
}

// test
labelsTag := Labels(otelcolTag, collectorName, []string{})
labelsTag := Labels(otelcolTag.ObjectMeta, collectorName, otelcolTag.Spec.Image, "opentelemetry-collector", []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"])
Expand All @@ -101,7 +100,7 @@ func TestLabelsTagUnset(t *testing.T) {
}

// test
labels := Labels(otelcol, collectorName, []string{})
labels := Labels(otelcol.ObjectMeta, collectorName, otelcol.Spec.Image, "opentelemetry-collector", []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, "latest", labels["app.kubernetes.io/version"])
Expand All @@ -118,10 +117,13 @@ func TestLabelsPropagateDown(t *testing.T) {
"app.kubernetes.io/name": "test",
},
},
Spec: v1alpha1.OpenTelemetryCollectorSpec{
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator",
},
}

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

// verify
assert.Len(t, labels, 7)
Expand All @@ -134,10 +136,13 @@ func TestLabelsFilter(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{"test.bar.io": "foo", "test.foo.io": "bar"},
},
Spec: v1alpha1.OpenTelemetryCollectorSpec{
Image: "ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator",
},
}

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

// verify
assert.Len(t, labels, 7)
Expand All @@ -158,7 +163,7 @@ func TestSelectorLabels(t *testing.T) {
}

// test
result := SelectorLabels(otelcol)
result := SelectorLabels(otelcol.ObjectMeta, "opentelemetry-collector")

// verify
assert.Equal(t, expected, result)
Expand Down
3 changes: 2 additions & 1 deletion internal/manifests/targetallocator/configmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/targetallocator/adapters"
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
)
Expand Down Expand Up @@ -51,7 +52,7 @@ func ConfigMap(params manifests.Params) (*corev1.ConfigMap, error) {

taConfig := make(map[interface{}]interface{})
prometheusCRConfig := make(map[interface{}]interface{})
taConfig["label_selector"] = collector.SelectorLabels(params.OtelCol)
taConfig["label_selector"] = manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, collector.ComponentOpenTelemetryCollector)
// We only take the "config" from the returned object, if it's present
if prometheusConfig, ok := prometheusReceiverConfig["config"]; ok {
taConfig["config"] = prometheusConfig
Expand Down
Loading
Loading