release/pkg/get_artifact_uri.go (47 lines of code) (raw):
package pkg
import (
"fmt"
"strings"
distrov1alpha1 "github.com/aws/eks-distro-build-tooling/release/api/v1alpha1"
)
func GetAssetUri(releaseManifestUrl, component, assetType, os, arch string) (string, error) {
eksDRelease, err := getEksdRelease(releaseManifestUrl)
if err != nil {
return "", fmt.Errorf("error getting EKS Distro release from manifest URL: %v", err)
}
uri, err := parseReleaseForUri(eksDRelease, component, assetType, os, arch)
if err != nil {
return "", fmt.Errorf("error parsing EKS Distro release for component URI: %v", err)
}
return uri, nil
}
func parseReleaseForUri(release *distrov1alpha1.Release, componentName, assetType, osName, arch string) (string, error) {
assets := []distrov1alpha1.Asset{}
for _, component := range release.Status.Components {
if component.Name == componentName {
for _, asset := range component.Assets {
if asset.OS == osName && strings.ToLower(asset.Type) == assetType && sliceContains(asset.Arch, arch) {
assets = append(assets, asset)
}
}
}
}
pos := 1
if len(assets) > 0 {
if len(assets) > 1 {
fmt.Printf("Component %s has the following assets corresponding to %s type:\n", componentName, assetType)
for i, asset := range assets {
fmt.Printf("%d. %s\n", (i + 1), asset.Description)
}
fmt.Printf("\nPlease select the required asset from the above list: ")
fmt.Scanf("%d\n", &pos)
}
switch assetType {
case "image":
return assets[(pos - 1)].Image.URI, nil
case "archive":
return assets[(pos - 1)].Archive.URI, nil
}
}
return "", fmt.Errorf("no artifact found for requested combination")
}