Skip to content

Commit 72a6ddd

Browse files
author
Ayushi Sharma
committed
feat: centralize node affinity interface conversion logic
1 parent 86ec77f commit 72a6ddd

File tree

3 files changed

+57
-53
lines changed

3 files changed

+57
-53
lines changed

modules/dagger/driver.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ const (
4949

5050
const defaultKey = "default"
5151

52+
const daggerTaintKey = "dagger"
53+
5254
var defaultDriverConf = driverConf{
5355
Namespace: map[string]string{
5456
defaultKey: "dagger",
@@ -220,7 +222,7 @@ func (dd *daggerDriver) getHelmRelease(res resource.Resource, conf Config,
220222
formatted := fmt.Sprintf("[%s]", strings.Join(programArgs, ","))
221223
encodedProgramArgs := base64.StdEncoding.EncodeToString([]byte(formatted))
222224

223-
tolerationKey := "firehose_autoscaler"
225+
tolerationKey := daggerTaintKey
224226
tolerations := []map[string]any{}
225227

226228
for _, t := range kubeOut.Tolerations[tolerationKey] {
@@ -235,7 +237,7 @@ func (dd *daggerDriver) getHelmRelease(res resource.Resource, conf Config,
235237
requiredDuringSchedulingIgnoredDuringExecution := []kubernetes.Preference{}
236238
preferredDuringSchedulingIgnoredDuringExecution := []kubernetes.WeightedPreference{}
237239

238-
affinityKey := "firehose_autoscaler"
240+
affinityKey := daggerTaintKey
239241
if affinity, ok := kubeOut.Affinities[affinityKey]; ok {
240242
requiredDuringSchedulingIgnoredDuringExecution = affinity.RequiredDuringSchedulingIgnoredDuringExecution
241243
preferredDuringSchedulingIgnoredDuringExecution = affinity.PreferredDuringSchedulingIgnoredDuringExecution
@@ -249,6 +251,9 @@ func (dd *daggerDriver) getHelmRelease(res resource.Resource, conf Config,
249251
preferredDuringSchedulingIgnoredDuringExecution = dd.conf.NodeAffinityMatchExpressions.PreferredDuringSchedulingIgnoredDuringExecution
250252
}
251253

254+
requiredDuringSchedulingIgnoredDuringExecutionInterface := kubernetes.PreferenceSliceToInterfaceSlice(requiredDuringSchedulingIgnoredDuringExecution)
255+
preferredDuringSchedulingIgnoredDuringExecutionInterface := kubernetes.WeightedPreferencesToInterfaceSlice(preferredDuringSchedulingIgnoredDuringExecution)
256+
252257
rc.Values = map[string]any{
253258
labelsConfKey: modules.CloneAndMergeMaps(deploymentLabels, entropyLabels),
254259
"image": imageRepository,
@@ -283,13 +288,11 @@ func (dd *daggerDriver) getHelmRelease(res resource.Resource, conf Config,
283288
"fs_oss_endpoint": conf.FSOSSEndpoint,
284289
"tolerations": tolerations,
285290
"nodeAffinityMatchExpressions": map[string]any{
286-
"requiredDuringSchedulingIgnoredDuringExecution": requiredDuringSchedulingIgnoredDuringExecution,
287-
"preferredDuringSchedulingIgnoredDuringExecution": preferredDuringSchedulingIgnoredDuringExecution,
291+
"requiredDuringSchedulingIgnoredDuringExecution": requiredDuringSchedulingIgnoredDuringExecutionInterface,
292+
"preferredDuringSchedulingIgnoredDuringExecution": preferredDuringSchedulingIgnoredDuringExecutionInterface,
288293
},
289294
}
290295

291-
fmt.Println("Helm Release Values:", rc.Values)
292-
293296
return rc, nil
294297
}
295298

modules/firehose/driver.go

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"github.com/goto/entropy/pkg/errors"
1717
"github.com/goto/entropy/pkg/helm"
1818
"github.com/goto/entropy/pkg/kube"
19-
"github.com/mitchellh/mapstructure"
2019
)
2120

2221
const (
@@ -351,8 +350,8 @@ func (fd *firehoseDriver) getHelmRelease(res resource.Resource, conf Config,
351350
imageRepository = conf.ChartValues.ImageRepository
352351
}
353352

354-
requiredDuringSchedulingIgnoredDuringExecutionInterface := preferenceSliceToInterfaceSlice(requiredDuringSchedulingIgnoredDuringExecution)
355-
preferredDuringSchedulingIgnoredDuringExecutionInterface := weightedPreferencesToInterfaceSlice(preferredDuringSchedulingIgnoredDuringExecution)
353+
requiredDuringSchedulingIgnoredDuringExecutionInterface := kubernetes.PreferenceSliceToInterfaceSlice(requiredDuringSchedulingIgnoredDuringExecution)
354+
preferredDuringSchedulingIgnoredDuringExecutionInterface := kubernetes.WeightedPreferencesToInterfaceSlice(preferredDuringSchedulingIgnoredDuringExecution)
356355

357356
rc.Values = map[string]any{
358357
labelsConfKey: modules.CloneAndMergeMaps(deploymentLabels, entropyLabels),
@@ -518,47 +517,3 @@ func renderTplOfMapStringAny(labelsTpl map[string]any, labelsValues map[string]s
518517

519518
return labelsTpl, nil
520519
}
521-
522-
func preferenceSliceToInterfaceSlice(prefs []kubernetes.Preference) []map[string]interface{} {
523-
result := make([]map[string]interface{}, len(prefs))
524-
525-
for i, pref := range prefs {
526-
var prefMap map[string]interface{}
527-
if err := mapstructure.Decode(pref, &prefMap); err != nil {
528-
continue
529-
}
530-
531-
lowercaseMap := make(map[string]interface{})
532-
for k, v := range prefMap {
533-
lowercaseMap[strings.ToLower(k)] = v
534-
}
535-
result[i] = lowercaseMap
536-
}
537-
538-
return result
539-
}
540-
541-
func weightedPreferencesToInterfaceSlice(weightedPrefs []kubernetes.WeightedPreference) []map[string]interface{} {
542-
result := make([]map[string]interface{}, len(weightedPrefs))
543-
544-
for i, wp := range weightedPrefs {
545-
var wpMap map[string]interface{}
546-
if err := mapstructure.Decode(wp, &wpMap); err != nil {
547-
continue
548-
}
549-
550-
lowercaseMap := make(map[string]interface{})
551-
for k, v := range wpMap {
552-
// Special handling for the preference field
553-
if k == "Preference" && v != nil {
554-
// Convert the nested Preference slice
555-
lowercaseMap["preference"] = preferenceSliceToInterfaceSlice(wp.Preference)
556-
} else {
557-
lowercaseMap[strings.ToLower(k)] = v
558-
}
559-
}
560-
result[i] = lowercaseMap
561-
}
562-
563-
return result
564-
}

modules/kubernetes/output.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package kubernetes
22

33
import (
44
"encoding/json"
5+
"strings"
56

67
"k8s.io/apimachinery/pkg/version"
78

89
"github.com/goto/entropy/pkg/kube"
10+
"github.com/mitchellh/mapstructure"
911
)
1012

1113
type Output struct {
@@ -47,3 +49,47 @@ func (out Output) JSON() []byte {
4749
}
4850
return b
4951
}
52+
53+
func PreferenceSliceToInterfaceSlice(prefs []Preference) []map[string]interface{} {
54+
result := make([]map[string]interface{}, len(prefs))
55+
56+
for i, pref := range prefs {
57+
var prefMap map[string]interface{}
58+
if err := mapstructure.Decode(pref, &prefMap); err != nil {
59+
continue
60+
}
61+
62+
lowercaseMap := make(map[string]interface{})
63+
for k, v := range prefMap {
64+
lowercaseMap[strings.ToLower(k)] = v
65+
}
66+
result[i] = lowercaseMap
67+
}
68+
69+
return result
70+
}
71+
72+
func WeightedPreferencesToInterfaceSlice(weightedPrefs []WeightedPreference) []map[string]interface{} {
73+
result := make([]map[string]interface{}, len(weightedPrefs))
74+
75+
for i, wp := range weightedPrefs {
76+
var wpMap map[string]interface{}
77+
if err := mapstructure.Decode(wp, &wpMap); err != nil {
78+
continue
79+
}
80+
81+
lowercaseMap := make(map[string]interface{})
82+
for k, v := range wpMap {
83+
// Special handling for the preference field
84+
if k == "Preference" && v != nil {
85+
// Convert the nested Preference slice
86+
lowercaseMap["preference"] = PreferenceSliceToInterfaceSlice(wp.Preference)
87+
} else {
88+
lowercaseMap[strings.ToLower(k)] = v
89+
}
90+
}
91+
result[i] = lowercaseMap
92+
}
93+
94+
return result
95+
}

0 commit comments

Comments
 (0)