@@ -17,6 +17,7 @@ package syslogng
1717import (
1818 "emperror.dev/errors"
1919 "github.com/cisco-open/operator-tools/pkg/reconciler"
20+ "github.com/kube-logging/logging-operator/pkg/sdk/logging/api/v1beta1"
2021 v1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
2122 corev1 "k8s.io/api/core/v1"
2223 v12 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -47,9 +48,17 @@ func (r *Reconciler) service() (runtime.Object, reconciler.DesiredState, error)
4748 },
4849 }
4950
51+ if r .syslogNGSpec .EnabledIPv6 {
52+ v1beta1 .EnableIPv6Options (& desired .Spec )
53+ }
54+
5055 beforeUpdateHook := reconciler .DesiredStateHook (func (current runtime.Object ) error {
5156 if s , ok := current .(* corev1.Service ); ok {
5257 desired .Spec .ClusterIP = s .Spec .ClusterIP
58+ // Preserve ClusterIPs for dual-stack configuration
59+ if len (s .Spec .ClusterIPs ) > 0 {
60+ desired .Spec .ClusterIPs = s .Spec .ClusterIPs
61+ }
5362 } else {
5463 return errors .Errorf ("failed to cast service object %+v" , current )
5564 }
@@ -61,7 +70,7 @@ func (r *Reconciler) service() (runtime.Object, reconciler.DesiredState, error)
6170
6271func (r * Reconciler ) serviceMetrics () (runtime.Object , reconciler.DesiredState , error ) {
6372 if r .syslogNGSpec .Metrics != nil && r .syslogNGSpec .Metrics .IsEnabled () {
64- return & corev1.Service {
73+ desired := & corev1.Service {
6574 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-metrics" , ComponentSyslogNG ),
6675 Spec : corev1.ServiceSpec {
6776 Ports : []corev1.ServicePort {
@@ -76,7 +85,13 @@ func (r *Reconciler) serviceMetrics() (runtime.Object, reconciler.DesiredState,
7685 Type : corev1 .ServiceTypeClusterIP ,
7786 ClusterIP : corev1 .ClusterIPNone ,
7887 },
79- }, reconciler .StatePresent , nil
88+ }
89+
90+ if r .syslogNGSpec .EnabledIPv6 {
91+ v1beta1 .EnableIPv6Options (& desired .Spec )
92+ }
93+
94+ return desired , reconciler .StatePresent , nil
8095 }
8196 return & corev1.Service {
8297 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-monitor" , ComponentSyslogNG ),
@@ -128,7 +143,7 @@ func (r *Reconciler) serviceBufferMetrics() (runtime.Object, reconciler.DesiredS
128143 port = r .syslogNGSpec .BufferVolumeMetrics .Port
129144 }
130145
131- return & corev1.Service {
146+ desired := & corev1.Service {
132147 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-buffer-metrics" , ComponentSyslogNG ),
133148 Spec : corev1.ServiceSpec {
134149 Ports : []corev1.ServicePort {
@@ -143,7 +158,13 @@ func (r *Reconciler) serviceBufferMetrics() (runtime.Object, reconciler.DesiredS
143158 Type : corev1 .ServiceTypeClusterIP ,
144159 ClusterIP : corev1 .ClusterIPNone ,
145160 },
146- }, reconciler .StatePresent , nil
161+ }
162+
163+ if r .syslogNGSpec .EnabledIPv6 {
164+ v1beta1 .EnableIPv6Options (& desired .Spec )
165+ }
166+
167+ return desired , reconciler .StatePresent , nil
147168 }
148169 return & corev1.Service {
149170 ObjectMeta : r .SyslogNGObjectMeta (ServiceName + "-buffer-monitor" , ComponentSyslogNG ),
@@ -211,5 +232,10 @@ func (r *Reconciler) headlessService() (runtime.Object, reconciler.DesiredState,
211232 ClusterIP : corev1 .ClusterIPNone ,
212233 },
213234 }
235+
236+ if r .syslogNGSpec .EnabledIPv6 {
237+ v1beta1 .EnableIPv6Options (& desired .Spec )
238+ }
239+
214240 return desired , reconciler .StatePresent , nil
215241}
0 commit comments