// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Code generated by Microsoft (R) Go Code Generator. DO NOT EDIT.

package armcomputefleet

import "time"

// APIEntityReference - The API entity reference.
type APIEntityReference struct {
	// The ARM resource id in the form of
	// /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/...
	ID *string
}

// APIError - ApiError for Fleet
type APIError struct {
	// The error code.
	Code *string

	// The API error details
	Details []*APIErrorBase

	// The API inner error
	Innererror *InnerError

	// The error message.
	Message *string

	// The target of the particular error.
	Target *string
}

// APIErrorBase - API error base.
type APIErrorBase struct {
	// The error code.
	Code *string

	// The error message.
	Message *string

	// The target of the particular error.
	Target *string
}

// AdditionalCapabilities for VM.
type AdditionalCapabilities struct {
	// The flag that enables or disables hibernation capability on the VM.
	HibernationEnabled *bool

	// The flag that enables or disables a capability to have one or more managed data disks with UltraSSD_LRS storage account
	// type on the VM or VMSS.
	// Managed disks with storage account type UltraSSD_LRS can be added to a virtual machine or virtual machine scale set only
	// if this property is enabled.
	UltraSSDEnabled *bool
}

// AdditionalLocationsProfile - Represents the configuration for additional locations where Fleet resources may be deployed.
type AdditionalLocationsProfile struct {
	// REQUIRED; The list of location profiles.
	LocationProfiles []*LocationProfile
}

// AdditionalUnattendContent - Specifies additional XML formatted information that can be included in the
// Unattend.xml file, which is used by Windows Setup. Contents are defined by
// setting name, component name, and the pass in which the content is applied.
type AdditionalUnattendContent struct {
	// FLAG; CONSTANT; The component name. Currently, the only allowable value is
	// Microsoft-Windows-Shell-Setup.
	// Field has constant value "Microsoft-Windows-Shell-Setup", any specified value is ignored.
	ComponentName *string

	// Specifies the XML formatted content that is added to the unattend.xml file for
	// the specified path and component. The XML must be less than 4KB and must
	// include the root element for the setting or feature that is being inserted.
	Content *string

	// FLAG; CONSTANT; The pass name. Currently, the only allowable value is OobeSystem.
	// Field has constant value "OobeSystem", any specified value is ignored.
	PassName *string

	// Specifies the name of the setting to which the content applies. Possible values
	// are: FirstLogonCommands and AutoLogon.
	SettingName *SettingNames
}

// ApplicationProfile - Contains the list of gallery applications that should be made available to the
// VM/VMSS
type ApplicationProfile struct {
	// Specifies the gallery applications that should be made available to the VM/VMSS
	GalleryApplications []*VMGalleryApplication
}

// BaseVirtualMachineProfile - Describes the base virtual machine profile for fleet
type BaseVirtualMachineProfile struct {
	// Specifies the gallery applications that should be made available to the VM/VMSS
	ApplicationProfile *ApplicationProfile

	// Specifies the capacity reservation related details of a scale set. Minimum
	// api-version: 2021-04-01.
	CapacityReservation *CapacityReservationProfile

	// Specifies the boot diagnostic settings state.
	DiagnosticsProfile *DiagnosticsProfile

	// Specifies a collection of settings for extensions installed on virtual machines
	// in the scale set.
	ExtensionProfile *VirtualMachineScaleSetExtensionProfile

	// Specifies the hardware profile related details of a scale set. Minimum
	// api-version: 2021-11-01.
	HardwareProfile *VirtualMachineScaleSetHardwareProfile

	// Specifies that the image or disk that is being used was licensed on-premises.
	// <br><br> Possible values for Windows Server operating system are: <br><br>
	// Windows_Client <br><br> Windows_Server <br><br> Possible values for Linux
	// Server operating system are: <br><br> RHEL_BYOS (for RHEL) <br><br> SLES_BYOS
	// (for SUSE) <br><br> For more information, see [Azure Hybrid Use Benefit for
	// Windows
	// Server](https://learn.microsoft.com/azure/virtual-machines/windows/hybrid-use-benefit-licensing)
	// <br><br> [Azure Hybrid Use Benefit for Linux
	// Server](https://learn.microsoft.com/azure/virtual-machines/linux/azure-hybrid-benefit-linux)
	// <br><br> Minimum api-version: 2015-06-15
	LicenseType *string

	// Specifies properties of the network interfaces of the virtual machines in the
	// scale set.
	NetworkProfile *VirtualMachineScaleSetNetworkProfile

	// Specifies the operating system settings for the virtual machines in the scale
	// set.
	OSProfile *VirtualMachineScaleSetOSProfile

	// Specifies Scheduled Event related configurations.
	ScheduledEventsProfile *ScheduledEventsProfile

	// Specifies the security posture to be used for all virtual machines in the scale
	// set. Minimum api-version: 2023-03-01
	SecurityPostureReference *SecurityPostureReference

	// Specifies the Security related profile settings for the virtual machines in the
	// scale set.
	SecurityProfile *SecurityProfile

	// Specifies the service artifact reference id used to set same image version for
	// all virtual machines in the scale set when using 'latest' image version.
	// Minimum api-version: 2022-11-01
	ServiceArtifactReference *ServiceArtifactReference

	// Specifies the storage settings for the virtual machine disks.
	StorageProfile *VirtualMachineScaleSetStorageProfile

	// UserData for the virtual machines in the scale set, which must be base-64
	// encoded. Customer should not pass any secrets in here. Minimum api-version:
	// 2021-03-01.
	UserData *string

	// READ-ONLY; Specifies the time in which this VM profile for the Virtual Machine Scale Set
	// was created. Minimum API version for this property is 2023-09-01. This value
	// will be added to VMSS Flex VM tags when creating/updating the VMSS VM Profile
	// with minimum api-version 2023-09-01. Examples: "2024-07-01T00:00:01.1234567+00:00"
	TimeCreated *time.Time
}

// BootDiagnostics - Boot Diagnostics is a debugging feature which allows you to view Console Output
// and Screenshot to diagnose VM status. You can easily view the output of your
// console log. Azure also enables you to see a screenshot of the VM from the
// hypervisor.
type BootDiagnostics struct {
	// Whether boot diagnostics should be enabled on the Virtual Machine.
	Enabled *bool

	// Uri of the storage account to use for placing the console output and
	// screenshot. If storageUri is not specified while enabling boot diagnostics,
	// managed storage will be used.
	StorageURI *string
}

// CapacityReservationProfile - The parameters of a capacity reservation Profile.
type CapacityReservationProfile struct {
	// Specifies the capacity reservation group resource id that should be used for
	// allocating the virtual machine or scaleset vm instances provided enough
	// capacity has been reserved. Please refer to https://aka.ms/CapacityReservation
	// for more details.
	CapacityReservationGroup *SubResource
}

// ComputeProfile - Compute Profile to use for running user's workloads.
type ComputeProfile struct {
	// REQUIRED; Base Virtual Machine Profile Properties to be specified according to "specification/compute/resource-manager/Microsoft.Compute/ComputeRP/stable/{computeApiVersion}/virtualMachineScaleSet.json#/definitions/VirtualMachineScaleSetVMProfile"
	BaseVirtualMachineProfile *BaseVirtualMachineProfile

	// Specifies VMSS and VM API entity models support two additional capabilities as of today: ultraSSDEnabled and hibernationEnabled.
	// ultraSSDEnabled: Enables UltraSSD_LRS storage account type on the VMSS VMs.
	// hibernationEnabled: Enables the hibernation capability on the VMSS VMs.
	// Default value is null if not specified. This property cannot be updated once set.
	AdditionalVirtualMachineCapabilities *AdditionalCapabilities

	// Specifies the Microsoft.Compute API version to use when creating underlying Virtual Machine scale sets and Virtual Machines.
	// The default value will be the latest supported computeApiVersion by Compute Fleet.
	ComputeAPIVersion *string

	// Specifies the number of fault domains to use when creating the underlying VMSS.
	// A fault domain is a logical group of hardware within an Azure datacenter.
	// VMs in the same fault domain share a common power source and network switch.
	// If not specified, defaults to 1, which represents "Max Spreading" (using as many fault domains as possible).
	// This property cannot be updated.
	PlatformFaultDomainCount *int32
}

// DiagnosticsProfile - Specifies the boot diagnostic settings state. Minimum api-version: 2015-06-15.
type DiagnosticsProfile struct {
	// Boot Diagnostics is a debugging feature which allows you to view Console Output
	// and Screenshot to diagnose VM status. **NOTE**: If storageUri is being
	// specified then ensure that the storage account is in the same region and
	// subscription as the VM. You can easily view the output of your console log.
	// Azure also enables you to see a screenshot of the VM from the hypervisor.
	BootDiagnostics *BootDiagnostics
}

