// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package storage

import (
	"context"
	"github.com/Azure/azure-service-operator/v2/internal/genericarmclient"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/conditions"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/configmaps"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/core"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/secrets"
	"github.com/go-logr/logr"
	"github.com/rotisserie/eris"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

// +kubebuilder:rbac:groups=app.azure.com,resources=containerapps,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=app.azure.com,resources={containerapps/status,containerapps/finalizers},verbs=get;update;patch

// +kubebuilder:object:root=true
// +kubebuilder:resource:categories={azure,app}
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
// +kubebuilder:printcolumn:name="Severity",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].severity"
// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].reason"
// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].message"
// Storage version of v1api20250101.ContainerApp
// Generator information:
// - Generated from: /app/resource-manager/Microsoft.App/ContainerApps/stable/2025-01-01/ContainerApps.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.App/containerApps/{containerAppName}
type ContainerApp struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              ContainerApp_Spec   `json:"spec,omitempty"`
	Status            ContainerApp_STATUS `json:"status,omitempty"`
}

var _ conditions.Conditioner = &ContainerApp{}

// GetConditions returns the conditions of the resource
func (containerApp *ContainerApp) GetConditions() conditions.Conditions {
	return containerApp.Status.Conditions
}

// SetConditions sets the conditions on the resource status
func (containerApp *ContainerApp) SetConditions(conditions conditions.Conditions) {
	containerApp.Status.Conditions = conditions
}

var _ configmaps.Exporter = &ContainerApp{}

// ConfigMapDestinationExpressions returns the Spec.OperatorSpec.ConfigMapExpressions property
func (containerApp *ContainerApp) ConfigMapDestinationExpressions() []*core.DestinationExpression {
	if containerApp.Spec.OperatorSpec == nil {
		return nil
	}
	return containerApp.Spec.OperatorSpec.ConfigMapExpressions
}

var _ secrets.Exporter = &ContainerApp{}

// SecretDestinationExpressions returns the Spec.OperatorSpec.SecretExpressions property
func (containerApp *ContainerApp) SecretDestinationExpressions() []*core.DestinationExpression {
	if containerApp.Spec.OperatorSpec == nil {
		return nil
	}
	return containerApp.Spec.OperatorSpec.SecretExpressions
}

var _ genruntime.KubernetesConfigExporter = &ContainerApp{}

// ExportKubernetesConfigMaps defines a resource which can create ConfigMaps in Kubernetes.
func (containerApp *ContainerApp) ExportKubernetesConfigMaps(_ context.Context, _ genruntime.MetaObject, _ *genericarmclient.GenericClient, _ logr.Logger) ([]client.Object, error) {
	collector := configmaps.NewCollector(containerApp.Namespace)
	if containerApp.Spec.OperatorSpec != nil && containerApp.Spec.OperatorSpec.ConfigMaps != nil {
		if containerApp.Status.EventStreamEndpoint != nil {
			collector.AddValue(containerApp.Spec.OperatorSpec.ConfigMaps.EventStreamEndpoint, *containerApp.Status.EventStreamEndpoint)
		}
	}
	if containerApp.Spec.OperatorSpec != nil && containerApp.Spec.OperatorSpec.ConfigMaps != nil {
		if containerApp.Status.LatestRevisionFqdn != nil {
			collector.AddValue(containerApp.Spec.OperatorSpec.ConfigMaps.Fqdn, *containerApp.Status.LatestRevisionFqdn)
		}
	}
	result, err := collector.Values()
	if err != nil {
		return nil, err
	}
	return configmaps.SliceToClientObjectSlice(result), nil
}

var _ genruntime.KubernetesResource = &ContainerApp{}

// AzureName returns the Azure name of the resource
func (containerApp *ContainerApp) AzureName() string {
	return containerApp.Spec.AzureName
}

// GetAPIVersion returns the ARM API version of the resource. This is always "2025-01-01"
func (containerApp ContainerApp) GetAPIVersion() string {
	return "2025-01-01"
}

// GetResourceScope returns the scope of the resource
func (containerApp *ContainerApp) GetResourceScope() genruntime.ResourceScope {
	return genruntime.ResourceScopeResourceGroup
}

// GetSpec returns the specification of this resource
func (containerApp *ContainerApp) GetSpec() genruntime.ConvertibleSpec {
	return &containerApp.Spec
}

// GetStatus returns the status of this resource
func (containerApp *ContainerApp) GetStatus() genruntime.ConvertibleStatus {
	return &containerApp.Status
}

