Skip to content

Commit f015d81

Browse files
authored
Merge pull request #1213 from kube-logging/persist-file-on-buffer-volume
replace fixed syslog-ng persist file flag with guessed dynamic
2 parents b7f470b + f81fdf3 commit f015d81

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

pkg/resources/kubetool/utils.go

+20
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@ import (
1919
corev1 "k8s.io/api/core/v1"
2020
)
2121

22+
func FindContainerByName(cnrs []corev1.Container, name string) *corev1.Container {
23+
for i := range cnrs {
24+
cnr := &cnrs[i]
25+
if cnr.Name == name {
26+
return cnr
27+
}
28+
}
29+
return nil
30+
}
31+
2232
func FindVolumeByName(vols []corev1.Volume, name string) *corev1.Volume {
2333
for i := range vols {
2434
vol := &vols[i]
@@ -29,6 +39,16 @@ func FindVolumeByName(vols []corev1.Volume, name string) *corev1.Volume {
2939
return nil
3040
}
3141

42+
func FindVolumeMountByName(mnts []corev1.VolumeMount, name string) *corev1.VolumeMount {
43+
for i := range mnts {
44+
mnt := &mnts[i]
45+
if mnt.Name == name {
46+
return mnt
47+
}
48+
}
49+
return nil
50+
}
51+
3252
func JobSuccessfullyCompleted(job *batchv1.Job) bool {
3353
return job.Status.CompletionTime != nil && job.Status.Succeeded > 0
3454
}

pkg/resources/syslogng/statefulset.go

+24-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/cisco-open/operator-tools/pkg/merge"
2424
"github.com/cisco-open/operator-tools/pkg/reconciler"
2525
util "github.com/cisco-open/operator-tools/pkg/utils"
26+
"github.com/kube-logging/logging-operator/pkg/resources/kubetool"
2627
"github.com/kube-logging/logging-operator/pkg/sdk/logging/api/v1beta1"
2728
appsv1 "k8s.io/api/apps/v1"
2829
corev1 "k8s.io/api/core/v1"
@@ -73,6 +74,20 @@ func (r *Reconciler) statefulset() (runtime.Object, reconciler.DesiredState, err
7374
return desired, reconciler.StatePresent, errors.WrapIf(err, "unable to merge overrides to base object")
7475
}
7576

77+
// HACK: try to _guess_ if user has configured a persistent volume for buffers and move syslog-ng's persist file there
78+
buffersVolumeName := "buffers"
79+
if name := r.Logging.Spec.SyslogNGSpec.BufferVolumeMetrics.MountName; name != "" {
80+
buffersVolumeName = name
81+
}
82+
syslogngContainer := kubetool.FindContainerByName(desired.Spec.Template.Spec.Containers, containerName)
83+
if mnt := kubetool.FindVolumeMountByName(syslogngContainer.VolumeMounts, buffersVolumeName); mnt != nil {
84+
if !sliceAny(syslogngContainer.Args, func(arg string) bool { return strings.Contains(arg, "--persist-file") }) {
85+
persistFilePath := filepath.Join(mnt.MountPath, "/syslog-ng.persist")
86+
persistFileFlag := fmt.Sprintf("--persist-file=%q", persistFilePath)
87+
syslogngContainer.Args = append(syslogngContainer.Args, persistFileFlag)
88+
}
89+
}
90+
7691
return desired, reconciler.StatePresent, nil
7792
}
7893

@@ -89,7 +104,6 @@ func syslogNGContainer(spec *v1beta1.SyslogNGSpec) corev1.Container {
89104
Args: []string{
90105
"--cfgfile=" + configDir + "/" + configKey,
91106
"--control=" + socketPath,
92-
"--persist-file=" + filepath.Join(bufferPath, "/syslog-ng.persist"),
93107
"--no-caps",
94108
"-Fe",
95109
},
@@ -359,3 +373,12 @@ func generateConfigReloaderConfig(configDir string) string {
359373
}
360374
`, filepath.Join(configDir, "..data"), socketPath)
361375
}
376+
377+
func sliceAny[S ~[]E, E any](s S, fn func(E) bool) bool {
378+
for _, e := range s {
379+
if fn(e) {
380+
return true
381+
}
382+
}
383+
return false
384+
}

0 commit comments

Comments
 (0)