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

import "time"

// Address details
type Address struct {
	// REQUIRED; Address line 1
	AddressLine1 *string

	// REQUIRED; Name of the city
	City *string

	// REQUIRED; Name of the country
	Country *string

	// REQUIRED; Postal code
	PostalCode *string

	// REQUIRED; State (if any)
	State *string

	// Address line 2
	AddressLine2 *string
}

// Alert - Health alerts
type Alert struct {
	// REQUIRED; Severity level
	Level *AlertLevel

	// REQUIRED; A short description of the alert
	Message *string
}

// AvsConnection - Transient information about an on-going connection to an AVS instance
type AvsConnection struct {
	// REQUIRED; Indicates whether service initialization is complete
	ServiceInitializationCompleted *bool

	// Explicit service account credentials
	ServiceInitializationHandle *ServiceInitializationHandle

	// Encoded service account credentials alongside connection information
	ServiceInitializationHandleEnc *string
}

// AvsDiskDetails - AVS disk/volume information
type AvsDiskDetails struct {
	// REQUIRED; Azure resource ID of the AVS storage container containing this disk/volume
	AvsStorageContainerResourceID *string

	// REQUIRED; VMware ID assigned to the disk/volume
	AvsVMInternalID *string

	// REQUIRED; Name of the AVS VM connected to this disk/volume
	AvsVMName *string

	// REQUIRED; Azure resource ID of the AVS VM connected to this disk/volume
	AvsVMResourceID *string

	// REQUIRED; VMware ID of the disk/volume
	DiskID *string

	// REQUIRED; VMware name of the disk/volume
	DiskName *string

	// REQUIRED; Name of the top-level folder in the datastore that contains the disk/volume
	Folder *string
}

// AvsStatus - Status of storage pool / AVS connection
type AvsStatus struct {
	// REQUIRED; If true, an AVS connection has been successfully completed
	AvsEnabled *bool

	// REQUIRED; Human-readable current AVS connection status
	CurrentConnectionStatus *string

	// Azure resource ID of the AVS SDDC the pool is connected to
	ClusterResourceID *string
}

