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, ×tampData)
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
}