Skip to content

Commit

Permalink
Fix bug with empty initialize_params block (#664)
Browse files Browse the repository at this point in the history
* fix initialize params bug

* make sure all init params are deleted, not just #
  • Loading branch information
danawillow authored Nov 3, 2017
1 parent 49a9142 commit f68765f
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 3 deletions.
2 changes: 1 addition & 1 deletion google/resource_compute_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func resourceComputeInstance() *schema.Resource {
Update: resourceComputeInstanceUpdate,
Delete: resourceComputeInstanceDelete,

SchemaVersion: 5,
SchemaVersion: 6,
MigrateState: resourceComputeInstanceMigrateState,

Schema: map[string]*schema.Schema{
Expand Down
28 changes: 26 additions & 2 deletions google/resource_compute_instance_migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,14 @@ func resourceComputeInstanceMigrateState(
if err != nil {
return is, err
}
// when adding case 5, make sure to turn this into a fallthrough
fallthrough
case 5:
log.Println("[INFO] Found Compute Instance State v5; migrating to v6")
is, err = migrateStateV5toV6(is)
if err != nil {
return is, err
}
// when adding case 6, make sure to turn this into a fallthrough
return is, err
default:
return is, fmt.Errorf("Unexpected schema version: %d", v)
Expand Down Expand Up @@ -238,7 +245,7 @@ func migrateStateV3toV4(is *terraform.InstanceState, meta interface{}) (*terrafo
is.Attributes["boot_disk.0.disk_encryption_key_raw"] = is.Attributes["disk.0.disk_encryption_key_raw"]
is.Attributes["boot_disk.0.disk_encryption_key_sha256"] = is.Attributes["disk.0.disk_encryption_key_sha256"]

if is.Attributes["disk.0.size"] != "" {
if is.Attributes["disk.0.size"] != "" && is.Attributes["disk.0.size"] != "0" {
is.Attributes["boot_disk.0.initialize_params.#"] = "1"
is.Attributes["boot_disk.0.initialize_params.0.size"] = is.Attributes["disk.0.size"]
}
Expand Down Expand Up @@ -489,3 +496,20 @@ func getDiskFromAutoDeleteAndImage(config *Config, instance *compute.Instance, a

return nil, fmt.Errorf("could not find attached disk with image %q", image)
}

func migrateStateV5toV6(is *terraform.InstanceState) (*terraform.InstanceState, error) {
log.Printf("[DEBUG] Attributes before migration: %#v", is.Attributes)
if is.Attributes["boot_disk.0.initialize_params.#"] == "1" {
if (is.Attributes["boot_disk.0.initialize_params.0.size"] == "0" ||
is.Attributes["boot_disk.0.initialize_params.0.size"] == "") &&
is.Attributes["boot_disk.0.initialize_params.0.type"] == "" &&
is.Attributes["boot_disk.0.initialize_params.0.image"] == "" {
is.Attributes["boot_disk.0.initialize_params.#"] = "0"
delete(is.Attributes, "boot_disk.0.initialize_params.0.size")
delete(is.Attributes, "boot_disk.0.initialize_params.0.type")
delete(is.Attributes, "boot_disk.0.initialize_params.0.image")
}
}
log.Printf("[DEBUG] Attributes after migration: %#v", is.Attributes)
return is, nil
}
10 changes: 10 additions & 0 deletions google/resource_compute_instance_migrate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ func TestComputeInstanceMigrateState(t *testing.T) {
"create_timeout": "4",
},
},
"remove empty initialize_params": {
StateVersion: 5,
Attributes: map[string]string{
"boot_disk.0.initialize_params.#": "1",
"boot_disk.0.initialize_params.0.size": "0",
},
Expected: map[string]string{
"boot_disk.0.initialize_params.#": "0",
},
},
}

for tn, tc := range cases {
Expand Down

0 comments on commit f68765f

Please sign in to comment.