// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package storage

import (
	storage "github.com/Azure/azure-service-operator/v2/api/compute/v1api20241101/storage"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/conditions"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/configmaps"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/core"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/secrets"
	"github.com/rotisserie/eris"
	"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
)

// +kubebuilder:rbac:groups=compute.azure.com,resources=virtualmachinescalesets,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=compute.azure.com,resources={virtualmachinescalesets/status,virtualmachinescalesets/finalizers},verbs=get;update;patch

// +kubebuilder:object:root=true
// +kubebuilder:resource:categories={azure,compute}
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
// +kubebuilder:printcolumn:name="Severity",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].severity"
// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].reason"
// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].message"
// Storage version of v1api20220301.VirtualMachineScaleSet
// Generator information:
// - Generated from: /compute/resource-manager/Microsoft.Compute/ComputeRP/stable/2022-03-01/virtualMachineScaleSet.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}
type VirtualMachineScaleSet struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              VirtualMachineScaleSet_Spec   `json:"spec,omitempty"`
	Status            VirtualMachineScaleSet_STATUS `json:"status,omitempty"`
}

var _ conditions.Conditioner = &VirtualMachineScaleSet{}

// GetConditions returns the conditions of the resource
func (scaleSet *VirtualMachineScaleSet) GetConditions() conditions.Conditions {
	return scaleSet.Status.Conditions
}

// SetConditions sets the conditions on the resource status
func (scaleSet *VirtualMachineScaleSet) SetConditions(conditions conditions.Conditions) {
	scaleSet.Status.Conditions = conditions
}

var _ configmaps.Exporter = &VirtualMachineScaleSet{}

// ConfigMapDestinationExpressions returns the Spec.OperatorSpec.ConfigMapExpressions property
func (scaleSet *VirtualMachineScaleSet) ConfigMapDestinationExpressions() []*core.DestinationExpression {
	if scaleSet.Spec.OperatorSpec == nil {
		return nil
	}
	return scaleSet.Spec.OperatorSpec.ConfigMapExpressions
}

var _ secrets.Exporter = &VirtualMachineScaleSet{}

// SecretDestinationExpressions returns the Spec.OperatorSpec.SecretExpressions property
func (scaleSet *VirtualMachineScaleSet) SecretDestinationExpressions() []*core.DestinationExpression {
	if scaleSet.Spec.OperatorSpec == nil {
		return nil
	}
	return scaleSet.Spec.OperatorSpec.SecretExpressions
}

var _ genruntime.KubernetesResource = &VirtualMachineScaleSet{}

// AzureName returns the Azure name of the resource
func (scaleSet *VirtualMachineScaleSet) AzureName() string {
	return scaleSet.Spec.AzureName
}

// GetAPIVersion returns the ARM API version of the resource. This is always "2022-03-01"
func (scaleSet VirtualMachineScaleSet) GetAPIVersion() string {
	return "2022-03-01"
}

// GetResourceScope returns the scope of the resource
func (scaleSet *VirtualMachineScaleSet) GetResourceScope() genruntime.ResourceScope {
	return genruntime.ResourceScopeResourceGroup
}

// GetSpec returns the specification of this resource
func (scaleSet *VirtualMachineScaleSet) GetSpec() genruntime.ConvertibleSpec {
	return &scaleSet.Spec
}

// GetStatus returns the status of this resource
func (scaleSet *VirtualMachineScaleSet) GetStatus() genruntime.ConvertibleStatus {
	return &scaleSet.Status
}

// GetSupportedOperations returns the operations supported by the resource
func (scaleSet *VirtualMachineScaleSet) GetSupportedOperations() []genruntime.ResourceOperation {
	return []genruntime.ResourceOperation{
		genruntime.ResourceOperationDelete,
		genruntime.ResourceOperationGet,
		genruntime.ResourceOperationPut,
	}
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.Compute/virtualMachineScaleSets"
func (scaleSet *VirtualMachineScaleSet) GetType() string {
	return "Microsoft.Compute/virtualMachineScaleSets"
}

// NewEmptyStatus returns a new empty (blank) status
func (scaleSet *VirtualMachineScaleSet) NewEmptyStatus() genruntime.ConvertibleStatus {
	return &VirtualMachineScaleSet_STATUS{}
}

// Owner returns the ResourceReference of the owner
func (scaleSet *VirtualMachineScaleSet) Owner() *genruntime.ResourceReference {
	if scaleSet.Spec.Owner == nil {
		return nil
	}

	group, kind := genruntime.LookupOwnerGroupKind(scaleSet.Spec)
	return scaleSet.Spec.Owner.AsResourceReference(group, kind)
}

// SetStatus sets the status of this resource
func (scaleSet *VirtualMachineScaleSet) SetStatus(status genruntime.ConvertibleStatus) error {
	// If we have exactly the right type of status, assign it
	if st, ok := status.(*VirtualMachineScaleSet_STATUS); ok {
		scaleSet.Status = *st
		return nil
	}

	// Convert status to required version
	var st VirtualMachineScaleSet_STATUS
	err := status.ConvertStatusTo(&st)
	if err != nil {
		return eris.Wrap(err, "failed to convert status")
	}

	scaleSet.Status = st
	return nil
}

// Hub marks that this VirtualMachineScaleSet is the hub type for conversion
func (scaleSet *VirtualMachineScaleSet) Hub() {}

// OriginalGVK returns a GroupValueKind for the original API version used to create the resource
func (scaleSet *VirtualMachineScaleSet) OriginalGVK() *schema.GroupVersionKind {
	return &schema.GroupVersionKind{
		Group:   GroupVersion.Group,
		Version: scaleSet.Spec.OriginalVersion,
		Kind:    "VirtualMachineScaleSet",
	}
}

// +kubebuilder:object:root=true
// Storage version of v1api20220301.VirtualMachineScaleSet
// Generator information:
// - Generated from: /compute/resource-manager/Microsoft.Compute/ComputeRP/stable/2022-03-01/virtualMachineScaleSet.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}
type VirtualMachineScaleSetList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []VirtualMachineScaleSet `json:"items"`
}

