# pylint: disable=line-too-long,useless-suppression,too-many-lines
# coding=utf-8
# --------------------------------------------------------------------------
# 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) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from typing import Any, Literal, TYPE_CHECKING, Union
from typing_extensions import Required, TypedDict

if TYPE_CHECKING:
    from .models import (
        AlertsState,
        AuthType,
        BCDRSecurityLevel,
        BackupStorageVersion,
        CreatedByType,
        CrossRegionRestore,
        CrossSubscriptionRestoreState,
        EnhancedSecurityState,
        GranularityLevel,
        IdentityType,
        ImmutabilityState,
        ImmutabilityType,
        InfrastructureEncryptionState,
        MultiUserAuthorization,
        PrivateEndpointConnectionStatus,
        ProvisioningState,
        PublicNetworkAccess,
        ResourceIdentityType,
        ResourceMoveState,
        SecureScoreLevel,
        SkuName,
        SoftDeleteState,
        StandardTierStorageRedundancy,
        State,
        TriggerType,
        UsagesUnit,
        VaultPrivateEndpointState,
        VaultSubResourceType,
        VaultUpgradeState,
    )


class AssociatedIdentity(TypedDict, total=False):
    """Identity details to be used for an operation.

    :ivar operation_identity_type: Identity type that should be used for an operation. Known values
     are: "SystemAssigned" and "UserAssigned".
    :vartype operation_identity_type: Union[str, "IdentityType"]
    :ivar user_assigned_identity: User assigned identity to be used for an operation if
     operationIdentityType is UserAssigned.
    :vartype user_assigned_identity: str
    """

    operationIdentityType: Union[str, "IdentityType"]
    """Identity type that should be used for an operation. Known values are: \"SystemAssigned\" and
     \"UserAssigned\"."""
    userAssignedIdentity: str
    """User assigned identity to be used for an operation if operationIdentityType is UserAssigned."""


class AzureMonitorAlertSettings(TypedDict, total=False):
    """Settings for Azure Monitor based alerts.

    :ivar alerts_for_all_job_failures: Known values are: "Enabled" and "Disabled".
    :vartype alerts_for_all_job_failures: Union[str, "AlertsState"]
    :ivar alerts_for_all_replication_issues: Known values are: "Enabled" and "Disabled".
    :vartype alerts_for_all_replication_issues: Union[str, "AlertsState"]
    :ivar alerts_for_all_failover_issues: Known values are: "Enabled" and "Disabled".
    :vartype alerts_for_all_failover_issues: Union[str, "AlertsState"]
    """

    alertsForAllJobFailures: Union[str, "AlertsState"]
    """Known values are: \"Enabled\" and \"Disabled\"."""
    alertsForAllReplicationIssues: Union[str, "AlertsState"]
    """Known values are: \"Enabled\" and \"Disabled\"."""
    alertsForAllFailoverIssues: Union[str, "AlertsState"]
    """Known values are: \"Enabled\" and \"Disabled\"."""


class CapabilitiesProperties(TypedDict, total=False):
    """Capabilities information.

    :ivar dns_zones:
    :vartype dns_zones: list["DNSZone"]
    """

    dnsZones: list["DNSZone"]


class ResourceCapabilitiesBase(TypedDict, total=False):
    """Base class for request and response capabilities information for Microsoft.RecoveryServices.

    :ivar type: Describes the Resource type: Microsoft.RecoveryServices/Vaults. Required.
    :vartype type: str
    """

    type: Required[str]
    """Describes the Resource type: Microsoft.RecoveryServices/Vaults. Required."""


class CapabilitiesResponse(ResourceCapabilitiesBase):
    """Capabilities response for Microsoft.RecoveryServices.

    :ivar type: Describes the Resource type: Microsoft.RecoveryServices/Vaults. Required.
    :vartype type: str
    :ivar properties: Capabilities properties in response.
    :vartype properties: "CapabilitiesResponseProperties"
    """

    properties: "CapabilitiesResponseProperties"
    """Capabilities properties in response."""


class CapabilitiesResponseProperties(TypedDict, total=False):
    """Capabilities properties in response.

    :ivar dns_zones:
    :vartype dns_zones: list["DNSZoneResponse"]
    """

    dnsZones: list["DNSZoneResponse"]


class CertificateRequest(TypedDict, total=False):
    """Details of the certificate to be uploaded to the vault.

    :ivar properties: Raw certificate data.
    :vartype properties: "RawCertificateData"
    """

    properties: "RawCertificateData"
    """Raw certificate data."""


class CheckNameAvailabilityParameters(TypedDict, total=False):
    """Resource Name availability input parameters - Resource type and resource name.

    :ivar type: Describes the Resource type: Microsoft.RecoveryServices/Vaults.
    :vartype type: str
    :ivar name: Resource name for which availability needs to be checked.
    :vartype name: str
    """

    type: str
    """Describes the Resource type: Microsoft.RecoveryServices/Vaults."""
    name: str
    """Resource name for which availability needs to be checked."""


class CheckNameAvailabilityResult(TypedDict, total=False):
    """Response for check name availability API. Resource provider will set availability as true |
    false.

    :ivar name_available:
    :vartype name_available: bool
    :ivar reason:
    :vartype reason: str
    :ivar message:
    :vartype message: str
    """

    nameAvailable: bool
    reason: str
    message: str


class ClassicAlertSettings(TypedDict, total=False):
    """Settings for classic alerts.

    :ivar alerts_for_critical_operations: Known values are: "Enabled" and "Disabled".
    :vartype alerts_for_critical_operations: Union[str, "AlertsState"]
    :ivar email_notifications_for_site_recovery: Known values are: "Enabled" and "Disabled".
    :vartype email_notifications_for_site_recovery: Union[str, "AlertsState"]
    """

    alertsForCriticalOperations: Union[str, "AlertsState"]
    """Known values are: \"Enabled\" and \"Disabled\"."""
    emailNotificationsForSiteRecovery: Union[str, "AlertsState"]
    """Known values are: \"Enabled\" and \"Disabled\"."""


class ClientDiscoveryDisplay(TypedDict, total=False):
    """Localized display information of an operation.

    :ivar provider: Name of the provider for display purposes.
    :vartype provider: str
    :ivar resource: ResourceType for which this Operation can be performed.
    :vartype resource: str
    :ivar operation: Operations Name itself.
    :vartype operation: str
    :ivar description: Description of the operation having details of what operation is about.
    :vartype description: str
    """

    provider: str
    """Name of the provider for display purposes."""
    resource: str
    """ResourceType for which this Operation can be performed."""
    operation: str
    """Operations Name itself."""
    description: str
    """Description of the operation having details of what operation is about."""


class ClientDiscoveryForLogSpecification(TypedDict, total=False):
    """Class to represent shoebox log specification in json client discovery.

    :ivar name: Name of the log.
    :vartype name: str
    :ivar display_name: Localized display name.
    :vartype display_name: str
    :ivar blob_duration: Blobs created in customer storage account per hour.
    :vartype blob_duration: str
    """

    name: str
    """Name of the log."""
    displayName: str
    """Localized display name."""
    blobDuration: str
    """Blobs created in customer storage account per hour."""


