@@ -22,6 +22,7 @@ package cloudstack
22
22
import (
23
23
"fmt"
24
24
"strconv"
25
+ "strings"
25
26
26
27
"github.com/apache/cloudstack-go/v2/cloudstack"
27
28
"github.com/hashicorp/terraform/helper/schema"
@@ -77,13 +78,13 @@ func resourceCloudStackServiceOfferingRead(d *schema.ResourceData, meta interfac
77
78
d .Set ("offer_ha" , s .Offerha )
78
79
d .Set ("provisioning_type" , s .Provisioningtype )
79
80
d .Set ("root_disk_size" , s .Rootdisksize )
80
- // duplicate values
81
- // d.Set("service_offering_details", s.Serviceofferingdetails)
82
81
d .Set ("storage_policy" , s .Vspherestoragepolicy )
83
82
d .Set ("storage_type" , s .Storagetype )
84
83
d .Set ("system_vm_type" , s .Systemvmtype )
85
84
d .Set ("tags" , s .Storagetags )
86
- d .Set ("zone_id" , s .Zoneid )
85
+ if len (s .Zoneid ) > 0 {
86
+ d .Set ("zone_id" , strings .Split (s .Zoneid , "," ))
87
+ }
87
88
88
89
return nil
89
90
}
@@ -104,11 +105,20 @@ func resourceCloudStackServiceOfferingUpdate(d *schema.ResourceData, meta interf
104
105
if v , ok := d .GetOk ("name" ); ok {
105
106
p .SetName (v .(string ))
106
107
}
107
- if v , ok := d .GetOk ("storage_tags " ); ok {
108
+ if v , ok := d .GetOk ("tags " ); ok {
108
109
p .SetStoragetags (v .(string ))
109
110
}
111
+
110
112
if v , ok := d .GetOk ("zone_id" ); ok {
111
- p .SetZoneid (v .(string ))
113
+ zone_id := v .(* schema.Set ).List ()
114
+ items := make ([]string , len (zone_id ))
115
+ for i , raw := range zone_id {
116
+ items [i ] = raw .(string )
117
+ }
118
+ p .SetZoneid (strings .Join (items , "," ))
119
+ } else {
120
+ // Special parameter not documented in spec.
121
+ p .SetZoneid ("all" )
112
122
}
113
123
114
124
_ , err := cs .ServiceOffering .UpdateServiceOffering (p )
@@ -191,8 +201,12 @@ func serviceOfferingMergeCommonSchema(s1 map[string]*schema.Schema) map[string]*
191
201
Optional : true ,
192
202
ForceNew : true ,
193
203
},
204
+ "tags" : {
205
+ Type : schema .TypeString ,
206
+ Optional : true ,
207
+ },
194
208
"zone_id" : {
195
- Type : schema .TypeList ,
209
+ Type : schema .TypeSet ,
196
210
Optional : true ,
197
211
Elem : & schema.Schema {
198
212
Type : schema .TypeString ,
@@ -225,6 +239,9 @@ func serviceOfferingCreateParams(p *cloudstack.CreateServiceOfferingParams, d *s
225
239
if v , ok := d .GetOk ("disk_offering_id" ); ok {
226
240
p .SetDiskofferingid (v .(string ))
227
241
}
242
+ if v , ok := d .GetOk ("tags" ); ok {
243
+ p .SetTags (v .(string ))
244
+ }
228
245
229
246
// Features flags
230
247
p .SetDynamicscalingenabled (d .Get ("dynamic_scaling_enabled" ).(bool ))
@@ -243,7 +260,7 @@ func serviceOfferingCreateParams(p *cloudstack.CreateServiceOfferingParams, d *s
243
260
}
244
261
245
262
if v , ok := d .GetOk ("zone_id" ); ok {
246
- zone_id := v .([] interface {} )
263
+ zone_id := v .(* schema. Set ). List ( )
247
264
items := make ([]string , len (zone_id ))
248
265
for i , raw := range zone_id {
249
266
items [i ] = raw .(string )
@@ -268,9 +285,6 @@ func serviceOfferingCreateParams(p *cloudstack.CreateServiceOfferingParams, d *s
268
285
tmp , _ := strconv .Atoi (v2 .(string ))
269
286
p .SetRootdisksize (int64 (tmp ))
270
287
}
271
- if v2 , ok2 := offering ["tags" ]; ok2 {
272
- p .SetTags (v2 .(string ))
273
- }
274
288
if v2 , ok2 := offering ["disk_offering_strictness" ]; ok2 {
275
289
tmp , _ := strconv .ParseBool (v2 .(string ))
276
290
p .SetDiskofferingstrictness (tmp )
@@ -406,11 +420,6 @@ func serviceOfferingDisk() *schema.Schema {
406
420
Computed : true ,
407
421
ForceNew : true ,
408
422
},
409
- "tags" : {
410
- Type : schema .TypeString ,
411
- Optional : true ,
412
- ForceNew : true ,
413
- },
414
423
"storage_type" : {
415
424
Type : schema .TypeInt ,
416
425
Required : true ,
0 commit comments