in step_sub_workflow.go [29:70]
func (s *SubWorkflow) populate(ctx context.Context, st *Step) DError {
// Typically s.Workflow is instantiated when the parent workflow is read in NewFromFile.
// Workflow could be nil when the parent workflow is constructed manually using Go structs.
if s.Path != "" && s.Workflow == nil {
var err error
if s.Workflow, err = st.w.NewSubWorkflowFromFile(s.Path); err != nil {
return ToDError(err)
}
}
if s.Workflow == nil {
return Errf("SubWorkflow %q does not have a workflow", st.name)
}
s.Workflow.parent = st.w
s.Workflow.GCSPath = fmt.Sprintf("gs://%s/%s", s.Workflow.parent.bucket, s.Workflow.parent.scratchPath)
s.Workflow.Name = st.name
s.Workflow.Project = s.Workflow.parent.Project
s.Workflow.Zone = s.Workflow.parent.Zone
s.Workflow.OAuthPath = s.Workflow.parent.OAuthPath
s.Workflow.ComputeClient = s.Workflow.parent.ComputeClient
s.Workflow.StorageClient = s.Workflow.parent.StorageClient
s.Workflow.Logger = s.Workflow.parent.Logger
s.Workflow.DefaultTimeout = st.Timeout
var errs DError
Loop:
for k, v := range s.Vars {
for wv := range s.Workflow.Vars {
if k == wv {
s.Workflow.AddVar(k, v)
continue Loop
}
}
errs = addErrs(errs, Errf("unknown workflow Var %q passed to SubWorkflow %q", k, st.name))
}
if errs != nil {
return errs
}
return s.Workflow.populate(ctx)
}