diff --git a/internal/provider/machine_resource.go b/internal/provider/machine_resource.go index f324666..2a5b9b6 100644 --- a/internal/provider/machine_resource.go +++ b/internal/provider/machine_resource.go @@ -529,6 +529,10 @@ func (r *flyMachineResource) Update(ctx context.Context, req resource.UpdateRequ tfservices := ServicesToTfServices(updatedMachine.Config.Services) + if len(tfservices) == 0 { + tfservices = nil + } + state = flyMachineResourceData{ Name: types.StringValue(updatedMachine.Name), Region: types.StringValue(updatedMachine.Region), diff --git a/internal/provider/machine_resource_test.go b/internal/provider/machine_resource_test.go index 1816026..fb0d4ae 100644 --- a/internal/provider/machine_resource_test.go +++ b/internal/provider/machine_resource_test.go @@ -134,6 +134,31 @@ func TestAccFlyMachineEmptyServices(t *testing.T) { }) } +func TestAccFlyMachineEmptyServicesUpdate(t *testing.T) { + t.Parallel() + rName := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) + resource.Test(t, resource.TestCase{ + ProtoV6ProviderFactories: testAccProtoV6ProviderFactories, + PreCheck: func() { testAccPreCheck(t) }, + Steps: []resource.TestStep{ + { + Config: testFlyMachineResourceConfig(rName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("fly_machine.testMachine", "name", rName), + resource.TestCheckResourceAttr("fly_machine.testMachine", "services.0.protocol", "tcp"), + ), + }, + { + Config: testFlyMachineResourceNoServicesConfig(rName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("fly_machine.testMachine", "name", rName), + resource.TestCheckNoResourceAttr("fly_machine.testMachine", "services"), + ), + }, + }, + }) +} + func testFlyMachineResourceEmptyServicesConfig(name string) string { return providerConfig() + fmt.Sprintf(` resource "fly_machine" "testMachine" {