// DiffDiskSettings - Describes the parameters of ephemeral disk settings that can be specified for
// operating system disk. **Note:** The ephemeral disk settings can only be
// specified for managed disk.
type DiffDiskSettings struct {
	// Specifies the ephemeral disk settings for operating system disk.
	Option *DiffDiskOptions

	// Specifies the ephemeral disk placement for operating system disk. Possible
	// values are: **CacheDisk,** **ResourceDisk.** The defaulting behavior is:
	// **CacheDisk** if one is configured for the VM size otherwise **ResourceDisk**
	// is used. Refer to the VM size documentation for Windows VM at
	// https://learn.microsoft.com/azure/virtual-machines/windows/sizes and Linux VM at
	// https://learn.microsoft.com/azure/virtual-machines/linux/sizes to check which VM
	// sizes exposes a cache disk.
	Placement *DiffDiskPlacement
}

// DiskEncryptionSetParameters - Describes the parameter of customer managed disk encryption set resource id
// that can be specified for disk. **Note:** The disk encryption set resource id
// can only be specified for managed disk. Please refer
// https://aka.ms/mdssewithcmkoverview for more details.
type DiskEncryptionSetParameters struct {
	// Resource Id
	ID *string
}

// EncryptionIdentity - Specifies the Managed Identity used by ADE to get access token for keyvault
// operations.
type EncryptionIdentity struct {
	// Specifies ARM Resource ID of one of the user identities associated with the VM.
	UserAssignedIdentityResourceID *string
}

// Fleet - An Compute Fleet resource
type Fleet struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// Details of the resource plan.
	Plan *Plan

	// The resource-specific properties for this resource.
	Properties *FleetProperties

	// Resource tags.
	Tags map[string]*string

	// Zones in which the Compute Fleet is available
	Zones []*string

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// FleetListResult - The response of a Fleet list operation.
type FleetListResult struct {
	// REQUIRED; The Fleet items on this page
	Value []*Fleet

	// The link to the next page of items
	NextLink *string
}

// FleetProperties - Details of the Compute Fleet.
type FleetProperties struct {
	// REQUIRED; Compute Profile to use for running user's workloads.
	ComputeProfile *ComputeProfile

	// REQUIRED; List of VM sizes supported for Compute Fleet
	VMSizesProfile []*VMSizeProfile

	// Represents the configuration for additional locations where Fleet resources may be deployed.
	AdditionalLocationsProfile *AdditionalLocationsProfile

	// Specifies capacity type for Fleet Regular and Spot priority profiles.
	// capacityType is an immutable property. Once set during Fleet creation, it cannot be updated.
	// Specifying different capacity type for Fleet Regular and Spot priority profiles is not allowed.
	CapacityType *CapacityType

	// Mode of the Fleet.
	Mode *FleetMode

	// Configuration Options for Regular instances in Compute Fleet.
	RegularPriorityProfile *RegularPriorityProfile

	// Configuration Options for Spot instances in Compute Fleet.
	SpotPriorityProfile *SpotPriorityProfile

	// Attribute based Fleet.
	VMAttributes *VMAttributes

	// Zone Allocation Policy for Fleet.
	ZoneAllocationPolicy *ZoneAllocationPolicy

	// READ-ONLY; The status of the last operation.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Specifies the time at which the Compute Fleet is created.
	TimeCreated *time.Time

	// READ-ONLY; Specifies the ID which uniquely identifies a Compute Fleet.
	UniqueID *string
}

// FleetUpdate - Fleet Update Model
type FleetUpdate struct {
	// Updatable managed service identity
	Identity *ManagedServiceIdentityUpdate

	// Updatable resource plan
	Plan *ResourcePlanUpdate

	// RP-specific updatable properties
	Properties *FleetProperties

	// Resource tags.
	Tags map[string]*string
}

// ImageReference - Specifies information about the image to use. You can specify information about
// platform images, marketplace images, or virtual machine images. This element is
// required when you want to use a platform image, marketplace image, or virtual
// machine image, but is not used in other creation operations. NOTE: Image
// reference publisher and offer can only be set when you create the scale set.
type ImageReference struct {
	// Specified the community gallery image unique id for vm deployment. This can be
	// fetched from community gallery image GET call.
	CommunityGalleryImageID *string

	// Resource Id
	ID *string

	// Specifies the offer of the platform image or marketplace image used to create
	// the virtual machine.
	Offer *string

	// The image publisher.
	Publisher *string

	// The image SKU.
	SKU *string

	// Specified the shared gallery image unique id for vm deployment. This can be
	// fetched from shared gallery image GET call.
	SharedGalleryImageID *string

	// Specifies the version of the platform image or marketplace image used to create
	// the virtual machine. The allowed formats are Major.Minor.Build or 'latest'.
	// Major, Minor, and Build are decimal numbers. Specify 'latest' to use the latest
	// version of an image available at deploy time. Even if you use 'latest', the VM
	// image will not automatically update after deploy time even if a new version
	// becomes available. Please do not use field 'version' for gallery image
	// deployment, gallery image should always use 'id' field for deployment, to use 'latest'
	// version of gallery image, just set
	// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{imageName}'
	// in the 'id' field without version input.
	Version *string

	// READ-ONLY; Specifies in decimal numbers, the version of platform image or marketplace
	// image used to create the virtual machine. This readonly field differs from 'version',
	// only if the value specified in 'version' field is 'latest'.
	ExactVersion *string
}

// InnerError - Inner error details.
type InnerError struct {
	// The internal error message or exception dump.
	ErrorDetail *string

	// The exception type.
	ExceptionType *string
}

// KeyVaultSecretReference - Describes a reference to Key Vault Secret
type KeyVaultSecretReference struct {
	// REQUIRED; The URL referencing a secret in a Key Vault.
	SecretURL *string

	// REQUIRED; The relative URL of the Key Vault containing the secret.
	SourceVault *SubResource
}

// LinuxConfiguration - Specifies the Linux operating system settings on the virtual machine. For a
// list of supported Linux distributions, see [Linux on Azure-Endorsed
// Distributions](https://learn.microsoft.com/azure/virtual-machines/linux/endorsed-distros).
type LinuxConfiguration struct {
	// Specifies whether password authentication should be disabled.
	DisablePasswordAuthentication *bool

	// Indicates whether VMAgent Platform Updates is enabled for the Linux virtual
	// machine. Default value is false.
	EnableVMAgentPlatformUpdates *bool

	// [Preview Feature] Specifies settings related to VM Guest Patching on Linux.
	PatchSettings *LinuxPatchSettings

	// Indicates whether virtual machine agent should be provisioned on the virtual
	// machine. When this property is not specified in the request body, default
	// behavior is to set it to true. This will ensure that VM Agent is installed on
	// the VM so that extensions can be added to the VM later.
	ProvisionVMAgent *bool

	// Specifies the ssh key configuration for a Linux OS.
	SSH *SSHConfiguration
}

// LinuxPatchSettings - Specifies settings related to VM Guest Patching on Linux.
type LinuxPatchSettings struct {
	// Specifies the mode of VM Guest Patch Assessment for the IaaS virtual
	// machine.<br /><br /> Possible values are:<br /><br /> **ImageDefault** - You
	// control the timing of patch assessments on a virtual machine. <br /><br />
	// **AutomaticByPlatform** - The platform will trigger periodic patch assessments.
	// The property provisionVMAgent must be true.
	AssessmentMode *LinuxPatchAssessmentMode

	// Specifies additional settings for patch mode AutomaticByPlatform in VM Guest
	// Patching on Linux.
	AutomaticByPlatformSettings *LinuxVMGuestPatchAutomaticByPlatformSettings

	// Specifies the mode of VM Guest Patching to IaaS virtual machine or virtual
	// machines associated to virtual machine scale set with OrchestrationMode as
	// Flexible.<br /><br /> Possible values are:<br /><br /> **ImageDefault** - The
	// virtual machine's default patching configuration is used. <br /><br />
	// **AutomaticByPlatform** - The virtual machine will be automatically updated by
	// the platform. The property provisionVMAgent must be true
	PatchMode *LinuxVMGuestPatchMode
}