class ClientDiscoveryForProperties(TypedDict, total=False):
    """Class to represent shoebox properties in json client discovery.

    :ivar service_specification: Operation properties.
    :vartype service_specification: "ClientDiscoveryForServiceSpecification"
    """

    serviceSpecification: "ClientDiscoveryForServiceSpecification"
    """Operation properties."""


class ClientDiscoveryForServiceSpecification(TypedDict, total=False):
    """Class to represent shoebox service specification in json client discovery.

    :ivar log_specifications: List of log specifications of this operation.
    :vartype log_specifications: list["ClientDiscoveryForLogSpecification"]
    """

    logSpecifications: list["ClientDiscoveryForLogSpecification"]
    """List of log specifications of this operation."""


class ClientDiscoveryValueForSingleApi(TypedDict, total=False):
    """Available operation details.

    :ivar name: Name of the Operation.
    :vartype name: str
    :ivar display: Contains the localized display information for this particular operation.
    :vartype display: "ClientDiscoveryDisplay"
    :ivar origin: The intended executor of the operation;governs the display of the operation in
     the RBAC UX and the audit logs UX.
    :vartype origin: str
    :ivar properties: ShoeBox properties for the given operation.
    :vartype properties: "ClientDiscoveryForProperties"
    """

    name: str
    """Name of the Operation."""
    display: "ClientDiscoveryDisplay"
    """Contains the localized display information for this particular operation."""
    origin: str
    """The intended executor of the operation;governs the display of the operation in the RBAC UX and
     the audit logs UX."""
    properties: "ClientDiscoveryForProperties"
    """ShoeBox properties for the given operation."""


class CloudError(TypedDict, total=False):
    """An error response from Azure Backup.

    :ivar error: The resource management error response.
    :vartype error: "Error"
    """

    error: "Error"
    """The resource management error response."""


class CmkKekIdentity(TypedDict, total=False):
    """The details of the identity used for CMK.

    :ivar use_system_assigned_identity: Indicate that system assigned identity should be used.
     Mutually exclusive with 'userAssignedIdentity' field.
    :vartype use_system_assigned_identity: bool
    :ivar user_assigned_identity: The user assigned identity to be used to grant permissions in
     case the type of identity used is UserAssigned.
    :vartype user_assigned_identity: str
    """

    useSystemAssignedIdentity: bool
    """Indicate that system assigned identity should be used. Mutually exclusive with
     'userAssignedIdentity' field."""
    userAssignedIdentity: str
    """The user assigned identity to be used to grant permissions in case the type of identity used is
     UserAssigned."""


class CmkKeyVaultProperties(TypedDict, total=False):
    """The properties of the Key Vault which hosts CMK.

    :ivar key_uri: The key uri of the Customer Managed Key.
    :vartype key_uri: str
    """

    keyUri: str
    """The key uri of the Customer Managed Key."""


class CostManagementSettings(TypedDict, total=False):
    """Cost Management Settings of the vault.

    :ivar granularity_level: Settings for granularity level. Known values are: "VaultLevel",
     "ProtectedItemLevel", and "ProtectedItemWithParentTag".
    :vartype granularity_level: Union[str, "GranularityLevel"]
    """

    granularityLevel: Union[str, "GranularityLevel"]
    """Settings for granularity level. Known values are: \"VaultLevel\", \"ProtectedItemLevel\", and
     \"ProtectedItemWithParentTag\"."""


class CrossSubscriptionRestoreSettings(TypedDict, total=False):
    """Settings for Cross Subscription Restore Settings.

    :ivar cross_subscription_restore_state: Known values are: "Enabled", "Disabled", and
     "PermanentlyDisabled".
    :vartype cross_subscription_restore_state: Union[str, "CrossSubscriptionRestoreState"]
    """

    crossSubscriptionRestoreState: Union[str, "CrossSubscriptionRestoreState"]
    """Known values are: \"Enabled\", \"Disabled\", and \"PermanentlyDisabled\"."""


class Resource(TypedDict, total=False):
    """Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """

    id: str
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: str
    """The name of the resource."""
    type: str
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    systemData: "SystemData"
    """Azure Resource Manager metadata containing createdBy and modifiedBy information."""


class ProxyResource(Resource):
    """Proxy Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """


class DeletedVault(ProxyResource):
    """DeletedVault information as returned by the resource provider.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The resource-specific properties for this resource.
    :vartype properties: "DeletedVaultProperties"
    """

    properties: "DeletedVaultProperties"
    """The resource-specific properties for this resource."""


class DeletedVaultProperties(TypedDict, total=False):
    """Properties of the DeletedVault.

    :ivar vault_id: ARM Id of the Vault which was deleted.
    :vartype vault_id: str
    :ivar vault_deletion_time: Time in UTC at which the Vault was deleted.
    :vartype vault_deletion_time: str
    :ivar purge_at: Time in UTC at which the DeletedVault will be purged.
    :vartype purge_at: str
    """

    vaultId: str
    """ARM Id of the Vault which was deleted."""
    vaultDeletionTime: str
    """Time in UTC at which the Vault was deleted."""
    purgeAt: str
    """Time in UTC at which the DeletedVault will be purged."""


class DeletedVaultUndeleteInput(TypedDict, total=False):
    """Input definition for DeletedVault undelete.

    :ivar properties: Undelete input properties. Required.
    :vartype properties: "DeletedVaultUndeleteInputProperties"
    """

    properties: Required["DeletedVaultUndeleteInputProperties"]
    """Undelete input properties. Required."""


class DeletedVaultUndeleteInputProperties(TypedDict, total=False):
    """Input definition for DeletedVault undelete properties.

    :ivar recovery_resource_group_id: Recovery resource group Id. Required.
    :vartype recovery_resource_group_id: str
    """

    recoveryResourceGroupId: Required[str]
    """Recovery resource group Id. Required."""


class DNSZone(TypedDict, total=False):
    """DNSZone information.

    :ivar sub_resource: Subresource type for vault AzureBackup, AzureBackup_secondary or
     AzureSiteRecovery. Known values are: "AzureBackup", "AzureBackup_secondary", and
     "AzureSiteRecovery".
    :vartype sub_resource: Union[str, "VaultSubResourceType"]
    """

    subResource: Union[str, "VaultSubResourceType"]
    """Subresource type for vault AzureBackup, AzureBackup_secondary or AzureSiteRecovery. Known
     values are: \"AzureBackup\", \"AzureBackup_secondary\", and \"AzureSiteRecovery\"."""


class DNSZoneResponse(DNSZone):
    """DNSZone information for Microsoft.RecoveryServices.

    :ivar sub_resource: Subresource type for vault AzureBackup, AzureBackup_secondary or
     AzureSiteRecovery. Known values are: "AzureBackup", "AzureBackup_secondary", and
     "AzureSiteRecovery".
    :vartype sub_resource: Union[str, "VaultSubResourceType"]
    :ivar required_zone_names: The private link resource Private link DNS zone names.
    :vartype required_zone_names: list[str]
    """

    requiredZoneNames: list[str]
    """The private link resource Private link DNS zone names."""


