// 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 armazurestackhcivm

import "time"

// AttestationStatus - The attestation status of the virtual machine
type AttestationStatus struct {
	// The resource-specific properties for this resource.
	Properties *AttestationStatusProperties

	// 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
}

// AttestationStatusProperties - Defines the attestation status properties
type AttestationStatusProperties struct {
	// READ-ONLY; The managed disk security encryption type from attestation token. This only applies to Confidential VM.
	AttestDiskSecurityEncryptionType *AttestDiskSecurityEncryptionTypeEnum

	// READ-ONLY; The hardware platform information from attestation token. This only applies to Confidential VM.
	AttestHardwarePlatform *AttestHWPlatformEnum

	// READ-ONLY; The status of whether secure boot is enabled.
	AttestSecureBootEnabled *AttestSecureBootPropertyEnum

	// READ-ONLY; The status of whether attestation certificate is validated.
	AttestationCertValidated *AttestCertPropertyEnum

	// READ-ONLY; The status of whether the list of boot integrity properties is validated.
	BootIntegrityValidated *AttestBootIntegrityPropertyEnum

	// READ-ONLY; The error message of attestation validation and parsing
	ErrorMessage *string

	// READ-ONLY; The health status of attestation validation and parsing
	HealthStatus *AttestHealthStatusEnum

	// READ-ONLY; kernel version string for Linux VM.
	LinuxKernelVersion *string

	// READ-ONLY; Provisioning state of the virtual machine instance.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The time stamp of the last time attestation token is validated by relying party service.
	Timestamp *string
}

// ErrorAdditionalInfo - The resource management error additional info.
type ErrorAdditionalInfo struct {
	// READ-ONLY; The additional info.
	Info any

	// READ-ONLY; The additional info type.
	Type *string
}

// ErrorDetail - The error detail.
type ErrorDetail struct {
	// READ-ONLY; The error additional info.
	AdditionalInfo []*ErrorAdditionalInfo

	// READ-ONLY; The error code.
	Code *string

	// READ-ONLY; The error details.
	Details []*ErrorDetail

	// READ-ONLY; The error message.
	Message *string

	// READ-ONLY; The error target.
	Target *string
}

// ExtendedLocation - The complex type of the extended location.
type ExtendedLocation struct {
	// The name of the extended location.
	Name *string

	// The type of the extended location.
	Type *ExtendedLocationTypes
}

// GalleryImage - The gallery images resource definition.
type GalleryImage struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// Resource tags.
	Tags map[string]*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
}

// GalleryImageIdentifier - This is the gallery image definition identifier.
type GalleryImageIdentifier struct {
	// REQUIRED; The name of the gallery image definition offer.
	Offer *string

	// REQUIRED; The name of the gallery image definition publisher.
	Publisher *string

	// REQUIRED; The name of the gallery image definition SKU.
	SKU *string
}

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

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

// GalleryImageProperties - Properties under the gallery image resource
type GalleryImageProperties struct {
	// REQUIRED; Operating system type that the gallery image uses [Windows, Linux]
	OSType *OperatingSystemTypes

	// Datasource for the gallery image when provisioning with cloud-init [NoCloud, Azure]
	CloudInitDataSource *CloudInitDataSource

	// Storage ContainerID of the storage container to be used for gallery image
	ContainerID *string

	// The hypervisor generation of the Virtual Machine [V1, V2]
	HyperVGeneration *HyperVGeneration

	// This is the gallery image definition identifier.
	Identifier *GalleryImageIdentifier

	// location of the image the gallery image should be created from
	ImagePath *string

	// Resource ID of the source virtual machine from whose OS disk the gallery image is created.
	SourceVirtualMachineID *string

	// The credentials used to login to the image repository that has access to the specified image
	VMImageRepositoryCredentials *VMImageRepositoryCredentials

	// Specifies information about the gallery image version that you want to create or update.
	Version *GalleryImageVersion

	// READ-ONLY; Provisioning state of the gallery image.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of gallery images
	Status *GalleryImageStatus
}

// GalleryImageStatus - The observed state of gallery images
type GalleryImageStatus struct {
	// The download status of the gallery image
	DownloadStatus *GalleryImageStatusDownloadStatus

	// GalleryImage provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// The progress of the operation in percentage
	ProgressPercentage *int64

	// provisioning status of the gallery image
	ProvisioningStatus *GalleryImageStatusProvisioningStatus
}

// GalleryImageStatusDownloadStatus - The download status of the gallery image
type GalleryImageStatusDownloadStatus struct {
	// The downloaded sized of the image in MB
	DownloadSizeInMB *int64
}

// GalleryImageStatusProvisioningStatus - The status of the operation performed on the gallery image
type GalleryImageStatusProvisioningStatus struct {
	// The ID of the operation performed on the gallery image
	OperationID *string

	// The status of the operation performed on the gallery image [Succeeded, Failed, InProgress]
	Status *Status
}

// GalleryImageTagsUpdate - The type used for updating tags in GalleryImage resources.
type GalleryImageTagsUpdate struct {
	// Resource tags.
	Tags map[string]*string
}

// GalleryImageVersion - Specifies information about the gallery image version that you want to create or update.
type GalleryImageVersion struct {
	// This is the version of the gallery image.
	Name *string

	// Describes the properties of a gallery image version.
	Properties *GalleryImageVersionProperties
}

