Skip to content

Commit

Permalink
fix: Simplify the WorkflowTemplateRef field validation to support all…
Browse files Browse the repository at this point in the history
… fields in WorkflowSpec except `Templates` (#3632)
  • Loading branch information
sarabala1979 committed Jul 29, 2020
1 parent 2375878 commit 5b0210d
Showing 1 changed file with 4 additions and 29 deletions.
33 changes: 4 additions & 29 deletions workflow/validate/validate.go
Expand Up @@ -89,23 +89,6 @@ var (
placeholderGenerator = common.NewPlaceholderGenerator()
)

// Allowed WfSpec fields if workflow referred WorkflowTemplate reference.
var wfTmplRefAllowedWfSpecValidFields = map[string]bool{
"Entrypoint": true,
"Suspend": true,
"ActiveDeadlineSeconds": true,
"Priority": true,
"Arguments": true,
"WorkflowTemplateRef": true,
"TTLStrategy": true,
"Parallelism": true,
"Volumes": true,
"VolumeClaimTemplates": true,
"NodeSelector": true,
"PodGC": true,
"ServiceAccountName": true,
}

type FakeArguments struct{}

func (args *FakeArguments) GetParameterByName(name string) *wfv1.Parameter {
Expand Down Expand Up @@ -134,7 +117,7 @@ func ValidateWorkflow(wftmplGetter templateresolution.WorkflowTemplateNamespaced
hasWorkflowTemplateRef := wf.Spec.WorkflowTemplateRef != nil

if hasWorkflowTemplateRef {
err := ValidateWorkflowSpecFields(wf.Spec, wfTmplRefAllowedWfSpecValidFields)
err := ValidateWorkflowTemplateRefFields(wf.Spec)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -271,17 +254,9 @@ func ValidateWorkflow(wftmplGetter templateresolution.WorkflowTemplateNamespaced
return wfConditions, nil
}

func ValidateWorkflowSpecFields(v interface{}, validFieldMap map[string]bool) error {
val := reflect.ValueOf(v)

for i := 0; i < val.NumField(); i++ {
// Lookup the validate tag
field := val.Type().Field(i)
fieldVal := val.Field(i).IsZero()
_, ok := validFieldMap[field.Name]
if !ok && !fieldVal {
return errors.Errorf(errors.CodeBadRequest, "%s is invalid field in spec if workflow referred WorkflowTemplate reference", field.Name)
}
func ValidateWorkflowTemplateRefFields(wfSpec wfv1.WorkflowSpec) error {
if len(wfSpec.Templates) > 0 {
return errors.Errorf(errors.CodeBadRequest, "Templates is invalid field in spec if workflow referred WorkflowTemplate reference")
}
return nil
}
Expand Down

0 comments on commit 5b0210d

Please sign in to comment.