// LinuxVMGuestPatchAutomaticByPlatformSettings - Specifies additional settings to be applied when patch mode AutomaticByPlatform
// is selected in Linux patch settings.
type LinuxVMGuestPatchAutomaticByPlatformSettings struct {
	// Enables customer to schedule patching without accidental upgrades
	BypassPlatformSafetyChecksOnUserSchedule *bool

	// Specifies the reboot setting for all AutomaticByPlatform patch installation
	// operations.
	RebootSetting *LinuxVMGuestPatchAutomaticByPlatformRebootSetting
}

// LocationProfile - Represents the profile for a single additional location in the Fleet. The location and the virtualMachineProfileOverride
// (optional).
type LocationProfile struct {
	// REQUIRED; The ARM location name of the additional region. If LocationProfile is specified, then location is required.
	Location *string

	// An override for computeProfile.baseVirtualMachineProfile specific to this region.
	// This override is merged with the base virtual machine profile to define the final virtual machine profile for the resources
	// deployed in this location.
	VirtualMachineProfileOverride *BaseVirtualMachineProfile
}

// ManagedServiceIdentity - Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	// REQUIRED; The type of managed identity assigned to this resource.
	Type *ManagedServiceIdentityType

	// The identities assigned to this resource by the user.
	UserAssignedIdentities map[string]*UserAssignedIdentity

	// READ-ONLY; The service principal ID of the system assigned identity. This property will only be provided for a system assigned
	// identity.
	PrincipalID *string

	// READ-ONLY; The tenant ID of the system assigned identity. This property will only be provided for a system assigned identity.
	TenantID *string
}

// ManagedServiceIdentityUpdate - The template for adding optional properties.
type ManagedServiceIdentityUpdate struct {
	// The type of managed identity assigned to this resource.
	Type *ManagedServiceIdentityType

	// The identities assigned to this resource by the user.
	UserAssignedIdentities map[string]*UserAssignedIdentity
}

// OSImageNotificationProfile - Specifies OS Image Scheduled Event related configurations.
type OSImageNotificationProfile struct {
	// Specifies whether the OS Image Scheduled event is enabled or disabled.
	Enable *bool

	// Length of time a Virtual Machine being reimaged or having its OS upgraded will
	// have to potentially approve the OS Image Scheduled Event before the event is
	// auto approved (timed out). The configuration is specified in ISO 8601 format,
	// and the value must not exceed 15 minutes (PT15M)
	NotBeforeTimeout *string
}

// Operation - REST API Operation
//
// Details of a REST API operation, returned from the Resource Provider Operations API
type Operation struct {
	// Localized display information for this particular operation.
	Display *OperationDisplay

	// READ-ONLY; Extensible enum. Indicates the action type. "Internal" refers to actions that are for internal only APIs.
	ActionType *ActionType

	// READ-ONLY; Whether the operation applies to data-plane. This is "true" for data-plane operations and "false" for Azure
	// Resource Manager/control-plane operations.
	IsDataAction *bool

	// READ-ONLY; The name of the operation, as per Resource-Based Access Control (RBAC). Examples: "Microsoft.Compute/virtualMachines/write",
	// "Microsoft.Compute/virtualMachines/capture/action"
	Name *string

	// READ-ONLY; The intended executor of the operation; as in Resource Based Access Control (RBAC) and audit logs UX. Default
	// value is "user,system"
	Origin *Origin
}

// OperationDisplay - Localized display information for and operation.
type OperationDisplay struct {
	// READ-ONLY; The short, localized friendly description of the operation; suitable for tool tips and detailed views.
	Description *string

	// READ-ONLY; The concise, localized friendly name for the operation; suitable for dropdowns. E.g. "Create or Update Virtual
	// Machine", "Restart Virtual Machine".
	Operation *string

	// READ-ONLY; The localized friendly form of the resource provider name, e.g. "Microsoft Monitoring Insights" or "Microsoft
	// Compute".
	Provider *string

	// READ-ONLY; The localized friendly name of the resource type related to this operation. E.g. "Virtual Machines" or "Job
	// Schedule Collections".
	Resource *string
}

// OperationListResult - A list of REST API operations supported by an Azure Resource Provider. It contains an URL link to
// get the next set of results.
type OperationListResult struct {
	// REQUIRED; The Operation items on this page
	Value []*Operation

	// The link to the next page of items
	NextLink *string
}

// PatchSettings - Specifies settings related to VM Guest Patching on Windows.
type PatchSettings struct {
	// Specifies the mode of VM Guest patch assessment for the IaaS virtual
	// machine.<br /><br /> Possible values are:<br /><br /> **ImageDefault** - You
	// control the timing of patch assessments on a virtual machine.<br /><br />
	// **AutomaticByPlatform** - The platform will trigger periodic patch assessments.
	// The property provisionVMAgent must be true.
	AssessmentMode *WindowsPatchAssessmentMode

	// Specifies additional settings for patch mode AutomaticByPlatform in VM Guest
	// Patching on Windows.
	AutomaticByPlatformSettings *WindowsVMGuestPatchAutomaticByPlatformSettings

	// Enables customers to patch their Azure VMs without requiring a reboot. For
	// enableHotpatching, the 'provisionVMAgent' must be set to true and 'patchMode'
	// must be set to 'AutomaticByPlatform'.
	EnableHotpatching *bool

	// Specifies the mode of VM Guest Patching to IaaS virtual machine or virtual
	// machines associated to virtual machine scale set with OrchestrationMode as
	// Flexible.<br /><br /> Possible values are:<br /><br /> **Manual** - You
	// control the application of patches to a virtual machine. You do this by
	// applying patches manually inside the VM. In this mode, automatic updates are
	// disabled; the property WindowsConfiguration.enableAutomaticUpdates must be
	// false<br /><br /> **AutomaticByOS** - The virtual machine will automatically be
	// updated by the OS. The property WindowsConfiguration.enableAutomaticUpdates
	// must be true. <br /><br /> **AutomaticByPlatform** - the virtual machine will
	// automatically updated by the platform. The properties provisionVMAgent and
	// WindowsConfiguration.enableAutomaticUpdates must be true
	PatchMode *WindowsVMGuestPatchMode
}

// Plan for the resource.
type Plan struct {
	// REQUIRED; A user defined name of the 3rd Party Artifact that is being procured.
	Name *string

	// REQUIRED; The 3rd Party artifact that is being procured. E.g. NewRelic. Product maps to the OfferID specified for the artifact
	// at the time of Data Market onboarding.
	Product *string

	// REQUIRED; The publisher of the 3rd Party Artifact that is being bought. E.g. NewRelic
	Publisher *string

	// A publisher provided promotion code as provisioned in Data Market for the said product/artifact.
	PromotionCode *string

	// The version of the desired product/artifact.
	Version *string
}

// ProxyAgentSettings - Specifies ProxyAgent settings while creating the virtual machine. Minimum
// api-version: 2023-09-01.
type ProxyAgentSettings struct {
	// Specifies whether ProxyAgent feature should be enabled on the virtual machine
	// or virtual machine scale set.
	Enabled *bool

	// Increase the value of this property allows user to reset the key used for
	// securing communication channel between guest and host.
	KeyIncarnationID *int32

	// Specifies the mode that ProxyAgent will execute on if the feature is enabled.
	// ProxyAgent will start to audit or monitor but not enforce access control over
	// requests to host endpoints in Audit mode, while in Enforce mode it will enforce
	// access control. The default value is Enforce mode.
	Mode *Mode
}

// PublicIPAddressSKU - Describes the public IP Sku. It can only be set with OrchestrationMode as
// Flexible.
type PublicIPAddressSKU struct {
	// Specify public IP sku name
	Name *PublicIPAddressSKUName

	// Specify public IP sku tier
	Tier *PublicIPAddressSKUTier
}

// RegularPriorityProfile - Configuration Options for Regular instances in Compute Fleet.
type RegularPriorityProfile struct {
	// Allocation strategy to follow when determining the VM sizes distribution for Regular VMs.
	AllocationStrategy *RegularPriorityAllocationStrategy

	// Total capacity to achieve. It is currently in terms of number of VMs.
	Capacity *int32

	// Minimum capacity to achieve which cannot be updated. If we will not be able to "guarantee" minimum capacity, we will reject
	// the request in the sync path itself.
	MinCapacity *int32
}

// ResourcePlanUpdate - The template for adding optional properties.
type ResourcePlanUpdate struct {
	// A user defined name of the 3rd Party Artifact that is being procured.
	Name *string

	// The 3rd Party artifact that is being procured. E.g. NewRelic. Product maps to the OfferID specified for the artifact at
	// the time of Data Market onboarding.
	Product *string

	// A publisher provided promotion code as provisioned in Data Market for the said product/artifact.
	PromotionCode *string

	// The publisher of the 3rd Party Artifact that is being bought. E.g. NewRelic
	Publisher *string

	// The version of the desired product/artifact.
	Version *string
}

