Skip to content

Commit

Permalink
change update method of auto_delete field
Browse files Browse the repository at this point in the history
  • Loading branch information
karolgorc committed Sep 18, 2024
1 parent 8420234 commit 144cf03
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,6 @@ func ResourceComputeInstance() *schema.Resource {
Optional: true,
AtLeastOneOf: bootDiskKeys,
Default: true,
ForceNew: true,
Description: `Whether the disk will be auto-deleted when the instance is deleted.`,
},

Expand Down Expand Up @@ -2405,6 +2404,19 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
}
}

// if any other boot_disk fields will be added here this should be wrapped in if d.HasChange("boot_disk")
if d.HasChange("boot_disk.0.auto_delete") {
op, err := config.NewComputeClient(userAgent).Instances.SetDiskAutoDelete(project, zone, instance.Name, d.Get("boot_disk.0.auto_delete").(bool), d.Get("boot_disk.0.device_name").(string)).Do()
if err != nil {
return errwrap.Wrapf("Error setting auto_delete : {{err}}", err)
}
opErr := ComputeOperationWaitTime(config, op, project, "changing auto_delete", userAgent, d.Timeout(schema.TimeoutUpdate))
if opErr != nil {
return opErr
}
log.Printf("[DEBUG] Successfully changed auto_delete on disk %s", instance.Disks[0].DeviceName)
}

// d.HasChange("service_account") is oversensitive: see https://github.com/hashicorp/terraform/issues/17411
// Until that's fixed, manually check whether there is a change.
o, n := d.GetChange("service_account")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3360,6 +3360,50 @@ func TestAccComputeInstance_proactiveAttributionLabel(t *testing.T) {
})
}

func TestAccComputeInstance_autoDeleteUpdate(t *testing.T) {
t.Parallel()

var instance compute.Instance
context_1 := map[string]interface{}{
"instance_name": fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10)),
"auto_delete": "true",
}

context_2 := map[string]interface{}{
"instance_name": context_1["instance_name"],
"auto_delete": "false",
}

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
CheckDestroy: testAccCheckComputeInstanceDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccComputeInstance_autoDeleteUpdate(context_1),
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeInstanceExists(t, "google_compute_instance.foobar", &instance),
resource.TestCheckResourceAttr("google_compute_instance.foobar", "boot_disk.0.auto_delete", "true"),
),
},
{
Config: testAccComputeInstance_autoDeleteUpdate(context_2),
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeInstanceExists(t, "google_compute_instance.foobar", &instance),
resource.TestCheckResourceAttr("google_compute_instance.foobar", "boot_disk.0.auto_delete", "false"),
),
},
{
Config: testAccComputeInstance_autoDeleteUpdate(context_1),
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeInstanceExists(t, "google_compute_instance.foobar", &instance),
resource.TestCheckResourceAttr("google_compute_instance.foobar", "boot_disk.0.auto_delete", "true"),
),
},
},
})
}

<% unless version == 'ga' -%>
const errorDeleteAccessConfigWithSecPolicy = "Cannot delete an access config with a security policy set. Please remove the security policy first"

Expand Down Expand Up @@ -10569,3 +10613,29 @@ resource "google_compute_instance" "foobar" {
}
`, diskName, instanceName, machineType, zone, bootDiskInterface, allowStoppingForUpdate)
}

func testAccComputeInstance_autoDeleteUpdate(context map[string]interface{}) string {
return acctest.Nprintf(`
data "google_compute_image" "my_image" {
family = "debian-11"
project = "debian-cloud"
}

resource "google_compute_instance" "foobar" {
name = "%{instance_name}"
machine_type = "n1-standard-1"
zone = "us-central1-a"

boot_disk {
auto_delete = %{auto_delete}
initialize_params {
image = data.google_compute_image.my_image.self_link
}
}

network_interface {
network = "default"
}
}
`, context)
}

0 comments on commit 144cf03

Please sign in to comment.