-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
validate_params.go
75 lines (62 loc) · 2.77 KB
/
validate_params.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
71
72
73
74
75
/*
Copyright 2019 The Tekton 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 express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package resources
import (
"fmt"
"github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
"github.com/tektoncd/pipeline/pkg/list"
)
// ValidateParamTypesMatching validate that parameters in PipelineRun override corresponding parameters in Pipeline of the same type.
func ValidateParamTypesMatching(p *v1beta1.PipelineSpec, pr *v1beta1.PipelineRun) error {
// Build a map of parameter names/types declared in p.
paramTypes := make(map[string]v1beta1.ParamType)
for _, param := range p.Params {
paramTypes[param.Name] = param.Type
}
// Build a list of parameter names from pr that have mismatching types with the map created above.
var wrongTypeParamNames []string
for _, param := range pr.Spec.Params {
if paramType, ok := paramTypes[param.Name]; ok {
if param.Value.Type != paramType {
wrongTypeParamNames = append(wrongTypeParamNames, param.Name)
}
}
}
// Return an error with the misconfigured parameters' names, or return nil if there are none.
if len(wrongTypeParamNames) != 0 {
return fmt.Errorf("parameters have inconsistent types : %s", wrongTypeParamNames)
}
return nil
}
// ValidateRequiredParametersProvided validates that all the parameters expected by the Pipeline are provided by the PipelineRun.
// Extra Parameters are allowed, the Pipeline will use the Parameters it needs and ignore the other Parameters.
func ValidateRequiredParametersProvided(pipelineParameters *[]v1beta1.ParamSpec, pipelineRunParameters *[]v1beta1.Param) error {
// Build a list of parameter names declared in pr.
var providedParams []string
for _, param := range *pipelineRunParameters {
providedParams = append(providedParams, param.Name)
}
var requiredParams []string
for _, param := range *pipelineParameters {
if param.Default == nil { // include only parameters that don't have default values specified in the Pipeline
requiredParams = append(requiredParams, param.Name)
}
}
// Build a list of parameter names in p that are missing from pr.
missingParams := list.DiffLeft(requiredParams, providedParams)
// Return an error with the missing parameters' names, or return nil if there are none.
if len(missingParams) != 0 {
return fmt.Errorf("PipelineRun missing parameters: %s", missingParams)
}
return nil
}