// SSHConfiguration - SSH configuration for Linux based VMs running on Azure
type SSHConfiguration struct {
	// The list of SSH public keys used to authenticate with linux based VMs.
	PublicKeys []*SSHPublicKey
}

// SSHPublicKey - Contains information about SSH certificate public key and the path on the Linux
// VM where the public key is placed.
type SSHPublicKey struct {
	// SSH public key certificate used to authenticate with the VM through ssh. The
	// key needs to be at least 2048-bit and in ssh-rsa format. For creating ssh keys,
	// see [Create SSH keys on Linux and Mac for Linux VMs in
	// Azure]https://learn.microsoft.com/azure/virtual-machines/linux/create-ssh-keys-detailed).
	KeyData *string

	// Specifies the full path on the created VM where ssh public key is stored. If
	// the file already exists, the specified key is appended to the file. Example:
	// /home/user/.ssh/authorized_keys
	Path *string
}

// ScheduledEventsProfile - Specifies Scheduled Event related configurations.
type ScheduledEventsProfile struct {
	// Specifies OS Image Scheduled Event related configurations.
	OSImageNotificationProfile *OSImageNotificationProfile

	// Specifies Terminate Scheduled Event related configurations.
	TerminateNotificationProfile *TerminateNotificationProfile
}

// SecurityPostureReference - Specifies the security posture to be used for all virtual machines in the scale
// set. Minimum api-version: 2023-03-01
type SecurityPostureReference struct {
	// List of virtual machine extension names to exclude when applying the security
	// posture.
	ExcludeExtensions []*string

	// The security posture reference id in the form of
	// /CommunityGalleries/{communityGalleryName}/securityPostures/{securityPostureName}/versions/{major.minor.patch}|{major.*}|latest
	ID *string

	// Whether the security posture can be overridden by the user.
	IsOverridable *bool
}

// SecurityProfile - Specifies the Security profile settings for the virtual machine or virtual
// machine scale set.
type SecurityProfile struct {
	// This property can be used by user in the request to enable or disable the Host
	// Encryption for the virtual machine or virtual machine scale set. This will
	// enable the encryption for all the disks including Resource/Temp disk at host
	// itself. The default behavior is: The Encryption at host will be disabled unless
	// this property is set to true for the resource.
	EncryptionAtHost *bool

	// Specifies the Managed Identity used by ADE to get access token for keyvault
	// operations.
	EncryptionIdentity *EncryptionIdentity

	// Specifies ProxyAgent settings while creating the virtual machine. Minimum
	// api-version: 2023-09-01.
	ProxyAgentSettings *ProxyAgentSettings

	// Specifies the SecurityType of the virtual machine. It has to be set to any
	// specified value to enable UefiSettings. The default behavior is: UefiSettings
	// will not be enabled unless this property is set.
	SecurityType *SecurityTypes

	// Specifies the security settings like secure boot and vTPM used while creating
	// the virtual machine. Minimum api-version: 2020-12-01.
	UefiSettings *UefiSettings
}

// ServiceArtifactReference - Specifies the service artifact reference id used to set same image version for
// all virtual machines in the scale set when using 'latest' image version.
// Minimum api-version: 2022-11-01
type ServiceArtifactReference struct {
	// The service artifact reference id in the form of
	// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/galleries/{galleryName}/serviceArtifacts/{serviceArtifactName}/vmArtifactsProfiles/{vmArtifactsProfilesName}
	ID *string
}

// SpotPriorityProfile - Configuration Options for Spot instances in Compute Fleet.
type SpotPriorityProfile struct {
	// Allocation strategy to follow when determining the VM sizes distribution for Spot VMs.
	AllocationStrategy *SpotAllocationStrategy

	// Total capacity to achieve. It is currently in terms of number of VMs.
	Capacity *int32

	// Eviction Policy to follow when evicting Spot VMs.
	EvictionPolicy *EvictionPolicy

	// Flag to enable/disable continuous goal seeking for the desired capacity and restoration of evicted Spot VMs.
	// If maintain is enabled, AzureFleetRP will use all VM sizes in vmSizesProfile to create new VMs (if VMs are evicted deleted)
	// or update existing VMs with new VM sizes (if VMs are evicted deallocated or failed to allocate due to capacity constraint)
	// in order to achieve the desired capacity.
	// Maintain is enabled by default.
	Maintain *bool

	// Price per hour of each Spot VM will never exceed this.
	MaxPricePerVM *float32

	// Minimum capacity to achieve which cannot be updated. If we will not be able to "guarantee" minimum capacity, we will reject
	// the request in the sync path itself.
	MinCapacity *int32
}

// SubResource - Describes SubResource
type SubResource struct {
	// Resource Id
	ID *string
}

// SystemData - Metadata pertaining to creation and last modification of the resource.
type SystemData struct {
	// The timestamp of resource creation (UTC).
	CreatedAt *time.Time

	// The identity that created the resource.
	CreatedBy *string

	// The type of identity that created the resource.
	CreatedByType *CreatedByType

	// The timestamp of resource last modification (UTC)
	LastModifiedAt *time.Time

	// The identity that last modified the resource.
	LastModifiedBy *string

	// The type of identity that last modified the resource.
	LastModifiedByType *CreatedByType
}

// TerminateNotificationProfile - Specifies Terminate Scheduled Event related configurations.
type TerminateNotificationProfile struct {
	// Specifies whether the Terminate Scheduled event is enabled or disabled.
	Enable *bool

	// Configurable length of time a Virtual Machine being deleted will have to
	// potentially approve the Terminate Scheduled Event before the event is auto
	// approved (timed out). The configuration must be specified in ISO 8601 format,
	// the default value is 5 minutes (PT5M)
	NotBeforeTimeout *string
}

// UefiSettings - Specifies the security settings like secure boot and vTPM used while creating
// the virtual machine. Minimum api-version: 2020-12-01.
type UefiSettings struct {
	// Specifies whether secure boot should be enabled on the virtual machine. Minimum
	// api-version: 2020-12-01.
	SecureBootEnabled *bool

	// Specifies whether vTPM should be enabled on the virtual machine. Minimum
	// api-version: 2020-12-01.
	VTpmEnabled *bool
}

// UserAssignedIdentity - User assigned identity properties
type UserAssignedIdentity struct {
	// READ-ONLY; The client ID of the assigned identity.
	ClientID *string

	// READ-ONLY; The principal ID of the assigned identity.
	PrincipalID *string
}

// VMAttributeMinMaxDouble - VMAttributes using double values.
type VMAttributeMinMaxDouble struct {
	// Maximum value. Double.MaxValue(1.7976931348623157E+308)
	Max *float64

	// Minimum value. default 0. Double.MinValue()
	Min *float64
}

// VMAttributeMinMaxInteger - While retrieving VMSizes from CRS, Min = 0 (uint.MinValue) if not specified, Max = 4294967295
// (uint.MaxValue) if not specified. This allows to filter VMAttributes on all available VMSizes.
type VMAttributeMinMaxInteger struct {
	// Max VMSize from CRS, Max = 4294967295 (uint.MaxValue) if not specified.
	Max *int32

	// Min VMSize from CRS, Min = 0 (uint.MinValue) if not specified.
	Min *int32
}

