diff --git a/resource_docker_image.go b/resource_docker_image.go index 54822d73..09b6d32b 100644 --- a/resource_docker_image.go +++ b/resource_docker_image.go @@ -26,6 +26,11 @@ func resourceDockerImage() *schema.Resource { Type: schema.TypeString, Computed: true, }, + + "keep_locally": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + }, }, } } diff --git a/resource_docker_image_funcs.go b/resource_docker_image_funcs.go index cccb37dc..03d287c0 100644 --- a/resource_docker_image_funcs.go +++ b/resource_docker_image_funcs.go @@ -63,6 +63,11 @@ func searchLocalImages(data Data, imageName string) *dc.APIImages { func removeImage(d *schema.ResourceData, client *dc.Client) error { var data Data + + if keepLocally := d.Get("keep_locally").(bool); keepLocally { + return nil + } + if err := fetchLocalImages(&data, client); err != nil { return err } diff --git a/resource_docker_image_test.go b/resource_docker_image_test.go index 23e535f9..adf35fd9 100644 --- a/resource_docker_image_test.go +++ b/resource_docker_image_test.go @@ -44,9 +44,36 @@ func TestAccDockerImage_private(t *testing.T) { }) } -func testAccDockerImageDestroy(s *terraform.State) error { - //client := testAccProvider.Meta().(*dc.Client) +func TestAccDockerImage_destroy(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: func(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "docker_image" { + continue + } + client := testAccProvider.Meta().(*dc.Client) + _, err := client.InspectImage(rs.Primary.Attributes["latest"]) + if err != nil { + return err + } + } + return nil + }, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccDockerImageKeepLocallyConfig, + Check: resource.ComposeTestCheckFunc( + resource.TestMatchResourceAttr("docker_image.foobarzoo", "latest", contentDigestRegexp), + ), + }, + }, + }) +} + +func testAccDockerImageDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { if rs.Type != "docker_image" { continue @@ -76,3 +103,10 @@ resource "docker_image" "foobar" { keep_updated = true } ` + +const testAccDockerImageKeepLocallyConfig = ` +resource "docker_image" "foobarzoo" { + name = "crux:3.1" + keep_locally = true +} +`