Skip to content

Commit 3d86278

Browse files
authored
Merge pull request #1412 from ish-hcc/ibm_vmimage
IBM: Add more VM image info
2 parents dadc89b + 8831137 commit 3d86278

File tree

1 file changed

+103
-5
lines changed
  • cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources

1 file changed

+103
-5
lines changed

cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/ImageHandler.go

Lines changed: 103 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
idrv "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces"
1111
irs "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
1212
"net/url"
13+
"strconv"
1314
"strings"
1415
)
1516

@@ -74,8 +75,10 @@ func (imageHandler *IbmImageHandler) ListImage() ([]*irs.ImageInfo, error) {
7475
}
7576
}
7677
LoggingInfo(hiscallInfo, start)
78+
7779
return imageList, nil
7880
}
81+
7982
func (imageHandler *IbmImageHandler) GetImage(imageIID irs.IID) (irs.ImageInfo, error) {
8083
hiscallInfo := GetCallLogScheme(imageHandler.Region, call.VMIMAGE, imageIID.NameId, "GetImage()")
8184
start := call.Start()
@@ -109,6 +112,40 @@ func (imageHandler *IbmImageHandler) GetImage(imageIID irs.IID) (irs.ImageInfo,
109112
LoggingInfo(hiscallInfo, start)
110113
return imageInfo, nil
111114
}
115+
116+
func (imageHandler *IbmImageHandler) GetImageN(name string) (irs.ImageInfo, error) {
117+
hiscallInfo := GetCallLogScheme(imageHandler.Region, call.VMIMAGE, name, "GetImage()")
118+
start := call.Start()
119+
120+
if name == "" {
121+
getErr := errors.New(fmt.Sprintf("Failed to Get Image. err = image name is empty"))
122+
cblogger.Error(getErr.Error())
123+
LoggingError(hiscallInfo, getErr)
124+
return irs.ImageInfo{}, getErr
125+
}
126+
127+
image, err := getRawImageN(name, imageHandler.VpcService, imageHandler.Ctx)
128+
129+
if err != nil {
130+
getErr := errors.New(fmt.Sprintf("Failed to Get Image. err = %s", err.Error()))
131+
cblogger.Error(getErr.Error())
132+
LoggingError(hiscallInfo, getErr)
133+
return irs.ImageInfo{}, getErr
134+
}
135+
136+
imageInfo, err := setImageInfo(&image)
137+
138+
if err != nil {
139+
getErr := errors.New(fmt.Sprintf("Failed to Get Image. err = %s", err.Error()))
140+
cblogger.Error(getErr.Error())
141+
LoggingError(hiscallInfo, getErr)
142+
return irs.ImageInfo{}, getErr
143+
}
144+
145+
LoggingInfo(hiscallInfo, start)
146+
return imageInfo, nil
147+
}
148+
112149
func (imageHandler *IbmImageHandler) DeleteImage(imageIID irs.IID) (bool, error) {
113150
hiscallInfo := GetCallLogScheme(imageHandler.Region, call.VMIMAGE, imageIID.NameId, "DeleteImage()")
114151

@@ -140,19 +177,80 @@ func getRawImage(imageIID irs.IID, vpcService *vpcv1.VpcV1, ctx context.Context)
140177
return *image, nil
141178
}
142179

180+
func getRawImageN(name string, vpcService *vpcv1.VpcV1, ctx context.Context) (vpcv1.Image, error) {
181+
options := &vpcv1.GetImageOptions{}
182+
options.SetID(name)
183+
image, _, err := vpcService.GetImageWithContext(ctx, options)
184+
if err != nil {
185+
return vpcv1.Image{}, err
186+
}
187+
return *image, nil
188+
}
189+
143190
func setImageInfo(image *vpcv1.Image) (irs.ImageInfo, error) {
144191
if image != nil {
192+
193+
var osPlatform irs.OSPlatform
194+
if image.OperatingSystem.DisplayName != nil {
195+
displayName := strings.ToLower(*image.OperatingSystem.DisplayName)
196+
if strings.Contains(displayName, "windows") {
197+
osPlatform = irs.Windows
198+
} else if strings.Contains(displayName, "linux") || strings.Contains(displayName, "z/os") || strings.Contains(displayName, "centos") || strings.Contains(displayName, "fedora") {
199+
osPlatform = irs.Linux_UNIX
200+
} else {
201+
osPlatform = irs.PlatformNA
202+
}
203+
}
204+
205+
var imageStatus irs.ImageStatus
206+
if image.Status != nil && *image.Status == "available" {
207+
imageStatus = irs.ImageAvailable
208+
} else if image.Status != nil {
209+
imageStatus = irs.ImageUnavailable
210+
} else {
211+
imageStatus = irs.ImageNA
212+
}
213+
214+
var osArchitecture irs.OSArchitecture
215+
if image.OperatingSystem.Architecture != nil {
216+
arch := strings.ToLower(*image.OperatingSystem.Architecture)
217+
if arch == "arm64" {
218+
osArchitecture = irs.ARM64
219+
} else if arch == "arm64_mac" {
220+
osArchitecture = irs.ARM64_MAC
221+
} else if arch == "x86_64" || arch == "amd64" {
222+
osArchitecture = irs.X86_64
223+
} else if arch == "x86_64_mac" {
224+
osArchitecture = irs.X86_64_MAC
225+
} else {
226+
osArchitecture = irs.ArchitectureNA
227+
}
228+
}
229+
145230
imageInfo := irs.ImageInfo{
146-
IId: irs.IID{
147-
NameId: *image.ID,
148-
SystemId: *image.ID,
231+
Name: *image.ID,
232+
OSArchitecture: osArchitecture,
233+
OSPlatform: osPlatform,
234+
OSDistribution: *image.OperatingSystem.DisplayName,
235+
OSDiskType: "NA",
236+
OSDiskSizeInGB: "-1",
237+
ImageStatus: imageStatus,
238+
KeyValueList: []irs.KeyValue{
239+
{Key: "Version", Value: *image.OperatingSystem.Version},
240+
{Key: "DedicatedHostOnly", Value: strconv.FormatBool(func() bool {
241+
if image.OperatingSystem.DedicatedHostOnly != nil {
242+
return *image.OperatingSystem.DedicatedHostOnly
243+
}
244+
return false
245+
}())},
246+
{Key: "Vendor", Value: *image.OperatingSystem.Vendor},
149247
},
150-
GuestOS: *image.OperatingSystem.DisplayName,
151-
Status: "available",
152248
}
153249
return imageInfo, nil
154250
}
251+
155252
err := errors.New(fmt.Sprintf("operatingSystem invalid"))
253+
156254
return irs.ImageInfo{}, err
157255
}
158256

0 commit comments

Comments
 (0)