// Storage version of v1api20220301.VirtualMachineScaleSet_Spec
type VirtualMachineScaleSet_Spec struct {
	AdditionalCapabilities *AdditionalCapabilities `json:"additionalCapabilities,omitempty"`
	AutomaticRepairsPolicy *AutomaticRepairsPolicy `json:"automaticRepairsPolicy,omitempty"`

	// AzureName: The name of the resource in Azure. This is often the same as the name of the resource in Kubernetes but it
	// doesn't have to be.
	AzureName                              string                              `json:"azureName,omitempty"`
	DoNotRunExtensionsOnOverprovisionedVMs *bool                               `json:"doNotRunExtensionsOnOverprovisionedVMs,omitempty"`
	ExtendedLocation                       *ExtendedLocation                   `json:"extendedLocation,omitempty"`
	HostGroup                              *SubResource                        `json:"hostGroup,omitempty"`
	Identity                               *VirtualMachineScaleSetIdentity     `json:"identity,omitempty"`
	Location                               *string                             `json:"location,omitempty"`
	OperatorSpec                           *VirtualMachineScaleSetOperatorSpec `json:"operatorSpec,omitempty"`
	OrchestrationMode                      *string                             `json:"orchestrationMode,omitempty"`
	OriginalVersion                        string                              `json:"originalVersion,omitempty"`
	Overprovision                          *bool                               `json:"overprovision,omitempty"`

	// +kubebuilder:validation:Required
	// Owner: The owner of the resource. The owner controls where the resource goes when it is deployed. The owner also
	// controls the resources lifecycle. When the owner is deleted the resource will also be deleted. Owner is expected to be a
	// reference to a resources.azure.com/ResourceGroup resource
	Owner                    *genruntime.KnownResourceReference `group:"resources.azure.com" json:"owner,omitempty" kind:"ResourceGroup"`
	Plan                     *Plan                              `json:"plan,omitempty"`
	PlatformFaultDomainCount *int                               `json:"platformFaultDomainCount,omitempty"`
	PropertyBag              genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
	ProximityPlacementGroup  *SubResource                       `json:"proximityPlacementGroup,omitempty"`
	ScaleInPolicy            *ScaleInPolicy                     `json:"scaleInPolicy,omitempty"`
	SinglePlacementGroup     *bool                              `json:"singlePlacementGroup,omitempty"`
	Sku                      *Sku                               `json:"sku,omitempty"`
	SpotRestorePolicy        *SpotRestorePolicy                 `json:"spotRestorePolicy,omitempty"`
	Tags                     map[string]string                  `json:"tags,omitempty"`
	UpgradePolicy            *UpgradePolicy                     `json:"upgradePolicy,omitempty"`
	VirtualMachineProfile    *VirtualMachineScaleSetVMProfile   `json:"virtualMachineProfile,omitempty"`
	ZoneBalance              *bool                              `json:"zoneBalance,omitempty"`
	Zones                    []string                           `json:"zones,omitempty"`
}

var _ genruntime.ConvertibleSpec = &VirtualMachineScaleSet_Spec{}

