//go:build go1.18
// +build go1.18

// 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) AutoRest Code Generator. DO NOT EDIT.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.

package armscvmm

import "time"

// AvailabilitySet - The AvailabilitySets resource definition.
type AvailabilitySet struct {
	// REQUIRED; The extended location.
	ExtendedLocation *ExtendedLocation

	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

// AvailabilitySetListItem - Availability Set model
type AvailabilitySetListItem struct {
	// Gets the ARM Id of the microsoft.scvmm/availabilitySets resource.
	ID *string

	// Gets or sets the name of the availability set.
	Name *string
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// AvailabilitySetProperties - Defines the resource properties.
type AvailabilitySetProperties struct {
	// Name of the availability set.
	AvailabilitySetName *string

	// ARM Id of the vmmServer resource in which this resource resides.
	VmmServerID *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState
}

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

// Checkpoint - Defines the resource properties.
type Checkpoint struct {
	// Gets ID of the checkpoint.
	CheckpointID *string

	// Gets description of the checkpoint.
	Description *string

	// Gets name of the checkpoint.
	Name *string

	// Gets ID of parent of the checkpoint.
	ParentCheckpointID *string
}

// Cloud - The Clouds resource definition.
type Cloud struct {
	// REQUIRED; The extended location.
	ExtendedLocation *ExtendedLocation

	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

// CloudCapacity - Cloud Capacity model
type CloudCapacity struct {
	// READ-ONLY; CPUCount specifies the maximum number of CPUs that can be allocated in the cloud.
	CPUCount *int64

	// READ-ONLY; MemoryMB specifies a memory usage limit in megabytes.
	MemoryMB *int64

	// READ-ONLY; VMCount gives the max number of VMs that can be deployed in the cloud.
	VMCount *int64
}

// CloudInventoryItem - The Cloud inventory item.
type CloudInventoryItem struct {
	// REQUIRED; They inventory type.
	InventoryType *InventoryType

	// READ-ONLY; Gets the Managed Object name in Vmm for the inventory item.
	InventoryItemName *string

	// READ-ONLY; Gets the tracked resource id corresponding to the inventory resource.
	ManagedResourceID *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Gets the UUID (which is assigned by Vmm) for the inventory item.
	UUID *string
}

// GetInventoryItemProperties implements the InventoryItemPropertiesClassification interface for type CloudInventoryItem.
func (c *CloudInventoryItem) GetInventoryItemProperties() *InventoryItemProperties {
	return &InventoryItemProperties{
		InventoryItemName: c.InventoryItemName,
		InventoryType:     c.InventoryType,
		ManagedResourceID: c.ManagedResourceID,
		ProvisioningState: c.ProvisioningState,
		UUID:              c.UUID,
	}
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// CloudProperties - Defines the resource properties.
type CloudProperties struct {
	// Gets or sets the inventory Item ID for the resource.
	InventoryItemID *string

	// Unique ID of the cloud.
	UUID *string

	// ARM Id of the vmmServer resource in which this resource resides.
	VmmServerID *string

	// READ-ONLY; Capacity of the cloud.
	CloudCapacity *CloudCapacity

	// READ-ONLY; Name of the cloud in VmmServer.
	CloudName *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of QoS policies available for the cloud.
	StorageQosPolicies []*StorageQosPolicy
}

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

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

	// The extended location type.
	Type *string
}

// 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. E.g. "/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
}

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

	// READ-ONLY; 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

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

	// Gets or sets the guest agent provisioning action.
	ProvisioningAction *ProvisioningAction

	// READ-ONLY; Gets the name of the corresponding resource in Kubernetes.
	CustomResourceName *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Gets the guest agent status.
	Status *string

	// READ-ONLY; Gets a unique identifier for this resource.
	UUID *string
}

// GuestCredential - Username / Password Credentials to connect to guest.
type GuestCredential struct {
	// REQUIRED; Gets or sets the password to connect with the guest.
	Password *string

	// REQUIRED; Gets or sets username to connect with the guest.
	Username *string
}

// HTTPProxyConfiguration - HTTP Proxy configuration for the VM.
type HTTPProxyConfiguration struct {
	// Gets or sets httpsProxy url.
	HTTPSProxy *string
}

// HardwareProfile - Defines the resource properties.
type HardwareProfile struct {
	// Gets or sets the number of vCPUs for the vm.
	CPUCount *int32

	// Gets or sets a value indicating whether to enable dynamic memory or not.
	DynamicMemoryEnabled *DynamicMemoryEnabled

	// Gets or sets the max dynamic memory for the vm.
	DynamicMemoryMaxMB *int32

	// Gets or sets the min dynamic memory for the vm.
	DynamicMemoryMinMB *int32

	// Gets or sets a value indicating whether to enable processor compatibility mode for live migration of VMs.
	LimitCPUForMigration *LimitCPUForMigration

	// MemoryMB is the size of a virtual machine's memory, in MB.
	MemoryMB *int32

	// READ-ONLY; Gets highly available property.
	IsHighlyAvailable *IsHighlyAvailable
}

// HardwareProfileUpdate - Defines the resource update properties.
type HardwareProfileUpdate struct {
	// Gets or sets the number of vCPUs for the vm.
	CPUCount *int32

	// Gets or sets a value indicating whether to enable dynamic memory or not.
	DynamicMemoryEnabled *DynamicMemoryEnabled

	// Gets or sets the max dynamic memory for the vm.
	DynamicMemoryMaxMB *int32

	// Gets or sets the min dynamic memory for the vm.
	DynamicMemoryMinMB *int32

	// Gets or sets a value indicating whether to enable processor compatibility mode for live migration of VMs.
	LimitCPUForMigration *LimitCPUForMigration

	// MemoryMB is the size of a virtual machine's memory, in MB.
	MemoryMB *int32
}

// InfrastructureProfile - Specifies the vmmServer infrastructure specific settings for the virtual machine instance.
type InfrastructureProfile struct {
	// Gets or sets the bios guid for the vm.
	BiosGUID *string

	// Type of checkpoint supported for the vm.
	CheckpointType *string

	// ARM Id of the cloud resource to use for deploying the vm.
	CloudID *string

	// Gets or sets the generation for the vm.
	Generation *int32

	// Gets or sets the inventory Item ID for the resource.
	InventoryItemID *string

	// ARM Id of the template resource to use for deploying the vm.
	TemplateID *string

	// Unique ID of the virtual machine.
	UUID *string

	// VMName is the name of VM on the SCVmm server.
	VMName *string

	// ARM Id of the vmmServer resource in which this resource resides.
	VmmServerID *string

	// READ-ONLY; Checkpoints in the vm.
	Checkpoints []*Checkpoint

	// READ-ONLY; Last restored checkpoint in the vm.
	LastRestoredVMCheckpoint *Checkpoint
}

// InfrastructureProfileUpdate - Specifies the vmmServer infrastructure specific update settings for the virtual machine instance.
type InfrastructureProfileUpdate struct {
	// Type of checkpoint supported for the vm.
	CheckpointType *string
}

// InventoryItem - Defines the inventory item.
type InventoryItem struct {
	// Metadata used by portal/tooling/etc to render different UX experiences for resources of the same type; e.g. ApiApps are
	// a kind of Microsoft.Web/sites type. If supported, the resource provider must
	// validate and persist this value.
	Kind *string

	// The resource-specific properties for this resource.
	Properties InventoryItemPropertiesClassification

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

// InventoryItemDetails - Defines the resource properties.
type InventoryItemDetails struct {
	// Gets or sets the inventory Item ID for the resource.
	InventoryItemID *string

	// Gets or sets the Managed Object name in Vmm for the resource.
	InventoryItemName *string
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// InventoryItemProperties - Defines the resource properties.
type InventoryItemProperties struct {
	// REQUIRED; They inventory type.
	InventoryType *InventoryType

	// READ-ONLY; Gets the Managed Object name in Vmm for the inventory item.
	InventoryItemName *string

	// READ-ONLY; Gets the tracked resource id corresponding to the inventory resource.
	ManagedResourceID *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Gets the UUID (which is assigned by Vmm) for the inventory item.
	UUID *string
}

// GetInventoryItemProperties implements the InventoryItemPropertiesClassification interface for type InventoryItemProperties.
func (i *InventoryItemProperties) GetInventoryItemProperties() *InventoryItemProperties { return i }

// NetworkInterface - Network Interface model
type NetworkInterface struct {
	// Gets or sets the ipv4 address type.
	IPv4AddressType *AllocationMethod

	// Gets or sets the ipv6 address type.
	IPv6AddressType *AllocationMethod

	// Gets or sets the nic MAC address.
	MacAddress *string

	// Gets or sets the mac address type.
	MacAddressType *AllocationMethod

	// Gets or sets the name of the network interface.
	Name *string

	// Gets or sets the nic id.
	NicID *string

	// Gets or sets the ARM Id of the Microsoft.ScVmm/virtualNetwork resource to connect the nic.
	VirtualNetworkID *string

	// READ-ONLY; Gets the display name of the network interface as shown in the vmmServer. This is the fallback label for a NIC
	// when the name is not set.
	DisplayName *string

	// READ-ONLY; Gets the nic ipv4 addresses.
	IPv4Addresses []*string

	// READ-ONLY; Gets the nic ipv6 addresses.
	IPv6Addresses []*string

	// READ-ONLY; Gets the name of the virtual network in vmmServer that the nic is connected to.
	NetworkName *string
}

// NetworkInterfaceUpdate - Network Interface Update model
type NetworkInterfaceUpdate struct {
	// Gets or sets the ipv4 address type.
	IPv4AddressType *AllocationMethod

	// Gets or sets the ipv6 address type.
	IPv6AddressType *AllocationMethod

	// Gets or sets the nic MAC address.
	MacAddress *string

	// Gets or sets the mac address type.
	MacAddressType *AllocationMethod

	// Gets or sets the name of the network interface.
	Name *string

	// Gets or sets the nic id.
	NicID *string

	// Gets or sets the ARM Id of the Microsoft.ScVmm/virtualNetwork resource to connect the nic.
	VirtualNetworkID *string
}

// NetworkProfile - Defines the resource properties.
type NetworkProfile struct {
	// Gets or sets the list of network interfaces associated with the virtual machine.
	NetworkInterfaces []*NetworkInterface
}

// NetworkProfileUpdate - Defines the resource update properties.
type NetworkProfileUpdate struct {
	// Gets or sets the list of network interfaces associated with the virtual machine.
	NetworkInterfaces []*NetworkInterfaceUpdate
}

// 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; 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 ARM/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 this particular 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 {
	// READ-ONLY; URL to get the next set of operation list results (if there are any).
	NextLink *string

	// READ-ONLY; List of operations supported by the resource provider
	Value []*Operation
}

// OsProfileForVMInstance - Defines the resource properties.
type OsProfileForVMInstance struct {
	// Admin password of the virtual machine.
	AdminPassword *string

	// Gets or sets computer name.
	ComputerName *string

	// READ-ONLY; Gets os sku.
	OSSKU *string

	// READ-ONLY; Gets the type of the os.
	OSType *OsType

	// READ-ONLY; Gets os version.
	OSVersion *string
}

// StopVirtualMachineOptions - Defines the stop action properties.
type StopVirtualMachineOptions struct {
	// Gets or sets a value indicating whether to request non-graceful VM shutdown. True value for this flag indicates non-graceful
	// shutdown whereas false indicates otherwise. Defaults to false.
	SkipShutdown *SkipShutdown
}

// StorageProfile - Defines the resource properties.
type StorageProfile struct {
	// Gets or sets the list of virtual disks associated with the virtual machine.
	Disks []*VirtualDisk
}

// StorageProfileUpdate - Defines the resource update properties.
type StorageProfileUpdate struct {
	// Gets or sets the list of virtual disks associated with the virtual machine.
	Disks []*VirtualDiskUpdate
}

// StorageQosPolicy - The StorageQoSPolicy definition.
type StorageQosPolicy struct {
	// The Bandwidth Limit for internet traffic.
	BandwidthLimit *int64

	// The ID of the QoS policy.
	ID *string

	// The maximum IO operations per second.
	IopsMaximum *int64

	// The minimum IO operations per second.
	IopsMinimum *int64

	// The name of the policy.
	Name *string

	// The underlying policy.
	PolicyID *string
}

// StorageQosPolicyDetails - The StorageQoSPolicyDetails definition.
type StorageQosPolicyDetails struct {
	// The ID of the QoS policy.
	ID *string

	// The name of the policy.
	Name *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
}

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// VMInstanceHybridIdentityMetadataProperties - Describes the properties of Hybrid Identity Metadata for a Virtual Machine.
type VMInstanceHybridIdentityMetadataProperties struct {
	// Gets or sets the Public Key.
	PublicKey *string

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

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState
}

// VirtualDisk - Virtual disk model
type VirtualDisk struct {
	// Gets or sets the disk bus.
	Bus *int32

	// Gets or sets the disk bus type.
	BusType *string

	// Gets or sets a value indicating diff disk.
	CreateDiffDisk *CreateDiffDisk

	// Gets or sets the disk id.
	DiskID *string

	// Gets or sets the disk total size.
	DiskSizeGB *int32

	// Gets or sets the disk lun.
	Lun *int32

	// Gets or sets the name of the disk.
	Name *string

	// The QoS policy for the disk.
	StorageQosPolicy *StorageQosPolicyDetails

	// Gets or sets the disk id in the template.
	TemplateDiskID *string

	// Gets or sets the disk vhd type.
	VhdType *string

	// READ-ONLY; Gets the display name of the virtual disk as shown in the vmmServer. This is the fallback label for a disk when
	// the name is not set.
	DisplayName *string

	// READ-ONLY; Gets the max disk size.
	MaxDiskSizeGB *int32

	// READ-ONLY; Gets the disk vhd format type.
	VhdFormatType *string

	// READ-ONLY; Gets the disk volume type.
	VolumeType *string
}

// VirtualDiskUpdate - Virtual Disk Update model
type VirtualDiskUpdate struct {
	// Gets or sets the disk bus.
	Bus *int32

	// Gets or sets the disk bus type.
	BusType *string

	// Gets or sets the disk id.
	DiskID *string

	// Gets or sets the disk total size.
	DiskSizeGB *int32

	// Gets or sets the disk lun.
	Lun *int32

	// Gets or sets the name of the disk.
	Name *string

	// The QoS policy for the disk.
	StorageQosPolicy *StorageQosPolicyDetails

	// Gets or sets the disk vhd type.
	VhdType *string
}

// VirtualMachineCreateCheckpoint - Defines the create checkpoint action properties.
type VirtualMachineCreateCheckpoint struct {
	// Description of the checkpoint.
	Description *string

	// Name of the checkpoint.
	Name *string
}

// VirtualMachineDeleteCheckpoint - Defines the delete checkpoint action properties.
type VirtualMachineDeleteCheckpoint struct {
	// ID of the checkpoint to be deleted.
	ID *string
}

// VirtualMachineInstance - Define the virtualMachineInstance.
type VirtualMachineInstance struct {
	// REQUIRED; Gets or sets the extended location.
	ExtendedLocation *ExtendedLocation

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// VirtualMachineInstanceProperties - Defines the resource properties.
type VirtualMachineInstanceProperties struct {
	// Availability Sets in vm.
	AvailabilitySets []*AvailabilitySetListItem

	// Hardware properties.
	HardwareProfile *HardwareProfile

	// Gets the infrastructure profile.
	InfrastructureProfile *InfrastructureProfile

	// Network properties.
	NetworkProfile *NetworkProfile

	// OS properties.
	OSProfile *OsProfileForVMInstance

	// Storage properties.
	StorageProfile *StorageProfile

	// READ-ONLY; Gets the power state of the virtual machine.
	PowerState *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState
}

// VirtualMachineInstanceUpdate - The type used for update operations of the VirtualMachineInstance.
type VirtualMachineInstanceUpdate struct {
	// The update properties of the VirtualMachineInstance.
	Properties *VirtualMachineInstanceUpdateProperties
}

// VirtualMachineInstanceUpdateProperties - Virtual Machine Instance Properties Update model
type VirtualMachineInstanceUpdateProperties struct {
	// Availability Sets in vm.
	AvailabilitySets []*AvailabilitySetListItem

	// Hardware properties.
	HardwareProfile *HardwareProfileUpdate

	// Gets the infrastructure profile.
	InfrastructureProfile *InfrastructureProfileUpdate

	// Network properties.
	NetworkProfile *NetworkProfileUpdate

	// Storage properties.
	StorageProfile *StorageProfileUpdate
}

// VirtualMachineInventoryItem - The Virtual machine inventory item.
type VirtualMachineInventoryItem struct {
	// REQUIRED; They inventory type.
	InventoryType *InventoryType

	// Cloud inventory resource details where the VM is present.
	Cloud *InventoryItemDetails

	// Gets or sets the nic ip addresses.
	IPAddresses []*string

	// READ-ONLY; Gets the bios guid.
	BiosGUID *string

	// READ-ONLY; Gets the Managed Object name in Vmm for the inventory item.
	InventoryItemName *string

	// READ-ONLY; Gets the tracked resource id corresponding to the inventory resource.
	ManagedMachineResourceID *string

	// READ-ONLY; Gets the tracked resource id corresponding to the inventory resource.
	ManagedResourceID *string

	// READ-ONLY; Gets os name.
	OSName *string

	// READ-ONLY; Gets the type of the os.
	OSType *OsType

	// READ-ONLY; Gets os version.
	OSVersion *string

	// READ-ONLY; Gets the power state of the virtual machine.
	PowerState *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Gets the UUID (which is assigned by Vmm) for the inventory item.
	UUID *string
}

// GetInventoryItemProperties implements the InventoryItemPropertiesClassification interface for type VirtualMachineInventoryItem.
func (v *VirtualMachineInventoryItem) GetInventoryItemProperties() *InventoryItemProperties {
	return &InventoryItemProperties{
		InventoryItemName: v.InventoryItemName,
		InventoryType:     v.InventoryType,
		ManagedResourceID: v.ManagedResourceID,
		ProvisioningState: v.ProvisioningState,
		UUID:              v.UUID,
	}
}

// VirtualMachineRestoreCheckpoint - Defines the restore checkpoint action properties.
type VirtualMachineRestoreCheckpoint struct {
	// ID of the checkpoint to be restored to.
	ID *string
}

// VirtualMachineTemplate - The VirtualMachineTemplates resource definition.
type VirtualMachineTemplate struct {
	// REQUIRED; The extended location.
	ExtendedLocation *ExtendedLocation

	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

// VirtualMachineTemplateInventoryItem - The Virtual machine template inventory item.
type VirtualMachineTemplateInventoryItem struct {
	// REQUIRED; They inventory type.
	InventoryType *InventoryType

	// READ-ONLY; Gets the desired number of vCPUs for the vm.
	CPUCount *int32

	// READ-ONLY; Gets the Managed Object name in Vmm for the inventory item.
	InventoryItemName *string

	// READ-ONLY; Gets the tracked resource id corresponding to the inventory resource.
	ManagedResourceID *string

	// READ-ONLY; MemoryMB is the desired size of a virtual machine's memory, in MB.
	MemoryMB *int32

	// READ-ONLY; Gets os name.
	OSName *string

	// READ-ONLY; Gets the type of the os.
	OSType *OsType

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Gets the UUID (which is assigned by Vmm) for the inventory item.
	UUID *string
}

// GetInventoryItemProperties implements the InventoryItemPropertiesClassification interface for type VirtualMachineTemplateInventoryItem.
func (v *VirtualMachineTemplateInventoryItem) GetInventoryItemProperties() *InventoryItemProperties {
	return &InventoryItemProperties{
		InventoryItemName: v.InventoryItemName,
		InventoryType:     v.InventoryType,
		ManagedResourceID: v.ManagedResourceID,
		ProvisioningState: v.ProvisioningState,
		UUID:              v.UUID,
	}
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// VirtualMachineTemplateProperties - Defines the resource properties.
type VirtualMachineTemplateProperties struct {
	// Gets or sets the inventory Item ID for the resource.
	InventoryItemID *string

	// Unique ID of the virtual machine template.
	UUID *string

	// ARM Id of the vmmServer resource in which this resource resides.
	VmmServerID *string

	// READ-ONLY; Gets the desired number of vCPUs for the vm.
	CPUCount *int32

	// READ-ONLY; Gets computer name.
	ComputerName *string

	// READ-ONLY; Gets the disks of the template.
	Disks []*VirtualDisk

	// READ-ONLY; Gets a value indicating whether to enable dynamic memory or not.
	DynamicMemoryEnabled *DynamicMemoryEnabled

	// READ-ONLY; Gets the max dynamic memory for the vm.
	DynamicMemoryMaxMB *int32

	// READ-ONLY; Gets the min dynamic memory for the vm.
	DynamicMemoryMinMB *int32

	// READ-ONLY; Gets the generation for the vm.
	Generation *int32

	// READ-ONLY; Gets a value indicating whether the vm template is customizable or not.
	IsCustomizable *IsCustomizable

	// READ-ONLY; Gets highly available property.
	IsHighlyAvailable *IsHighlyAvailable

	// READ-ONLY; Gets a value indicating whether to enable processor compatibility mode for live migration of VMs.
	LimitCPUForMigration *LimitCPUForMigration

	// READ-ONLY; MemoryMB is the desired size of a virtual machine's memory, in MB.
	MemoryMB *int32

	// READ-ONLY; Gets the network interfaces of the template.
	NetworkInterfaces []*NetworkInterface

	// READ-ONLY; Gets os name.
	OSName *string

	// READ-ONLY; Gets the type of the os.
	OSType *OsType

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState
}

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

// VirtualNetwork - The VirtualNetworks resource definition.
type VirtualNetwork struct {
	// REQUIRED; The extended location.
	ExtendedLocation *ExtendedLocation

	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

// VirtualNetworkInventoryItem - The Virtual network inventory item.
type VirtualNetworkInventoryItem struct {
	// REQUIRED; They inventory type.
	InventoryType *InventoryType

	// READ-ONLY; Gets the Managed Object name in Vmm for the inventory item.
	InventoryItemName *string

	// READ-ONLY; Gets the tracked resource id corresponding to the inventory resource.
	ManagedResourceID *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Gets the UUID (which is assigned by Vmm) for the inventory item.
	UUID *string
}

// GetInventoryItemProperties implements the InventoryItemPropertiesClassification interface for type VirtualNetworkInventoryItem.
func (v *VirtualNetworkInventoryItem) GetInventoryItemProperties() *InventoryItemProperties {
	return &InventoryItemProperties{
		InventoryItemName: v.InventoryItemName,
		InventoryType:     v.InventoryType,
		ManagedResourceID: v.ManagedResourceID,
		ProvisioningState: v.ProvisioningState,
		UUID:              v.UUID,
	}
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// VirtualNetworkProperties - Defines the resource properties.
type VirtualNetworkProperties struct {
	// Gets or sets the inventory Item ID for the resource.
	InventoryItemID *string

	// Unique ID of the virtual network.
	UUID *string

	// ARM Id of the vmmServer resource in which this resource resides.
	VmmServerID *string

	// READ-ONLY; Name of the virtual network in vmmServer.
	NetworkName *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState
}

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

// VmmCredential - Credentials to connect to VmmServer.
type VmmCredential struct {
	// Password to use to connect to VmmServer.
	Password *string

	// Username to use to connect to VmmServer.
	Username *string
}

// VmmServer - The VmmServers resource definition.
type VmmServer struct {
	// REQUIRED; The extended location.
	ExtendedLocation *ExtendedLocation

	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

	// READ-ONLY; Fully qualified resource ID for the resource. E.g. "/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
}

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

	// READ-ONLY; The link to the next page of items
	NextLink *string
}

// VmmServerProperties - Defines the resource properties.
type VmmServerProperties struct {
	// REQUIRED; Fqdn is the hostname/ip of the vmmServer.
	Fqdn *string

	// Credentials to connect to VmmServer.
	Credentials *VmmCredential

	// Port is the port on which the vmmServer is listening.
	Port *int32

	// READ-ONLY; Gets the connection status to the vmmServer.
	ConnectionStatus *string

	// READ-ONLY; Gets any error message if connection to vmmServer is having any issue.
	ErrorMessage *string

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Unique ID of vmmServer.
	UUID *string

	// READ-ONLY; Version is the version of the vmmSever.
	Version *string
}

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