From 33d4c44292f35e6a06b952541f2c01bdcc47bda3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Sodr=C3=A9?= Date: Wed, 20 Apr 2016 19:14:06 -0400 Subject: [PATCH] Fixes time out when applying updates to Triton machine metadata. (#6149) * Add Triton Metadata modification AccTest. The test starts the basic machine and then adds the metadata field user_data. Test fails if the user_data field does not match what we expect OR it times out. Related to hashicorp/terraform#6148 * Fix the non-convergence of Triton metadata changes The code waiting for the entire Machine Metadata to "deep equal" the Terraform metadata modifications. These two sets will only be the same if the user changes all metadata fields of the resource before calling `apply`. Closes hashicorp/terraform#6148 --- builtin/providers/triton/resource_machine.go | 7 +++- .../providers/triton/resource_machine_test.go | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/builtin/providers/triton/resource_machine.go b/builtin/providers/triton/resource_machine.go index 009ab5b3d6..5e16903263 100644 --- a/builtin/providers/triton/resource_machine.go +++ b/builtin/providers/triton/resource_machine.go @@ -365,7 +365,12 @@ func resourceMachineUpdate(d *schema.ResourceData, meta interface{}) error { err = waitFor( func() (bool, error) { machine, err := client.GetMachine(d.Id()) - return reflect.DeepEqual(machine.Metadata, metadata), err + for k, v := range metadata { + if provider_v, ok := machine.Metadata[k]; !ok || v != provider_v { + return false, err + } + } + return true, err }, machineStateChangeCheckInterval, 1*time.Minute, diff --git a/builtin/providers/triton/resource_machine_test.go b/builtin/providers/triton/resource_machine_test.go index ce629e8a74..a0860b853a 100644 --- a/builtin/providers/triton/resource_machine_test.go +++ b/builtin/providers/triton/resource_machine_test.go @@ -115,6 +115,34 @@ func TestAccTritonMachine_firewall(t *testing.T) { }) } +func TestAccTritonMachine_metadata(t *testing.T) { + machineName := fmt.Sprintf("acctest-%d", acctest.RandInt()) + basic := fmt.Sprintf(testAccTritonMachine_basic, machineName) + add_metadata := fmt.Sprintf(testAccTritonMachine_basic, machineName) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckTritonMachineDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: basic, + Check: resource.ComposeTestCheckFunc( + testCheckTritonMachineExists("triton_machine.test"), + ), + }, + resource.TestStep{ + Config: add_metadata, + Check: resource.ComposeTestCheckFunc( + testCheckTritonMachineExists("triton_machine.test"), + resource.TestCheckResourceAttr( + "triton_machine.test", "user_data", "hello"), + ), + }, + }, + }) +} + var testAccTritonMachine_basic = ` resource "triton_machine" "test" { name = "%s" @@ -145,3 +173,17 @@ resource "triton_machine" "test" { firewall_enabled = 1 } ` + +var testAccTritonMachine_metadata_1 = ` +resource "triton_machine" "test" { + name = "%s" + package = "t4-standard-128M" + image = "eb9fc1ea-e19a-11e5-bb27-8b954d8c125c" + + user_data = "hello" + + tags = { + test = "hello!" + } +} +`