Skip to content

Commit 78e7d20

Browse files
hmcgonigstack72
authored andcommitted
provider/docker: Add support for a list of pull_triggers within the docker_image resource. (hashicorp#10845)
1 parent c7f6b37 commit 78e7d20

5 files changed

Lines changed: 50 additions & 16 deletions

File tree

builtin/providers/docker/resource_docker_image.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,19 @@ func resourceDockerImage() *schema.Resource {
2828
},
2929

3030
"pull_trigger": &schema.Schema{
31-
Type: schema.TypeString,
31+
Type: schema.TypeString,
32+
Optional: true,
33+
ForceNew: true,
34+
ConflictsWith: []string{"pull_triggers"},
35+
Deprecated: "Use field pull_triggers instead",
36+
},
37+
38+
"pull_triggers": &schema.Schema{
39+
Type: schema.TypeSet,
3240
Optional: true,
3341
ForceNew: true,
42+
Elem: &schema.Schema{Type: schema.TypeString},
43+
Set: schema.HashString,
3444
},
3545
},
3646
}

builtin/providers/docker/resource_docker_image_funcs.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,11 @@ func findImage(d *schema.ResourceData, client *dc.Client) (*dc.APIImages, error)
188188
return nil, fmt.Errorf("Empty image name is not allowed")
189189
}
190190

191-
foundImage := searchLocalImages(data, imageName)
192-
193-
if foundImage == nil {
194-
if err := pullImage(&data, client, imageName); err != nil {
195-
return nil, fmt.Errorf("Unable to pull image %s: %s", imageName, err)
196-
}
191+
if err := pullImage(&data, client, imageName); err != nil {
192+
return nil, fmt.Errorf("Unable to pull image %s: %s", imageName, err)
197193
}
198194

199-
foundImage = searchLocalImages(data, imageName)
195+
foundImage := searchLocalImages(data, imageName)
200196
if foundImage != nil {
201197
return foundImage, nil
202198
}

builtin/providers/docker/resource_docker_image_test.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,22 @@ func TestAccDockerImage_data(t *testing.T) {
8989
})
9090
}
9191

92+
func TestAccDockerImage_data_pull_trigger(t *testing.T) {
93+
resource.Test(t, resource.TestCase{
94+
PreCheck: func() { testAccPreCheck(t) },
95+
Providers: testAccProviders,
96+
PreventPostDestroyRefresh: true,
97+
Steps: []resource.TestStep{
98+
resource.TestStep{
99+
Config: testAccDockerImageFromDataConfigWithPullTrigger,
100+
Check: resource.ComposeTestCheckFunc(
101+
resource.TestMatchResourceAttr("docker_image.foobarbazoo", "latest", contentDigestRegexp),
102+
),
103+
},
104+
},
105+
})
106+
}
107+
92108
func testAccDockerImageDestroy(s *terraform.State) error {
93109
for _, rs := range s.RootModule().Resources {
94110
if rs.Type != "docker_image" {
@@ -131,6 +147,16 @@ data "docker_registry_image" "foobarbaz" {
131147
}
132148
resource "docker_image" "foobarbaz" {
133149
name = "${data.docker_registry_image.foobarbaz.name}"
134-
pull_trigger = "${data.docker_registry_image.foobarbaz.sha256_digest}"
150+
pull_triggers = ["${data.docker_registry_image.foobarbaz.sha256_digest}"]
151+
}
152+
`
153+
154+
const testAccDockerImageFromDataConfigWithPullTrigger = `
155+
data "docker_registry_image" "foobarbazoo" {
156+
name = "alpine:3.1"
157+
}
158+
resource "docker_image" "foobarbazoo" {
159+
name = "${data.docker_registry_image.foobarbazoo.name}"
160+
pull_trigger = "${data.docker_registry_image.foobarbazoo.sha256_digest}"
135161
}
136162
`

website/source/docs/providers/docker/d/registry_image.html.markdown

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ data "docker_registry_image" "ubuntu" {
2323
2424
resource "docker_image" "ubuntu" {
2525
name = "${data.docker_registry_image.ubuntu.name}"
26-
pull_trigger = "${data.docker_registry_image.ubuntu.sha256_digest}"
26+
pull_triggers = ["${data.docker_registry_image.ubuntu.sha256_digest}"]
2727
}
2828
```
2929

website/source/docs/providers/docker/r/image.html.markdown

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Pulls a Docker image to a given Docker host from a Docker Registry.
1414

1515
This resource will *not* pull new layers of the image automatically unless used in
1616
conjunction with [`docker_registry_image`](/docs/providers/docker/d/registry_image.html)
17-
data source to update the `pull_trigger` field.
17+
data source to update the `pull_triggers` field.
1818

1919
## Example Usage
2020

@@ -36,7 +36,7 @@ data "docker_registry_image" "ubuntu" {
3636
3737
resource "docker_image" "ubuntu" {
3838
name = "${data.docker_registry_image.ubuntu.name}"
39-
pull_trigger = "${data.docker_registry_image.ubuntu.sha256_digest}"
39+
pull_triggers = ["${data.docker_registry_image.ubuntu.sha256_digest}"]
4040
}
4141
```
4242

@@ -48,10 +48,12 @@ The following arguments are supported:
4848
* `keep_locally` - (Optional, boolean) If true, then the Docker image won't be
4949
deleted on destroy operation. If this is false, it will delete the image from
5050
the docker local storage on destroy operation.
51-
* `pull_trigger` - (Optional, string) Used to store the image digest from the
52-
registry and will cause an image pull when changed. Needed when using
53-
the `docker_registry_image` [data source](/docs/providers/docker/d/registry_image.html)
54-
to trigger an update of the image.
51+
* `pull_triggers` - (Optional, list of strings) List of values which cause an
52+
image pull when changed. This is used to store the image digest from the
53+
registry when using the `docker_registry_image` [data source](/docs/providers/docker/d/registry_image.html)
54+
to trigger an image update.
55+
* `pull_trigger` - **Deprecated**, use `pull_triggers` instead.
56+
5557

5658
## Attributes Reference
5759

0 commit comments

Comments
 (0)