timflannagan/rukpak

length check

github-actions opened this issue · 1 comments

		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
	})
}