// GalleryImageVersionProperties - Describes the properties of a gallery image version.
type GalleryImageVersionProperties struct {
	// REQUIRED; This is the storage profile of a Gallery Image Version.
	StorageProfile *GalleryImageVersionStorageProfile
}

// GalleryImageVersionStorageProfile - This is the storage profile of a Gallery Image Version.
type GalleryImageVersionStorageProfile struct {
	// This is the OS disk image.
	OSDiskImage *GalleryOSDiskImage
}

// GalleryOSDiskImage - This is the OS disk image.
type GalleryOSDiskImage struct {
	// READ-ONLY; This property indicates the size of the VHD to be created.
	SizeInMB *int64
}

// GuestAgent - Defines the GuestAgent.
type GuestAgent struct {
	// The resource-specific properties for this resource.
	Properties *GuestAgentProperties

	// 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
}

// GuestAgentInstallStatus - Defines the status of a guest agent installation.
type GuestAgentInstallStatus struct {
	// READ-ONLY; The hybrid machine agent full version.
	AgentVersion *string

	// READ-ONLY; Details about the error state.
	ErrorDetails []*ErrorDetail

	// READ-ONLY; The time of the last status change.
	LastStatusChange *time.Time

	// READ-ONLY; The installation status of the hybrid machine agent installation.
	Status *StatusTypes

	// READ-ONLY; Specifies the VM's unique SMBIOS ID.
	VMUUID *string
}

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

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

// GuestAgentProperties - Defines the resource properties.
type GuestAgentProperties struct {
	// Username / Password Credentials to provision guest agent.
	Credentials *GuestCredential

	// The guest agent provisioning action.
	ProvisioningAction *ProvisioningAction

	// READ-ONLY; Provisioning state of the virtual machine instance.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The guest agent status.
	Status *string
}

// GuestCredential - Username / Password Credentials to connect to guest.
type GuestCredential struct {
	// The password to connect with the guest.
	Password *string

	// The username to connect with the guest.
	Username *string
}

// HTTPProxyConfiguration - HTTP Proxy configuration for the VM.
type HTTPProxyConfiguration struct {
	// The HTTP proxy server endpoint to use.
	HTTPProxy *string

	// The HTTPS proxy server endpoint to use.
	HTTPSProxy *string

	// The endpoints that should not go through proxy.
	NoProxy []*string

	// Alternative CA cert to use for connecting to proxy servers.
	TrustedCa *string
}

// HardwareProfileUpdate - HardwareProfile - Specifies the hardware settings for the virtual machine instance.
type HardwareProfileUpdate struct {
	// RAM in MB for the virtual machine instance
	MemoryMB *int64

	// number of processors for the virtual machine instance
	Processors *int32

	// VM Size Enum
	VMSize *VMSizeEnum

	// virtualMachineGPUs - updated list of GPUs on the virtual machine instance
	VirtualMachineGPUs []*VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPU
}

// HybridIdentityMetadata - Defines the HybridIdentityMetadata.
type HybridIdentityMetadata struct {
	// The resource-specific properties for this resource.
	Properties *HybridIdentityMetadataProperties

	// 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
}

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

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

// HybridIdentityMetadataProperties - Defines the resource properties.
type HybridIdentityMetadataProperties struct {
	// The Public Key.
	PublicKey *string

	// The unique identifier for the resource.
	ResourceUID *string

	// READ-ONLY; Identity for the resource.
	Identity *Identity

	// READ-ONLY; Provisioning state of the virtual machine instance.
	ProvisioningState *ProvisioningStateEnum
}

// IPConfiguration - InterfaceIPConfiguration IPConfiguration in a network interface.
type IPConfiguration struct {
	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
	Name *string

	// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
	Properties *IPConfigurationProperties
}

// IPConfigurationProperties - InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
type IPConfigurationProperties struct {
	// PrivateIPAddress - Private IP address of the IP configuration.
	PrivateIPAddress *string

	// Subnet - Name of Subnet bound to the IP configuration.
	Subnet *LogicalNetworkArmReference

	// READ-ONLY; Gateway for network interface
	Gateway *string

	// READ-ONLY; prefixLength for network interface
	PrefixLength *string
}

// IPPool - Describes IPPool
type IPPool struct {
	// End of the IP address pool
	End *string

	// Type of the IP Pool [vm, vippool]
	IPPoolType *IPPoolTypeEnum

	// IPPool info
	Info *IPPoolInfo

	// Name of the IP-Pool
	Name *string

	// Start of the IP address pool
	Start *string
}

// IPPoolInfo - IP Pool info
type IPPoolInfo struct {
	// READ-ONLY; Number of IP addresses available in the IP Pool
	Available *string

	// READ-ONLY; Number of IP addresses allocated from the IP Pool
	Used *string
}

// Identity for the resource.
type Identity struct {
	// FLAG; CONSTANT; The identity type.
	// Field has constant value "SystemAssigned", any specified value is ignored.
	Type *string

	// READ-ONLY; The principal ID of resource identity. The value must be an UUID.
	PrincipalID *string

	// READ-ONLY; The tenant ID of resource. The value must be an UUID.
	TenantID *string
}

// ImageArmReference - The ARM ID for a Gallery Image.
type ImageArmReference struct {
	// The ARM ID for an image resource used by the virtual machine instance.
	ID *string
}

