in release/cli/pkg/bundles/vsphere.go [29:118]
func GetVsphereBundle(r *releasetypes.ReleaseConfig, eksDReleaseChannel string, imageDigests releasetypes.ImageDigestsTable) (anywherev1alpha1.VSphereBundle, error) {
projectsInBundle := []string{"cluster-api-provider-vsphere", "kube-rbac-proxy", "kube-vip"}
vsphereBundleArtifacts := map[string][]releasetypes.Artifact{}
for _, project := range projectsInBundle {
projectArtifacts, err := r.BundleArtifactsTable.Load(project)
if err != nil {
return anywherev1alpha1.VSphereBundle{}, fmt.Errorf("artifacts for project %s not found in bundle artifacts table", project)
}
vsphereBundleArtifacts[project] = projectArtifacts
}
vSphereCloudProviderArtifacts, err := r.BundleArtifactsTable.Load(fmt.Sprintf("cloud-provider-vsphere-%s", eksDReleaseChannel))
if err != nil {
return anywherev1alpha1.VSphereBundle{}, fmt.Errorf("artifacts for project cloud-provider-vsphere-%s not found in bundle artifacts table", eksDReleaseChannel)
}
vsphereBundleArtifacts["cloud-provider-vsphere"] = vSphereCloudProviderArtifacts
sortedComponentNames := bundleutils.SortArtifactsMap(vsphereBundleArtifacts)
var sourceBranch string
var componentChecksum string
bundleImageArtifacts := map[string]anywherev1alpha1.Image{}
bundleManifestArtifacts := map[string]anywherev1alpha1.Manifest{}
artifactHashes := []string{}
for _, componentName := range sortedComponentNames {
for _, artifact := range vsphereBundleArtifacts[componentName] {
if artifact.Image != nil {
imageArtifact := artifact.Image
if componentName == "cluster-api-provider-vsphere" {
sourceBranch = imageArtifact.SourcedFromBranch
}
imageDigest, err := imageDigests.Load(imageArtifact.ReleaseImageURI)
if err != nil {
return anywherev1alpha1.VSphereBundle{}, fmt.Errorf("loading digest from image digests table: %v", err)
}
bundleImageArtifact := anywherev1alpha1.Image{
Name: imageArtifact.AssetName,
Description: fmt.Sprintf("Container image for %s image", imageArtifact.AssetName),
OS: imageArtifact.OS,
Arch: imageArtifact.Arch,
URI: imageArtifact.ReleaseImageURI,
ImageDigest: imageDigest,
}
bundleImageArtifacts[imageArtifact.AssetName] = bundleImageArtifact
artifactHashes = append(artifactHashes, bundleImageArtifact.ImageDigest)
}
if artifact.Manifest != nil {
manifestArtifact := artifact.Manifest
bundleManifestArtifact := anywherev1alpha1.Manifest{
URI: manifestArtifact.ReleaseCdnURI,
}
bundleManifestArtifacts[manifestArtifact.ReleaseName] = bundleManifestArtifact
manifestHash, err := version.GenerateManifestHash(r, manifestArtifact)
if err != nil {
return anywherev1alpha1.VSphereBundle{}, err
}
artifactHashes = append(artifactHashes, manifestHash)
}
}
}
if r.DryRun {
componentChecksum = version.FakeComponentChecksum
} else {
componentChecksum = version.GenerateComponentHash(artifactHashes, r.DryRun)
}
version, err := version.BuildComponentVersion(
version.NewVersionerWithGITTAG(r.BuildRepoSource, constants.CapvProjectPath, sourceBranch, r),
componentChecksum,
)
if err != nil {
return anywherev1alpha1.VSphereBundle{}, errors.Wrapf(err, "Error getting version for cluster-api-provider-vsphere")
}
bundle := anywherev1alpha1.VSphereBundle{
Version: version,
ClusterAPIController: bundleImageArtifacts["cluster-api-provider-vsphere"],
KubeProxy: bundleImageArtifacts["kube-rbac-proxy"],
Manager: bundleImageArtifacts["cloud-provider-vsphere"],
KubeVip: bundleImageArtifacts["kube-vip"],
Components: bundleManifestArtifacts["infrastructure-components.yaml"],
ClusterTemplate: bundleManifestArtifacts["cluster-template.yaml"],
Metadata: bundleManifestArtifacts["metadata.yaml"],
}
return bundle, nil
}