@@ -10,6 +10,7 @@ import (
10
10
idrv "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces"
11
11
irs "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
12
12
"net/url"
13
+ "strconv"
13
14
"strings"
14
15
)
15
16
@@ -74,8 +75,10 @@ func (imageHandler *IbmImageHandler) ListImage() ([]*irs.ImageInfo, error) {
74
75
}
75
76
}
76
77
LoggingInfo (hiscallInfo , start )
78
+
77
79
return imageList , nil
78
80
}
81
+
79
82
func (imageHandler * IbmImageHandler ) GetImage (imageIID irs.IID ) (irs.ImageInfo , error ) {
80
83
hiscallInfo := GetCallLogScheme (imageHandler .Region , call .VMIMAGE , imageIID .NameId , "GetImage()" )
81
84
start := call .Start ()
@@ -109,6 +112,40 @@ func (imageHandler *IbmImageHandler) GetImage(imageIID irs.IID) (irs.ImageInfo,
109
112
LoggingInfo (hiscallInfo , start )
110
113
return imageInfo , nil
111
114
}
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
+
112
149
func (imageHandler * IbmImageHandler ) DeleteImage (imageIID irs.IID ) (bool , error ) {
113
150
hiscallInfo := GetCallLogScheme (imageHandler .Region , call .VMIMAGE , imageIID .NameId , "DeleteImage()" )
114
151
@@ -140,19 +177,80 @@ func getRawImage(imageIID irs.IID, vpcService *vpcv1.VpcV1, ctx context.Context)
140
177
return * image , nil
141
178
}
142
179
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
+
143
190
func setImageInfo (image * vpcv1.Image ) (irs.ImageInfo , error ) {
144
191
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
+
145
230
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 },
149
247
},
150
- GuestOS : * image .OperatingSystem .DisplayName ,
151
- Status : "available" ,
152
248
}
153
249
return imageInfo , nil
154
250
}
251
+
155
252
err := errors .New (fmt .Sprintf ("operatingSystem invalid" ))
253
+
156
254
return irs.ImageInfo {}, err
157
255
}
158
256
0 commit comments