// InstanceViewStatus - Instance view status.
type InstanceViewStatus struct {
	// The status code.
	Code *string

	// The short localizable label for the status.
	DisplayStatus *string

	// The level code.
	Level *StatusLevelTypes

	// The detailed status message, including for alerts and error messages.
	Message *string

	// The time of the status.
	Time *time.Time
}

// InterfaceDNSSettings - DNS Settings of the interface
type InterfaceDNSSettings struct {
	// List of DNS server IP Addresses for the interface
	DNSServers []*string
}

// LogicalNetwork - The logical network resource definition.
type LogicalNetwork struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// Resource tags.
	Tags map[string]*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
}

// LogicalNetworkArmReference - The ARM ID for a Logical Network.
type LogicalNetworkArmReference struct {
	// The ARM ID for a Logical Network.
	ID *string
}

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

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

// LogicalNetworkProperties - Properties under the logical network resource
type LogicalNetworkProperties struct {
	// DhcpOptions contains an array of DNS servers available to VMs deployed in the logical network. Standard DHCP option for
	// a subnet overrides logical network DHCP options.
	DhcpOptions *LogicalNetworkPropertiesDhcpOptions

	// Subnet - list of subnets under the logical network
	Subnets []*Subnet

	// name of the network switch to be used for VMs
	VMSwitchName *string

	// READ-ONLY; Type of the Logical Network
	NetworkType *LogicalNetworkTypeEnum

	// READ-ONLY; Provisioning state of the logical network.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of logical networks
	Status *LogicalNetworkStatus
}

// LogicalNetworkPropertiesDhcpOptions - DhcpOptions contains an array of DNS servers available to VMs deployed in the logical
// network. Standard DHCP option for a subnet overrides logical network DHCP options.
type LogicalNetworkPropertiesDhcpOptions struct {
	// The list of DNS servers IP addresses.
	DNSServers []*string
}

// LogicalNetworkStatus - The observed state of logical networks
type LogicalNetworkStatus struct {
	// LogicalNetwork provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// Logical network provisioning status
	ProvisioningStatus *LogicalNetworkStatusProvisioningStatus
}

// LogicalNetworkStatusProvisioningStatus - Describes the status of the provisioning.
type LogicalNetworkStatusProvisioningStatus struct {
	// The ID of the operation performed on the logical network
	OperationID *string

	// The status of the operation performed on the logical network [Succeeded, Failed, InProgress]
	Status *Status
}

// LogicalNetworksUpdateRequest - The logical network resource patch definition.
type LogicalNetworksUpdateRequest struct {
	// Resource tags
	Tags map[string]*string
}

// 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
}

// MarketplaceGalleryImage - The marketplace gallery image resource definition.
type MarketplaceGalleryImage struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// Resource tags.
	Tags map[string]*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
}

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

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

// MarketplaceGalleryImageProperties - Properties under the marketplace gallery image resource
type MarketplaceGalleryImageProperties struct {
	// REQUIRED; Operating system type that the gallery image uses [Windows, Linux]
	OSType *OperatingSystemTypes

	// Datasource for the gallery image when provisioning with cloud-init [NoCloud, Azure]
	CloudInitDataSource *CloudInitDataSource

	// Storage ContainerID of the storage container to be used for marketplace gallery image
	ContainerID *string

	// The hypervisor generation of the Virtual Machine [V1, V2]
	HyperVGeneration *HyperVGeneration

	// This is the gallery image definition identifier.
	Identifier *GalleryImageIdentifier

	// Specifies information about the gallery image version that you want to create or update.
	Version *GalleryImageVersion

	// READ-ONLY; Provisioning state of the marketplace gallery image.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of marketplace gallery images
	Status *MarketplaceGalleryImageStatus
}

// MarketplaceGalleryImageStatus - The observed state of marketplace gallery images
type MarketplaceGalleryImageStatus struct {
	// The download status of the gallery image
	DownloadStatus *MarketplaceGalleryImageStatusDownloadStatus

	// MarketplaceGalleryImage provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// The progress of the operation in percentage
	ProgressPercentage *int64

	// Provisioning status of marketplace gallery image
	ProvisioningStatus *MarketplaceGalleryImageStatusProvisioningStatus
}

// MarketplaceGalleryImageStatusDownloadStatus - The download status of the gallery image
type MarketplaceGalleryImageStatusDownloadStatus struct {
	// The downloaded sized of the image in MB
	DownloadSizeInMB *int64
}

// MarketplaceGalleryImageStatusProvisioningStatus - Marketplace GalleryImage provisioning status
type MarketplaceGalleryImageStatusProvisioningStatus struct {
	// The ID of the operation performed on the gallery image
	OperationID *string

	// The status of the operation performed on the gallery image [Succeeded, Failed, InProgress]
	Status *Status
}

// MarketplaceGalleryImageTagsUpdate - The type used for updating tags in MarketplaceGalleryImage resources.
type MarketplaceGalleryImageTagsUpdate struct {
	// Resource tags.
	Tags map[string]*string
}

// NetworkInterface - The network interface resource definition.
type NetworkInterface struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// Resource tags.
	Tags map[string]*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
}

// NetworkInterfaceArmReference - The ARM ID for a Network Interface.
type NetworkInterfaceArmReference struct {
	// The ARM ID for a Network Interface.
	ID *string
}

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

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

