-
Notifications
You must be signed in to change notification settings - Fork 44
/
CommonRest.go
142 lines (120 loc) · 3.96 KB
/
CommonRest.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Cloud Control Manager's Rest Runtime of CB-Spider.
// The CB-Spider is a sub-Framework of the Cloud-Barista Multi-Cloud Project.
// The CB-Spider Mission is to connect all the clouds with a single interface.
//
// * Cloud-Barista: https://github.com/cloud-barista
//
// by CB-Spider Team, 2020.04.
// by CB-Spider Team, 2019.10.
package restruntime
import (
cmrt "github.com/cloud-barista/cb-spider/api-runtime/common-runtime"
cres "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
// REST API (echo)
"net/http"
"github.com/labstack/echo/v4"
"fmt"
"encoding/json"
)
// define string of resource types
const (
rsImage string = "image"
rsVPC string = "vpc"
rsSubnet string = "subnet"
rsSG string = "sg"
rsKey string = "keypair"
rsVM string = "vm"
rsNLB string = "nlb"
rsDisk string = "disk"
rsMyImage string = "myimage"
rsCluster string = "cluster"
rsNodeGroup string = "nodegroup"
)
//================ Get CSP Resource Name
func GetCSPResourceName(c echo.Context) error {
cblog.Info("call GetCSPResourceName()")
var req struct {
ConnectionName string
ResourceType string
}
if err := c.Bind(&req); err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
// To support for Get-Query Param Type API
if req.ConnectionName == "" {
req.ConnectionName = c.QueryParam("ConnectionName")
}
if req.ResourceType == "" {
req.ResourceType = c.QueryParam("ResourceType")
}
// Call common-runtime API
result, err := cmrt.GetCSPResourceName(req.ConnectionName, req.ResourceType, c.Param("Name"))
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
var resultInfo struct {
Name string
}
resultInfo.Name = string(result)
return c.JSON(http.StatusOK, &resultInfo)
}
//================ Get Json string of CSP's Resource Info
func GetCSPResourceInfo(c echo.Context) error {
cblog.Info("call GetCSPResourceInfo()")
var req struct {
ConnectionName string
ResourceType string
}
if err := c.Bind(&req); err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
// To support for Get-Query Param Type API
if req.ConnectionName == "" {
req.ConnectionName = c.QueryParam("ConnectionName")
}
if req.ResourceType == "" {
req.ResourceType = c.QueryParam("ResourceType")
}
// Call common-runtime API
result, err := cmrt.GetCSPResourceInfo(req.ConnectionName, req.ResourceType, c.Param("Name"))
if err != nil {
return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
switch req.ResourceType {
case rsVPC:
var Result cres.VPCInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsSG:
var Result cres.SecurityInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsKey:
var Result cres.KeyPairInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsVM:
var Result cres.VMInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsNLB:
var Result cres.NLBInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsDisk:
var Result cres.DiskInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsMyImage:
var Result cres.MyImageInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
case rsCluster:
var Result cres.ClusterInfo
json.Unmarshal(result, &Result)
return c.JSON(http.StatusOK, Result)
default:
return fmt.Errorf(req.ResourceType + " is not supported Resource!!")
}
return nil
}