Skip to content

Commit ffd0b70

Browse files
committed
internal/manifests/collector: adapt cm, svc, ingress & route
Signed-off-by: Benedikt Bongartz <[email protected]>
1 parent fe8afcf commit ffd0b70

File tree

7 files changed

+127
-79
lines changed

7 files changed

+127
-79
lines changed

internal/manifests/collector/configmap_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ func TestDesiredConfigMap(t *testing.T) {
3737
expectedLables["app.kubernetes.io/name"] = "test-collector"
3838
expectedLables["app.kubernetes.io/version"] = "0.47.0"
3939

40-
const filenameCollector = "collector.yaml"
4140
expectedData := map[string]string{
4241
"collector.yaml": `receivers:
4342
jaeger:

internal/manifests/collector/ingress.go

+27-17
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,28 @@ import (
1818
"fmt"
1919

2020
"github.com/go-logr/logr"
21+
"gopkg.in/yaml.v3"
2122
corev1 "k8s.io/api/core/v1"
2223
networkingv1 "k8s.io/api/networking/v1"
2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425

25-
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
26+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha2"
27+
"github.com/open-telemetry/opentelemetry-operator/internal/api/convert"
2628
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
2729
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/adapters"
2830
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2931
)
3032

3133
func Ingress(params manifests.Params) (*networkingv1.Ingress, error) {
32-
if params.OtelCol.Spec.Ingress.Type != v1alpha1.IngressTypeNginx {
34+
otelCol, err := convert.V1Alpha1to2(params.OtelCol)
35+
if err != nil {
36+
return nil, err
37+
}
38+
if otelCol.Spec.Ingress.Type != v1alpha2.IngressTypeNginx {
3339
return nil, nil
3440
}
3541

36-
ports, err := servicePortsFromCfg(params.Log, params.OtelCol)
42+
ports, err := servicePortsFromCfg(params.Log, otelCol)
3743

3844
// if we have no ports, we don't need a ingress entry
3945
if len(ports) == 0 || err != nil {
@@ -46,28 +52,28 @@ func Ingress(params manifests.Params) (*networkingv1.Ingress, error) {
4652
}
4753

4854
var rules []networkingv1.IngressRule
49-
switch params.OtelCol.Spec.Ingress.RuleType {
50-
case v1alpha1.IngressRuleTypePath, "":
51-
rules = []networkingv1.IngressRule{createPathIngressRules(params.OtelCol.Name, params.OtelCol.Spec.Ingress.Hostname, ports)}
52-
case v1alpha1.IngressRuleTypeSubdomain:
53-
rules = createSubdomainIngressRules(params.OtelCol.Name, params.OtelCol.Spec.Ingress.Hostname, ports)
55+
switch otelCol.Spec.Ingress.RuleType {
56+
case v1alpha2.IngressRuleTypePath, "":
57+
rules = []networkingv1.IngressRule{createPathIngressRules(otelCol.Name, otelCol.Spec.Ingress.Hostname, ports)}
58+
case v1alpha2.IngressRuleTypeSubdomain:
59+
rules = createSubdomainIngressRules(otelCol.Name, otelCol.Spec.Ingress.Hostname, ports)
5460
}
5561

5662
return &networkingv1.Ingress{
5763
ObjectMeta: metav1.ObjectMeta{
58-
Name: naming.Ingress(params.OtelCol.Name),
59-
Namespace: params.OtelCol.Namespace,
60-
Annotations: params.OtelCol.Spec.Ingress.Annotations,
64+
Name: naming.Ingress(otelCol.Name),
65+
Namespace: otelCol.Namespace,
66+
Annotations: otelCol.Spec.Ingress.Annotations,
6167
Labels: map[string]string{
62-
"app.kubernetes.io/name": naming.Ingress(params.OtelCol.Name),
63-
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", params.OtelCol.Namespace, params.OtelCol.Name),
68+
"app.kubernetes.io/name": naming.Ingress(otelCol.Name),
69+
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", otelCol.Namespace, otelCol.Name),
6470
"app.kubernetes.io/managed-by": "opentelemetry-operator",
6571
},
6672
},
6773
Spec: networkingv1.IngressSpec{
68-
TLS: params.OtelCol.Spec.Ingress.TLS,
74+
TLS: otelCol.Spec.Ingress.TLS,
6975
Rules: rules,
70-
IngressClassName: params.OtelCol.Spec.Ingress.IngressClassName,
76+
IngressClassName: otelCol.Spec.Ingress.IngressClassName,
7177
},
7278
}, nil
7379
}
@@ -136,8 +142,12 @@ func createSubdomainIngressRules(otelcol string, hostname string, ports []corev1
136142
return rules
137143
}
138144

139-
func servicePortsFromCfg(logger logr.Logger, otelcol v1alpha1.OpenTelemetryCollector) ([]corev1.ServicePort, error) {
140-
configFromString, err := adapters.ConfigFromString(otelcol.Spec.Config)
145+
func servicePortsFromCfg(logger logr.Logger, otelcol v1alpha2.OpenTelemetryCollector) ([]corev1.ServicePort, error) {
146+
out, err := yaml.Marshal(&otelcol.Spec.Config)
147+
if err != nil {
148+
return nil, err
149+
}
150+
configFromString, err := adapters.ConfigFromString(string(out))
141151
if err != nil {
142152
logger.Error(err, "couldn't extract the configuration from the context")
143153
return nil, err

internal/manifests/collector/ingress_test.go

+28-19
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ import (
2323
networkingv1 "k8s.io/api/networking/v1"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2525

26+
"github.com/open-telemetry/opentelemetry-operator/internal/api/convert"
2627
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
2728
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2829

2930
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
31+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha2"
3032
"github.com/open-telemetry/opentelemetry-operator/internal/config"
3133
)
3234

@@ -68,7 +70,7 @@ func TestDesiredIngresses(t *testing.T) {
6870
actual, err := Ingress(params)
6971
fmt.Printf("error1: %+v", err)
7072
assert.Nil(t, actual)
71-
assert.ErrorContains(t, err, "couldn't parse the opentelemetry-collector configuration")
73+
assert.ErrorContains(t, err, "could not convert config json to v1alpha2.Config")
7274
})
7375

7476
t.Run("should return nil unable to parse receiver ports", func(t *testing.T) {
@@ -77,7 +79,9 @@ func TestDesiredIngresses(t *testing.T) {
7779
Log: logger,
7880
OtelCol: v1alpha1.OpenTelemetryCollector{
7981
Spec: v1alpha1.OpenTelemetryCollectorSpec{
80-
Config: "---",
82+
Config: `exporters:
83+
nothing:
84+
`,
8185
Ingress: v1alpha1.Ingress{
8286
Type: v1alpha1.IngressTypeNginx,
8387
},
@@ -86,9 +90,8 @@ func TestDesiredIngresses(t *testing.T) {
8690
}
8791

8892
actual, err := Ingress(params)
89-
fmt.Printf("error2: %+v", err)
9093
assert.Nil(t, actual)
91-
assert.ErrorContains(t, err, "no receivers available as part of the configuration")
94+
assert.NoError(t, err)
9295
})
9396

9497
t.Run("path per port", func(t *testing.T) {
@@ -103,9 +106,12 @@ func TestDesiredIngresses(t *testing.T) {
103106
t.Fatal(err)
104107
}
105108

106-
params.OtelCol.Namespace = ns
107-
params.OtelCol.Spec.Ingress = v1alpha1.Ingress{
108-
Type: v1alpha1.IngressTypeNginx,
109+
otelCol, err := convert.V1Alpha1to2(params.OtelCol)
110+
assert.Nil(t, err)
111+
112+
otelCol.Namespace = ns
113+
otelCol.Spec.Ingress = v1alpha2.Ingress{
114+
Type: v1alpha2.IngressTypeNginx,
109115
Hostname: hostname,
110116
Annotations: map[string]string{"some.key": "some.value"},
111117
IngressClassName: &ingressClassName,
@@ -118,12 +124,12 @@ func TestDesiredIngresses(t *testing.T) {
118124

119125
assert.NotEqual(t, &networkingv1.Ingress{
120126
ObjectMeta: metav1.ObjectMeta{
121-
Name: naming.Ingress(params.OtelCol.Name),
127+
Name: naming.Ingress(otelCol.Name),
122128
Namespace: ns,
123-
Annotations: params.OtelCol.Spec.Ingress.Annotations,
129+
Annotations: otelCol.Spec.Ingress.Annotations,
124130
Labels: map[string]string{
125-
"app.kubernetes.io/name": naming.Ingress(params.OtelCol.Name),
126-
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", params.OtelCol.Namespace, params.OtelCol.Name),
131+
"app.kubernetes.io/name": naming.Ingress(otelCol.Name),
132+
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", otelCol.Namespace, otelCol.Name),
127133
"app.kubernetes.io/managed-by": "opentelemetry-operator",
128134
},
129135
},
@@ -191,10 +197,13 @@ func TestDesiredIngresses(t *testing.T) {
191197
t.Fatal(err)
192198
}
193199

194-
params.OtelCol.Namespace = ns
195-
params.OtelCol.Spec.Ingress = v1alpha1.Ingress{
196-
Type: v1alpha1.IngressTypeNginx,
197-
RuleType: v1alpha1.IngressRuleTypeSubdomain,
200+
otelCol, err := convert.V1Alpha1to2(params.OtelCol)
201+
assert.Nil(t, err)
202+
203+
otelCol.Namespace = ns
204+
otelCol.Spec.Ingress = v1alpha2.Ingress{
205+
Type: v1alpha2.IngressTypeNginx,
206+
RuleType: v1alpha2.IngressRuleTypeSubdomain,
198207
Hostname: hostname,
199208
Annotations: map[string]string{"some.key": "some.value"},
200209
IngressClassName: &ingressClassName,
@@ -207,12 +216,12 @@ func TestDesiredIngresses(t *testing.T) {
207216

208217
assert.NotEqual(t, &networkingv1.Ingress{
209218
ObjectMeta: metav1.ObjectMeta{
210-
Name: naming.Ingress(params.OtelCol.Name),
219+
Name: naming.Ingress(otelCol.Name),
211220
Namespace: ns,
212-
Annotations: params.OtelCol.Spec.Ingress.Annotations,
221+
Annotations: otelCol.Spec.Ingress.Annotations,
213222
Labels: map[string]string{
214-
"app.kubernetes.io/name": naming.Ingress(params.OtelCol.Name),
215-
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", params.OtelCol.Namespace, params.OtelCol.Name),
223+
"app.kubernetes.io/name": naming.Ingress(otelCol.Name),
224+
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", otelCol.Namespace, otelCol.Name),
216225
"app.kubernetes.io/managed-by": "opentelemetry-operator",
217226
},
218227
},

internal/manifests/collector/route.go

+21-16
Original file line numberDiff line numberDiff line change
@@ -21,44 +21,49 @@ import (
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2222
"k8s.io/apimachinery/pkg/util/intstr"
2323

24-
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha1"
24+
"github.com/open-telemetry/opentelemetry-operator/apis/v1alpha2"
25+
"github.com/open-telemetry/opentelemetry-operator/internal/api/convert"
2526
"github.com/open-telemetry/opentelemetry-operator/internal/autodetect/openshift"
2627
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
2728
"github.com/open-telemetry/opentelemetry-operator/internal/naming"
2829
)
2930

3031
func Routes(params manifests.Params) ([]*routev1.Route, error) {
31-
if params.OtelCol.Spec.Ingress.Type != v1alpha1.IngressTypeRoute || params.Config.OpenShiftRoutesAvailability() != openshift.RoutesAvailable {
32+
otelCol, err := convert.V1Alpha1to2(params.OtelCol)
33+
if err != nil {
34+
return nil, err
35+
}
36+
if otelCol.Spec.Ingress.Type != v1alpha2.IngressTypeRoute || params.Config.OpenShiftRoutesAvailability() != openshift.RoutesAvailable {
3237
return nil, nil
3338
}
3439

35-
if params.OtelCol.Spec.Mode == v1alpha1.ModeSidecar {
40+
if otelCol.Spec.Mode == v1alpha2.ModeSidecar {
3641
params.Log.V(3).Info("ingress settings are not supported in sidecar mode")
3742
return nil, nil
3843
}
3944

4045
var tlsCfg *routev1.TLSConfig
41-
switch params.OtelCol.Spec.Ingress.Route.Termination {
42-
case v1alpha1.TLSRouteTerminationTypeInsecure:
46+
switch otelCol.Spec.Ingress.Route.Termination {
47+
case v1alpha2.TLSRouteTerminationTypeInsecure:
4348
// NOTE: insecure, no tls cfg.
44-
case v1alpha1.TLSRouteTerminationTypeEdge:
49+
case v1alpha2.TLSRouteTerminationTypeEdge:
4550
tlsCfg = &routev1.TLSConfig{Termination: routev1.TLSTerminationEdge}
46-
case v1alpha1.TLSRouteTerminationTypePassthrough:
51+
case v1alpha2.TLSRouteTerminationTypePassthrough:
4752
tlsCfg = &routev1.TLSConfig{Termination: routev1.TLSTerminationPassthrough}
48-
case v1alpha1.TLSRouteTerminationTypeReencrypt:
53+
case v1alpha2.TLSRouteTerminationTypeReencrypt:
4954
tlsCfg = &routev1.TLSConfig{Termination: routev1.TLSTerminationReencrypt}
5055
default: // NOTE: if unsupported, end here.
5156
return nil, nil
5257
}
5358

54-
ports, err := servicePortsFromCfg(params.Log, params.OtelCol)
59+
ports, err := servicePortsFromCfg(params.Log, otelCol)
5560

5661
// if we have no ports, we don't need a ingress entry
5762
if len(ports) == 0 || err != nil {
5863
params.Log.V(1).Info(
5964
"the instance's configuration didn't yield any ports to open, skipping ingress",
60-
"instance.name", params.OtelCol.Name,
61-
"instance.namespace", params.OtelCol.Namespace,
65+
"instance.name", otelCol.Name,
66+
"instance.namespace", otelCol.Namespace,
6267
)
6368
return nil, err
6469
}
@@ -67,18 +72,18 @@ func Routes(params manifests.Params) ([]*routev1.Route, error) {
6772
for i, p := range ports {
6873
portName := naming.PortName(p.Name, p.Port)
6974
host := ""
70-
if params.OtelCol.Spec.Ingress.Hostname != "" {
75+
if otelCol.Spec.Ingress.Hostname != "" {
7176
host = fmt.Sprintf("%s.%s", portName, params.OtelCol.Spec.Ingress.Hostname)
7277
}
7378

7479
routes[i] = &routev1.Route{
7580
ObjectMeta: metav1.ObjectMeta{
7681
Name: naming.Route(params.OtelCol.Name, p.Name),
77-
Namespace: params.OtelCol.Namespace,
78-
Annotations: params.OtelCol.Spec.Ingress.Annotations,
82+
Namespace: otelCol.Namespace,
83+
Annotations: otelCol.Spec.Ingress.Annotations,
7984
Labels: map[string]string{
80-
"app.kubernetes.io/name": naming.Route(params.OtelCol.Name, p.Name),
81-
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", params.OtelCol.Namespace, params.OtelCol.Name),
85+
"app.kubernetes.io/name": naming.Route(otelCol.Name, p.Name),
86+
"app.kubernetes.io/instance": fmt.Sprintf("%s.%s", otelCol.Namespace, otelCol.Name),
8287
"app.kubernetes.io/managed-by": "opentelemetry-operator",
8388
"app.kubernetes.io/component": "opentelemetry-collector",
8489
},

internal/manifests/collector/route_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func TestDesiredRoutes(t *testing.T) {
6969

7070
actual, err := Routes(params)
7171
assert.Nil(t, actual)
72-
assert.ErrorContains(t, err, "couldn't parse the opentelemetry-collector configuration")
72+
assert.ErrorContains(t, err, "could not convert config json to v1alpha2.Config")
7373
})
7474

7575
t.Run("should return nil unable to parse receiver ports", func(t *testing.T) {
@@ -91,7 +91,7 @@ func TestDesiredRoutes(t *testing.T) {
9191

9292
actual, err := Routes(params)
9393
assert.Nil(t, actual)
94-
assert.ErrorContains(t, err, "no receivers available as part of the configuration")
94+
assert.NoError(t, err)
9595
})
9696

9797
t.Run("should return nil unable to do something else", func(t *testing.T) {

0 commit comments

Comments
 (0)