MCPcopy
hub / github.com/argoproj/argo-workflows / SubmitWorkflow

Method SubmitWorkflow

server/workflow/workflow_server.go:801–857  ·  view source on GitHub ↗
(ctx context.Context, req *workflowpkg.WorkflowSubmitRequest)

Source from the content-addressed store, hash-verified

799}
800
801func (s *workflowServer) SubmitWorkflow(ctx context.Context, req *workflowpkg.WorkflowSubmitRequest) (*wfv1.Workflow, error) {
802 wfClient := auth.GetWfClient(ctx)
803 var wf *wfv1.Workflow
804 switch req.ResourceKind {
805 case workflow.CronWorkflowKind, workflow.CronWorkflowSingular, workflow.CronWorkflowPlural, workflow.CronWorkflowShortName:
806 cronWf, err := wfClient.ArgoprojV1alpha1().CronWorkflows(req.Namespace).Get(ctx, req.ResourceName, metav1.GetOptions{})
807 if err != nil {
808 return nil, sutils.ToStatusError(err, codes.Internal)
809 }
810 wf = common.ConvertCronWorkflowToWorkflow(cronWf)
811 case workflow.WorkflowTemplateKind, workflow.WorkflowTemplateSingular, workflow.WorkflowTemplatePlural, workflow.WorkflowTemplateShortName:
812 wf = common.NewWorkflowFromWorkflowTemplate(req.ResourceName, false)
813 case workflow.ClusterWorkflowTemplateKind, workflow.ClusterWorkflowTemplateSingular, workflow.ClusterWorkflowTemplatePlural, workflow.ClusterWorkflowTemplateShortName:
814 wf = common.NewWorkflowFromWorkflowTemplate(req.ResourceName, true)
815 default:
816 err := errors.Errorf(errors.CodeBadRequest, "Resource kind '%s' is not supported for submitting", req.ResourceKind)
817 err = sutils.ToStatusError(err, codes.InvalidArgument)
818 return nil, err
819 }
820
821 s.instanceIDService.Label(wf)
822 creator.LabelCreator(ctx, wf)
823 err := util.ApplySubmitOpts(wf, req.SubmitOptions)
824 if err != nil {
825 return nil, sutils.ToStatusError(err, codes.Internal)
826 }
827
828 wftmplGetter := s.wftmplStore.Getter(ctx, req.Namespace)
829 cwftmplGetter := s.cwftmplStore.Getter(ctx)
830
831 err = validate.ValidateWorkflow(ctx, wftmplGetter, cwftmplGetter, wf, s.wfDefaults, validate.ValidateOpts{Submit: true})
832 if err != nil {
833 return nil, sutils.ToStatusError(err, codes.InvalidArgument)
834 }
835
836 // if we are doing a normal dryRun, just return the workflow un-altered
837 if req.SubmitOptions != nil && req.SubmitOptions.DryRun {
838 return wf, nil
839 }
840 if req.SubmitOptions != nil && req.SubmitOptions.ServerDryRun {
841 // For a server dry run we require a namespace
842 if wf.Namespace == "" {
843 wf.Namespace = req.Namespace
844 }
845 workflow, err := util.CreateServerDryRun(ctx, wf, wfClient)
846 if err != nil {
847 return nil, sutils.ToStatusError(err, codes.InvalidArgument)
848 }
849 return workflow, nil
850 }
851
852 wf, err = wfClient.ArgoprojV1alpha1().Workflows(req.Namespace).Create(ctx, wf, metav1.CreateOptions{})
853 if err != nil {
854 return nil, sutils.ToStatusError(err, codes.InvalidArgument)
855 }
856 return wf, nil
857}

Callers

nothing calls this directly

Calls 15

GetWfClientFunction · 0.92
ErrorfFunction · 0.92
LabelCreatorFunction · 0.92
ApplySubmitOptsFunction · 0.92
ValidateWorkflowFunction · 0.92
CreateServerDryRunFunction · 0.92
GetMethod · 0.65
CronWorkflowsMethod · 0.65
ArgoprojV1alpha1Method · 0.65
LabelMethod · 0.65

Tested by

no test coverage detected