// NetworkInterfaceProperties - Properties under the network interface resource
type NetworkInterfaceProperties struct {
	// Boolean indicating whether this is a existing local network interface or if one should be created.
	CreateFromLocal *bool

	// DNS Settings for the interface
	DNSSettings *InterfaceDNSSettings

	// IPConfigurations - A list of IPConfigurations of the network interface.
	IPConfigurations []*IPConfiguration

	// MacAddress - The MAC address of the network interface.
	MacAddress *string

	// NetworkSecurityGroup - Network Security Group attached to the network interface.
	NetworkSecurityGroup *NetworkSecurityGroupArmReference

	// READ-ONLY; Provisioning state of the network interface.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of network interfaces
	Status *NetworkInterfaceStatus
}

// NetworkInterfaceStatus - The observed state of network interfaces
type NetworkInterfaceStatus struct {
	// NetworkInterface provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// Network interface provisioning status
	ProvisioningStatus *NetworkInterfaceStatusProvisioningStatus
}

// NetworkInterfaceStatusProvisioningStatus - Network interface provisioning status
type NetworkInterfaceStatusProvisioningStatus struct {
	// The ID of the operation performed on the network interface
	OperationID *string

	// The status of the operation performed on the network interface [Succeeded, Failed, InProgress]
	Status *Status
}

// NetworkInterfacesUpdateProperties - Defines the resource properties for the update.
type NetworkInterfacesUpdateProperties struct {
	// DNS Settings for the interface
	DNSSettings *InterfaceDNSSettings

	// NetworkSecurityGroup - Network Security Group attached to the network interface.
	NetworkSecurityGroup *NetworkSecurityGroupArmReference
}

// NetworkInterfacesUpdateRequest - The network interface resource patch definition.
type NetworkInterfacesUpdateRequest struct {
	// Defines the resource properties for the update.
	Properties *NetworkInterfacesUpdateProperties

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

// NetworkProfileUpdate - NetworkProfile - describes the network update configuration the virtual machine instance
type NetworkProfileUpdate struct {
	// NetworkInterfaces - list of network interfaces to be attached to the virtual machine instance
	NetworkInterfaces []*NetworkInterfaceArmReference
}

// NetworkSecurityGroup resource.
type NetworkSecurityGroup struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

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

	// READ-ONLY; If eTag is provided in the response body, it may also be provided as a header per the normal etag convention.
	// Entity tags are used for comparing two or more entities from the same requested resource. HTTP/1.1 uses entity tags in
	// the etag (section 14.19), If-Match (section 14.24), If-None-Match (section 14.26), and If-Range (section 14.27) header
	// fields.
	ETag *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
}

// NetworkSecurityGroupArmReference - The ARM ID for a Network Security Group.
type NetworkSecurityGroupArmReference struct {
	// The ARM ID for a Network Security Group.
	ID *string
}

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

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

// NetworkSecurityGroupProperties - Network Security Group resource.
type NetworkSecurityGroupProperties struct {
	// READ-ONLY; A collection of references to network interfaces that are currently using this NSG.
	NetworkInterfaces []*NetworkInterfaceArmReference

	// READ-ONLY; The provisioning state of the network security group resource.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of Network Security Group
	Status *NetworkSecurityGroupStatus

	// READ-ONLY; A collection of references to logical networks that are currently using this NSG
	Subnets []*LogicalNetworkArmReference
}

// NetworkSecurityGroupStatus - The observed state of network security group
type NetworkSecurityGroupStatus struct {
	// NetworkSecurityGroup provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// network security group provisioning status
	ProvisioningStatus *NetworkSecurityGroupStatusProvisioningStatus
}

// NetworkSecurityGroupStatusProvisioningStatus - network security group provisioning status
type NetworkSecurityGroupStatusProvisioningStatus struct {
	// The ID of the operation performed on the network security group
	OperationID *string

	// The status of the operation performed on the network security group [Succeeded, Failed, InProgress]
	Status *Status
}

// NetworkSecurityGroupTagsUpdate - The type used for updating tags in NetworkSecurityGroup resources.
type NetworkSecurityGroupTagsUpdate struct {
	// Resource tags.
	Tags map[string]*string
}

// OsProfileUpdate - OsProfile - describes the update configuration of the operating system
type OsProfileUpdate struct {
	// ComputerName - name of the computer
	ComputerName *string

	// Linux configuration properties
	LinuxConfiguration *OsProfileUpdateLinuxConfiguration

	// Windows configuration properties
	WindowsConfiguration *OsProfileUpdateWindowsConfiguration
}

// OsProfileUpdateLinuxConfiguration - OSProfile update linux configuration
type OsProfileUpdateLinuxConfiguration struct {
	// Used to indicate whether Arc for Servers agent onboarding should be triggered during the virtual machine instance creation
	// process.
	ProvisionVMAgent *bool

	// Used to indicate whether the VM Config Agent should be installed during the virtual machine creation process.
	ProvisionVMConfigAgent *bool
}

// OsProfileUpdateWindowsConfiguration - OSProfile update windows configuration
type OsProfileUpdateWindowsConfiguration struct {
	// Used to indicate whether Arc for Servers agent onboarding should be triggered during the virtual machine instance creation
	// process.
	ProvisionVMAgent *bool

	// Used to indicate whether the VM Config Agent should be installed during the virtual machine creation process.
	ProvisionVMConfigAgent *bool
}

