/
repository.go
66 lines (52 loc) · 1.47 KB
/
repository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package ecr
import (
"fmt"
"github.com/aws/aws-sdk-go/service/ecr"
)
type Image struct {
RegistryId *string
RepositoryName string
ImageDigest *string
ImageTags *[]*string
}
func (i *Image) DockerTag() string {
repo := i.RepositoryName
if i.RegistryId != nil {
repo = fmt.Sprintf("%s.dkr.ecr.region.amazonaws.com/%s", *i.RegistryId, i.RepositoryName)
}
if i.ImageTags != nil && len(*i.ImageTags) == 1 {
return fmt.Sprintf("%s:%s", repo, *(*i.ImageTags)[0])
}
return i.RepositoryName
}
func (i *Image) isValid() error {
if i.RepositoryName == "" {
return fmt.Errorf("Image must have a repository")
}
return nil
}
func (i *Image) Find(reg *ecr.ECR) ([]*ecr.ImageDetail, error) {
if err := i.isValid(); err != nil {
return nil, err
}
input := i.unpackDescribeInput()
imgout, err := reg.DescribeImages(input)
if err != nil {
return nil, err
}
return imgout.ImageDetails, nil
}
func (i *Image) unpackDescribeInput() *ecr.DescribeImagesInput {
describeImagesInput := &ecr.DescribeImagesInput{}
describeImagesInput.RepositoryName = &i.RepositoryName
describeImagesInput.RegistryId = i.RegistryId
if i.ImageDigest != nil {
describeImagesInput.ImageIds = append(describeImagesInput.ImageIds, &ecr.ImageIdentifier{ImageDigest: i.ImageDigest})
}
if i.ImageTags != nil {
for _, tag := range *i.ImageTags {
describeImagesInput.ImageIds = append(describeImagesInput.ImageIds, &ecr.ImageIdentifier{ImageTag: tag})
}
}
return describeImagesInput
}