Skip to content

Commit adcc1f7

Browse files
committed
internal/manifests/collector: switch internally to v1alphav2
Signed-off-by: Benedikt Bongartz <[email protected]>
1 parent d6f3c31 commit adcc1f7

25 files changed

+683
-333
lines changed

controllers/builder_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ service:
125125
"app.kubernetes.io/version": "latest",
126126
},
127127
Annotations: map[string]string{
128-
"opentelemetry-operator-config/sha256": "8188c85abd4aa5e9c798874b4f47d37f08d4778933154e3f7d60246510ed9dd2",
128+
"opentelemetry-operator-config/sha256": "6f6f11da374b2c1e42fc78fbe55e2d9bcc2f5998ab63a631b49c478e8c0f6af8",
129129
"prometheus.io/path": "/metrics",
130130
"prometheus.io/port": "8888",
131131
"prometheus.io/scrape": "true",
@@ -147,7 +147,7 @@ service:
147147
"app.kubernetes.io/version": "latest",
148148
},
149149
Annotations: map[string]string{
150-
"opentelemetry-operator-config/sha256": "8188c85abd4aa5e9c798874b4f47d37f08d4778933154e3f7d60246510ed9dd2",
150+
"opentelemetry-operator-config/sha256": "6f6f11da374b2c1e42fc78fbe55e2d9bcc2f5998ab63a631b49c478e8c0f6af8",
151151
"prometheus.io/path": "/metrics",
152152
"prometheus.io/port": "8888",
153153
"prometheus.io/scrape": "true",
@@ -369,7 +369,7 @@ service:
369369
"app.kubernetes.io/version": "latest",
370370
},
371371
Annotations: map[string]string{
372-
"opentelemetry-operator-config/sha256": "8188c85abd4aa5e9c798874b4f47d37f08d4778933154e3f7d60246510ed9dd2",
372+
"opentelemetry-operator-config/sha256": "6f6f11da374b2c1e42fc78fbe55e2d9bcc2f5998ab63a631b49c478e8c0f6af8",
373373
"prometheus.io/path": "/metrics",
374374
"prometheus.io/port": "8888",
375375
"prometheus.io/scrape": "true",
@@ -391,7 +391,7 @@ service:
391391
"app.kubernetes.io/version": "latest",
392392
},
393393
Annotations: map[string]string{
394-
"opentelemetry-operator-config/sha256": "8188c85abd4aa5e9c798874b4f47d37f08d4778933154e3f7d60246510ed9dd2",
394+
"opentelemetry-operator-config/sha256": "6f6f11da374b2c1e42fc78fbe55e2d9bcc2f5998ab63a631b49c478e8c0f6af8",
395395
"prometheus.io/path": "/metrics",
396396
"prometheus.io/port": "8888",
397397
"prometheus.io/scrape": "true",
@@ -646,7 +646,7 @@ service:
646646
"app.kubernetes.io/version": "latest",
647647
},
648648
Annotations: map[string]string{
649-
"opentelemetry-operator-config/sha256": "8188c85abd4aa5e9c798874b4f47d37f08d4778933154e3f7d60246510ed9dd2",
649+
"opentelemetry-operator-config/sha256": "6f6f11da374b2c1e42fc78fbe55e2d9bcc2f5998ab63a631b49c478e8c0f6af8",
650650
"prometheus.io/path": "/metrics",
651651
"prometheus.io/port": "8888",
652652
"prometheus.io/scrape": "true",
@@ -668,7 +668,7 @@ service:
668668
"app.kubernetes.io/version": "latest",
669669
},
670670
Annotations: map[string]string{
671-
"opentelemetry-operator-config/sha256": "8188c85abd4aa5e9c798874b4f47d37f08d4778933154e3f7d60246510ed9dd2",
671+
"opentelemetry-operator-config/sha256": "6f6f11da374b2c1e42fc78fbe55e2d9bcc2f5998ab63a631b49c478e8c0f6af8",
672672
"prometheus.io/path": "/metrics",
673673
"prometheus.io/port": "8888",
674674
"prometheus.io/scrape": "true",
@@ -1157,7 +1157,7 @@ service:
11571157
"app.kubernetes.io/version": "latest",
11581158
},
11591159
Annotations: map[string]string{
1160-
"opentelemetry-operator-config/sha256": "5fe4d7d7faf3247bd7ec88688c9f73618f9ab8e170362bd7203c54e7a2f5cec0",
1160+
"opentelemetry-operator-config/sha256": "39cae697770f9d7e183e8fa9ba56043315b62e19c7231537870acfaaabc30a43",
11611161
"prometheus.io/path": "/metrics",
11621162
"prometheus.io/port": "8888",
11631163
"prometheus.io/scrape": "true",
@@ -1180,7 +1180,7 @@ service:
11801180
"app.kubernetes.io/version": "latest",
11811181
},
11821182
Annotations: map[string]string{
1183-
"opentelemetry-operator-config/sha256": "5fe4d7d7faf3247bd7ec88688c9f73618f9ab8e170362bd7203c54e7a2f5cec0",
1183+
"opentelemetry-operator-config/sha256": "39cae697770f9d7e183e8fa9ba56043315b62e19c7231537870acfaaabc30a43",
11841184
"prometheus.io/path": "/metrics",
11851185
"prometheus.io/port": "8888",
11861186
"prometheus.io/scrape": "true",
@@ -1549,7 +1549,7 @@ label_selector:
15491549
"app.kubernetes.io/version": "latest",
15501550
},
15511551
Annotations: map[string]string{
1552-
"opentelemetry-operator-config/sha256": "5fe4d7d7faf3247bd7ec88688c9f73618f9ab8e170362bd7203c54e7a2f5cec0",
1552+
"opentelemetry-operator-config/sha256": "39cae697770f9d7e183e8fa9ba56043315b62e19c7231537870acfaaabc30a43",
15531553
"prometheus.io/path": "/metrics",
15541554
"prometheus.io/port": "8888",
15551555
"prometheus.io/scrape": "true",
@@ -1572,7 +1572,7 @@ label_selector:
15721572
"app.kubernetes.io/version": "latest",
15731573
},
15741574
Annotations: map[string]string{
1575-
"opentelemetry-operator-config/sha256": "5fe4d7d7faf3247bd7ec88688c9f73618f9ab8e170362bd7203c54e7a2f5cec0",
1575+
"opentelemetry-operator-config/sha256": "39cae697770f9d7e183e8fa9ba56043315b62e19c7231537870acfaaabc30a43",
15761576
"prometheus.io/path": "/metrics",
15771577
"prometheus.io/port": "8888",
15781578
"prometheus.io/scrape": "true",

internal/api/convert/v1alpha.go

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package convert
16+
17+
import (
18+
"encoding/json"
19+
20+
appsv1 "k8s.io/api/apps/v1"
21+
"sigs.k8s.io/yaml"
22+
23+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
24+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha2"
25+
)
26+
27+
func V1Alpha1to2(in v1alpha1.OpenTelemetryCollector) v1alpha2.OpenTelemetryCollector {
28+
copy := in.DeepCopy()
29+
out := v1alpha2.OpenTelemetryCollector{
30+
TypeMeta: copy.TypeMeta,
31+
ObjectMeta: copy.ObjectMeta,
32+
}
33+
34+
collectorJson, err := yaml.YAMLToJSON([]byte(in.Spec.Config))
35+
if err != nil {
36+
return v1alpha2.OpenTelemetryCollector{}
37+
}
38+
39+
cfg := &v1alpha2.Config{}
40+
if err := json.Unmarshal(collectorJson, cfg); err != nil {
41+
return v1alpha2.OpenTelemetryCollector{}
42+
}
43+
out.Spec.Config = *cfg
44+
45+
out.Spec.OpenTelemetryCommonFields.ManagementState = v1alpha2.ManagementStateType(copy.Spec.ManagementState)
46+
out.Spec.OpenTelemetryCommonFields.Resources = copy.Spec.Resources
47+
out.Spec.OpenTelemetryCommonFields.NodeSelector = copy.Spec.NodeSelector
48+
out.Spec.OpenTelemetryCommonFields.Args = copy.Spec.NodeSelector
49+
out.Spec.OpenTelemetryCommonFields.Replicas = copy.Spec.Replicas
50+
51+
if copy.Spec.Autoscaler != nil {
52+
metrics := make([]v1alpha2.MetricSpec, len(copy.Spec.Autoscaler.Metrics))
53+
for i, m := range copy.Spec.Autoscaler.Metrics {
54+
metrics[i] = v1alpha2.MetricSpec{
55+
Type: m.Type,
56+
Pods: m.Pods,
57+
}
58+
}
59+
out.Spec.OpenTelemetryCommonFields.Autoscaler = &v1alpha2.AutoscalerSpec{
60+
MinReplicas: copy.Spec.Autoscaler.MinReplicas,
61+
MaxReplicas: copy.Spec.Autoscaler.MaxReplicas,
62+
Behavior: copy.Spec.Autoscaler.Behavior,
63+
Metrics: metrics,
64+
TargetCPUUtilization: copy.Spec.Autoscaler.TargetCPUUtilization,
65+
TargetMemoryUtilization: copy.Spec.Autoscaler.TargetMemoryUtilization,
66+
}
67+
}
68+
69+
if copy.Spec.PodDisruptionBudget != nil {
70+
out.Spec.OpenTelemetryCommonFields.PodDisruptionBudget = &v1alpha2.PodDisruptionBudgetSpec{
71+
MinAvailable: copy.Spec.PodDisruptionBudget.MinAvailable,
72+
MaxUnavailable: copy.Spec.PodDisruptionBudget.MaxUnavailable,
73+
}
74+
}
75+
if copy.Spec.SecurityContext != nil {
76+
out.Spec.OpenTelemetryCommonFields.SecurityContext = copy.Spec.SecurityContext
77+
}
78+
if copy.Spec.PodSecurityContext != nil {
79+
out.Spec.OpenTelemetryCommonFields.PodSecurityContext = copy.Spec.PodSecurityContext
80+
}
81+
out.Spec.OpenTelemetryCommonFields.PodAnnotations = copy.Spec.PodAnnotations
82+
out.Spec.OpenTelemetryCommonFields.ServiceAccount = copy.Spec.ServiceAccount
83+
out.Spec.OpenTelemetryCommonFields.Image = copy.Spec.Image
84+
out.Spec.OpenTelemetryCommonFields.ImagePullPolicy = copy.Spec.ImagePullPolicy
85+
out.Spec.OpenTelemetryCommonFields.VolumeMounts = copy.Spec.VolumeMounts
86+
out.Spec.OpenTelemetryCommonFields.Ports = copy.Spec.Ports
87+
out.Spec.OpenTelemetryCommonFields.Env = copy.Spec.Env
88+
out.Spec.OpenTelemetryCommonFields.EnvFrom = copy.Spec.EnvFrom
89+
out.Spec.OpenTelemetryCommonFields.VolumeClaimTemplates = copy.Spec.VolumeClaimTemplates
90+
out.Spec.OpenTelemetryCommonFields.Tolerations = copy.Spec.Tolerations
91+
out.Spec.OpenTelemetryCommonFields.Volumes = copy.Spec.Volumes
92+
out.Spec.OpenTelemetryCommonFields.Affinity = copy.Spec.Affinity
93+
out.Spec.OpenTelemetryCommonFields.Lifecycle = copy.Spec.Lifecycle
94+
out.Spec.OpenTelemetryCommonFields.TerminationGracePeriodSeconds = copy.Spec.TerminationGracePeriodSeconds
95+
out.Spec.OpenTelemetryCommonFields.TopologySpreadConstraints = copy.Spec.TopologySpreadConstraints
96+
out.Spec.OpenTelemetryCommonFields.HostNetwork = copy.Spec.HostNetwork
97+
out.Spec.OpenTelemetryCommonFields.ShareProcessNamespace = copy.Spec.ShareProcessNamespace
98+
out.Spec.OpenTelemetryCommonFields.PriorityClassName = copy.Spec.PriorityClassName
99+
out.Spec.OpenTelemetryCommonFields.InitContainers = copy.Spec.InitContainers
100+
out.Spec.OpenTelemetryCommonFields.AdditionalContainers = copy.Spec.AdditionalContainers
101+
102+
out.Spec.TargetAllocator.Replicas = copy.Spec.TargetAllocator.Replicas
103+
out.Spec.TargetAllocator.NodeSelector = copy.Spec.TargetAllocator.NodeSelector
104+
out.Spec.TargetAllocator.Resources = copy.Spec.TargetAllocator.Resources
105+
out.Spec.TargetAllocator.AllocationStrategy = copy.Spec.TargetAllocator.AllocationStrategy
106+
out.Spec.TargetAllocator.FilterStrategy = copy.Spec.TargetAllocator.FilterStrategy
107+
out.Spec.TargetAllocator.ServiceAccount = copy.Spec.TargetAllocator.ServiceAccount
108+
out.Spec.TargetAllocator.Image = copy.Spec.TargetAllocator.Image
109+
out.Spec.TargetAllocator.Enabled = copy.Spec.TargetAllocator.Enabled
110+
out.Spec.TargetAllocator.Affinity = copy.Spec.TargetAllocator.Affinity
111+
out.Spec.TargetAllocator.PrometheusCR.Enabled = copy.Spec.TargetAllocator.PrometheusCR.Enabled
112+
out.Spec.TargetAllocator.PrometheusCR.ScrapeInterval = copy.Spec.TargetAllocator.PrometheusCR.ScrapeInterval
113+
out.Spec.TargetAllocator.PrometheusCR.PodMonitorSelector = copy.Spec.TargetAllocator.PrometheusCR.PodMonitorSelector
114+
out.Spec.TargetAllocator.PrometheusCR.ServiceMonitorSelector = copy.Spec.TargetAllocator.PrometheusCR.ServiceMonitorSelector
115+
out.Spec.TargetAllocator.SecurityContext = copy.Spec.TargetAllocator.SecurityContext
116+
out.Spec.TargetAllocator.PodSecurityContext = copy.Spec.TargetAllocator.PodSecurityContext
117+
out.Spec.TargetAllocator.TopologySpreadConstraints = copy.Spec.TargetAllocator.TopologySpreadConstraints
118+
out.Spec.TargetAllocator.Tolerations = copy.Spec.TargetAllocator.Tolerations
119+
out.Spec.TargetAllocator.Env = copy.Spec.TargetAllocator.Env
120+
out.Spec.TargetAllocator.Observability = v1alpha1.ObservabilitySpec{
121+
Metrics: v1alpha1.MetricsConfigSpec{
122+
EnableMetrics: copy.Spec.TargetAllocator.Observability.Metrics.EnableMetrics,
123+
},
124+
}
125+
out.Spec.TargetAllocator.PodDisruptionBudget = copy.Spec.TargetAllocator.PodDisruptionBudget
126+
127+
out.Spec.Mode = v1alpha2.Mode(copy.Spec.Mode)
128+
out.Spec.UpgradeStrategy = v1alpha2.UpgradeStrategy(copy.Spec.UpgradeStrategy)
129+
out.Spec.Ingress.Type = v1alpha2.IngressType(copy.Spec.Ingress.Type)
130+
out.Spec.Ingress.Annotations = copy.Spec.Ingress.Annotations
131+
out.Spec.Ingress.TLS = copy.Spec.Ingress.TLS
132+
out.Spec.Ingress.IngressClassName = copy.Spec.Ingress.IngressClassName
133+
out.Spec.Ingress.Route.Termination = v1alpha2.TLSRouteTerminationType(copy.Spec.Ingress.Route.Termination)
134+
135+
if copy.Spec.LivenessProbe != nil {
136+
out.Spec.LivenessProbe = &v1alpha2.Probe{
137+
InitialDelaySeconds: copy.Spec.LivenessProbe.InitialDelaySeconds,
138+
TimeoutSeconds: copy.Spec.LivenessProbe.TimeoutSeconds,
139+
PeriodSeconds: copy.Spec.LivenessProbe.PeriodSeconds,
140+
SuccessThreshold: copy.Spec.LivenessProbe.SuccessThreshold,
141+
FailureThreshold: copy.Spec.LivenessProbe.FailureThreshold,
142+
TerminationGracePeriodSeconds: copy.Spec.LivenessProbe.TerminationGracePeriodSeconds,
143+
}
144+
}
145+
146+
out.Spec.Observability.Metrics.EnableMetrics = copy.Spec.Observability.Metrics.EnableMetrics
147+
148+
out.Spec.ConfigMaps = copy.Spec.ConfigMaps
149+
out.Spec.DaemonSetUpdateStrategy = appsv1.DaemonSetUpdateStrategy{} // NOTE: N/A in v1alpha1
150+
out.Spec.DeploymentUpdateStrategy.Type = copy.Spec.DeploymentUpdateStrategy.Type
151+
out.Spec.DeploymentUpdateStrategy.RollingUpdate = copy.Spec.DeploymentUpdateStrategy.RollingUpdate
152+
153+
return out
154+
}

internal/api/convert/v1alpha_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package convert
16+
17+
import (
18+
"encoding/json"
19+
"testing"
20+
21+
"github.com/stretchr/testify/assert"
22+
"sigs.k8s.io/yaml"
23+
24+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
25+
)
26+
27+
func Test_V1Alpha1to2_Config(t *testing.T) {
28+
config := `---
29+
receivers:
30+
otlp:
31+
protocols:
32+
grpc:
33+
processors:
34+
resourcedetection:
35+
detectors: [kubernetes]
36+
exporters:
37+
otlp:
38+
endpoint: "otlp:4317"
39+
service:
40+
pipelines:
41+
traces:
42+
receivers: [otlp]
43+
processors: [resourcedetection]
44+
exporters: [otlp]
45+
`
46+
cfgV1 := v1alpha1.OpenTelemetryCollector{
47+
Spec: v1alpha1.OpenTelemetryCollectorSpec{
48+
Config: config,
49+
},
50+
}
51+
52+
cfgV2 := V1Alpha1to2(cfgV1)
53+
assert.NotNil(t, cfgV2)
54+
55+
jsonCfg, err := json.Marshal(&cfgV2.Spec.Config)
56+
assert.Nil(t, err)
57+
yamlCfg, err := yaml.JSONToYAML(jsonCfg)
58+
assert.Nil(t, err)
59+
assert.YAMLEq(t, config, string(yamlCfg))
60+
}

internal/manifests/collector/annotations.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ package collector
1616

1717
import (
1818
"crypto/sha256"
19+
"encoding/json"
1920
"fmt"
2021

21-
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
22+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha2"
2223
)
2324

2425
// Annotations return the annotations for OpenTelemetryCollector pod.
25-
func Annotations(instance v1alpha1.OpenTelemetryCollector) map[string]string {
26+
func Annotations(instance v1alpha2.OpenTelemetryCollector) map[string]string {
2627
// new map every time, so that we don't touch the instance's annotations
2728
annotations := map[string]string{}
2829

@@ -37,14 +38,15 @@ func Annotations(instance v1alpha1.OpenTelemetryCollector) map[string]string {
3738
annotations[k] = v
3839
}
3940
}
41+
4042
// make sure sha256 for configMap is always calculated
4143
annotations["opentelemetry-operator-config/sha256"] = getConfigMapSHA(instance.Spec.Config)
4244

4345
return annotations
4446
}
4547

4648
// PodAnnotations return the spec annotations for OpenTelemetryCollector pod.
47-
func PodAnnotations(instance v1alpha1.OpenTelemetryCollector) map[string]string {
49+
func PodAnnotations(instance v1alpha2.OpenTelemetryCollector) map[string]string {
4850
// new map every time, so that we don't touch the instance's annotations
4951
podAnnotations := map[string]string{}
5052

@@ -66,7 +68,11 @@ func PodAnnotations(instance v1alpha1.OpenTelemetryCollector) map[string]string
6668
return podAnnotations
6769
}
6870

69-
func getConfigMapSHA(config string) string {
70-
h := sha256.Sum256([]byte(config))
71+
func getConfigMapSHA(config v1alpha2.Config) string {
72+
b, err := json.Marshal(&config)
73+
if err != nil {
74+
return "invalid"
75+
}
76+
h := sha256.Sum256(b)
7177
return fmt.Sprintf("%x", h)
7278
}

0 commit comments

Comments
 (0)