Skip to content

Commit d68b8df

Browse files
committed
Fix terraform helm v2/v3 migration
1 parent 227cc1d commit d68b8df

File tree

1 file changed

+51
-7
lines changed
  • internal/units/shell/terraform/helm

1 file changed

+51
-7
lines changed

internal/units/shell/terraform/helm/main.go

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,21 @@ func (u *Unit) genMainCodeBlock() ([]byte, error) {
9393
}
9494
helmBody.SetAttributeValue(key, ctyVal)
9595
}
96-
for key, val := range u.Sets {
97-
ctyVal, err := hcltools.InterfaceToCty(val)
98-
if err != nil {
99-
return nil, err
96+
// Handle set values with version-specific syntax
97+
if len(u.Sets) > 0 {
98+
if u.isHelmProviderV3OrLater() {
99+
// v3 syntax: set as list of objects
100+
err := u.generateV3SetValues(helmBody)
101+
if err != nil {
102+
return nil, fmt.Errorf("generate v3 set values: %w", err)
103+
}
104+
} else {
105+
// v2 syntax: set as blocks
106+
err := u.generateV2SetValues(helmBody)
107+
if err != nil {
108+
return nil, fmt.Errorf("generate v2 set values: %w", err)
109+
}
100110
}
101-
setBlock := helmBody.AppendNewBlock("set", []string{})
102-
setBlock.Body().SetAttributeValue("name", cty.StringVal(key))
103-
setBlock.Body().SetAttributeValue("value", ctyVal)
104111
}
105112
if len(u.ValuesFilesList) > 0 {
106113
ctyValuesList := []cty.Value{}
@@ -172,6 +179,43 @@ func (u *Unit) generateV3ProviderConfig(providerBody *hclwrite.Body) error {
172179
return nil
173180
}
174181

182+
// generateV2SetValues generates set values for Helm provider v2.x (blocks)
183+
func (u *Unit) generateV2SetValues(helmBody *hclwrite.Body) error {
184+
for key, val := range u.Sets {
185+
ctyVal, err := hcltools.InterfaceToCty(val)
186+
if err != nil {
187+
return err
188+
}
189+
setBlock := helmBody.AppendNewBlock("set", []string{})
190+
setBlock.Body().SetAttributeValue("name", cty.StringVal(key))
191+
setBlock.Body().SetAttributeValue("value", ctyVal)
192+
}
193+
return nil
194+
}
195+
196+
// generateV3SetValues generates set values for Helm provider v3.x+ (list of objects)
197+
func (u *Unit) generateV3SetValues(helmBody *hclwrite.Body) error {
198+
setList := make([]cty.Value, 0, len(u.Sets))
199+
200+
for key, val := range u.Sets {
201+
ctyVal, err := hcltools.InterfaceToCty(val)
202+
if err != nil {
203+
return err
204+
}
205+
206+
// Create set object with name and value
207+
setObj := cty.ObjectVal(map[string]cty.Value{
208+
"name": cty.StringVal(key),
209+
"value": ctyVal,
210+
})
211+
setList = append(setList, setObj)
212+
}
213+
214+
// Set as list attribute
215+
helmBody.SetAttributeValue("set", cty.ListVal(setList))
216+
return nil
217+
}
218+
175219
func (u *Unit) ReadConfig(spec map[string]interface{}, stack *project.Stack) error {
176220
err := utils.YAMLInterfaceToType(spec, u)
177221
if err != nil {

0 commit comments

Comments
 (0)