From e4a1d21a4b18da159488b1c6fa8b41f51e725adc Mon Sep 17 00:00:00 2001 From: Xavier Sellier Date: Wed, 27 Apr 2016 12:18:02 -0400 Subject: [PATCH] Provider Docker: (#6376) - Add option keep_locally - Add unit test - Add documentation --- .../providers/docker/resource_docker_image.go | 5 +++ .../docker/resource_docker_image_funcs.go | 5 +++ .../docker/resource_docker_image_test.go | 38 ++++++++++++++++++- .../providers/docker/r/image.html.markdown | 3 ++ 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/builtin/providers/docker/resource_docker_image.go b/builtin/providers/docker/resource_docker_image.go index 54822d738..09b6d32b8 100644 --- a/builtin/providers/docker/resource_docker_image.go +++ b/builtin/providers/docker/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/builtin/providers/docker/resource_docker_image_funcs.go b/builtin/providers/docker/resource_docker_image_funcs.go index cccb37dcf..03d287c0b 100644 --- a/builtin/providers/docker/resource_docker_image_funcs.go +++ b/builtin/providers/docker/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/builtin/providers/docker/resource_docker_image_test.go b/builtin/providers/docker/resource_docker_image_test.go index 23e535f9e..adf35fd9f 100644 --- a/builtin/providers/docker/resource_docker_image_test.go +++ b/builtin/providers/docker/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 +} +` diff --git a/website/source/docs/providers/docker/r/image.html.markdown b/website/source/docs/providers/docker/r/image.html.markdown index 584f373af..d6c0dcf56 100644 --- a/website/source/docs/providers/docker/r/image.html.markdown +++ b/website/source/docs/providers/docker/r/image.html.markdown @@ -33,6 +33,9 @@ The following arguments are supported: always be updated on the host to the latest. If this is false, as long as an image is downloaded with the correct tag, it won't be redownloaded if there is a newer image. +* `keep_locally` - (Optional, boolean) If true, then the Docker image won't be + deleted on destroy operation. If this is false, it will delete the image from + the docker local storage on destroy operation. ## Attributes Reference