From 5e69f2040f9a30fedc5f01224b8ddebd1af4e1bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Thu, 4 Apr 2019 11:53:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=95=9C=E5=83=8F=E6=9C=80?= =?UTF-8?q?=E5=B0=8F=E8=A6=81=E6=B1=82=E7=B3=BB=E7=BB=9F=E7=9B=98=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=20(#210)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/guestdrivers/azure.go | 2 +- pkg/util/azure/azure.go | 2 +- pkg/util/azure/image.go | 58 +++++++++++++++++++++++++------ pkg/util/azure/shell/image.go | 6 ++-- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/pkg/compute/guestdrivers/azure.go b/pkg/compute/guestdrivers/azure.go index 8aae094bfd..97cad489a0 100644 --- a/pkg/compute/guestdrivers/azure.go +++ b/pkg/compute/guestdrivers/azure.go @@ -53,7 +53,7 @@ func (self *SAzureGuestDriver) GetDefaultSysDiskBackend() string { } func (self *SAzureGuestDriver) GetMinimalSysDiskSizeGb() int { - return 10 + return 30 } func (self *SAzureGuestDriver) GetStorageTypes() []string { diff --git a/pkg/util/azure/azure.go b/pkg/util/azure/azure.go index c8c5373527..9ab6e9d637 100644 --- a/pkg/util/azure/azure.go +++ b/pkg/util/azure/azure.go @@ -189,7 +189,7 @@ func (self *SAzureClient) Get(resourceId string, params []string, retVal interfa if err != nil { return err } - fmt.Println(body) + //fmt.Println(body) err = body.Unmarshal(retVal) if err != nil { return err diff --git a/pkg/util/azure/image.go b/pkg/util/azure/image.go index 7431f24010..c97712d83a 100644 --- a/pkg/util/azure/image.go +++ b/pkg/util/azure/image.go @@ -197,7 +197,10 @@ func (self *SImage) GetOsVersion() string { } func (self *SImage) GetMinOsDiskSizeGb() int { - return 10 + if self.Properties.StorageProfile.OsDisk.DiskSizeGB > 0 { + return int(self.Properties.StorageProfile.OsDisk.DiskSizeGB) + } + return 30 } func (self *SImage) GetImageFormat() string { @@ -313,22 +316,24 @@ func (self *SRegion) CreateImage(snapshotId, imageName, osType, imageDesc string func (self *SRegion) getOfferedImages(publishersFilter []string, offersFilter []string, skusFilter []string, verFilter []string, imageType string, latestVer bool) ([]SImage, error) { images := make([]SImage, 0) - idList, err := self.GetOfferedImageIDs(publishersFilter, offersFilter, skusFilter, verFilter, latestVer) + idMap, err := self.GetOfferedImageIDs(publishersFilter, offersFilter, skusFilter, verFilter, latestVer) if err != nil { return nil, err } - for _, id := range idList { + for id, _image := range idMap { image, err := self.getOfferedImage(id) - image.ImageType = imageType if err == nil { + image.ImageType = imageType + image.Properties.StorageProfile.OsDisk.DiskSizeGB = int32(_image.Properties.OsDiskImage.SizeInGb) + image.Properties.StorageProfile.OsDisk.OsType = _image.Properties.OsDiskImage.OperatingSystem images = append(images, image) } } return images, nil } -func (self *SRegion) GetOfferedImageIDs(publishersFilter []string, offersFilter []string, skusFilter []string, verFilter []string, latestVer bool) ([]string, error) { - idList := make([]string, 0) +func (self *SRegion) GetOfferedImageIDs(publishersFilter []string, offersFilter []string, skusFilter []string, verFilter []string, latestVer bool) (map[string]SAzureImageResource, error) { + idMap := map[string]SAzureImageResource{} publishers, err := self.GetImagePublishers(toLowerStringArray(publishersFilter)) if err != nil { return nil, err @@ -354,12 +359,16 @@ func (self *SRegion) GetOfferedImageIDs(publishersFilter []string, offersFilter } for _, ver := range vers { idStr := strings.Join([]string{publisher, offer, sku, ver}, "/") - idList = append(idList, idStr) + image, err := self.getImageDetail(publisher, offer, sku, ver) + if err != nil { + return nil, err + } + idMap[idStr] = image } } } } - return idList, nil + return idMap, nil } func (self *SRegion) getPrivateImages() ([]SImage, error) { @@ -421,10 +430,21 @@ func (self *SImage) Delete(ctx context.Context) error { return self.storageCache.region.DeleteImage(self.ID) } +type SOsDiskImage struct { + OperatingSystem string `json:"operatingSystem"` + SizeInGb int `json:"sizeInGb"` +} + +type SAzureImageResourceProperties struct { + ReplicaType string `json:"replicaType"` + OsDiskImage SOsDiskImage `json:"osDiskImage"` +} + type SAzureImageResource struct { - Id string - Name string - Location string + Id string + Name string + Location string + Properties SAzureImageResourceProperties } func (region *SRegion) GetImagePublishers(filter []string) ([]string, error) { @@ -487,6 +507,17 @@ func (region *SRegion) getImageVersions(publisher string, offer string, sku stri return ret, nil } +func (region *SRegion) getImageDetail(publisher string, offer string, sku string, version string) (SAzureImageResource, error) { + image := SAzureImageResource{} + id := "/Subscriptions/" + region.client.subscriptionId + + "/Providers/Microsoft.Compute/locations/" + region.Name + + "/publishers/" + publisher + + "/artifacttypes/vmimage/offers/" + offer + + "/skus/" + sku + + "/versions/" + version + return image, region.client.Get(id, []string{}, &image) +} + func (region *SRegion) getOfferedImage(offerId string) (SImage, error) { image := SImage{} @@ -511,6 +542,11 @@ func (region *SRegion) getOfferedImage(offerId string) (SImage, error) { image.Sku = sku image.Version = version image.Properties.ProvisioningState = ImageStatusAvailable + _image, err := region.getImageDetail(publisher, offer, sku, version) + if err == nil { + image.Properties.StorageProfile.OsDisk.DiskSizeGB = int32(_image.Properties.OsDiskImage.SizeInGb) + image.Properties.StorageProfile.OsDisk.OperatingSystem = _image.Properties.OsDiskImage.OperatingSystem + } return image, nil } diff --git a/pkg/util/azure/shell/image.go b/pkg/util/azure/shell/image.go index 1c1a6d9d25..cb73f01536 100644 --- a/pkg/util/azure/shell/image.go +++ b/pkg/util/azure/shell/image.go @@ -59,9 +59,9 @@ func init() { if err != nil { return err } - sort.Strings(idList) - for _, id := range idList { - fmt.Println(id) + //sort.Strings(idList) + for id, image := range idList { + fmt.Printf("id: %s detail: %v\n", id, image) } return nil })