class Error(TypedDict, total=False):
    """The resource management error response.

    :ivar additional_info: The error additional info.
    :vartype additional_info: list["ErrorAdditionalInfo"]
    :ivar code: The error code.
    :vartype code: str
    :ivar details: The error details.
    :vartype details: list["Error"]
    :ivar message: The error message.
    :vartype message: str
    :ivar target: The error target.
    :vartype target: str
    """

    additionalInfo: list["ErrorAdditionalInfo"]
    """The error additional info."""
    code: str
    """The error code."""
    details: list["Error"]
    """The error details."""
    message: str
    """The error message."""
    target: str
    """The error target."""


class ErrorAdditionalInfo(TypedDict, total=False):
    """The resource management error additional info.

    :ivar type: The additional info type.
    :vartype type: str
    :ivar info: The additional info.
    :vartype info: Any
    """

    type: str
    """The additional info type."""
    info: Any
    """The additional info."""


class ErrorDetail(TypedDict, total=False):
    """The error detail.

    :ivar code: The error code.
    :vartype code: str
    :ivar message: The error message.
    :vartype message: str
    :ivar target: The error target.
    :vartype target: str
    :ivar details: The error details.
    :vartype details: list["ErrorDetail"]
    :ivar additional_info: The error additional info.
    :vartype additional_info: list["ErrorAdditionalInfo"]
    """

    code: str
    """The error code."""
    message: str
    """The error message."""
    target: str
    """The error target."""
    details: list["ErrorDetail"]
    """The error details."""
    additionalInfo: list["ErrorAdditionalInfo"]
    """The error additional info."""


class ErrorResponse(TypedDict, total=False):
    """Error response.

    :ivar error: The error object.
    :vartype error: "ErrorDetail"
    """

    error: "ErrorDetail"
    """The error object."""


class IdentityData(TypedDict, total=False):
    """Identity for the resource.

    :ivar principal_id: The principal ID of resource identity.
    :vartype principal_id: str
    :ivar tenant_id: The tenant ID of resource.
    :vartype tenant_id: str
    :ivar type: The type of managed identity used. The type 'SystemAssigned, UserAssigned' includes
     both an implicitly created identity and a set of user-assigned identities. The type 'None' will
     remove any identities. Required. Known values are: "SystemAssigned", "None", "UserAssigned",
     and "SystemAssigned, UserAssigned".
    :vartype type: Union[str, "ResourceIdentityType"]
    :ivar user_assigned_identities: The list of user-assigned identities associated with the
     resource. The user-assigned identity dictionary keys will be ARM resource ids in the form:
     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
    :vartype user_assigned_identities: dict[str, "UserIdentity"]
    """

    principalId: str
    """The principal ID of resource identity."""
    tenantId: str
    """The tenant ID of resource."""
    type: Required[Union[str, "ResourceIdentityType"]]
    """The type of managed identity used. The type 'SystemAssigned, UserAssigned' includes both an
     implicitly created identity and a set of user-assigned identities. The type 'None' will remove
     any identities. Required. Known values are: \"SystemAssigned\", \"None\", \"UserAssigned\", and
     \"SystemAssigned, UserAssigned\"."""
    userAssignedIdentities: dict[str, "UserIdentity"]
    """The list of user-assigned identities associated with the resource. The user-assigned identity
     dictionary keys will be ARM resource ids in the form:
     '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'."""


class ImmutabilityConfiguration(TypedDict, total=False):
    """Immutability configuration of vault.

    :ivar type: Immutability type. 'AsPerPolicy' inherits duration from backup policy; 'TimeBased'
     requires explicit durationInDays. Known values are: "AsPerPolicy" and "TimeBased".
    :vartype type: Union[str, "ImmutabilityType"]
    :ivar duration_in_days: Duration in days. Required when type is TimeBased, omitted when
     AsPerPolicy.
    :vartype duration_in_days: int
    """

    type: Union[str, "ImmutabilityType"]
    """Immutability type. 'AsPerPolicy' inherits duration from backup policy; 'TimeBased' requires
     explicit durationInDays. Known values are: \"AsPerPolicy\" and \"TimeBased\"."""
    durationInDays: int
    """Duration in days. Required when type is TimeBased, omitted when AsPerPolicy."""


class ImmutabilitySettings(TypedDict, total=False):
    """Immutability Settings of vault.

    :ivar state: Known values are: "Disabled", "Unlocked", and "Locked".
    :vartype state: Union[str, "ImmutabilityState"]
    :ivar configuration: Immutability configuration of the vault — selects whether immutability is
     inherited from the backup policy (AsPerPolicy) or fixed for a specific duration (TimeBased).
    :vartype configuration: "ImmutabilityConfiguration"
    """

    state: Union[str, "ImmutabilityState"]
    """Known values are: \"Disabled\", \"Unlocked\", and \"Locked\"."""
    configuration: "ImmutabilityConfiguration"
    """Immutability configuration of the vault — selects whether immutability is inherited from the
     backup policy (AsPerPolicy) or fixed for a specific duration (TimeBased)."""


class JobsSummary(TypedDict, total=False):
    """Summary of the replication job data for this vault.

    :ivar failed_jobs: Count of failed jobs.
    :vartype failed_jobs: int
    :ivar suspended_jobs: Count of suspended jobs.
    :vartype suspended_jobs: int
    :ivar in_progress_jobs: Count of in-progress jobs.
    :vartype in_progress_jobs: int
    """

    failedJobs: int
    """Count of failed jobs."""
    suspendedJobs: int
    """Count of suspended jobs."""
    inProgressJobs: int
    """Count of in-progress jobs."""


class MonitoringSettings(TypedDict, total=False):
    """Monitoring Settings of the vault.

    :ivar azure_monitor_alert_settings: Settings for Azure Monitor based alerts.
    :vartype azure_monitor_alert_settings: "AzureMonitorAlertSettings"
    :ivar classic_alert_settings: Settings for classic alerts.
    :vartype classic_alert_settings: "ClassicAlertSettings"
    """

    azureMonitorAlertSettings: "AzureMonitorAlertSettings"
    """Settings for Azure Monitor based alerts."""
    classicAlertSettings: "ClassicAlertSettings"
    """Settings for classic alerts."""


class MonitoringSummary(TypedDict, total=False):
    """Summary of the replication monitoring data for this vault.

    :ivar un_healthy_vm_count: Count of unhealthy VMs.
    :vartype un_healthy_vm_count: int
    :ivar un_healthy_provider_count: Count of unhealthy replication providers.
    :vartype un_healthy_provider_count: int
    :ivar events_count: Count of all critical warnings.
    :vartype events_count: int
    :ivar deprecated_provider_count: Count of all deprecated recovery service providers.
    :vartype deprecated_provider_count: int
    :ivar supported_provider_count: Count of all the supported recovery service providers.
    :vartype supported_provider_count: int
    :ivar unsupported_provider_count: Count of all the unsupported recovery service providers.
    :vartype unsupported_provider_count: int
    """

    unHealthyVmCount: int
    """Count of unhealthy VMs."""
    unHealthyProviderCount: int
    """Count of unhealthy replication providers."""
    eventsCount: int
    """Count of all critical warnings."""
    deprecatedProviderCount: int
    """Count of all deprecated recovery service providers."""
    supportedProviderCount: int
    """Count of all the supported recovery service providers."""
    unsupportedProviderCount: int
    """Count of all the unsupported recovery service providers."""


