@@ -87,10 +87,11 @@ func parseInput(req *fnv1.RunFunctionRequest) (*types.XFuncJSInput, error) {
87
87
88
88
// prepareResources prepares the resources from the request
89
89
type resourceBundle struct {
90
- oxr * resource.Composite
91
- dxr * resource.Composite
92
- observed map [resource.Name ]resource.ObservedComposed
93
- desired map [resource.Name ]* resource.DesiredComposed
90
+ oxr * resource.Composite
91
+ dxr * resource.Composite
92
+ observed map [resource.Name ]resource.ObservedComposed
93
+ desired map [resource.Name ]* resource.DesiredComposed
94
+ extraResources map [string ][]resource.Extra
94
95
}
95
96
96
97
func prepareResources (req * fnv1.RunFunctionRequest ) (* resourceBundle , error ) {
@@ -123,16 +124,17 @@ func prepareResources(req *fnv1.RunFunctionRequest) (*resourceBundle, error) {
123
124
}
124
125
125
126
// Get extra resources
126
- _ , err = request .GetExtraResources (req )
127
+ extraResources , err : = request .GetExtraResources (req )
127
128
if err != nil {
128
129
return nil , errors .Wrapf (err , "cannot get extra resources from %T" , req )
129
130
}
130
131
131
132
return & resourceBundle {
132
- oxr : oxr ,
133
- dxr : dxr ,
134
- observed : observed ,
135
- desired : desired ,
133
+ oxr : oxr ,
134
+ dxr : dxr ,
135
+ observed : observed ,
136
+ desired : desired ,
137
+ extraResources : extraResources ,
136
138
}, nil
137
139
}
138
140
@@ -153,6 +155,19 @@ func createEnhancedInput(xfuncjsInput *types.XFuncJSInput, resources *resourceBu
153
155
},
154
156
}
155
157
158
+ // Add extra resources if present
159
+ if len (resources .extraResources ) > 0 {
160
+ extraResourcesMap := make (map [string ]interface {})
161
+ for name , extras := range resources .extraResources {
162
+ extrasList := make ([]interface {}, len (extras ))
163
+ for i , extra := range extras {
164
+ extrasList [i ] = extra .Resource .UnstructuredContent ()
165
+ }
166
+ extraResourcesMap [name ] = extrasList
167
+ }
168
+ enhancedInput ["extraResources" ] = extraResourcesMap
169
+ }
170
+
156
171
// Convert the enhanced input to JSON
157
172
enhancedInputJSON , err := json .Marshal (enhancedInput )
158
173
if err != nil {
@@ -233,6 +248,21 @@ func buildResponse(rsp *fnv1.RunFunctionResponse, jsResponse *JSResponse, resour
233
248
}
234
249
}
235
250
251
+ // Process extra resource requirements if present
252
+ if len (jsResponse .ExtraResourceRequirements ) > 0 {
253
+ extraResources := make (map [string ]* fnv1.ResourceSelector )
254
+ for name , requirement := range jsResponse .ExtraResourceRequirements {
255
+ extraResources [name ] = requirement .ToResourceSelector ()
256
+ log .Debug ("Requesting ExtraResources" , "name" , name , "selector" , extraResources [name ])
257
+ }
258
+
259
+ // Set requirements in the response
260
+ if rsp .Requirements == nil {
261
+ rsp .Requirements = & fnv1.Requirements {}
262
+ }
263
+ rsp .Requirements .ExtraResources = extraResources
264
+ }
265
+
236
266
// Process context data if present
237
267
if err := processContext (rsp , jsResponse , log ); err != nil {
238
268
return err
0 commit comments