// VMAttributes that will be used to filter VMSizes which will be used to build Fleet.
type VMAttributes struct {
	// REQUIRED; The range of memory specified from Min to Max. Must be specified if VMAttributes are specified, either Min or
	// Max is required if specified.
	MemoryInGiB *VMAttributeMinMaxDouble

	// REQUIRED; The range of vCpuCount specified from Min to Max. Must be specified if VMAttributes are specified, either Min
	// or Max is required if specified.
	VCPUCount *VMAttributeMinMaxInteger

	// The range of accelerator count specified from min to max. Optional parameter. Either Min or Max is required if specified.
	// acceleratorSupport should be set to "Included" or "Required" to use this VMAttribute.
	// If acceleratorSupport is "Excluded", this VMAttribute can not be used.
	AcceleratorCount *VMAttributeMinMaxInteger

	// The accelerator manufacturers specified as a list.
	// acceleratorSupport should be set to "Included" or "Required" to use this VMAttribute.
	// If acceleratorSupport is "Excluded", this VMAttribute can not be used.
	AcceleratorManufacturers []*AcceleratorManufacturer

	// Specifies whether the VMSize supporting accelerator should be used to build Fleet or not.
	// acceleratorSupport should be set to "Included" or "Required" to use this VMAttribute.
	// If acceleratorSupport is "Excluded", this VMAttribute can not be used.
	AcceleratorSupport *VMAttributeSupport

	// The accelerator types specified as a list. acceleratorSupport should be set to "Included" or "Required" to use this VMAttribute.
	// If acceleratorSupport is "Excluded", this VMAttribute can not be used.
	AcceleratorTypes []*AcceleratorType

	// The VM architecture types specified as a list. Optional parameter.
	ArchitectureTypes []*ArchitectureType

	// Specifies whether the VMSize supporting burstable capability should be used to build Fleet or not.
	BurstableSupport *VMAttributeSupport

	// The VM CPU manufacturers specified as a list. Optional parameter.
	CPUManufacturers []*CPUManufacturer

	// The range of data disk count specified from Min to Max. Optional parameter. Either Min or Max is required if specified.
	DataDiskCount *VMAttributeMinMaxInteger

	// Specifies which VMSizes should be excluded while building Fleet. Optional parameter.
	ExcludedVMSizes []*string

	// The local storage disk types specified as a list. LocalStorageSupport should be set to "Included" or "Required" to use
	// this VMAttribute.
	// If localStorageSupport is "Excluded", this VMAttribute can not be used.
	LocalStorageDiskTypes []*LocalStorageDiskType

	// LocalStorageSupport should be set to "Included" or "Required" to use this VMAttribute.
	// If localStorageSupport is "Excluded", this VMAttribute can not be used.
	LocalStorageInGiB *VMAttributeMinMaxDouble

	// Specifies whether the VMSize supporting local storage should be used to build Fleet or not.
	// Included - Default if not specified as most Azure VMs support local storage.
	LocalStorageSupport *VMAttributeSupport

	// The range of memory in GiB per vCPU specified from min to max. Optional parameter. Either Min or Max is required if specified.
	MemoryInGiBPerVCpu *VMAttributeMinMaxDouble

	// The range of network bandwidth in Mbps specified from Min to Max. Optional parameter. Either Min or Max is required if
	// specified.
	NetworkBandwidthInMbps *VMAttributeMinMaxDouble

	// The range of network interface count specified from Min to Max. Optional parameter. Either Min or Max is required if specified.
	NetworkInterfaceCount *VMAttributeMinMaxInteger

	// The range of RDMA (Remote Direct Memory Access) network interface count specified from Min to Max. Optional parameter.
	// Either Min or Max is required if specified.
	// rdmaSupport should be set to "Included" or "Required" to use this VMAttribute.
	// If rdmaSupport is "Excluded", this VMAttribute can not be used.
	RdmaNetworkInterfaceCount *VMAttributeMinMaxInteger

	// Specifies whether the VMSize supporting RDMA (Remote Direct Memory Access) should be used to build Fleet or not.
	RdmaSupport *VMAttributeSupport

	// The VM category specified as a list. Optional parameter.
	VMCategories []*VMCategory
}

// VMDiskSecurityProfile - Specifies the security profile settings for the managed disk. **Note:** It can
// only be set for Confidential VMs.
type VMDiskSecurityProfile struct {
	// Specifies the customer managed disk encryption set resource id for the managed
	// disk that is used for Customer Managed Key encrypted ConfidentialVM OS Disk and
	// VMGuest blob.
	DiskEncryptionSet *DiskEncryptionSetParameters

	// Specifies the EncryptionType of the managed disk. It is set to
	// DiskWithVMGuestState for encryption of the managed disk along with VMGuestState
	// blob, VMGuestStateOnly for encryption of just the VMGuestState blob, and
	// NonPersistedTPM for not persisting firmware state in the VMGuestState blob..
	// **Note:** It can be set for only Confidential VMs.
	SecurityEncryptionType *SecurityEncryptionTypes
}

// VMGalleryApplication - Specifies the required information to reference a compute gallery application
// version
type VMGalleryApplication struct {
	// REQUIRED; Specifies the GalleryApplicationVersion resource id on the form of
	// /subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{application}/versions/{version}
	PackageReferenceID *string

	// Optional, Specifies the uri to an azure blob that will replace the default
	// configuration for the package if provided
	ConfigurationReference *string

	// If set to true, when a new Gallery Application version is available in PIR/SIG,
	// it will be automatically updated for the VM/VMSS
	EnableAutomaticUpgrade *bool

	// Optional, Specifies the order in which the packages have to be installed
	Order *int32

	// Optional, Specifies a passthrough value for more generic context.
	Tags *string

	// Optional, If true, any failure for any operation in the VmApplication will fail
	// the deployment
	TreatFailureAsDeploymentFailure *bool
}

// VMSizeProfile - Specifications about a VM Size. This will also contain the corresponding rank and weight in future.
type VMSizeProfile struct {
	// REQUIRED; The Sku name (e.g. 'Standard_DS1_v2')
	Name *string

	// The rank of the VM size. This is used with 'RegularPriorityAllocationStrategy.Prioritized'
	// The lower the number, the higher the priority. Starting with 0.
	Rank *int32
}

// VMSizeProperties - Specifies VM Size Property settings on the virtual machine.
type VMSizeProperties struct {
	// Specifies the number of vCPUs available for the VM. When this property is not
	// specified in the request body the default behavior is to set it to the value of
	// vCPUs available for that VM size exposed in api response of [List all available
	// virtual machine sizes in a
	// region](https://learn.microsoft.com/en-us/rest/api/compute/resource-skus/list).
	VCPUsAvailable *int32

	// Specifies the vCPU to physical core ratio. When this property is not specified
	// in the request body the default behavior is set to the value of vCPUsPerCore
	// for the VM Size exposed in api response of [List all available virtual machine
	// sizes in a
	// region](https://learn.microsoft.com/en-us/rest/api/compute/resource-skus/list).
	// **Setting this property to 1 also means that hyper-threading is disabled.**
	VCPUsPerCore *int32
}

// VaultCertificate - Describes a single certificate reference in a Key Vault, and where the
// certificate should reside on the VM.
type VaultCertificate struct {
	// For Windows VMs, specifies the certificate store on the Virtual Machine to
	// which the certificate should be added. The specified certificate store is
	// implicitly in the LocalMachine account. For Linux VMs, the certificate file is
	// placed under the /var/lib/waagent directory, with the file name
	// &lt;UppercaseThumbprint&gt;.crt for the X509 certificate file and
	// &lt;UppercaseThumbprint&gt;.prv for private key. Both of these files are .pem
	// formatted.
	CertificateStore *string

	// This is the URL of a certificate that has been uploaded to Key Vault as a
	// secret. For adding a secret to the Key Vault, see [Add a key or secret to the
	// key
	// vault](https://learn.microsoft.com/azure/key-vault/key-vault-get-started/#add).
	// In this case, your certificate needs to be It is the Base64 encoding of the
	// following JSON Object which is encoded in UTF-8: <br><br> {<br>
	// "data":"<Base64-encoded-certificate>",<br> "dataType":"pfx",<br>
	// "password":"<pfx-file-password>"<br>} <br> To install certificates on a virtual
	// machine it is recommended to use the [Azure Key Vault virtual machine extension
	// for
	// Linux](https://learn.microsoft.com/azure/virtual-machines/extensions/key-vault-linux)
	// or the [Azure Key Vault virtual machine extension for
	// Windows](https://learn.microsoft.com/azure/virtual-machines/extensions/key-vault-windows).
	CertificateURL *string
}

// VaultSecretGroup - Describes a set of certificates which are all in the same Key Vault.
type VaultSecretGroup struct {
	// The relative URL of the Key Vault containing all of the certificates in
	// VaultCertificates.
	SourceVault *SubResource

	// The list of key vault references in SourceVault which contain certificates.
	VaultCertificates []*VaultCertificate
}

// VirtualHardDisk - Describes the uri of a disk.
type VirtualHardDisk struct {
	// Specifies the virtual hard disk's uri.
	URI *string
}

// VirtualMachine - An instant Fleet's virtual machine.
type VirtualMachine struct {
	// READ-ONLY; The compute RP resource id of the virtual machine. subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Compute/virtualMachines/{vmName}
	ID *string

	// READ-ONLY; The name of the virtual machine.
	Name *string

	// READ-ONLY; This represents the operationStatus of the virtual machine in response to the last operation that was performed
	// on it by Azure Fleet resource.
	OperationStatus *VMOperationStatus

	// READ-ONLY; Error information when `operationStatus` is `Failed`.
	Error *APIError

	// READ-ONLY; Type of the virtual machine
	Type *string
}

