@@ -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+
175219func (u * Unit ) ReadConfig (spec map [string ]interface {}, stack * project.Stack ) error {
176220 err := utils .YAMLInterfaceToType (spec , u )
177221 if err != nil {
0 commit comments