-
Notifications
You must be signed in to change notification settings - Fork 47
/
ImageHandler.go
126 lines (102 loc) · 3.61 KB
/
ImageHandler.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
// Cloud Driver Interface 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
//
// This is Mock Driver.
//
// by CB-Spider Team, 2020.09.
package resources
import (
"fmt"
cblog "github.com/cloud-barista/cb-log"
irs "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
)
var imgInfoMap map[string][]*irs.ImageInfo
type MockImageHandler struct {
MockName string
}
var PrepareImageInfoList []*irs.ImageInfo
func init() {
// cblog is a global variable.
imgInfoMap = make(map[string][]*irs.ImageInfo)
}
// Be called before using the User function.
// Called in MockDriver
func PrepareVMImage(mockName string) {
cblogger := cblog.GetLogger("CB-SPIDER")
cblogger.Info("Mock Driver: called PrepareVMImage()!")
if imgInfoMap[mockName] != nil {
return
}
PrepareImageInfoList = []*irs.ImageInfo{
{irs.IID{"mock-vmimage-01", "mock-vmimage-01"}, "TestGuestOS", "AVAILABLE", nil},
{irs.IID{"mock-vmimage-02", "mock-vmimage-02"}, "TestGuestOS", "AVAILABLE", nil},
{irs.IID{"mock-vmimage-03", "mock-vmimage-03"}, "TestGuestOS", "AVAILABLE", nil},
{irs.IID{"mock-vmimage-04", "mock-vmimage-04"}, "TestGuestOS", "AVAILABLE", nil},
{irs.IID{"mock-vmimage-05", "mock-vmimage-05"}, "TestGuestOS", "AVAILABLE", nil},
}
imgInfoMap[mockName] = PrepareImageInfoList
}
// (1) create imageInfo object
// (2) insert ImageInfo into global Map
func (imageHandler *MockImageHandler) CreateImage(imageReqInfo irs.ImageReqInfo) (irs.ImageInfo, error) {
cblogger := cblog.GetLogger("CB-SPIDER")
cblogger.Info("Mock Driver: called CreateImage()!")
mockName := imageHandler.MockName
imageReqInfo.IId.SystemId = imageReqInfo.IId.NameId
// (1) create imageInfo object
imageInfo := irs.ImageInfo{irs.IID{imageReqInfo.IId.NameId, imageReqInfo.IId.SystemId}, "TestGuestOS", "TestStatus", nil}
// (2) insert ImageInfo into global Map
imgInfoList, _ := imgInfoMap[mockName]
imgInfoList = append(imgInfoList, &imageInfo)
imgInfoMap[mockName] = imgInfoList
return imageInfo, nil
}
func (imageHandler *MockImageHandler) ListImage() ([]*irs.ImageInfo, error) {
cblogger := cblog.GetLogger("CB-SPIDER")
cblogger.Info("Mock Driver: called ListImage()!")
mockName := imageHandler.MockName
imgInfoList, ok := imgInfoMap[mockName]
if !ok {
return []*irs.ImageInfo{}, nil
}
// cloning list of Image
resultList := make([]*irs.ImageInfo, len(imgInfoList))
copy(resultList, imgInfoList)
return resultList, nil
}
func (imageHandler *MockImageHandler) GetImage(imageIID irs.IID) (irs.ImageInfo, error) {
cblogger := cblog.GetLogger("CB-SPIDER")
cblogger.Info("Mock Driver: called GetImage()!")
imgInfoList, err := imageHandler.ListImage()
if err != nil {
cblogger.Error(err)
return irs.ImageInfo{}, err
}
for _, info := range imgInfoList {
if (*info).IId.NameId == imageIID.NameId {
return *info, nil
}
}
return irs.ImageInfo{}, fmt.Errorf("%s image does not exist!!", imageIID.NameId)
}
func (imageHandler *MockImageHandler) DeleteImage(imageIID irs.IID) (bool, error) {
cblogger := cblog.GetLogger("CB-SPIDER")
cblogger.Info("Mock Driver: called DeleteImage()!")
imgInfoList, err := imageHandler.ListImage()
if err != nil {
cblogger.Error(err)
return false, err
}
mockName := imageHandler.MockName
for idx, info := range imgInfoList {
if info.IId.SystemId == imageIID.SystemId {
imgInfoList = append(imgInfoList[:idx], imgInfoList[idx+1:]...)
imgInfoMap[mockName] = imgInfoList
return true, nil
}
}
return false, nil
}