MCPcopy Index your code
hub / github.com/OpenFunction/OpenFunction / createSinkComponent

Function createSinkComponent

controllers/events/event.go:198–262  ·  view source on GitHub ↗
(ctx context.Context, c client.Client, log logr.Logger, resource client.Object, sink *ofevent.SinkSpec)

Source from the content-addressed store, hash-verified

196}
197
198func createSinkComponent(ctx context.Context, c client.Client, log logr.Logger, resource client.Object, sink *ofevent.SinkSpec) (*componentsv1alpha1.Component, error) {
199 if sink.Uri == nil && sink.Ref == nil {
200 return nil, errors.New("at least one uri or ref must be set in sink")
201 }
202
203 var namespace, url string
204 if sink.Uri != nil {
205 url = *sink.Uri
206 // when setting the Uri, use resource.GetNamespace()
207 namespace = resource.GetNamespace()
208 } else {
209 gvk := sink.Ref.GroupVersionKind()
210 switch gvk {
211 case knativeServiceGVK:
212 var ksvc kservingv1.Service
213 if err := c.Get(ctx, types.NamespacedName{Namespace: sink.Ref.Namespace, Name: sink.Ref.Name}, &ksvc); err != nil {
214 log.Error(err, "Failed to find Knative Service", "namespace", sink.Ref.Namespace, "name", sink.Ref.Name)
215 return nil, err
216 }
217 url = ksvc.Status.URL.String()
218 case ofFunctionGVK:
219 var of ofcore.Function
220 if err := c.Get(ctx, types.NamespacedName{Namespace: sink.Ref.Namespace, Name: sink.Ref.Name}, &of); err != nil {
221 log.Error(err, "Failed to find OpenFunction", "namespace", sink.Ref.Namespace, "name", sink.Ref.Name)
222 return nil, err
223 }
224 for _, address := range of.Status.Addresses {
225 if *address.Type == ofcore.InternalAddressType {
226 url = address.Value
227 break
228 }
229 }
230 default:
231 return nil, fmt.Errorf("unsupported reference %s", gvk.String())
232 }
233 namespace = sink.Ref.Namespace
234 }
235
236 sink.Uri = &url
237
238 component := &componentsv1alpha1.Component{
239 ObjectMeta: metav1.ObjectMeta{
240 Name: fmt.Sprintf(SinkComponentNameTmpl, resource.GetName(), namespace),
241 Namespace: resource.GetNamespace(),
242 },
243 }
244
245 var spec componentsv1alpha1.ComponentSpec
246 specMap := map[string]interface{}{
247 "version": "v1",
248 "type": "bindings.http",
249 "metadata": []map[string]string{
250 {"name": "url", "value": url},
251 },
252 }
253 specBytes, err := json.Marshal(specMap)
254 if err != nil {
255 return nil, err

Callers 3

handleSinkMethod · 0.85
handleSubscriberMethod · 0.85
Test_createSinkComponentFunction · 0.85

Calls 2

GroupVersionKindMethod · 0.80
GetMethod · 0.65

Tested by 1

Test_createSinkComponentFunction · 0.68