// ConvertSpecFrom populates our VirtualMachineScaleSet_Spec from the provided source
func (scaleSet *VirtualMachineScaleSet_Spec) ConvertSpecFrom(source genruntime.ConvertibleSpec) error {
	if source == scaleSet {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return source.ConvertSpecTo(scaleSet)
}

// ConvertSpecTo populates the provided destination from our VirtualMachineScaleSet_Spec
func (scaleSet *VirtualMachineScaleSet_Spec) ConvertSpecTo(destination genruntime.ConvertibleSpec) error {
	if destination == scaleSet {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return destination.ConvertSpecFrom(scaleSet)
}

// Storage version of v1api20220301.VirtualMachineScaleSet_STATUS
// Describes a Virtual Machine Scale Set.
type VirtualMachineScaleSet_STATUS struct {
	AdditionalCapabilities                 *AdditionalCapabilities_STATUS          `json:"additionalCapabilities,omitempty"`
	AutomaticRepairsPolicy                 *AutomaticRepairsPolicy_STATUS          `json:"automaticRepairsPolicy,omitempty"`
	Conditions                             []conditions.Condition                  `json:"conditions,omitempty"`
	DoNotRunExtensionsOnOverprovisionedVMs *bool                                   `json:"doNotRunExtensionsOnOverprovisionedVMs,omitempty"`
	ExtendedLocation                       *ExtendedLocation_STATUS                `json:"extendedLocation,omitempty"`
	HostGroup                              *SubResource_STATUS                     `json:"hostGroup,omitempty"`
	Id                                     *string                                 `json:"id,omitempty"`
	Identity                               *VirtualMachineScaleSetIdentity_STATUS  `json:"identity,omitempty"`
	Location                               *string                                 `json:"location,omitempty"`
	Name                                   *string                                 `json:"name,omitempty"`
	OrchestrationMode                      *string                                 `json:"orchestrationMode,omitempty"`
	Overprovision                          *bool                                   `json:"overprovision,omitempty"`
	Plan                                   *Plan_STATUS                            `json:"plan,omitempty"`
	PlatformFaultDomainCount               *int                                    `json:"platformFaultDomainCount,omitempty"`
	PropertyBag                            genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
	ProvisioningState                      *string                                 `json:"provisioningState,omitempty"`
	ProximityPlacementGroup                *SubResource_STATUS                     `json:"proximityPlacementGroup,omitempty"`
	ScaleInPolicy                          *ScaleInPolicy_STATUS                   `json:"scaleInPolicy,omitempty"`
	SinglePlacementGroup                   *bool                                   `json:"singlePlacementGroup,omitempty"`
	Sku                                    *Sku_STATUS                             `json:"sku,omitempty"`
	SpotRestorePolicy                      *SpotRestorePolicy_STATUS               `json:"spotRestorePolicy,omitempty"`
	Tags                                   map[string]string                       `json:"tags,omitempty"`
	TimeCreated                            *string                                 `json:"timeCreated,omitempty"`
	Type                                   *string                                 `json:"type,omitempty"`
	UniqueId                               *string                                 `json:"uniqueId,omitempty"`
	UpgradePolicy                          *UpgradePolicy_STATUS                   `json:"upgradePolicy,omitempty"`
	VirtualMachineProfile                  *VirtualMachineScaleSetVMProfile_STATUS `json:"virtualMachineProfile,omitempty"`
	ZoneBalance                            *bool                                   `json:"zoneBalance,omitempty"`
	Zones                                  []string                                `json:"zones,omitempty"`
}

var _ genruntime.ConvertibleStatus = &VirtualMachineScaleSet_STATUS{}

// ConvertStatusFrom populates our VirtualMachineScaleSet_STATUS from the provided source
func (scaleSet *VirtualMachineScaleSet_STATUS) ConvertStatusFrom(source genruntime.ConvertibleStatus) error {
	if source == scaleSet {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return source.ConvertStatusTo(scaleSet)
}

// ConvertStatusTo populates the provided destination from our VirtualMachineScaleSet_STATUS
func (scaleSet *VirtualMachineScaleSet_STATUS) ConvertStatusTo(destination genruntime.ConvertibleStatus) error {
	if destination == scaleSet {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return destination.ConvertStatusFrom(scaleSet)
}

// Storage version of v1api20220301.AutomaticRepairsPolicy
// Specifies the configuration parameters for automatic repairs on the virtual machine scale set.
type AutomaticRepairsPolicy struct {
	Enabled      *bool                  `json:"enabled,omitempty"`
	GracePeriod  *string                `json:"gracePeriod,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RepairAction *string                `json:"repairAction,omitempty"`
}

// Storage version of v1api20220301.AutomaticRepairsPolicy_STATUS
// Specifies the configuration parameters for automatic repairs on the virtual machine scale set.
type AutomaticRepairsPolicy_STATUS struct {
	Enabled      *bool                  `json:"enabled,omitempty"`
	GracePeriod  *string                `json:"gracePeriod,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RepairAction *string                `json:"repairAction,omitempty"`
}

// Storage version of v1api20220301.ScaleInPolicy
// Describes a scale-in policy for a virtual machine scale set.
type ScaleInPolicy struct {
	ForceDeletion *bool                  `json:"forceDeletion,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Rules         []string               `json:"rules,omitempty"`
}

// Storage version of v1api20220301.ScaleInPolicy_STATUS
// Describes a scale-in policy for a virtual machine scale set.
type ScaleInPolicy_STATUS struct {
	ForceDeletion *bool                  `json:"forceDeletion,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Rules         []string               `json:"rules,omitempty"`
}

// Storage version of v1api20220301.Sku
// Describes a virtual machine scale set sku. NOTE: If the new VM SKU is not supported on the hardware the scale set is
// currently on, you need to deallocate the VMs in the scale set before you modify the SKU name.
type Sku struct {
	Capacity    *int                   `json:"capacity,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tier        *string                `json:"tier,omitempty"`
}

// AssignProperties_From_Sku populates our Sku from the provided source Sku
func (sku *Sku) AssignProperties_From_Sku(source *storage.Sku) error {
	// Clone the existing property bag
	propertyBag := genruntime.NewPropertyBag(source.PropertyBag)

	// Capacity
	sku.Capacity = genruntime.ClonePointerToInt(source.Capacity)

	// Name
	sku.Name = genruntime.ClonePointerToString(source.Name)

	// Tier
	sku.Tier = genruntime.ClonePointerToString(source.Tier)

	// Update the property bag
	if len(propertyBag) > 0 {
		sku.PropertyBag = propertyBag
	} else {
		sku.PropertyBag = nil
	}

	// Invoke the augmentConversionForSku interface (if implemented) to customize the conversion
	var skuAsAny any = sku
	if augmentedSku, ok := skuAsAny.(augmentConversionForSku); ok {
		err := augmentedSku.AssignPropertiesFrom(source)
		if err != nil {
			return eris.Wrap(err, "calling augmented AssignPropertiesFrom() for conversion")
		}
	}

	// No error
	return nil
}

// AssignProperties_To_Sku populates the provided destination Sku from our Sku
func (sku *Sku) AssignProperties_To_Sku(destination *storage.Sku) error {
	// Clone the existing property bag
	propertyBag := genruntime.NewPropertyBag(sku.PropertyBag)

	// Capacity
	destination.Capacity = genruntime.ClonePointerToInt(sku.Capacity)

	// Name
	destination.Name = genruntime.ClonePointerToString(sku.Name)

	// Tier
	destination.Tier = genruntime.ClonePointerToString(sku.Tier)

	// Update the property bag
	if len(propertyBag) > 0 {
		destination.PropertyBag = propertyBag
	} else {
		destination.PropertyBag = nil
	}

	// Invoke the augmentConversionForSku interface (if implemented) to customize the conversion
	var skuAsAny any = sku
	if augmentedSku, ok := skuAsAny.(augmentConversionForSku); ok {
		err := augmentedSku.AssignPropertiesTo(destination)
		if err != nil {
			return eris.Wrap(err, "calling augmented AssignPropertiesTo() for conversion")
		}
	}

	// No error
	return nil
}

// Storage version of v1api20220301.Sku_STATUS
// Describes a virtual machine scale set sku. NOTE: If the new VM SKU is not supported on the hardware the scale set is
// currently on, you need to deallocate the VMs in the scale set before you modify the SKU name.
type Sku_STATUS struct {
	Capacity    *int                   `json:"capacity,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tier        *string                `json:"tier,omitempty"`
}

// AssignProperties_From_Sku_STATUS populates our Sku_STATUS from the provided source Sku_STATUS
func (sku *Sku_STATUS) AssignProperties_From_Sku_STATUS(source *storage.Sku_STATUS) error {
	// Clone the existing property bag
	propertyBag := genruntime.NewPropertyBag(source.PropertyBag)

	// Capacity
	sku.Capacity = genruntime.ClonePointerToInt(source.Capacity)

	// Name
	sku.Name = genruntime.ClonePointerToString(source.Name)

	// Tier
	sku.Tier = genruntime.ClonePointerToString(source.Tier)

	// Update the property bag
	if len(propertyBag) > 0 {
		sku.PropertyBag = propertyBag
	} else {
		sku.PropertyBag = nil
	}

	// Invoke the augmentConversionForSku_STATUS interface (if implemented) to customize the conversion
	var skuAsAny any = sku
	if augmentedSku, ok := skuAsAny.(augmentConversionForSku_STATUS); ok {
		err := augmentedSku.AssignPropertiesFrom(source)
		if err != nil {
			return eris.Wrap(err, "calling augmented AssignPropertiesFrom() for conversion")
		}
	}

	// No error
	return nil
}

// AssignProperties_To_Sku_STATUS populates the provided destination Sku_STATUS from our Sku_STATUS
func (sku *Sku_STATUS) AssignProperties_To_Sku_STATUS(destination *storage.Sku_STATUS) error {
	// Clone the existing property bag
	propertyBag := genruntime.NewPropertyBag(sku.PropertyBag)

	// Capacity
	destination.Capacity = genruntime.ClonePointerToInt(sku.Capacity)

	// Name
	destination.Name = genruntime.ClonePointerToString(sku.Name)

	// Tier
	destination.Tier = genruntime.ClonePointerToString(sku.Tier)

	// Update the property bag
	if len(propertyBag) > 0 {
		destination.PropertyBag = propertyBag
	} else {
		destination.PropertyBag = nil
	}

	// Invoke the augmentConversionForSku_STATUS interface (if implemented) to customize the conversion
	var skuAsAny any = sku
	if augmentedSku, ok := skuAsAny.(augmentConversionForSku_STATUS); ok {
		err := augmentedSku.AssignPropertiesTo(destination)
		if err != nil {
			return eris.Wrap(err, "calling augmented AssignPropertiesTo() for conversion")
		}
	}

	// No error
	return nil
}

// Storage version of v1api20220301.SpotRestorePolicy
// Specifies the Spot-Try-Restore properties for the virtual machine scale set.
// With this property customer can
// enable or disable automatic restore of the evicted Spot VMSS VM instances opportunistically based on capacity
// availability and pricing constraint.
type SpotRestorePolicy struct {
	Enabled        *bool                  `json:"enabled,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RestoreTimeout *string                `json:"restoreTimeout,omitempty"`
}

// Storage version of v1api20220301.SpotRestorePolicy_STATUS
// Specifies the Spot-Try-Restore properties for the virtual machine scale set.
// With this property customer can
// enable or disable automatic restore of the evicted Spot VMSS VM instances opportunistically based on capacity
// availability and pricing constraint.
type SpotRestorePolicy_STATUS struct {
	Enabled        *bool                  `json:"enabled,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RestoreTimeout *string                `json:"restoreTimeout,omitempty"`
}

// Storage version of v1api20220301.UpgradePolicy
// Describes an upgrade policy - automatic, manual, or rolling.
type UpgradePolicy struct {
	AutomaticOSUpgradePolicy *AutomaticOSUpgradePolicy `json:"automaticOSUpgradePolicy,omitempty"`
	Mode                     *string                   `json:"mode,omitempty"`
	PropertyBag              genruntime.PropertyBag    `json:"$propertyBag,omitempty"`
	RollingUpgradePolicy     *RollingUpgradePolicy     `json:"rollingUpgradePolicy,omitempty"`
}

// Storage version of v1api20220301.UpgradePolicy_STATUS
// Describes an upgrade policy - automatic, manual, or rolling.
type UpgradePolicy_STATUS struct {
	AutomaticOSUpgradePolicy *AutomaticOSUpgradePolicy_STATUS `json:"automaticOSUpgradePolicy,omitempty"`
	Mode                     *string                          `json:"mode,omitempty"`
	PropertyBag              genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
	RollingUpgradePolicy     *RollingUpgradePolicy_STATUS     `json:"rollingUpgradePolicy,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIdentity
// Identity for the virtual machine scale set.
type VirtualMachineScaleSetIdentity struct {
	PropertyBag            genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	Type                   *string                       `json:"type,omitempty"`
	UserAssignedIdentities []UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIdentity_STATUS
// Identity for the virtual machine scale set.
type VirtualMachineScaleSetIdentity_STATUS struct {
	PrincipalId            *string                                                                 `json:"principalId,omitempty"`
	PropertyBag            genruntime.PropertyBag                                                  `json:"$propertyBag,omitempty"`
	TenantId               *string                                                                 `json:"tenantId,omitempty"`
	Type                   *string                                                                 `json:"type,omitempty"`
	UserAssignedIdentities map[string]VirtualMachineScaleSetIdentity_UserAssignedIdentities_STATUS `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetOperatorSpec
// Details for configuring operator behavior. Fields in this struct are interpreted by the operator directly rather than being passed to Azure
type VirtualMachineScaleSetOperatorSpec struct {
	ConfigMapExpressions []*core.DestinationExpression `json:"configMapExpressions,omitempty"`
	PropertyBag          genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	SecretExpressions    []*core.DestinationExpression `json:"secretExpressions,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetVMProfile
// Describes a virtual machine scale set virtual machine profile.
type VirtualMachineScaleSetVMProfile struct {
	ApplicationProfile     *ApplicationProfile                     `json:"applicationProfile,omitempty"`
	BillingProfile         *BillingProfile                         `json:"billingProfile,omitempty"`
	CapacityReservation    *CapacityReservationProfile             `json:"capacityReservation,omitempty"`
	DiagnosticsProfile     *DiagnosticsProfile                     `json:"diagnosticsProfile,omitempty"`
	EvictionPolicy         *string                                 `json:"evictionPolicy,omitempty"`
	ExtensionProfile       *VirtualMachineScaleSetExtensionProfile `json:"extensionProfile,omitempty"`
	HardwareProfile        *VirtualMachineScaleSetHardwareProfile  `json:"hardwareProfile,omitempty"`
	LicenseType            *string                                 `json:"licenseType,omitempty"`
	NetworkProfile         *VirtualMachineScaleSetNetworkProfile   `json:"networkProfile,omitempty"`
	OsProfile              *VirtualMachineScaleSetOSProfile        `json:"osProfile,omitempty"`
	Priority               *string                                 `json:"priority,omitempty"`
	PropertyBag            genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
	ScheduledEventsProfile *ScheduledEventsProfile                 `json:"scheduledEventsProfile,omitempty"`
	SecurityProfile        *SecurityProfile                        `json:"securityProfile,omitempty"`
	StorageProfile         *VirtualMachineScaleSetStorageProfile   `json:"storageProfile,omitempty"`
	UserData               *string                                 `json:"userData,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetVMProfile_STATUS
// Describes a virtual machine scale set virtual machine profile.
type VirtualMachineScaleSetVMProfile_STATUS struct {
	ApplicationProfile     *ApplicationProfile_STATUS                     `json:"applicationProfile,omitempty"`
	BillingProfile         *BillingProfile_STATUS                         `json:"billingProfile,omitempty"`
	CapacityReservation    *CapacityReservationProfile_STATUS             `json:"capacityReservation,omitempty"`
	DiagnosticsProfile     *DiagnosticsProfile_STATUS                     `json:"diagnosticsProfile,omitempty"`
	EvictionPolicy         *string                                        `json:"evictionPolicy,omitempty"`
	ExtensionProfile       *VirtualMachineScaleSetExtensionProfile_STATUS `json:"extensionProfile,omitempty"`
	HardwareProfile        *VirtualMachineScaleSetHardwareProfile_STATUS  `json:"hardwareProfile,omitempty"`
	LicenseType            *string                                        `json:"licenseType,omitempty"`
	NetworkProfile         *VirtualMachineScaleSetNetworkProfile_STATUS   `json:"networkProfile,omitempty"`
	OsProfile              *VirtualMachineScaleSetOSProfile_STATUS        `json:"osProfile,omitempty"`
	Priority               *string                                        `json:"priority,omitempty"`
	PropertyBag            genruntime.PropertyBag                         `json:"$propertyBag,omitempty"`
	ScheduledEventsProfile *ScheduledEventsProfile_STATUS                 `json:"scheduledEventsProfile,omitempty"`
	SecurityProfile        *SecurityProfile_STATUS                        `json:"securityProfile,omitempty"`
	StorageProfile         *VirtualMachineScaleSetStorageProfile_STATUS   `json:"storageProfile,omitempty"`
	UserData               *string                                        `json:"userData,omitempty"`
}

type augmentConversionForSku interface {
	AssignPropertiesFrom(src *storage.Sku) error
	AssignPropertiesTo(dst *storage.Sku) error
}

type augmentConversionForSku_STATUS interface {
	AssignPropertiesFrom(src *storage.Sku_STATUS) error
	AssignPropertiesTo(dst *storage.Sku_STATUS) error
}

// Storage version of v1api20220301.AutomaticOSUpgradePolicy
// The configuration parameters used for performing automatic OS upgrade.
type AutomaticOSUpgradePolicy struct {
	DisableAutomaticRollback *bool                  `json:"disableAutomaticRollback,omitempty"`
	EnableAutomaticOSUpgrade *bool                  `json:"enableAutomaticOSUpgrade,omitempty"`
	PropertyBag              genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	UseRollingUpgradePolicy  *bool                  `json:"useRollingUpgradePolicy,omitempty"`
}

// Storage version of v1api20220301.AutomaticOSUpgradePolicy_STATUS
// The configuration parameters used for performing automatic OS upgrade.
type AutomaticOSUpgradePolicy_STATUS struct {
	DisableAutomaticRollback *bool                  `json:"disableAutomaticRollback,omitempty"`
	EnableAutomaticOSUpgrade *bool                  `json:"enableAutomaticOSUpgrade,omitempty"`
	PropertyBag              genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	UseRollingUpgradePolicy  *bool                  `json:"useRollingUpgradePolicy,omitempty"`
}

// Storage version of v1api20220301.RollingUpgradePolicy
// The configuration parameters used while performing a rolling upgrade.
type RollingUpgradePolicy struct {
	EnableCrossZoneUpgrade              *bool                  `json:"enableCrossZoneUpgrade,omitempty"`
	MaxBatchInstancePercent             *int                   `json:"maxBatchInstancePercent,omitempty"`
	MaxUnhealthyInstancePercent         *int                   `json:"maxUnhealthyInstancePercent,omitempty"`
	MaxUnhealthyUpgradedInstancePercent *int                   `json:"maxUnhealthyUpgradedInstancePercent,omitempty"`
	PauseTimeBetweenBatches             *string                `json:"pauseTimeBetweenBatches,omitempty"`
	PrioritizeUnhealthyInstances        *bool                  `json:"prioritizeUnhealthyInstances,omitempty"`
	PropertyBag                         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.RollingUpgradePolicy_STATUS
// The configuration parameters used while performing a rolling upgrade.
type RollingUpgradePolicy_STATUS struct {
	EnableCrossZoneUpgrade              *bool                  `json:"enableCrossZoneUpgrade,omitempty"`
	MaxBatchInstancePercent             *int                   `json:"maxBatchInstancePercent,omitempty"`
	MaxUnhealthyInstancePercent         *int                   `json:"maxUnhealthyInstancePercent,omitempty"`
	MaxUnhealthyUpgradedInstancePercent *int                   `json:"maxUnhealthyUpgradedInstancePercent,omitempty"`
	PauseTimeBetweenBatches             *string                `json:"pauseTimeBetweenBatches,omitempty"`
	PrioritizeUnhealthyInstances        *bool                  `json:"prioritizeUnhealthyInstances,omitempty"`
	PropertyBag                         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetExtensionProfile
// Describes a virtual machine scale set extension profile.
type VirtualMachineScaleSetExtensionProfile struct {
	Extensions           []VirtualMachineScaleSetExtension `json:"extensions,omitempty"`
	ExtensionsTimeBudget *string                           `json:"extensionsTimeBudget,omitempty"`
	PropertyBag          genruntime.PropertyBag            `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetExtensionProfile_STATUS
// Describes a virtual machine scale set extension profile.
type VirtualMachineScaleSetExtensionProfile_STATUS struct {
	Extensions           []VirtualMachineScaleSetExtension_STATUS `json:"extensions,omitempty"`
	ExtensionsTimeBudget *string                                  `json:"extensionsTimeBudget,omitempty"`
	PropertyBag          genruntime.PropertyBag                   `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetHardwareProfile
// Specifies the hardware settings for the virtual machine scale set.
type VirtualMachineScaleSetHardwareProfile struct {
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	VmSizeProperties *VMSizeProperties      `json:"vmSizeProperties,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetHardwareProfile_STATUS
// Specifies the hardware settings for the virtual machine scale set.
type VirtualMachineScaleSetHardwareProfile_STATUS struct {
	PropertyBag      genruntime.PropertyBag   `json:"$propertyBag,omitempty"`
	VmSizeProperties *VMSizeProperties_STATUS `json:"vmSizeProperties,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIdentity_UserAssignedIdentities_STATUS
type VirtualMachineScaleSetIdentity_UserAssignedIdentities_STATUS struct {
	ClientId    *string                `json:"clientId,omitempty"`
	PrincipalId *string                `json:"principalId,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetNetworkProfile
// Describes a virtual machine scale set network profile.
type VirtualMachineScaleSetNetworkProfile struct {
	HealthProbe                    *ApiEntityReference                          `json:"healthProbe,omitempty"`
	NetworkApiVersion              *string                                      `json:"networkApiVersion,omitempty"`
	NetworkInterfaceConfigurations []VirtualMachineScaleSetNetworkConfiguration `json:"networkInterfaceConfigurations,omitempty"`
	PropertyBag                    genruntime.PropertyBag                       `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetNetworkProfile_STATUS
// Describes a virtual machine scale set network profile.
type VirtualMachineScaleSetNetworkProfile_STATUS struct {
	HealthProbe                    *ApiEntityReference_STATUS                          `json:"healthProbe,omitempty"`
	NetworkApiVersion              *string                                             `json:"networkApiVersion,omitempty"`
	NetworkInterfaceConfigurations []VirtualMachineScaleSetNetworkConfiguration_STATUS `json:"networkInterfaceConfigurations,omitempty"`
	PropertyBag                    genruntime.PropertyBag                              `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetOSProfile
// Describes a virtual machine scale set OS profile.
type VirtualMachineScaleSetOSProfile struct {
	AdminPassword            *genruntime.SecretReference `json:"adminPassword,omitempty"`
	AdminUsername            *string                     `json:"adminUsername,omitempty"`
	AllowExtensionOperations *bool                       `json:"allowExtensionOperations,omitempty"`
	ComputerNamePrefix       *string                     `json:"computerNamePrefix,omitempty"`
	CustomData               *string                     `json:"customData,omitempty"`
	LinuxConfiguration       *LinuxConfiguration         `json:"linuxConfiguration,omitempty"`
	PropertyBag              genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
	Secrets                  []VaultSecretGroup          `json:"secrets,omitempty"`
	WindowsConfiguration     *WindowsConfiguration       `json:"windowsConfiguration,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetOSProfile_STATUS
// Describes a virtual machine scale set OS profile.
type VirtualMachineScaleSetOSProfile_STATUS struct {
	AdminUsername            *string                      `json:"adminUsername,omitempty"`
	AllowExtensionOperations *bool                        `json:"allowExtensionOperations,omitempty"`
	ComputerNamePrefix       *string                      `json:"computerNamePrefix,omitempty"`
	CustomData               *string                      `json:"customData,omitempty"`
	LinuxConfiguration       *LinuxConfiguration_STATUS   `json:"linuxConfiguration,omitempty"`
	PropertyBag              genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
	Secrets                  []VaultSecretGroup_STATUS    `json:"secrets,omitempty"`
	WindowsConfiguration     *WindowsConfiguration_STATUS `json:"windowsConfiguration,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetStorageProfile
// Describes a virtual machine scale set storage profile.
type VirtualMachineScaleSetStorageProfile struct {
	DataDisks      []VirtualMachineScaleSetDataDisk `json:"dataDisks,omitempty"`
	ImageReference *ImageReference                  `json:"imageReference,omitempty"`
	OsDisk         *VirtualMachineScaleSetOSDisk    `json:"osDisk,omitempty"`
	PropertyBag    genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetStorageProfile_STATUS
// Describes a virtual machine scale set storage profile.
type VirtualMachineScaleSetStorageProfile_STATUS struct {
	DataDisks      []VirtualMachineScaleSetDataDisk_STATUS `json:"dataDisks,omitempty"`
	ImageReference *ImageReference_STATUS                  `json:"imageReference,omitempty"`
	OsDisk         *VirtualMachineScaleSetOSDisk_STATUS    `json:"osDisk,omitempty"`
	PropertyBag    genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.ApiEntityReference
// The API entity reference.
type ApiEntityReference struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// Reference: The ARM resource id in the form of /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/...
	Reference *genruntime.ResourceReference `armReference:"Id" json:"reference,omitempty"`
}

// Storage version of v1api20220301.ApiEntityReference_STATUS
// The API entity reference.
type ApiEntityReference_STATUS struct {
	Id          *string                `json:"id,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetDataDisk
// Describes a virtual machine scale set data disk.
type VirtualMachineScaleSetDataDisk struct {
	Caching                 *string                                      `json:"caching,omitempty"`
	CreateOption            *string                                      `json:"createOption,omitempty"`
	DeleteOption            *string                                      `json:"deleteOption,omitempty"`
	DiskIOPSReadWrite       *int                                         `json:"diskIOPSReadWrite,omitempty"`
	DiskMBpsReadWrite       *int                                         `json:"diskMBpsReadWrite,omitempty"`
	DiskSizeGB              *int                                         `json:"diskSizeGB,omitempty"`
	Lun                     *int                                         `json:"lun,omitempty"`
	ManagedDisk             *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"`
	Name                    *string                                      `json:"name,omitempty"`
	PropertyBag             genruntime.PropertyBag                       `json:"$propertyBag,omitempty"`
	WriteAcceleratorEnabled *bool                                        `json:"writeAcceleratorEnabled,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetDataDisk_STATUS
// Describes a virtual machine scale set data disk.
type VirtualMachineScaleSetDataDisk_STATUS struct {
	Caching                 *string                                             `json:"caching,omitempty"`
	CreateOption            *string                                             `json:"createOption,omitempty"`
	DeleteOption            *string                                             `json:"deleteOption,omitempty"`
	DiskIOPSReadWrite       *int                                                `json:"diskIOPSReadWrite,omitempty"`
	DiskMBpsReadWrite       *int                                                `json:"diskMBpsReadWrite,omitempty"`
	DiskSizeGB              *int                                                `json:"diskSizeGB,omitempty"`
	Lun                     *int                                                `json:"lun,omitempty"`
	ManagedDisk             *VirtualMachineScaleSetManagedDiskParameters_STATUS `json:"managedDisk,omitempty"`
	Name                    *string                                             `json:"name,omitempty"`
	PropertyBag             genruntime.PropertyBag                              `json:"$propertyBag,omitempty"`
	WriteAcceleratorEnabled *bool                                               `json:"writeAcceleratorEnabled,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetExtension
// Describes a Virtual Machine Scale Set Extension.
type VirtualMachineScaleSetExtension struct {
	AutoUpgradeMinorVersion       *bool                          `json:"autoUpgradeMinorVersion,omitempty"`
	EnableAutomaticUpgrade        *bool                          `json:"enableAutomaticUpgrade,omitempty"`
	ForceUpdateTag                *string                        `json:"forceUpdateTag,omitempty"`
	Name                          *string                        `json:"name,omitempty"`
	PropertyBag                   genruntime.PropertyBag         `json:"$propertyBag,omitempty"`
	ProtectedSettings             *genruntime.SecretMapReference `json:"protectedSettings,omitempty"`
	ProtectedSettingsFromKeyVault *KeyVaultSecretReference       `json:"protectedSettingsFromKeyVault,omitempty"`
	ProvisionAfterExtensions      []string                       `json:"provisionAfterExtensions,omitempty"`
	Publisher                     *string                        `json:"publisher,omitempty"`
	Settings                      map[string]v1.JSON             `json:"settings,omitempty"`
	SuppressFailures              *bool                          `json:"suppressFailures,omitempty"`
	Type                          *string                        `json:"type,omitempty"`
	TypeHandlerVersion            *string                        `json:"typeHandlerVersion,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetExtension_STATUS
// Describes a Virtual Machine Scale Set Extension.
type VirtualMachineScaleSetExtension_STATUS struct {
	AutoUpgradeMinorVersion       *bool                           `json:"autoUpgradeMinorVersion,omitempty"`
	EnableAutomaticUpgrade        *bool                           `json:"enableAutomaticUpgrade,omitempty"`
	ForceUpdateTag                *string                         `json:"forceUpdateTag,omitempty"`
	Id                            *string                         `json:"id,omitempty"`
	Name                          *string                         `json:"name,omitempty"`
	PropertiesType                *string                         `json:"properties_type,omitempty"`
	PropertyBag                   genruntime.PropertyBag          `json:"$propertyBag,omitempty"`
	ProtectedSettingsFromKeyVault *KeyVaultSecretReference_STATUS `json:"protectedSettingsFromKeyVault,omitempty"`
	ProvisionAfterExtensions      []string                        `json:"provisionAfterExtensions,omitempty"`
	ProvisioningState             *string                         `json:"provisioningState,omitempty"`
	Publisher                     *string                         `json:"publisher,omitempty"`
	Settings                      map[string]v1.JSON              `json:"settings,omitempty"`
	SuppressFailures              *bool                           `json:"suppressFailures,omitempty"`
	Type                          *string                         `json:"type,omitempty"`
	TypeHandlerVersion            *string                         `json:"typeHandlerVersion,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetNetworkConfiguration
// Describes a virtual machine scale set network profile's network configurations.
type VirtualMachineScaleSetNetworkConfiguration struct {
	DeleteOption                *string                                                `json:"deleteOption,omitempty"`
	DnsSettings                 *VirtualMachineScaleSetNetworkConfigurationDnsSettings `json:"dnsSettings,omitempty"`
	EnableAcceleratedNetworking *bool                                                  `json:"enableAcceleratedNetworking,omitempty"`
	EnableFpga                  *bool                                                  `json:"enableFpga,omitempty"`
	EnableIPForwarding          *bool                                                  `json:"enableIPForwarding,omitempty"`
	IpConfigurations            []VirtualMachineScaleSetIPConfiguration                `json:"ipConfigurations,omitempty"`
	Name                        *string                                                `json:"name,omitempty"`
	NetworkSecurityGroup        *SubResource                                           `json:"networkSecurityGroup,omitempty"`
	Primary                     *bool                                                  `json:"primary,omitempty"`
	PropertyBag                 genruntime.PropertyBag                                 `json:"$propertyBag,omitempty"`

	// Reference: Resource Id
	Reference *genruntime.ResourceReference `armReference:"Id" json:"reference,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetNetworkConfiguration_STATUS
// Describes a virtual machine scale set network profile's network configurations.
type VirtualMachineScaleSetNetworkConfiguration_STATUS struct {
	DeleteOption                *string                                                       `json:"deleteOption,omitempty"`
	DnsSettings                 *VirtualMachineScaleSetNetworkConfigurationDnsSettings_STATUS `json:"dnsSettings,omitempty"`
	EnableAcceleratedNetworking *bool                                                         `json:"enableAcceleratedNetworking,omitempty"`
	EnableFpga                  *bool                                                         `json:"enableFpga,omitempty"`
	EnableIPForwarding          *bool                                                         `json:"enableIPForwarding,omitempty"`
	Id                          *string                                                       `json:"id,omitempty"`
	IpConfigurations            []VirtualMachineScaleSetIPConfiguration_STATUS                `json:"ipConfigurations,omitempty"`
	Name                        *string                                                       `json:"name,omitempty"`
	NetworkSecurityGroup        *SubResource_STATUS                                           `json:"networkSecurityGroup,omitempty"`
	Primary                     *bool                                                         `json:"primary,omitempty"`
	PropertyBag                 genruntime.PropertyBag                                        `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetOSDisk
// Describes a virtual machine scale set operating system disk.
type VirtualMachineScaleSetOSDisk struct {
	Caching                 *string                                      `json:"caching,omitempty"`
	CreateOption            *string                                      `json:"createOption,omitempty"`
	DeleteOption            *string                                      `json:"deleteOption,omitempty"`
	DiffDiskSettings        *DiffDiskSettings                            `json:"diffDiskSettings,omitempty"`
	DiskSizeGB              *int                                         `json:"diskSizeGB,omitempty"`
	Image                   *VirtualHardDisk                             `json:"image,omitempty"`
	ManagedDisk             *VirtualMachineScaleSetManagedDiskParameters `json:"managedDisk,omitempty"`
	Name                    *string                                      `json:"name,omitempty"`
	OsType                  *string                                      `json:"osType,omitempty"`
	PropertyBag             genruntime.PropertyBag                       `json:"$propertyBag,omitempty"`
	VhdContainers           []string                                     `json:"vhdContainers,omitempty"`
	WriteAcceleratorEnabled *bool                                        `json:"writeAcceleratorEnabled,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetOSDisk_STATUS
// Describes a virtual machine scale set operating system disk.
type VirtualMachineScaleSetOSDisk_STATUS struct {
	Caching                 *string                                             `json:"caching,omitempty"`
	CreateOption            *string                                             `json:"createOption,omitempty"`
	DeleteOption            *string                                             `json:"deleteOption,omitempty"`
	DiffDiskSettings        *DiffDiskSettings_STATUS                            `json:"diffDiskSettings,omitempty"`
	DiskSizeGB              *int                                                `json:"diskSizeGB,omitempty"`
	Image                   *VirtualHardDisk_STATUS                             `json:"image,omitempty"`
	ManagedDisk             *VirtualMachineScaleSetManagedDiskParameters_STATUS `json:"managedDisk,omitempty"`
	Name                    *string                                             `json:"name,omitempty"`
	OsType                  *string                                             `json:"osType,omitempty"`
	PropertyBag             genruntime.PropertyBag                              `json:"$propertyBag,omitempty"`
	VhdContainers           []string                                            `json:"vhdContainers,omitempty"`
	WriteAcceleratorEnabled *bool                                               `json:"writeAcceleratorEnabled,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIPConfiguration
// Describes a virtual machine scale set network profile's IP configuration.
type VirtualMachineScaleSetIPConfiguration struct {
	ApplicationGatewayBackendAddressPools []SubResource                                       `json:"applicationGatewayBackendAddressPools,omitempty"`
	ApplicationSecurityGroups             []SubResource                                       `json:"applicationSecurityGroups,omitempty"`
	LoadBalancerBackendAddressPools       []SubResource                                       `json:"loadBalancerBackendAddressPools,omitempty"`
	LoadBalancerInboundNatPools           []SubResource                                       `json:"loadBalancerInboundNatPools,omitempty"`
	Name                                  *string                                             `json:"name,omitempty"`
	Primary                               *bool                                               `json:"primary,omitempty"`
	PrivateIPAddressVersion               *string                                             `json:"privateIPAddressVersion,omitempty"`
	PropertyBag                           genruntime.PropertyBag                              `json:"$propertyBag,omitempty"`
	PublicIPAddressConfiguration          *VirtualMachineScaleSetPublicIPAddressConfiguration `json:"publicIPAddressConfiguration,omitempty"`

	// Reference: Resource Id
	Reference *genruntime.ResourceReference `armReference:"Id" json:"reference,omitempty"`
	Subnet    *ApiEntityReference           `json:"subnet,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIPConfiguration_STATUS
// Describes a virtual machine scale set network profile's IP configuration.
type VirtualMachineScaleSetIPConfiguration_STATUS struct {
	ApplicationGatewayBackendAddressPools []SubResource_STATUS                                       `json:"applicationGatewayBackendAddressPools,omitempty"`
	ApplicationSecurityGroups             []SubResource_STATUS                                       `json:"applicationSecurityGroups,omitempty"`
	Id                                    *string                                                    `json:"id,omitempty"`
	LoadBalancerBackendAddressPools       []SubResource_STATUS                                       `json:"loadBalancerBackendAddressPools,omitempty"`
	LoadBalancerInboundNatPools           []SubResource_STATUS                                       `json:"loadBalancerInboundNatPools,omitempty"`
	Name                                  *string                                                    `json:"name,omitempty"`
	Primary                               *bool                                                      `json:"primary,omitempty"`
	PrivateIPAddressVersion               *string                                                    `json:"privateIPAddressVersion,omitempty"`
	PropertyBag                           genruntime.PropertyBag                                     `json:"$propertyBag,omitempty"`
	PublicIPAddressConfiguration          *VirtualMachineScaleSetPublicIPAddressConfiguration_STATUS `json:"publicIPAddressConfiguration,omitempty"`
	Subnet                                *ApiEntityReference_STATUS                                 `json:"subnet,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetManagedDiskParameters
// Describes the parameters of a ScaleSet managed disk.
type VirtualMachineScaleSetManagedDiskParameters struct {
	DiskEncryptionSet  *SubResource           `json:"diskEncryptionSet,omitempty"`
	PropertyBag        genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecurityProfile    *VMDiskSecurityProfile `json:"securityProfile,omitempty"`
	StorageAccountType *string                `json:"storageAccountType,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetManagedDiskParameters_STATUS
// Describes the parameters of a ScaleSet managed disk.
type VirtualMachineScaleSetManagedDiskParameters_STATUS struct {
	DiskEncryptionSet  *SubResource_STATUS           `json:"diskEncryptionSet,omitempty"`
	PropertyBag        genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	SecurityProfile    *VMDiskSecurityProfile_STATUS `json:"securityProfile,omitempty"`
	StorageAccountType *string                       `json:"storageAccountType,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetNetworkConfigurationDnsSettings
// Describes a virtual machines scale sets network configuration's DNS settings.
type VirtualMachineScaleSetNetworkConfigurationDnsSettings struct {
	DnsServers  []string               `json:"dnsServers,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetNetworkConfigurationDnsSettings_STATUS
// Describes a virtual machines scale sets network configuration's DNS settings.
type VirtualMachineScaleSetNetworkConfigurationDnsSettings_STATUS struct {
	DnsServers  []string               `json:"dnsServers,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetPublicIPAddressConfiguration
// Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration
type VirtualMachineScaleSetPublicIPAddressConfiguration struct {
	DeleteOption           *string                                                        `json:"deleteOption,omitempty"`
	DnsSettings            *VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings `json:"dnsSettings,omitempty"`
	IdleTimeoutInMinutes   *int                                                           `json:"idleTimeoutInMinutes,omitempty"`
	IpTags                 []VirtualMachineScaleSetIpTag                                  `json:"ipTags,omitempty"`
	Name                   *string                                                        `json:"name,omitempty"`
	PropertyBag            genruntime.PropertyBag                                         `json:"$propertyBag,omitempty"`
	PublicIPAddressVersion *string                                                        `json:"publicIPAddressVersion,omitempty"`
	PublicIPPrefix         *SubResource                                                   `json:"publicIPPrefix,omitempty"`
	Sku                    *PublicIPAddressSku                                            `json:"sku,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetPublicIPAddressConfiguration_STATUS
// Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration
type VirtualMachineScaleSetPublicIPAddressConfiguration_STATUS struct {
	DeleteOption           *string                                                               `json:"deleteOption,omitempty"`
	DnsSettings            *VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings_STATUS `json:"dnsSettings,omitempty"`
	IdleTimeoutInMinutes   *int                                                                  `json:"idleTimeoutInMinutes,omitempty"`
	IpTags                 []VirtualMachineScaleSetIpTag_STATUS                                  `json:"ipTags,omitempty"`
	Name                   *string                                                               `json:"name,omitempty"`
	PropertyBag            genruntime.PropertyBag                                                `json:"$propertyBag,omitempty"`
	PublicIPAddressVersion *string                                                               `json:"publicIPAddressVersion,omitempty"`
	PublicIPPrefix         *SubResource_STATUS                                                   `json:"publicIPPrefix,omitempty"`
	Sku                    *PublicIPAddressSku_STATUS                                            `json:"sku,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIpTag
// Contains the IP tag associated with the public IP address.
type VirtualMachineScaleSetIpTag struct {
	IpTagType   *string                `json:"ipTagType,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tag         *string                `json:"tag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetIpTag_STATUS
// Contains the IP tag associated with the public IP address.
type VirtualMachineScaleSetIpTag_STATUS struct {
	IpTagType   *string                `json:"ipTagType,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tag         *string                `json:"tag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings
// Describes a virtual machines scale sets network configuration's DNS settings.
type VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings struct {
	DomainNameLabel *string                `json:"domainNameLabel,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20220301.VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings_STATUS
// Describes a virtual machines scale sets network configuration's DNS settings.
type VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings_STATUS struct {
	DomainNameLabel *string                `json:"domainNameLabel,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

func init() {
	SchemeBuilder.Register(&VirtualMachineScaleSet{}, &VirtualMachineScaleSetList{})
}
