From 167e4be4c4d0eb3abbfa387c10173373063c3501 Mon Sep 17 00:00:00 2001 From: Ziming Zhang Date: Tue, 7 Jan 2020 18:40:28 +0800 Subject: [PATCH] fix(replication): aws ecr delete image Signed-off-by: Ziming Zhang Change-Id: I5e38b813c2840e0270973c38680cb8f815e5ece9 Signed-off-by: Ziming Zhang --- src/replication/adapter/awsecr/adapter.go | 35 +++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/replication/adapter/awsecr/adapter.go b/src/replication/adapter/awsecr/adapter.go index 69ee60b49..d9db1e26c 100644 --- a/src/replication/adapter/awsecr/adapter.go +++ b/src/replication/adapter/awsecr/adapter.go @@ -181,3 +181,38 @@ func (a *adapter) createRepository(repository string) error { } return nil } + +// DeleteManifest ... +func (a *adapter) DeleteManifest(repository, reference string) error { + // AWS doesn't implement standard OCI delete manifest API, so use it's sdk. + if a.registry.Credential == nil || + len(a.registry.Credential.AccessKey) == 0 || len(a.registry.Credential.AccessSecret) == 0 { + return errors.New("no credential ") + } + cred := credentials.NewStaticCredentials( + a.registry.Credential.AccessKey, + a.registry.Credential.AccessSecret, + "") + if a.region == "" { + return errors.New("no region parsed") + } + config := &aws.Config{ + Credentials: cred, + Region: &a.region, + HTTPClient: &http.Client{ + Transport: registry.GetHTTPTransport(a.registry.Insecure), + }, + } + if a.forceEndpoint != nil { + config.Endpoint = a.forceEndpoint + } + sess := session.Must(session.NewSession(config)) + + svc := awsecrapi.New(sess) + + _, err := svc.BatchDeleteImage(&awsecrapi.BatchDeleteImageInput{ + RepositoryName: &repository, + ImageIds: []*awsecrapi.ImageIdentifier{{ImageTag: &reference}}, + }) + return err +}