Skip to content

Commit c9dc2d3

Browse files
authored
Merge branch 'cloud-barista:master' into master
2 parents 0b03c44 + 7fd6a7f commit c9dc2d3

40 files changed

Lines changed: 8886 additions & 1881 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ conf/config.yaml
5050

5151
bin/cb-spider
5252
bin/cb-spider-dyna
53+
bin/cb-spider-android-arm64
5354

5455
cli/spctl
5556

@@ -71,4 +72,4 @@ cloud-control-manager/cloud-driver/drivers/nhncloud/main/conf/config.yaml
7172
cloud-control-manager/cloud-driver/drivers/ktcloud/main/config/config.yaml
7273

7374
test/vm-cb-user-validation-cli/2.6-csp-test/connection/.*-credential
74-
utils/default-connection-helper/.*-credential
75+
utils/default-connection-helper/.*-credential

Makefile

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,54 @@ default: swag
66
@echo -e '\t[CB-Spider] building ./bin/cb-spider...'
77
@go mod download
88
@go mod tidy
9-
@go build -ldflags="-X 'main.Version=$(VERSION)' \
10-
-X 'main.CommitSHA=$(COMMIT_SHA)' \
11-
-X 'main.BuildTime=$(BUILD_TIME)'" \
12-
-o bin/cb-spider ./api-runtime
9+
@CGO_ENABLED=1 go build -ldflags="-X 'main.Version=$(VERSION)' \
10+
-X 'main.CommitSHA=$(COMMIT_SHA)' \
11+
-X 'main.BuildTime=$(BUILD_TIME)'" \
12+
-o bin/cb-spider ./api-runtime
1313

1414
dyna plugin plug dynamic: swag
1515
@echo -e '\t[CB-Spider] building ./bin/cb-spider-dyna with plugin mode...'
1616
@go mod download
1717
@go mod tidy
18-
@go build -tags dyna -ldflags="-X 'main.Version=$(VERSION)' \
19-
-X 'main.CommitSHA=$(COMMIT_SHA)' \
20-
-X 'main.BuildTime=$(BUILD_TIME)'" \
21-
-o bin/cb-spider-dyna ./api-runtime
18+
@CGO_ENABLED=1 go build -tags dyna -ldflags="-X 'main.Version=$(VERSION)' \
19+
-X 'main.CommitSHA=$(COMMIT_SHA)' \
20+
-X 'main.BuildTime=$(BUILD_TIME)'" \
21+
-o bin/cb-spider-dyna ./api-runtime
2222
@./build_all_driver_lib.sh;
2323

2424
cc: swag
25-
@echo -e '\t[CB-Spider] build ./bin/cb-spider-arm for arm...'
26-
GOOS=linux GOARCH=arm go build -o cb-spider-arm ./api-runtime
25+
@echo -e '\t[CB-Spider] build ./bin/cb-spider-arm for linux arm...'
26+
GOOS=linux GOARCH=arm go build -o bin/cb-spider-arm ./api-runtime
27+
28+
# =============================================================
29+
# [Prerequisite Installation and Environment Setup for Android ARM64 Build]
30+
#
31+
# 1. Move to your home directory:
32+
# cd ~
33+
#
34+
# 2. Download and unzip Android NDK:
35+
# wget https://dl.google.com/android/repository/android-ndk-r26d-linux.zip
36+
# unzip android-ndk-r26d-linux.zip
37+
#
38+
# 3. Set environment variable (for bash):
39+
# export ANDROID_NDK_HOME=$HOME/android-ndk-r26d
40+
# =============================================================
41+
android-arm64: swag
42+
@echo -e '\t[CB-Spider] build ./bin/cb-spider-android-arm64 for Android arm64...'
43+
@PATH="$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/bin:$$PATH" \
44+
CC=aarch64-linux-android21-clang \
45+
CGO_ENABLED=1 \
46+
GOOS=android GOARCH=arm64 \
47+
CGO_CFLAGS="--sysroot=$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot" \
48+
CGO_LDFLAGS="--sysroot=$(ANDROID_NDK_HOME)/toolchains/llvm/prebuilt/linux-x86_64/sysroot" \
49+
go build -ldflags="-X 'main.Version=$(VERSION)' \
50+
-X 'main.CommitSHA=$(COMMIT_SHA)' \
51+
-X 'main.BuildTime=$(BUILD_TIME)'" \
52+
-o bin/cb-spider-android-arm64 ./api-runtime
2753

