mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00
implement init containers in podman
this is the first pass at implementing init containers for podman pods. init containersare made popular by k8s as a way to run setup for pods before the pods standard containers run. unlike k8s, we support two styles of init containers: always and oneshot. always means the container stays in the pod and starts whenever a pod is started. this does not apply to pods restarting. oneshot means the container runs onetime when the pod starts and then is removed. Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
@ -140,10 +140,29 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat
|
||||
// VM, which is the default behavior
|
||||
// - "container" denotes the container should join the VM of the SandboxID
|
||||
// (the infra container)
|
||||
|
||||
if len(s.Pod) > 0 {
|
||||
annotations[ann.SandboxID] = s.Pod
|
||||
annotations[ann.ContainerType] = ann.ContainerTypeContainer
|
||||
// Check if this is an init-ctr and if so, check if
|
||||
// the pod is running. we do not want to add init-ctrs to
|
||||
// a running pod because it creates confusion for us.
|
||||
if len(s.InitContainerType) > 0 {
|
||||
p, err := r.LookupPod(s.Pod)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
containerStatuses, err := p.Status()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// If any one of the containers is running, the pod is considered to be
|
||||
// running
|
||||
for _, con := range containerStatuses {
|
||||
if con == define.ContainerStateRunning {
|
||||
return nil, errors.New("cannot add init-ctr to a running pod")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, v := range rtc.Containers.Annotations {
|
||||
|
Reference in New Issue
Block a user