@@ -7,6 +7,25 @@ import (
77 "strings"
88)
99
10+ // HelmValueType is a string-based enum for Helm value types
11+ type HelmValueType string
12+
13+ // Enum values for HelmValueType
14+ const (
15+ HelmValueText HelmValueType = "text" // Default
16+ HelmValueJSON HelmValueType = "json"
17+ )
18+
19+ // IsValid checks if the HelmValueType is a valid enum value
20+ func (hvt HelmValueType ) IsValid () bool {
21+ switch hvt {
22+ case HelmValueText , HelmValueJSON :
23+ return true
24+ default :
25+ return false
26+ }
27+ }
28+
1029// HelmManager handles Helm operations.
1130type HelmManager struct {}
1231
@@ -15,16 +34,37 @@ func NewHelmManager() *HelmManager {
1534 return & HelmManager {}
1635}
1736
37+ // HelmValue represents a Helm chart value with a type
38+ type HelmValue struct {
39+ Value string `json:"value"`
40+ Type HelmValueType `json:"type,omitempty"`
41+ }
42+
43+ // NewHelmValue creates a new HelmValue with the given value and default text type
44+ func NewHelmValue (value string ) HelmValue {
45+ return HelmValue {
46+ Value : value ,
47+ Type : HelmValueText ,
48+ }
49+ }
50+
1851// InstallOrUpdate installs or upgrades a Helm release.
19- func (h * HelmManager ) InstallOrUpdate (releaseName , chartPath string , values map [string ]any , namespace string ) error {
52+ func (h * HelmManager ) InstallOrUpdate (releaseName , chartPath string , values map [string ]HelmValue , namespace string ) error {
2053 args := []string {"upgrade" , "--install" , releaseName , chartPath , "--namespace" , namespace , "--create-namespace" }
2154
2255 // Convert values map to --set flags
2356 for key , value := range values {
24- if value .(string ) == "" {
57+ if ! value .Type .IsValid () {
58+ return fmt .Errorf ("invalid helm value type: %s for %s" , value .Type , key )
59+ }
60+ if value .Value == "" {
2561 continue
2662 }
27- args = append (args , "--set" , fmt .Sprintf ("%s=%v" , key , value ))
63+ setFlag := "--set"
64+ if value .Type == HelmValueJSON {
65+ setFlag = "--set-json"
66+ }
67+ args = append (args , setFlag , fmt .Sprintf ("%s=%v" , key , value .Value ))
2868 }
2969
3070 helmCmd := exec .Command ("helm" , args ... )
0 commit comments