Fix bug with empty initialize_params block (#664)

* fix initialize params bug

* make sure all init params are deleted, not just #
This commit is contained in:
Dana Hoffman 2017-11-03 15:25:54 -07:00 committed by GitHub
parent 49a91427b4
commit f68765f5cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 3 deletions

View File

@ -42,7 +42,7 @@ func resourceComputeInstance() *schema.Resource {
Update: resourceComputeInstanceUpdate,
Delete: resourceComputeInstanceDelete,
SchemaVersion: 5,
SchemaVersion: 6,
MigrateState: resourceComputeInstanceMigrateState,
Schema: map[string]*schema.Schema{

View File

@ -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)
@ -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"]
}
@ -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
}

View File

@ -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 {