class NameInfo(TypedDict, total=False):
    """The name of usage.

    :ivar value: Value of usage.
    :vartype value: str
    :ivar localized_value: Localized value of usage.
    :vartype localized_value: str
    """

    value: str
    """Value of usage."""
    localizedValue: str
    """Localized value of usage."""


class OperationResource(TypedDict, total=False):
    """Operation Resource.

    :ivar end_time: End time of the operation.
    :vartype end_time: str
    :ivar error: Required if status == failed or status == canceled. This is the OData v4 error
     format, used by the RPC and will go into the v2.2 Azure REST API guidelines.
    :vartype error: "Error"
    :ivar id: It should match what is used to GET the operation result.
    :vartype id: str
    :ivar name: It must match the last segment of the "id" field, and will typically be a GUID /
     system generated value.
    :vartype name: str
    :ivar status: The status of the operation. (InProgress/Success/Failed/Cancelled).
    :vartype status: str
    :ivar start_time: Start time of the operation.
    :vartype start_time: str
    """

    endTime: str
    """End time of the operation."""
    error: "Error"
    """Required if status == failed or status == canceled. This is the OData v4 error format, used by
     the RPC and will go into the v2.2 Azure REST API guidelines."""
    id: str
    """It should match what is used to GET the operation result."""
    name: str
    """It must match the last segment of the \"id\" field, and will typically be a GUID / system
     generated value."""
    status: str
    """The status of the operation. (InProgress/Success/Failed/Cancelled)."""
    startTime: str
    """Start time of the operation."""


class PatchTrackedResource(Resource):
    """Tracked resource with location.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar location: Resource location.
    :vartype location: str
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar etag: Optional ETag.
    :vartype etag: str
    """

    location: str
    """Resource location."""
    tags: dict[str, str]
    """Resource tags."""
    etag: str
    """Optional ETag."""


class PatchVault(PatchTrackedResource):
    """Patch Resource information, as returned by the resource provider.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar location: Resource location.
    :vartype location: str
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar etag: Optional ETag.
    :vartype etag: str
    :ivar properties: Properties of the vault.
    :vartype properties: "VaultProperties"
    :ivar sku: Identifies the unique system identifier for each Azure resource.
    :vartype sku: "Sku"
    :ivar identity: Identity for the resource.
    :vartype identity: "IdentityData"
    """

    properties: "VaultProperties"
    """Properties of the vault."""
    sku: "Sku"
    """Identifies the unique system identifier for each Azure resource."""
    identity: "IdentityData"
    """Identity for the resource."""


class PrivateEndpoint(TypedDict, total=False):
    """The Private Endpoint network resource that is linked to the Private Endpoint connection.

    :ivar id: Gets or sets id.
    :vartype id: str
    """

    id: str
    """Gets or sets id."""


class PrivateEndpointConnection(TypedDict, total=False):
    """Private Endpoint Connection Response Properties.

    :ivar provisioning_state: Gets or sets provisioning state of the private endpoint connection.
     Known values are: "Succeeded", "Deleting", "Failed", and "Pending".
    :vartype provisioning_state: Union[str, "ProvisioningState"]
    :ivar private_endpoint: The Private Endpoint network resource that is linked to the Private
     Endpoint connection.
    :vartype private_endpoint: "PrivateEndpoint"
    :ivar private_link_service_connection_state: Gets or sets private link service connection
     state.
    :vartype private_link_service_connection_state: "PrivateLinkServiceConnectionState"
    :ivar group_ids: Group Ids for the Private Endpoint.
    :vartype group_ids: list[Union[str, "VaultSubResourceType"]]
    """

    provisioningState: Union[str, "ProvisioningState"]
    """Gets or sets provisioning state of the private endpoint connection. Known values are:
     \"Succeeded\", \"Deleting\", \"Failed\", and \"Pending\"."""
    privateEndpoint: "PrivateEndpoint"
    """The Private Endpoint network resource that is linked to the Private Endpoint connection."""
    privateLinkServiceConnectionState: "PrivateLinkServiceConnectionState"
    """Gets or sets private link service connection state."""
    groupIds: list[Union[str, "VaultSubResourceType"]]
    """Group Ids for the Private Endpoint."""


class PrivateEndpointConnectionVaultProperties(TypedDict, total=False):
    """Information to be stored in Vault properties as an element of privateEndpointConnections List.

    :ivar id: Format of id
     subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.[Service]/{resource}/{resourceName}/privateEndpointConnections/{connectionName}.
    :vartype id: str
    :ivar properties: Private Endpoint Connection Response Properties.
    :vartype properties: "PrivateEndpointConnection"
    :ivar name: The name of the private Endpoint Connection.
    :vartype name: str
    :ivar type: The type, which will be of the format,
     Microsoft.RecoveryServices/vaults/privateEndpointConnections.
    :vartype type: str
    :ivar location: The location of the private Endpoint connection.
    :vartype location: str
    """

    id: str
    """Format of id
     subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.[Service]/{resource}/{resourceName}/privateEndpointConnections/{connectionName}."""
    properties: "PrivateEndpointConnection"
    """Private Endpoint Connection Response Properties."""
    name: str
    """The name of the private Endpoint Connection."""
    type: str
    """The type, which will be of the format,
     Microsoft.RecoveryServices/vaults/privateEndpointConnections."""
    location: str
    """The location of the private Endpoint connection."""


class PrivateLinkResource(ProxyResource):
    """Information of the private link resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: Resource properties.
    :vartype properties: "PrivateLinkResourceProperties"
    """

    properties: "PrivateLinkResourceProperties"
    """Resource properties."""


class PrivateLinkResourceProperties(TypedDict, total=False):
    """Properties of the private link resource.

    :ivar group_id: e.g. f9ad6492-33d4-4690-9999-6bfd52a0d081 (Backup) or
     f9ad6492-33d4-4690-9999-6bfd52a0d082 (SiteRecovery).
    :vartype group_id: str
    :ivar required_members: [backup-ecs1, backup-prot1, backup-prot1b, backup-prot1c, backup-id1].
    :vartype required_members: list[str]
    :ivar required_zone_names: The private link resource Private link DNS zone name.
    :vartype required_zone_names: list[str]
    """

    groupId: str
    """e.g. f9ad6492-33d4-4690-9999-6bfd52a0d081 (Backup) or f9ad6492-33d4-4690-9999-6bfd52a0d082
     (SiteRecovery)."""
    requiredMembers: list[str]
    """[backup-ecs1, backup-prot1, backup-prot1b, backup-prot1c, backup-id1]."""
    requiredZoneNames: list[str]
    """The private link resource Private link DNS zone name."""


class PrivateLinkServiceConnectionState(TypedDict, total=False):
    """Gets or sets private link service connection state.

    :ivar status: Gets or sets the status. Known values are: "Pending", "Approved", "Rejected", and
     "Disconnected".
    :vartype status: Union[str, "PrivateEndpointConnectionStatus"]
    :ivar description: Gets or sets description.
    :vartype description: str
    :ivar actions_required: Gets or sets actions required.
    :vartype actions_required: str
    """

    status: Union[str, "PrivateEndpointConnectionStatus"]
    """Gets or sets the status. Known values are: \"Pending\", \"Approved\", \"Rejected\", and
     \"Disconnected\"."""
    description: str
    """Gets or sets description."""
    actionsRequired: str
    """Gets or sets actions required."""


