Skip to content

Commit 9fd0e9b

Browse files
committed
Fix
Signed-off-by: Pavol Loffay <[email protected]>
1 parent 7a2fcf2 commit 9fd0e9b

File tree

8 files changed

+97
-112
lines changed

8 files changed

+97
-112
lines changed

apis/v1beta1/collector_webhook_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ package v1beta1
1717
import (
1818
"context"
1919
"fmt"
20-
"gopkg.in/yaml.v3"
2120
"os"
2221
"testing"
2322

2423
"github.com/go-logr/logr"
2524
"github.com/stretchr/testify/assert"
2625
"github.com/stretchr/testify/require"
26+
"gopkg.in/yaml.v3"
2727
appsv1 "k8s.io/api/apps/v1"
2828
authv1 "k8s.io/api/authorization/v1"
2929
autoscalingv2 "k8s.io/api/autoscaling/v2"

apis/v1beta1/config.go

+23
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ import (
1818
"bytes"
1919
"encoding/json"
2020
"fmt"
21+
"net"
2122
"reflect"
2223
"sort"
24+
"strconv"
25+
"strings"
2326

2427
"gopkg.in/yaml.v3"
2528
)
@@ -135,6 +138,26 @@ type Service struct {
135138
Pipelines AnyConfig `json:"pipelines" yaml:"pipelines"`
136139
}
137140

141+
// MetricsPort gets the port number for the metrics endpoint from the collector config if it has been set.
142+
func (s *Service) MetricsPort() (int32, error) {
143+
if s.GetTelemetry() == nil {
144+
// telemetry isn't set, use the default
145+
return 8888, nil
146+
}
147+
_, port, netErr := net.SplitHostPort(s.GetTelemetry().Metrics.Address)
148+
if netErr != nil && strings.Contains(netErr.Error(), "missing port in address") {
149+
return 8888, nil
150+
} else if netErr != nil {
151+
return 0, netErr
152+
}
153+
i64, err := strconv.ParseInt(port, 10, 32)
154+
if err != nil {
155+
return 0, err
156+
}
157+
158+
return int32(i64), nil
159+
}
160+
138161
// MetricsConfig comes from the collector.
139162
type MetricsConfig struct {
140163
// Level is the level of telemetry metrics, the possible values are:

apis/v1beta1/config_test.go

+68
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,71 @@ func TestGetTelemetryFromYAMLIsNil(t *testing.T) {
210210
require.NoError(t, err)
211211
assert.Nil(t, cfg.Service.GetTelemetry())
212212
}
213+
214+
func TestConfigToMetricsPort(t *testing.T) {
215+
216+
for _, tt := range []struct {
217+
desc string
218+
expectedPort int32
219+
config Service
220+
}{
221+
{
222+
"custom port",
223+
9090,
224+
Service{
225+
Telemetry: &AnyConfig{
226+
Object: map[string]interface{}{
227+
"metrics": map[string]interface{}{
228+
"address": "0.0.0.0:9090",
229+
},
230+
},
231+
},
232+
},
233+
},
234+
{
235+
"bad address",
236+
8888,
237+
Service{
238+
Telemetry: &AnyConfig{
239+
Object: map[string]interface{}{
240+
"metrics": map[string]interface{}{
241+
"address": "0.0.0.0",
242+
},
243+
},
244+
},
245+
},
246+
},
247+
{
248+
"missing address",
249+
8888,
250+
Service{
251+
Telemetry: &AnyConfig{
252+
Object: map[string]interface{}{
253+
"metrics": map[string]interface{}{
254+
"level": "detailed",
255+
},
256+
},
257+
},
258+
},
259+
},
260+
{
261+
"missing metrics",
262+
8888,
263+
Service{
264+
Telemetry: &AnyConfig{},
265+
},
266+
},
267+
{
268+
"missing telemetry",
269+
8888,
270+
Service{},
271+
},
272+
} {
273+
t.Run(tt.desc, func(t *testing.T) {
274+
// these are acceptable failures, we return to the collector's default metric port
275+
port, err := tt.config.MetricsPort()
276+
assert.NoError(t, err)
277+
assert.Equal(t, tt.expectedPort, port)
278+
})
279+
}
280+
}

internal/manifests/collector/adapters/config_to_ports.go

-23
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ package adapters
1616

1717
import (
1818
"fmt"
19-
"net"
2019
"sort"
21-
"strconv"
22-
"strings"
2320

2421
"github.com/go-logr/logr"
2522
corev1 "k8s.io/api/core/v1"
@@ -142,23 +139,3 @@ func ConfigToPorts(logger logr.Logger, config map[interface{}]interface{}) ([]co
142139

143140
return ports, nil
144141
}
145-
146-
// ConfigToMetricsPort gets the port number for the metrics endpoint from the collector config if it has been set.
147-
func ConfigToMetricsPort(config v1beta1.Service) (int32, error) {
148-
if config.GetTelemetry() == nil {
149-
// telemetry isn't set, use the default
150-
return 8888, nil
151-
}
152-
_, port, netErr := net.SplitHostPort(config.GetTelemetry().Metrics.Address)
153-
if netErr != nil && strings.Contains(netErr.Error(), "missing port in address") {
154-
return 8888, nil
155-
} else if netErr != nil {
156-
return 0, netErr
157-
}
158-
i64, err := strconv.ParseInt(port, 10, 32)
159-
if err != nil {
160-
return 0, err
161-
}
162-
163-
return int32(i64), nil
164-
}

internal/manifests/collector/adapters/config_to_ports_test.go

+1-74
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"k8s.io/apimachinery/pkg/util/intstr"
2626
logf "sigs.k8s.io/controller-runtime/pkg/log"
2727

28-
"github.com/open-telemetry/opentelemetry-operator/apis/v1beta1"
2928
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/adapters"
3029
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/parser"
3130
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/collector/parser/receiver"
@@ -96,11 +95,6 @@ func TestExtractPortsFromConfig(t *testing.T) {
9695
targetPort4317 := intstr.IntOrString{Type: 0, IntVal: 4317, StrVal: ""}
9796
targetPort4318 := intstr.IntOrString{Type: 0, IntVal: 4318, StrVal: ""}
9897

99-
svcPorts := []corev1.ServicePort{}
100-
for _, p := range ports {
101-
svcPorts = append(svcPorts, p)
102-
}
103-
10498
expectedPorts := []corev1.ServicePort{
10599
{Name: "examplereceiver", Port: 12345},
106100
{Name: "port-12346", Port: 12346},
@@ -113,7 +107,7 @@ func TestExtractPortsFromConfig(t *testing.T) {
113107
{Name: "otlp-http", AppProtocol: &httpAppProtocol, Port: 4318, TargetPort: targetPort4318},
114108
{Name: "zipkin", AppProtocol: &httpAppProtocol, Protocol: "TCP", Port: 9411},
115109
}
116-
assert.ElementsMatch(t, expectedPorts, svcPorts)
110+
assert.ElementsMatch(t, expectedPorts, ports)
117111
}
118112

119113
func TestNoPortsParsed(t *testing.T) {
@@ -211,73 +205,6 @@ func TestParserFailed(t *testing.T) {
211205
assert.NoError(t, err)
212206
assert.True(t, mockParserCalled)
213207
}
214-
func TestConfigToMetricsPort(t *testing.T) {
215-
216-
for _, tt := range []struct {
217-
desc string
218-
expectedPort int32
219-
config v1beta1.Service
220-
}{
221-
{
222-
"custom port",
223-
9090,
224-
v1beta1.Service{
225-
Telemetry: &v1beta1.AnyConfig{
226-
Object: map[string]interface{}{
227-
"metrics": map[string]interface{}{
228-
"address": "0.0.0.0:9090",
229-
},
230-
},
231-
},
232-
},
233-
},
234-
{
235-
"bad address",
236-
8888,
237-
v1beta1.Service{
238-
Telemetry: &v1beta1.AnyConfig{
239-
Object: map[string]interface{}{
240-
"metrics": map[string]interface{}{
241-
"address": "0.0.0.0",
242-
},
243-
},
244-
},
245-
},
246-
},
247-
{
248-
"missing address",
249-
8888,
250-
v1beta1.Service{
251-
Telemetry: &v1beta1.AnyConfig{
252-
Object: map[string]interface{}{
253-
"metrics": map[string]interface{}{
254-
"level": "detailed",
255-
},
256-
},
257-
},
258-
},
259-
},
260-
{
261-
"missing metrics",
262-
8888,
263-
v1beta1.Service{
264-
Telemetry: &v1beta1.AnyConfig{},
265-
},
266-
},
267-
{
268-
"missing telemetry",
269-
8888,
270-
v1beta1.Service{},
271-
},
272-
} {
273-
t.Run(tt.desc, func(t *testing.T) {
274-
// these are acceptable failures, we return to the collector's default metric port
275-
port, err := adapters.ConfigToMetricsPort(tt.config)
276-
assert.NoError(t, err)
277-
assert.Equal(t, tt.expectedPort, port)
278-
})
279-
}
280-
}
281208

282209
type mockParser struct {
283210
portsFunc func() ([]corev1.ServicePort, error)

internal/manifests/collector/container.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func getConfigContainerPorts(logger logr.Logger, cfgYaml string, conf v1beta1.Co
202202
}
203203
}
204204

205-
metricsPort, err := adapters.ConfigToMetricsPort(conf.Service)
205+
metricsPort, err := conf.Service.MetricsPort()
206206
if err != nil {
207207
logger.Info("couldn't determine metrics port from configuration, using 8888 default value", "error", err)
208208
metricsPort = 8888

internal/manifests/collector/ingress.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,7 @@ func servicePortsFromCfg(logger logr.Logger, otelcol v1beta1.OpenTelemetryCollec
171171
ports = append(toServicePorts(otelcol.Spec.Ports), resultingInferredPorts...)
172172
}
173173

174-
svcPorts := []corev1.ServicePort{}
175-
for _, p := range ports {
176-
svcPorts = append(svcPorts, p)
177-
}
178-
179-
return svcPorts, err
174+
return ports, nil
180175
}
181176

182177
func toServicePorts(spec []v1beta1.PortsSpec) []corev1.ServicePort {

internal/manifests/collector/service.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func MonitoringService(params manifests.Params) (*corev1.Service, error) {
6464
labels := manifestutils.Labels(params.OtelCol.ObjectMeta, name, params.OtelCol.Spec.Image, ComponentOpenTelemetryCollector, []string{})
6565
labels[monitoringLabel] = valueExists
6666

67-
metricsPort, err := adapters.ConfigToMetricsPort(params.OtelCol.Spec.Config.Service)
67+
metricsPort, err := params.OtelCol.Spec.Config.Service.MetricsPort()
6868
if err != nil {
6969
return nil, err
7070
}
@@ -147,11 +147,6 @@ func Service(params manifests.Params) (*corev1.Service, error) {
147147
trafficPolicy = corev1.ServiceInternalTrafficPolicyLocal
148148
}
149149

150-
svcPorts := []corev1.ServicePort{}
151-
for _, p := range ports {
152-
svcPorts = append(svcPorts, p)
153-
}
154-
155150
return &corev1.Service{
156151
ObjectMeta: metav1.ObjectMeta{
157152
Name: naming.Service(params.OtelCol.Name),
@@ -163,7 +158,7 @@ func Service(params manifests.Params) (*corev1.Service, error) {
163158
InternalTrafficPolicy: &trafficPolicy,
164159
Selector: manifestutils.SelectorLabels(params.OtelCol.ObjectMeta, ComponentOpenTelemetryCollector),
165160
ClusterIP: "",
166-
Ports: svcPorts,
161+
Ports: ports,
167162
},
168163
}, nil
169164
}

0 commit comments

Comments
 (0)