// Route - Route resource.
type Route struct {
	// Name - name of the subnet
	Name *string

	// Properties of the route.
	Properties *RouteProperties
}

// RoutePropertiesFormat - Route resource.
type RouteProperties struct {
	// The destination CIDR to which the route applies.
	AddressPrefix *string

	// The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
	NextHopIPAddress *string
}

// RouteTable - Route table resource.
type RouteTable struct {
	// Properties of the route table.
	Properties *RouteTableProperties

	// READ-ONLY; A unique read-only string that changes whenever the resource is updated.
	Etag *string

	// READ-ONLY; Resource name.
	Name *string

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

// RouteTablePropertiesFormat - Route Table resource.
type RouteTableProperties struct {
	// Collection of routes contained within a route table.
	Routes []*Route
}

// 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. <br><br> 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
}

// SecurityRule - Security Rule resource.
type SecurityRule struct {
	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// 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
}

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

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

// SecurityRuleProperties - Security rule resource.
type SecurityRuleProperties struct {
	// REQUIRED; The network traffic is allowed or denied.
	Access *SecurityRuleAccess

	// REQUIRED; The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic.
	Direction *SecurityRuleDirection

	// REQUIRED; The priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each
	// rule in the collection. The lower the priority number, the higher the priority of the rule.
	Priority *int32

	// REQUIRED; Network protocol this rule applies to.
	Protocol *SecurityRuleProtocol

	// A description for this rule. Restricted to 140 chars.
	Description *string

	// The destination address prefixes. CIDR or destination IP ranges.
	DestinationAddressPrefixes []*string

	// The destination port ranges. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
	DestinationPortRanges []*string

	// The CIDR or source IP ranges.
	SourceAddressPrefixes []*string

	// The source port ranges. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
	SourcePortRanges []*string

	// READ-ONLY; Provisioning state of the SR
	ProvisioningState *ProvisioningStateEnum
}

// StorageContainer - The storage container resource definition.
type StorageContainer struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// Resource tags.
	Tags map[string]*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
}

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

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

// StorageContainerProperties - Properties under the storage container resource
type StorageContainerProperties struct {
	// REQUIRED; Path of the storage container on the disk
	Path *string

	// READ-ONLY; Provisioning state of the storage container.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of storage containers
	Status *StorageContainerStatus
}

// StorageContainerStatus - The observed state of storage containers
type StorageContainerStatus struct {
	// Amount of space available on the disk in MB
	AvailableSizeMB *int64

	// Total size of the disk in MB
	ContainerSizeMB *int64

	// StorageContainer provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// Storage container's provisioning status
	ProvisioningStatus *StorageContainerStatusProvisioningStatus
}

// StorageContainerStatusProvisioningStatus - Storage container provisioning status
type StorageContainerStatusProvisioningStatus struct {
	// The ID of the operation performed on the storage container
	OperationID *string

	// The status of the operation performed on the storage container [Succeeded, Failed, InProgress]
	Status *Status
}

// StorageContainerTagsUpdate - The type used for updating tags in StorageContainer resources.
type StorageContainerTagsUpdate struct {
	// Resource tags.
	Tags map[string]*string
}

// StorageProfileUpdate - Storage profile update
type StorageProfileUpdate struct {
	// adds data disks to the virtual machine instance for the update call
	DataDisks []*VirtualHardDiskArmReference
}

// Subnet - Properties of the subnet.
type Subnet struct {
	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
	Name *string

	// Properties of the subnet.
	Properties *SubnetProperties
}

// SubnetIPConfigurationReference - The ARM ID for a Network Interface.
type SubnetIPConfigurationReference struct {
	// The ARM ID for a Network Interface.
	ID *string
}

// SubnetProperties - Properties of the subnet.
type SubnetProperties struct {
	// The address prefix for the subnet: Cidr for this subnet - IPv4, IPv6.
	AddressPrefix *string

	// List of address prefixes for the subnet.
	AddressPrefixes []*string

	// IPAllocationMethod - The IP address allocation method. Possible values include: 'Static', 'Dynamic'
	IPAllocationMethod *IPAllocationMethodEnum

	// IPConfigurationReferences - list of IPConfigurationReferences
	IPConfigurationReferences []*SubnetIPConfigurationReference

	// network associated pool of IP Addresses
	IPPools []*IPPool

	// NetworkSecurityGroup - Network Security Group attached to the logical network.
	NetworkSecurityGroup *NetworkSecurityGroupArmReference

	// Route table resource.
	RouteTable *RouteTable

	// Vlan to use for the subnet
	Vlan *int32
}

// 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
}

// 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
}

// VMDiskSecurityProfile - Specifies the security profile settings for the managed disk. NOTE: It can only be set for Confidential
// VMs
type VMDiskSecurityProfile struct {
	// Specifies the EncryptionType of the managed disk. It is set to NonPersistedTPM for not persisting firmware state in the
	// VMGuestState blob. NOTE: It can be set for only Confidential VMs.
	SecurityEncryptionType *SecurityEncryptionType
}

// VMImageRepositoryCredentials - The credentials used to login to the image repository that has access to the specified image
type VMImageRepositoryCredentials struct {
	// REQUIRED; Password for accessing image repository
	Password *string

	// REQUIRED; Username for accessing image repository
	Username *string
}

