@@ -41,10 +41,49 @@ func resourceDockerImageUpdate(d *schema.ResourceData, meta interface{}) error {
4141}
4242
4343func resourceDockerImageDelete (d * schema.ResourceData , meta interface {}) error {
44+ client := meta .(* dc.Client )
45+ err := removeImage (d , client )
46+ if err != nil {
47+ return fmt .Errorf ("Unable to remove Docker image: %s" , err )
48+ }
4449 d .SetId ("" )
4550 return nil
4651}
4752
53+ func searchLocalImages (data Data , imageName string ) * dc.APIImages {
54+ if apiImage , ok := data .DockerImages [imageName ]; ok {
55+ return apiImage
56+ }
57+ if apiImage , ok := data .DockerImages [imageName + ":latest" ]; ok {
58+ imageName = imageName + ":latest"
59+ return apiImage
60+ }
61+ return nil
62+ }
63+
64+ func removeImage (d * schema.ResourceData , client * dc.Client ) error {
65+ var data Data
66+ if err := fetchLocalImages (& data , client ); err != nil {
67+ return err
68+ }
69+
70+ imageName := d .Get ("name" ).(string )
71+ if imageName == "" {
72+ return fmt .Errorf ("Empty image name is not allowed" )
73+ }
74+
75+ foundImage := searchLocalImages (data , imageName )
76+
77+ if foundImage != nil {
78+ err := client .RemoveImage (foundImage .ID )
79+ if err != nil {
80+ return err
81+ }
82+ }
83+
84+ return nil
85+ }
86+
4887func fetchLocalImages (data * Data , client * dc.Client ) error {
4988 images , err := client .ListImages (dc.ListImagesOptions {All : false })
5089 if err != nil {
@@ -146,26 +185,15 @@ func findImage(d *schema.ResourceData, client *dc.Client) (*dc.APIImages, error)
146185 return nil , fmt .Errorf ("Empty image name is not allowed" )
147186 }
148187
149- searchLocal := func () * dc.APIImages {
150- if apiImage , ok := data .DockerImages [imageName ]; ok {
151- return apiImage
152- }
153- if apiImage , ok := data .DockerImages [imageName + ":latest" ]; ok {
154- imageName = imageName + ":latest"
155- return apiImage
156- }
157- return nil
158- }
159-
160- foundImage := searchLocal ()
188+ foundImage := searchLocalImages (data , imageName )
161189
162190 if d .Get ("keep_updated" ).(bool ) || foundImage == nil {
163191 if err := pullImage (& data , client , imageName ); err != nil {
164192 return nil , fmt .Errorf ("Unable to pull image %s: %s" , imageName , err )
165193 }
166194 }
167195
168- foundImage = searchLocal ( )
196+ foundImage = searchLocalImages ( data , imageName )
169197 if foundImage != nil {
170198 return foundImage , nil
171199 }
0 commit comments