Skip to content
This repository was archived by the owner on Mar 28, 2025. It is now read-only.
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
13 changes: 9 additions & 4 deletions sidecar.go
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,15 @@ func (h *sidecarHandler) getClassData(className string) (string, error) {

// Assembling telegraf configuration
func (h *sidecarHandler) assembleConf(pod *corev1.Pod, className string) (telegrafConf string, err error) {
classData, err := h.ClassDataHandler.getData(className)
if err != nil {
return "", newNonFatalError(err, "telegraf-operator could not create sidecar container for unknown class")

var classData string

for _, className := range strings.Split(className, ",") {
singleClassData, err := h.ClassDataHandler.getData(strings.TrimSpace(className))
if err != nil {
return "", newNonFatalError(err, "telegraf-operator could not create sidecar container for unknown class")
}
classData += singleClassData
}

ports := ports(pod)
Expand Down Expand Up @@ -407,7 +413,6 @@ func (h *sidecarHandler) parseCustomTelegrafVolumeMounts(volumeMounts *map[strin
if err = json.Unmarshal([]byte(telegrafVolumeMount), volumeMounts); err != nil {
return err
}

}
return nil
}
Expand Down
71 changes: 71 additions & 0 deletions sidecar_test.go
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,77 @@ func Test_assembleConf(t *testing.T) {
}
}

func Test_assembleConfs(t *testing.T) {
tests := []struct {
name string
pod *corev1.Pod
classData string
enableDefaultInternalPlugin bool
wantConfig string
wantErr bool
}{
{
name: "validate multiple class configs with one undefined",
pod: &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
TelegrafClass: "stdout,notdefined",
},
},
},
wantErr: true,
},
{
name: "validate multiple class configs",
pod: &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
TelegrafClass: "stdout,influxdb",
},
},
},
wantConfig: `
[[outputs.file]]
[[outputs.influxdb]]`,
},
{
name: "validate multiple class configs with whitespace",
pod: &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
TelegrafClass: "stdout , influxdb",
},
},
},
wantConfig: `
[[outputs.file]]
[[outputs.influxdb]]`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {

handler := &sidecarHandler{
ClassDataHandler: newMockClassDataHandler(map[string]string{"stdout": "[[outputs.file]]\n", "influxdb": "[[outputs.influxdb]]\n"}),
EnableDefaultInternalPlugin: tt.enableDefaultInternalPlugin,
RequestsCPU: defaultRequestsCPU,
RequestsMemory: defaultRequestsMemory,
LimitsCPU: defaultLimitsCPU,
LimitsMemory: defaultLimitsMemory,
Logger: &logrTesting.TestLogger{T: t},
}
gotConfig, err := handler.assembleConf(tt.pod, tt.pod.ObjectMeta.Annotations[TelegrafClass])
if (err != nil) != tt.wantErr {
t.Errorf("assembleConf() error = %v, wantErr %v", err, tt.wantErr)
return
}
if strings.TrimSpace(gotConfig) != strings.TrimSpace(tt.wantConfig) {
t.Errorf("assembleConf() = %v, want %v", gotConfig, tt.wantConfig)
}
})
}
}

func Test_addSidecars(t *testing.T) {
tests := []struct {
name string
Expand Down