// VirtualHardDisk - The virtual hard disk resource definition.
type VirtualHardDisk struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

	// Resource tags.
	Tags map[string]*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
}

// VirtualHardDiskArmReference - The ARM ID for a Virtual Hard Disk.
type VirtualHardDiskArmReference struct {
	// The ARM ID for a Virtual Hard Disk.
	ID *string
}

// VirtualHardDiskDownloadStatus - The download status of the virtual hard disk
type VirtualHardDiskDownloadStatus struct {
	// The downloaded sized of the virtual hard disk in MB
	DownloadedSizeInMB *int64

	// The progress of the operation in percentage
	ProgressPercentage *int64

	// The status of Uploading virtual hard disk [Succeeded, Failed, InProgress]
	Status *Status
}

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

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

// VirtualHardDiskProperties - Properties under the virtual hard disk resource
type VirtualHardDiskProperties struct {
	// Block size in bytes
	BlockSizeBytes *int32

	// Storage ContainerID of the storage container to be used for VHD
	ContainerID *string

	// Boolean indicating whether it is an existing local hard disk or if one should be created.
	CreateFromLocal *bool

	// The format of the actual VHD file [vhd, vhdx]
	DiskFileFormat *DiskFileFormat

	// Size of the disk in GB
	DiskSizeGB *int64

	// URL for downloading or accessing the virtual hard disk. This URL points to a secure link from where the VHD can be downloaded
	// or accessed directly.
	DownloadURL *string

	// Boolean for enabling dynamic sizing on the virtual hard disk
	Dynamic *bool

	// The hypervisor generation of the Virtual Machine [V1, V2]
	HyperVGeneration *HyperVGeneration

	// Logical sector in bytes
	LogicalSectorBytes *int32

	// The maximum number of VMs that can attach to the disk at the same time. Value greater than one indicates a disk that can
	// be mounted on multiple VMs at the same time.
	MaxShares *int64

	// Physical sector in bytes
	PhysicalSectorBytes *int32

	// READ-ONLY; Provisioning state of the virtual hard disk.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of virtual hard disks
	Status *VirtualHardDiskStatus
}

// VirtualHardDiskStatus - The observed state of virtual hard disks
type VirtualHardDiskStatus struct {
	// The download status of the virtual hard disk
	DownloadStatus *VirtualHardDiskDownloadStatus

	// VirtualHardDisk provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// ARM IDs of the VMs that are consuming the VHD.
	ManagedBy []*string

	// Provisioning status of the vhd
	ProvisioningStatus *VirtualHardDiskStatusProvisioningStatus

	// Unique Guid identifying the resource.
	UniqueID *string

	// The upload status of the virtual hard disk
	UploadStatus *VirtualHardDiskUploadStatus
}

// VirtualHardDiskStatusProvisioningStatus - VHD Status provisioning status
type VirtualHardDiskStatusProvisioningStatus struct {
	// The ID of the operation performed on the virtual hard disk
	OperationID *string

	// The status of the operation performed on the virtual hard disk [Succeeded, Failed, InProgress]
	Status *Status
}

// VirtualHardDiskUploadRequest - Request for uploading virtual hard disk.
type VirtualHardDiskUploadRequest struct {
	// REQUIRED; The Azure managed disk SAS URL to upload the virtual hard disk to.
	AzureManagedDiskUploadURL *string
}

// VirtualHardDiskUploadResponse - Response for uploading virtual hard disk.
type VirtualHardDiskUploadResponse struct {
	// The upload status of the virtual hard disk
	UploadStatus *VirtualHardDiskUploadStatus

	// The ARM ID for a Virtual Hard Disk.
	VirtualHardDiskID *string
}

// VirtualHardDiskUploadStatus - The upload status of the virtual hard disk
type VirtualHardDiskUploadStatus struct {
	// VirtualHardDisk upload error code
	ErrorCode *string

	// Descriptive upload error message
	ErrorMessage *string

	// The progress of the operation in percentage
	ProgressPercentage *int64

	// The status of Uploading virtual hard disk [Succeeded, Failed, InProgress]
	Status *Status

	// The uploaded sized of the virtual hard disk in MB
	UploadedSizeInMB *int64
}

// VirtualHardDisksUpdateProperties - Defines the resource properties for the update.
type VirtualHardDisksUpdateProperties struct {
	// Size of the disk in GB
	DiskSizeGB *int64
}