// GetSupportedOperations returns the operations supported by the resource
func (containerApp *ContainerApp) GetSupportedOperations() []genruntime.ResourceOperation {
	return []genruntime.ResourceOperation{
		genruntime.ResourceOperationDelete,
		genruntime.ResourceOperationGet,
		genruntime.ResourceOperationPut,
	}
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.App/containerApps"
func (containerApp *ContainerApp) GetType() string {
	return "Microsoft.App/containerApps"
}

// NewEmptyStatus returns a new empty (blank) status
func (containerApp *ContainerApp) NewEmptyStatus() genruntime.ConvertibleStatus {
	return &ContainerApp_STATUS{}
}

// Owner returns the ResourceReference of the owner
func (containerApp *ContainerApp) Owner() *genruntime.ResourceReference {
	if containerApp.Spec.Owner == nil {
		return nil
	}

	group, kind := genruntime.LookupOwnerGroupKind(containerApp.Spec)
	return containerApp.Spec.Owner.AsResourceReference(group, kind)
}

// SetStatus sets the status of this resource
func (containerApp *ContainerApp) SetStatus(status genruntime.ConvertibleStatus) error {
	// If we have exactly the right type of status, assign it
	if st, ok := status.(*ContainerApp_STATUS); ok {
		containerApp.Status = *st
		return nil
	}

	// Convert status to required version
	var st ContainerApp_STATUS
	err := status.ConvertStatusTo(&st)
	if err != nil {
		return eris.Wrap(err, "failed to convert status")
	}

	containerApp.Status = st
	return nil
}

// Hub marks that this ContainerApp is the hub type for conversion
func (containerApp *ContainerApp) Hub() {}

// OriginalGVK returns a GroupValueKind for the original API version used to create the resource
func (containerApp *ContainerApp) OriginalGVK() *schema.GroupVersionKind {
	return &schema.GroupVersionKind{
		Group:   GroupVersion.Group,
		Version: containerApp.Spec.OriginalVersion,
		Kind:    "ContainerApp",
	}
}

// +kubebuilder:object:root=true
// Storage version of v1api20250101.ContainerApp
// Generator information:
// - Generated from: /app/resource-manager/Microsoft.App/ContainerApps/stable/2025-01-01/ContainerApps.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.App/containerApps/{containerAppName}
type ContainerAppList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []ContainerApp `json:"items"`
}

// Storage version of v1api20250101.ContainerApp_Spec
type ContainerApp_Spec struct {
	// AzureName: The name of the resource in Azure. This is often the same as the name of the resource in Kubernetes but it
	// doesn't have to be.
	AzureName     string         `json:"azureName,omitempty"`
	Configuration *Configuration `json:"configuration,omitempty"`

	// EnvironmentReference: Resource ID of environment.
	EnvironmentReference *genruntime.ResourceReference `armReference:"EnvironmentId" json:"environmentReference,omitempty"`
	ExtendedLocation     *ExtendedLocation             `json:"extendedLocation,omitempty"`
	Identity             *ManagedServiceIdentity       `json:"identity,omitempty"`
	Location             *string                       `json:"location,omitempty"`

	// ManagedByReference: The fully qualified resource ID of the resource that manages this resource. Indicates if this
	// resource is managed by another Azure resource. If this is present, complete mode deployment will not delete the resource
	// if it is removed from the template since it is managed by another resource.
	ManagedByReference *genruntime.ResourceReference `armReference:"ManagedBy" json:"managedByReference,omitempty"`

	// ManagedEnvironmentReference: Deprecated. Resource ID of the Container App's environment.
	ManagedEnvironmentReference *genruntime.ResourceReference `armReference:"ManagedEnvironmentId" json:"managedEnvironmentReference,omitempty"`
	OperatorSpec                *ContainerAppOperatorSpec     `json:"operatorSpec,omitempty"`
	OriginalVersion             string                        `json:"originalVersion,omitempty"`

	// +kubebuilder:validation:Required
	// Owner: The owner of the resource. The owner controls where the resource goes when it is deployed. The owner also
	// controls the resources lifecycle. When the owner is deleted the resource will also be deleted. Owner is expected to be a
	// reference to a resources.azure.com/ResourceGroup resource
	Owner               *genruntime.KnownResourceReference `group:"resources.azure.com" json:"owner,omitempty" kind:"ResourceGroup"`
	PropertyBag         genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
	Tags                map[string]string                  `json:"tags,omitempty"`
	Template            *Template                          `json:"template,omitempty"`
	WorkloadProfileName *string                            `json:"workloadProfileName,omitempty"`
}

var _ genruntime.ConvertibleSpec = &ContainerApp_Spec{}