// VirtualMachineListResult - The response of a virtual machine list operation.
type VirtualMachineListResult struct {
	// REQUIRED; The Virtual Machine items on this page.
	Value []*VirtualMachine

	// The link to the next page of items.
	NextLink *string
}

// VirtualMachineScaleSet - An AzureFleet's virtualMachineScaleSet
type VirtualMachineScaleSet struct {
	// READ-ONLY; The compute RP resource id of the virtualMachineScaleSet
	// "subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}"
	ID *string

	// READ-ONLY; The name of the virtualMachineScaleSet
	Name *string

	// READ-ONLY; This represents the operationStatus of the VMSS in response to the last operation that was performed on it by
	// Azure Fleet resource.
	OperationStatus *ProvisioningState

	// READ-ONLY; Error Information when `operationStatus` is `Failed`
	Error *APIError

	// READ-ONLY; Type of the virtualMachineScaleSet
	Type *string
}

// VirtualMachineScaleSetDataDisk - Describes a virtual machine scale set data disk.
type VirtualMachineScaleSetDataDisk struct {
	// REQUIRED; The create option.
	CreateOption *DiskCreateOptionTypes

	// REQUIRED; Specifies the logical unit number of the data disk. This value is used to
	// identify data disks within the VM and therefore must be unique for each data
	// disk attached to a VM.
	Lun *int32

	// Specifies the caching requirements. Possible values are: **None,**
	// **ReadOnly,** **ReadWrite.** The default values are: **None for Standard
	// storage. ReadOnly for Premium storage.**
	Caching *CachingTypes

	// Specifies whether data disk should be deleted or detached upon VMSS Flex
	// deletion (This feature is available for VMSS with Flexible OrchestrationMode
	// only).<br><br> Possible values: <br><br> **Delete** If this value is used, the
	// data disk is deleted when the VMSS Flex VM is deleted.<br><br> **Detach** If
	// this value is used, the data disk is retained after VMSS Flex VM is
	// deleted.<br><br> The default value is set to **Delete**.
	DeleteOption *DiskDeleteOptionTypes

	// Specifies the Read-Write IOPS for the managed disk. Should be used only when
	// StorageAccountType is UltraSSD_LRS. If not specified, a default value would be
	// assigned based on diskSizeGB.
	DiskIOPSReadWrite *int64

	// Specifies the bandwidth in MB per second for the managed disk. Should be used
	// only when StorageAccountType is UltraSSD_LRS. If not specified, a default value
	// would be assigned based on diskSizeGB.
	DiskMBpsReadWrite *int64

	// Specifies the size of an empty data disk in gigabytes. This element can be used
	// to overwrite the size of the disk in a virtual machine image. The property
	// diskSizeGB is the number of bytes x 1024^3 for the disk and the value cannot be
	// larger than 1023.
	DiskSizeGB *int32

	// The managed disk parameters.
	ManagedDisk *VirtualMachineScaleSetManagedDiskParameters

	// The disk name.
	Name *string

	// Specifies whether writeAccelerator should be enabled or disabled on the disk.
	WriteAcceleratorEnabled *bool
}

// VirtualMachineScaleSetExtension - Describes a Virtual Machine Scale Set Extension.
type VirtualMachineScaleSetExtension struct {
	// The name of the extension.
	Name *string

	// Describes the properties of a Virtual Machine Scale Set Extension.
	Properties *VirtualMachineScaleSetExtensionProperties

	// READ-ONLY; Resource Id
	ID *string

	// READ-ONLY; Resource type
	Type *string
}

// VirtualMachineScaleSetExtensionProfile - Describes a virtual machine scale set extension profile.
type VirtualMachineScaleSetExtensionProfile struct {
	// The virtual machine scale set child extension resources.
	Extensions []*VirtualMachineScaleSetExtension

	// Specifies the time alloted for all extensions to start. The time duration
	// should be between 15 minutes and 120 minutes (inclusive) and should be
	// specified in ISO 8601 format. The default value is 90 minutes (PT1H30M).
	// Minimum api-version: 2020-06-01.
	ExtensionsTimeBudget *string
}

// VirtualMachineScaleSetExtensionProperties - Describes the properties of a Virtual Machine Scale Set Extension.
type VirtualMachineScaleSetExtensionProperties struct {
	// Indicates whether the extension should use a newer minor version if one is
	// available at deployment time. Once deployed, however, the extension will not
	// upgrade minor versions unless redeployed, even with this property set to true.
	AutoUpgradeMinorVersion *bool

	// Indicates whether the extension should be automatically upgraded by the
	// platform if there is a newer version of the extension available.
	EnableAutomaticUpgrade *bool

	// If a value is provided and is different from the previous value, the extension
	// handler will be forced to update even if the extension configuration has not
	// changed.
	ForceUpdateTag *string

	// The extension can contain either protectedSettings or
	// protectedSettingsFromKeyVault or no protected settings at all.
	ProtectedSettings map[string]any

	// The extensions protected settings that are passed by reference, and consumed
	// from key vault
	ProtectedSettingsFromKeyVault *KeyVaultSecretReference

	// Collection of extension names after which this extension needs to be
	// provisioned.
	ProvisionAfterExtensions []*string

	// The name of the extension handler publisher.
	Publisher *string

	// Json formatted public settings for the extension.
	Settings map[string]any

	// Indicates whether failures stemming from the extension will be suppressed
	// (Operational failures such as not connecting to the VM will not be suppressed
	// regardless of this value). The default is false.
	SuppressFailures *bool

	// Specifies the type of the extension; an example is "CustomScriptExtension".
	Type *string

	// Specifies the version of the script handler.
	TypeHandlerVersion *string

	// READ-ONLY; The provisioning state, which only appears in the response.
	ProvisioningState *string
}

// VirtualMachineScaleSetHardwareProfile - Specifies the hardware settings for the virtual machine scale set.
type VirtualMachineScaleSetHardwareProfile struct {
	// Specifies the properties for customizing the size of the virtual machine.
	// Minimum api-version: 2021-11-01. Please follow the instructions in [VM
	// Customization](https://aka.ms/vmcustomization) for more details.
	VMSizeProperties *VMSizeProperties
}

// VirtualMachineScaleSetIPConfiguration - Describes a virtual machine scale set network profile's IP configuration.
type VirtualMachineScaleSetIPConfiguration struct {
	// REQUIRED; The IP configuration name.
	Name *string

	// Describes a virtual machine scale set network profile's IP configuration
	// properties.
	Properties *VirtualMachineScaleSetIPConfigurationProperties
}

// VirtualMachineScaleSetIPConfigurationProperties - Describes a virtual machine scale set network profile's IP configuration
// properties.
type VirtualMachineScaleSetIPConfigurationProperties struct {
	// Specifies an array of references to backend address pools of application
	// gateways. A scale set can reference backend address pools of multiple
	// application gateways. Multiple scale sets cannot use the same application
	// gateway.
	ApplicationGatewayBackendAddressPools []*SubResource

	// Specifies an array of references to application security group.
	ApplicationSecurityGroups []*SubResource

	// Specifies an array of references to backend address pools of load balancers. A
	// scale set can reference backend address pools of one public and one internal
	// load balancer. Multiple scale sets cannot use the same basic sku load balancer.
	LoadBalancerBackendAddressPools []*SubResource

	// Specifies an array of references to inbound Nat pools of the load balancers. A
	// scale set can reference inbound nat pools of one public and one internal load
	// balancer. Multiple scale sets cannot use the same basic sku load balancer.
	LoadBalancerInboundNatPools []*SubResource

	// Specifies the primary network interface in case the virtual machine has more
	// than 1 network interface.
	Primary *bool

	// Available from Api-Version 2017-03-30 onwards, it represents whether the
	// specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible
	// values are: 'IPv4' and 'IPv6'.
	PrivateIPAddressVersion *IPVersion

	// The publicIPAddressConfiguration.
	PublicIPAddressConfiguration *VirtualMachineScaleSetPublicIPAddressConfiguration

	// Specifies the identifier of the subnet.
	Subnet *APIEntityReference
}

// VirtualMachineScaleSetIPTag - Contains the IP tag associated with the public IP address.
type VirtualMachineScaleSetIPTag struct {
	// IP tag type. Example: FirstPartyUsage.
	IPTagType *string

	// IP tag associated with the public IP. Example: SQL, Storage etc.
	Tag *string
}

// VirtualMachineScaleSetListResult - The response of a VirtualMachineScaleSet list operation.
type VirtualMachineScaleSetListResult struct {
	// REQUIRED; The VirtualMachineScaleSet items on this page
	Value []*VirtualMachineScaleSet

	// The link to the next page of items
	NextLink *string
}

