1 // SPDX-License-Identifier: Apache-2.0
\r
2 // Copyright (c) 2020 Intel Corporation
\r
4 package installappclient
\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 installpb "github.com/open-ness/EMCO/src/rsync/pkg/grpc/installapp"
\r
14 pkgerrors "github.com/pkg/errors"
\r
17 const rsyncName = "rsync"
\r
20 RsyncInfo consists of rsyncName, hostName and portNumber.
\r
22 type RsyncInfo struct {
\r
28 var rsyncInfo RsyncInfo
\r
29 var mutex = &sync.Mutex{}
\r
31 // InitRsyncClient initializes connctions to the Resource Synchronizer service
\r
32 func initRsyncClient() bool {
\r
33 if (RsyncInfo{}) == rsyncInfo {
\r
35 defer mutex.Unlock()
\r
36 log.Error("RsyncInfo not set. InitRsyncClient failed", log.Fields{
\r
37 "Rsyncname": rsyncInfo.RsyncName,
\r
38 "Hostname": rsyncInfo.hostName,
\r
39 "PortNumber": rsyncInfo.portNumber,
\r
43 rpc.UpdateRpcConn(rsyncInfo.RsyncName, rsyncInfo.hostName, rsyncInfo.portNumber)
\r
47 // NewRsyncInfo shall return a newly created RsyncInfo object
\r
48 func NewRsyncInfo(rName, h string, pN int) RsyncInfo {
\r
50 defer mutex.Unlock()
\r
51 rsyncInfo = RsyncInfo{RsyncName: rName, hostName: h, portNumber: pN}
\r
56 // InvokeInstallApp will make the grpc call to the resource synchronizer
\r
57 // or rsync controller.
\r
58 // rsync will deploy the resources in the app context to the clusters as
\r
59 // prepared in the app context.
\r
60 func InvokeInstallApp(appContextId string) error {
\r
62 var rpcClient installpb.InstallappClient
\r
63 var installRes *installpb.InstallAppResponse
\r
64 ctx, cancel := context.WithTimeout(context.Background(), 600*time.Second)
\r
67 conn := rpc.GetRpcConn(rsyncName)
\r
70 conn = rpc.GetRpcConn(rsyncName)
\r
74 rpcClient = installpb.NewInstallappClient(conn)
\r
75 installReq := new(installpb.InstallAppRequest)
\r
76 installReq.AppContext = appContextId
\r
77 installRes, err = rpcClient.InstallApp(ctx, installReq)
\r
79 log.Info("Response from InstappApp GRPC call", log.Fields{
\r
80 "Succeeded": installRes.AppContextInstalled,
\r
81 "Message": installRes.AppContextInstallMessage,
\r
85 return pkgerrors.Errorf("InstallApp Failed - Could not get InstallAppClient: %v", "rsync")
\r
89 if installRes.AppContextInstalled {
\r
90 log.Info("InstallApp Success", log.Fields{
\r
91 "AppContext": appContextId,
\r
92 "Message": installRes.AppContextInstallMessage,
\r
96 return pkgerrors.Errorf("InstallApp Failed: %v", installRes.AppContextInstallMessage)
\r
102 func InvokeUninstallApp(appContextId string) error {
\r
104 var rpcClient installpb.InstallappClient
\r
105 var uninstallRes *installpb.UninstallAppResponse
\r
106 ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
\r
109 conn := rpc.GetRpcConn(rsyncName)
\r
112 conn = rpc.GetRpcConn(rsyncName)
\r
116 rpcClient = installpb.NewInstallappClient(conn)
\r
117 uninstallReq := new(installpb.UninstallAppRequest)
\r
118 uninstallReq.AppContext = appContextId
\r
119 uninstallRes, err = rpcClient.UninstallApp(ctx, uninstallReq)
\r
121 log.Info("Response from UninstappApp GRPC call", log.Fields{
\r
122 "Succeeded": uninstallRes.AppContextUninstalled,
\r
123 "Message": uninstallRes.AppContextUninstallMessage,
\r
127 return pkgerrors.Errorf("UninstallApp Failed - Could not get InstallAppClient: %v", "rsync")
\r
131 if uninstallRes.AppContextUninstalled {
\r
132 log.Info("UninstallApp Success", log.Fields{
\r
133 "AppContext": appContextId,
\r
134 "Message": uninstallRes.AppContextUninstallMessage,
\r
138 return pkgerrors.Errorf("UninstallApp Failed: %v", uninstallRes.AppContextUninstallMessage)
\r