diff --git a/pkg/phase/client.go b/pkg/phase/client.go index 1c014664a..5e7ec1340 100644 --- a/pkg/phase/client.go +++ b/pkg/phase/client.go @@ -280,6 +280,20 @@ func (p *plan) Run(ro ifc.RunOptions) error { return nil } +// Status returns the status of phases in a given plan +func (p *plan) Status(options ifc.StatusOptions) (ifc.PlanStatus, error) { + for _, step := range p.apiObj.Phases { + phase, err := p.phaseClient.PhaseByID(ifc.ID{Name: step.Name}) + if err != nil { + return ifc.PlanStatus{}, err + } + if _, err = phase.Status(); err != nil { + return ifc.PlanStatus{}, err + } + } + return ifc.PlanStatus{}, nil +} + var _ ifc.Client = &client{} type client struct { diff --git a/pkg/phase/ifc/phase.go b/pkg/phase/ifc/phase.go index 618689292..827215fdc 100644 --- a/pkg/phase/ifc/phase.go +++ b/pkg/phase/ifc/phase.go @@ -41,8 +41,15 @@ type PhaseStatus struct { type Plan interface { Validate() error Run(RunOptions) error + Status(StatusOptions) (PlanStatus, error) } +// StatusOptions is used to define status options +type StatusOptions struct{} + +// PlanStatus is a struct which defines status of PLAN +type PlanStatus struct{} + // ID uniquely identifies the phase type ID struct { Name string