func()

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)
}