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

import "time"

// Addon - An addon resource
type Addon struct {
	// The resource-specific properties for this resource.
	Properties AddonPropertiesClassification

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

// AddonArcProperties - The properties of an Arc addon
type AddonArcProperties struct {
	// CONSTANT; The type of private cloud addon
	// Field has constant value AddonTypeArc, any specified value is ignored.
	AddonType *AddonType

	// The VMware vCenter resource ID
	VCenter *string

	// READ-ONLY; The state of the addon provisioning
	ProvisioningState *AddonProvisioningState
}

// GetAddonProperties implements the AddonPropertiesClassification interface for type AddonArcProperties.
func (a *AddonArcProperties) GetAddonProperties() *AddonProperties {
	return &AddonProperties{
		AddonType:         a.AddonType,
		ProvisioningState: a.ProvisioningState,
	}
}

// AddonHcxProperties - The properties of an HCX addon
type AddonHcxProperties struct {
	// CONSTANT; The type of private cloud addon
	// Field has constant value AddonTypeHCX, any specified value is ignored.
	AddonType *AddonType

	// REQUIRED; The HCX offer, example VMware MaaS Cloud Provider (Enterprise)
	Offer *string

	// HCX management network.
	ManagementNetwork *string

	// HCX uplink network
	UplinkNetwork *string

	// READ-ONLY; The state of the addon provisioning
	ProvisioningState *AddonProvisioningState
}

// GetAddonProperties implements the AddonPropertiesClassification interface for type AddonHcxProperties.
func (a *AddonHcxProperties) GetAddonProperties() *AddonProperties {
	return &AddonProperties{
		AddonType:         a.AddonType,
		ProvisioningState: a.ProvisioningState,
	}
}

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

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

// AddonProperties - The properties of an addon
type AddonProperties struct {
	// REQUIRED; Addon type
	AddonType *AddonType

	// READ-ONLY; The state of the addon provisioning
	ProvisioningState *AddonProvisioningState
}

// GetAddonProperties implements the AddonPropertiesClassification interface for type AddonProperties.
func (a *AddonProperties) GetAddonProperties() *AddonProperties { return a }

// AddonSrmProperties - The properties of a Site Recovery Manager (SRM) addon
type AddonSrmProperties struct {
	// CONSTANT; The type of private cloud addon
	// Field has constant value AddonTypeSRM, any specified value is ignored.
	AddonType *AddonType

	// The Site Recovery Manager (SRM) license
	LicenseKey *string

	// READ-ONLY; The state of the addon provisioning
	ProvisioningState *AddonProvisioningState
}

// GetAddonProperties implements the AddonPropertiesClassification interface for type AddonSrmProperties.
func (a *AddonSrmProperties) GetAddonProperties() *AddonProperties {
	return &AddonProperties{
		AddonType:         a.AddonType,
		ProvisioningState: a.ProvisioningState,
	}
}

// AddonVrProperties - The properties of a vSphere Replication (VR) addon
type AddonVrProperties struct {
	// CONSTANT; The type of private cloud addon
	// Field has constant value AddonTypeVR, any specified value is ignored.
	AddonType *AddonType

	// REQUIRED; The vSphere Replication Server (VRS) count
	VrsCount *int32

	// READ-ONLY; The state of the addon provisioning
	ProvisioningState *AddonProvisioningState
}

// GetAddonProperties implements the AddonPropertiesClassification interface for type AddonVrProperties.
func (a *AddonVrProperties) GetAddonProperties() *AddonProperties {
	return &AddonProperties{
		AddonType:         a.AddonType,
		ProvisioningState: a.ProvisioningState,
	}
}

// AdminCredentials - Administrative credentials for accessing vCenter and NSX-T
type AdminCredentials struct {
	// READ-ONLY; NSX-T Manager password
	NsxtPassword *string

	// READ-ONLY; NSX-T Manager username
	NsxtUsername *string

	// READ-ONLY; vCenter admin password
	VcenterPassword *string

	// READ-ONLY; vCenter admin username
	VcenterUsername *string
}

// AvailabilityProperties - The properties describing private cloud availability zone distribution
type AvailabilityProperties struct {
	// The secondary availability zone for the private cloud
	SecondaryZone *int32

	// The availability strategy for the private cloud
	Strategy *AvailabilityStrategy

	// The primary availability zone for the private cloud
	Zone *int32
}

// Circuit - An ExpressRoute Circuit
type Circuit struct {
	// READ-ONLY; Identifier of the ExpressRoute Circuit (Microsoft Colo only)
	ExpressRouteID *string

	// READ-ONLY; ExpressRoute Circuit private peering identifier
	ExpressRoutePrivatePeeringID *string

	// READ-ONLY; CIDR of primary subnet
	PrimarySubnet *string

	// READ-ONLY; CIDR of secondary subnet
	SecondarySubnet *string
}

// CloudLink - A cloud link resource
type CloudLink struct {
	// The resource-specific properties for this resource.
	Properties *CloudLinkProperties

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

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

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

// CloudLinkProperties - The properties of a cloud link.
type CloudLinkProperties struct {
	// Identifier of the other private cloud participating in the link.
	LinkedCloud *string

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *CloudLinkProvisioningState

	// READ-ONLY; The state of the cloud link.
	Status *CloudLinkStatus
}

// Cluster - A cluster resource
type Cluster struct {
	// REQUIRED; The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU

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

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

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

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

// ClusterProperties - The properties of a cluster
type ClusterProperties struct {
	// The cluster size
	ClusterSize *int32

	// The hosts
	Hosts []*string

	// Name of the vsan datastore associated with the cluster
	VsanDatastoreName *string

	// READ-ONLY; The identity
	ClusterID *int32

	// READ-ONLY; The state of the cluster provisioning
	ProvisioningState *ClusterProvisioningState
}

// ClusterUpdate - An update of a cluster resource
type ClusterUpdate struct {
	// The properties of a cluster resource that may be updated
	Properties *ClusterUpdateProperties

	// The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU
}

// ClusterUpdateProperties - The properties of a cluster that may be updated
type ClusterUpdateProperties struct {
	// The cluster size
	ClusterSize *int32

	// The hosts
	Hosts []*string
}

// ClusterZone - Zone and associated hosts info
type ClusterZone struct {
	// READ-ONLY; List of hosts belonging to the availability zone in a cluster
	Hosts []*string

	// READ-ONLY; Availability zone identifier
	Zone *string
}

// ClusterZoneList - List of all zones and associated hosts for a cluster
type ClusterZoneList struct {
	// Zone and associated hosts info
	Zones []*ClusterZone
}

// Datastore - A datastore resource
type Datastore struct {
	// The resource-specific properties for this resource.
	Properties *DatastoreProperties

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

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

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

// DatastoreProperties - The properties of a datastore
type DatastoreProperties struct {
	// An iSCSI volume
	DiskPoolVolume *DiskPoolVolume

	// An Elastic SAN volume
	ElasticSanVolume *ElasticSanVolume

	// An Azure NetApp Files volume
	NetAppVolume *NetAppVolume

	// A Pure Storage volume
	PureStorageVolume *PureStorageVolume

	// READ-ONLY; The state of the datastore provisioning
	ProvisioningState *DatastoreProvisioningState

	// READ-ONLY; The operational status of the datastore
	Status *DatastoreStatus
}

// DiskPoolVolume - An iSCSI volume from Microsoft.StoragePool provider
type DiskPoolVolume struct {
	// REQUIRED; Name of the LUN to be used for datastore
	LunName *string

	// REQUIRED; Azure resource ID of the iSCSI target
	TargetID *string

	// Mode that describes whether the LUN has to be mounted as a datastore or
	// attached as a LUN
	MountOption *MountOptionEnum

	// READ-ONLY; Device path
	Path *string
}

// ElasticSanVolume - An Elastic SAN volume from Microsoft.ElasticSan provider
type ElasticSanVolume struct {
	// REQUIRED; Azure resource ID of the Elastic SAN Volume
	TargetID *string
}

// Encryption - The properties of customer managed encryption key
type Encryption struct {
	// The key vault where the encryption key is stored
	KeyVaultProperties *EncryptionKeyVaultProperties

	// Status of customer managed encryption key
	Status *EncryptionState
}

// EncryptionKeyVaultProperties - An Encryption Key
type EncryptionKeyVaultProperties struct {
	// The name of the key.
	KeyName *string

	// The URL of the vault.
	KeyVaultURL *string

	// The version of the key.
	KeyVersion *string

	// READ-ONLY; The auto-detected version of the key if versionType is auto-detected.
	AutoDetectedKeyVersion *string

	// READ-ONLY; The state of key provided
	KeyState *EncryptionKeyStatus

	// READ-ONLY; Property of the key if user provided or auto detected
	VersionType *EncryptionVersionType
}

// Endpoints - Endpoint addresses
type Endpoints struct {
	// READ-ONLY; Endpoint FQDN for the HCX Cloud Manager
	HcxCloudManager *string

	// READ-ONLY; Endpoint IP for the HCX Cloud Manager
	HcxCloudManagerIP *string

	// READ-ONLY; Endpoint FQDN for the NSX-T Data Center manager
	NsxtManager *string

	// READ-ONLY; Endpoint IP for the NSX-T Data Center manager
	NsxtManagerIP *string

	// READ-ONLY; Endpoint IP for Virtual Center Server Appliance
	VcenterIP *string

	// READ-ONLY; Endpoint FQDN for Virtual Center Server Appliance
	Vcsa *string
}

// ExpressRouteAuthorization - ExpressRoute Circuit Authorization
type ExpressRouteAuthorization struct {
	// The resource-specific properties for this resource.
	Properties *ExpressRouteAuthorizationProperties

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

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

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

// ExpressRouteAuthorizationProperties - The properties of an ExpressRoute Circuit Authorization resource
type ExpressRouteAuthorizationProperties struct {
	// The ID of the ExpressRoute Circuit
	ExpressRouteID *string

	// READ-ONLY; The ID of the ExpressRoute Circuit Authorization
	ExpressRouteAuthorizationID *string

	// READ-ONLY; The key of the ExpressRoute Circuit Authorization
	ExpressRouteAuthorizationKey *string

	// READ-ONLY; The state of the ExpressRoute Circuit Authorization provisioning
	ProvisioningState *ExpressRouteAuthorizationProvisioningState
}

// GeneralHostProperties - The properties of a general host.
type GeneralHostProperties struct {
	// REQUIRED; The kind of host.
	Kind *HostKind

	// Display name of the host in VMware vCenter.
	DisplayName *string

	// If provided, the host is in maintenance. The value is the reason for maintenance.
	Maintenance *HostMaintenance

	// READ-ONLY
	FaultDomain *string

	// READ-ONLY; Fully qualified domain name of the host.
	Fqdn *string

	// READ-ONLY; vCenter managed object reference ID of the host.
	MoRefID *string

	// READ-ONLY; The state of the host provisioning.
	ProvisioningState *HostProvisioningState
}

// GetHostProperties implements the HostPropertiesClassification interface for type GeneralHostProperties.
func (g *GeneralHostProperties) GetHostProperties() *HostProperties {
	return &HostProperties{
		DisplayName:       g.DisplayName,
		FaultDomain:       g.FaultDomain,
		Fqdn:              g.Fqdn,
		Kind:              g.Kind,
		Maintenance:       g.Maintenance,
		MoRefID:           g.MoRefID,
		ProvisioningState: g.ProvisioningState,
	}
}

// GlobalReachConnection - A global reach connection resource
type GlobalReachConnection struct {
	// The resource-specific properties for this resource.
	Properties *GlobalReachConnectionProperties

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

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

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

// GlobalReachConnectionProperties - The properties of a global reach connection
type GlobalReachConnectionProperties struct {
	// Authorization key from the peer express route used for the global reach
	// connection
	AuthorizationKey *string

	// The ID of the Private Cloud's ExpressRoute Circuit that is participating in the
	// global reach connection
	ExpressRouteID *string

	// Identifier of the ExpressRoute Circuit to peer with in the global reach
	// connection
	PeerExpressRouteCircuit *string

	// READ-ONLY; The network used for global reach carved out from the original network block
	// provided for the private cloud
	AddressPrefix *string

	// READ-ONLY; The connection status of the global reach connection
	CircuitConnectionStatus *GlobalReachConnectionStatus

	// READ-ONLY; The state of the ExpressRoute Circuit Authorization provisioning
	ProvisioningState *GlobalReachConnectionProvisioningState
}

// HcxEnterpriseSite - An HCX Enterprise Site resource
type HcxEnterpriseSite struct {
	// The resource-specific properties for this resource.
	Properties *HcxEnterpriseSiteProperties

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

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

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

// HcxEnterpriseSiteProperties - The properties of an HCX Enterprise Site
type HcxEnterpriseSiteProperties struct {
	// READ-ONLY; The activation key
	ActivationKey *string

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *HcxEnterpriseSiteProvisioningState

	// READ-ONLY; The status of the HCX Enterprise Site
	Status *HcxEnterpriseSiteStatus
}

// Host - A host resource
type Host struct {
	// The resource-specific properties for this resource.
	Properties HostPropertiesClassification

	// The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU

	// The availability zones.
	Zones []*string

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

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

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

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

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

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

// HostProperties - The properties of a host.
type HostProperties struct {
	// REQUIRED; The kind of host
	Kind *HostKind

	// Display name of the host in VMware vCenter.
	DisplayName *string

	// If provided, the host is in maintenance. The value is the reason for maintenance.
	Maintenance *HostMaintenance

	// READ-ONLY
	FaultDomain *string

	// READ-ONLY; Fully qualified domain name of the host.
	Fqdn *string

	// READ-ONLY; vCenter managed object reference ID of the host.
	MoRefID *string

	// READ-ONLY; The state of the host provisioning.
	ProvisioningState *HostProvisioningState
}

// GetHostProperties implements the HostPropertiesClassification interface for type HostProperties.
func (h *HostProperties) GetHostProperties() *HostProperties { return h }

// IdentitySource - vCenter Single Sign On Identity Source
type IdentitySource struct {
	// The domain's NetBIOS name
	Alias *string

	// The base distinguished name for groups
	BaseGroupDN *string

	// The base distinguished name for users
	BaseUserDN *string

	// The domain's DNS name
	Domain *string

	// The name of the identity source
	Name *string

	// The password of the Active Directory user with a minimum of read-only access to
	// Base DN for users and groups.
	Password *string

	// Primary server URL
	PrimaryServer *string

	// Protect LDAP communication using SSL certificate (LDAPS)
	SSL *SSLEnum

	// Secondary server URL
	SecondaryServer *string

	// The ID of an Active Directory user with a minimum of read-only access to Base
	// DN for users and group
	Username *string
}

// IscsiPath - An iSCSI path resource
type IscsiPath struct {
	// The resource-specific properties for this resource.
	Properties *IscsiPathProperties

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

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

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

// IscsiPathProperties - The properties of an iSCSI path resource
type IscsiPathProperties struct {
	// REQUIRED; CIDR Block for iSCSI path.
	NetworkBlock *string

	// READ-ONLY; The state of the iSCSI path provisioning
	ProvisioningState *IscsiPathProvisioningState
}

// ManagementCluster - The properties of a management cluster
type ManagementCluster struct {
	// The cluster size
	ClusterSize *int32

	// The hosts
	Hosts []*string

	// Name of the vsan datastore associated with the cluster
	VsanDatastoreName *string

	// READ-ONLY; The identity
	ClusterID *int32

	// READ-ONLY; The state of the cluster provisioning
	ProvisioningState *ClusterProvisioningState
}

// NetAppVolume - An Azure NetApp Files volume from Microsoft.NetApp provider
type NetAppVolume struct {
	// REQUIRED; Azure resource ID of the NetApp volume
	ID *string
}

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

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

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

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

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

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

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

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

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

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

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

// PSCredentialExecutionParameter - a powershell credential object
type PSCredentialExecutionParameter struct {
	// REQUIRED; The parameter name
	Name *string

	// CONSTANT; The type of execution parameter
	// Field has constant value ScriptExecutionParameterTypeCredential, any specified value is ignored.
	Type *ScriptExecutionParameterType

	// password for login
	Password *string

	// username for login
	Username *string
}

// GetScriptExecutionParameter implements the ScriptExecutionParameterClassification interface for type PSCredentialExecutionParameter.
func (p *PSCredentialExecutionParameter) GetScriptExecutionParameter() *ScriptExecutionParameter {
	return &ScriptExecutionParameter{
		Name: p.Name,
		Type: p.Type,
	}
}

// PagedResourceSKU - Paged collection of ResourceSku items
type PagedResourceSKU struct {
	// REQUIRED; The ResourceSku items on this page
	Value []*ResourceSKU

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

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

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

// PlacementPolicy - A vSphere Distributed Resource Scheduler (DRS) placement policy
type PlacementPolicy struct {
	// The resource-specific properties for this resource.
	Properties PlacementPolicyPropertiesClassification

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

// PlacementPolicyProperties - Abstract placement policy properties
type PlacementPolicyProperties struct {
	// REQUIRED; Placement Policy type
	Type *PlacementPolicyType

	// Display name of the placement policy
	DisplayName *string

	// Whether the placement policy is enabled or disabled
	State *PlacementPolicyState

	// READ-ONLY; The provisioning state
	ProvisioningState *PlacementPolicyProvisioningState
}

// GetPlacementPolicyProperties implements the PlacementPolicyPropertiesClassification interface for type PlacementPolicyProperties.
func (p *PlacementPolicyProperties) GetPlacementPolicyProperties() *PlacementPolicyProperties {
	return p
}

// PlacementPolicyUpdate - An update of a DRS placement policy resource
type PlacementPolicyUpdate struct {
	// The properties of a placement policy resource that may be updated
	Properties *PlacementPolicyUpdateProperties
}

// PlacementPolicyUpdateProperties - The properties of a placement policy resource that may be updated
type PlacementPolicyUpdateProperties struct {
	// vm-host placement policy affinity strength (should/must)
	AffinityStrength *AffinityStrength

	// placement policy azure hybrid benefit opt-in type
	AzureHybridBenefitType *AzureHybridBenefitType

	// Host members list
	HostMembers []*string

	// Whether the placement policy is enabled or disabled
	State *PlacementPolicyState

	// Virtual machine members list
	VMMembers []*string
}

// PrivateCloud - A private cloud resource
type PrivateCloud struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// REQUIRED; The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU

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

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

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

	// The availability zones.
	Zones []*string

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

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

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

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

// PrivateCloudIdentity - Managed service identity (either system assigned, or none)
type PrivateCloudIdentity struct {
	// REQUIRED; The type of managed identity assigned to this resource.
	Type *ResourceIdentityType

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

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

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

// PrivateCloudProperties - The properties of a private cloud resource
type PrivateCloudProperties struct {
	// REQUIRED; The default cluster used for management
	ManagementCluster *ManagementCluster

	// REQUIRED; The block of addresses should be unique across VNet in your subscription as
	// well as on-premise. Make sure the CIDR format is conformed to (A.B.C.D/X) where
	// A,B,C,D are between 0 and 255, and X is between 0 and 22
	NetworkBlock *string

	// Properties describing how the cloud is distributed across availability zones
	Availability *AvailabilityProperties

	// An ExpressRoute Circuit
	Circuit *Circuit

	// The type of DNS zone to use.
	DNSZoneType *DNSZoneType

	// Customer managed key encryption, can be enabled or disabled
	Encryption *Encryption

	// Array of additional networks noncontiguous with networkBlock. Networks must be
	// unique and non-overlapping across VNet in your subscription, on-premise, and
	// this privateCloud networkBlock attribute. Make sure the CIDR format conforms to
	// (A.B.C.D/X).
	ExtendedNetworkBlocks []*string

	// vCenter Single Sign On Identity Sources
	IdentitySources []*IdentitySource

	// Connectivity to internet is enabled or disabled
	Internet *InternetEnum

	// Optionally, set the NSX-T Manager password when the private cloud is created
	NsxtPassword *string

	// A secondary expressRoute circuit from a separate AZ. Only present in a
	// stretched private cloud
	SecondaryCircuit *Circuit

	// Optionally, set the vCenter admin password when the private cloud is created
	VcenterPassword *string

	// Azure resource ID of the virtual network
	VirtualNetworkID *string

	// READ-ONLY; The endpoints
	Endpoints *Endpoints

	// READ-ONLY; Array of cloud link IDs from other clouds that connect to this one
	ExternalCloudLinks []*string

	// READ-ONLY; Network used to access vCenter Server and NSX-T Manager
	ManagementNetwork *string

	// READ-ONLY; Flag to indicate whether the private cloud has the quota for provisioned NSX
	// Public IP count raised from 64 to 1024
	NsxPublicIPQuotaRaised *NsxPublicIPQuotaRaisedEnum

	// READ-ONLY; Thumbprint of the NSX-T Manager SSL certificate
	NsxtCertificateThumbprint *string

	// READ-ONLY; Used for virtual machine cold migration, cloning, and snapshot migration
	ProvisioningNetwork *string

	// READ-ONLY; The provisioning state
	ProvisioningState *PrivateCloudProvisioningState

	// READ-ONLY; Thumbprint of the vCenter Server SSL certificate
	VcenterCertificateThumbprint *string

	// READ-ONLY; Used for live migration of virtual machines
	VmotionNetwork *string
}

// PrivateCloudUpdate - An update to a private cloud resource
type PrivateCloudUpdate struct {
	// The managed service identities assigned to this resource.
	Identity *PrivateCloudIdentity

	// The updatable properties of a private cloud resource
	Properties *PrivateCloudUpdateProperties

	// The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU

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

// PrivateCloudUpdateProperties - The properties of a private cloud resource that may be updated
type PrivateCloudUpdateProperties struct {
	// Properties describing how the cloud is distributed across availability zones
	Availability *AvailabilityProperties

	// The type of DNS zone to use.
	DNSZoneType *DNSZoneType

	// Customer managed key encryption, can be enabled or disabled
	Encryption *Encryption

	// Array of additional networks noncontiguous with networkBlock. Networks must be
	// unique and non-overlapping across VNet in your subscription, on-premise, and
	// this privateCloud networkBlock attribute. Make sure the CIDR format conforms to
	// (A.B.C.D/X).
	ExtendedNetworkBlocks []*string

	// vCenter Single Sign On Identity Sources
	IdentitySources []*IdentitySource

	// Connectivity to internet is enabled or disabled
	Internet *InternetEnum

	// The default cluster used for management
	ManagementCluster *ManagementCluster
}

// ProvisionedNetwork - A provisioned network resource
type ProvisionedNetwork struct {
	// The resource-specific properties for this resource.
	Properties *ProvisionedNetworkProperties

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

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

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

// ProvisionedNetworkProperties - The properties of a provisioned network.
type ProvisionedNetworkProperties struct {
	// READ-ONLY; The address prefixes of the provisioned network in CIDR notation.
	AddressPrefix *string

	// READ-ONLY; The type of network provisioned.
	NetworkType *ProvisionedNetworkTypes

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *ProvisionedNetworkProvisioningState
}

// PureStoragePolicy - An instance describing a Pure Storage Policy Based Management policy
type PureStoragePolicy struct {
	// The resource-specific properties for this resource.
	Properties *PureStoragePolicyProperties

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

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

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

// PureStoragePolicyProperties - Properties of a Pure Storage Policy Based Management policy
type PureStoragePolicyProperties struct {
	// REQUIRED; Definition of a Pure Storage Policy Based Management policy
	StoragePolicyDefinition *string

	// REQUIRED; Azure resource ID of the Pure Storage Pool associated with the storage policy
	StoragePoolID *string

	// READ-ONLY; The state of the Pure Storage Policy Based Management policy provisioning
	ProvisioningState *PureStoragePolicyProvisioningState
}

// PureStorageVolume - A Pure Storage volume from PureStorage.Block provider
type PureStorageVolume struct {
	// REQUIRED; Volume size to be used to create a Virtual Volumes (vVols) datastore
	SizeGb *int32

	// REQUIRED; Azure resource ID of the Pure Storage Pool
	StoragePoolID *string
}

// Quota - Subscription quotas
type Quota struct {
	// READ-ONLY; Remaining hosts quota by sku type
	HostsRemaining map[string]*int32

	// READ-ONLY; Host quota is active for current subscription
	QuotaEnabled *QuotaEnabled
}

// ResourceSKU - A SKU for a resource.
type ResourceSKU struct {
	// REQUIRED; A list of locations and availability zones in those locations where the SKU is available
	LocationInfo []*ResourceSKULocationInfo

	// REQUIRED; The set of locations that the SKU is available.
	Locations []*string

	// REQUIRED; The name of the SKU.
	Name *string

	// REQUIRED; The type of resource the SKU applies to.
	ResourceType *ResourceSKUResourceType

	// REQUIRED; The restrictions of the SKU.
	Restrictions []*ResourceSKURestrictions

	// Name value pairs to describe the capability.
	Capabilities []*ResourceSKUCapabilities

	// The family of the SKU.
	Family *string

	// The size of the SKU.
	Size *string

	// The tier of virtual machines in a scale set
	Tier *string
}

// ResourceSKUCapabilities - Describes The SKU capabilities object.
type ResourceSKUCapabilities struct {
	// REQUIRED; The name of the SKU capability.
	Name *string

	// REQUIRED; The value of the SKU capability.
	Value *string
}

// ResourceSKULocationInfo - Describes an available Compute SKU Location Information.
type ResourceSKULocationInfo struct {
	// REQUIRED; Location of the SKU
	Location *string

	// REQUIRED; Gets details of capabilities available to a SKU in specific zones.
	ZoneDetails []*ResourceSKUZoneDetails

	// REQUIRED; List of availability zones where the SKU is supported.
	Zones []*string
}

// ResourceSKURestrictionInfo - Describes an available Compute SKU Restriction Information.
type ResourceSKURestrictionInfo struct {
	// Locations where the SKU is restricted
	Locations []*string

	// List of availability zones where the SKU is restricted.
	Zones []*string
}

// ResourceSKURestrictions - The restrictions of the SKU.
type ResourceSKURestrictions struct {
	// REQUIRED; The information about the restriction where the SKU cannot be used.
	RestrictionInfo *ResourceSKURestrictionInfo

	// REQUIRED; The value of restrictions. If the restriction type is set to location. This would be different locations where
	// the SKU is restricted.
	Values []*string

	// the reason for restriction.
	ReasonCode *ResourceSKURestrictionsReasonCode

	// the type of restrictions.
	Type *ResourceSKURestrictionsType
}

// ResourceSKUZoneDetails - Describes The zonal capabilities of a SKU.
type ResourceSKUZoneDetails struct {
	// REQUIRED; A list of capabilities that are available for the SKU in the specified list of zones.
	Capabilities []*ResourceSKUCapabilities

	// REQUIRED; Gets the set of zones that the SKU is available in with the specified capabilities.
	Name []*string
}

// SKU - The resource model definition representing SKU
type SKU struct {
	// REQUIRED; The name of the SKU. Ex - P3. It is typically a letter+number code
	Name *string

	// If the SKU supports scale out/in then the capacity integer should be included. If scale out/in is not possible for the
	// resource this may be omitted.
	Capacity *int32

	// If the service has different generations of hardware, for the same SKU, then that can be captured here.
	Family *string

	// The SKU size. When the name field is the combination of tier and some other value, this would be the standalone code.
	Size *string

	// This field is required to be implemented by the Resource Provider if the service has more than one tier, but is not required
	// on a PUT.
	Tier *SKUTier
}

// ScriptCmdlet - A cmdlet available for script execution
type ScriptCmdlet struct {
	// The resource-specific properties for this resource.
	Properties *ScriptCmdletProperties

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

// ScriptCmdletProperties - Properties of a pre-canned script
type ScriptCmdletProperties struct {
	// READ-ONLY; Specifies whether a script cmdlet is intended to be invoked only through automation or visible to customers
	Audience *ScriptCmdletAudience

	// READ-ONLY; Description of the scripts functionality
	Description *string

	// READ-ONLY; Parameters the script will accept
	Parameters []*ScriptParameter

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *ScriptCmdletProvisioningState

	// READ-ONLY; Recommended time limit for execution
	Timeout *string
}

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

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

// ScriptExecution - An instance of a script executed by a user - custom or AVS
type ScriptExecution struct {
	// The resource-specific properties for this resource.
	Properties *ScriptExecutionProperties

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

// ScriptExecutionParameter - The arguments passed in to the execution
type ScriptExecutionParameter struct {
	// REQUIRED; The parameter name
	Name *string

	// REQUIRED; script execution parameter type
	Type *ScriptExecutionParameterType
}

// GetScriptExecutionParameter implements the ScriptExecutionParameterClassification interface for type ScriptExecutionParameter.
func (s *ScriptExecutionParameter) GetScriptExecutionParameter() *ScriptExecutionParameter { return s }

// ScriptExecutionProperties - Properties of a user-invoked script
type ScriptExecutionProperties struct {
	// REQUIRED; Time limit for execution
	Timeout *string

	// Error message if the script was able to run, but if the script itself had
	// errors or powershell threw an exception
	FailureReason *string

	// Parameters that will be hidden/not visible to ARM, such as passwords and
	// credentials
	HiddenParameters []ScriptExecutionParameterClassification

	// User-defined dictionary.
	NamedOutputs map[string]any

	// Standard output stream from the powershell execution
	Output []*string

	// Parameters the script will accept
	Parameters []ScriptExecutionParameterClassification

	// Time to live for the resource. If not provided, will be available for 60 days
	Retention *string

	// A reference to the script cmdlet resource if user is running a AVS script
	ScriptCmdletID *string

	// READ-ONLY; Standard error output stream from the powershell execution
	Errors []*string

	// READ-ONLY; Time the script execution was finished
	FinishedAt *time.Time

	// READ-ONLY; Standard information out stream from the powershell execution
	Information []*string

	// READ-ONLY; The state of the script execution resource
	ProvisioningState *ScriptExecutionProvisioningState

	// READ-ONLY; Time the script execution was started
	StartedAt *time.Time

	// READ-ONLY; Time the script execution was submitted
	SubmittedAt *time.Time

	// READ-ONLY; Standard warning out stream from the powershell execution
	Warnings []*string
}

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

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

// ScriptPackage - Script Package resources available for execution
type ScriptPackage struct {
	// The resource-specific properties for this resource.
	Properties *ScriptPackageProperties

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

// ScriptPackageProperties - Properties of a Script Package subresource
type ScriptPackageProperties struct {
	// READ-ONLY; Company that created and supports the package
	Company *string

	// READ-ONLY; User friendly description of the package
	Description *string

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *ScriptPackageProvisioningState

	// READ-ONLY; Link to support by the package vendor
	URI *string

	// READ-ONLY; Module version
	Version *string
}

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

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

// ScriptParameter - An parameter that the script will accept
type ScriptParameter struct {
	// The parameter name that the script will expect a parameter value for
	Name *string

	// READ-ONLY; User friendly description of the parameter
	Description *string

	// READ-ONLY; Is this parameter required or optional
	Optional *OptionalParamEnum

	// READ-ONLY; The type of parameter the script is expecting. psCredential is a
	// PSCredentialObject
	Type *ScriptParameterTypes

	// READ-ONLY; Should this parameter be visible to arm and passed in the parameters argument
	// when executing
	Visibility *VisibilityParameterEnum
}

// ScriptSecureStringExecutionParameter - a plain text value execution parameter
type ScriptSecureStringExecutionParameter struct {
	// REQUIRED; The parameter name
	Name *string

	// CONSTANT; The type of execution parameter
	// Field has constant value ScriptExecutionParameterTypeSecureValue, any specified value is ignored.
	Type *ScriptExecutionParameterType

	// A secure value for the passed parameter, not to be stored in logs
	SecureValue *string
}

// GetScriptExecutionParameter implements the ScriptExecutionParameterClassification interface for type ScriptSecureStringExecutionParameter.
func (s *ScriptSecureStringExecutionParameter) GetScriptExecutionParameter() *ScriptExecutionParameter {
	return &ScriptExecutionParameter{
		Name: s.Name,
		Type: s.Type,
	}
}

// ScriptStringExecutionParameter - a plain text value execution parameter
type ScriptStringExecutionParameter struct {
	// REQUIRED; The parameter name
	Name *string

	// CONSTANT; The type of execution parameter
	// Field has constant value ScriptExecutionParameterTypeValue, any specified value is ignored.
	Type *ScriptExecutionParameterType

	// The value for the passed parameter
	Value *string
}

// GetScriptExecutionParameter implements the ScriptExecutionParameterClassification interface for type ScriptStringExecutionParameter.
func (s *ScriptStringExecutionParameter) GetScriptExecutionParameter() *ScriptExecutionParameter {
	return &ScriptExecutionParameter{
		Name: s.Name,
		Type: s.Type,
	}
}

// SpecializedHostProperties - The properties of a specialized host.
type SpecializedHostProperties struct {
	// REQUIRED; The kind of host is specialized.
	Kind *HostKind

	// Display name of the host in VMware vCenter.
	DisplayName *string

	// If provided, the host is in maintenance. The value is the reason for maintenance.
	Maintenance *HostMaintenance

	// READ-ONLY
	FaultDomain *string

	// READ-ONLY; Fully qualified domain name of the host.
	Fqdn *string

	// READ-ONLY; vCenter managed object reference ID of the host.
	MoRefID *string

	// READ-ONLY; The state of the host provisioning.
	ProvisioningState *HostProvisioningState
}

// GetHostProperties implements the HostPropertiesClassification interface for type SpecializedHostProperties.
func (s *SpecializedHostProperties) GetHostProperties() *HostProperties {
	return &HostProperties{
		DisplayName:       s.DisplayName,
		FaultDomain:       s.FaultDomain,
		Fqdn:              s.Fqdn,
		Kind:              s.Kind,
		Maintenance:       s.Maintenance,
		MoRefID:           s.MoRefID,
		ProvisioningState: s.ProvisioningState,
	}
}

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

// Trial - Subscription trial availability
type Trial struct {
	// READ-ONLY; Number of trial hosts available
	AvailableHosts *int32

	// READ-ONLY; Trial status
	Status *TrialStatus
}

// VMHostPlacementPolicyProperties - VM-Host placement policy properties
type VMHostPlacementPolicyProperties struct {
	// REQUIRED; placement policy affinity type
	AffinityType *AffinityType

	// REQUIRED; Host members list
	HostMembers []*string

	// CONSTANT; placement policy type
	// Field has constant value PlacementPolicyTypeVMHost, any specified value is ignored.
	Type *PlacementPolicyType

	// REQUIRED; Virtual machine members list
	VMMembers []*string

	// vm-host placement policy affinity strength (should/must)
	AffinityStrength *AffinityStrength

	// placement policy azure hybrid benefit opt-in type
	AzureHybridBenefitType *AzureHybridBenefitType

	// Display name of the placement policy
	DisplayName *string

	// Whether the placement policy is enabled or disabled
	State *PlacementPolicyState

	// READ-ONLY; The provisioning state
	ProvisioningState *PlacementPolicyProvisioningState
}

// GetPlacementPolicyProperties implements the PlacementPolicyPropertiesClassification interface for type VMHostPlacementPolicyProperties.
func (v *VMHostPlacementPolicyProperties) GetPlacementPolicyProperties() *PlacementPolicyProperties {
	return &PlacementPolicyProperties{
		DisplayName:       v.DisplayName,
		ProvisioningState: v.ProvisioningState,
		State:             v.State,
		Type:              v.Type,
	}
}

// VMPlacementPolicyProperties - VM-VM placement policy properties
type VMPlacementPolicyProperties struct {
	// REQUIRED; placement policy affinity type
	AffinityType *AffinityType

	// CONSTANT; placement policy type
	// Field has constant value PlacementPolicyTypeVMVM, any specified value is ignored.
	Type *PlacementPolicyType

	// REQUIRED; Virtual machine members list
	VMMembers []*string

	// Display name of the placement policy
	DisplayName *string

	// Whether the placement policy is enabled or disabled
	State *PlacementPolicyState

	// READ-ONLY; The provisioning state
	ProvisioningState *PlacementPolicyProvisioningState
}

// GetPlacementPolicyProperties implements the PlacementPolicyPropertiesClassification interface for type VMPlacementPolicyProperties.
func (v *VMPlacementPolicyProperties) GetPlacementPolicyProperties() *PlacementPolicyProperties {
	return &PlacementPolicyProperties{
		DisplayName:       v.DisplayName,
		ProvisioningState: v.ProvisioningState,
		State:             v.State,
		Type:              v.Type,
	}
}

// VirtualMachine - Virtual Machine
type VirtualMachine struct {
	// The resource-specific properties for this resource.
	Properties *VirtualMachineProperties

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

// VirtualMachineProperties - Virtual Machine Properties
type VirtualMachineProperties struct {
	// READ-ONLY; Display name of the VM.
	DisplayName *string

	// READ-ONLY; Path to virtual machine's folder starting from datacenter virtual machine folder
	FolderPath *string

	// READ-ONLY; vCenter managed object reference ID of the virtual machine
	MoRefID *string

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *VirtualMachineProvisioningState

	// READ-ONLY; Whether VM DRS-driven movement is restricted (enabled) or not (disabled)
	RestrictMovement *VirtualMachineRestrictMovementState
}

// VirtualMachineRestrictMovement - Set VM DRS-driven movement to restricted (enabled) or not (disabled)
type VirtualMachineRestrictMovement struct {
	// Whether VM DRS-driven movement is restricted (enabled) or not (disabled)
	RestrictMovement *VirtualMachineRestrictMovementState
}

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

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

// WorkloadNetwork - Workload Network
type WorkloadNetwork struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkProperties

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

// WorkloadNetworkDNSService - NSX DNS Service
type WorkloadNetworkDNSService struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkDNSServiceProperties

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

// WorkloadNetworkDNSServiceProperties - NSX DNS Service Properties
type WorkloadNetworkDNSServiceProperties struct {
	// DNS service IP of the DNS Service.
	DNSServiceIP *string

	// Default DNS zone of the DNS Service.
	DefaultDNSZone *string

	// Display name of the DNS Service.
	DisplayName *string

	// FQDN zones of the DNS Service.
	FqdnZones []*string

	// DNS Service log level.
	LogLevel *DNSServiceLogLevelEnum

	// NSX revision number.
	Revision *int64

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkDNSServiceProvisioningState

	// READ-ONLY; DNS Service status.
	Status *DNSServiceStatusEnum
}

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

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

// WorkloadNetworkDNSZone - NSX DNS Zone
type WorkloadNetworkDNSZone struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkDNSZoneProperties

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

// WorkloadNetworkDNSZoneProperties - NSX DNS Zone Properties
type WorkloadNetworkDNSZoneProperties struct {
	// DNS Server IP array of the DNS Zone.
	DNSServerIPs []*string

	// Number of DNS Services using the DNS zone.
	DNSServices *int64

	// Display name of the DNS Zone.
	DisplayName *string

	// Domain names of the DNS Zone.
	Domain []*string

	// NSX revision number.
	Revision *int64

	// Source IP of the DNS Zone.
	SourceIP *string

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkDNSZoneProvisioningState
}

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

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

// WorkloadNetworkDhcp - NSX DHCP
type WorkloadNetworkDhcp struct {
	// The resource-specific properties for this resource.
	Properties WorkloadNetworkDhcpEntityClassification

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

// WorkloadNetworkDhcpEntity - Base class for WorkloadNetworkDhcpServer and WorkloadNetworkDhcpRelay to
// inherit from
type WorkloadNetworkDhcpEntity struct {
	// REQUIRED; Type of DHCP: SERVER or RELAY.
	DhcpType *DhcpTypeEnum

	// Display name of the DHCP entity.
	DisplayName *string

	// NSX revision number.
	Revision *int64

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkDhcpProvisioningState

	// READ-ONLY; NSX Segments consuming DHCP.
	Segments []*string
}

// GetWorkloadNetworkDhcpEntity implements the WorkloadNetworkDhcpEntityClassification interface for type WorkloadNetworkDhcpEntity.
func (w *WorkloadNetworkDhcpEntity) GetWorkloadNetworkDhcpEntity() *WorkloadNetworkDhcpEntity {
	return w
}

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

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

// WorkloadNetworkDhcpRelay - NSX DHCP Relay
type WorkloadNetworkDhcpRelay struct {
	// CONSTANT; Type of DHCP: SERVER or RELAY.
	// Field has constant value DhcpTypeEnumRELAY, any specified value is ignored.
	DhcpType *DhcpTypeEnum

	// Display name of the DHCP entity.
	DisplayName *string

	// NSX revision number.
	Revision *int64

	// DHCP Relay Addresses. Max 3.
	ServerAddresses []*string

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkDhcpProvisioningState

	// READ-ONLY; NSX Segments consuming DHCP.
	Segments []*string
}

// GetWorkloadNetworkDhcpEntity implements the WorkloadNetworkDhcpEntityClassification interface for type WorkloadNetworkDhcpRelay.
func (w *WorkloadNetworkDhcpRelay) GetWorkloadNetworkDhcpEntity() *WorkloadNetworkDhcpEntity {
	return &WorkloadNetworkDhcpEntity{
		DhcpType:          w.DhcpType,
		DisplayName:       w.DisplayName,
		ProvisioningState: w.ProvisioningState,
		Revision:          w.Revision,
		Segments:          w.Segments,
	}
}

// WorkloadNetworkDhcpServer - NSX DHCP Server
type WorkloadNetworkDhcpServer struct {
	// CONSTANT; Type of DHCP: SERVER or RELAY.
	// Field has constant value DhcpTypeEnumSERVER, any specified value is ignored.
	DhcpType *DhcpTypeEnum

	// Display name of the DHCP entity.
	DisplayName *string

	// DHCP Server Lease Time.
	LeaseTime *int64

	// NSX revision number.
	Revision *int64

	// DHCP Server Address.
	ServerAddress *string

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkDhcpProvisioningState

	// READ-ONLY; NSX Segments consuming DHCP.
	Segments []*string
}

// GetWorkloadNetworkDhcpEntity implements the WorkloadNetworkDhcpEntityClassification interface for type WorkloadNetworkDhcpServer.
func (w *WorkloadNetworkDhcpServer) GetWorkloadNetworkDhcpEntity() *WorkloadNetworkDhcpEntity {
	return &WorkloadNetworkDhcpEntity{
		DhcpType:          w.DhcpType,
		DisplayName:       w.DisplayName,
		ProvisioningState: w.ProvisioningState,
		Revision:          w.Revision,
		Segments:          w.Segments,
	}
}

// WorkloadNetworkGateway - NSX Gateway.
type WorkloadNetworkGateway struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkGatewayProperties

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

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

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

// WorkloadNetworkGatewayProperties - Properties of a NSX Gateway.
type WorkloadNetworkGatewayProperties struct {
	// Display name of the DHCP entity.
	DisplayName *string

	// READ-ONLY; NSX Gateway Path.
	Path *string

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *WorkloadNetworkProvisioningState
}

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

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

// WorkloadNetworkPortMirroring - NSX Port Mirroring
type WorkloadNetworkPortMirroring struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkPortMirroringProperties

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

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

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

// WorkloadNetworkPortMirroringProperties - NSX Port Mirroring Properties
type WorkloadNetworkPortMirroringProperties struct {
	// Destination VM Group.
	Destination *string

	// Direction of port mirroring profile.
	Direction *PortMirroringDirectionEnum

	// Display name of the port mirroring profile.
	DisplayName *string

	// NSX revision number.
	Revision *int64

	// Source VM Group.
	Source *string

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkPortMirroringProvisioningState

	// READ-ONLY; Port Mirroring Status.
	Status *PortMirroringStatusEnum
}

// WorkloadNetworkProperties - The properties of a workload network
type WorkloadNetworkProperties struct {
	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *WorkloadNetworkProvisioningState
}

// WorkloadNetworkPublicIP - NSX Public IP Block
type WorkloadNetworkPublicIP struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkPublicIPProperties

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

// WorkloadNetworkPublicIPProperties - NSX Public IP Block Properties
type WorkloadNetworkPublicIPProperties struct {
	// Display name of the Public IP Block.
	DisplayName *string

	// Number of Public IPs requested.
	NumberOfPublicIPs *int64

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkPublicIPProvisioningState

	// READ-ONLY; CIDR Block of the Public IP Block.
	PublicIPBlock *string
}

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

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

// WorkloadNetworkSegment - NSX Segment
type WorkloadNetworkSegment struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkSegmentProperties

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

// WorkloadNetworkSegmentPortVif - Ports and any VIF attached to segment.
type WorkloadNetworkSegmentPortVif struct {
	// Name of port or VIF attached to segment.
	PortName *string
}

// WorkloadNetworkSegmentProperties - NSX Segment Properties
type WorkloadNetworkSegmentProperties struct {
	// Gateway which to connect segment to.
	ConnectedGateway *string

	// Display name of the segment.
	DisplayName *string

	// NSX revision number.
	Revision *int64

	// Subnet which to connect segment to.
	Subnet *WorkloadNetworkSegmentSubnet

	// READ-ONLY; Port Vif which segment is associated with.
	PortVif []*WorkloadNetworkSegmentPortVif

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkSegmentProvisioningState

	// READ-ONLY; Segment status.
	Status *SegmentStatusEnum
}

// WorkloadNetworkSegmentSubnet - Subnet configuration for segment
type WorkloadNetworkSegmentSubnet struct {
	// DHCP Range assigned for subnet.
	DhcpRanges []*string

	// Gateway address.
	GatewayAddress *string
}

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

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

// WorkloadNetworkVMGroup - NSX VM Group
type WorkloadNetworkVMGroup struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkVMGroupProperties

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

// WorkloadNetworkVMGroupProperties - NSX VM Group Properties
type WorkloadNetworkVMGroupProperties struct {
	// Display name of the VM group.
	DisplayName *string

	// Virtual machine members of this group.
	Members []*string

	// NSX revision number.
	Revision *int64

	// READ-ONLY; The provisioning state
	ProvisioningState *WorkloadNetworkVMGroupProvisioningState

	// READ-ONLY; VM Group status.
	Status *VMGroupStatusEnum
}

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

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

// WorkloadNetworkVirtualMachine - NSX Virtual Machine
type WorkloadNetworkVirtualMachine struct {
	// The resource-specific properties for this resource.
	Properties *WorkloadNetworkVirtualMachineProperties

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

// WorkloadNetworkVirtualMachineProperties - NSX Virtual Machine Properties
type WorkloadNetworkVirtualMachineProperties struct {
	// Display name of the VM.
	DisplayName *string

	// READ-ONLY; The provisioning state of the resource.
	ProvisioningState *WorkloadNetworkProvisioningState

	// READ-ONLY; Virtual machine type.
	VMType *VMTypeEnum
}

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

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