// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Code generated by Microsoft (R) AutoRest Code Generator. DO NOT EDIT.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.

package armdeployments

import "time"

type APIProfile struct {
	// READ-ONLY; The API version.
	APIVersion *string

	// READ-ONLY; The profile version.
	ProfileVersion *string
}

// Alias - The alias type.
type Alias struct {
	// The default path for an alias.
	DefaultPath *string

	// The default pattern for an alias.
	DefaultPattern *AliasPattern

	// The alias name.
	Name *string

	// The paths for an alias.
	Paths []*AliasPath

	// The type of the alias.
	Type *AliasType

	// READ-ONLY; The default alias path metadata. Applies to the default path and to any alias path that doesn't have metadata
	DefaultMetadata *AliasPathMetadata
}

// AliasPath - The type of the paths for alias.
type AliasPath struct {
	// The API versions.
	APIVersions []*string

	// The path of an alias.
	Path *string

	// The pattern for an alias path.
	Pattern *AliasPattern

	// READ-ONLY; The metadata of the alias path. If missing, fall back to the default metadata of the alias.
	Metadata *AliasPathMetadata
}

type AliasPathMetadata struct {
	// READ-ONLY; The attributes of the token that the alias path is referring to.
	Attributes *AliasPathAttributes

	// READ-ONLY; The type of the token that the alias path is referring to.
	Type *AliasPathTokenType
}

// AliasPattern - The type of the pattern for an alias path.
type AliasPattern struct {
	// The alias pattern phrase.
	Phrase *string

	// The type of alias pattern
	Type *AliasPatternType

	// The alias pattern variable.
	Variable *string
}

// BasicDependency - Deployment dependency information.
type BasicDependency struct {
	// The ID of the dependency.
	ID *string

	// The dependency resource name.
	ResourceName *string

	// The dependency resource type.
	ResourceType *string
}

// DebugSetting - The debug setting.
type DebugSetting struct {
	// Specifies the type of information to log for debugging. The permitted values are none, requestContent, responseContent,
	// or both requestContent and responseContent separated by a comma. The default is
	// none. When setting this value, carefully consider the type of information you are passing in during deployment. By logging
	// information about the request or response, you could potentially expose
	// sensitive data that is retrieved through the deployment operations.
	DetailLevel *string
}

// Dependency - Deployment dependency information.
type Dependency struct {
	// The list of dependencies.
	DependsOn []*BasicDependency

	// The ID of the dependency.
	ID *string

	// The dependency resource name.
	ResourceName *string

	// The dependency resource type.
	ResourceType *string
}

