timflannagan / rukpak

Rukpak runs in a Kubernetes cluster and defines an API for installing cloud native bundle content
Apache License 2.0
0 stars 0 forks source link

bundle has an image custom column -- maybe we need a source type configuration i... #16

Open github-actions[bot] opened 2 years ago

github-actions[bot] commented 2 years ago

https://github.com/timflannagan/rukpak/blob/67cb1d88a8a15695d9b35ec07e2ea252d590afd1/internal/provisioner/plain/controllers/bundle_controller.go#L252


        pod.Spec.AutomountServiceAccountToken = &automountServiceAccountToken
        pod.Spec.Volumes = []corev1.Volume{
            {Name: "util", VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}}},
            {Name: "manifests", VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}}},
        }
        pod.Spec.RestartPolicy = corev1.RestartPolicyNever
        if bundle.Spec.Source.Type == "git" {
            // Note: use host networking (hack) so we can resolve https://github.com references in the
            // Bundle's spec.Source.Git.Repository. Maybe we should revisit having the user inline https://github.com?
            pod.Spec.HostNetwork = true
        }

        targetInitContainers := 1
        if bundle.Spec.Source.Type == "git" {
            targetInitContainers = 2
        }
        if len(pod.Spec.InitContainers) != targetInitContainers {
            pod.Spec.InitContainers = make([]corev1.Container, targetInitContainers)
        }
        pod.Spec.InitContainers[0].Name = "install-unpack"
        pod.Spec.InitContainers[0].Image = r.UnpackImage
        pod.Spec.InitContainers[0].ImagePullPolicy = corev1.PullIfNotPresent
        pod.Spec.InitContainers[0].Command = []string{"cp", "-Rv", "/unpack", "/util/unpack"}
        pod.Spec.InitContainers[0].VolumeMounts = []corev1.VolumeMount{{Name: "util", MountPath: "/util"}}

        // Note: initContainer so we can ensure the repository has been cloned
        // at the bundle.Spec.Source.Git.Ref before we unpack the Bundle contents
        // that are stored in the repository.
        if bundle.Spec.Source.Type == "git" {
            pod.Spec.InitContainers[1].Name = "clone-repository"
            pod.Spec.InitContainers[1].Image = "bitnami/git:latest"
            pod.Spec.InitContainers[1].ImagePullPolicy = corev1.PullIfNotPresent
            // TODO: length check
            // TODO: function responsible for determine which ref to use
            // TODO: bundle unpack failing silently when pod log stream is empty (e.g. `{}`)
            // TODO: bundle has an image custom column -- maybe we need a source type configuration instead?
            // TODO: bundleinstance reporting a successful installation state despite installing nothing.
            source := bundle.Spec.Source.Git
            repository := source.Repository
            directory := "./manifests"
            if source.Directory != "" {
                directory = source.Directory
            }
            checkedCommand := fmt.Sprintf("git clone %s && cd %s && git checkout %s && cp -r %s/* /manifests", repository, strings.Split(repository, "/")[4], source.Ref.Commit, directory)
            pod.Spec.InitContainers[1].Command = []string{"/bin/bash", "-c", checkedCommand}
            pod.Spec.InitContainers[1].VolumeMounts = []corev1.VolumeMount{{Name: "util", MountPath: "/util"}, {Name: "manifests", MountPath: "/manifests"}}
        }

        if len(pod.Spec.Containers) != 1 {
            pod.Spec.Containers = make([]corev1.Container, 1)
        }

        if bundle.Spec.Source.Type == "image" {
            pod.Spec.Containers[0].Name = bundleUnpackContainerName
            pod.Spec.Containers[0].Image = bundle.Spec.Source.Image.Ref
            pod.Spec.Containers[0].ImagePullPolicy = corev1.PullAlways
            pod.Spec.Containers[0].Command = []string{"/util/unpack", "--bundle-dir", "/manifests"}
            pod.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{{Name: "util", MountPath: "/util"}}
            return nil
        }
        if bundle.Spec.Source.Type == "git" {
            pod.Spec.Containers[0].Name = bundleUnpackContainerName
            pod.Spec.Containers[0].Image = "bitnami/git:latest"
            pod.Spec.Containers[0].ImagePullPolicy = corev1.PullAlways
            pod.Spec.Containers[0].Command = []string{"/util/unpack", "--bundle-dir", "/manifests"}
            pod.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{{Name: "util", MountPath: "/util"}, {Name: "manifests", MountPath: "/manifests"}}
            return nil
        }
        return nil
    })
}
github-actions[bot] commented 2 years ago

This issue has become stale because it has been open 60 days with no activity. The maintainers of this repo will remove this label during issue triage or it will be removed automatically after an update. Adding the lifecycle/frozen label will cause this issue to ignore lifecycle events.