// VirtualMachineScaleSetManagedDiskParameters - Describes the parameters of a ScaleSet managed disk.
type VirtualMachineScaleSetManagedDiskParameters struct {
	// Specifies the customer managed disk encryption set resource id for the managed
	// disk.
	DiskEncryptionSet *DiskEncryptionSetParameters

	// Specifies the security profile for the managed disk.
	SecurityProfile *VMDiskSecurityProfile

	// Specifies the storage account type for the managed disk. NOTE: UltraSSD_LRS can
	// only be used with data disks, it cannot be used with OS Disk.
	StorageAccountType *StorageAccountTypes
}

// VirtualMachineScaleSetNetworkConfiguration - Describes a virtual machine scale set network profile's network configurations.
type VirtualMachineScaleSetNetworkConfiguration struct {
	// REQUIRED; The network configuration name.
	Name *string

	// Describes a virtual machine scale set network profile's IP configuration.
	Properties *VirtualMachineScaleSetNetworkConfigurationProperties
}

// VirtualMachineScaleSetNetworkConfigurationDNSSettings - Describes a virtual machines scale sets network configuration's
// DNS settings.
type VirtualMachineScaleSetNetworkConfigurationDNSSettings struct {
	// List of DNS servers IP addresses
	DNSServers []*string
}

// VirtualMachineScaleSetNetworkConfigurationProperties - Describes a virtual machine scale set network profile's IP configuration.
type VirtualMachineScaleSetNetworkConfigurationProperties struct {
	// REQUIRED; Specifies the IP configurations of the network interface.
	IPConfigurations []*VirtualMachineScaleSetIPConfiguration

	// Specifies whether the Auxiliary mode is enabled for the Network Interface
	// resource.
	AuxiliaryMode *NetworkInterfaceAuxiliaryMode

	// Specifies whether the Auxiliary sku is enabled for the Network Interface
	// resource.
	AuxiliarySKU *NetworkInterfaceAuxiliarySKU

	// The dns settings to be applied on the network interfaces.
	DNSSettings *VirtualMachineScaleSetNetworkConfigurationDNSSettings

	// Specify what happens to the network interface when the VM is deleted
	DeleteOption *DeleteOptions

	// Specifies whether the network interface is disabled for tcp state tracking.
	DisableTCPStateTracking *bool

	// Specifies whether the network interface is accelerated networking-enabled.
	EnableAcceleratedNetworking *bool

	// Specifies whether the network interface is FPGA networking-enabled.
	EnableFpga *bool

	// Whether IP forwarding enabled on this NIC.
	EnableIPForwarding *bool

	// The network security group.
	NetworkSecurityGroup *SubResource

	// Specifies the primary network interface in case the virtual machine has more
	// than 1 network interface.
	Primary *bool
}

// VirtualMachineScaleSetNetworkProfile - Describes a virtual machine scale set network profile.
type VirtualMachineScaleSetNetworkProfile struct {
	// A reference to a load balancer probe used to determine the health of an
	// instance in the virtual machine scale set. The reference will be in the form:
	// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.
	HealthProbe *APIEntityReference

	// specifies the Microsoft.Network API version used when creating networking
	// resources in the Network Interface Configurations for Virtual Machine Scale Set
	// with orchestration mode 'Flexible'
	NetworkAPIVersion *NetworkAPIVersion

	// The list of network configurations.
	NetworkInterfaceConfigurations []*VirtualMachineScaleSetNetworkConfiguration
}

// VirtualMachineScaleSetOSDisk - Describes a virtual machine scale set operating system disk.
type VirtualMachineScaleSetOSDisk struct {
	// REQUIRED; Specifies how the virtual machines in the scale set should be created. The only
	// allowed value is: **FromImage.** This value is used when you are using an image
	// to create the virtual machine. If you are using a platform image, you also use
	// the imageReference element described above. If you are using a marketplace
	// image, you also use the plan element previously described.
	CreateOption *DiskCreateOptionTypes

	// Specifies the caching requirements. Possible values are: **None,**
	// **ReadOnly,** **ReadWrite.** The default values are: **None for Standard
	// storage. ReadOnly for Premium storage.**
	Caching *CachingTypes

	// Specifies whether OS Disk should be deleted or detached upon VMSS Flex deletion
	// (This feature is available for VMSS with Flexible OrchestrationMode only).
	// <br><br> Possible values: <br><br> **Delete** If this value is used, the OS
	// disk is deleted when VMSS Flex VM is deleted.<br><br> **Detach** If this value
	// is used, the OS disk is retained after VMSS Flex VM is deleted. <br><br> The
	// default value is set to **Delete**. For an Ephemeral OS Disk, the default value
	// is set to **Delete**. User cannot change the delete option for Ephemeral OS
	// Disk.
	DeleteOption *DiskDeleteOptionTypes

	// Specifies the ephemeral disk Settings for the operating system disk used by the
	// virtual machine scale set.
	DiffDiskSettings *DiffDiskSettings

	// Specifies the size of an empty data disk in gigabytes. This element can be used
	// to overwrite the size of the disk in a virtual machine image. The property 'diskSizeGB'
	// is the number of bytes x 1024^3 for the disk and the value cannot
	// be larger than 1023.
	DiskSizeGB *int32

	// Specifies information about the unmanaged user image to base the scale set on.
	Image *VirtualHardDisk

	// The managed disk parameters.
	ManagedDisk *VirtualMachineScaleSetManagedDiskParameters

	// The disk name.
	Name *string

	// This property allows you to specify the type of the OS that is included in the
	// disk if creating a VM from user-image or a specialized VHD. Possible values
	// are: **Windows,** **Linux.**
	OSType *OperatingSystemTypes

	// Specifies the container urls that are used to store operating system disks for
	// the scale set.
	VhdContainers []*string

	// Specifies whether writeAccelerator should be enabled or disabled on the disk.
	WriteAcceleratorEnabled *bool
}

// VirtualMachineScaleSetOSProfile - Describes a virtual machine scale set OS profile.
type VirtualMachineScaleSetOSProfile struct {
	// Specifies the password of the administrator account. <br><br> **Minimum-length
	// (Windows):** 8 characters <br><br> **Minimum-length (Linux):** 6 characters
	// <br><br> **Max-length (Windows):** 123 characters <br><br> **Max-length
	// (Linux):** 72 characters <br><br> **Complexity requirements:** 3 out of 4
	// conditions below need to be fulfilled <br> Has lower characters <br>Has upper
	// characters <br> Has a digit <br> Has a special character (Regex match [\W_])
	// <br><br> **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd",
	// "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1",
	// "Password22", "iloveyou!" <br><br> For resetting the password, see [How to
	// reset the Remote Desktop service or its login password in a Windows
	// VM](https://learn.microsoft.com/troubleshoot/azure/virtual-machines/reset-rdp)
	// <br><br> For resetting root password, see [Manage users, SSH, and check or
	// repair disks on Azure Linux VMs using the VMAccess
	// Extension](https://learn.microsoft.com/troubleshoot/azure/virtual-machines/troubleshoot-ssh-connection)
	AdminPassword *string

	// Specifies the name of the administrator account. <br><br> **Windows-only
	// restriction:** Cannot end in "." <br><br> **Disallowed values:**
	// "administrator", "admin", "user", "user1", "test", "user2", "test1", "user3",
	// "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup",
	// "console", "david", "guest", "john", "owner", "root", "server", "sql",
	// "support", "support_388945a0", "sys", "test2", "test3", "user4", "user5".
	// <br><br> **Minimum-length (Linux):** 1 character <br><br> **Max-length
	// (Linux):** 64 characters <br><br> **Max-length (Windows):** 20 characters
	AdminUsername *string

	// Specifies whether extension operations should be allowed on the virtual machine
	// scale set. This may only be set to False when no extensions are present on the
	// virtual machine scale set.
	AllowExtensionOperations *bool

	// Specifies the computer name prefix for all of the virtual machines in the scale
	// set. Computer name prefixes must be 1 to 15 characters long.
	ComputerNamePrefix *string

	// Specifies a base-64 encoded string of custom data. The base-64 encoded string
	// is decoded to a binary array that is saved as a file on the Virtual Machine.
	// The maximum length of the binary array is 65535 bytes. For using cloud-init for
	// your VM, see [Using cloud-init to customize a Linux VM during
	// creation](https://learn.microsoft.com/azure/virtual-machines/linux/using-cloud-init)
	CustomData *string

	// Specifies the Linux operating system settings on the virtual machine. For a
	// list of supported Linux distributions, see [Linux on Azure-Endorsed
	// Distributions](https://learn.microsoft.com/azure/virtual-machines/linux/endorsed-distros).
	LinuxConfiguration *LinuxConfiguration

	// Optional property which must either be set to True or omitted.
	RequireGuestProvisionSignal *bool

	// Specifies set of certificates that should be installed onto the virtual
	// machines in the scale set. To install certificates on a virtual machine it is
	// recommended to use the [Azure Key Vault virtual machine extension for
	// Linux](https://learn.microsoft.com/azure/virtual-machines/extensions/key-vault-linux)
	// or the [Azure Key Vault virtual machine extension for
	// Windows](https://learn.microsoft.com/azure/virtual-machines/extensions/key-vault-windows).
	Secrets []*VaultSecretGroup

	// Specifies Windows operating system settings on the virtual machine.
	WindowsConfiguration *WindowsConfiguration
}

