Skip to content
Open
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
29 changes: 19 additions & 10 deletions pkg/operator/fluentd-service.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package operator

import (
"fmt"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"

fluentdv1alpha1 "github.com/fluent/fluent-operator/v3/apis/fluentd/v1alpha1"
)

const (
FluentdForwardPortName = "forward"
FluentdHttpPortName = "http"
)

func MakeFluentdService(fd fluentdv1alpha1.Fluentd) *corev1.Service {
var name string
var labels map[string]string
Expand Down Expand Up @@ -50,8 +47,10 @@ func MakeFluentdService(fd fluentdv1alpha1.Fluentd) *corev1.Service {
},
}

// read inputs definition from globalInputs
// Read inputs definition from globalInputs
globalInputs := fd.Spec.GlobalInputs
firstForwardPort := true
firstHttpPort := true
for _, input := range globalInputs {

if input.Forward != nil {
Expand All @@ -60,13 +59,18 @@ func MakeFluentdService(fd fluentdv1alpha1.Fluentd) *corev1.Service {
forwardPort = DefaultForwardPort
}
Comment on lines 56 to 60
Copy link

Copilot AI Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

input.Forward.Port is an optional pointer in the API (omitempty). Dereferencing it directly can panic when the user omits port, and it also makes the defaulting behavior inconsistent with makeFluentdPorts (which checks for nil). Consider using the same nil-check + default logic here before building forwardName/ServicePort.

Copilot uses AI. Check for mistakes.

forwardName := DefaultForwardName
if !firstForwardPort {
forwardName = fmt.Sprintf("%s-%d", DefaultForwardName, forwardPort)
}
forwardContainerPort := corev1.ServicePort{
Name: DefaultForwardName,
Name: forwardName,
Port: forwardPort,
TargetPort: intstr.FromString(FluentdForwardPortName),
TargetPort: intstr.FromString(forwardName),
Protocol: corev1.ProtocolTCP,
}
svc.Spec.Ports = append(svc.Spec.Ports, forwardContainerPort)
firstForwardPort = false
continue
}

Expand All @@ -75,13 +79,18 @@ func MakeFluentdService(fd fluentdv1alpha1.Fluentd) *corev1.Service {
if httpPort == 0 {
httpPort = DefaultHttpPort
}
httpName := DefaultHttpName
if !firstHttpPort {
httpName = fmt.Sprintf("%s-%d", DefaultHttpName, httpPort)
}
httpContainerPort := corev1.ServicePort{
Name: DefaultHttpName,
Name: httpName,
Port: httpPort,
TargetPort: intstr.FromString(FluentdHttpPortName),
TargetPort: intstr.FromString(httpName),
Protocol: corev1.ProtocolTCP,
}
svc.Spec.Ports = append(svc.Spec.Ports, httpContainerPort)
firstHttpPort = false
}
}

Expand Down
18 changes: 15 additions & 3 deletions pkg/operator/sts.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,20 +188,27 @@ func makeFluentdPorts(fd fluentdv1alpha1.Fluentd) []corev1.ContainerPort {
},
}

// read inputs definition from globalInputs
// Read inputs definition from globalInputs
globalInputs := fd.Spec.GlobalInputs
firstForwardPort := true
firstHttpPort := true
for _, input := range globalInputs {
if input.Forward != nil {
forwardPort := DefaultForwardPort
if input.Forward.Port != nil {
forwardPort = *input.Forward.Port
}

forwardName := DefaultForwardName
if !firstForwardPort {
forwardName = fmt.Sprintf("%s-%d", DefaultForwardName, forwardPort)
}
ports = append(ports, corev1.ContainerPort{
Name: DefaultForwardName,
Name: forwardName,
ContainerPort: forwardPort,
Protocol: corev1.ProtocolTCP,
})
firstForwardPort = false
continue
}
if input.Http != nil {
Expand All @@ -210,11 +217,16 @@ func makeFluentdPorts(fd fluentdv1alpha1.Fluentd) []corev1.ContainerPort {
httpPort = *input.Http.Port
}

httpName := DefaultHttpName
if !firstHttpPort {
httpName = fmt.Sprintf("%s-%d", DefaultHttpName, httpPort)
}
ports = append(ports, corev1.ContainerPort{
Name: DefaultHttpName,
Name: httpName,
ContainerPort: httpPort,
Protocol: corev1.ProtocolTCP,
})
firstHttpPort = false
}
}

Expand Down
Loading