// AvsStorageContainer - AVS storage container resource type, representing a VMware storage container in a storage pool, which
// can be associated to and mounted as a datastore
type AvsStorageContainer struct {
	// The resource-specific properties for this resource.
	Properties *AvsStorageContainerProperties

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

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

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

// AvsStorageContainerProperties - AVS storage container properties
type AvsStorageContainerProperties struct {
	// READ-ONLY; Name of the storage container
	ResourceName *string

	// Maximum amount of bytes that can be provisioned in this storage container; it must be a multiple of 512; each time a volume
	// is provisioned in this container, its provisionedSize will be counted against the provisionLimit and the provisioning will
	// fail if it goes over (minimum: 1048576 (1MiB), maximum: 4503599627370496 (4PiB)); by default it is unrestricted
	ProvisionedLimit *int64

	// READ-ONLY; VMware datastore associated with this storage container (if any)
	Datastore *string

	// READ-ONLY; Whether the datastore is mounted in VMware or not
	Mounted *bool

	// READ-ONLY; Storage space usage
	Space *Space
}

// AvsStorageContainerVolume - A volume contained in an AVS storage container
type AvsStorageContainerVolume struct {
	// The resource-specific properties for this resource.
	Properties *VolumeProperties

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

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

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

// AvsStorageContainerVolumeUpdate - The type used for update operations of the AvsStorageContainerVolume.
type AvsStorageContainerVolumeUpdate struct {
	// The resource-specific properties for this resource.
	Properties *AvsStorageContainerVolumeUpdateProperties
}

// AvsStorageContainerVolumeUpdateProperties - The updatable properties of the AvsStorageContainerVolume.
type AvsStorageContainerVolumeUpdateProperties struct {
	// Volume's soft-deletion state
	SoftDeletion *SoftDeletion
}

// AvsVM - AVS VM resource type, representing all the volumes associated to an AVS VM as defined by VMware
type AvsVM struct {
	// The resource-specific properties for this resource.
	Properties *AvsVMProperties

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

// AvsVMDetails - AVS VM details
type AvsVMDetails struct {
	// REQUIRED; Pure Storage's internal ID for this AVS VM
	AvsVMInternalID *string

	// REQUIRED; ID of the AVS VM using this set of volumes
	VMID *string

	// REQUIRED; Name of the VMware VM using this set of volumes
	VMName *string

	// REQUIRED; Type of the VMware VM using this set of volumes
	VMType *VMType
}

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

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

// AvsVMProperties - AVS VM properties
type AvsVMProperties struct {
	// AVS VM's soft-deletion state
	SoftDeletion *SoftDeletion

	// READ-ONLY; AVS VM details
	Avs *AvsVMDetails

	// READ-ONLY; Date at which the AVS VM was created, as an RFC 3339 timestamp
	CreatedTimestamp *string

	// READ-ONLY; Human-readable name of the AVS VM
	DisplayName *string

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

	// READ-ONLY; Contains properties related to used Flash space
	Space *Space

	// READ-ONLY; Pure Storage's internal ID for the storage pool
	StoragePoolInternalID *string

	// READ-ONLY; Azure resource ID of the storage pool
	StoragePoolResourceID *string

	// READ-ONLY; Specify which control plane handles the lifecycle of the volume container
	VolumeContainerType *VolumeContainerType
}

// AvsVMUpdate - The type used for update operations of the AvsVm.
type AvsVMUpdate struct {
	// The resource-specific properties for this resource.
	Properties *AvsVMUpdateProperties
}

// AvsVMUpdateProperties - The updatable properties of the AvsVm.
type AvsVMUpdateProperties struct {
	// AVS VM's soft-deletion state
	SoftDeletion *SoftDeletion
}

// AvsVMVolume - Any volume associated to a particular AVS VM
type AvsVMVolume struct {
	// The resource-specific properties for this resource.
	Properties *VolumeProperties

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

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

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

// AvsVMVolumeUpdate - The type used for update operations of the AvsVmVolume.
type AvsVMVolumeUpdate struct {
	// The resource-specific properties for this resource.
	Properties *AvsVMVolumeUpdateProperties
}

// AvsVMVolumeUpdateProperties - The updatable properties of the AvsVmVolume.
type AvsVMVolumeUpdateProperties struct {
	// Volume's soft-deletion state
	SoftDeletion *SoftDeletion
}

// AzureVmwareService - Connected AVS status
type AzureVmwareService struct {
	// REQUIRED; If true, an AVS SDDC is successfully connected to the storage pool
	AvsEnabled *bool

	// Azure resource ID of the AVS SDDC the storage pool is connected to
	ClusterResourceID *string
}

// AzureVolumeProperties - Properties of an Azure volume
type AzureVolumeProperties struct {
	// Currently provisioned size of the volume, in bytes
	ProvisionedSize *int64

	// Azure Resource ID of the source volume group to clone from.
	SourceVolumeGroupResourceID *string

	// Azure resource ID of the source volume for cloning
	SourceVolumeResourceID *string

	// READ-ONLY; Volume creation date, as an RFC 3339 timestamp
	CreatedAt *time.Time

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

	// READ-ONLY; Serial number of the volume
	SerialNumber *string

	// READ-ONLY; Storage space usage for the volume
	Space *Space
}

// BandwidthUsage - Bandwidth usage metrics
type BandwidthUsage struct {
	// REQUIRED; Number of bytes written and read per second (maximum value over the last 10 minutes)
	Current *int64

	// REQUIRED; Maximum bandwidth value that can be provisioned for the storage pool
	Max *int64

	// REQUIRED; Bandwidth value currently provisioned for the storage pool, in MB/s
	Provisioned *int64
}

// BillingUsageProperty - Represents an individual billing usage property
type BillingUsageProperty struct {
	// REQUIRED; Current value of the billing usage property
	CurrentValue *string

	// REQUIRED; Unique identifier for the billing usage property
	PropertyID *string

	// REQUIRED; Name of the billing usage property
	PropertyName *string

	// REQUIRED; Severity level of the usage
	Severity *UsageSeverity

	// Previous value of the billing usage property
	PreviousValue *string

	// Status message for the billing usage against a property
	StatusMessage *string

	// Optional list of sub-properties providing additional details
	SubProperties []*BillingUsageProperty
}

// CompanyDetails - Company details
type CompanyDetails struct {
	// REQUIRED; Company name
	CompanyName *string

	// Company address
	Address *Address
}

// ConnectionParametersResponse - Connection parameters response
type ConnectionParametersResponse struct {
	// REQUIRED; ISCSI connection parameters
	Iscsi *IscsiConnectionParameters
}

// HealthDetails - Health metrics for a storage pool
type HealthDetails struct {
	// REQUIRED; Bandwidth usage metrics
	BandwidthUsage *BandwidthUsage

	// REQUIRED; Data reduction ratio achieved on this pool
	DataReductionRatio *float64

	// REQUIRED; Estimated maximum capacity of the pool, in bytes, based on current usage and data reduction ratio
	EstimatedMaxCapacity *int64

	// REQUIRED; IOPS usage metrics
	IopsUsage *IopsUsage

	// REQUIRED; Storage space usage
	Space *Space

	// REQUIRED; How full the pool is right now, in %, compared to the maximum size it can grow to; estimated based on current
	// usage and data reduction ratio
	UsedCapacityPercentage *float64
}

// IopsUsage - IOPS usage metrics
type IopsUsage struct {
	// REQUIRED; Current number of IOPS (maximum value over the last 10 minutes)
	Current *int64

	// REQUIRED; Maximum IOPS value that can be provisioned for the storage pool
	Max *int64

	// REQUIRED; IOPS value currently provisioned for the storage pool
	Provisioned *int64
}

// IscsiConnectionParameters - ISCSI connection parameters
type IscsiConnectionParameters struct {
	// REQUIRED; List of ISCSI endpoints for connection
	Endpoints []*IscsiEndpoint
}

// IscsiEndpoint - ISCSI connection endpoint details
type IscsiEndpoint struct {
	// REQUIRED; IP address of the endpoint
	IP *string

	// REQUIRED; IQN (iSCSI Qualified Name) of the endpoint
	Iqn *string

	// REQUIRED; Port number of the endpoint
	Port *int32
}

// LimitDetails - Limits constraining certain resource properties
type LimitDetails struct {
	// REQUIRED; internal
	PerformancePolicy *PerformancePolicyLimits

	// REQUIRED; internal
	ProtectionPolicy *ProtectionPolicyLimits

	// REQUIRED; Limits used for storage pool resources
	StoragePool *StoragePoolLimits

	// REQUIRED; Limits used for volume resources
	Volume *VolumeLimits
}

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

// MarketplaceDetails - Marketplace details
type MarketplaceDetails struct {
	// REQUIRED; Offer details of the marketplace subscription
	OfferDetails *OfferDetails

	// Marketplace subscription status
	SubscriptionStatus *MarketplaceSubscriptionStatus

	// READ-ONLY; Marketplace subscription ID
	SubscriptionID *string
}

// OfferDetails - Offer details for the marketplace that is selected by the user
type OfferDetails struct {
	// REQUIRED; Offer ID for the marketplace offer
	OfferID *string

	// REQUIRED; Plan ID for the marketplace offer
	PlanID *string

	// REQUIRED; Publisher ID for the marketplace offer
	PublisherID *string

	// Plan Name for the marketplace offer
	PlanName *string

	// Term ID for the marketplace offer
	TermID *string

	// Term Unit for the marketplace offer
	TermUnit *string
}

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

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

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

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

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

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

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

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

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

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

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

// PerformanceParameters - Performance parameters for volume group
type PerformanceParameters struct {
	// Bandwidth limit in MB per second
	BandwidthLimitMbPerSec *int64

	// IOPS limit
	IopsLimit *int64
}

// PerformancePolicyLimits - internal
type PerformancePolicyLimits struct {
	// REQUIRED; internal
	BandwidthLimit *RangeLimits

	// REQUIRED; internal
	IopsLimit *RangeLimits
}

// ProtectionParameters - Protection parameters for volume group
type ProtectionParameters struct {
	// Snapshot frequency in ISO 8601 duration format
	Frequency *string

	// Retention period for snapshots in ISO 8601 duration format
	Retention *string
}

// ProtectionPolicyLimits - internal
type ProtectionPolicyLimits struct {
	// REQUIRED; internal
	Frequency *RangeLimits

	// REQUIRED; internal
	Retention *RangeLimits
}

// RangeLimits - Minimum and maximum values for a property
type RangeLimits struct {
	// REQUIRED; Maximum value of the property
	Max *int64

	// REQUIRED; Minimum value of the property
	Min *int64
}

// Reservation - Pure Storage cloud service resource type, also called reservation
type Reservation struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

// ReservationBillingStatus - Latest billing status for this reservation
type ReservationBillingStatus struct {
	// REQUIRED; Weighted average of the data-reduction ratio for all associated pools
	DrrWeightedAverage *float64

	// REQUIRED; Extra capacity added when rounding up low-usage pools to 30TiB. In bytes
	ExtraUsedCapacityLowUsageRounding *int64

	// REQUIRED; Extra capacity added because of low DRR storage pools; In bytes
	ExtraUsedCapacityNonReducible *int64

	// REQUIRED; Extra capacity discounted due to plan forgiving some low-DRR usage. In bytes
	ExtraUsedCapacityNonReduciblePlanDiscount *int64

	// REQUIRED; How many associated storage pools reported low data reduction ratio (DRR)
	LowDrrPoolCount *int32

	// REQUIRED; Timestamp for the latest update of this billing status, in RFC 3339 format
	Timestamp *string

	// REQUIRED; The sum of total used capacity for all pools with low DRR, if the DRR penalty applies. In bytes
	TotalNonReducibleReported *int64

	// REQUIRED; Total performance amount included in plan. In bytes per second
	TotalPerformanceIncludedPlan *int64

	// REQUIRED; Total performance amount reported at on-demand price. In MB per second
	TotalPerformanceOverage *int64

	// REQUIRED; The sum of all performance settings across the pools under this reservation. In MB per second
	TotalPerformanceReported *int64

	// REQUIRED; Total used capacity actually billed. In bytes
	TotalUsedCapacityBilled *int64

	// REQUIRED; Total used capacity included in plan. In bytes
	TotalUsedCapacityIncludedPlan *int64

	// REQUIRED; Total used capacity reported at on-demand price. In bytes
	TotalUsedCapacityOverage *int64

	// REQUIRED; Total used capacity as reported by associated storage pools. In bytes
	TotalUsedCapacityReported *int64
}

// ReservationBillingUsageReport - Represents a billing usage report, including overall status and detailed properties
type ReservationBillingUsageReport struct {
	// REQUIRED; A list of detailed billing usage properties
	BillingUsageProperties []*BillingUsageProperty

	// REQUIRED; Overall status message of the billing usage report
	OverallStatusMessage *string

	// REQUIRED; Latest formatted billing report for this reservation
	Timestamp *string
}

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

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

// ReservationPropertiesBaseResourceProperties - Properties of a Reservation resource.
type ReservationPropertiesBaseResourceProperties struct {
	// REQUIRED; Marketplace details
	Marketplace *MarketplaceDetails

	// REQUIRED; User details
	User *UserDetails

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

	// READ-ONLY; Pure Storage's internal ID for the reservation
	ReservationInternalID *string
}

// ReservationUpdate - The type used for update operations of the Reservation.
type ReservationUpdate struct {
	// The resource-specific properties for this resource.
	Properties *ReservationUpdateProperties

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

// ReservationUpdateProperties - The updatable properties of the Reservation.
type ReservationUpdateProperties struct {
	// User details
	User *UserDetails
}

// ServiceInitializationHandle - Initialization handle used to configure the AVS SDDC to communicate with the storage pool
type ServiceInitializationHandle struct {
	// Azure resource ID of the AVS SDDC the pool is connecting to
	ClusterResourceID *string

	// Requested service account username
	ServiceAccountUsername *string
}

// ServiceInitializationInfo - Explicit service initialization data
type ServiceInitializationInfo struct {
	// Service account password
	ServiceAccountPassword *string

	// Service account username
	ServiceAccountUsername *string

	// AVS instance's vSphere certificate
	VSphereCertificate *string

	// AVS instance's vSphere IP address
	VSphereIP *string
}

// SoftDeletion - Soft-deletion state
type SoftDeletion struct {
	// REQUIRED; If false, the resource is active; if true, the resource has been destroyed; resources can be soft-deleted by
	// setting destroyed to true, and recovered by setting it to false
	Destroyed *bool

	// READ-ONLY; Date at which the resource will be eradicated and impossible to recover, as an RFC 3339 timestamp; invalid if
	// destroyed is false;
	EradicationTimestamp *string
}

// Space - Storage space usage
type Space struct {
	// REQUIRED; Space occupied by duplicated data, meaning data shared with other volumes and snapshots as a result of data deduplication,
	// in bytes
	Shared *int64

	// REQUIRED; Space occupied by data unique to one or more snapshots, in bytes
	Snapshots *int64

	// REQUIRED; Total space occupied by customer data (i.e., being billed for), in bytes
	TotalUsed *int64

	// REQUIRED; Unique space occupied by customer data, in bytes; for a volume, this is the amount of storage that would be freed
	// by deleting the volume, since snapshot and shared data would be kept
	Unique *int64
}

// StoragePool - Storage pool resource
type StoragePool struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

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

// StoragePoolEnableAvsConnectionPost - EnableAvsConnection payload information
type StoragePoolEnableAvsConnectionPost struct {
	// REQUIRED; Azure resource ID of the AVS SDDC to connect to
	ClusterResourceID *string
}

// StoragePoolFinalizeAvsConnectionPost - FinalizeAvsConnection payload information, either encoded or explicit
type StoragePoolFinalizeAvsConnectionPost struct {
	// Explicit AVS connection information
	ServiceInitializationData *ServiceInitializationInfo

	// Encoded AVS connection information
	ServiceInitializationDataEnc *string
}

// StoragePoolHealthInfo - Health information for a storage pool
type StoragePoolHealthInfo struct {
	// REQUIRED; List of health alerts
	Alerts []*Alert

	// REQUIRED; Health metrics
	Health *HealthDetails
}

// StoragePoolLimits - Limits used for storage pool creation
type StoragePoolLimits struct {
	// REQUIRED; List of physical availability zones in the region in which storage pools can be deployed; some Azure regions
	// do not support the necessary resources in all availability zones
	PhysicalAvailabilityZones []*string

	// REQUIRED; Allowed provisioned bandwidth range for a storage pool, in MB/s
	ProvisionedBandwidthMbPerSec *RangeLimits

	// REQUIRED; Allowed provisioned IOPS range for a storage pool, as a number of operations
	ProvisionedIops *RangeLimits
}

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

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

// StoragePoolProperties - Properties of a storage pool
type StoragePoolProperties struct {
	// REQUIRED; Azure Availability Zone the Pool is located in
	AvailabilityZone *string

	// REQUIRED; Total bandwidth provisioned for the pool, in MB/s
	ProvisionedBandwidthMbPerSec *int64

	// REQUIRED; Azure resource ID of the Pure Storage Cloud service (reservation resource) this storage pool belongs to
	ReservationResourceID *string

	// REQUIRED; Network properties of the storage pool
	VnetInjection *VnetInjection

	// READ-ONLY; AVS connection state summary
	Avs *AzureVmwareService

	// READ-ONLY; How long a destroyed object is kept before being eradicated, in seconds
	DataRetentionPeriod *int64

	// READ-ONLY; Total I/O operations per second (IOPS) provisioned for the pool
	ProvisionedIops *int64

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

	// READ-ONLY; Pure Storage's internal ID of the storage pool
	StoragePoolInternalID *string
}

// StoragePoolUpdate - The type used for update operations of the StoragePool.
type StoragePoolUpdate struct {
	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

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

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

// StoragePoolUpdateProperties - The updatable properties of the StoragePool.
type StoragePoolUpdateProperties struct {
	// Total bandwidth provisioned for the pool, in MB/s
	ProvisionedBandwidthMbPerSec *int64
}

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

// UserDetails - User details
type UserDetails struct {
	// REQUIRED; Email address
	EmailAddress *string

	// REQUIRED; First name
	FirstName *string

	// REQUIRED; Last name
	LastName *string

	// Company details
	CompanyDetails *CompanyDetails

	// Phone number
	PhoneNumber *string

	// Principal name
	Upn *string
}

// VnetInjection - Network in which the storage pool will be made available
type VnetInjection struct {
	// REQUIRED; Azure resource ID of the Virtual Network subnet where the storage pool will be connected
	SubnetID *string

	// REQUIRED; Azure resource ID of the Virtual Network in which the subnet is located
	VnetID *string
}

// Volume - Azure Volume resource
type Volume struct {
	// The resource-specific properties for this resource.
	Properties *AzureVolumeProperties

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

// VolumeGroup - Volume Group resource
type VolumeGroup struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

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

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

// VolumeGroupProperties - Properties of a volume group
type VolumeGroupProperties struct {
	// Performance parameters for the volume group
	PerformanceParameters *PerformanceParameters

	// Protection parameters for the volume group
	ProtectionParameters *ProtectionParameters

	// Azure resource ID of the source volume group for cloning
	SourceVolumeGroupResourceID *string

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

	// READ-ONLY; Pure Storage's internal ID of the storage pool
	StoragePoolInternalID *string

	// READ-ONLY; Pure Storage's internal ID of the volume group
	VolumeGroupInternalID *string
}

// VolumeGroupStatus - Volume group status information
type VolumeGroupStatus struct {
	// REQUIRED; Number of hosts currently connected to the volume group
	ConnectedHostCount *int32

	// REQUIRED; Storage space usage for the volume group
	Space *Space
}

// VolumeGroupUpdate - The type used for update operations of the VolumeGroup.
type VolumeGroupUpdate struct {
	// The resource-specific properties for this resource.
	Properties *VolumeGroupUpdateProperties

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

// VolumeGroupUpdateProperties - The updatable properties of the VolumeGroup.
type VolumeGroupUpdateProperties struct {
	// Performance parameters for the volume group
	PerformanceParameters *PerformanceParameters

	// Protection parameters for the volume group
	ProtectionParameters *ProtectionParameters
}

// VolumeLimits - Limits used for volumes
type VolumeLimits struct {
	// REQUIRED; Provisioned size limits for a volume, in bytes
	ProvisionedSize *RangeLimits
}

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

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

// VolumeProperties - Volume properties
type VolumeProperties struct {
	// REQUIRED; Volume's soft-deletion state
	SoftDeletion *SoftDeletion

	// READ-ONLY; AVS-specific volume information
	Avs *AvsDiskDetails

	// READ-ONLY; Volume creation date, as an RFC 3339 timestamp
	CreatedTimestamp *string

	// READ-ONLY; Human-readable name of the volume
	DisplayName *string

	// READ-ONLY; Currently provisioned size of the volume, in bytes
	ProvisionedSize *int64

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

	// READ-ONLY; Storage space usage
	Space *Space

	// READ-ONLY; Pure Storage's internal ID for the storage pool containing the volume
	StoragePoolInternalID *string

	// READ-ONLY; Azure Resource ID of the storage pool containing this volume
	StoragePoolResourceID *string

	// READ-ONLY; Pure Storage's internal ID for the volume
	VolumeInternalID *string

	// READ-ONLY; Specify which control plane handles the lifecycle of the volume
	VolumeType *VolumeType
}

// VolumeUpdate - The type used for update operations of the Volume.
type VolumeUpdate struct {
	// The resource-specific properties for this resource.
	Properties *VolumeUpdateProperties
}

// VolumeUpdateProperties - The updatable properties of the Volume.
type VolumeUpdateProperties struct {
	// Currently provisioned size of the volume, in bytes
	ProvisionedSize *int64
}
