Merge pull request #8917 from mheon/actually_report_play_kube_errors

Ensure that `podman play kube` actually reports errors
This commit is contained in:
OpenShift Merge Robot
2021-01-11 17:06:49 -05:00
committed by GitHub
3 changed files with 23 additions and 12 deletions

View File

@ -12,6 +12,7 @@ import (
"github.com/containers/podman/v2/cmd/podman/utils"
"github.com/containers/podman/v2/pkg/domain/entities"
"github.com/containers/podman/v2/pkg/util"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
@ -130,6 +131,8 @@ func kube(cmd *cobra.Command, args []string) error {
}
}
ctrsFailed := 0
for _, pod := range report.Pods {
fmt.Printf("Pod:\n")
fmt.Println(pod.ID)
@ -145,9 +148,21 @@ func kube(cmd *cobra.Command, args []string) error {
for _, ctr := range pod.Containers {
fmt.Println(ctr)
}
ctrsFailed += len(pod.ContainerErrors)
// If We have errors, add a newline
if len(pod.ContainerErrors) > 0 {
fmt.Println()
}
for _, err := range pod.ContainerErrors {
fmt.Fprintf(os.Stderr, err+"\n")
}
// Empty line for space for next block
fmt.Println()
}
if ctrsFailed > 0 {
return errors.Errorf("failed to start %d containers", ctrsFailed)
}
return nil
}

View File

@ -40,6 +40,9 @@ type PlayKubePod struct {
Containers []string
// Logs - non-fatal errors and log messages while processing.
Logs []string
// ContainerErrors - any errors that occurred while starting containers
// in the pod.
ContainerErrors []string
}
// PlayKubeReport contains the results of running play kube.

View File

@ -10,6 +10,7 @@ import (
"github.com/containers/image/v5/types"
"github.com/containers/podman/v2/libpod"
"github.com/containers/podman/v2/libpod/define"
"github.com/containers/podman/v2/libpod/image"
"github.com/containers/podman/v2/pkg/domain/entities"
"github.com/containers/podman/v2/pkg/specgen/generate"
@ -251,21 +252,13 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
}
if options.Start != types.OptionalBoolFalse {
//start the containers
// Start the containers
podStartErrors, err := pod.Start(ctx)
if err != nil {
if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
return nil, err
}
// Previous versions of playkube started containers individually and then
// looked for errors. Because we now use the uber-Pod start call, we should
// iterate the map of possible errors and return one if there is a problem. This
// keeps the behavior the same
for _, e := range podStartErrors {
if e != nil {
return nil, e
}
for id, err := range podStartErrors {
playKubePod.ContainerErrors = append(playKubePod.ContainerErrors, errors.Wrapf(err, "error starting container %s", id).Error())
}
}