// VirtualHardDisksUpdateRequest - The virtual hard disk resource patch definition.
type VirtualHardDisksUpdateRequest struct {
	// Defines the resource properties for the update.
	Properties *VirtualHardDisksUpdateProperties

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

// VirtualMachineConfigAgentInstanceView - The instance view of the VM Config Agent running on the virtual machine.
type VirtualMachineConfigAgentInstanceView struct {
	// The resource status information.
	Statuses []*InstanceViewStatus

	// The VM Config Agent full version.
	VMConfigAgentVersion *string
}

// VirtualMachineInstance - The virtual machine instance resource definition.
type VirtualMachineInstance struct {
	// The extendedLocation of the resource.
	ExtendedLocation *ExtendedLocation

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

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

	// 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
}

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

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

// VirtualMachineInstanceManagedDiskParameters - The parameters of a managed disk.
type VirtualMachineInstanceManagedDiskParameters struct {
	// Specifies the security profile for the managed disk.
	SecurityProfile *VMDiskSecurityProfile
}

// VirtualMachineInstanceProperties - Properties under the virtual machine instance resource
type VirtualMachineInstanceProperties struct {
	// Boolean indicating whether this is an existing local virtual machine or if one should be created.
	CreateFromLocal *bool

	// Guest agent install status.
	GuestAgentInstallStatus *GuestAgentInstallStatus

	// HTTP Proxy configuration for the VM.
	HTTPProxyConfig *HTTPProxyConfiguration

	// HardwareProfile - Specifies the hardware settings for the virtual machine instance.
	HardwareProfile *VirtualMachineInstancePropertiesHardwareProfile

	// NetworkProfile - describes the network configuration the virtual machine instance
	NetworkProfile *VirtualMachineInstancePropertiesNetworkProfile

	// OsProfile - describes the configuration of the operating system and sets login data
	OSProfile *VirtualMachineInstancePropertiesOsProfile

	// PlacementProfile - Specifies the placement related settings for the virtual machine.
	PlacementProfile *VirtualMachineInstancePropertiesPlacementProfile

	// Unique identifier defined by ARC to identify the guest of the VM.
	ResourceUID *string

	// SecurityProfile - Specifies the security settings for the virtual machine instance.
	SecurityProfile *VirtualMachineInstancePropertiesSecurityProfile

	// StorageProfile - contains information about the disks and storage information for the virtual machine instance
	StorageProfile *VirtualMachineInstancePropertiesStorageProfile

	// READ-ONLY; Name of the host node that the VM is on.
	HostNodeIPAddress *string

	// READ-ONLY; Name of the host node that the VM is on.
	HostNodeName *string

	// READ-ONLY; Unique identifier for the Hyper-V VM resource.
	HyperVVMID *string

	// READ-ONLY; The virtual machine instance view.
	InstanceView *VirtualMachineInstanceView

	// READ-ONLY; Provisioning state of the virtual machine instance.
	ProvisioningState *ProvisioningStateEnum

	// READ-ONLY; The observed state of virtual machine instances
	Status *VirtualMachineInstanceStatus

	// READ-ONLY; Unique identifier for the vm resource.
	VMID *string
}

// VirtualMachineInstancePropertiesHardwareProfile - HardwareProfile - Specifies the hardware settings for the virtual machine
// instance.
type VirtualMachineInstancePropertiesHardwareProfile struct {
	// Dynamic memory config
	DynamicMemoryConfig *VirtualMachineInstancePropertiesHardwareProfileDynamicMemoryConfig

	// RAM in MB for the virtual machine instance
	MemoryMB *int64

	// number of processors for the virtual machine instance
	Processors *int32

	// Enum of VM Sizes
	VMSize *VMSizeEnum

	// virtualMachineGPUs - list of gpus to be attached to the virtual machine instance
	VirtualMachineGPUs []*VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPU
}

// VirtualMachineInstancePropertiesHardwareProfileDynamicMemoryConfig - Dynamic memory config
type VirtualMachineInstancePropertiesHardwareProfileDynamicMemoryConfig struct {
	// Maximum memory in MB
	MaximumMemoryMB *int64

	// Minimum memory in MB
	MinimumMemoryMB *int64

	// Defines the amount of extra memory that should be reserved for a virtual machine instance at runtime, as a percentage of
	// the total memory that the virtual machine instance is thought to need. This only applies to virtual systems with dynamic
	// memory enabled. This property can be in the range of 5 to 2000.
	TargetMemoryBuffer *int32
}

// VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPU - GPU properties - describes the GPU configuration.
type VirtualMachineInstancePropertiesHardwareProfileVirtualMachineGPU struct {
	// REQUIRED; GPU assignment type
	AssignmentType *GpuAssignmentTypeEnum

	// Name of the GPU
	GpuName *string

	// Size of gpu partition in MB for GPU-P
	PartitionSizeMB *int64
}

// VirtualMachineInstancePropertiesNetworkProfile - NetworkProfile - describes the network configuration the virtual machine
// instance
type VirtualMachineInstancePropertiesNetworkProfile struct {
	// NetworkInterfaces - list of network interfaces to be attached to the virtual machine instance
	NetworkInterfaces []*NetworkInterfaceArmReference
}

// VirtualMachineInstancePropertiesOsProfile - OsProfile - describes the configuration of the operating system and sets login
// data
type VirtualMachineInstancePropertiesOsProfile struct {
	// AdminPassword - admin password
	AdminPassword *string

	// AdminUsername - admin username
	AdminUsername *string

	// ComputerName - name of the compute
	ComputerName *string

	// LinuxConfiguration - linux specific configuration values for the virtual machine instance
	LinuxConfiguration *VirtualMachineInstancePropertiesOsProfileLinuxConfiguration

	// Windows Configuration for the virtual machine instance
	WindowsConfiguration *VirtualMachineInstancePropertiesOsProfileWindowsConfiguration
}

// VirtualMachineInstancePropertiesOsProfileLinuxConfiguration - LinuxConfiguration - linux specific configuration values
// for the virtual machine instance
type VirtualMachineInstancePropertiesOsProfileLinuxConfiguration struct {
	// DisablePasswordAuthentication - whether password authentication should be disabled
	DisablePasswordAuthentication *bool

	// Used to indicate whether Arc for Servers agent onboarding should be triggered during the virtual machine instance creation
	// process.
	ProvisionVMAgent *bool

	// Used to indicate whether the VM Config Agent should be installed during the virtual machine creation process.
	ProvisionVMConfigAgent *bool

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

// VirtualMachineInstancePropertiesOsProfileWindowsConfiguration - Windows Configuration for the virtual machine instance
type VirtualMachineInstancePropertiesOsProfileWindowsConfiguration struct {
	// Whether to EnableAutomaticUpdates on the machine
	EnableAutomaticUpdates *bool

	// Used to indicate whether Arc for Servers agent onboarding should be triggered during the virtual machine instance creation
	// process.
	ProvisionVMAgent *bool

	// Used to indicate whether the VM Config Agent should be installed during the virtual machine creation process.
	ProvisionVMConfigAgent *bool

	// Specifies the ssh key configuration for Windows OS.
	SSH *SSHConfiguration

	// TimeZone for the virtual machine instance
	TimeZone *string
}

// VirtualMachineInstancePropertiesPlacementProfile - PlacementProfile - Specifies the placement related settings for the
// virtual machine.
type VirtualMachineInstancePropertiesPlacementProfile struct {
	// Specifies whether VM can only failover strictly within the zone it was placed in
	StrictPlacementPolicy *bool

	// The zone in which the VM should be placed in.
	Zone *string
}

// VirtualMachineInstancePropertiesSecurityProfile - SecurityProfile - Specifies the security settings for the virtual machine
// instance.
type VirtualMachineInstancePropertiesSecurityProfile struct {
	// Enable TPM flag
	EnableTPM *bool

	// Specifies the SecurityType of the virtual machine. EnableTPM and SecureBootEnabled must be set to true for SecurityType
	// to function.
	SecurityType *SecurityTypes

	// Uefi settings of the virtual machine instance
	UefiSettings *VirtualMachineInstancePropertiesSecurityProfileUefiSettings
}

// VirtualMachineInstancePropertiesSecurityProfileUefiSettings - Uefi settings - Specifies whether secure boot should be enabled
// on the virtual machine instance.
type VirtualMachineInstancePropertiesSecurityProfileUefiSettings struct {
	// Specifies whether secure boot should be enabled on the virtual machine instance.
	SecureBootEnabled *bool
}

// VirtualMachineInstancePropertiesStorageProfile - StorageProfile - contains information about the disks and storage information
// for the virtual machine instance
type VirtualMachineInstancePropertiesStorageProfile struct {
	// adds data disks to the virtual machine instance
	DataDisks []*VirtualHardDiskArmReference

	// Which Image to use for the virtual machine instance
	ImageReference *ImageArmReference

	// VHD to attach as OS disk
	OSDisk *VirtualMachineInstancePropertiesStorageProfileOsDisk

	// Id of the storage container that hosts the VM configuration file
	VMConfigStoragePathID *string
}

// VirtualMachineInstancePropertiesStorageProfileOsDisk - VHD to attach as OS disk
type VirtualMachineInstancePropertiesStorageProfileOsDisk struct {
	// The ARM ID for a Virtual Hard Disk.
	ID *string

	// The managed disk parameters.
	ManagedDisk *VirtualMachineInstanceManagedDiskParameters

	// 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
}

// VirtualMachineInstanceStatus - The observed state of virtual machine instances
type VirtualMachineInstanceStatus struct {
	// VirtualMachine provisioning error code
	ErrorCode *string

	// Descriptive error message
	ErrorMessage *string

	// The power state of the virtual machine instance
	PowerState *PowerStateEnum

	// Provisioning status of the virtual machine instance
	ProvisioningStatus *VirtualMachineInstanceStatusProvisioningStatus
}

// VirtualMachineInstanceStatusProvisioningStatus - Virtual machine instance provisioning status.
type VirtualMachineInstanceStatusProvisioningStatus struct {
	// The ID of the operation performed on the virtual machine instance
	OperationID *string

	// The status of the operation performed on the virtual machine instance [Succeeded, Failed, InProgress]
	Status *Status
}

// VirtualMachineInstanceUpdateProperties - Defines the resource properties for the update.
type VirtualMachineInstanceUpdateProperties struct {
	// HardwareProfile - Specifies the hardware settings for the virtual machine instance.
	HardwareProfile *HardwareProfileUpdate

	// NetworkProfile - describes the network update configuration the virtual machine instance
	NetworkProfile *NetworkProfileUpdate

	// OsProfile - describes the update configuration of the operating system
	OSProfile *OsProfileUpdate

	// StorageProfile - Specifies the storage settings for the virtual machine instance.
	StorageProfile *StorageProfileUpdate
}

// VirtualMachineInstanceUpdateRequest - The virtual machine instance resource patch definition.
type VirtualMachineInstanceUpdateRequest struct {
	// Identity for the resource.
	Identity *Identity

	// Defines the resource properties for the update.
	Properties *VirtualMachineInstanceUpdateProperties
}

// VirtualMachineInstanceView - The instance view of a virtual machine.
type VirtualMachineInstanceView struct {
	// The VM Config Agent running on the virtual machine.
	VMAgent *VirtualMachineConfigAgentInstanceView
}
