@@ -24,8 +24,6 @@ import (
24
24
"github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
25
25
"github.com/tektoncd/pipeline/pkg/list"
26
26
"github.com/tektoncd/pipeline/pkg/reconciler/taskrun"
27
- "github.com/tektoncd/pipeline/pkg/substitution"
28
- "k8s.io/apimachinery/pkg/util/sets"
29
27
)
30
28
31
29
// ValidateParamTypesMatching validate that parameters in PipelineRun override corresponding parameters in Pipeline of the same type.
@@ -95,103 +93,49 @@ func ValidateParamArrayIndex(ctx context.Context, p *v1beta1.PipelineSpec, pr *v
95
93
return nil
96
94
}
97
95
98
- arrayParams := extractParamIndexes (p .Params , pr .Spec .Params )
99
-
100
- outofBoundParams := sets.String {}
96
+ arrayParams := taskrun .ExtractParamArrayLengths (p .Params , pr .Spec .Params )
101
97
98
+ arrayIndexingParams := []string {}
102
99
// collect all the references
103
100
for i := range p .Tasks {
104
- findInvalidParamArrayReferences (p .Tasks [i ].Params , arrayParams , & outofBoundParams )
101
+ extractArrayIndexingReferencesFromParams (p .Tasks [i ].Params , arrayParams , & arrayIndexingParams )
105
102
if p .Tasks [i ].IsMatrixed () {
106
- findInvalidParamArrayReferences (p .Tasks [i ].Matrix .Params , arrayParams , & outofBoundParams )
103
+ extractArrayIndexingReferencesFromParams (p .Tasks [i ].Matrix .Params , arrayParams , & arrayIndexingParams )
107
104
}
108
105
for j := range p .Tasks [i ].Workspaces {
109
- findInvalidParamArrayReference (p .Tasks [i ].Workspaces [j ].SubPath , arrayParams , & outofBoundParams )
106
+ taskrun . ExtractArrayIndexingParamReference (p .Tasks [i ].Workspaces [j ].SubPath , arrayParams , & arrayIndexingParams )
110
107
}
111
108
for _ , wes := range p .Tasks [i ].WhenExpressions {
112
- findInvalidParamArrayReference (wes .Input , arrayParams , & outofBoundParams )
109
+ taskrun . ExtractArrayIndexingParamReference (wes .Input , arrayParams , & arrayIndexingParams )
113
110
for _ , v := range wes .Values {
114
- findInvalidParamArrayReference (v , arrayParams , & outofBoundParams )
111
+ taskrun . ExtractArrayIndexingParamReference (v , arrayParams , & arrayIndexingParams )
115
112
}
116
113
}
117
114
}
118
115
119
116
for i := range p .Finally {
120
- findInvalidParamArrayReferences (p .Finally [i ].Params , arrayParams , & outofBoundParams )
117
+ extractArrayIndexingReferencesFromParams (p .Finally [i ].Params , arrayParams , & arrayIndexingParams )
121
118
if p .Finally [i ].IsMatrixed () {
122
- findInvalidParamArrayReferences (p .Finally [i ].Matrix .Params , arrayParams , & outofBoundParams )
119
+ extractArrayIndexingReferencesFromParams (p .Finally [i ].Matrix .Params , arrayParams , & arrayIndexingParams )
123
120
}
124
121
for _ , wes := range p .Finally [i ].WhenExpressions {
125
122
for _ , v := range wes .Values {
126
- findInvalidParamArrayReference (v , arrayParams , & outofBoundParams )
123
+ taskrun . ExtractArrayIndexingParamReference (v , arrayParams , & arrayIndexingParams )
127
124
}
128
125
}
129
126
}
130
-
131
- if outofBoundParams .Len () > 0 {
132
- return fmt .Errorf ("non-existent param references:%v" , outofBoundParams .List ())
133
- }
134
- return nil
127
+ return taskrun .ValidateOutofBoundArrayParams (arrayIndexingParams , arrayParams )
135
128
}
136
129
137
- func extractParamIndexes (defaults []v1beta1.ParamSpec , params []v1beta1.Param ) map [string ]int {
138
- // Collect all array params
139
- arrayParams := make (map [string ]int )
140
-
141
- patterns := []string {
142
- "$(params.%s)" ,
143
- "$(params[%q])" ,
144
- "$(params['%s'])" ,
145
- }
146
-
147
- // Collect array params lengths from defaults
148
- for _ , p := range defaults {
149
- if p .Default != nil {
150
- if p .Default .Type == v1beta1 .ParamTypeArray {
151
- for _ , pattern := range patterns {
152
- for i := 0 ; i < len (p .Default .ArrayVal ); i ++ {
153
- arrayParams [fmt .Sprintf (pattern , p .Name )] = len (p .Default .ArrayVal )
154
- }
155
- }
156
- }
157
- }
158
- }
159
-
160
- // Collect array params lengths from pipelinerun or taskrun
161
- for _ , p := range params {
162
- if p .Value .Type == v1beta1 .ParamTypeArray {
163
- for _ , pattern := range patterns {
164
- for i := 0 ; i < len (p .Value .ArrayVal ); i ++ {
165
- arrayParams [fmt .Sprintf (pattern , p .Name )] = len (p .Value .ArrayVal )
166
- }
167
- }
168
- }
169
- }
170
- return arrayParams
171
- }
172
-
173
- func findInvalidParamArrayReferences (params []v1beta1.Param , arrayParams map [string ]int , outofBoundParams * sets.String ) {
130
+ // extractArrayIndexingReferencesFromParams get all array indexing references from params
131
+ func extractArrayIndexingReferencesFromParams (params []v1beta1.Param , arrayParams map [string ]int , arrayIndexingParams * []string ) {
174
132
for i := range params {
175
- findInvalidParamArrayReference (params [i ].Value .StringVal , arrayParams , outofBoundParams )
133
+ taskrun . ExtractArrayIndexingParamReference (params [i ].Value .StringVal , arrayParams , arrayIndexingParams )
176
134
for _ , v := range params [i ].Value .ArrayVal {
177
- findInvalidParamArrayReference (v , arrayParams , outofBoundParams )
135
+ taskrun . ExtractArrayIndexingParamReference (v , arrayParams , arrayIndexingParams )
178
136
}
179
137
for _ , v := range params [i ].Value .ObjectVal {
180
- findInvalidParamArrayReference (v , arrayParams , outofBoundParams )
181
- }
182
- }
183
- }
184
-
185
- func findInvalidParamArrayReference (paramReference string , arrayParams map [string ]int , outofBoundParams * sets.String ) {
186
- list := substitution .ExtractParamsExpressions (paramReference )
187
- for _ , val := range list {
188
- indexString := substitution .ExtractIndexString (paramReference )
189
- idx , _ := substitution .ExtractIndex (indexString )
190
- v := substitution .TrimArrayIndex (val )
191
- if paramLength , ok := arrayParams [v ]; ok {
192
- if idx >= paramLength {
193
- outofBoundParams .Insert (val )
194
- }
138
+ taskrun .ExtractArrayIndexingParamReference (v , arrayParams , arrayIndexingParams )
195
139
}
196
140
}
197
141
}
0 commit comments