Skip to content

Commit

Permalink
Change update method for boot_disk.auto_delete on `google_compute_i…
Browse files Browse the repository at this point in the history
…nstance` (GoogleCloudPlatform#11742)

Co-authored-by: Cameron Thornton <[email protected]>
Co-authored-by: Riley Karson <[email protected]>
  • Loading branch information
3 people authored and amanMahendroo committed Dec 17, 2024
1 parent 9d8dd42 commit b9de366
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,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 @@ -2502,6 +2501,18 @@ 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 fmt.Errorf("Error changing auto_delete: %s", err)
}
opErr := ComputeOperationWaitTime(config, op, project, "changing auto_delete", userAgent, d.Timeout(schema.TimeoutUpdate))
if opErr != nil {
return opErr
}
}

// 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 @@ -3664,6 +3664,49 @@ 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"),
),
},
},
})
}

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

Expand Down Expand Up @@ -11117,29 +11160,55 @@ 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)
}

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

resource "google_compute_instance" "foobar" {
name = "%{instance_name}"
machine_type = "e2-medium"
zone = "us-central1-a"
name = "%{instance_name}"
machine_type = "e2-medium"
zone = "us-central1-a"

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

network_interface {
network = "default"
}
network_interface {
network = "default"
}

key_revocation_action_type = %{key_revocation_action_type}
key_revocation_action_type = %{key_revocation_action_type}
}
`, context)
}

0 comments on commit b9de366

Please sign in to comment.