Skip to content

Commit e852297

Browse files
committed
feat(instance): brk change, use TypeMap for user_data and remove user_data
1 parent 637b885 commit e852297

3 files changed

+1671
-10520
lines changed

scaleway/resource_instance_server.go

+16-36
Original file line numberDiff line numberDiff line change
@@ -194,26 +194,11 @@ func resourceScalewayInstanceServer() *schema.Resource {
194194
ValidateFunc: validation.StringLenBetween(0, 127998),
195195
},
196196
"user_data": {
197-
Type: schema.TypeSet,
197+
Type: schema.TypeMap,
198198
Optional: true,
199-
MaxItems: 98,
200199
Description: "The user data associated with the server", // TODO: document reserved keys (`cloud-init`)
201-
Set: userDataHash,
202-
Elem: &schema.Resource{
203-
Schema: map[string]*schema.Schema{
204-
"key": {
205-
Type: schema.TypeString,
206-
Required: true,
207-
ValidateFunc: validationStringNotInSlice([]string{"cloud-init"}, true),
208-
Description: "A user data key, the value \"cloud-init\" is not allowed",
209-
},
210-
"value": {
211-
Type: schema.TypeString,
212-
Required: true,
213-
ValidateFunc: validation.StringLenBetween(0, 127998),
214-
Description: "A user value",
215-
},
216-
},
200+
Elem: &schema.Schema{
201+
Type: schema.TypeString,
217202
},
218203
},
219204
"zone": zoneSchema(),
@@ -340,11 +325,9 @@ func resourceScalewayInstanceServerCreate(ctx context.Context, d *schema.Resourc
340325
UserData: make(map[string]io.Reader),
341326
}
342327

343-
if allUserData, ok := d.GetOk("user_data"); ok {
344-
userDataSet := allUserData.(*schema.Set)
345-
for _, rawUserData := range userDataSet.List() {
346-
userData := rawUserData.(map[string]interface{})
347-
userDataRequests.UserData[userData["key"].(string)] = bytes.NewBufferString(userData["value"].(string))
328+
if rawUserData, ok := d.GetOk("user_data"); ok {
329+
for key, value := range rawUserData.(map[string]interface{}) {
330+
userDataRequests.UserData[key] = bytes.NewBufferString(value.(string))
348331
}
349332
}
350333

@@ -487,23 +470,20 @@ func resourceScalewayInstanceServerRead(ctx context.Context, d *schema.ResourceD
487470
ServerID: ID,
488471
}, scw.WithContext(ctx))
489472

490-
var userDataList []interface{}
473+
userData := make(map[string]interface{})
491474
for key, value := range allUserData.UserData {
492-
userData, err := ioutil.ReadAll(value)
475+
userDataValue, err := ioutil.ReadAll(value)
493476
if err != nil {
494477
return diag.FromErr(err)
495478
}
496-
if key != "cloud-init" {
497-
userDataList = append(userDataList, map[string]interface{}{
498-
"key": key,
499-
"value": string(userData),
500-
})
501-
} else {
502-
_ = d.Set("cloud_init", string(userData))
503-
}
504-
}
505-
if len(userDataList) > 0 {
506-
_ = d.Set("user_data", schema.NewSet(userDataHash, userDataList))
479+
//if key != "cloud-init" {
480+
userData[key] = string(userDataValue)
481+
// } else {
482+
//_ = d.Set("cloud_init", string(userDataValue))
483+
//}
484+
}
485+
if len(userData) > 0 {
486+
_ = d.Set("user_data", userData)
507487
}
508488

509489
return nil

scaleway/resource_instance_server_test.go

+10-62
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,6 @@ func TestAccScalewayInstanceServer_UserData_WithCloudInitAtStart(t *testing.T) {
346346
CheckDestroy: testAccCheckScalewayInstanceServerDestroy(tt),
347347
Steps: []resource.TestStep{
348348
{
349-
// With cloud-init and user data
350349
Config: `
351350
data "scaleway_instance_image" "ubuntu" {
352351
architecture = "x86_64"
@@ -357,71 +356,19 @@ func TestAccScalewayInstanceServer_UserData_WithCloudInitAtStart(t *testing.T) {
357356
image = "${data.scaleway_instance_image.ubuntu.id}"
358357
type = "DEV1-S"
359358
360-
user_data {
361-
key = "plop"
362-
value = "world"
363-
}
364-
365-
user_data {
366-
key = "blanquette"
367-
value = "hareng pomme à l'huile"
368-
}
369-
370-
cloud_init = <<EOF
359+
user_data = {
360+
foo = "bar"
361+
cloud-init = <<EOF
371362
#cloud-config
372363
apt_update: true
373364
apt_upgrade: true
374-
EOF
365+
EOF
366+
}
375367
}`,
376368
Check: resource.ComposeTestCheckFunc(
377369
testAccCheckScalewayInstanceServerExists(tt, "scaleway_instance_server.base"),
378-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "user_data.0.key", "blanquette"),
379-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "user_data.0.value", "hareng pomme à l'huile"),
380-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "user_data.1.key", "plop"),
381-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "user_data.1.value", "world"),
382-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "cloud_init", "#cloud-config\napt_update: true\napt_upgrade: true\n"),
383-
),
384-
},
385-
{
386-
// With cloud-init and without user data
387-
Config: `
388-
data "scaleway_instance_image" "ubuntu" {
389-
architecture = "x86_64"
390-
name = "Ubuntu 20.04 Focal Fossa"
391-
}
392-
393-
resource "scaleway_instance_server" "base" {
394-
image = "${data.scaleway_instance_image.ubuntu.id}"
395-
type = "DEV1-S"
396-
cloud_init = <<EOF
397-
#cloud-config
398-
apt_update: true
399-
apt_upgrade: true
400-
EOF
401-
}`,
402-
Check: resource.ComposeTestCheckFunc(
403-
testAccCheckScalewayInstanceServerExists(tt, "scaleway_instance_server.base"),
404-
resource.TestCheckNoResourceAttr("scaleway_instance_server.base", "user_data"),
405-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "cloud_init", "#cloud-config\napt_update: true\napt_upgrade: true\n"),
406-
),
407-
},
408-
{
409-
// No user data nor cloud init
410-
Config: `
411-
data "scaleway_instance_image" "ubuntu" {
412-
architecture = "x86_64"
413-
name = "Ubuntu 20.04 Focal Fossa"
414-
}
415-
416-
resource "scaleway_instance_server" "base" {
417-
image = "${data.scaleway_instance_image.ubuntu.id}"
418-
type = "DEV1-S"
419-
tags = [ "terraform-test", "scaleway_instance_server", "user_data" ]
420-
}`,
421-
Check: resource.ComposeTestCheckFunc(
422-
testAccCheckScalewayInstanceServerExists(tt, "scaleway_instance_server.base"),
423-
resource.TestCheckNoResourceAttr("scaleway_instance_server.base", "user_data"),
424-
resource.TestCheckResourceAttr("scaleway_instance_server.base", "cloud_init", ""),
370+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "user_data.foo", "bar"),
371+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "user_data.cloud-init", "#cloud-config\napt_update: true\napt_upgrade: true\n"),
425372
),
426373
},
427374
},
@@ -452,7 +399,6 @@ func TestAccScalewayInstanceServer_UserData_WithoutCloudInitAtStart(t *testing.T
452399
Check: resource.ComposeTestCheckFunc(
453400
testAccCheckScalewayInstanceServerExists(tt, "scaleway_instance_server.base"),
454401
resource.TestCheckNoResourceAttr("scaleway_instance_server.base", "user_data"),
455-
resource.TestCheckNoResourceAttr("scaleway_instance_server.base", "cloud_init"),
456402
),
457403
},
458404
{
@@ -468,11 +414,13 @@ func TestAccScalewayInstanceServer_UserData_WithoutCloudInitAtStart(t *testing.T
468414
type = "DEV1-S"
469415
tags = [ "terraform-test", "scaleway_instance_server", "user_data" ]
470416
471-
cloud_init = <<EOF
417+
user_data = {
418+
cloud-init = <<EOF
472419
#cloud-config
473420
apt_update: true
474421
apt_upgrade: true
475422
EOF
423+
}
476424
}`,
477425
Check: resource.ComposeTestCheckFunc(
478426
testAccCheckScalewayInstanceServerExists(tt, "scaleway_instance_server.base"),

0 commit comments

Comments
 (0)