class RawCertificateData(TypedDict, total=False):
    """Raw certificate data.

    :ivar auth_type: Specifies the authentication type. Known values are: "Invalid", "ACS", "AAD",
     "AccessControlService", and "AzureActiveDirectory".
    :vartype auth_type: Union[str, "AuthType"]
    :ivar certificate: The base64 encoded certificate raw data string.
    :vartype certificate: str
    """

    authType: Union[str, "AuthType"]
    """Specifies the authentication type. Known values are: \"Invalid\", \"ACS\", \"AAD\",
     \"AccessControlService\", and \"AzureActiveDirectory\"."""
    certificate: str
    """The base64 encoded certificate raw data string."""


class ReplicationUsage(TypedDict, total=False):
    """Replication usages of a vault.

    :ivar monitoring_summary: Summary of the replication monitoring data for this vault.
    :vartype monitoring_summary: "MonitoringSummary"
    :ivar jobs_summary: Summary of the replication jobs data for this vault.
    :vartype jobs_summary: "JobsSummary"
    :ivar protected_item_count: Number of replication protected items for this vault.
    :vartype protected_item_count: int
    :ivar recovery_plan_count: Number of replication recovery plans for this vault.
    :vartype recovery_plan_count: int
    :ivar registered_servers_count: Number of servers registered to this vault.
    :vartype registered_servers_count: int
    :ivar recovery_services_provider_auth_type: The authentication type of recovery service
     providers in the vault.
    :vartype recovery_services_provider_auth_type: int
    """

    monitoringSummary: "MonitoringSummary"
    """Summary of the replication monitoring data for this vault."""
    jobsSummary: "JobsSummary"
    """Summary of the replication jobs data for this vault."""
    protectedItemCount: int
    """Number of replication protected items for this vault."""
    recoveryPlanCount: int
    """Number of replication recovery plans for this vault."""
    registeredServersCount: int
    """Number of servers registered to this vault."""
    recoveryServicesProviderAuthType: int
    """The authentication type of recovery service providers in the vault."""


class ResourceCapabilities(ResourceCapabilitiesBase):
    """Input to get capabilities information for Microsoft.RecoveryServices.

    :ivar type: Describes the Resource type: Microsoft.RecoveryServices/Vaults. Required.
    :vartype type: str
    :ivar properties: Capabilities information.
    :vartype properties: "CapabilitiesProperties"
    """

    properties: "CapabilitiesProperties"
    """Capabilities information."""


class ResourceCertificateAndAadDetails(TypedDict, total=False):
    """Certificate details representing the Vault credentials for AAD.

    :ivar certificate: The base64 encoded certificate raw data string.
    :vartype certificate: str
    :ivar friendly_name: Certificate friendly name.
    :vartype friendly_name: str
    :ivar issuer: Certificate issuer.
    :vartype issuer: str
    :ivar resource_id: Resource ID of the vault.
    :vartype resource_id: int
    :ivar subject: Certificate Subject Name.
    :vartype subject: str
    :ivar thumbprint: Certificate thumbprint.
    :vartype thumbprint: str
    :ivar valid_from: Certificate Validity start Date time.
    :vartype valid_from: str
    :ivar valid_to: Certificate Validity End Date time.
    :vartype valid_to: str
    :ivar aad_authority: AAD tenant authority. Required.
    :vartype aad_authority: str
    :ivar aad_tenant_id: AAD tenant Id. Required.
    :vartype aad_tenant_id: str
    :ivar service_principal_client_id: AAD service principal clientId. Required.
    :vartype service_principal_client_id: str
    :ivar service_principal_object_id: AAD service principal ObjectId. Required.
    :vartype service_principal_object_id: str
    :ivar azure_management_endpoint_audience: Azure Management Endpoint Audience. Required.
    :vartype azure_management_endpoint_audience: str
    :ivar service_resource_id: Service Resource Id.
    :vartype service_resource_id: str
    :ivar aad_audience: AAD audience for the resource.
    :vartype aad_audience: str
    :ivar auth_type: This property will be used as the discriminator for deciding the specific
     types in the polymorphic chain of types. Required. Default value is "AzureActiveDirectory".
    :vartype auth_type: Literal["AzureActiveDirectory"]
    """

    certificate: str
    """The base64 encoded certificate raw data string."""
    friendlyName: str
    """Certificate friendly name."""
    issuer: str
    """Certificate issuer."""
    resourceId: int
    """Resource ID of the vault."""
    subject: str
    """Certificate Subject Name."""
    thumbprint: str
    """Certificate thumbprint."""
    validFrom: str
    """Certificate Validity start Date time."""
    validTo: str
    """Certificate Validity End Date time."""
    aadAuthority: Required[str]
    """AAD tenant authority. Required."""
    aadTenantId: Required[str]
    """AAD tenant Id. Required."""
    servicePrincipalClientId: Required[str]
    """AAD service principal clientId. Required."""
    servicePrincipalObjectId: Required[str]
    """AAD service principal ObjectId. Required."""
    azureManagementEndpointAudience: Required[str]
    """Azure Management Endpoint Audience. Required."""
    serviceResourceId: str
    """Service Resource Id."""
    aadAudience: str
    """AAD audience for the resource."""
    authType: Required[Literal["AzureActiveDirectory"]]
    """This property will be used as the discriminator for deciding the specific types in the
     polymorphic chain of types. Required. Default value is \"AzureActiveDirectory\"."""


class ResourceCertificateAndAcsDetails(TypedDict, total=False):
    """Certificate details representing the Vault credentials for ACS.

    :ivar certificate: The base64 encoded certificate raw data string.
    :vartype certificate: str
    :ivar friendly_name: Certificate friendly name.
    :vartype friendly_name: str
    :ivar issuer: Certificate issuer.
    :vartype issuer: str
    :ivar resource_id: Resource ID of the vault.
    :vartype resource_id: int
    :ivar subject: Certificate Subject Name.
    :vartype subject: str
    :ivar thumbprint: Certificate thumbprint.
    :vartype thumbprint: str
    :ivar valid_from: Certificate Validity start Date time.
    :vartype valid_from: str
    :ivar valid_to: Certificate Validity End Date time.
    :vartype valid_to: str
    :ivar global_acs_namespace: ACS namespace name - tenant for our service. Required.
    :vartype global_acs_namespace: str
    :ivar global_acs_host_name: Acs mgmt host name to connect to. Required.
    :vartype global_acs_host_name: str
    :ivar global_acs_rp_realm: Global ACS namespace RP realm. Required.
    :vartype global_acs_rp_realm: str
    :ivar auth_type: This property will be used as the discriminator for deciding the specific
     types in the polymorphic chain of types. Required. Default value is "AccessControlService".
    :vartype auth_type: Literal["AccessControlService"]
    """

    certificate: str
    """The base64 encoded certificate raw data string."""
    friendlyName: str
    """Certificate friendly name."""
    issuer: str
    """Certificate issuer."""
    resourceId: int
    """Resource ID of the vault."""
    subject: str
    """Certificate Subject Name."""
    thumbprint: str
    """Certificate thumbprint."""
    validFrom: str
    """Certificate Validity start Date time."""
    validTo: str
    """Certificate Validity End Date time."""
    globalAcsNamespace: Required[str]
    """ACS namespace name - tenant for our service. Required."""
    globalAcsHostName: Required[str]
    """Acs mgmt host name to connect to. Required."""
    globalAcsRPRealm: Required[str]
    """Global ACS namespace RP realm. Required."""
    authType: Required[Literal["AccessControlService"]]
    """This property will be used as the discriminator for deciding the specific types in the
     polymorphic chain of types. Required. Default value is \"AccessControlService\"."""