2854
clean clear:
29-
@echo -e '\t[CB-Spider] cleaning...'
30-
@rm -rf bin/cb-spider bin/cb-spider-dyna bin/cb-spider-arm
55+
@echo -e '\t[CB-Spider] cleaning...'
56+
@rm -rf bin/cb-spider bin/cb-spider-dyna bin/cb-spider-arm bin/cb-spider-android-arm64
3157

3258
swag swagger:
3359
@echo -e '\t[CB-Spider] generating Swagger documentations...'
@@ -41,3 +67,4 @@ swag swagger:
4167
-e 's/github_com_cloud-barista_cb-spider_cloud-info-manager_connection-config-info-manager/spider.cim/g' \
4268
-e 's/github_com_cloud-barista_cb-spider_cloud-info-manager/spider.cim/g' \
4369
./api/docs.go ./api/swagger.json ./api/swagger.yaml
70+

api-runtime/common-runtime/CommonManager.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,18 @@ import (
3333
// define string of resource types
3434
// redefined for backward compatibility
3535
const (
36-
IMAGE string = string(cres.IMAGE)
37-
VPC string = string(cres.VPC)
38-
SUBNET string = string(cres.SUBNET)
39-
SG string = string(cres.SG)
40-
KEY string = string(cres.KEY)
41-
VM string = string(cres.VM)
42-
NLB string = string(cres.NLB)
43-
DISK string = string(cres.DISK)
44-
MYIMAGE string = string(cres.MYIMAGE)
45-
CLUSTER string = string(cres.CLUSTER)
46-
NODEGROUP string = string(cres.NODEGROUP)
36+
IMAGE string = string(cres.IMAGE)
37+
VPC string = string(cres.VPC)
38+
SUBNET string = string(cres.SUBNET)
39+
SG string = string(cres.SG)
40+
KEY string = string(cres.KEY)
41+
VM string = string(cres.VM)
42+
NLB string = string(cres.NLB)
43+
DISK string = string(cres.DISK)
44+
MYIMAGE string = string(cres.MYIMAGE)
45+
CLUSTER string = string(cres.CLUSTER)
46+
NODEGROUP string = string(cres.NODEGROUP)
47+
FILESYSTEM string = string(cres.FILESYSTEM)
4748
)
4849

4950
func RSTypeString(rsType string) string {
@@ -59,6 +60,7 @@ var nlbSPLock = splock.New()
5960
var diskSPLock = splock.New()
6061
var myImageSPLock = splock.New()
6162
var clusterSPLock = splock.New()
63+
var fsSPLock = splock.New()
6264

6365
// ====================================================================
6466
// Common column name and struct for GORM
@@ -311,6 +313,9 @@ func UnregisterResource(connectionName string, rsType string, nameId string) (bo
311313
case CLUSTER:
312314
clusterSPLock.Lock(connectionName, nameId)
313315
defer clusterSPLock.Unlock(connectionName, nameId)
316+
case FILESYSTEM:
317+
fsSPLock.Lock(connectionName, nameId)
318+
defer fsSPLock.Unlock(connectionName, nameId)
314319
default:
315320
return false, fmt.Errorf(rsType + " is not supported Resource!!")
316321
}
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
// Cloud Control Manager's Rest Runtime of CB-Spider.
2+
// Common Runtime for FileSystemHandler interface
3+
// by CB-Spider Team
4+
5+
package commonruntime
6+
7+
import (
8+
"fmt"
9+
10+
ccm "github.com/cloud-barista/cb-spider/cloud-control-manager"
11+
cres "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
12+
infostore "github.com/cloud-barista/cb-spider/info-store"
13+
)
14+
15+
// -------- IID Info for FileSystem
16+
17+
type FileSystemIIDInfo ZoneLevelIIDInfo
18+
19+
func (FileSystemIIDInfo) TableName() string {
20+
return "filesystem_iid_infos"
21+
}
22+
23+
func init() {
24+
db, err := infostore.Open()
25+
if err != nil {
26+
cblog.Error(err)
27+
return
28+
}
29+
db.AutoMigrate(&FileSystemIIDInfo{})
30+
infostore.Close(db)
31+
}
32+
33+
// -------- FileSystem Common Runtime
34+
35+
func CreateFileSystem(connectionName string, reqInfo cres.FileSystemInfo) (*cres.FileSystemInfo, error) {
36+
cblog.Info("call CreateFileSystem()")
37+
38+
connectionName, err := EmptyCheckAndTrim("connectionName", connectionName)
39+
if err != nil {
40+
cblog.Error(err)
41+
return nil, err
42+
}
43+
44+
fsSPLock.Lock(connectionName, reqInfo.IId.NameId)
45+
defer fsSPLock.Unlock(connectionName, reqInfo.IId.NameId)
46+
47+
exist, err := infostore.HasByConditions(&FileSystemIIDInfo{}, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, reqInfo.IId.NameId)
48+
if err != nil {
49+
cblog.Error(err)
50+
return nil, err
51+
}
52+
if exist {
53+
return nil, fmt.Errorf("FileSystem %s already exists", reqInfo.IId.NameId)
54+
}
55+
56+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, reqInfo.Zone)
57+
if err != nil {
58+
cblog.Error(err)
59+
return nil, err
60+
}
61+
62+
handler, err := cldConn.CreateFileSystemHandler()
63+
if err != nil {
64+
cblog.Error(err)
65+
return nil, err
66+
}
67+
68+
info, err := handler.CreateFileSystem(reqInfo)
69+
if err != nil {
70+
cblog.Error(err)
71+
return nil, err
72+
}
73+
74+
spiderIID := cres.IID{NameId: reqInfo.IId.NameId, SystemId: info.IId.SystemId}
75+
err = infostore.Insert(&FileSystemIIDInfo{ConnectionName: connectionName, ZoneId: reqInfo.Zone, NameId: spiderIID.NameId, SystemId: spiderIID.SystemId})
76+
if err != nil {
77+
cblog.Error(err)
78+
// rollback
79+
_, err2 := handler.DeleteFileSystem(info.IId)
80+
if err2 != nil {
81+
cblog.Error(err2)
82+
return nil, fmt.Errorf("Failed to delete FileSystem %s: %v", info.IId.NameId, err2)
83+
}
84+
cblog.Error(err)
85+
return nil, err
86+
}
87+
88+
info.IId = cres.IID{NameId: spiderIID.NameId, SystemId: spiderIID.SystemId}
89+
info.KeyValueList = cres.StructToKeyValueList(info)
90+
return &info, nil
91+
}
92+
93+
func ListFileSystem(connectionName string) ([]*cres.FileSystemInfo, error) {
94+
cblog.Info("call ListFileSystem()")
95+
96+
var iidInfoList []*FileSystemIIDInfo
97+
err := infostore.ListByCondition(&iidInfoList, CONNECTION_NAME_COLUMN, connectionName)
98+
if err != nil {
99+
return nil, err
100+
}
101+
var infoList []*cres.FileSystemInfo
102+
for _, iid := range iidInfoList {
103+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, iid.ZoneId)
104+
if err != nil {
105+
return nil, err
106+
}
107+
handler, err := cldConn.CreateFileSystemHandler()
108+
if err != nil {
109+
return nil, err
110+
}
111+
info, err := handler.GetFileSystem(cres.IID{NameId: iid.NameId, SystemId: iid.SystemId})
112+
if err != nil {
113+
continue
114+
}
115+
info.IId = cres.IID{NameId: iid.NameId, SystemId: iid.SystemId}
116+
infoList = append(infoList, &info)
117+
}
118+
return infoList, nil
119+
}
120+
121+
func GetFileSystem(connectionName string, nameID string) (*cres.FileSystemInfo, error) {
122+
cblog.Info("call GetFileSystem()")
123+
var iidInfo FileSystemIIDInfo
124+
err := infostore.GetByConditions(&iidInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, nameID)
125+
if err != nil {
126+
return nil, err
127+
}
128+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, iidInfo.ZoneId)
129+
if err != nil {
130+
return nil, err
131+
}
132+
handler, err := cldConn.CreateFileSystemHandler()
133+
if err != nil {
134+
return nil, err
135+
}
136+
info, err := handler.GetFileSystem(cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId})
137+
if err != nil {
138+
return nil, err
139+
}
140+
info.IId = cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId}
141+
return &info, nil
142+
}
143+
144+
func DeleteFileSystem(connectionName string, nameID string) (bool, error) {
145+
cblog.Info("call DeleteFileSystem()")
146+
var iidInfo FileSystemIIDInfo
147+
err := infostore.GetByConditions(&iidInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, nameID)
148+
if err != nil {
149+
return false, err
150+
}
151+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, iidInfo.ZoneId)
152+
if err != nil {
153+
return false, err
154+
}
155+
handler, err := cldConn.CreateFileSystemHandler()
156+
if err != nil {
157+
return false, err
158+
}
159+
result, err := handler.DeleteFileSystem(cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId})
160+
if err != nil {
161+
return false, err
162+
}
163+
_, err = infostore.DeleteByConditions(&FileSystemIIDInfo{}, CONNECTION_NAME_COLUMN, iidInfo.ConnectionName, NAME_ID_COLUMN, nameID)
164+
if err != nil {
165+
return false, err
166+
}
167+
return result, nil
168+
}
169+
170+
func AddAccessSubnet(connectionName string, nameID string, subnetIID cres.IID) (*cres.FileSystemInfo, error) {
171+
cblog.Info("call AddAccessSubnet()")
172+
var iidInfo FileSystemIIDInfo
173+
err := infostore.GetByConditions(&iidInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, nameID)
174+
if err != nil {
175+
return nil, err
176+
}
177+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, iidInfo.ZoneId)
178+
if err != nil {
179+
return nil, err
180+
}
181+
handler, err := cldConn.CreateFileSystemHandler()
182+
if err != nil {
183+
return nil, err
184+
}
185+
info, err := handler.AddAccessSubnet(cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId}, subnetIID)
186+
if err != nil {
187+
return nil, err
188+
}
189+
info.IId = cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId}
190+
return &info, nil
191+
}
192+
193+
func RemoveAccessSubnet(connectionName string, nameID string, subnetIID cres.IID) (bool, error) {
194+
cblog.Info("call RemoveAccessSubnet()")
195+
var iidInfo FileSystemIIDInfo
196+
err := infostore.GetByConditions(&iidInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, nameID)
197+
if err != nil {
198+
return false, err
199+
}
200+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, iidInfo.ZoneId)
201+
if err != nil {
202+
return false, err
203+
}
204+
handler, err := cldConn.CreateFileSystemHandler()
205+
if err != nil {
206+
return false, err
207+
}
208+
return handler.RemoveAccessSubnet(cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId}, subnetIID)
209+
}
210+
211+
func ListAccessSubnet(connectionName string, nameID string) ([]cres.IID, error) {
212+
cblog.Info("call ListAccessSubnet()")
213+
var iidInfo FileSystemIIDInfo
214+
err := infostore.GetByConditions(&iidInfo, CONNECTION_NAME_COLUMN, connectionName, NAME_ID_COLUMN, nameID)
215+
if err != nil {
216+
return nil, err
217+
}
218+
cldConn, err := ccm.GetZoneLevelCloudConnection(connectionName, iidInfo.ZoneId)
219+
if err != nil {
220+
return nil, err
221+
}
222+
handler, err := cldConn.CreateFileSystemHandler()
223+
if err != nil {
224+
return nil, err
225+
}
226+
return handler.ListAccessSubnet(cres.IID{NameId: iidInfo.NameId, SystemId: iidInfo.SystemId})
227+
}

0 commit comments

Comments
 (0)