Documentation
¶
Overview ¶
Package api defines the external API for the plugin.
Index ¶
- Constants
- func ConvertToAdmin(cs *OpenShiftManagedCluster) *admin.OpenShiftManagedCluster
- func ConvertToV20180930preview(cs *OpenShiftManagedCluster) *v20180930preview.OpenShiftManagedCluster
- type AADIdentityProvider
- type AgentPoolProfile
- type AgentPoolProfileRole
- type AuthProfile
- type AzProfile
- type CertKeyPair
- type CertificateConfig
- type Config
- type ContextKey
- type DeployFn
- type GenevaActions
- type IdentityProvider
- type ImageConfig
- type NetworkProfile
- type OSType
- type OpenShiftManagedCluster
- type Plugin
- type PluginConfig
- type PluginError
- type PluginStep
- type Properties
- type ProvisioningState
- type ResourcePurchasePlan
- type RouterProfile
- type ServicePrincipalProfile
- type TestConfig
- type VMSize
Constants ¶
const (
// APIVersion is the version of this API
APIVersion = "internal"
)
Variables ¶
This section is empty.
Functions ¶
func ConvertToAdmin ¶
func ConvertToAdmin(cs *OpenShiftManagedCluster) *admin.OpenShiftManagedCluster
func ConvertToV20180930preview ¶
func ConvertToV20180930preview(cs *OpenShiftManagedCluster) *v20180930preview.OpenShiftManagedCluster
ConvertToV20180930preview converts from an OpenShiftManagedCluster to a v20180930preview.OpenShiftManagedCluster.
Types ¶
type AADIdentityProvider ¶
type AADIdentityProvider struct {
Kind string `json:"kind,omitempty"`
ClientID string `json:"clientId,omitempty"`
Secret string `json:"secret,omitempty"`
TenantID string `json:"tenantId,omitempty"`
// CustomerAdminGroupID group memberships will get synced into the OpenShift group "osa-customer-admins"
CustomerAdminGroupID *string `json:"customerAdminGroupId,omitempty"`
}
AADIdentityProvider defines Identity provider for MS AAD. It is based on OpenID IdentityProvider.
type AgentPoolProfile ¶
type AgentPoolProfile struct {
Name string `json:"name,omitempty"`
Count int64 `json:"count,omitempty"`
VMSize VMSize `json:"vmSize,omitempty"`
SubnetCIDR string `json:"subnetCidr,omitempty"`
OSType OSType `json:"osType,omitempty"`
Role AgentPoolProfileRole `json:"role,omitempty"`
}
AgentPoolProfile represents configuration of OpenShift cluster VMs.
type AgentPoolProfileRole ¶
type AgentPoolProfileRole string
AgentPoolProfileRole represents the role of the AgentPoolProfile.
const ( // AgentPoolProfileRoleCompute is the compute role. AgentPoolProfileRoleCompute AgentPoolProfileRole = "compute" // AgentPoolProfileRoleInfra is the infra role. AgentPoolProfileRoleInfra AgentPoolProfileRole = "infra" // AgentPoolProfileRoleMaster is the master role. AgentPoolProfileRoleMaster AgentPoolProfileRole = "master" )
type AuthProfile ¶
type AuthProfile struct {
IdentityProviders []IdentityProvider `json:"identityProviders,omitempty"`
}
AuthProfile defines all possible authentication profiles for the OpenShift cluster.
type AzProfile ¶
type AzProfile struct {
TenantID string `json:"tenantId,omitempty"`
SubscriptionID string `json:"subscriptionId,omitempty"`
ResourceGroup string `json:"resourceGroup,omitempty"`
}
AzProfile holds the azure context for where the cluster resides
type CertKeyPair ¶
type CertKeyPair struct {
Key *rsa.PrivateKey `json:"key,omitempty"`
Cert *x509.Certificate `json:"cert,omitempty"`
}
CertKeyPair is an rsa private key and x509 certificate pair.
func (CertKeyPair) MarshalJSON ¶
func (c CertKeyPair) MarshalJSON() ([]byte, error)
func (*CertKeyPair) UnmarshalJSON ¶
func (c *CertKeyPair) UnmarshalJSON(b []byte) error
type CertificateConfig ¶
type CertificateConfig struct {
// CAs
EtcdCa CertKeyPair `json:"etcdCa,omitempty"`
Ca CertKeyPair `json:"ca,omitempty"`
FrontProxyCa CertKeyPair `json:"frontProxyCa,omitempty"`
ServiceSigningCa CertKeyPair `json:"serviceSigningCa,omitempty"`
ServiceCatalogCa CertKeyPair `json:"serviceCatalogCa,omitempty"`
// etcd certificates
EtcdServer CertKeyPair `json:"etcdServer,omitempty"`
EtcdPeer CertKeyPair `json:"etcdPeer,omitempty"`
EtcdClient CertKeyPair `json:"etcdClient,omitempty"`
// control plane certificates
MasterServer CertKeyPair `json:"masterServer,omitempty"`
OpenShiftConsole CertKeyPair `json:"openShiftConsole,omitempty"`
Admin CertKeyPair `json:"admin,omitempty"`
AggregatorFrontProxy CertKeyPair `json:"aggregatorFrontProxy,omitempty"`
MasterKubeletClient CertKeyPair `json:"masterKubeletClient,omitempty"`
MasterProxyClient CertKeyPair `json:"masterProxyClient,omitempty"`
OpenShiftMaster CertKeyPair `json:"openShiftMaster,omitempty"`
NodeBootstrap CertKeyPair `json:"nodeBootstrap,omitempty"`
// infra certificates
Registry CertKeyPair `json:"registry,omitempty"`
Router CertKeyPair `json:"router,omitempty"`
ServiceCatalogServer CertKeyPair `json:"serviceCatalogServer,omitempty"`
ServiceCatalogAPIClient CertKeyPair `json:"serviceCatalogAPIClient,omitempty"`
// misc certificates
AzureClusterReader CertKeyPair `json:"azureClusterReader,omitempty"`
// geneva integration certificates
GenevaLogging CertKeyPair `json:"genevaLogging,omitempty"`
GenevaMetrics CertKeyPair `json:"genevaMetrics,omitempty"`
}
CertificateConfig contains all certificate configuration for the cluster.
type Config ¶
type Config struct {
// ClusterVersion defines release version of the plugin used to build the cluster
ClusterVersion string `json:"clusterVersion,omitempty"`
// configuration of VMs in ARM template
ImageOffer string `json:"imageOffer,omitempty"`
ImagePublisher string `json:"imagePublisher,omitempty"`
ImageSKU string `json:"imageSku,omitempty"`
ImageVersion string `json:"imageVersion,omitempty"`
SSHKey *rsa.PrivateKey `json:"sshKey,omitempty"`
// configuration of other ARM resources
ConfigStorageAccount string `json:"configStorageAccount,omitempty"`
RegistryStorageAccount string `json:"registryStorageAccount,omitempty"`
Certificates CertificateConfig `json:"certificates,omitempty"`
Images ImageConfig `json:"images,omitempty"`
// kubeconfigs
AdminKubeconfig *v1.Config `json:"adminKubeconfig,omitempty"`
MasterKubeconfig *v1.Config `json:"masterKubeconfig,omitempty"`
NodeBootstrapKubeconfig *v1.Config `json:"nodeBootstrapKubeconfig,omitempty"`
AzureClusterReaderKubeconfig *v1.Config `json:"azureClusterReaderKubeconfig,omitempty"`
// misc control plane configurables
ServiceAccountKey *rsa.PrivateKey `json:"serviceAccountKey,omitempty"`
SessionSecretAuth []byte `json:"sessionSecretAuth,omitempty"`
SessionSecretEnc []byte `json:"sessionSecretEnc,omitempty"`
RunningUnderTest bool `json:"runningUnderTest,omitempty"`
// misc infra configurables
RegistryHTTPSecret []byte `json:"registryHttpSecret,omitempty"`
PrometheusProxySessionSecret []byte `json:"prometheusProxySessionSecret,omitempty"`
AlertManagerProxySessionSecret []byte `json:"alertManagerProxySessionSecret,omitempty"`
AlertsProxySessionSecret []byte `json:"alertsProxySessionSecret,omitempty"`
RegistryConsoleOAuthSecret string `json:"registryConsoleOAuthSecret,omitempty"`
ConsoleOAuthSecret string `json:"consoleOAuthSecret,omitempty"`
RouterStatsPassword string `json:"routerStatsPassword,omitempty"`
ServiceCatalogClusterID uuid.UUID `json:"serviceCatalogClusterId,omitempty"`
// Geneva Metrics System (MDM) sector used for logging
GenevaLoggingSector string `json:"genevaLoggingSector,omitempty"`
// Geneva Metrics System (MDM) logging account
GenevaLoggingAccount string `json:"genevaLoggingAccount,omitempty"`
// Geneva Metrics System (MDM) logging namespace
GenevaLoggingNamespace string `json:"genevaLoggingNamespace,omitempty"`
// Geneva Metrics System (MDM) logging control plane parameters
GenevaLoggingControlPlaneAccount string `json:"genevaLoggingControlPlaneAccount,omitempty"`
GenevaLoggingControlPlaneEnvironment string `json:"genevaLoggingControlPlaneEnvironment,omitempty"`
GenevaLoggingControlPlaneRegion string `json:"genevaLoggingControlPlaneRegion,omitempty"`
// Geneva Metrics System (MDM) account name for metrics
GenevaMetricsAccount string `json:"genevaMetricsAccount,omitempty"`
// Geneva Metrics System (MDM) endpoint for metrics
GenevaMetricsEndpoint string `json:"genevaMetricsEndpoint,omitempty"`
}
func ConvertFromPlugin ¶
ConvertFromPlugin converts external plugin API config type into internal API Config type
func (Config) MarshalJSON ¶
func (*Config) UnmarshalJSON ¶
type ContextKey ¶
type ContextKey string
ContextKey is a type for context property bag payload keys
const ( ContextKeyClientAuthorizer ContextKey = "ClientAuthorizer" ContextAcceptLanguages ContextKey = "AcceptLanguages" )
type DeployFn ¶
DeployFn makes it possible to plug in different logic to the deploy. The implementor must initiate a deployment of the given template using mode resources.Incremental and wait for it to complete.
type GenevaActions ¶
type GenevaActions interface {
// RecoverEtcdCluster recovers the cluster's etcd using the backup specified in the pluginConfig
RecoverEtcdCluster(ctx context.Context, cs *OpenShiftManagedCluster, deployer DeployFn, backupBlob string) *PluginError
// RotateClusterSecrets rotates the secrets in a cluster's config blob and then updates the cluster
RotateClusterSecrets(ctx context.Context, cs *OpenShiftManagedCluster, deployer DeployFn, template *plugin.Config) *PluginError
// GetControlPlanePods fetches a consolidated list of the control plane pods in the cluster
GetControlPlanePods(ctx context.Context, oc *OpenShiftManagedCluster) ([]byte, error)
}
GenevaActions is the interface for all geneva actions
type IdentityProvider ¶
type IdentityProvider struct {
Name string `json:"name,omitempty"`
Provider interface{} `json:"provider,omitempty"`
}
IdentityProvider is heavily cut down equivalent to IdentityProvider in the upstream.
func (*IdentityProvider) UnmarshalJSON ¶
func (ip *IdentityProvider) UnmarshalJSON(b []byte) error
type ImageConfig ¶
type ImageConfig struct {
// Format of the pull spec that is going to be
// used in the cluster.
Format string `json:"format,omitempty"`
ClusterMonitoringOperator string `json:"clusterMonitoringOperator,omitempty"`
AzureControllers string `json:"azureControllers,omitempty"`
PrometheusOperatorBase string `json:"prometheusOperatorBase,omitempty"`
PrometheusBase string `json:"prometheusBase,omitempty"`
PrometheusConfigReloaderBase string `json:"prometheusConfigReloaderBase,omitempty"`
ConfigReloaderBase string `json:"configReloaderBase,omitempty"`
AlertManagerBase string `json:"alertManagerBase,omitempty"`
NodeExporterBase string `json:"nodeExporterBase,omitempty"`
GrafanaBase string `json:"grafanaBase,omitempty"`
KubeStateMetricsBase string `json:"kubeStateMetricsBase,omitempty"`
KubeRbacProxyBase string `json:"kubeRbacProxyBase,omitempty"`
OAuthProxyBase string `json:"oAuthProxyBase,omitempty"`
MasterEtcd string `json:"masterEtcd,omitempty"`
ControlPlane string `json:"controlPlane,omitempty"`
Node string `json:"node,omitempty"`
ServiceCatalog string `json:"serviceCatalog,omitempty"`
Sync string `json:"sync,omitempty"`
TemplateServiceBroker string `json:"templateServiceBroker,omitempty"`
Registry string `json:"registry,omitempty"`
Router string `json:"router,omitempty"`
RegistryConsole string `json:"registryConsole,omitempty"`
AnsibleServiceBroker string `json:"ansibleServiceBroker,omitempty"`
WebConsole string `json:"webConsole,omitempty"`
Console string `json:"console,omitempty"`
EtcdBackup string `json:"etcdBackup,omitempty"`
// GenevaImagePullSecret defines secret used to pull private Azure images
GenevaImagePullSecret []byte `json:"genevaImagePullSecret,omitempty"`
// Geneva integration images
GenevaLogging string `json:"genevaLogging,omitempty"`
GenevaTDAgent string `json:"genevaTDAgent,omitempty"`
GenevaStatsd string `json:"genevaStatsd,omitempty"`
MetricsBridge string `json:"metricsBridge,omitempty"`
// ImagePullSecret defines the secret used to pull from the private registries, used system-wide
ImagePullSecret []byte `json:"imagePullSecret,omitempty"`
}
ImageConfig contains all images for the pods
type NetworkProfile ¶
type NetworkProfile struct {
// VnetCIDR (in): the CIDR with which the OSA cluster's Vnet is configured
VnetCIDR string `json:"vnetCidr,omitempty"`
// VnetID (out): the ID of the Vnet created for the OSA cluster
VnetID string `json:"vnetId,omitempty"`
// PeerVnetID (in, optional): ID of a Vnet with which the OSA cluster Vnet should be peered.
// If specified, this should match
// `^/subscriptions/[^/]+
// /resourceGroups/[^/]+
// /providers/Microsoft.Network
// /virtualNetworks/[^/]+$`
PeerVnetID *string `json:"peerVnetId,omitempty"`
}
NetworkProfile contains configuration for OpenShift networking.
type OpenShiftManagedCluster ¶
type OpenShiftManagedCluster struct {
Plan *ResourcePurchasePlan `json:"plan,omitempty"`
Properties Properties `json:"properties,omitempty"`
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Location string `json:"location,omitempty"`
Tags map[string]string `json:"tags"`
Config Config `json:"config,omitempty"`
}
OpenShiftManagedCluster complies with the ARM model of resource definition in a JSON template.
func ConvertFromAdmin ¶
func ConvertFromAdmin(oc *admin.OpenShiftManagedCluster, old *OpenShiftManagedCluster) (*OpenShiftManagedCluster, error)
func ConvertFromV20180930preview ¶
func ConvertFromV20180930preview(oc *v20180930preview.OpenShiftManagedCluster, old *OpenShiftManagedCluster) (*OpenShiftManagedCluster, error)
ConvertFromV20180930preview converts from a v20180930preview.OpenShiftManagedCluster to an OpenShiftManagedCluster. If old is non-nil, it is going to be used as the base for the internal output where the external request is merged on top of.
func (*OpenShiftManagedCluster) DeepCopy ¶
func (in *OpenShiftManagedCluster) DeepCopy() (out *OpenShiftManagedCluster)
type Plugin ¶
type Plugin interface {
// Validate exists (a) to be able to place validation logic in a
// single place in the event of multiple external API versions, and (b) to
// be able to compare a new API manifest against a pre-existing API manifest
// (for update, upgrade, etc.)
// externalOnly indicates that fields set by the RP (FQDN and routerProfile.FQDN)
// should be excluded.
Validate(ctx context.Context, new, old *OpenShiftManagedCluster, externalOnly bool) []error
// ValidateAdmin is used for validating admin API requests.
ValidateAdmin(ctx context.Context, new, old *OpenShiftManagedCluster) []error
// ValidatePluginTemplate validates external config request
ValidatePluginTemplate(ctx context.Context, template *plugin.Config) []error
// GenerateConfig ensures all the necessary in-cluster config is generated
// for an Openshift cluster.
GenerateConfig(ctx context.Context, cs *OpenShiftManagedCluster, template *plugin.Config) error
// CreateOrUpdate either deploys or runs the update depending on the isUpdate argument
// this will call the deployer.
CreateOrUpdate(ctx context.Context, cs *OpenShiftManagedCluster, isUpdate bool, deployer DeployFn) *PluginError
GenevaActions
}
Plugin is the main interface to openshift-azure
type PluginConfig ¶
type PluginConfig struct {
TestConfig TestConfig
}
PluginConfig is passed into NewPlugin
type PluginError ¶
type PluginError struct {
Err error
Step PluginStep
}
PluginError error returned by CreateOrUpdate to specify the step that failed.
func (*PluginError) Error ¶
func (pe *PluginError) Error() string
type PluginStep ¶
type PluginStep string
const ( PluginStepDeploy PluginStep = "Deploy" PluginStepInitialize PluginStep = "Initialize" PluginStepInitializeUpdateBlob PluginStep = "InitializeUpdateBlob" PluginStepClientCreation PluginStep = "ClientCreation" PluginStepScaleSetDelete PluginStep = "ScaleSetDelete" PluginStepGenerateARM PluginStep = "GenerateARM" PluginStepWaitForWaitForOpenShiftAPI PluginStep = "WaitForOpenShiftAPI" PluginStepWaitForNodes PluginStep = "WaitForNodes" PluginStepWaitForConsoleHealth PluginStep = "WaitForConsoleHealth" PluginStepWaitForInfraDaemonSets PluginStep = "WaitForInfraDaemonSets" PluginStepWaitForInfraStatefulSets PluginStep = "WaitForInfraStatefulSets" PluginStepWaitForInfraDeployments PluginStep = "WaitForInfraDeployments" PluginStepUpdateMasterAgentPoolHashScaleSet PluginStep = "UpdateMasterAgentPoolHashScaleSet" PluginStepUpdateMasterAgentPoolListVMs PluginStep = "UpdateMasterAgentPoolListVMs" PluginStepUpdateMasterAgentPoolReadBlob PluginStep = "UpdateMasterAgentPoolReadBlob" PluginStepUpdateMasterAgentPoolDrain PluginStep = "UpdateMasterAgentPoolDrain" PluginStepUpdateMasterAgentPoolDeallocate PluginStep = "UpdateMasterAgentPoolDeallocate" PluginStepUpdateMasterAgentPoolUpdateVMs PluginStep = "UpdateMasterAgentPoolUpdateVMs" PluginStepUpdateMasterAgentPoolReimage PluginStep = "UpdateMasterAgentPoolReimage" PluginStepUpdateMasterAgentPoolStart PluginStep = "UpdateMasterAgentPoolStart" PluginStepUpdateMasterAgentPoolWaitForReady PluginStep = "UpdateMasterAgentPoolWaitForReady" PluginStepUpdateMasterAgentPoolUpdateBlob PluginStep = "UpdateMasterAgentPoolUpdateBlob" PluginStepUpdateWorkerAgentPoolHashScaleSet PluginStep = "UpdateWorkerAgentPoolHashScaleSet" PluginStepUpdateWorkerAgentPoolListVMs PluginStep = "UpdateWorkerAgentPoolListVMs" PluginStepUpdateWorkerAgentPoolListScaleSets PluginStep = "UpdateWorkerAgentPoolListScaleSets" PluginStepUpdateWorkerAgentPoolReadBlob PluginStep = "UpdateWorkerAgentPoolReadBlob" PluginStepUpdateWorkerAgentPoolDrain PluginStep = "UpdateWorkerAgentPoolDrain" PluginStepUpdateWorkerAgentPoolCreateScaleSet PluginStep = "UpdateWorkerAgentPoolCreateScaleSet" PluginStepUpdateWorkerAgentPoolUpdateScaleSet PluginStep = "UpdateWorkerAgentPoolUpdateScaleSet" PluginStepUpdateWorkerAgentPoolDeleteScaleSet PluginStep = "UpdateWorkerAgentPoolDeleteScaleSet" PluginStepUpdateWorkerAgentPoolWaitForReady PluginStep = "UpdateWorkerAgentPoolWaitForReady" PluginStepUpdateWorkerAgentPoolUpdateBlob PluginStep = "UpdateWorkerAgentPoolUpdateBlob" PluginStepUpdateWorkerAgentPoolDeleteVM PluginStep = "UpdateWorkerAgentPoolDeleteVM" PluginStepInvalidateClusterSecrets PluginStep = "InvalidateClusterSecrets" PluginStepRegenerateClusterSecrets PluginStep = "RegenerateClusterSecrets" )
type Properties ¶
type Properties struct {
// ProvisioningState (out): current state of the OSA resource.
ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
// OpenShiftVersion (in): OpenShift version to be created/updated, e.g.
// `v3.11`.
OpenShiftVersion string `json:"openShiftVersion,omitempty"`
// PublicHostname (in,optional): Optional user-specified FQDN for OpenShift
// API server. If specified, after OSA cluster creation, user must create a
// PublicHostname CNAME record forwarding to the returned FQDN value.
PublicHostname string `json:"publicHostname,omitempty"`
// FQDN (in): FQDN for OpenShift API server. User-specified FQDN for
// OpenShift API server loadbalancer internal hostname.
FQDN string `json:"fqdn,omitempty"`
// NetworkProfile (in): Configuration for OpenShift networking.
NetworkProfile NetworkProfile `json:"networkProfile,omitempty"`
// RouterProfiles (in,optional/out): Configuration for OpenShift router(s).
RouterProfiles []RouterProfile `json:"routerProfiles,omitempty"`
// AgentPoolProfiles (in): configuration of OpenShift cluster VMs.
AgentPoolProfiles []AgentPoolProfile `json:"agentPoolProfiles,omitempty"`
// AuthProfile (in): configures OpenShift authentication
AuthProfile AuthProfile `json:"authProfile,omitempty"`
ServicePrincipalProfile ServicePrincipalProfile `json:"servicePrincipalProfile,omitempty"`
AzProfile AzProfile `json:"azProfile,omitempty"`
}
Properties represents the cluster definition.
type ProvisioningState ¶
type ProvisioningState string
ProvisioningState represents the current state of the OSA resource.
const ( // Creating means the OSA resource is being created. Creating ProvisioningState = "Creating" // Updating means the existing OSA resource is being updated. Updating ProvisioningState = "Updating" // AdminUpdating means the existing OSA resource is being updated with admin privileges. AdminUpdating ProvisioningState = "AdminUpdating" // Failed means the OSA resource is in failed state. Failed ProvisioningState = "Failed" // Succeeded means the last create/update succeeded. Succeeded ProvisioningState = "Succeeded" // Deleting means the OSA resource is being deleted. Deleting ProvisioningState = "Deleting" // Migrating means the OSA resource is being migrated from one subscription // or resource group to another. Migrating ProvisioningState = "Migrating" // Upgrading means the existing OSA resource is being upgraded. Upgrading ProvisioningState = "Upgrading" )
type ResourcePurchasePlan ¶
type ResourcePurchasePlan struct {
Name *string `json:"name,omitempty"`
Product *string `json:"product,omitempty"`
PromotionCode *string `json:"promotionCode,omitempty"`
Publisher *string `json:"publisher,omitempty"`
}
ResourcePurchasePlan defines the resource plan as required by ARM for billing purposes.
type RouterProfile ¶
type RouterProfile struct {
Name string `json:"name,omitempty"`
// PublicSubdomain (in,optional/out): DNS subdomain for OpenShift router. If
// specified, after OSA cluster creation, user must create a (wildcard)
// *.PublicSubdomain CNAME record forwarding to the returned FQDN value. If
// not specified, OSA will auto-allocate and setup a PublicSubdomain and
// return it. The OpenShift master is configured with the PublicSubdomain
// of the "default" RouterProfile.
PublicSubdomain string `json:"publicSubdomain,omitempty"`
// FQDN (out): Auto-allocated FQDN for the OpenShift router.
FQDN string `json:"fqdn,omitempty"`
}
RouterProfile represents an OpenShift router.
type ServicePrincipalProfile ¶
type ServicePrincipalProfile struct {
ClientID string `json:"clientId,omitempty"`
Secret string `json:"secret,omitempty"`
}
ServicePrincipalProfile contains the client and secret used by the cluster for Azure Resource CRUD.
type TestConfig ¶
TestConfig holds all testing variables. It should be empty in production.
type VMSize ¶
type VMSize string
VMSize represents supported VMSizes
const ( // General purpose VMs StandardD2sV3 VMSize = "Standard_D2s_v3" StandardD4sV3 VMSize = "Standard_D4s_v3" StandardD8sV3 VMSize = "Standard_D8s_v3" StandardD16sV3 VMSize = "Standard_D16s_v3" StandardD32sV3 VMSize = "Standard_D32s_v3" StandardD64sV3 VMSize = "Standard_D64s_v3" StandardDS4V2 VMSize = "Standard_DS4_v2" StandardDS5V2 VMSize = "Standard_DS5_v2" // Compute optimized VMs StandardF8sV2 VMSize = "Standard_F8s_v2" StandardF16sV2 VMSize = "Standard_F16s_v2" StandardF32sV2 VMSize = "Standard_F32s_v2" StandardF64sV2 VMSize = "Standard_F64s_v2" StandardF72sV2 VMSize = "Standard_F72s_v2" StandardF8s VMSize = "Standard_F8s" StandardF16s VMSize = "Standard_F16s" // Memory optimized VMs StandardE4sV3 VMSize = "Standard_E4s_v3" StandardE8sV3 VMSize = "Standard_E8s_v3" StandardE16sV3 VMSize = "Standard_E16s_v3" StandardE20sV3 VMSize = "Standard_E20s_v3" StandardE32sV3 VMSize = "Standard_E32s_v3" StandardE64sV3 VMSize = "Standard_E64s_v3" StandardGS2 VMSize = "Standard_GS2" StandardGS3 VMSize = "Standard_GS3" StandardGS4 VMSize = "Standard_GS4" StandardGS5 VMSize = "Standard_GS5" StandardDS12V2 VMSize = "Standard_DS12_v2" StandardDS13V2 VMSize = "Standard_DS13_v2" StandardDS14V2 VMSize = "Standard_DS14_v2" StandardDS15V2 VMSize = "Standard_DS15_v2" // Storage optimized VMs StandardL4s VMSize = "Standard_L4s" StandardL8s VMSize = "Standard_L8s" StandardL16s VMSize = "Standard_L16s" StandardL32s VMSize = "Standard_L32s" )
VMSizes. Keep in sync with MaxDataDisksPerVM()