Skip to content
This repository was archived by the owner on Dec 2, 2020. It is now read-only.

Commit 7114182

Browse files
committed
Output registered layers as yaml file too
1 parent 26a34ad commit 7114182

File tree

5 files changed

+66
-20
lines changed

5 files changed

+66
-20
lines changed

img2lambda/Gopkg.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

img2lambda/Gopkg.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@
2929
[[override]]
3030
name = "github.com/docker/distribution"
3131
revision = "83389a148052d74ac602f5f1d62f86ff2f3c4aa5"
32+
33+
[[constraint]]
34+
name = "gopkg.in/yaml.v2"
35+
version = "2.2.2"

img2lambda/cli/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func repackImageAction(opts *types.CmdOptions) error {
112112
}
113113

114114
if !opts.DryRun {
115-
_, err := publish.PublishLambdaLayers(types.ConvertToPublishOptions(opts), layers)
115+
_, _, err := publish.PublishLambdaLayers(types.ConvertToPublishOptions(opts), layers)
116116
if err != nil {
117117
return err
118118
}

img2lambda/publish/publish_layers.go

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ import (
1212
"path/filepath"
1313
"strings"
1414

15+
yaml "gopkg.in/yaml.v2"
16+
1517
"github.com/aws/aws-sdk-go/aws"
1618
"github.com/aws/aws-sdk-go/service/lambda"
1719
"github.com/aws/aws-sdk-go/service/lambda/lambdaiface"
1820
"github.com/awslabs/aws-lambda-container-image-converter/img2lambda/types"
1921
)
2022

21-
func PublishLambdaLayers(opts *types.PublishOptions, layers []types.LambdaLayer) (string, error) {
23+
func PublishLambdaLayers(opts *types.PublishOptions, layers []types.LambdaLayer) (string, string, error) {
2224
layerArns := []string{}
2325

2426
for _, layer := range layers {
@@ -43,12 +45,12 @@ func PublishLambdaLayers(opts *types.PublishOptions, layers []types.LambdaLayer)
4345

4446
layerContents, err := ioutil.ReadFile(layer.File)
4547
if err != nil {
46-
return "", err
48+
return "", "", err
4749
}
4850

4951
found, existingArn, err := matchExistingLambdaLayer(layerName, layerContents, &opts.LambdaClient)
5052
if err != nil {
51-
return "", err
53+
return "", "", err
5254
}
5355

5456
if found {
@@ -65,7 +67,7 @@ func PublishLambdaLayers(opts *types.PublishOptions, layers []types.LambdaLayer)
6567

6668
resp, err := opts.LambdaClient.PublishLayerVersion(publishArgs)
6769
if err != nil {
68-
return "", err
70+
return "", "", err
6971
}
7072

7173
layerArns = append(layerArns, *resp.LayerVersionArn)
@@ -74,30 +76,47 @@ func PublishLambdaLayers(opts *types.PublishOptions, layers []types.LambdaLayer)
7476

7577
err = os.Remove(layer.File)
7678
if err != nil {
77-
return "", err
79+
return "", "", err
7880
}
7981
}
8082

8183
jsonArns, err := json.MarshalIndent(layerArns, "", " ")
8284
if err != nil {
83-
return "", err
85+
return "", "", err
8486
}
8587

86-
resultsPath := filepath.Join(opts.ResultsDir, "layers.json")
87-
jsonFile, err := os.Create(resultsPath)
88+
jsonResultsPath := filepath.Join(opts.ResultsDir, "layers.json")
89+
jsonFile, err := os.Create(jsonResultsPath)
8890
if err != nil {
89-
return "", err
91+
return "", "", err
9092
}
9193
defer jsonFile.Close()
9294

9395
_, err = jsonFile.Write(jsonArns)
9496
if err != nil {
95-
return "", err
97+
return "", "", err
98+
}
99+
100+
yamlArns, err := yaml.Marshal(layerArns)
101+
if err != nil {
102+
return "", "", err
103+
}
104+
105+
yamlResultsPath := filepath.Join(opts.ResultsDir, "layers.yaml")
106+
yamlFile, err := os.Create(yamlResultsPath)
107+
if err != nil {
108+
return "", "", err
109+
}
110+
defer yamlFile.Close()
111+
112+
_, err = yamlFile.Write(yamlArns)
113+
if err != nil {
114+
return "", "", err
96115
}
97116

98-
log.Printf("Lambda layer ARNs (%d total) are written to %s", len(layerArns), resultsPath)
117+
log.Printf("Lambda layer ARNs (%d total) are written to %s and %s", len(layerArns), jsonResultsPath, yamlResultsPath)
99118

100-
return resultsPath, nil
119+
return jsonResultsPath, yamlResultsPath, nil
101120
}
102121

103122
func matchExistingLambdaLayer(layerName string, layerContents []byte, lambdaClient *lambdaiface.LambdaAPI) (bool, string, error) {

img2lambda/publish/publish_layers_test.go

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111
"strconv"
1212
"testing"
1313

14+
yaml "gopkg.in/yaml.v2"
15+
1416
"github.com/aws/aws-sdk-go/aws"
1517
"github.com/aws/aws-sdk-go/service/lambda"
1618
"github.com/awslabs/aws-lambda-container-image-converter/img2lambda/internal/testing/mocks"
@@ -19,7 +21,7 @@ import (
1921
"github.com/stretchr/testify/assert"
2022
)
2123

22-
func parseResult(t *testing.T, resultsFilename string) []string {
24+
func parseJSONResult(t *testing.T, resultsFilename string) []string {
2325
resultContents, err := ioutil.ReadFile(resultsFilename)
2426
assert.Nil(t, err)
2527
var resultArns []string
@@ -29,6 +31,16 @@ func parseResult(t *testing.T, resultsFilename string) []string {
2931
return resultArns
3032
}
3133

34+
func parseYAMLResult(t *testing.T, resultsFilename string) []string {
35+
resultContents, err := ioutil.ReadFile(resultsFilename)
36+
assert.Nil(t, err)
37+
var resultArns []string
38+
err = yaml.Unmarshal(resultContents, &resultArns)
39+
assert.Nil(t, err)
40+
os.Remove(resultsFilename)
41+
return resultArns
42+
}
43+
3244
func mockLayer(t *testing.T, n int) types.LambdaLayer {
3345
tmpFile, err := ioutil.TempFile("", "")
3446
assert.Nil(t, err)
@@ -205,10 +217,13 @@ func TestNoLayers(t *testing.T) {
205217

206218
layers := []types.LambdaLayer{}
207219

208-
resultsFilename, err := PublishLambdaLayers(opts, layers)
220+
jsonResultsFilename, yamlResultsFilename, err := PublishLambdaLayers(opts, layers)
209221
assert.Nil(t, err)
210222

211-
resultArns := parseResult(t, resultsFilename)
223+
resultArns := parseJSONResult(t, jsonResultsFilename)
224+
assert.Len(t, resultArns, 0)
225+
226+
resultArns = parseYAMLResult(t, yamlResultsFilename)
212227
assert.Len(t, resultArns, 0)
213228

214229
os.Remove(dir)
@@ -236,10 +251,16 @@ func TestPublishSuccess(t *testing.T) {
236251
mockPublishNoMatchingLayers(t, lambdaClient, 2)
237252
mockMatchingLayer(t, lambdaClient, 3)
238253

239-
resultsFilename, err := PublishLambdaLayers(opts, layers)
254+
jsonResultsFilename, yamlResultsFilename, err := PublishLambdaLayers(opts, layers)
240255
assert.Nil(t, err)
241256

242-
resultArns := parseResult(t, resultsFilename)
257+
resultArns := parseJSONResult(t, jsonResultsFilename)
258+
assert.Len(t, resultArns, 3)
259+
assert.Equal(t, "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-1:1", resultArns[0])
260+
assert.Equal(t, "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-2:1", resultArns[1])
261+
assert.Equal(t, "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-3:1", resultArns[2])
262+
263+
resultArns = parseYAMLResult(t, yamlResultsFilename)
243264
assert.Len(t, resultArns, 3)
244265
assert.Equal(t, "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-1:1", resultArns[0])
245266
assert.Equal(t, "arn:aws:lambda:us-east-2:123456789012:layer:example-layer-2:1", resultArns[1])
@@ -287,9 +308,10 @@ func TestPublishError(t *testing.T) {
287308
PublishLayerVersion(gomock.Eq(expectedInput1)).
288309
Return(nil, errors.New("Access denied"))
289310

290-
resultsFilename, err := PublishLambdaLayers(opts, layers)
311+
jsonResultsFilename, yamlResultsFilename, err := PublishLambdaLayers(opts, layers)
291312
assert.Error(t, err)
292-
assert.Equal(t, "", resultsFilename)
313+
assert.Equal(t, "", jsonResultsFilename)
314+
assert.Equal(t, "", yamlResultsFilename)
293315

294316
os.Remove(layers[0].File)
295317
os.Remove(layers[1].File)

0 commit comments

Comments
 (0)