-
Notifications
You must be signed in to change notification settings - Fork 0
/
validate.go
70 lines (60 loc) · 2.43 KB
/
validate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Copyright 2018 The Knative Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either extress or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package taskrun
import (
"fmt"
"github.com/knative/build-pipeline/pkg/apis/pipeline/v1alpha1"
"github.com/knative/build-pipeline/pkg/reconciler/v1alpha1/taskrun/resources"
)
// ValidateResolvedTaskResources validates task inputs, params and output matches taskrun
func ValidateResolvedTaskResources(params []v1alpha1.Param, rtr *resources.ResolvedTaskResources) error {
// stores params to validate with task params
paramsMapping := map[string]string{}
for _, param := range params {
paramsMapping[param.Name] = ""
}
if rtr.TaskSpec != nil {
if rtr.TaskSpec.Inputs != nil {
for _, inputResource := range rtr.TaskSpec.Inputs.Resources {
r, ok := rtr.Inputs[inputResource.Name]
if !ok {
return fmt.Errorf("input resource %q not provided for task %q", inputResource.Name, rtr.TaskName)
}
// Validate the type of resource match
if inputResource.Type != r.Spec.Type {
return fmt.Errorf("input resource %q for task %q should be type %q but was %q", inputResource.Name, rtr.TaskName, r.Spec.Type, inputResource.Type)
}
}
for _, inputResourceParam := range rtr.TaskSpec.Inputs.Params {
if _, ok := paramsMapping[inputResourceParam.Name]; !ok {
if inputResourceParam.Default == "" {
return fmt.Errorf("input param %q not provided for task %q", inputResourceParam.Name, rtr.TaskName)
}
}
}
}
if rtr.TaskSpec.Outputs != nil {
for _, outputResource := range rtr.TaskSpec.Outputs.Resources {
r, ok := rtr.Outputs[outputResource.Name]
if !ok {
return fmt.Errorf("output resource %q not provided for task %q", outputResource.Name, rtr.TaskName)
}
// Validate the type of resource match
if outputResource.Type != r.Spec.Type {
return fmt.Errorf("output resource %q for task %q should be type %q but was %q", outputResource.Name, rtr.TaskName, r.Spec.Type, outputResource.Type)
}
}
}
}
return nil
}