func()

in projects/aws/image-builder/builder/utils.go [255:347]


func (bo *BuildOptions) getBundle() (*releasev1.Bundles, string, error) {
	manifestDirPath, err := getManifestRoot()
	if err != nil {
		return nil, "", err
	}

	eksAReleasesManifestURL, err := getEksAReleasesManifestURL(bo.AirGapped)
	if err != nil {
		return nil, "", err
	}
	var releasesManifestContents []byte
	if bo.ManifestTarball != "" {
		eksAManifestFile := filepath.Join(manifestDirPath, eksAnywhereManifestFileName)
		log.Printf("Reading EKS-A Manifest file: %s", eksAManifestFile)
		releasesManifestContents, err = os.ReadFile(eksAManifestFile)
		if err != nil {
			return nil, "", err
		}
	} else {
		log.Printf("Reading EKS-A Manifest file: %s", eksAReleasesManifestURL)
		releasesManifestContents, err = readFileFromURL(eksAReleasesManifestURL)
		if err != nil {
			return nil, "", err
		}
	}

	releases := &releasev1.Release{}
	if err = k8syaml.Unmarshal(releasesManifestContents, releases); err != nil {
		return nil, "", fmt.Errorf("failed to unmarshal release manifest from [%s]: %v", eksAReleasesManifestURL, err)
	}

	var eksAReleaseVersion, bundleManifestUrl string
	var foundRelease bool
	if os.Getenv(eksaUseDevReleaseEnvVar) == "true" {
		eksAReleaseVersion = releases.Spec.LatestVersion
		log.Printf("EKSA_USE_DEV_RELEASE set to true, using EKS-A dev release version: %s", eksAReleaseVersion)
	} else if bo.EKSAReleaseVersion != "" {
		eksAReleaseVersion = bo.EKSAReleaseVersion
		log.Printf("EKS-A release version provided: %s", eksAReleaseVersion)
	} else if eksaVersion != "" {
		eksAReleaseVersion = eksaVersion
		log.Printf("No EKS-A release version provided, defaulting to EKS-A version configured at build time: %s", eksAReleaseVersion)
	} else {
		eksAReleaseVersion = releases.Spec.LatestVersion
		log.Printf("No EKS-A release version provided, defaulting to latest EKS-A version: %s", eksAReleaseVersion)
	}

	for _, r := range releases.Spec.Releases {
		if r.Version == eksAReleaseVersion {
			foundRelease = true
			bundleManifestUrl = r.BundleManifestUrl
			break
		}
	}

	if !foundRelease {
		// if release was not found, this is probably a dev release version which we need
		// to use a prefix match to find since the version in the release.yaml
		// will be v0.0.0-dev+build.7423
		for _, r := range releases.Spec.Releases {
			if strings.Contains(r.Version, eksAReleaseVersion) {
				foundRelease = true
				bundleManifestUrl = r.BundleManifestUrl
				break
			}
		}
	}
	if !foundRelease {
		return nil, "", fmt.Errorf("version %s is not a valid EKS-A release", eksAReleaseVersion)
	}
	var bundleManifestContents []byte
	if bo.ManifestTarball == "" {
		log.Printf("Fetching git commit from bundle manifest: %s", bundleManifestUrl)
		bundleManifestContents, err = readFileFromURL(bundleManifestUrl)
		if err != nil {
			return nil, "", err
		}
	} else {
		bundleManifestFile := filepath.Join(manifestDirPath, fmt.Sprintf(eksAnywhereBundlesFileNameFormat, eksAReleaseVersion))
		log.Printf("Fetching git commit from bundle manifest: %s", bundleManifestFile)
		bundleManifestContents, err = os.ReadFile(bundleManifestFile)
		if err != nil {
			return nil, "", err
		}
	}

	bundles := &releasev1.Bundles{}
	if err = k8syaml.Unmarshal(bundleManifestContents, bundles); err != nil {
		return nil, "", fmt.Errorf("failed to unmarshal bundles manifest from [%s]: %v", bundleManifestUrl, err)
	}

	return bundles, eksAReleaseVersion, nil
}