mirror of
https://github.com/kreuzwerker/terraform-provider-docker.git
synced 2025-12-23 16:19: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 {
|
for id := range data.DockerImages {
|
||||||
log.Printf("[DEBUG] local images data: %v", id)
|
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 {
|
if foundImage == nil {
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -122,13 +124,14 @@ func resourceDockerImageDelete(ctx context.Context, d *schema.ResourceData, meta
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func searchLocalImages(data Data, imageName string) *types.ImageSummary {
|
func searchLocalImages(ctx context.Context, client *client.Client, data Data, imageName string) *types.ImageSummary {
|
||||||
if apiImage, ok := data.DockerImages[imageName]; ok {
|
imageInspect, _, err := client.ImageInspectWithRaw(ctx, imageName)
|
||||||
log.Printf("[DEBUG] found local image via imageName: %v", imageName)
|
if err != nil {
|
||||||
return apiImage
|
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 apiImage
|
||||||
}
|
}
|
||||||
return nil
|
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")
|
return fmt.Errorf("Empty image name is not allowed")
|
||||||
}
|
}
|
||||||
|
|
||||||
foundImage := searchLocalImages(data, imageName)
|
foundImage := searchLocalImages(ctx, client, data, imageName)
|
||||||
|
|
||||||
if foundImage != nil {
|
if foundImage != nil {
|
||||||
imageDeleteResponseItems, err := client.ImageRemove(ctx, imageName, types.ImageRemoveOptions{
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
foundImage := searchLocalImages(data, imageName)
|
foundImage := searchLocalImages(ctx, client, data, imageName)
|
||||||
if foundImage != nil {
|
if foundImage != nil {
|
||||||
return foundImage, nil
|
return foundImage, nil
|
||||||
}
|
}
|
||||||
|
|
@ -297,7 +300,7 @@ func findImage(ctx context.Context, imageName string, client *client.Client, aut
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
foundImage = searchLocalImages(data, imageName)
|
foundImage = searchLocalImages(ctx, client, data, imageName)
|
||||||
if foundImage != nil {
|
if foundImage != nil {
|
||||||
return foundImage, nil
|
return foundImage, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -241,6 +241,25 @@ func testAccDockerImageDestroy(ctx context.Context, s *terraform.State) error {
|
||||||
return nil
|
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) {
|
func TestAccDockerImage_build(t *testing.T) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
wd, _ := os.Getwd()
|
wd, _ := os.Getwd()
|
||||||
|
|
@ -394,3 +413,9 @@ RUN echo ${test_arg} > test_arg.txt
|
||||||
|
|
||||||
RUN apt-get update -qq
|
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