in release/cli/pkg/bundles/cluster-api.go [119:206]
func GetKubeadmBootstrapBundle(r *releasetypes.ReleaseConfig, imageDigests releasetypes.ImageDigestsTable) (anywherev1alpha1.KubeadmBootstrapBundle, error) {
projectsInBundle := []string{"cluster-api", "kube-rbac-proxy"}
kubeadmBootstrapBundleArtifacts := map[string][]releasetypes.Artifact{}
for _, project := range projectsInBundle {
projectArtifacts, err := r.BundleArtifactsTable.Load(project)
if err != nil {
return anywherev1alpha1.KubeadmBootstrapBundle{}, fmt.Errorf("artifacts for project %s not found in bundle artifacts table", project)
}
kubeadmBootstrapBundleArtifacts[project] = projectArtifacts
}
sortedComponentNames := bundleutils.SortArtifactsMap(kubeadmBootstrapBundleArtifacts)
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 kubeadmBootstrapBundleArtifacts[componentName] {
if artifact.Image != nil {
imageArtifact := artifact.Image
if componentName == "cluster-api" {
if imageArtifact.AssetName != "kubeadm-bootstrap-controller" {
continue
}
sourceBranch = imageArtifact.SourcedFromBranch
}
imageDigest, err := imageDigests.Load(imageArtifact.ReleaseImageURI)
if err != nil {
return anywherev1alpha1.KubeadmBootstrapBundle{}, 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
if manifestArtifact.Component != "bootstrap-kubeadm" {
continue
}
bundleManifestArtifact := anywherev1alpha1.Manifest{
URI: manifestArtifact.ReleaseCdnURI,
}
bundleManifestArtifacts[manifestArtifact.ReleaseName] = bundleManifestArtifact
manifestHash, err := version.GenerateManifestHash(r, manifestArtifact)
if err != nil {
return anywherev1alpha1.KubeadmBootstrapBundle{}, 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.CapiProjectPath, sourceBranch, r),
componentChecksum,
)
if err != nil {
return anywherev1alpha1.KubeadmBootstrapBundle{}, errors.Wrapf(err, "Error getting version for cluster-api")
}
bundle := anywherev1alpha1.KubeadmBootstrapBundle{
Version: version,
Controller: bundleImageArtifacts["kubeadm-bootstrap-controller"],
KubeProxy: bundleImageArtifacts["kube-rbac-proxy"],
Components: bundleManifestArtifacts["bootstrap-components.yaml"],
Metadata: bundleManifestArtifacts["metadata.yaml"],
}
return bundle, nil
}