func verifyBRImageExists()

in tools/version-tracker/pkg/commands/upgrade/upgrade.go [974:1024]


func verifyBRImageExists(channel, format, bottlerocketVersion string) (bool, error) {
	kubeVersion := strings.ReplaceAll(channel, "-", ".")
	var variant, imageTarget string
	switch format {
	case "ami":
		variant = "aws"
		imageTarget = fmt.Sprintf(constants.BottlerocketAMIImageTargetFormat, variant, kubeVersion, bottlerocketVersion)
	case "ova":
		variant = "vmware"
		imageTarget = fmt.Sprintf(constants.BottlerocketOVAImageTargetFormat, variant, kubeVersion, bottlerocketVersion)
	case "raw":
		variant = "metal"
		imageTarget = fmt.Sprintf(constants.BottlerocketRawImageTargetFormat, variant, kubeVersion, bottlerocketVersion)
	}

	timestampURL := fmt.Sprintf(constants.BottlerocketTimestampJSONURLFormat, variant, kubeVersion)
	timestampManifest, err := file.ReadURL(timestampURL)
	if err != nil {
		return false, fmt.Errorf("reading Bottlerocket timestamp URL: %v", err)
	}

	var timestampData interface{}
	err = json.Unmarshal(timestampManifest, &timestampData)
	if err != nil {
		return false, fmt.Errorf("unmarshalling Bottlerocket timestamp manifest: %v", err)
	}

	version := timestampData.(map[string]interface{})["signed"].(map[string]interface{})["version"].(float64)
	versionString := fmt.Sprintf("%.0f", version)

	targetsURL := fmt.Sprintf(constants.BottlerocketTargetsJSONURLFormat, variant, kubeVersion, versionString)
	targetsManifest, err := file.ReadURL(targetsURL)
	if err != nil {
		return false, fmt.Errorf("reading Bottlerocket targets URL: %v", err)
	}

	var targetsData interface{}
	err = json.Unmarshal(targetsManifest, &targetsData)
	if err != nil {
		return false, fmt.Errorf("unmarshalling Bottlerocket targets manifest: %v", err)
	}

	targets := targetsData.(map[string]interface{})["signed"].(map[string]interface{})["targets"].(map[string]interface{})
	for target := range targets {
		if target == imageTarget {
			return true, nil
		}
	}

	return false, nil
}