// ConvertSpecFrom populates our ContainerApp_Spec from the provided source
func (containerApp *ContainerApp_Spec) ConvertSpecFrom(source genruntime.ConvertibleSpec) error {
	if source == containerApp {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return source.ConvertSpecTo(containerApp)
}

// ConvertSpecTo populates the provided destination from our ContainerApp_Spec
func (containerApp *ContainerApp_Spec) ConvertSpecTo(destination genruntime.ConvertibleSpec) error {
	if destination == containerApp {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return destination.ConvertSpecFrom(containerApp)
}

// Storage version of v1api20250101.ContainerApp_STATUS
// Container App.
type ContainerApp_STATUS struct {
	Conditions                 []conditions.Condition         `json:"conditions,omitempty"`
	Configuration              *Configuration_STATUS          `json:"configuration,omitempty"`
	CustomDomainVerificationId *string                        `json:"customDomainVerificationId,omitempty"`
	EnvironmentId              *string                        `json:"environmentId,omitempty"`
	EventStreamEndpoint        *string                        `json:"eventStreamEndpoint,omitempty"`
	ExtendedLocation           *ExtendedLocation_STATUS       `json:"extendedLocation,omitempty"`
	Id                         *string                        `json:"id,omitempty"`
	Identity                   *ManagedServiceIdentity_STATUS `json:"identity,omitempty"`
	LatestReadyRevisionName    *string                        `json:"latestReadyRevisionName,omitempty"`
	LatestRevisionFqdn         *string                        `json:"latestRevisionFqdn,omitempty"`
	LatestRevisionName         *string                        `json:"latestRevisionName,omitempty"`
	Location                   *string                        `json:"location,omitempty"`
	ManagedBy                  *string                        `json:"managedBy,omitempty"`
	ManagedEnvironmentId       *string                        `json:"managedEnvironmentId,omitempty"`
	Name                       *string                        `json:"name,omitempty"`
	OutboundIpAddresses        []string                       `json:"outboundIpAddresses,omitempty"`
	PropertyBag                genruntime.PropertyBag         `json:"$propertyBag,omitempty"`
	ProvisioningState          *string                        `json:"provisioningState,omitempty"`
	RunningStatus              *string                        `json:"runningStatus,omitempty"`
	SystemData                 *SystemData_STATUS             `json:"systemData,omitempty"`
	Tags                       map[string]string              `json:"tags,omitempty"`
	Template                   *Template_STATUS               `json:"template,omitempty"`
	Type                       *string                        `json:"type,omitempty"`
	WorkloadProfileName        *string                        `json:"workloadProfileName,omitempty"`
}

var _ genruntime.ConvertibleStatus = &ContainerApp_STATUS{}

// ConvertStatusFrom populates our ContainerApp_STATUS from the provided source
func (containerApp *ContainerApp_STATUS) ConvertStatusFrom(source genruntime.ConvertibleStatus) error {
	if source == containerApp {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return source.ConvertStatusTo(containerApp)
}

// ConvertStatusTo populates the provided destination from our ContainerApp_STATUS
func (containerApp *ContainerApp_STATUS) ConvertStatusTo(destination genruntime.ConvertibleStatus) error {
	if destination == containerApp {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return destination.ConvertStatusFrom(containerApp)
}

// Storage version of v1api20250101.Configuration
// Non versioned Container App configuration properties that define the mutable settings of a Container app
type Configuration struct {
	ActiveRevisionsMode  *string                `json:"activeRevisionsMode,omitempty"`
	Dapr                 *Dapr                  `json:"dapr,omitempty"`
	IdentitySettings     []IdentitySettings     `json:"identitySettings,omitempty"`
	Ingress              *Ingress               `json:"ingress,omitempty"`
	MaxInactiveRevisions *int                   `json:"maxInactiveRevisions,omitempty"`
	PropertyBag          genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Registries           []RegistryCredentials  `json:"registries,omitempty"`
	Runtime              *Runtime               `json:"runtime,omitempty"`
	Secrets              []Secret               `json:"secrets,omitempty"`
	Service              *Service               `json:"service,omitempty"`
}

// Storage version of v1api20250101.Configuration_STATUS
// Non versioned Container App configuration properties that define the mutable settings of a Container app
type Configuration_STATUS struct {
	ActiveRevisionsMode  *string                      `json:"activeRevisionsMode,omitempty"`
	Dapr                 *Dapr_STATUS                 `json:"dapr,omitempty"`
	IdentitySettings     []IdentitySettings_STATUS    `json:"identitySettings,omitempty"`
	Ingress              *Ingress_STATUS              `json:"ingress,omitempty"`
	MaxInactiveRevisions *int                         `json:"maxInactiveRevisions,omitempty"`
	PropertyBag          genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
	Registries           []RegistryCredentials_STATUS `json:"registries,omitempty"`
	Runtime              *Runtime_STATUS              `json:"runtime,omitempty"`
	Secrets              []Secret_STATUS              `json:"secrets,omitempty"`
	Service              *Service_STATUS              `json:"service,omitempty"`
}

// Storage version of v1api20250101.ContainerAppOperatorSpec
// Details for configuring operator behavior. Fields in this struct are interpreted by the operator directly rather than being passed to Azure
type ContainerAppOperatorSpec struct {
	ConfigMapExpressions []*core.DestinationExpression   `json:"configMapExpressions,omitempty"`
	ConfigMaps           *ContainerAppOperatorConfigMaps `json:"configMaps,omitempty"`
	PropertyBag          genruntime.PropertyBag          `json:"$propertyBag,omitempty"`
	SecretExpressions    []*core.DestinationExpression   `json:"secretExpressions,omitempty"`
}

// Storage version of v1api20250101.ExtendedLocation
// The complex type of the extended location.
type ExtendedLocation struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20250101.ExtendedLocation_STATUS
// The complex type of the extended location.
type ExtendedLocation_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20250101.ManagedServiceIdentity
// Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	PropertyBag            genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	Type                   *string                       `json:"type,omitempty"`
	UserAssignedIdentities []UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20250101.ManagedServiceIdentity_STATUS
// Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity_STATUS struct {
	PrincipalId            *string                                `json:"principalId,omitempty"`
	PropertyBag            genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
	TenantId               *string                                `json:"tenantId,omitempty"`
	Type                   *string                                `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentity_STATUS `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20250101.Template
// Container App versioned application definition.
// Defines the desired state of an immutable revision.
// Any changes to this
// section Will result in a new revision being created
type Template struct {
	Containers                    []Container            `json:"containers,omitempty"`
	InitContainers                []BaseContainer        `json:"initContainers,omitempty"`
	PropertyBag                   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RevisionSuffix                *string                `json:"revisionSuffix,omitempty"`
	Scale                         *Scale                 `json:"scale,omitempty"`
	ServiceBinds                  []ServiceBind          `json:"serviceBinds,omitempty"`
	TerminationGracePeriodSeconds *int                   `json:"terminationGracePeriodSeconds,omitempty"`
	Volumes                       []Volume               `json:"volumes,omitempty"`
}

// Storage version of v1api20250101.Template_STATUS
// Container App versioned application definition.
// Defines the desired state of an immutable revision.
// Any changes to this
// section Will result in a new revision being created
type Template_STATUS struct {
	Containers                    []Container_STATUS     `json:"containers,omitempty"`
	InitContainers                []BaseContainer_STATUS `json:"initContainers,omitempty"`
	PropertyBag                   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RevisionSuffix                *string                `json:"revisionSuffix,omitempty"`
	Scale                         *Scale_STATUS          `json:"scale,omitempty"`
	ServiceBinds                  []ServiceBind_STATUS   `json:"serviceBinds,omitempty"`
	TerminationGracePeriodSeconds *int                   `json:"terminationGracePeriodSeconds,omitempty"`
	Volumes                       []Volume_STATUS        `json:"volumes,omitempty"`
}

// Storage version of v1api20250101.BaseContainer
// Container App base container definition.
type BaseContainer struct {
	Args         []string               `json:"args,omitempty"`
	Command      []string               `json:"command,omitempty"`
	Env          []EnvironmentVar       `json:"env,omitempty"`
	Image        *string                `json:"image,omitempty"`
	Name         *string                `json:"name,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Resources    *ContainerResources    `json:"resources,omitempty"`
	VolumeMounts []VolumeMount          `json:"volumeMounts,omitempty"`
}

// Storage version of v1api20250101.BaseContainer_STATUS
// Container App base container definition.
type BaseContainer_STATUS struct {
	Args         []string                   `json:"args,omitempty"`
	Command      []string                   `json:"command,omitempty"`
	Env          []EnvironmentVar_STATUS    `json:"env,omitempty"`
	Image        *string                    `json:"image,omitempty"`
	Name         *string                    `json:"name,omitempty"`
	PropertyBag  genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
	Resources    *ContainerResources_STATUS `json:"resources,omitempty"`
	VolumeMounts []VolumeMount_STATUS       `json:"volumeMounts,omitempty"`
}

// Storage version of v1api20250101.Container
// Container App container definition
type Container struct {
	Args         []string               `json:"args,omitempty"`
	Command      []string               `json:"command,omitempty"`
	Env          []EnvironmentVar       `json:"env,omitempty"`
	Image        *string                `json:"image,omitempty"`
	Name         *string                `json:"name,omitempty"`
	Probes       []ContainerAppProbe    `json:"probes,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Resources    *ContainerResources    `json:"resources,omitempty"`
	VolumeMounts []VolumeMount          `json:"volumeMounts,omitempty"`
}

// Storage version of v1api20250101.Container_STATUS
// Container App container definition
type Container_STATUS struct {
	Args         []string                   `json:"args,omitempty"`
	Command      []string                   `json:"command,omitempty"`
	Env          []EnvironmentVar_STATUS    `json:"env,omitempty"`
	Image        *string                    `json:"image,omitempty"`
	Name         *string                    `json:"name,omitempty"`
	Probes       []ContainerAppProbe_STATUS `json:"probes,omitempty"`
	PropertyBag  genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
	Resources    *ContainerResources_STATUS `json:"resources,omitempty"`
	VolumeMounts []VolumeMount_STATUS       `json:"volumeMounts,omitempty"`
}

// Storage version of v1api20250101.ContainerAppOperatorConfigMaps
type ContainerAppOperatorConfigMaps struct {
	EventStreamEndpoint *genruntime.ConfigMapDestination `json:"eventStreamEndpoint,omitempty"`
	Fqdn                *genruntime.ConfigMapDestination `json:"fqdn,omitempty"`
	PropertyBag         genruntime.PropertyBag           `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Dapr
// Container App Dapr configuration.
type Dapr struct {
	AppId              *string                `json:"appId,omitempty"`
	AppPort            *int                   `json:"appPort,omitempty"`
	AppProtocol        *string                `json:"appProtocol,omitempty"`
	EnableApiLogging   *bool                  `json:"enableApiLogging,omitempty"`
	Enabled            *bool                  `json:"enabled,omitempty"`
	HttpMaxRequestSize *int                   `json:"httpMaxRequestSize,omitempty"`
	HttpReadBufferSize *int                   `json:"httpReadBufferSize,omitempty"`
	LogLevel           *string                `json:"logLevel,omitempty"`
	PropertyBag        genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Dapr_STATUS
// Container App Dapr configuration.
type Dapr_STATUS struct {
	AppId              *string                `json:"appId,omitempty"`
	AppPort            *int                   `json:"appPort,omitempty"`
	AppProtocol        *string                `json:"appProtocol,omitempty"`
	EnableApiLogging   *bool                  `json:"enableApiLogging,omitempty"`
	Enabled            *bool                  `json:"enabled,omitempty"`
	HttpMaxRequestSize *int                   `json:"httpMaxRequestSize,omitempty"`
	HttpReadBufferSize *int                   `json:"httpReadBufferSize,omitempty"`
	LogLevel           *string                `json:"logLevel,omitempty"`
	PropertyBag        genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.IdentitySettings
// Optional settings for a Managed Identity that is assigned to the Container App.
type IdentitySettings struct {
	// +kubebuilder:validation:Required
	// IdentityReference: The resource ID of a user-assigned managed identity that is assigned to the Container App, or
	// 'system' for system-assigned identity.
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	Lifecycle         *string                                `json:"lifecycle,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.IdentitySettings_STATUS
// Optional settings for a Managed Identity that is assigned to the Container App.
type IdentitySettings_STATUS struct {
	Identity    *string                `json:"identity,omitempty"`
	Lifecycle   *string                `json:"lifecycle,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Ingress
// Container App Ingress configuration.
type Ingress struct {
	AdditionalPortMappings []IngressPortMapping        `json:"additionalPortMappings,omitempty"`
	AllowInsecure          *bool                       `json:"allowInsecure,omitempty"`
	ClientCertificateMode  *string                     `json:"clientCertificateMode,omitempty"`
	CorsPolicy             *CorsPolicy                 `json:"corsPolicy,omitempty"`
	CustomDomains          []CustomDomain              `json:"customDomains,omitempty"`
	ExposedPort            *int                        `json:"exposedPort,omitempty"`
	External               *bool                       `json:"external,omitempty"`
	IpSecurityRestrictions []IpSecurityRestrictionRule `json:"ipSecurityRestrictions,omitempty"`
	PropertyBag            genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
	StickySessions         *Ingress_StickySessions     `json:"stickySessions,omitempty"`
	TargetPort             *int                        `json:"targetPort,omitempty"`
	Traffic                []TrafficWeight             `json:"traffic,omitempty"`
	Transport              *string                     `json:"transport,omitempty"`
}

// Storage version of v1api20250101.Ingress_STATUS
// Container App Ingress configuration.
type Ingress_STATUS struct {
	AdditionalPortMappings []IngressPortMapping_STATUS        `json:"additionalPortMappings,omitempty"`
	AllowInsecure          *bool                              `json:"allowInsecure,omitempty"`
	ClientCertificateMode  *string                            `json:"clientCertificateMode,omitempty"`
	CorsPolicy             *CorsPolicy_STATUS                 `json:"corsPolicy,omitempty"`
	CustomDomains          []CustomDomain_STATUS              `json:"customDomains,omitempty"`
	ExposedPort            *int                               `json:"exposedPort,omitempty"`
	External               *bool                              `json:"external,omitempty"`
	Fqdn                   *string                            `json:"fqdn,omitempty"`
	IpSecurityRestrictions []IpSecurityRestrictionRule_STATUS `json:"ipSecurityRestrictions,omitempty"`
	PropertyBag            genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
	StickySessions         *Ingress_StickySessions_STATUS     `json:"stickySessions,omitempty"`
	TargetPort             *int                               `json:"targetPort,omitempty"`
	Traffic                []TrafficWeight_STATUS             `json:"traffic,omitempty"`
	Transport              *string                            `json:"transport,omitempty"`
}

// Storage version of v1api20250101.RegistryCredentials
// Container App Private Registry
type RegistryCredentials struct {
	// IdentityReference: A Managed Identity to use to authenticate with Azure Container Registry. For user-assigned
	// identities, use the full user-assigned identity Resource ID. For system-assigned identities, use 'system'
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	PasswordSecretRef *string                                `json:"passwordSecretRef,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
	Server            *string                                `json:"server,omitempty"`
	Username          *string                                `json:"username,omitempty"`
}

// Storage version of v1api20250101.RegistryCredentials_STATUS
// Container App Private Registry
type RegistryCredentials_STATUS struct {
	Identity          *string                `json:"identity,omitempty"`
	PasswordSecretRef *string                `json:"passwordSecretRef,omitempty"`
	PropertyBag       genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Server            *string                `json:"server,omitempty"`
	Username          *string                `json:"username,omitempty"`
}

// Storage version of v1api20250101.Runtime
// Container App Runtime configuration.
type Runtime struct {
	Java        *Runtime_Java          `json:"java,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Runtime_STATUS
// Container App Runtime configuration.
type Runtime_STATUS struct {
	Java        *Runtime_Java_STATUS   `json:"java,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Scale
// Container App scaling configurations.
type Scale struct {
	CooldownPeriod  *int                   `json:"cooldownPeriod,omitempty"`
	MaxReplicas     *int                   `json:"maxReplicas,omitempty"`
	MinReplicas     *int                   `json:"minReplicas,omitempty"`
	PollingInterval *int                   `json:"pollingInterval,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Rules           []ScaleRule            `json:"rules,omitempty"`
}

// Storage version of v1api20250101.Scale_STATUS
// Container App scaling configurations.
type Scale_STATUS struct {
	CooldownPeriod  *int                   `json:"cooldownPeriod,omitempty"`
	MaxReplicas     *int                   `json:"maxReplicas,omitempty"`
	MinReplicas     *int                   `json:"minReplicas,omitempty"`
	PollingInterval *int                   `json:"pollingInterval,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Rules           []ScaleRule_STATUS     `json:"rules,omitempty"`
}

// Storage version of v1api20250101.Secret
// Secret definition.
type Secret struct {
	// IdentityReference: Resource ID of a managed identity to authenticate with Azure Key Vault, or System to use a
	// system-assigned identity.
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	KeyVaultUrl       *string                                `json:"keyVaultUrl,omitempty"`
	Name              *string                                `json:"name,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
	Value             *genruntime.SecretReference            `json:"value,omitempty"`
}

// Storage version of v1api20250101.Secret_STATUS
// Secret definition.
type Secret_STATUS struct {
	Identity    *string                `json:"identity,omitempty"`
	KeyVaultUrl *string                `json:"keyVaultUrl,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Service
// Container App to be a dev service
type Service struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20250101.Service_STATUS
// Container App to be a dev service
type Service_STATUS struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20250101.ServiceBind
// Configuration to bind a ContainerApp to a dev ContainerApp Service
type ServiceBind struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// ServiceReference: Resource id of the target service
	ServiceReference *genruntime.ResourceReference `armReference:"ServiceId" json:"serviceReference,omitempty"`
}

// Storage version of v1api20250101.ServiceBind_STATUS
// Configuration to bind a ContainerApp to a dev ContainerApp Service
type ServiceBind_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ServiceId   *string                `json:"serviceId,omitempty"`
}

// Storage version of v1api20250101.UserAssignedIdentity_STATUS
// User assigned identity properties
type UserAssignedIdentity_STATUS struct {
	ClientId    *string                `json:"clientId,omitempty"`
	PrincipalId *string                `json:"principalId,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.UserAssignedIdentityDetails
// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
	PropertyBag genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
	Reference   genruntime.ResourceReference `armReference:"Reference" json:"reference,omitempty"`
}

// Storage version of v1api20250101.Volume
// Volume definitions for the Container App.
type Volume struct {
	MountOptions *string                `json:"mountOptions,omitempty"`
	Name         *string                `json:"name,omitempty"`
	PropertyBag  genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Secrets      []SecretVolumeItem     `json:"secrets,omitempty"`
	StorageName  *string                `json:"storageName,omitempty"`
	StorageType  *string                `json:"storageType,omitempty"`
}

// Storage version of v1api20250101.Volume_STATUS
// Volume definitions for the Container App.
type Volume_STATUS struct {
	MountOptions *string                   `json:"mountOptions,omitempty"`
	Name         *string                   `json:"name,omitempty"`
	PropertyBag  genruntime.PropertyBag    `json:"$propertyBag,omitempty"`
	Secrets      []SecretVolumeItem_STATUS `json:"secrets,omitempty"`
	StorageName  *string                   `json:"storageName,omitempty"`
	StorageType  *string                   `json:"storageType,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe
// Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive
// traffic.
type ContainerAppProbe struct {
	FailureThreshold              *int                         `json:"failureThreshold,omitempty"`
	HttpGet                       *ContainerAppProbe_HttpGet   `json:"httpGet,omitempty"`
	InitialDelaySeconds           *int                         `json:"initialDelaySeconds,omitempty"`
	PeriodSeconds                 *int                         `json:"periodSeconds,omitempty"`
	PropertyBag                   genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
	SuccessThreshold              *int                         `json:"successThreshold,omitempty"`
	TcpSocket                     *ContainerAppProbe_TcpSocket `json:"tcpSocket,omitempty"`
	TerminationGracePeriodSeconds *int                         `json:"terminationGracePeriodSeconds,omitempty"`
	TimeoutSeconds                *int                         `json:"timeoutSeconds,omitempty"`
	Type                          *string                      `json:"type,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_STATUS
// Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive
// traffic.
type ContainerAppProbe_STATUS struct {
	FailureThreshold              *int                                `json:"failureThreshold,omitempty"`
	HttpGet                       *ContainerAppProbe_HttpGet_STATUS   `json:"httpGet,omitempty"`
	InitialDelaySeconds           *int                                `json:"initialDelaySeconds,omitempty"`
	PeriodSeconds                 *int                                `json:"periodSeconds,omitempty"`
	PropertyBag                   genruntime.PropertyBag              `json:"$propertyBag,omitempty"`
	SuccessThreshold              *int                                `json:"successThreshold,omitempty"`
	TcpSocket                     *ContainerAppProbe_TcpSocket_STATUS `json:"tcpSocket,omitempty"`
	TerminationGracePeriodSeconds *int                                `json:"terminationGracePeriodSeconds,omitempty"`
	TimeoutSeconds                *int                                `json:"timeoutSeconds,omitempty"`
	Type                          *string                             `json:"type,omitempty"`
}

// Storage version of v1api20250101.ContainerResources
// Container App container resource requirements.
type ContainerResources struct {
	Cpu         *float64               `json:"cpu,omitempty"`
	Memory      *string                `json:"memory,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.ContainerResources_STATUS
// Container App container resource requirements.
type ContainerResources_STATUS struct {
	Cpu              *float64               `json:"cpu,omitempty"`
	EphemeralStorage *string                `json:"ephemeralStorage,omitempty"`
	Memory           *string                `json:"memory,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.CorsPolicy
// Cross-Origin-Resource-Sharing policy
type CorsPolicy struct {
	AllowCredentials *bool                  `json:"allowCredentials,omitempty"`
	AllowedHeaders   []string               `json:"allowedHeaders,omitempty"`
	AllowedMethods   []string               `json:"allowedMethods,omitempty"`
	AllowedOrigins   []string               `json:"allowedOrigins,omitempty"`
	ExposeHeaders    []string               `json:"exposeHeaders,omitempty"`
	MaxAge           *int                   `json:"maxAge,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.CorsPolicy_STATUS
// Cross-Origin-Resource-Sharing policy
type CorsPolicy_STATUS struct {
	AllowCredentials *bool                  `json:"allowCredentials,omitempty"`
	AllowedHeaders   []string               `json:"allowedHeaders,omitempty"`
	AllowedMethods   []string               `json:"allowedMethods,omitempty"`
	AllowedOrigins   []string               `json:"allowedOrigins,omitempty"`
	ExposeHeaders    []string               `json:"exposeHeaders,omitempty"`
	MaxAge           *int                   `json:"maxAge,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.CustomDomain
// Custom Domain of a Container App
type CustomDomain struct {
	BindingType *string `json:"bindingType,omitempty"`

	// CertificateReference: Resource Id of the Certificate to be bound to this hostname. Must exist in the Managed Environment.
	CertificateReference *genruntime.ResourceReference `armReference:"CertificateId" json:"certificateReference,omitempty"`
	Name                 *string                       `json:"name,omitempty"`
	PropertyBag          genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.CustomDomain_STATUS
// Custom Domain of a Container App
type CustomDomain_STATUS struct {
	BindingType   *string                `json:"bindingType,omitempty"`
	CertificateId *string                `json:"certificateId,omitempty"`
	Name          *string                `json:"name,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.EnvironmentVar
// Container App container environment variable.
type EnvironmentVar struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecretRef   *string                `json:"secretRef,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250101.EnvironmentVar_STATUS
// Container App container environment variable.
type EnvironmentVar_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecretRef   *string                `json:"secretRef,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250101.Ingress_StickySessions
type Ingress_StickySessions struct {
	Affinity    *string                `json:"affinity,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Ingress_StickySessions_STATUS
type Ingress_StickySessions_STATUS struct {
	Affinity    *string                `json:"affinity,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.IngressPortMapping
// Port mappings of container app ingress
type IngressPortMapping struct {
	ExposedPort *int                   `json:"exposedPort,omitempty"`
	External    *bool                  `json:"external,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	TargetPort  *int                   `json:"targetPort,omitempty"`
}

// Storage version of v1api20250101.IngressPortMapping_STATUS
// Port mappings of container app ingress
type IngressPortMapping_STATUS struct {
	ExposedPort *int                   `json:"exposedPort,omitempty"`
	External    *bool                  `json:"external,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	TargetPort  *int                   `json:"targetPort,omitempty"`
}

// Storage version of v1api20250101.IpSecurityRestrictionRule
// Rule to restrict incoming IP address.
type IpSecurityRestrictionRule struct {
	Action         *string                `json:"action,omitempty"`
	Description    *string                `json:"description,omitempty"`
	IpAddressRange *string                `json:"ipAddressRange,omitempty"`
	Name           *string                `json:"name,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.IpSecurityRestrictionRule_STATUS
// Rule to restrict incoming IP address.
type IpSecurityRestrictionRule_STATUS struct {
	Action         *string                `json:"action,omitempty"`
	Description    *string                `json:"description,omitempty"`
	IpAddressRange *string                `json:"ipAddressRange,omitempty"`
	Name           *string                `json:"name,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Runtime_Java
type Runtime_Java struct {
	EnableMetrics *bool                  `json:"enableMetrics,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.Runtime_Java_STATUS
type Runtime_Java_STATUS struct {
	EnableMetrics *bool                  `json:"enableMetrics,omitempty"`
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.ScaleRule
// Container App container scaling rule.
type ScaleRule struct {
	AzureQueue  *QueueScaleRule        `json:"azureQueue,omitempty"`
	Custom      *CustomScaleRule       `json:"custom,omitempty"`
	Http        *HttpScaleRule         `json:"http,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Tcp         *TcpScaleRule          `json:"tcp,omitempty"`
}

// Storage version of v1api20250101.ScaleRule_STATUS
// Container App container scaling rule.
type ScaleRule_STATUS struct {
	AzureQueue  *QueueScaleRule_STATUS  `json:"azureQueue,omitempty"`
	Custom      *CustomScaleRule_STATUS `json:"custom,omitempty"`
	Http        *HttpScaleRule_STATUS   `json:"http,omitempty"`
	Name        *string                 `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag  `json:"$propertyBag,omitempty"`
	Tcp         *TcpScaleRule_STATUS    `json:"tcp,omitempty"`
}

// Storage version of v1api20250101.SecretVolumeItem
// Secret to be added to volume.
type SecretVolumeItem struct {
	Path        *string                `json:"path,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecretRef   *string                `json:"secretRef,omitempty"`
}

// Storage version of v1api20250101.SecretVolumeItem_STATUS
// Secret to be added to volume.
type SecretVolumeItem_STATUS struct {
	Path        *string                `json:"path,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecretRef   *string                `json:"secretRef,omitempty"`
}

// Storage version of v1api20250101.TrafficWeight
// Traffic weight assigned to a revision
type TrafficWeight struct {
	Label          *string                `json:"label,omitempty"`
	LatestRevision *bool                  `json:"latestRevision,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RevisionName   *string                `json:"revisionName,omitempty"`
	Weight         *int                   `json:"weight,omitempty"`
}

// Storage version of v1api20250101.TrafficWeight_STATUS
// Traffic weight assigned to a revision
type TrafficWeight_STATUS struct {
	Label          *string                `json:"label,omitempty"`
	LatestRevision *bool                  `json:"latestRevision,omitempty"`
	PropertyBag    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RevisionName   *string                `json:"revisionName,omitempty"`
	Weight         *int                   `json:"weight,omitempty"`
}

// Storage version of v1api20250101.VolumeMount
// Volume mount for the Container App.
type VolumeMount struct {
	MountPath   *string                `json:"mountPath,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SubPath     *string                `json:"subPath,omitempty"`
	VolumeName  *string                `json:"volumeName,omitempty"`
}

// Storage version of v1api20250101.VolumeMount_STATUS
// Volume mount for the Container App.
type VolumeMount_STATUS struct {
	MountPath   *string                `json:"mountPath,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SubPath     *string                `json:"subPath,omitempty"`
	VolumeName  *string                `json:"volumeName,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_HttpGet
type ContainerAppProbe_HttpGet struct {
	Host        *string                                 `json:"host,omitempty"`
	HttpHeaders []ContainerAppProbe_HttpGet_HttpHeaders `json:"httpHeaders,omitempty"`
	Path        *string                                 `json:"path,omitempty"`
	Port        *int                                    `json:"port,omitempty"`
	PropertyBag genruntime.PropertyBag                  `json:"$propertyBag,omitempty"`
	Scheme      *string                                 `json:"scheme,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_HttpGet_STATUS
type ContainerAppProbe_HttpGet_STATUS struct {
	Host        *string                                        `json:"host,omitempty"`
	HttpHeaders []ContainerAppProbe_HttpGet_HttpHeaders_STATUS `json:"httpHeaders,omitempty"`
	Path        *string                                        `json:"path,omitempty"`
	Port        *int                                           `json:"port,omitempty"`
	PropertyBag genruntime.PropertyBag                         `json:"$propertyBag,omitempty"`
	Scheme      *string                                        `json:"scheme,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_TcpSocket
type ContainerAppProbe_TcpSocket struct {
	Host        *string                `json:"host,omitempty"`
	Port        *int                   `json:"port,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_TcpSocket_STATUS
type ContainerAppProbe_TcpSocket_STATUS struct {
	Host        *string                `json:"host,omitempty"`
	Port        *int                   `json:"port,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.CustomScaleRule
// Container App container Custom scaling rule.
type CustomScaleRule struct {
	Auth []ScaleRuleAuth `json:"auth,omitempty"`

	// IdentityReference: The resource ID of a user-assigned managed identity that is assigned to the Container App, or
	// 'system' for system-assigned identity.
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	Metadata          map[string]string                      `json:"metadata,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
	Type              *string                                `json:"type,omitempty"`
}

// Storage version of v1api20250101.CustomScaleRule_STATUS
// Container App container Custom scaling rule.
type CustomScaleRule_STATUS struct {
	Auth        []ScaleRuleAuth_STATUS `json:"auth,omitempty"`
	Identity    *string                `json:"identity,omitempty"`
	Metadata    map[string]string      `json:"metadata,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Type        *string                `json:"type,omitempty"`
}

// Storage version of v1api20250101.HttpScaleRule
// Container App container Http scaling rule.
type HttpScaleRule struct {
	Auth []ScaleRuleAuth `json:"auth,omitempty"`

	// IdentityReference: The resource ID of a user-assigned managed identity that is assigned to the Container App, or
	// 'system' for system-assigned identity.
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	Metadata          map[string]string                      `json:"metadata,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.HttpScaleRule_STATUS
// Container App container Http scaling rule.
type HttpScaleRule_STATUS struct {
	Auth        []ScaleRuleAuth_STATUS `json:"auth,omitempty"`
	Identity    *string                `json:"identity,omitempty"`
	Metadata    map[string]string      `json:"metadata,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.QueueScaleRule
// Container App container Azure Queue based scaling rule.
type QueueScaleRule struct {
	AccountName *string         `json:"accountName,omitempty"`
	Auth        []ScaleRuleAuth `json:"auth,omitempty"`

	// IdentityReference: The resource ID of a user-assigned managed identity that is assigned to the Container App, or
	// 'system' for system-assigned identity.
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
	QueueLength       *int                                   `json:"queueLength,omitempty"`
	QueueName         *string                                `json:"queueName,omitempty"`
}

// Storage version of v1api20250101.QueueScaleRule_STATUS
// Container App container Azure Queue based scaling rule.
type QueueScaleRule_STATUS struct {
	AccountName *string                `json:"accountName,omitempty"`
	Auth        []ScaleRuleAuth_STATUS `json:"auth,omitempty"`
	Identity    *string                `json:"identity,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	QueueLength *int                   `json:"queueLength,omitempty"`
	QueueName   *string                `json:"queueName,omitempty"`
}

// Storage version of v1api20250101.TcpScaleRule
// Container App container Tcp scaling rule.
type TcpScaleRule struct {
	Auth []ScaleRuleAuth `json:"auth,omitempty"`

	// IdentityReference: The resource ID of a user-assigned managed identity that is assigned to the Container App, or
	// 'system' for system-assigned identity.
	IdentityReference *genruntime.WellKnownResourceReference `armReference:"Identity" json:"identityReference,omitempty"`
	Metadata          map[string]string                      `json:"metadata,omitempty"`
	PropertyBag       genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.TcpScaleRule_STATUS
// Container App container Tcp scaling rule.
type TcpScaleRule_STATUS struct {
	Auth        []ScaleRuleAuth_STATUS `json:"auth,omitempty"`
	Identity    *string                `json:"identity,omitempty"`
	Metadata    map[string]string      `json:"metadata,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_HttpGet_HttpHeaders
type ContainerAppProbe_HttpGet_HttpHeaders struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250101.ContainerAppProbe_HttpGet_HttpHeaders_STATUS
type ContainerAppProbe_HttpGet_HttpHeaders_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250101.ScaleRuleAuth
// Auth Secrets for Scale Rule
type ScaleRuleAuth struct {
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecretRef        *string                `json:"secretRef,omitempty"`
	TriggerParameter *string                `json:"triggerParameter,omitempty"`
}

// Storage version of v1api20250101.ScaleRuleAuth_STATUS
// Auth Secrets for Scale Rule
type ScaleRuleAuth_STATUS struct {
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	SecretRef        *string                `json:"secretRef,omitempty"`
	TriggerParameter *string                `json:"triggerParameter,omitempty"`
}

func init() {
	SchemeBuilder.Register(&ContainerApp{}, &ContainerAppList{})
}
