Skip to content

Commit 575d12c

Browse files
committed
Adding delete all layer versions functionality for layer_version resource
1 parent 99c54dd commit 575d12c

File tree

8 files changed

+101
-2
lines changed

8 files changed

+101
-2
lines changed

apis/v1alpha1/ack-generate-metadata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ api_directory_checksum: 8002bb4a0dad2ac145a596554897088e82ea3823
77
api_version: v1alpha1
88
aws_sdk_go_version: v1.44.181
99
generator_config_info:
10-
file_checksum: e007d88ecf6ad1c45cb6451f5fda9401af9d7305
10+
file_checksum: 095af1082df5c34cdc12296dc085bc6b2b7eadb9
1111
original_file_name: generator.yaml
1212
last_modification:
1313
reason: API generation

apis/v1alpha1/generator.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ resources:
153153
operation: ReadOne
154154
tags:
155155
ignore: true
156+
hooks:
157+
sdk_delete_pre_build_request:
158+
template_path: hooks/layer_version/sdk_delete_pre_build_request.go.tpl
156159
renames:
157160
operations:
158161
GetLayerVersion:

generator.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ resources:
153153
operation: ReadOne
154154
tags:
155155
ignore: true
156+
hooks:
157+
sdk_delete_pre_build_request:
158+
template_path: hooks/layer_version/sdk_delete_pre_build_request.go.tpl
156159
renames:
157160
operations:
158161
GetLayerVersion:

pkg/resource/layer_version/hooks.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License"). You may
4+
// not use this file except in compliance with the License. A copy of the
5+
// License is located at
6+
//
7+
// http://aws.amazon.com/apache2.0/
8+
//
9+
// or in the "license" file accompanying this file. This file is distributed
10+
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
11+
// express or implied. See the License for the specific language governing
12+
// permissions and limitations under the License.
13+
14+
package layer_version
15+
16+
import (
17+
"context"
18+
"fmt"
19+
"sort"
20+
21+
ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log"
22+
svcsdk "github.com/aws/aws-sdk-go/service/lambda"
23+
)
24+
25+
// customPreDelete deletes all the previous versions of a
26+
// LayerVersion except the latest version
27+
// This function is used as a sdk_delete hook, to delete all the previous versions of a LayerVersion when delete API call is made
28+
func customPreDelete(
29+
r *resource,
30+
rm *resourceManager,
31+
ctx context.Context,
32+
) error {
33+
// Getting the list of all the versions of a LayerVersion
34+
input := &svcsdk.ListLayerVersionsInput{
35+
LayerName: r.ko.Spec.LayerName,
36+
}
37+
response, err := rm.sdkapi.ListLayerVersionsWithContext(ctx, input)
38+
if err != nil {
39+
return err
40+
}
41+
42+
log := ackrtlog.FromContext(ctx)
43+
log.Debug("Deleting previous versions of LayerVersion")
44+
45+
// The above API call returns output containing list of versions as LayerVersions and a pagination token as NextMarker
46+
47+
// Extracting the list of versions and assigning it to a new variable
48+
versionList := response.LayerVersions
49+
50+
// sorting the list in ascending order
51+
sort.Slice(versionList, func(i, j int) bool {
52+
return *versionList[i].Version < *versionList[j].Version
53+
})
54+
55+
for i := 0; i < len(versionList)-1; i++ {
56+
input := &svcsdk.DeleteLayerVersionInput{
57+
LayerName: r.ko.Spec.LayerName,
58+
VersionNumber: versionList[i].Version,
59+
}
60+
// Delete API call to delete the versions one by one
61+
logMessage := fmt.Sprintf("Deleting version %v of %v", *input.VersionNumber, *input.LayerName)
62+
log.Debug(logMessage)
63+
64+
_, err = rm.sdkapi.DeleteLayerVersionWithContext(ctx, input)
65+
rm.metrics.RecordAPICall("DELETE", "DeleteLayerVersion", err)
66+
if err != nil {
67+
return err
68+
}
69+
}
70+
71+
return nil
72+
}

pkg/resource/layer_version/sdk.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if err = customPreDelete(r,rm,ctx); err != nil{
2+
return nil, err
3+
}

test/e2e/tests/helper.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,14 @@ def get_layer_version(self, layer_name: str, version_number: int) -> dict:
126126
return None
127127

128128
def layer_version_exists(self, layer_name:str, version_number: int) -> bool:
129-
return self.get_layer_version(layer_name, version_number) is not None
129+
return self.get_layer_version(layer_name, version_number) is not None
130+
131+
def list_layer_versions(self, layer_name:str) -> list:
132+
try:
133+
resp = self.lambda_client.list_layer_versions(
134+
LayerName = layer_name
135+
)
136+
return resp
137+
except Exception as e:
138+
logging.debug(e)
139+
return None

test/e2e/tests/test_layer_version.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ def test_smoke(self, lambda_client):
103103
_, deleted = k8s.delete_custom_resource(ref)
104104
assert deleted is True
105105

106+
# Check if all versions are deleted
107+
layer_name = cr['spec']['layerName']
108+
list = lambda_validator.list_layer_versions(layer_name)
109+
assert len(list["LayerVersions"]) == 0
110+
106111
time.sleep(DELETE_WAIT_AFTER_SECONDS)
107112

108113
# Check layer version doesn't exist

0 commit comments

Comments
 (0)