Merge pull request #6846 from mheon/fix_pod_errors

Print errors from individual containers in pods
This commit is contained in:
OpenShift Merge Robot
2020-07-06 06:26:19 -04:00
committed by GitHub
3 changed files with 28 additions and 24 deletions

View File

@ -70,6 +70,10 @@ var (
// ErrInternal indicates an internal library error // ErrInternal indicates an internal library error
ErrInternal = errors.New("internal libpod error") ErrInternal = errors.New("internal libpod error")
// ErrPodPartialFail indicates that a pod operation was only partially
// successful, and some containers within the pod failed.
ErrPodPartialFail = errors.New("some containers failed")
// ErrDetach indicates that an attach session was manually detached by // ErrDetach indicates that an attach session was manually detached by
// the user. // the user.
ErrDetach = utils.ErrDetach ErrDetach = utils.ErrDetach

View File

@ -59,7 +59,7 @@ func (p *Pod) Start(ctx context.Context) (map[string]error, error) {
} }
if len(ctrErrors) > 0 { if len(ctrErrors) > 0 {
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error starting some containers") return ctrErrors, errors.Wrapf(define.ErrPodPartialFail, "error starting some containers")
} }
defer p.newPodEvent(events.Start) defer p.newPodEvent(events.Start)
return nil, nil return nil, nil
@ -139,7 +139,7 @@ func (p *Pod) StopWithTimeout(ctx context.Context, cleanup bool, timeout int) (m
} }
if len(ctrErrors) > 0 { if len(ctrErrors) > 0 {
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error stopping some containers") return ctrErrors, errors.Wrapf(define.ErrPodPartialFail, "error stopping some containers")
} }
defer p.newPodEvent(events.Stop) defer p.newPodEvent(events.Stop)
return nil, nil return nil, nil
@ -208,7 +208,7 @@ func (p *Pod) Pause() (map[string]error, error) {
} }
if len(ctrErrors) > 0 { if len(ctrErrors) > 0 {
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error pausing some containers") return ctrErrors, errors.Wrapf(define.ErrPodPartialFail, "error pausing some containers")
} }
defer p.newPodEvent(events.Pause) defer p.newPodEvent(events.Pause)
return nil, nil return nil, nil
@ -267,7 +267,7 @@ func (p *Pod) Unpause() (map[string]error, error) {
} }
if len(ctrErrors) > 0 { if len(ctrErrors) > 0 {
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error unpausing some containers") return ctrErrors, errors.Wrapf(define.ErrPodPartialFail, "error unpausing some containers")
} }
defer p.newPodEvent(events.Unpause) defer p.newPodEvent(events.Unpause)
@ -321,7 +321,7 @@ func (p *Pod) Restart(ctx context.Context) (map[string]error, error) {
} }
if len(ctrErrors) > 0 { if len(ctrErrors) > 0 {
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error stopping some containers") return ctrErrors, errors.Wrapf(define.ErrPodPartialFail, "error stopping some containers")
} }
p.newPodEvent(events.Stop) p.newPodEvent(events.Stop)
p.newPodEvent(events.Start) p.newPodEvent(events.Start)
@ -387,7 +387,7 @@ func (p *Pod) Kill(signal uint) (map[string]error, error) {
} }
if len(ctrErrors) > 0 { if len(ctrErrors) > 0 {
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error killing some containers") return ctrErrors, errors.Wrapf(define.ErrPodPartialFail, "error killing some containers")
} }
defer p.newPodEvent(events.Kill) defer p.newPodEvent(events.Kill)
return nil, nil return nil, nil

View File

