github.com/mponton/terratest@v0.44.0/modules/gcp/gcr.go (about) 1 package gcp 2 3 import ( 4 "fmt" 5 6 gcrname "github.com/google/go-containerregistry/pkg/name" 7 gcrgoogle "github.com/google/go-containerregistry/pkg/v1/google" 8 gcrremote "github.com/google/go-containerregistry/pkg/v1/remote" 9 "github.com/mponton/terratest/modules/logger" 10 "github.com/mponton/terratest/modules/testing" 11 "github.com/stretchr/testify/require" 12 ) 13 14 // DeleteGCRRepo deletes a GCR repository including all tagged images 15 func DeleteGCRRepo(t testing.TestingT, repo string) { 16 err := DeleteGCRRepoE(t, repo) 17 require.NoError(t, err) 18 } 19 20 // DeleteGCRRepoE deletes a GCR repository including all tagged images 21 func DeleteGCRRepoE(t testing.TestingT, repo string) error { 22 // create a new auther for the API calls 23 auther, err := gcrgoogle.NewEnvAuthenticator() 24 if err != nil { 25 return fmt.Errorf("Failed to create auther. Got error: %v", err) 26 } 27 28 gcrrepo, err := gcrname.NewRepository(repo) 29 if err != nil { 30 return fmt.Errorf("Failed to get repo. Got error: %v", err) 31 } 32 33 logger.Logf(t, "Retriving Image Digests %s", gcrrepo) 34 tags, err := gcrgoogle.List(gcrrepo, gcrgoogle.WithAuth(auther)) 35 if err != nil { 36 return fmt.Errorf("Failed to list tags for repo %s. Got error: %v", repo, err) 37 } 38 39 // attempt to delete the latest image tag 40 latestRef := repo + ":latest" 41 logger.Logf(t, "Deleting Image Ref %s", latestRef) 42 if err := DeleteGCRImageRefE(t, latestRef); err != nil { 43 return fmt.Errorf("Failed to delete GCR Image Reference %s. Got error: %v", latestRef, err) 44 } 45 46 // delete image references sequentially 47 for k := range tags.Manifests { 48 ref := repo + "@" + k 49 logger.Logf(t, "Deleting Image Ref %s", ref) 50 51 if err := DeleteGCRImageRefE(t, ref); err != nil { 52 return fmt.Errorf("Failed to delete GCR Image Reference %s. Got error: %v", ref, err) 53 } 54 } 55 56 return nil 57 } 58 59 // DeleteGCRImageRef deletes a single repo image ref/digest 60 func DeleteGCRImageRef(t testing.TestingT, ref string) { 61 err := DeleteGCRImageRefE(t, ref) 62 require.NoError(t, err) 63 } 64 65 // DeleteGCRImageRefE deletes a single repo image ref/digest 66 func DeleteGCRImageRefE(t testing.TestingT, ref string) error { 67 name, err := gcrname.ParseReference(ref) 68 if err != nil { 69 return fmt.Errorf("Failed to parse reference %s. Got error: %v", ref, err) 70 } 71 72 // create a new auther for the API calls 73 auther, err := gcrgoogle.NewEnvAuthenticator() 74 if err != nil { 75 return fmt.Errorf("Failed to create auther. Got error: %v", err) 76 } 77 78 opts := gcrremote.WithAuth(auther) 79 80 if err := gcrremote.Delete(name, opts); err != nil { 81 return fmt.Errorf("Failed to delete %s. Got error: %v", name, err) 82 } 83 84 return nil 85 }