1 // SPDX-License-Identifier: Apache-2.0
2 // Copyright (c) 2020 Intel Corporation
4 package installappclient
11 log "github.com/open-ness/EMCO/src/orchestrator/pkg/infra/logutils"
12 "github.com/open-ness/EMCO/src/orchestrator/pkg/infra/rpc"
13 installpb "github.com/open-ness/EMCO/src/rsync/pkg/grpc/installapp"
14 pkgerrors "github.com/pkg/errors"
17 const rsyncName = "rsync"
20 RsyncInfo consists of rsyncName, hostName and portNumber.
22 type RsyncInfo struct {
28 var rsyncInfo RsyncInfo
29 var mutex = &sync.Mutex{}
31 type _testvars struct {
33 InstallClient installpb.InstallappClient
36 var Testvars _testvars
38 // InitRsyncClient initializes connctions to the Resource Synchronizer service
39 func initRsyncClient() bool {
40 if (RsyncInfo{}) == rsyncInfo {
43 log.Error("RsyncInfo not set. InitRsyncClient failed", log.Fields{
44 "Rsyncname": rsyncInfo.RsyncName,
45 "Hostname": rsyncInfo.hostName,
46 "PortNumber": rsyncInfo.portNumber,
50 rpc.UpdateRpcConn(rsyncInfo.RsyncName, rsyncInfo.hostName, rsyncInfo.portNumber)
54 // NewRsyncInfo shall return a newly created RsyncInfo object
55 func NewRsyncInfo(rName, h string, pN int) RsyncInfo {
58 rsyncInfo = RsyncInfo{RsyncName: rName, hostName: h, portNumber: pN}
63 // InvokeInstallApp will make the grpc call to the resource synchronizer
64 // or rsync controller.
65 // rsync will deploy the resources in the app context to the clusters as
66 // prepared in the app context.
67 func InvokeInstallApp(appContextId string) error {
69 var rpcClient installpb.InstallappClient
70 var installRes *installpb.InstallAppResponse
71 ctx, cancel := context.WithTimeout(context.Background(), 600*time.Second)
74 // Unit test helper code
75 if Testvars.UseGrpcMock {
76 rpcClient = Testvars.InstallClient
77 installReq := new(installpb.InstallAppRequest)
78 installReq.AppContext = appContextId
79 installRes, err = rpcClient.InstallApp(ctx, installReq)
81 log.Info("Response from InstappApp GRPC call", log.Fields{
82 "Succeeded": installRes.AppContextInstalled,
83 "Message": installRes.AppContextInstallMessage,
89 conn := rpc.GetRpcConn(rsyncName)
92 conn = rpc.GetRpcConn(rsyncName)
96 rpcClient = installpb.NewInstallappClient(conn)
97 installReq := new(installpb.InstallAppRequest)
98 installReq.AppContext = appContextId
99 installRes, err = rpcClient.InstallApp(ctx, installReq)
101 log.Info("Response from InstappApp GRPC call", log.Fields{
102 "Succeeded": installRes.AppContextInstalled,
103 "Message": installRes.AppContextInstallMessage,
107 return pkgerrors.Errorf("InstallApp Failed - Could not get InstallAppClient: %v", "rsync")
111 if installRes.AppContextInstalled {
112 log.Info("InstallApp Success", log.Fields{
113 "AppContext": appContextId,
114 "Message": installRes.AppContextInstallMessage,
118 return pkgerrors.Errorf("InstallApp Failed: %v", installRes.AppContextInstallMessage)
124 func InvokeUninstallApp(appContextId string) error {
126 var rpcClient installpb.InstallappClient
127 var uninstallRes *installpb.UninstallAppResponse
128 ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
131 conn := rpc.GetRpcConn(rsyncName)
134 conn = rpc.GetRpcConn(rsyncName)
138 rpcClient = installpb.NewInstallappClient(conn)
139 uninstallReq := new(installpb.UninstallAppRequest)
140 uninstallReq.AppContext = appContextId
141 uninstallRes, err = rpcClient.UninstallApp(ctx, uninstallReq)
143 log.Info("Response from UninstappApp GRPC call", log.Fields{
144 "Succeeded": uninstallRes.AppContextUninstalled,
145 "Message": uninstallRes.AppContextUninstallMessage,
149 return pkgerrors.Errorf("UninstallApp Failed - Could not get InstallAppClient: %v", "rsync")
153 if uninstallRes.AppContextUninstalled {
154 log.Info("UninstallApp Success", log.Fields{
155 "AppContext": appContextId,
156 "Message": uninstallRes.AppContextUninstallMessage,
160 return pkgerrors.Errorf("UninstallApp Failed: %v", uninstallRes.AppContextUninstallMessage)