fix: 加入Azure套餐和镜像的检查

This commit is contained in:
Qu Xuan
2020-05-22 16:09:39 +08:00
parent a9c0012006
commit 0f2ff53847
2 changed files with 37 additions and 2 deletions
+32
View File
@@ -17,6 +17,7 @@ package guestdrivers
import (
"context"
"fmt"
"strings"
"yunion.io/x/jsonutils"
"yunion.io/x/pkg/errors"
@@ -160,6 +161,37 @@ func (self *SAzureGuestDriver) ValidateCreateData(ctx context.Context, userCred
if !find {
return nil, httperrors.NewResourceNotFoundError("failed to find subformat vhd for image %s, please append 'vhd' for glance options(target_image_formats)", image.Name)
}
} else {
if len(input.InstanceType) > 0 {
if image.UEFI.IsFalse() {
if strings.HasPrefix(input.InstanceType, "Standard_M") && strings.HasSuffix(input.InstanceType, "v2") {
return nil, httperrors.NewNotSupportedError("Azure Mv2-series instance sku only support UEFI image")
}
} else {
// https://docs.microsoft.com/en-us/azure/virtual-machines/windows/generation-2
if !(strings.HasPrefix(input.InstanceType, "Standard_B") || // B-series
(strings.HasPrefix(input.InstanceType, "Standard_DC") && strings.HasSuffix(input.InstanceType, "s_v2") || input.InstanceType == "Standard_DC8_v2") || // DCsv2-series
(strings.HasPrefix(input.InstanceType, "Standard_DS") && strings.HasSuffix(input.InstanceType, "v2")) || // DSv2-series
(strings.HasPrefix(input.InstanceType, "Standard_DS") && strings.HasSuffix(input.InstanceType, "s_v3")) || // Dsv3-series
(strings.HasPrefix(input.InstanceType, "Standard_D") && strings.HasSuffix(input.InstanceType, "as_v4")) || // Dasv4-series
(strings.HasPrefix(input.InstanceType, "Standard_E") && strings.HasSuffix(input.InstanceType, "s_v3")) || // Esv3-series
(strings.HasPrefix(input.InstanceType, "Standard_E") && strings.HasSuffix(input.InstanceType, "as_v4")) || // Easv4-series
(strings.HasPrefix(input.InstanceType, "Standard_F") && strings.HasSuffix(input.InstanceType, "s_v2")) || // Fsv2-series
(strings.HasPrefix(input.InstanceType, "Standard_GS")) || // GS-series
(strings.HasPrefix(input.InstanceType, "Standard_HB")) || // HB-series
(strings.HasPrefix(input.InstanceType, "Standard_HC")) || // HC-series
(strings.HasPrefix(input.InstanceType, "Standard_L") && strings.HasSuffix(input.InstanceType, "s")) || // Ls-series
(strings.HasPrefix(input.InstanceType, "Standard_L") && strings.HasSuffix(input.InstanceType, "s_v2")) || // Ls-series
(strings.HasPrefix(input.InstanceType, "Standard_M")) || // M-series
(strings.HasPrefix(input.InstanceType, "Standard_M") && strings.HasSuffix(input.InstanceType, "s_v2")) || // Mv2-series
(strings.HasPrefix(input.InstanceType, "Standard_NC") && strings.HasSuffix(input.InstanceType, "s_v2")) || // NCv2-series
(strings.HasPrefix(input.InstanceType, "Standard_NC") && strings.HasSuffix(input.InstanceType, "s_v3")) || // NCv3-series
(strings.HasPrefix(input.InstanceType, "Standard_ND")) || // ND-series
(strings.HasPrefix(input.InstanceType, "Standard_NV") && strings.HasSuffix(input.InstanceType, "s_v3"))) { // NVv3-series
return nil, httperrors.NewUnsupportOperationError("Azure UEFI image %s not support this instance sku", image.Name)
}
}
}
}
}
return input, nil
+5 -2
View File
@@ -328,6 +328,7 @@ func (self *SRegion) getOfferedImages(publishersFilter []string, offersFilter []
image.ImageType = imageType
image.Properties.StorageProfile.OsDisk.DiskSizeGB = int32(_image.Properties.OsDiskImage.SizeInGb)
image.Properties.StorageProfile.OsDisk.OsType = _image.Properties.OsDiskImage.OperatingSystem
image.Properties.HyperVGeneration = _image.Properties.HyperVGeneration
images = append(images, image)
}
}
@@ -447,8 +448,9 @@ type SOsDiskImage struct {
}
type SAzureImageResourceProperties struct {
ReplicaType string `json:"replicaType"`
OsDiskImage SOsDiskImage `json:"osDiskImage"`
ReplicaType string `json:"replicaType"`
OsDiskImage SOsDiskImage `json:"osDiskImage"`
HyperVGeneration string `json:"hyperVGeneration,omitempty"`
}
type SAzureImageResource struct {
@@ -587,6 +589,7 @@ func (region *SRegion) getOfferedImage(offerId string) (SImage, error) {
if err == nil {
image.Properties.StorageProfile.OsDisk.DiskSizeGB = int32(_image.Properties.OsDiskImage.SizeInGb)
image.Properties.StorageProfile.OsDisk.OperatingSystem = _image.Properties.OsDiskImage.OperatingSystem
image.Properties.HyperVGeneration = _image.Properties.HyperVGeneration
}
return image, nil
}