mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
fix: 加入Azure套餐和镜像的检查
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user