b8956c1d956e2268fef0008056d101b0ac56305c
[icn/sdwan.git] /
1 // SPDX-License-Identifier: Apache-2.0\r
2 // Copyright (c) 2020 Intel Corporation\r
3 \r
4 package contextupdateclient\r
5 \r
6 import (\r
7         "context"\r
8         "time"\r
9 \r
10         contextpb "github.com/open-ness/EMCO/src/orchestrator/pkg/grpc/contextupdate"\r
11         log "github.com/open-ness/EMCO/src/orchestrator/pkg/infra/logutils"\r
12         "github.com/open-ness/EMCO/src/orchestrator/pkg/infra/rpc"\r
13         pkgerrors "github.com/pkg/errors"\r
14 )\r
15 \r
16 // InvokeContextUpdate will make the grpc call to the specified controller\r
17 // The controller will take the specified intentName and update the AppContext\r
18 // appropriatly based on its operation as a placement or action controller.\r
19 func InvokeContextUpdate(controllerName, intentName, appContextId string) error {\r
20         var err error\r
21         var rpcClient contextpb.ContextupdateClient\r
22         var updateRes *contextpb.ContextUpdateResponse\r
23         ctx, cancel := context.WithTimeout(context.Background(), 600*time.Second)\r
24         defer cancel()\r
25 \r
26         conn := rpc.GetRpcConn(controllerName)\r
27 \r
28         if conn != nil {\r
29                 rpcClient = contextpb.NewContextupdateClient(conn)\r
30                 updateReq := new(contextpb.ContextUpdateRequest)\r
31                 updateReq.AppContext = appContextId\r
32                 updateReq.IntentName = intentName\r
33                 updateRes, err = rpcClient.UpdateAppContext(ctx, updateReq)\r
34         } else {\r
35                 return pkgerrors.Errorf("ContextUpdate Failed - Could not get ContextupdateClient: %v", controllerName)\r
36         }\r
37 \r
38         if err == nil {\r
39                 if updateRes.AppContextUpdated {\r
40                         log.Info("ContextUpdate Passed", log.Fields{\r
41                                 "Controller": controllerName,\r
42                                 "Intent":     intentName,\r
43                                 "AppContext": appContextId,\r
44                                 "Message":    updateRes.AppContextUpdateMessage,\r
45                         })\r
46                         return nil\r
47                 } else {\r
48                         return pkgerrors.Errorf("ContextUpdate Failed: %v", updateRes.AppContextUpdateMessage)\r
49                 }\r
50         }\r
51         return err\r
52 }\r