fix(buildx): Recreate builder if deleted out-of-band (#797)

This commit is contained in:
Martin 2025-09-29 22:08:43 +02:00 committed by GitHub
parent 949a709069
commit 587fa20b96
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 38 additions and 0 deletions

View file

@ -539,8 +539,15 @@ func resourceDockerBuildxBuilderRead(ctx context.Context, d *schema.ResourceData
builder.WithSkippedValidation(),
)
if err != nil {
log.Printf("[DEBUG] Failed to read Buildx builder %s: %v", name, err)
if strings.Contains(err.Error(), fmt.Sprintf("no builder \"%s\" found", name)) {
log.Printf("[DEBUG] Buildx builder %s not found, removing from state", name)
d.SetId("")
return nil
}
return diag.FromErr(err)
}
return nil
}

View file

@ -1,6 +1,7 @@
package provider
import (
"os/exec"
"testing"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
@ -20,3 +21,33 @@ func TestAccDockerBuildxBuilder_DockerContainerDriver(t *testing.T) {
},
})
}
func TestAccDockerBuildxBuilder_OutOfBandDeletion(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: providerFactories,
Steps: []resource.TestStep{
{
Config: loadTestConfiguration(t, RESOURCE, "docker_buildx_builder", "testAccDockerBuildxBuilderDockerContainer"),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("docker_buildx_builder.foo", "name"),
),
},
{
// This step simulates the external deletion or non-existence of the resource
PreConfig: func() {
if err := exec.Command("docker", "buildx", "rm", "foo").Run(); err != nil {
t.Fatalf("failed to delete resource externally: %v", err)
}
},
PlanOnly: true,
Config: loadTestConfiguration(t, RESOURCE, "docker_buildx_builder", "testAccDockerBuildxBuilderDockerContainer"),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("docker_buildx_builder.foo", "name", "test"),
),
// We expect the plan to show that the resource will be recreated because it was deleted out-of-band
ExpectNonEmptyPlan: true,
},
},
})
}