// Deployment operation parameters.
type Deployment struct {
	// REQUIRED; The deployment properties.
	Properties *DeploymentProperties

	// The Managed Identity configuration for a deployment.
	Identity *DeploymentIdentity

	// The location to store the deployment data.
	Location *string

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

type DeploymentDiagnosticsDefinition struct {
	// READ-ONLY; The error code.
	Code *string

	// READ-ONLY; Denotes the additional response level.
	Level *Level

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

	// READ-ONLY; The error additional info.
	AdditionalInfo []*ErrorAdditionalInfo

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

// DeploymentExportResult - The deployment export result.
type DeploymentExportResult struct {
	// The template content.
	Template any
}

// DeploymentExtended - Deployment information.
type DeploymentExtended struct {
	// the location of the deployment.
	Location *string

	// Deployment properties.
	Properties *DeploymentPropertiesExtended

	// Deployment tags
	Tags map[string]*string

	// READ-ONLY; The ID of the deployment.
	ID *string

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

	// READ-ONLY; The type of the deployment.
	Type *string
}

// DeploymentExtendedFilter - Deployment filter.
type DeploymentExtendedFilter struct {
	// The provisioning state.
	ProvisioningState *string
}

type DeploymentExtensionConfigItem struct {
	// The Azure Key Vault reference used to retrieve the secret value of the extension config property.
	KeyVaultReference *KeyVaultParameterReference

	// The value of the extension config property.
	Value any

	// READ-ONLY; The value type of the extension config property.
	Type *ExtensionConfigPropertyType
}

type DeploymentExtensionDefinition struct {
	// READ-ONLY; The alias of the extension as defined in the deployment template.
	Alias *string

	// READ-ONLY; The extension configuration.
	Config map[string]*DeploymentExtensionConfigItem

	// READ-ONLY; The extension configuration ID. It uniquely identifies a deployment control plane within an extension.
	ConfigID *string

	// READ-ONLY; The extension name.
	Name *string

	// READ-ONLY; The extension version.
	Version *string
}

// DeploymentExternalInput - Deployment external input for parameterization.
type DeploymentExternalInput struct {
	// REQUIRED; External input value.
	Value any
}

// DeploymentExternalInputDefinition - Deployment external input definition for parameterization.
type DeploymentExternalInputDefinition struct {
	// REQUIRED; The kind of external input.
	Kind *string

	// Configuration for the external input.
	Config any
}

// DeploymentIdentity - The Managed Identity configuration for a deployment.
type DeploymentIdentity struct {
	// REQUIRED; The identity type.
	Type *DeploymentIdentityType

	// The set of user assigned identities associated with the resource.
	UserAssignedIdentities map[string]*UserAssignedIdentity
}

// DeploymentListResult - List of deployments.
type DeploymentListResult struct {
	// An array of deployments.
	Value []*DeploymentExtended

	// READ-ONLY; The URL to use for getting the next set of results.
	NextLink *string
}

// DeploymentOperation - Deployment operation information.
type DeploymentOperation struct {
	// Deployment properties.
	Properties *DeploymentOperationProperties

	// READ-ONLY; Full deployment operation ID.
	ID *string

	// READ-ONLY; Deployment operation ID.
	OperationID *string
}

// DeploymentOperationProperties - Deployment operation properties.
type DeploymentOperationProperties struct {
	// READ-ONLY; The duration of the operation.
	Duration *string

	// READ-ONLY; The name of the current provisioning operation.
	ProvisioningOperation *ProvisioningOperation

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

	// READ-ONLY; The HTTP request message.
	Request *HTTPMessage

	// READ-ONLY; The HTTP response message.
	Response *HTTPMessage

	// READ-ONLY; Deployment operation service request id.
	ServiceRequestID *string

	// READ-ONLY; Operation status code from the resource provider. This property may not be set if a response has not yet been
	// received.
	StatusCode *string

	// READ-ONLY; Operation status message from the resource provider. This property is optional. It will only be provided if
	// an error was received from the resource provider.
	StatusMessage *StatusMessage

	// READ-ONLY; The target resource.
	TargetResource *TargetResource

	// READ-ONLY; The date and time of the operation.
	Timestamp *time.Time
}

// DeploymentOperationsListResult - List of deployment operations.
type DeploymentOperationsListResult struct {
	// An array of deployment operations.
	Value []*DeploymentOperation

	// READ-ONLY; The URL to use for getting the next set of results.
	NextLink *string
}

// DeploymentParameter - Deployment parameter for the template.
type DeploymentParameter struct {
	// Input expression to the parameter.
	Expression *string

	// Azure Key Vault parameter reference.
	Reference *KeyVaultParameterReference

	// Input value to the parameter .
	Value any
}

// DeploymentProperties - Deployment properties.
type DeploymentProperties struct {
	// REQUIRED; The mode that is used to deploy resources. This value can be either Incremental or Complete. In Incremental mode,
	// resources are deployed without deleting existing resources that are not included in
	// the template. In Complete mode, resources are deployed and existing resources in the resource group that are not included
	// in the template are deleted. Be careful when using Complete mode as you may
	// unintentionally delete resources.
	Mode *DeploymentMode

	// The debug setting of the deployment.
	DebugSetting *DebugSetting

	// Specifies whether template expressions are evaluated within the scope of the parent template or nested template. Only applicable
	// to nested templates. If not specified, default value is outer.
	ExpressionEvaluationOptions *ExpressionEvaluationOptions

	// The configurations to use for deployment extensions. The keys of this object are deployment extension aliases as defined
	// in the deployment template.
	ExtensionConfigs map[string]map[string]*DeploymentExtensionConfigItem

	// External input definitions, used by external tooling to define expected external input values.
	ExternalInputDefinitions map[string]*DeploymentExternalInputDefinition

	// External input values, used by external tooling for parameter evaluation.
	ExternalInputs map[string]*DeploymentExternalInput

	// The deployment on error behavior.
	OnErrorDeployment *OnErrorDeployment

	// Name and value pairs that define the deployment parameters for the template. You use this element when you want to provide
	// the parameter values directly in the request rather than link to an existing
	// parameter file. Use either the parametersLink property or the parameters property, but not both. It can be a JObject or
	// a well formed JSON string.
	Parameters map[string]*DeploymentParameter

	// The URI of parameters file. You use this element to link to an existing parameters file. Use either the parametersLink
	// property or the parameters property, but not both.
	ParametersLink *ParametersLink

	// The template content. You use this element when you want to pass the template syntax directly in the request rather than
	// link to an existing template. It can be a JObject or well-formed JSON string.
	// Use either the templateLink property or the template property, but not both.
	Template any

	// The URI of the template. Use either the templateLink property or the template property, but not both.
	TemplateLink *TemplateLink

	// The validation level of the deployment
	ValidationLevel *ValidationLevel
}

// DeploymentPropertiesExtended - Deployment properties with additional details.
type DeploymentPropertiesExtended struct {
	// The validation level of the deployment
	ValidationLevel *ValidationLevel

	// READ-ONLY; The correlation ID of the deployment.
	CorrelationID *string

	// READ-ONLY; The debug setting of the deployment.
	DebugSetting *DebugSetting

	// READ-ONLY; The list of deployment dependencies.
	Dependencies []*Dependency

	// READ-ONLY; Contains diagnostic information collected during validation process.
	Diagnostics []*DeploymentDiagnosticsDefinition

	// READ-ONLY; The duration of the template deployment.
	Duration *string

	// READ-ONLY; The deployment error.
	Error *ErrorResponse

	// READ-ONLY; The extensions used in this deployment.
	Extensions []*DeploymentExtensionDefinition

	// READ-ONLY; The deployment mode. Possible values are Incremental and Complete.
	Mode *DeploymentMode

	// READ-ONLY; The deployment on error behavior.
	OnErrorDeployment *OnErrorDeploymentExtended

	// READ-ONLY; Array of provisioned resources.
	OutputResources []*ResourceReference

	// READ-ONLY; Key/value pairs that represent deployment output.
	Outputs any

	// READ-ONLY; Deployment parameters.
	Parameters any

	// READ-ONLY; The URI referencing the parameters.
	ParametersLink *ParametersLink

	// READ-ONLY; The list of resource providers needed for the deployment.
	Providers []*Provider

	// READ-ONLY; Denotes the state of provisioning.
	ProvisioningState *ProvisioningState

	// READ-ONLY; The hash produced for the template.
	TemplateHash *string

	// READ-ONLY; The URI referencing the template.
	TemplateLink *TemplateLink

	// READ-ONLY; The timestamp of the template deployment.
	Timestamp *time.Time

	// READ-ONLY; Array of validated resources.
	ValidatedResources []*ResourceReference
}

// DeploymentValidateResult - Information from validate template deployment response.
type DeploymentValidateResult struct {
	// The template deployment properties.
	Properties *DeploymentPropertiesExtended

	// READ-ONLY; The deployment validation error.
	Error *ErrorResponse

	// READ-ONLY; The ID of the deployment.
	ID *string

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

	// READ-ONLY; The type of the deployment.
	Type *string
}

// DeploymentWhatIf - Deployment What-if operation parameters.
type DeploymentWhatIf struct {
	// REQUIRED; The deployment properties.
	Properties *DeploymentWhatIfProperties

	// The location to store the deployment data.
	Location *string
}

// DeploymentWhatIfProperties - Deployment What-if properties.
type DeploymentWhatIfProperties struct {
	// REQUIRED; The mode that is used to deploy resources. This value can be either Incremental or Complete. In Incremental mode,
	// resources are deployed without deleting existing resources that are not included in
	// the template. In Complete mode, resources are deployed and existing resources in the resource group that are not included
	// in the template are deleted. Be careful when using Complete mode as you may
	// unintentionally delete resources.
	Mode *DeploymentMode

	// The debug setting of the deployment.
	DebugSetting *DebugSetting

	// Specifies whether template expressions are evaluated within the scope of the parent template or nested template. Only applicable
	// to nested templates. If not specified, default value is outer.
	ExpressionEvaluationOptions *ExpressionEvaluationOptions

	// The configurations to use for deployment extensions. The keys of this object are deployment extension aliases as defined
	// in the deployment template.
	ExtensionConfigs map[string]map[string]*DeploymentExtensionConfigItem

	// External input definitions, used by external tooling to define expected external input values.
	ExternalInputDefinitions map[string]*DeploymentExternalInputDefinition

	// External input values, used by external tooling for parameter evaluation.
	ExternalInputs map[string]*DeploymentExternalInput

	// The deployment on error behavior.
	OnErrorDeployment *OnErrorDeployment

	// Name and value pairs that define the deployment parameters for the template. You use this element when you want to provide
	// the parameter values directly in the request rather than link to an existing
	// parameter file. Use either the parametersLink property or the parameters property, but not both. It can be a JObject or
	// a well formed JSON string.
	Parameters map[string]*DeploymentParameter

	// The URI of parameters file. You use this element to link to an existing parameters file. Use either the parametersLink
	// property or the parameters property, but not both.
	ParametersLink *ParametersLink

	// The template content. You use this element when you want to pass the template syntax directly in the request rather than
	// link to an existing template. It can be a JObject or well-formed JSON string.
	// Use either the templateLink property or the template property, but not both.
	Template any

	// The URI of the template. Use either the templateLink property or the template property, but not both.
	TemplateLink *TemplateLink

	// The validation level of the deployment
	ValidationLevel *ValidationLevel

	// Optional What-If operation settings.
	WhatIfSettings *DeploymentWhatIfSettings
}

// DeploymentWhatIfSettings - Deployment What-If operation settings.
type DeploymentWhatIfSettings struct {
	// The format of the What-If results
	ResultFormat *WhatIfResultFormat
}

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

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

// ErrorResponse - Common error response for all Azure Resource Manager APIs to return error details for failed operations.
// (This also follows the OData error response format.)
type ErrorResponse struct {
	// READ-ONLY; The error additional info.
	AdditionalInfo []*ErrorAdditionalInfo

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

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

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

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

// ExpressionEvaluationOptions - Specifies whether template expressions are evaluated within the scope of the parent template
// or nested template.
type ExpressionEvaluationOptions struct {
	// The scope to be used for evaluation of parameters, variables and functions in a nested template.
	Scope *ExpressionEvaluationOptionsScopeType
}

// HTTPMessage - HTTP message.
type HTTPMessage struct {
	// HTTP message content.
	Content any
}

// KeyVaultParameterReference - Azure Key Vault parameter reference.
type KeyVaultParameterReference struct {
	// REQUIRED; Azure Key Vault reference.
	KeyVault *KeyVaultReference

	// REQUIRED; Azure Key Vault secret name.
	SecretName *string

	// Azure Key Vault secret version.
	SecretVersion *string
}

// KeyVaultReference - Azure Key Vault reference.
type KeyVaultReference struct {
	// REQUIRED; Azure Key Vault resource id.
	ID *string
}

// OnErrorDeployment - Deployment on error behavior.
type OnErrorDeployment struct {
	// The deployment to be used on error case.
	DeploymentName *string

	// The deployment on error behavior type. Possible values are LastSuccessful and SpecificDeployment.
	Type *OnErrorDeploymentType
}

// OnErrorDeploymentExtended - Deployment on error behavior with additional details.
type OnErrorDeploymentExtended struct {
	// The deployment to be used on error case.
	DeploymentName *string

	// The deployment on error behavior type. Possible values are LastSuccessful and SpecificDeployment.
	Type *OnErrorDeploymentType

	// READ-ONLY; The state of the provisioning for the on error deployment.
	ProvisioningState *string
}

// ParametersLink - Entity representing the reference to the deployment parameters.
type ParametersLink struct {
	// REQUIRED; The URI of the parameters file.
	URI *string

	// If included, must match the ContentVersion in the template.
	ContentVersion *string
}

// Provider - Resource provider information.
type Provider struct {
	// The namespace of the resource provider.
	Namespace *string

	// The provider authorization consent state.
	ProviderAuthorizationConsentState *ProviderAuthorizationConsentState

	// READ-ONLY; The provider ID.
	ID *string

	// READ-ONLY; The registration policy of the resource provider.
	RegistrationPolicy *string

	// READ-ONLY; The registration state of the resource provider.
	RegistrationState *string

	// READ-ONLY; The collection of provider resource types.
	ResourceTypes []*ProviderResourceType
}

// ProviderExtendedLocation - The provider extended location.
type ProviderExtendedLocation struct {
	// The extended locations for the azure location.
	ExtendedLocations []*string

	// The azure location.
	Location *string

	// The extended location type.
	Type *string
}

// ProviderResourceType - Resource type managed by the resource provider.
type ProviderResourceType struct {
	// The API version.
	APIVersions []*string

	// The aliases that are supported by this resource type.
	Aliases []*Alias

	// The additional capabilities offered by this resource type.
	Capabilities *string

	// The location mappings that are supported by this resource type.
	LocationMappings []*ProviderExtendedLocation

	// The collection of locations where this resource type can be created.
	Locations []*string

	// The properties.
	Properties map[string]*string

	// The resource type.
	ResourceType *string
	ZoneMappings []*ZoneMapping

	// READ-ONLY; The API profiles for the resource provider.
	APIProfiles []*APIProfile

	// READ-ONLY; The default API version.
	DefaultAPIVersion *string
}

// ResourceReference - The resource Id model.
type ResourceReference struct {
	// READ-ONLY; The API version the resource was deployed with.
	APIVersion *string

	// READ-ONLY; The extension the resource was deployed with.
	Extension *DeploymentExtensionDefinition

	// READ-ONLY; The fully qualified Azure resource ID.
	ID *string

	// READ-ONLY; The extensible resource identifiers.
	Identifiers any

	// READ-ONLY; The resource type.
	ResourceType *string
}

// ScopedDeployment - Deployment operation parameters.
type ScopedDeployment struct {
	// REQUIRED; The location to store the deployment data.
	Location *string

	// REQUIRED; The deployment properties.
	Properties *DeploymentProperties

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

// ScopedDeploymentWhatIf - Deployment What-if operation parameters.
type ScopedDeploymentWhatIf struct {
	// REQUIRED; The location to store the deployment data.
	Location *string

	// REQUIRED; The deployment properties.
	Properties *DeploymentWhatIfProperties
}

// StatusMessage - Operation status message object.
type StatusMessage struct {
	// The error reported by the operation.
	Error *ErrorResponse

	// Status of the deployment operation.
	Status *string
}

// TargetResource - Target resource.
type TargetResource struct {
	// The API version the resource was deployed with.
	APIVersion *string

	// The extension the resource was deployed with.
	Extension *DeploymentExtensionDefinition

	// The Azure resource ID of the resource.
	ID *string

	// The extensible resource identifiers.
	Identifiers any

	// The name of the resource.
	ResourceName *string

	// The type of the resource.
	ResourceType *string

	// The symbolic name of the resource as defined in the deployment template.
	SymbolicName *string
}

// TemplateHashResult - Result of the request to calculate template hash. It contains a string of minified template and its
// hash.
type TemplateHashResult struct {
	// The minified template string.
	MinifiedTemplate *string

	// The template hash.
	TemplateHash *string
}

// TemplateLink - Entity representing the reference to the template.
type TemplateLink struct {
	// If included, must match the ContentVersion in the template.
	ContentVersion *string

	// The resource id of a Template Spec. Use either the id or uri property, but not both.
	ID *string

	// The query string (for example, a SAS token) to be used with the templateLink URI.
	QueryString *string

	// The relativePath property can be used to deploy a linked template at a location relative to the parent. If the parent template
	// was linked with a TemplateSpec, this will reference an artifact in the
	// TemplateSpec. If the parent was linked with a URI, the child deployment will be a combination of the parent and relativePath
	// URIs
	RelativePath *string

	// The URI of the template to deploy. Use either the uri or id property, but not both.
	URI *string
}

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

// WhatIfChange - Information about a single resource change predicted by What-If operation.
type WhatIfChange struct {
	// REQUIRED; Type of change that will be made to the resource when the deployment is executed.
	ChangeType *ChangeType

	// The predicted snapshot of the resource after the deployment is executed.
	After any

	// The snapshot of the resource before the deployment is executed.
	Before any

	// The predicted changes to resource properties.
	Delta []*WhatIfPropertyChange

	// The resource id of the Deployment responsible for this change.
	DeploymentID *string

	// The extension the resource was deployed with.
	Extension *DeploymentExtensionDefinition

	// A subset of properties that uniquely identify a Bicep extensible resource because it lacks a resource id like an Azure
	// resource has.
	Identifiers any

	// Resource ID
	ResourceID *string

	// The symbolic name of the resource responsible for this change.
	SymbolicName *string

	// The explanation about why the resource is unsupported by What-If.
	UnsupportedReason *string
}

// WhatIfOperationProperties - Deployment operation properties.
type WhatIfOperationProperties struct {
	// List of resource changes predicted by What-If operation.
	Changes []*WhatIfChange

	// List of resource changes predicted by What-If operation.
	PotentialChanges []*WhatIfChange

	// READ-ONLY; List of resource diagnostics detected by What-If operation.
	Diagnostics []*DeploymentDiagnosticsDefinition
}

// WhatIfOperationResult - Result of the What-If operation. Contains a list of predicted changes and a URL link to get to
// the next set of results.
type WhatIfOperationResult struct {
	// Error when What-If operation fails.
	Error *ErrorResponse

	// What-If operation properties.
	Properties *WhatIfOperationProperties

	// Status of the What-If operation.
	Status *string
}

// WhatIfPropertyChange - The predicted change to the resource property.
type WhatIfPropertyChange struct {
	// REQUIRED; The path of the property.
	Path *string

	// REQUIRED; The type of property change.
	PropertyChangeType *PropertyChangeType

	// The value of the property after the deployment is executed.
	After any

	// The value of the property before the deployment is executed.
	Before any

	// Nested property changes.
	Children []*WhatIfPropertyChange
}

type ZoneMapping struct {
	// The location of the zone mapping.
	Location *string
	Zones    []*string
}