class RestoreSettings(TypedDict, total=False):
    """Restore Settings  of the vault.

    :ivar cross_subscription_restore_settings: Settings for CrossSubscriptionRestore.
    :vartype cross_subscription_restore_settings: "CrossSubscriptionRestoreSettings"
    """

    crossSubscriptionRestoreSettings: "CrossSubscriptionRestoreSettings"
    """Settings for CrossSubscriptionRestore."""


class SecuritySettings(TypedDict, total=False):
    """Security Settings of the vault.

    :ivar immutability_settings: Immutability Settings of a vault.
    :vartype immutability_settings: "ImmutabilitySettings"
    :ivar soft_delete_settings: Soft delete Settings of a vault.
    :vartype soft_delete_settings: "SoftDeleteSettings"
    :ivar multi_user_authorization: MUA Settings of a vault. Known values are: "Invalid",
     "Enabled", and "Disabled".
    :vartype multi_user_authorization: Union[str, "MultiUserAuthorization"]
    :ivar source_scan_configuration: Source scan configuration of vault.
    :vartype source_scan_configuration: "SourceScanConfiguration"
    """

    immutabilitySettings: "ImmutabilitySettings"
    """Immutability Settings of a vault."""
    softDeleteSettings: "SoftDeleteSettings"
    """Soft delete Settings of a vault."""
    multiUserAuthorization: Union[str, "MultiUserAuthorization"]
    """MUA Settings of a vault. Known values are: \"Invalid\", \"Enabled\", and \"Disabled\"."""
    sourceScanConfiguration: "SourceScanConfiguration"
    """Source scan configuration of vault."""


class Sku(TypedDict, total=False):
    """Identifies the unique system identifier for each Azure resource.

    :ivar name: Name of SKU is RS0 (Recovery Services 0th version) and the tier is standard tier.
     They do not have affect on backend storage redundancy or any other vault settings. To manage
     storage redundancy, use the backupstorageconfig. Required. Known values are: "Standard" and
     "RS0".
    :vartype name: Union[str, "SkuName"]
    :ivar tier: The Sku tier.
    :vartype tier: str
    :ivar family: The sku family.
    :vartype family: str
    :ivar size: The sku size.
    :vartype size: str
    :ivar capacity: The sku capacity.
    :vartype capacity: str
    """

    name: Required[Union[str, "SkuName"]]
    """Name of SKU is RS0 (Recovery Services 0th version) and the tier is standard tier. They do not
     have affect on backend storage redundancy or any other vault settings. To manage storage
     redundancy, use the backupstorageconfig. Required. Known values are: \"Standard\" and \"RS0\"."""
    tier: str
    """The Sku tier."""
    family: str
    """The sku family."""
    size: str
    """The sku size."""
    capacity: str
    """The sku capacity."""


class SoftDeleteSettings(TypedDict, total=False):
    """Soft delete Settings of vault.

    :ivar soft_delete_state: Known values are: "Invalid", "Enabled", "Disabled", and "AlwaysON".
    :vartype soft_delete_state: Union[str, "SoftDeleteState"]
    :ivar soft_delete_retention_period_in_days: Soft delete retention period in days.
    :vartype soft_delete_retention_period_in_days: int
    :ivar enhanced_security_state: Known values are: "Invalid", "Enabled", "Disabled", and
     "AlwaysON".
    :vartype enhanced_security_state: Union[str, "EnhancedSecurityState"]
    """

    softDeleteState: Union[str, "SoftDeleteState"]
    """Known values are: \"Invalid\", \"Enabled\", \"Disabled\", and \"AlwaysON\"."""
    softDeleteRetentionPeriodInDays: int
    """Soft delete retention period in days."""
    enhancedSecurityState: Union[str, "EnhancedSecurityState"]
    """Known values are: \"Invalid\", \"Enabled\", \"Disabled\", and \"AlwaysON\"."""


class SourceScanConfiguration(TypedDict, total=False):
    """Source scan configuration of vault.

    :ivar state: Known values are: "Invalid", "Enabled", and "Disabled".
    :vartype state: Union[str, "State"]
    :ivar source_scan_identity: Identity details to be used for an operation.
    :vartype source_scan_identity: "AssociatedIdentity"
    """

    state: Union[str, "State"]
    """Known values are: \"Invalid\", \"Enabled\", and \"Disabled\"."""
    sourceScanIdentity: "AssociatedIdentity"
    """Identity details to be used for an operation."""


class SystemData(TypedDict, total=False):
    """Metadata pertaining to creation and last modification of the resource.

    :ivar created_by: The identity that created the resource.
    :vartype created_by: str
    :ivar created_by_type: The type of identity that created the resource. Known values are:
     "User", "Application", "ManagedIdentity", and "Key".
    :vartype created_by_type: Union[str, "CreatedByType"]
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: str
    :ivar last_modified_by: The identity that last modified the resource.
    :vartype last_modified_by: str
    :ivar last_modified_by_type: The type of identity that last modified the resource. Known values
     are: "User", "Application", "ManagedIdentity", and "Key".
    :vartype last_modified_by_type: Union[str, "CreatedByType"]
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: str
    """

    createdBy: str
    """The identity that created the resource."""
    createdByType: Union[str, "CreatedByType"]
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    createdAt: str
    """The timestamp of resource creation (UTC)."""
    lastModifiedBy: str
    """The identity that last modified the resource."""
    lastModifiedByType: Union[str, "CreatedByType"]
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    lastModifiedAt: str
    """The timestamp of resource last modification (UTC)."""


class TrackedResource(Resource):
    """Tracked Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    """

    tags: dict[str, str]
    """Resource tags."""
    location: Required[str]
    """The geo-location where the resource lives. Required."""


