diff --git a/resource_docker_image.go b/resource_docker_image.go index 9c2f84d4..eb84a257 100644 --- a/resource_docker_image.go +++ b/resource_docker_image.go @@ -28,9 +28,19 @@ func resourceDockerImage() *schema.Resource { }, "pull_trigger": &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Optional: true, + ForceNew: true, + ConflictsWith: []string{"pull_triggers"}, + Deprecated: "Use field pull_triggers instead", + }, + + "pull_triggers": &schema.Schema{ + Type: schema.TypeSet, Optional: true, ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, }, } diff --git a/resource_docker_image_funcs.go b/resource_docker_image_funcs.go index 72cbc8ea..9c27b425 100644 --- a/resource_docker_image_funcs.go +++ b/resource_docker_image_funcs.go @@ -188,15 +188,11 @@ func findImage(d *schema.ResourceData, client *dc.Client) (*dc.APIImages, error) return nil, fmt.Errorf("Empty image name is not allowed") } - foundImage := searchLocalImages(data, imageName) - - if foundImage == nil { - if err := pullImage(&data, client, imageName); err != nil { - return nil, fmt.Errorf("Unable to pull image %s: %s", imageName, err) - } + if err := pullImage(&data, client, imageName); err != nil { + return nil, fmt.Errorf("Unable to pull image %s: %s", imageName, err) } - foundImage = searchLocalImages(data, imageName) + foundImage := searchLocalImages(data, imageName) if foundImage != nil { return foundImage, nil } diff --git a/resource_docker_image_test.go b/resource_docker_image_test.go index 484c45e8..4d75a617 100644 --- a/resource_docker_image_test.go +++ b/resource_docker_image_test.go @@ -89,6 +89,22 @@ func TestAccDockerImage_data(t *testing.T) { }) } +func TestAccDockerImage_data_pull_trigger(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + PreventPostDestroyRefresh: true, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccDockerImageFromDataConfigWithPullTrigger, + Check: resource.ComposeTestCheckFunc( + resource.TestMatchResourceAttr("docker_image.foobarbazoo", "latest", contentDigestRegexp), + ), + }, + }, + }) +} + func testAccDockerImageDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { if rs.Type != "docker_image" { @@ -131,6 +147,16 @@ data "docker_registry_image" "foobarbaz" { } resource "docker_image" "foobarbaz" { name = "${data.docker_registry_image.foobarbaz.name}" - pull_trigger = "${data.docker_registry_image.foobarbaz.sha256_digest}" + pull_triggers = ["${data.docker_registry_image.foobarbaz.sha256_digest}"] +} +` + +const testAccDockerImageFromDataConfigWithPullTrigger = ` +data "docker_registry_image" "foobarbazoo" { + name = "alpine:3.1" +} +resource "docker_image" "foobarbazoo" { + name = "${data.docker_registry_image.foobarbazoo.name}" + pull_trigger = "${data.docker_registry_image.foobarbazoo.sha256_digest}" } `