Skip to content

Commit

Permalink
feat: get images from tasks
Browse files Browse the repository at this point in the history
Signed-off-by: Bradley Jones <bradley.jones@anchore.com>
  • Loading branch information
bradleyjones committed Dec 21, 2022
1 parent 179a725 commit be175cd
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 8 deletions.
6 changes: 3 additions & 3 deletions ecg/inventory/reportitem.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (

// ReportItem represents a cluster and all it's unique images
type ReportItem struct {
Cluster string `json:"cluster,omitempty"`
Images []ReportImage `json:"images"`
ClusterARN string `json:"cluster_arn,omitempty"`
Images []ReportImage `json:"images"`
}

// ReportImage represents a unique image in a cluster
Expand All @@ -18,7 +18,7 @@ type ReportImage struct {

// String represent the ReportItem as a string
func (r *ReportItem) String() string {
return fmt.Sprintf("ReportItem(cluster=%s, images=%v)", r.Cluster, r.Images)
return fmt.Sprintf("ReportItem(cluster=%s, images=%v)", r.ClusterARN, r.Images)
}

// key will return a unique key for a ReportImage
Expand Down
43 changes: 39 additions & 4 deletions ecg/lib.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ func GetInventoryReport(cfg *config.Application) (inventory.Report, error) {
return inventory.Report{}, err
}

results := []inventory.ReportItem{}

for _, cluster := range clusters {
log.Debug("Found cluster", "cluster", *cluster)

Expand All @@ -85,14 +87,17 @@ func GetInventoryReport(cfg *config.Application) (inventory.Report, error) {
if err != nil {
return inventory.Report{}, err
}
for _, task := range tasks {
log.Debug("Found task", "task", *task)
}
images, err := fetchImagesFromTasks(ecsClient, *cluster, tasks)

results = append(results, inventory.ReportItem{
ClusterARN: *cluster,
Images: images,
})
}

return inventory.Report{
Timestamp: time.Now().UTC().Format(time.RFC3339),
Results: []inventory.ReportItem{},
Results: results,
InventoryType: "ecs",
}, nil
}
Expand Down Expand Up @@ -134,3 +139,33 @@ func fetchTasksFromCluster(client *ecs.ECS, cluster string) ([]*string, error) {

return result.TaskArns, nil
}

func fetchImagesFromTasks(client *ecs.ECS, cluster string, tasks []*string) ([]inventory.ReportImage, error) {
input := &ecs.DescribeTasksInput{
Cluster: aws.String(cluster),
Tasks: tasks,
}

results, err := client.DescribeTasks(input)
if err != nil {
return []inventory.ReportImage{}, err
}

images := []inventory.ReportImage{}
for r := range results.Tasks {
task := results.Tasks[r]
for c := range task.Containers {
container := task.Containers[c]
digest := ""
if container.ImageDigest != nil {
digest = *container.ImageDigest
}
images = append(images, inventory.ReportImage{
Tag: *container.Image,
RepoDigest: digest,
})
}
}

return images, nil
}
2 changes: 1 addition & 1 deletion ecg/presenter/table/presenter.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (pres *Presenter) Present(output io.Writer) error {

columns := []string{"Image Tag", "Repo Digest", "Cluster"}
for _, n := range pres.report.Results {
cluster := n.Cluster
cluster := n.ClusterARN
for _, image := range n.Images {
row := []string{image.Tag, image.RepoDigest, cluster}
rows = append(rows, row)
Expand Down

0 comments on commit be175cd

Please sign in to comment.