// VirtualMachineScaleSetPublicIPAddressConfiguration - Describes a virtual machines scale set IP Configuration's PublicIPAddress
// configuration
type VirtualMachineScaleSetPublicIPAddressConfiguration struct {
	// REQUIRED; The publicIP address configuration name.
	Name *string

	// Describes a virtual machines scale set IP Configuration's PublicIPAddress
	// configuration
	Properties *VirtualMachineScaleSetPublicIPAddressConfigurationProperties

	// Describes the public IP Sku. It can only be set with OrchestrationMode as
	// Flexible.
	SKU *PublicIPAddressSKU
}

// VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings - Describes a virtual machines scale sets network configuration's
// DNS settings.
type VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings struct {
	// REQUIRED; The Domain name label.The concatenation of the domain name label and vm index
	// will be the domain name labels of the PublicIPAddress resources that will be
	// created
	DomainNameLabel *string

	// The Domain name label scope.The concatenation of the hashed domain name label
	// that generated according to the policy from domain name label scope and vm
	// index will be the domain name labels of the PublicIPAddress resources that will
	// be created
	DomainNameLabelScope *DomainNameLabelScopeTypes
}

// VirtualMachineScaleSetPublicIPAddressConfigurationProperties - Describes a virtual machines scale set IP Configuration's
// PublicIPAddress
// configuration
type VirtualMachineScaleSetPublicIPAddressConfigurationProperties struct {
	// The dns settings to be applied on the publicIP addresses .
	DNSSettings *VirtualMachineScaleSetPublicIPAddressConfigurationDNSSettings

	// Specify what happens to the public IP when the VM is deleted
	DeleteOption *DeleteOptions

	// The list of IP tags associated with the public IP address.
	IPTags []*VirtualMachineScaleSetIPTag

	// The idle timeout of the public IP address.
	IdleTimeoutInMinutes *int32

	// Available from Api-Version 2019-07-01 onwards, it represents whether the
	// specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible
	// values are: 'IPv4' and 'IPv6'.
	PublicIPAddressVersion *IPVersion

	// The PublicIPPrefix from which to allocate publicIP addresses.
	PublicIPPrefix *SubResource
}

// VirtualMachineScaleSetStorageProfile - Describes a virtual machine scale set storage profile.
type VirtualMachineScaleSetStorageProfile struct {
	// Specifies the parameters that are used to add data disks to the virtual
	// machines in the scale set. For more information about disks, see [About disks
	// and VHDs for Azure virtual
	// machines](https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview).
	DataDisks []*VirtualMachineScaleSetDataDisk

	// Specifies the disk controller type configured for the virtual machines in the scale set. Minimum api-version: 2022-08-01
	DiskControllerType *DiskControllerTypes

	// Specifies information about the image to use. You can specify information about
	// platform images, marketplace images, or virtual machine images. This element is
	// required when you want to use a platform image, marketplace image, or virtual
	// machine image, but is not used in other creation operations.
	ImageReference *ImageReference

	// Specifies information about the operating system disk used by the virtual
	// machines in the scale set. For more information about disks, see [About disks
	// and VHDs for Azure virtual
	// machines](https://learn.microsoft.com/azure/virtual-machines/managed-disks-overview).
	OSDisk *VirtualMachineScaleSetOSDisk
}

// WinRMConfiguration - Describes Windows Remote Management configuration of the VM
type WinRMConfiguration struct {
	// The list of Windows Remote Management listeners
	Listeners []*WinRMListener
}

// WinRMListener - Describes Protocol and thumbprint of Windows Remote Management listener
type WinRMListener struct {
	// This is the URL of a certificate that has been uploaded to Key Vault as a
	// secret. For adding a secret to the Key Vault, see [Add a key or secret to the
	// key
	// vault](https://learn.microsoft.com/azure/key-vault/key-vault-get-started/#add).
	// In this case, your certificate needs to be the Base64 encoding of the following
	// JSON Object which is encoded in UTF-8: <br><br> {<br>
	// "data":"<Base64-encoded-certificate>",<br> "dataType":"pfx",<br>
	// "password":"<pfx-file-password>"<br>} <br> To install certificates on a virtual
	// machine it is recommended to use the [Azure Key Vault virtual machine extension
	// for
	// Linux](https://learn.microsoft.com/azure/virtual-machines/extensions/key-vault-linux)
	// or the [Azure Key Vault virtual machine extension for
	// Windows](https://learn.microsoft.com/azure/virtual-machines/extensions/key-vault-windows).
	CertificateURL *string

	// Specifies the protocol of WinRM listener. Possible values are: **http,**
	// **https.**
	Protocol *ProtocolTypes
}

// WindowsConfiguration - Specifies Windows operating system settings on the virtual machine.
type WindowsConfiguration struct {
	// Specifies additional base-64 encoded XML formatted information that can be
	// included in the Unattend.xml file, which is used by Windows Setup.
	AdditionalUnattendContent []*AdditionalUnattendContent

	// Indicates whether Automatic Updates is enabled for the Windows virtual machine.
	// Default value is true. For virtual machine scale sets, this property can be
	// updated and updates will take effect on OS reprovisioning.
	EnableAutomaticUpdates *bool

	// Indicates whether VMAgent Platform Updates is enabled for the Windows virtual
	// machine. Default value is false.
	EnableVMAgentPlatformUpdates *bool

	// [Preview Feature] Specifies settings related to VM Guest Patching on Windows.
	PatchSettings *PatchSettings

	// Indicates whether virtual machine agent should be provisioned on the virtual
	// machine. When this property is not specified in the request body, it is set to
	// true by default. This will ensure that VM Agent is installed on the VM so that
	// extensions can be added to the VM later.
	ProvisionVMAgent *bool

	// Specifies the time zone of the virtual machine. e.g. "Pacific Standard Time".
	// Possible values can be
	// [TimeZoneInfo.Id](https://learn.microsoft.com/dotnet/api/system.timezoneinfo.id?#System_TimeZoneInfo_Id)
	// value from time zones returned by
	// [TimeZoneInfo.GetSystemTimeZones](https://learn.microsoft.com/dotnet/api/system.timezoneinfo.getsystemtimezones).
	TimeZone *string

	// Specifies the Windows Remote Management listeners. This enables remote Windows
	// PowerShell.
	WinRM *WinRMConfiguration
}

// WindowsVMGuestPatchAutomaticByPlatformSettings - Specifies additional settings to be applied when patch mode AutomaticByPlatform
// is selected in Windows patch settings.
type WindowsVMGuestPatchAutomaticByPlatformSettings struct {
	// Enables customer to schedule patching without accidental upgrades
	BypassPlatformSafetyChecksOnUserSchedule *bool

	// Specifies the reboot setting for all AutomaticByPlatform patch installation
	// operations.
	RebootSetting *WindowsVMGuestPatchAutomaticByPlatformRebootSetting
}

// ZoneAllocationPolicy for Compute Fleet.
type ZoneAllocationPolicy struct {
	// REQUIRED; Distribution strategy used for zone allocation policy.
	DistributionStrategy *ZoneDistributionStrategy

	// Zone preferences, required when zone distribution strategy is Prioritized.
	ZonePreferences []*ZonePreference
}

// ZonePreference - Zone preferences for Compute Fleet zone allocation policy.
type ZonePreference struct {
	// REQUIRED; Name of the zone.
	Zone *string

	// The rank of the zone. This is used with 'Prioritized' ZoneDistributionStrategy.
	// The lower the number, the higher the priority, starting with 0.
	// 0 is the highest rank. If not specified, defaults to lowest rank.
	Rank *int32
}