class UpgradeDetails(TypedDict, total=False):
    """Details for upgrading vault.

    :ivar operation_id: ID of the vault upgrade operation.
    :vartype operation_id: str
    :ivar start_time_utc: UTC time at which the upgrade operation has started.
    :vartype start_time_utc: str
    :ivar last_updated_time_utc: UTC time at which the upgrade operation status was last updated.
    :vartype last_updated_time_utc: str
    :ivar end_time_utc: UTC time at which the upgrade operation has ended.
    :vartype end_time_utc: str
    :ivar status: Status of the vault upgrade operation. Known values are: "Unknown", "InProgress",
     "Upgraded", and "Failed".
    :vartype status: Union[str, "VaultUpgradeState"]
    :ivar message: Message to the user containing information about the upgrade operation.
    :vartype message: str
    :ivar trigger_type: The way the vault upgrade was triggered. Known values are: "UserTriggered"
     and "ForcedUpgrade".
    :vartype trigger_type: Union[str, "TriggerType"]
    :ivar upgraded_resource_id: Resource ID of the upgraded vault.
    :vartype upgraded_resource_id: str
    :ivar previous_resource_id: Resource ID of the vault before the upgrade.
    :vartype previous_resource_id: str
    """

    operationId: str
    """ID of the vault upgrade operation."""
    startTimeUtc: str
    """UTC time at which the upgrade operation has started."""
    lastUpdatedTimeUtc: str
    """UTC time at which the upgrade operation status was last updated."""
    endTimeUtc: str
    """UTC time at which the upgrade operation has ended."""
    status: Union[str, "VaultUpgradeState"]
    """Status of the vault upgrade operation. Known values are: \"Unknown\", \"InProgress\",
     \"Upgraded\", and \"Failed\"."""
    message: str
    """Message to the user containing information about the upgrade operation."""
    triggerType: Union[str, "TriggerType"]
    """The way the vault upgrade was triggered. Known values are: \"UserTriggered\" and
     \"ForcedUpgrade\"."""
    upgradedResourceId: str
    """Resource ID of the upgraded vault."""
    previousResourceId: str
    """Resource ID of the vault before the upgrade."""


class UserIdentity(TypedDict, total=False):
    """A resource identity that is managed by the user of the service.

    :ivar principal_id: The principal ID of the user-assigned identity.
    :vartype principal_id: str
    :ivar client_id: The client ID of the user-assigned identity.
    :vartype client_id: str
    """

    principalId: str
    """The principal ID of the user-assigned identity."""
    clientId: str
    """The client ID of the user-assigned identity."""


class Vault(TrackedResource):
    """Resource information, as returned by the resource provider.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: Properties of the vault.
    :vartype properties: "VaultProperties"
    :ivar identity: Identity for the resource.
    :vartype identity: "IdentityData"
    :ivar sku: Identifies the unique system identifier for each Azure resource.
    :vartype sku: "Sku"
    :ivar etag: etag for the resource.
    :vartype etag: str
    """

    properties: "VaultProperties"
    """Properties of the vault."""
    identity: "IdentityData"
    """Identity for the resource."""
    sku: "Sku"
    """Identifies the unique system identifier for each Azure resource."""
    etag: str
    """etag for the resource."""


class VaultCertificateResponse(TypedDict, total=False):
    """Certificate corresponding to a vault that can be used by clients to register themselves with
    the vault.

    :ivar name: Resource name associated with the resource.
    :vartype name: str
    :ivar type: Resource type represents the complete path of the form
     Namespace/ResourceType/ResourceType/...
    :vartype type: str
    :ivar id: Resource Id represents the complete path to the resource.
    :vartype id: str
    :ivar properties: Certificate details representing the Vault credentials.
    :vartype properties: "ResourceCertificateDetails"
    """

    name: str
    """Resource name associated with the resource."""
    type: str
    """Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/..."""
    id: str
    """Resource Id represents the complete path to the resource."""
    properties: "ResourceCertificateDetails"
    """Certificate details representing the Vault credentials."""


class VaultExtendedInfo(TypedDict, total=False):
    """Vault extended information.

    :ivar integrity_key: Integrity key.
    :vartype integrity_key: str
    :ivar encryption_key: Encryption key.
    :vartype encryption_key: str
    :ivar encryption_key_thumbprint: Encryption key thumbprint.
    :vartype encryption_key_thumbprint: str
    :ivar algorithm: Algorithm for Vault ExtendedInfo.
    :vartype algorithm: str
    """

    integrityKey: str
    """Integrity key."""
    encryptionKey: str
    """Encryption key."""
    encryptionKeyThumbprint: str
    """Encryption key thumbprint."""
    algorithm: str
    """Algorithm for Vault ExtendedInfo."""


class VaultExtendedInfoResource(ProxyResource):
    """Vault extended information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: Vault extended information.
    :vartype properties: "VaultExtendedInfo"
    :ivar etag: etag for the resource.
    :vartype etag: str
    """

    properties: "VaultExtendedInfo"
    """Vault extended information."""
    etag: str
    """etag for the resource."""


class VaultProperties(TypedDict, total=False):
    """Properties of the vault.

    :ivar provisioning_state: Provisioning State.
    :vartype provisioning_state: str
    :ivar upgrade_details: Details for upgrading vault.
    :vartype upgrade_details: "UpgradeDetails"
    :ivar private_endpoint_connections: List of private endpoint connection.
    :vartype private_endpoint_connections: list["PrivateEndpointConnectionVaultProperties"]
    :ivar private_endpoint_state_for_backup: Private endpoint state for backup. Known values are:
     "None" and "Enabled".
    :vartype private_endpoint_state_for_backup: Union[str, "VaultPrivateEndpointState"]
    :ivar private_endpoint_state_for_site_recovery: Private endpoint state for site recovery. Known
     values are: "None" and "Enabled".
    :vartype private_endpoint_state_for_site_recovery: Union[str, "VaultPrivateEndpointState"]
    :ivar encryption: Customer Managed Key details of the resource.
    :vartype encryption: "VaultPropertiesEncryption"
    :ivar move_details: The details of the latest move operation performed on the Azure Resource.
    :vartype move_details: "VaultPropertiesMoveDetails"
    :ivar move_state: The State of the Resource after the move operation. Known values are:
     "Unknown", "InProgress", "PrepareFailed", "CommitFailed", "PrepareTimedout", "CommitTimedout",
     "MoveSucceeded", "Failure", "CriticalFailure", and "PartialSuccess".
    :vartype move_state: Union[str, "ResourceMoveState"]
    :ivar backup_storage_version: Backup storage version. Known values are: "V1", "V2", and
     "Unassigned".
    :vartype backup_storage_version: Union[str, "BackupStorageVersion"]
    :ivar public_network_access: property to enable or disable resource provider inbound network
     traffic from public clients. Known values are: "Enabled" and "Disabled".
    :vartype public_network_access: Union[str, "PublicNetworkAccess"]
    :ivar monitoring_settings: Monitoring Settings of the vault.
    :vartype monitoring_settings: "MonitoringSettings"
    :ivar cost_management_settings: Cost Management Settings of the vault.
    :vartype cost_management_settings: "CostManagementSettings"
    :ivar restore_settings: Restore Settings of the vault.
    :vartype restore_settings: "RestoreSettings"
    :ivar redundancy_settings: The redundancy Settings of a Vault.
    :vartype redundancy_settings: "VaultPropertiesRedundancySettings"
    :ivar security_settings: Security Settings of the vault.
    :vartype security_settings: "SecuritySettings"
    :ivar secure_score: Secure Score of Recovery Services Vault. Known values are: "None",
     "Minimum", "Adequate", and "Maximum".
    :vartype secure_score: Union[str, "SecureScoreLevel"]
    :ivar bcdr_security_level: Security levels of Recovery Services Vault for business continuity
     and disaster recovery. Known values are: "Poor", "Fair", "Good", and "Excellent".
    :vartype bcdr_security_level: Union[str, "BCDRSecurityLevel"]
    :ivar resource_guard_operation_requests: ResourceGuardOperationRequests on which LAC check will
     be performed.
    :vartype resource_guard_operation_requests: list[str]
    """

    provisioningState: str
    """Provisioning State."""
    upgradeDetails: "UpgradeDetails"
    """Details for upgrading vault."""
    privateEndpointConnections: list["PrivateEndpointConnectionVaultProperties"]
    """List of private endpoint connection."""
    privateEndpointStateForBackup: Union[str, "VaultPrivateEndpointState"]
    """Private endpoint state for backup. Known values are: \"None\" and \"Enabled\"."""
    privateEndpointStateForSiteRecovery: Union[str, "VaultPrivateEndpointState"]
    """Private endpoint state for site recovery. Known values are: \"None\" and \"Enabled\"."""
    encryption: "VaultPropertiesEncryption"
    """Customer Managed Key details of the resource."""
    moveDetails: "VaultPropertiesMoveDetails"
    """The details of the latest move operation performed on the Azure Resource."""
    moveState: Union[str, "ResourceMoveState"]
    """The State of the Resource after the move operation. Known values are: \"Unknown\",
     \"InProgress\", \"PrepareFailed\", \"CommitFailed\", \"PrepareTimedout\", \"CommitTimedout\",
     \"MoveSucceeded\", \"Failure\", \"CriticalFailure\", and \"PartialSuccess\"."""
    backupStorageVersion: Union[str, "BackupStorageVersion"]
    """Backup storage version. Known values are: \"V1\", \"V2\", and \"Unassigned\"."""
    publicNetworkAccess: Union[str, "PublicNetworkAccess"]
    """property to enable or disable resource provider inbound network traffic from public clients.
     Known values are: \"Enabled\" and \"Disabled\"."""
    monitoringSettings: "MonitoringSettings"
    """Monitoring Settings of the vault."""
    costManagementSettings: "CostManagementSettings"
    """Cost Management Settings of the vault."""
    restoreSettings: "RestoreSettings"
    """Restore Settings of the vault."""
    redundancySettings: "VaultPropertiesRedundancySettings"
    """The redundancy Settings of a Vault."""
    securitySettings: "SecuritySettings"
    """Security Settings of the vault."""
    secureScore: Union[str, "SecureScoreLevel"]
    """Secure Score of Recovery Services Vault. Known values are: \"None\", \"Minimum\", \"Adequate\",
     and \"Maximum\"."""
    bcdrSecurityLevel: Union[str, "BCDRSecurityLevel"]
    """Security levels of Recovery Services Vault for business continuity and disaster recovery. Known
     values are: \"Poor\", \"Fair\", \"Good\", and \"Excellent\"."""
    resourceGuardOperationRequests: list[str]
    """ResourceGuardOperationRequests on which LAC check will be performed."""


