Skip to content

Commit

Permalink
fix: merge init container definition of pod manifest template with ou…
Browse files Browse the repository at this point in the history
…r init container
  • Loading branch information
pascalbreuninger committed Jul 23, 2024
1 parent b83a4c3 commit 5a0d0c5
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 13 deletions.
50 changes: 38 additions & 12 deletions pkg/kubernetes/init_container.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
corev1 "k8s.io/api/core/v1"
)

func (k *KubernetesDriver) getInitContainer(options *driver.RunOptions) ([]corev1.Container, error) {
func (k *KubernetesDriver) getInitContainer(options *driver.RunOptions, pod *corev1.Pod) ([]corev1.Container, error) {
commands := []string{}

// find the volume type mounts
Expand Down Expand Up @@ -39,16 +39,42 @@ func (k *KubernetesDriver) getInitContainer(options *driver.RunOptions) ([]corev
securityContext = nil
}

return []corev1.Container{
{
Name: "devpod-init",
Image: options.Image,
Command: []string{"sh"},
Args: []string{"-c", strings.Join(commands, "\n") + "\n"},
Resources: parseResources(k.options.HelperResources, k.Log),
VolumeMounts: volumeMounts,
SecurityContext: securityContext,
},
}, nil
retContainers := []corev1.Container{}
initContainer := corev1.Container{
Name: InitContainerName,
Image: options.Image,
Command: []string{"sh"},
Args: []string{"-c", strings.Join(commands, "\n") + "\n"},
Resources: parseResources(k.options.HelperResources, k.Log),
VolumeMounts: volumeMounts,
SecurityContext: securityContext,
}

// look for existing init container definition
var existingInitContainer *corev1.Container
if len(pod.Spec.InitContainers) > 0 {
for i, container := range pod.Spec.InitContainers {
if container.Name == InitContainerName {
existingInitContainer = &pod.Spec.InitContainers[i]
} else {
retContainers = append(retContainers, container)
}
}
}

if existingInitContainer != nil {
initContainer.Env = append(existingInitContainer.Env, initContainer.Env...)
initContainer.EnvFrom = existingInitContainer.EnvFrom
initContainer.Ports = existingInitContainer.Ports
initContainer.VolumeMounts = append(existingInitContainer.VolumeMounts, initContainer.VolumeMounts...)
initContainer.ImagePullPolicy = existingInitContainer.ImagePullPolicy

if initContainer.SecurityContext == nil && existingInitContainer.SecurityContext != nil {
initContainer.SecurityContext = existingInitContainer.SecurityContext
}
}
retContainers = append(retContainers, initContainer)

return retContainers, nil

}
3 changes: 2 additions & 1 deletion pkg/kubernetes/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
)

const DevContainerName = "devpod"
const InitContainerName = "devpod-init"

const (
DevPodCreatedLabel = "devpod.sh/created"
Expand Down Expand Up @@ -130,7 +131,7 @@ func (k *KubernetesDriver) runContainer(
// get init container
var initContainer []corev1.Container
if initialize {
initContainer, err = k.getInitContainer(options)
initContainer, err = k.getInitContainer(options, pod)
if err != nil {
return errors.Wrap(err, "build init container")
}
Expand Down

0 comments on commit 5a0d0c5

Please sign in to comment.