mirror of
https://github.com/kreuzwerker/terraform-provider-docker.git
synced 2025-12-20 22:59:42 -05:00
fix: search local images with Docker image ID (#151)
* test: add a test to reproduce a problem * fix: search a local image with Docker image ID * refactor: inspect a Docker image in searchLocalImages
This commit is contained in:
parent
4936f08c4b
commit
c50524b321
2 changed files with 38 additions and 10 deletions
|
|
@ -85,8 +85,10 @@ func resourceDockerImageRead(ctx context.Context, d *schema.ResourceData, meta i
|
|||
for id := range data.DockerImages {
|
||||
log.Printf("[DEBUG] local images data: %v", id)
|
||||
}
|
||||
foundImage := searchLocalImages(data, d.Get("name").(string))
|
||||
|
||||
imageName := d.Get("name").(string)
|
||||
|
||||
foundImage := searchLocalImages(ctx, client, data, imageName)
|
||||
if foundImage == nil {
|
||||
d.SetId("")
|
||||
return nil
|
||||
|
|
@ -122,13 +124,14 @@ func resourceDockerImageDelete(ctx context.Context, d *schema.ResourceData, meta
|
|||
return nil
|
||||
}
|
||||
|
||||
func searchLocalImages(data Data, imageName string) *types.ImageSummary {
|
||||
if apiImage, ok := data.DockerImages[imageName]; ok {
|
||||
log.Printf("[DEBUG] found local image via imageName: %v", imageName)
|
||||
return apiImage
|
||||
func searchLocalImages(ctx context.Context, client *client.Client, data Data, imageName string) *types.ImageSummary {
|
||||
imageInspect, _, err := client.ImageInspectWithRaw(ctx, imageName)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
if apiImage, ok := data.DockerImages[imageName+":latest"]; ok {
|
||||
log.Printf("[DEBUG] found local image via imageName + latest: %v", imageName)
|
||||
|
||||
if apiImage, ok := data.DockerImages[imageInspect.ID]; ok {
|
||||
log.Printf("[DEBUG] found local image via imageName: %v", imageName)
|
||||
return apiImage
|
||||
}
|
||||
return nil
|
||||
|
|
@ -150,7 +153,7 @@ func removeImage(ctx context.Context, d *schema.ResourceData, client *client.Cli
|
|||
return fmt.Errorf("Empty image name is not allowed")
|
||||
}
|
||||
|
||||
foundImage := searchLocalImages(data, imageName)
|
||||
foundImage := searchLocalImages(ctx, client, data, imageName)
|
||||
|
||||
if foundImage != nil {
|
||||
imageDeleteResponseItems, err := client.ImageRemove(ctx, imageName, types.ImageRemoveOptions{
|
||||
|
|
@ -283,7 +286,7 @@ func findImage(ctx context.Context, imageName string, client *client.Client, aut
|
|||
return nil, err
|
||||
}
|
||||
|
||||
foundImage := searchLocalImages(data, imageName)
|
||||
foundImage := searchLocalImages(ctx, client, data, imageName)
|
||||
if foundImage != nil {
|
||||
return foundImage, nil
|
||||
}
|
||||
|
|
@ -297,7 +300,7 @@ func findImage(ctx context.Context, imageName string, client *client.Client, aut
|
|||
return nil, err
|
||||
}
|
||||
|
||||
foundImage = searchLocalImages(data, imageName)
|
||||
foundImage = searchLocalImages(ctx, client, data, imageName)
|
||||
if foundImage != nil {
|
||||
return foundImage, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -241,6 +241,25 @@ func testAccDockerImageDestroy(ctx context.Context, s *terraform.State) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func TestAccDockerImage_tag_sha265(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
ProviderFactories: providerFactories,
|
||||
CheckDestroy: func(state *terraform.State) error {
|
||||
return testAccDockerImageDestroy(ctx, state)
|
||||
},
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
Config: testDockerImageWithTagAndSHA256RepoDigest,
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
resource.TestMatchResourceAttr("docker_image.nginx", "latest", contentDigestRegexp),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccDockerImage_build(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
wd, _ := os.Getwd()
|
||||
|
|
@ -394,3 +413,9 @@ RUN echo ${test_arg} > test_arg.txt
|
|||
|
||||
RUN apt-get update -qq
|
||||
`
|
||||
|
||||
const testDockerImageWithTagAndSHA256RepoDigest = `
|
||||
resource "docker_image" "nginx" {
|
||||
name = "nginx:1.18.0-alpine@sha256:0c56c40f232f41c1b8341c3cc055c8b528cb6decefd7f7c8506e2d30bb9678b6"
|
||||
}
|
||||
`
|
||||
|
|
|
|||
Loading…
Reference in a new issue