class VaultPropertiesEncryption(TypedDict, total=False):
    """Customer Managed Key details of the resource.

    :ivar key_vault_properties: The properties of the Key Vault which hosts CMK.
    :vartype key_vault_properties: "CmkKeyVaultProperties"
    :ivar kek_identity: The details of the identity used for CMK.
    :vartype kek_identity: "CmkKekIdentity"
    :ivar infrastructure_encryption: Enabling/Disabling the Double Encryption state. Known values
     are: "Enabled" and "Disabled".
    :vartype infrastructure_encryption: Union[str, "InfrastructureEncryptionState"]
    """

    keyVaultProperties: "CmkKeyVaultProperties"
    """The properties of the Key Vault which hosts CMK."""
    kekIdentity: "CmkKekIdentity"
    """The details of the identity used for CMK."""
    infrastructureEncryption: Union[str, "InfrastructureEncryptionState"]
    """Enabling/Disabling the Double Encryption state. Known values are: \"Enabled\" and \"Disabled\"."""


class VaultPropertiesMoveDetails(TypedDict, total=False):
    """The details of the latest move operation performed on the Azure Resource.

    :ivar operation_id: OperationId of the Resource Move Operation.
    :vartype operation_id: str
    :ivar start_time_utc: Start Time of the Resource Move Operation.
    :vartype start_time_utc: str
    :ivar completion_time_utc: End Time of the Resource Move Operation.
    :vartype completion_time_utc: str
    :ivar source_resource_id: Source Resource of the Resource Move Operation.
    :vartype source_resource_id: str
    :ivar target_resource_id: Target Resource of the Resource Move Operation.
    :vartype target_resource_id: str
    """

    operationId: str
    """OperationId of the Resource Move Operation."""
    startTimeUtc: str
    """Start Time of the Resource Move Operation."""
    completionTimeUtc: str
    """End Time of the Resource Move Operation."""
    sourceResourceId: str
    """Source Resource of the Resource Move Operation."""
    targetResourceId: str
    """Target Resource of the Resource Move Operation."""


class VaultPropertiesRedundancySettings(TypedDict, total=False):
    """The redundancy Settings of a Vault.

    :ivar standard_tier_storage_redundancy: The storage redundancy setting of a vault. Known values
     are: "Invalid", "LocallyRedundant", "GeoRedundant", and "ZoneRedundant".
    :vartype standard_tier_storage_redundancy: Union[str, "StandardTierStorageRedundancy"]
    :ivar cross_region_restore: Flag to show if Cross Region Restore is enabled on the Vault or
     not. Known values are: "Enabled" and "Disabled".
    :vartype cross_region_restore: Union[str, "CrossRegionRestore"]
    """

    standardTierStorageRedundancy: Union[str, "StandardTierStorageRedundancy"]
    """The storage redundancy setting of a vault. Known values are: \"Invalid\", \"LocallyRedundant\",
     \"GeoRedundant\", and \"ZoneRedundant\"."""
    crossRegionRestore: Union[str, "CrossRegionRestore"]
    """Flag to show if Cross Region Restore is enabled on the Vault or not. Known values are:
     \"Enabled\" and \"Disabled\"."""


class VaultUsage(TypedDict, total=False):
    """Usages of a vault.

    :ivar unit: Unit of the usage. Known values are: "Count", "Bytes", "Seconds", "Percent",
     "CountPerSecond", and "BytesPerSecond".
    :vartype unit: Union[str, "UsagesUnit"]
    :ivar quota_period: Quota period of usage.
    :vartype quota_period: str
    :ivar next_reset_time: Next reset time of usage.
    :vartype next_reset_time: str
    :ivar current_value: Current value of usage.
    :vartype current_value: int
    :ivar limit: Limit of usage.
    :vartype limit: int
    :ivar name: Name of usage.
    :vartype name: "NameInfo"
    """

    unit: Union[str, "UsagesUnit"]
    """Unit of the usage. Known values are: \"Count\", \"Bytes\", \"Seconds\", \"Percent\",
     \"CountPerSecond\", and \"BytesPerSecond\"."""
    quotaPeriod: str
    """Quota period of usage."""
    nextResetTime: str
    """Next reset time of usage."""
    currentValue: int
    """Current value of usage."""
    limit: int
    """Limit of usage."""
    name: "NameInfo"
    """Name of usage."""


ResourceCertificateDetails = Union[ResourceCertificateAndAcsDetails, ResourceCertificateAndAadDetails]