@ -67,14 +67,14 @@ func (ic *ContainerEngine) PodKill(ctx context.Context, namesOrIds []string, opt
for _, p := range pods { for _, p := range pods {
report := entities.PodKillReport{Id: p.ID()} report := entities.PodKillReport{Id: p.ID()}
conErrs, err := p.Kill(uint(sig)) conErrs, err := p.Kill(uint(sig))
if err != nil { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
report.Errs = []error{err} report.Errs = []error{err}
reports = append(reports, &report) reports = append(reports, &report)
continue continue
} }
if len(conErrs) > 0 { if len(conErrs) > 0 {
for _, err := range conErrs { for id, err := range conErrs {
report.Errs = append(report.Errs, err) report.Errs = append(report.Errs, errors.Wrapf(err, "error killing container %s", id))
} }
reports = append(reports, &report) reports = append(reports, &report)
continue continue
@ -93,13 +93,13 @@ func (ic *ContainerEngine) PodPause(ctx context.Context, namesOrIds []string, op
for _, p := range pods { for _, p := range pods {
report := entities.PodPauseReport{Id: p.ID()} report := entities.PodPauseReport{Id: p.ID()}
errs, err := p.Pause() errs, err := p.Pause()
if err != nil { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
report.Errs = []error{err} report.Errs = []error{err}
continue continue
} }
if len(errs) > 0 { if len(errs) > 0 {
for _, v := range errs { for id, v := range errs {
report.Errs = append(report.Errs, v) report.Errs = append(report.Errs, errors.Wrapf(v, "error pausing container %s", id))
} }
reports = append(reports, &report) reports = append(reports, &report)
continue continue
@ -118,13 +118,13 @@ func (ic *ContainerEngine) PodUnpause(ctx context.Context, namesOrIds []string,
for _, p := range pods { for _, p := range pods {
report := entities.PodUnpauseReport{Id: p.ID()} report := entities.PodUnpauseReport{Id: p.ID()}
errs, err := p.Unpause() errs, err := p.Unpause()
if err != nil { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
report.Errs = []error{err} report.Errs = []error{err}
continue continue
} }
if len(errs) > 0 { if len(errs) > 0 {
for _, v := range errs { for id, v := range errs {
report.Errs = append(report.Errs, v) report.Errs = append(report.Errs, errors.Wrapf(v, "error unpausing container %s", id))
} }
reports = append(reports, &report) reports = append(reports, &report)
continue continue
@ -143,13 +143,13 @@ func (ic *ContainerEngine) PodStop(ctx context.Context, namesOrIds []string, opt
for _, p := range pods { for _, p := range pods {
report := entities.PodStopReport{Id: p.ID()} report := entities.PodStopReport{Id: p.ID()}
errs, err := p.StopWithTimeout(ctx, false, options.Timeout) errs, err := p.StopWithTimeout(ctx, false, options.Timeout)
if err != nil { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
report.Errs = []error{err} report.Errs = []error{err}
continue continue
} }
if len(errs) > 0 { if len(errs) > 0 {
for _, v := range errs { for id, v := range errs {
report.Errs = append(report.Errs, v) report.Errs = append(report.Errs, errors.Wrapf(v, "error stopping container %s", id))
} }
reports = append(reports, &report) reports = append(reports, &report)
continue continue
@ -168,14 +168,14 @@ func (ic *ContainerEngine) PodRestart(ctx context.Context, namesOrIds []string,
for _, p := range pods { for _, p := range pods {
report := entities.PodRestartReport{Id: p.ID()} report := entities.PodRestartReport{Id: p.ID()}
errs, err := p.Restart(ctx) errs, err := p.Restart(ctx)
if err != nil { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
report.Errs = []error{err} report.Errs = []error{err}
reports = append(reports, &report) reports = append(reports, &report)
continue continue
} }
if len(errs) > 0 { if len(errs) > 0 {
for _, v := range errs { for id, v := range errs {
report.Errs = append(report.Errs, v) report.Errs = append(report.Errs, errors.Wrapf(v, "error restarting container %s", id))
} }
reports = append(reports, &report) reports = append(reports, &report)
continue continue
@ -195,14 +195,14 @@ func (ic *ContainerEngine) PodStart(ctx context.Context, namesOrIds []string, op
for _, p := range pods { for _, p := range pods {
report := entities.PodStartReport{Id: p.ID()} report := entities.PodStartReport{Id: p.ID()}
errs, err := p.Start(ctx) errs, err := p.Start(ctx)
if err != nil { if err != nil && errors.Cause(err) != define.ErrPodPartialFail {
report.Errs = []error{err} report.Errs = []error{err}
reports = append(reports, &report) reports = append(reports, &report)
continue continue
} }
if len(errs) > 0 { if len(errs) > 0 {
for _, v := range errs { for id, v := range errs {
report.Errs = append(report.Errs, v) report.Errs = append(report.Errs, errors.Wrapf(v, "error starting container %s", id))
} }
reports = append(reports, &report) reports = append(reports, &report)
continue continue