# 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 (
        AdministratorType,
        AdvancedThreatProtectionProvisioningState,
        AdvancedThreatProtectionState,
        BackupFormat,
        BackupType,
        BatchOfMaintenance,
        ConfigurationSource,
        CreateMode,
        CreatedByType,
        DataEncryptionType,
        EnableStatusEnum,
        FabricMirroringProvisioningState,
        FabricMirroringState,
        HighAvailabilityMode,
        HighAvailabilityState,
        ImportSourceStorageType,
        IsConfigPendingRestart,
        IsDynamicConfig,
        IsReadOnly,
        ManagedServiceIdentityType,
        PatchStrategy,
        PrivateEndpointConnectionProvisioningState,
        PrivateEndpointServiceConnectionStatus,
        ProvisioningState,
        ReplicationMode,
        ReplicationRole,
        ResetAllToDefault,
        ServerSkuTier,
        ServerState,
        ServerVersion,
        StorageRedundancyEnum,
    )


class AdministratorProperties(TypedDict, total=False):
    """The properties of an administrator.

    :ivar administrator_type: Type of the sever administrator. "ActiveDirectory"
    :vartype administrator_type: Union[str, "AdministratorType"]
    :ivar login: Login name of the server administrator.
    :vartype login: str
    :ivar sid: SID (object ID) of the server administrator.
    :vartype sid: str
    :ivar tenant_id: Tenant ID of the administrator.
    :vartype tenant_id: str
    :ivar identity_resource_id: The resource id of the identity used for AAD Authentication.
    :vartype identity_resource_id: str
    """

    administratorType: Union[str, "AdministratorType"]
    """Type of the sever administrator. \"ActiveDirectory\""""
    login: str
    """Login name of the server administrator."""
    sid: str
    """SID (object ID) of the server administrator."""
    tenantId: str
    """Tenant ID of the administrator."""
    identityResourceId: str
    """The resource id of the identity used for AAD Authentication."""


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 AdvancedThreatProtection(ProxyResource):
    """A server's Advanced Threat Protection.

    :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: "AdvancedThreatProtectionProperties"
    """

    properties: "AdvancedThreatProtectionProperties"
    """Resource properties."""


class AdvancedThreatProtectionForUpdate(TypedDict, total=False):
    """Parameters allowed to update advanced threat protection for a server.

    :ivar properties: Resource update properties.
    :vartype properties: "AdvancedThreatProtectionUpdateProperties"
    """

    properties: "AdvancedThreatProtectionUpdateProperties"
    """Resource update properties."""


class AdvancedThreatProtectionProperties(TypedDict, total=False):
    """Properties of an Advanced Threat Protection setting.

    :ivar creation_time: Specifies the UTC creation time of the policy.
    :vartype creation_time: str
    :ivar state: Specifies the state of the Advanced Threat Protection, whether it is enabled or
     disabled or a state has not been applied yet on the specific database or server. Known values
     are: "Enabled" and "Disabled".
    :vartype state: Union[str, "AdvancedThreatProtectionState"]
    :ivar provisioning_state: Provisioning state of the Threat Protection. Known values are:
     "Succeeded", "Updating", "Canceled", and "Failed".
    :vartype provisioning_state: Union[str, "AdvancedThreatProtectionProvisioningState"]
    """

    creationTime: str
    """Specifies the UTC creation time of the policy."""
    state: Union[str, "AdvancedThreatProtectionState"]
    """Specifies the state of the Advanced Threat Protection, whether it is enabled or disabled or a
     state has not been applied yet on the specific database or server. Known values are:
     \"Enabled\" and \"Disabled\"."""
    provisioningState: Union[str, "AdvancedThreatProtectionProvisioningState"]
    """Provisioning state of the Threat Protection. Known values are: \"Succeeded\", \"Updating\",
     \"Canceled\", and \"Failed\"."""


class AdvancedThreatProtectionUpdateProperties(TypedDict, total=False):
    """Properties of Advanced Threat Protection that can be updated.

    :ivar state: Specifies the state of the Advanced Threat Protection, whether it is enabled or
     disabled or a state has not been applied yet on the specific database or server. Required.
     Known values are: "Enabled" and "Disabled".
    :vartype state: Union[str, "AdvancedThreatProtectionState"]
    """

    state: Required[Union[str, "AdvancedThreatProtectionState"]]
    """Specifies the state of the Advanced Threat Protection, whether it is enabled or disabled or a
     state has not been applied yet on the specific database or server. Required. Known values are:
     \"Enabled\" and \"Disabled\"."""


class AzureADAdministrator(ProxyResource):
    """Represents a Administrator.

    :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 properties of an administrator.
    :vartype properties: "AdministratorProperties"
    """

    properties: "AdministratorProperties"
    """The properties of an administrator."""


class Backup(TypedDict, total=False):
    """Storage Profile properties of a server.

    :ivar backup_retention_days: Backup retention days for the server.
    :vartype backup_retention_days: int
    :ivar backup_interval_hours: Backup interval hours for the server.
    :vartype backup_interval_hours: int
    :ivar geo_redundant_backup: Whether or not geo redundant backup is enabled. Known values are:
     "Enabled" and "Disabled".
    :vartype geo_redundant_backup: Union[str, "EnableStatusEnum"]
    :ivar earliest_restore_date: Earliest restore point creation time (ISO8601 format).
    :vartype earliest_restore_date: str
    """

    backupRetentionDays: int
    """Backup retention days for the server."""
    backupIntervalHours: int
    """Backup interval hours for the server."""
    geoRedundantBackup: Union[str, "EnableStatusEnum"]
    """Whether or not geo redundant backup is enabled. Known values are: \"Enabled\" and \"Disabled\"."""
    earliestRestoreDate: str
    """Earliest restore point creation time (ISO8601 format)."""


class BackupRequestBase(TypedDict, total=False):
    """BackupRequestBase is the base for all backup request.

    :ivar backup_settings: Backup Settings. Required.
    :vartype backup_settings: "BackupSettings"
    """

    backupSettings: Required["BackupSettings"]
    """Backup Settings. Required."""


class BackupAndExportRequest(BackupRequestBase):
    """BackupAndExport API Request.

    :ivar backup_settings: Backup Settings. Required.
    :vartype backup_settings: "BackupSettings"
    :ivar target_details: Backup Target Store Details. Required.
    :vartype target_details: "BackupStoreDetails"
    """

    targetDetails: Required["BackupStoreDetails"]
    """Backup Target Store Details. Required."""


class BackupSettings(TypedDict, total=False):
    """Backup Settings.

    :ivar backup_name: The name of the backup. Required.
    :vartype backup_name: str
    :ivar backup_format: Backup Format for the current backup. (CollatedFormat is INTERNAL – DO NOT
     USE). Known values are: "CollatedFormat" and "Raw".
    :vartype backup_format: Union[str, "BackupFormat"]
    """

    backupName: Required[str]
    """The name of the backup. Required."""
    backupFormat: Union[str, "BackupFormat"]
    """Backup Format for the current backup. (CollatedFormat is INTERNAL – DO NOT USE). Known values
     are: \"CollatedFormat\" and \"Raw\"."""


class Configuration(ProxyResource):
    """Represents a Configuration.

    :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 properties of a configuration.
    :vartype properties: "ConfigurationProperties"
    """

    properties: "ConfigurationProperties"
    """The properties of a configuration."""


class ConfigurationForBatchUpdate(TypedDict, total=False):
    """Represents a Configuration.

    :ivar name: Name of the configuration.
    :vartype name: str
    :ivar properties: The properties can be updated for a configuration.
    :vartype properties: "ConfigurationForBatchUpdateProperties"
    """

    name: str
    """Name of the configuration."""
    properties: "ConfigurationForBatchUpdateProperties"
    """The properties can be updated for a configuration."""


class ConfigurationForBatchUpdateProperties(TypedDict, total=False):
    """The properties can be updated for a configuration.

    :ivar value: Value of the configuration.
    :vartype value: str
    :ivar source: Source of the configuration.
    :vartype source: str
    """

    value: str
    """Value of the configuration."""
    source: str
    """Source of the configuration."""


class ConfigurationListForBatchUpdate(TypedDict, total=False):
    """A list of server configurations to update.

    :ivar value: The list of server configurations.
    :vartype value: list["ConfigurationForBatchUpdate"]
    :ivar reset_all_to_default: Whether to reset all server parameters to default. Known values
     are: "True" and "False".
    :vartype reset_all_to_default: Union[str, "ResetAllToDefault"]
    """

    value: list["ConfigurationForBatchUpdate"]
    """The list of server configurations."""
    resetAllToDefault: Union[str, "ResetAllToDefault"]
    """Whether to reset all server parameters to default. Known values are: \"True\" and \"False\"."""


class ConfigurationProperties(TypedDict, total=False):
    """The properties of a configuration.

    :ivar value: Value of the configuration.
    :vartype value: str
    :ivar current_value: Current value of the configuration.
    :vartype current_value: str
    :ivar description: Description of the configuration.
    :vartype description: str
    :ivar documentation_link: The link used to get the document from community or Azure site.
    :vartype documentation_link: str
    :ivar default_value: Default value of the configuration.
    :vartype default_value: str
    :ivar data_type: Data type of the configuration.
    :vartype data_type: str
    :ivar allowed_values: Allowed values of the configuration.
    :vartype allowed_values: str
    :ivar source: Source of the configuration. Known values are: "system-default" and
     "user-override".
    :vartype source: Union[str, "ConfigurationSource"]
    :ivar is_read_only: If is the configuration read only. Known values are: "True" and "False".
    :vartype is_read_only: Union[str, "IsReadOnly"]
    :ivar is_config_pending_restart: If is the configuration pending restart or not. Known values
     are: "True" and "False".
    :vartype is_config_pending_restart: Union[str, "IsConfigPendingRestart"]
    :ivar is_dynamic_config: If is the configuration dynamic. Known values are: "True" and "False".
    :vartype is_dynamic_config: Union[str, "IsDynamicConfig"]
    """

    value: str
    """Value of the configuration."""
    currentValue: str
    """Current value of the configuration."""
    description: str
    """Description of the configuration."""
    documentationLink: str
    """The link used to get the document from community or Azure site."""
    defaultValue: str
    """Default value of the configuration."""
    dataType: str
    """Data type of the configuration."""
    allowedValues: str
    """Allowed values of the configuration."""
    source: Union[str, "ConfigurationSource"]
    """Source of the configuration. Known values are: \"system-default\" and \"user-override\"."""
    isReadOnly: Union[str, "IsReadOnly"]
    """If is the configuration read only. Known values are: \"True\" and \"False\"."""
    isConfigPendingRestart: Union[str, "IsConfigPendingRestart"]
    """If is the configuration pending restart or not. Known values are: \"True\" and \"False\"."""
    isDynamicConfig: Union[str, "IsDynamicConfig"]
    """If is the configuration dynamic. Known values are: \"True\" and \"False\"."""


class Database(ProxyResource):
    """Represents a Database.

    :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 properties of a database.
    :vartype properties: "DatabaseProperties"
    """

    properties: "DatabaseProperties"
    """The properties of a database."""


class DatabaseProperties(TypedDict, total=False):
    """The properties of a database.

    :ivar charset: The charset of the database.
    :vartype charset: str
    :ivar collation: The collation of the database.
    :vartype collation: str
    """

    charset: str
    """The charset of the database."""
    collation: str
    """The collation of the database."""


class DataEncryption(TypedDict, total=False):
    """The date encryption for cmk.

    :ivar primary_user_assigned_identity_id: Primary user identity resource id.
    :vartype primary_user_assigned_identity_id: str
    :ivar primary_key_uri: Primary key uri.
    :vartype primary_key_uri: str
    :ivar geo_backup_user_assigned_identity_id: Geo backup user identity resource id as identity
     can't cross region, need identity in same region as geo backup.
    :vartype geo_backup_user_assigned_identity_id: str
    :ivar geo_backup_key_uri: Geo backup key uri as key vault can't cross region, need cmk in same
     region as geo backup.
    :vartype geo_backup_key_uri: str
    :ivar type: The key type, AzureKeyVault for enable cmk, SystemManaged for disable cmk. Known
     values are: "AzureKeyVault" and "SystemManaged".
    :vartype type: Union[str, "DataEncryptionType"]
    """

    primaryUserAssignedIdentityId: str
    """Primary user identity resource id."""
    primaryKeyURI: str
    """Primary key uri."""
    geoBackupUserAssignedIdentityId: str
    """Geo backup user identity resource id as identity can't cross region, need identity in same
     region as geo backup."""
    geoBackupKeyURI: str
    """Geo backup key uri as key vault can't cross region, need cmk in same region as geo backup."""
    type: Union[str, "DataEncryptionType"]
    """The key type, AzureKeyVault for enable cmk, SystemManaged for disable cmk. Known values are:
     \"AzureKeyVault\" and \"SystemManaged\"."""


class FabricMirroringSetting(ProxyResource):
    """Fabric Mirroring settings 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"
    :ivar properties: The resource-specific properties for this resource.
    :vartype properties: "FabricMirroringSettingsProperties"
    """

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


class FabricMirroringSettingsProperties(TypedDict, total=False):
    """Properties of the Fabric Mirroring settings resource.

    :ivar state: State of Fabric Mirroring (Enabled or Disabled). Known values are: "Enabled" and
     "Disabled".
    :vartype state: Union[str, "FabricMirroringState"]
    :ivar identity_resource_id: Resource ID of the user-assigned managed identity used for Fabric
     Mirroring. Required when state is Enabled.
    :vartype identity_resource_id: str
    :ivar provisioning_state: Provisioning state of Fabric Mirroring. Known values are:
     "Succeeded", "Failed", "Canceled", and "Updating".
    :vartype provisioning_state: Union[str, "FabricMirroringProvisioningState"]
    """

    state: Union[str, "FabricMirroringState"]
    """State of Fabric Mirroring (Enabled or Disabled). Known values are: \"Enabled\" and
     \"Disabled\"."""
    identityResourceId: str
    """Resource ID of the user-assigned managed identity used for Fabric Mirroring. Required when
     state is Enabled."""
    provisioningState: Union[str, "FabricMirroringProvisioningState"]
    """Provisioning state of Fabric Mirroring. Known values are: \"Succeeded\", \"Failed\",
     \"Canceled\", and \"Updating\"."""


class FirewallRule(ProxyResource):
    """Represents a server firewall rule.

    :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 properties of a firewall rule. Required.
    :vartype properties: "FirewallRuleProperties"
    """

    properties: Required["FirewallRuleProperties"]
    """The properties of a firewall rule. Required."""


class FirewallRuleProperties(TypedDict, total=False):
    """The properties of a server firewall rule.

    :ivar start_ip_address: The start IP address of the server firewall rule. Must be IPv4 format.
     Required.
    :vartype start_ip_address: str
    :ivar end_ip_address: The end IP address of the server firewall rule. Must be IPv4 format.
     Required.
    :vartype end_ip_address: str
    """

    startIpAddress: Required[str]
    """The start IP address of the server firewall rule. Must be IPv4 format. Required."""
    endIpAddress: Required[str]
    """The end IP address of the server firewall rule. Must be IPv4 format. Required."""


class FullBackupStoreDetails(TypedDict, total=False):
    """FullBackupStoreDetails is used for scenarios where backup data is streamed/copied over to a
    storage destination.

    :ivar sas_uri_list: SASUriList of storage containers where backup data is to be
     streamed/copied. Required.
    :vartype sas_uri_list: list[str]
    :ivar object_type: Type of the specific object - used for deserializing. Required. Default
     value is "FullBackupStoreDetails".
    :vartype object_type: Literal["FullBackupStoreDetails"]
    """

    sasUriList: Required[list[str]]
    """SASUriList of storage containers where backup data is to be streamed/copied. Required."""
    objectType: Required[Literal["FullBackupStoreDetails"]]
    """Type of the specific object - used for deserializing. Required. Default value is
     \"FullBackupStoreDetails\"."""


class HighAvailability(TypedDict, total=False):
    """High availability properties of a server.

    :ivar mode: High availability mode for a server. Known values are: "Disabled", "ZoneRedundant",
     and "SameZone".
    :vartype mode: Union[str, "HighAvailabilityMode"]
    :ivar state: The state of server high availability. Known values are: "NotEnabled",
     "CreatingStandby", "Healthy", "FailingOver", and "RemovingStandby".
    :vartype state: Union[str, "HighAvailabilityState"]
    :ivar standby_availability_zone: Availability zone of the standby server.
    :vartype standby_availability_zone: str
    :ivar replication_mode: HA Replication mode for a server. Known values are: "BinaryLog" and
     "RedoLog".
    :vartype replication_mode: Union[str, "ReplicationMode"]
    """

    mode: Union[str, "HighAvailabilityMode"]
    """High availability mode for a server. Known values are: \"Disabled\", \"ZoneRedundant\", and
     \"SameZone\"."""
    state: Union[str, "HighAvailabilityState"]
    """The state of server high availability. Known values are: \"NotEnabled\", \"CreatingStandby\",
     \"Healthy\", \"FailingOver\", and \"RemovingStandby\"."""
    standbyAvailabilityZone: str
    """Availability zone of the standby server."""
    replicationMode: Union[str, "ReplicationMode"]
    """HA Replication mode for a server. Known values are: \"BinaryLog\" and \"RedoLog\"."""


class HighAvailabilityValidationEstimation(TypedDict, total=False):
    """High availability validation properties of a server.

    :ivar estimated_downtime: Estimated seconds of downtime for the deployment.
    :vartype estimated_downtime: int
    :ivar scheduled_standby_availability_zone: Scheduled Availability zone of the standby server.
    :vartype scheduled_standby_availability_zone: str
    :ivar expected_standby_availability_zone: Expected Availability zone of the standby server.
    :vartype expected_standby_availability_zone: str
    """

    estimatedDowntime: int
    """Estimated seconds of downtime for the deployment."""
    scheduledStandbyAvailabilityZone: str
    """Scheduled Availability zone of the standby server."""
    expectedStandbyAvailabilityZone: str
    """Expected Availability zone of the standby server."""


class ImportSourceProperties(TypedDict, total=False):
    """Import source related properties.

    :ivar storage_type: Storage type of import source. "AzureBlob"
    :vartype storage_type: Union[str, "ImportSourceStorageType"]
    :ivar storage_url: Uri of the import source storage.
    :vartype storage_url: str
    :ivar sas_token: Sas token for accessing source storage. Read and list permissions are required
     for sas token.
    :vartype sas_token: str
    :ivar data_dir_path: Relative path of data directory in storage.
    :vartype data_dir_path: str
    """

    storageType: Union[str, "ImportSourceStorageType"]
    """Storage type of import source. \"AzureBlob\""""
    storageUrl: str
    """Uri of the import source storage."""
    sasToken: str
    """Sas token for accessing source storage. Read and list permissions are required for sas token."""
    dataDirPath: str
    """Relative path of data directory in storage."""


class MaintenancePolicy(TypedDict, total=False):
    """Maintenance policy of a server.

    :ivar patch_strategy: The patch strategy of this server. Known values are: "Regular" and
     "VirtualCanary".
    :vartype patch_strategy: Union[str, "PatchStrategy"]
    """

    patchStrategy: Union[str, "PatchStrategy"]
    """The patch strategy of this server. Known values are: \"Regular\" and \"VirtualCanary\"."""


class MaintenancePropertiesForUpdate(TypedDict, total=False):
    """The properties of a maintenance update parameter.

    :ivar maintenance_start_time: The start time for a maintenance.
    :vartype maintenance_start_time: str
    """

    maintenanceStartTime: str
    """The start time for a maintenance."""


class MaintenanceUpdate(TypedDict, total=False):
    """Represents a maintenance update parameter.

    :ivar properties: The properties of a maintenance update parameter.
    :vartype properties: "MaintenancePropertiesForUpdate"
    """

    properties: "MaintenancePropertiesForUpdate"
    """The properties of a maintenance update parameter."""


class MaintenanceWindow(TypedDict, total=False):
    """Maintenance window of a server.

    :ivar custom_window: indicates whether custom window is enabled or disabled.
    :vartype custom_window: str
    :ivar start_hour: start hour for maintenance window.
    :vartype start_hour: int
    :ivar start_minute: start minute for maintenance window.
    :vartype start_minute: int
    :ivar day_of_week: day of week for maintenance window.
    :vartype day_of_week: int
    :ivar batch_of_maintenance: The batch of maintenance when enabled the custom managed
     maintenance window of a server. Known values are: "Default", "Batch1", and "Batch2".
    :vartype batch_of_maintenance: Union[str, "BatchOfMaintenance"]
    """

    customWindow: str
    """indicates whether custom window is enabled or disabled."""
    startHour: int
    """start hour for maintenance window."""
    startMinute: int
    """start minute for maintenance window."""
    dayOfWeek: int
    """day of week for maintenance window."""
    batchOfMaintenance: Union[str, "BatchOfMaintenance"]
    """The batch of maintenance when enabled the custom managed maintenance window of a server. Known
     values are: \"Default\", \"Batch1\", and \"Batch2\"."""


class MySQLServerIdentity(TypedDict, total=False):
    """Properties to configure Identity for Bring your Own Keys.

    :ivar principal_id: ObjectId from the KeyVault.
    :vartype principal_id: str
    :ivar tenant_id: TenantId from the KeyVault.
    :vartype tenant_id: str
    :ivar type: Type of managed service identity. "UserAssigned"
    :vartype type: Union[str, "ManagedServiceIdentityType"]
    :ivar user_assigned_identities: Metadata of user assigned identity.
    :vartype user_assigned_identities: dict[str, "UserAssignedIdentity"]
    """

    principalId: str
    """ObjectId from the KeyVault."""
    tenantId: str
    """TenantId from the KeyVault."""
    type: Union[str, "ManagedServiceIdentityType"]
    """Type of managed service identity. \"UserAssigned\""""
    userAssignedIdentities: dict[str, "UserAssignedIdentity"]
    """Metadata of user assigned identity."""


class MySQLServerSku(TypedDict, total=False):
    """Billing information related properties of a server.

    :ivar name: The name of the sku, e.g. Standard_D32s_v3. Required.
    :vartype name: str
    :ivar tier: The tier of the particular SKU, e.g. GeneralPurpose. Required. Known values are:
     "Burstable", "GeneralPurpose", and "MemoryOptimized".
    :vartype tier: Union[str, "ServerSkuTier"]
    """

    name: Required[str]
    """The name of the sku, e.g. Standard_D32s_v3. Required."""
    tier: Required[Union[str, "ServerSkuTier"]]
    """The tier of the particular SKU, e.g. GeneralPurpose. Required. Known values are: \"Burstable\",
     \"GeneralPurpose\", and \"MemoryOptimized\"."""


class NameAvailabilityRequest(TypedDict, total=False):
    """Request from client to check resource name availability.

    :ivar name: Resource name to verify. Required.
    :vartype name: str
    :ivar type: Resource type used for verification.
    :vartype type: str
    """

    name: Required[str]
    """Resource name to verify. Required."""
    type: str
    """Resource type used for verification."""


class Network(TypedDict, total=False):
    """Network related properties of a server.

    :ivar public_network_access: Whether or not public network access is allowed for this server.
     Value is 'Disabled' when server has VNet integration. Known values are: "Enabled" and
     "Disabled".
    :vartype public_network_access: Union[str, "EnableStatusEnum"]
    :ivar delegated_subnet_resource_id: Delegated subnet resource id used to setup vnet for a
     server.
    :vartype delegated_subnet_resource_id: str
    :ivar private_dns_zone_resource_id: Private DNS zone resource id.
    :vartype private_dns_zone_resource_id: str
    """

    publicNetworkAccess: Union[str, "EnableStatusEnum"]
    """Whether or not public network access is allowed for this server. Value is 'Disabled' when
     server has VNet integration. Known values are: \"Enabled\" and \"Disabled\"."""
    delegatedSubnetResourceId: str
    """Delegated subnet resource id used to setup vnet for a server."""
    privateDnsZoneResourceId: str
    """Private DNS zone resource id."""


class PrivateEndpoint(TypedDict, total=False):
    """The private endpoint resource.

    :ivar id: The resource identifier of the private endpoint.
    :vartype id: str
    """

    id: str
    """The resource identifier of the private endpoint."""


class PrivateEndpointConnection(Resource):
    """A private endpoint connection 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: "PrivateEndpointConnectionProperties"
    """

    properties: "PrivateEndpointConnectionProperties"
    """Resource properties."""


class PrivateEndpointConnectionProperties(TypedDict, total=False):
    """Properties of the private endpoint connection.

    :ivar group_ids: The group ids for the private endpoint resource.
    :vartype group_ids: list[str]
    :ivar private_endpoint: The private endpoint resource.
    :vartype private_endpoint: "PrivateEndpoint"
    :ivar private_link_service_connection_state: A collection of information about the state of the
     connection between service consumer and provider. Required.
    :vartype private_link_service_connection_state: "PrivateLinkServiceConnectionState"
    :ivar provisioning_state: The provisioning state of the private endpoint connection resource.
     Known values are: "Succeeded", "Creating", "Deleting", and "Failed".
    :vartype provisioning_state: Union[str, "PrivateEndpointConnectionProvisioningState"]
    """

    groupIds: list[str]
    """The group ids for the private endpoint resource."""
    privateEndpoint: "PrivateEndpoint"
    """The private endpoint resource."""
    privateLinkServiceConnectionState: Required["PrivateLinkServiceConnectionState"]
    """A collection of information about the state of the connection between service consumer and
     provider. Required."""
    provisioningState: Union[str, "PrivateEndpointConnectionProvisioningState"]
    """The provisioning state of the private endpoint connection resource. Known values are:
     \"Succeeded\", \"Creating\", \"Deleting\", and \"Failed\"."""


class PrivateLinkServiceConnectionState(TypedDict, total=False):
    """A collection of information about the state of the connection between service consumer and
    provider.

    :ivar status: Indicates whether the connection has been Approved/Rejected/Removed by the owner
     of the service. Known values are: "Pending", "Approved", and "Rejected".
    :vartype status: Union[str, "PrivateEndpointServiceConnectionStatus"]
    :ivar description: The reason for approval/rejection of the connection.
    :vartype description: str
    :ivar actions_required: A message indicating if changes on the service provider require any
     updates on the consumer.
    :vartype actions_required: str
    """

    status: Union[str, "PrivateEndpointServiceConnectionStatus"]
    """Indicates whether the connection has been Approved/Rejected/Removed by the owner of the
     service. Known values are: \"Pending\", \"Approved\", and \"Rejected\"."""
    description: str
    """The reason for approval/rejection of the connection."""
    actionsRequired: str
    """A message indicating if changes on the service provider require any updates on the consumer."""


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 Server(TrackedResource):
    """Represents a server.

    :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 server.
    :vartype properties: "ServerProperties"
    :ivar identity: The cmk identity for the server.
    :vartype identity: "MySQLServerIdentity"
    :ivar sku: The SKU (pricing tier) of the server.
    :vartype sku: "MySQLServerSku"
    """

    properties: "ServerProperties"
    """Properties of the server."""
    identity: "MySQLServerIdentity"
    """The cmk identity for the server."""
    sku: "MySQLServerSku"
    """The SKU (pricing tier) of the server."""


class ServerBackupPropertiesV2(TypedDict, total=False):
    """The properties of a server backup.

    :ivar backup_name_v2: Backup name.
    :vartype backup_name_v2: str
    :ivar backup_type: "FULL"
    :vartype backup_type: Union[str, "BackupType"]
    :ivar completed_time: Backup completed time (ISO8601 format).
    :vartype completed_time: str
    :ivar source: Backup source.
    :vartype source: str
    :ivar provisioning_state: The provisioning state of backup resource. Known values are:
     "Succeeded", "Creating", "Deleting", "Failed", and "Canceled".
    :vartype provisioning_state: Union[str, "ProvisioningState"]
    """

    backupNameV2: str
    """Backup name."""
    backupType: Union[str, "BackupType"]
    """\"FULL\""""
    completedTime: str
    """Backup completed time (ISO8601 format)."""
    source: str
    """Backup source."""
    provisioningState: Union[str, "ProvisioningState"]
    """The provisioning state of backup resource. Known values are: \"Succeeded\", \"Creating\",
     \"Deleting\", \"Failed\", and \"Canceled\"."""


class ServerBackupV2(ProxyResource):
    """Server backup properties.

    :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 properties of a server backup.
    :vartype properties: "ServerBackupPropertiesV2"
    """

    properties: "ServerBackupPropertiesV2"
    """The properties of a server backup."""


class ServerDetachVNetParameter(TypedDict, total=False):
    """Parameters to detach Vnet.

    :ivar public_network_access: Whether or not public network access is allowed for this server.
     Value is 'Disabled' when server has VNet integration. Known values are: "Enabled" and
     "Disabled".
    :vartype public_network_access: Union[str, "EnableStatusEnum"]
    """

    publicNetworkAccess: Union[str, "EnableStatusEnum"]
    """Whether or not public network access is allowed for this server. Value is 'Disabled' when
     server has VNet integration. Known values are: \"Enabled\" and \"Disabled\"."""


class ServerForUpdate(TypedDict, total=False):
    """Parameters allowed to update for a server.

    :ivar identity: The cmk identity for the server.
    :vartype identity: "MySQLServerIdentity"
    :ivar sku: The SKU (pricing tier) of the server.
    :vartype sku: "MySQLServerSku"
    :ivar properties: The properties that can be updated for a server.
    :vartype properties: "ServerPropertiesForUpdate"
    :ivar tags: Application-specific metadata in the form of key-value pairs.
    :vartype tags: dict[str, str]
    """

    identity: "MySQLServerIdentity"
    """The cmk identity for the server."""
    sku: "MySQLServerSku"
    """The SKU (pricing tier) of the server."""
    properties: "ServerPropertiesForUpdate"
    """The properties that can be updated for a server."""
    tags: dict[str, str]
    """Application-specific metadata in the form of key-value pairs."""


class ServerGtidSetParameter(TypedDict, total=False):
    """Server Gtid set parameters: Replication with Global Transaction Identifiers.

    :ivar gtid_set: The Gtid set of server.
    :vartype gtid_set: str
    """

    gtidSet: str
    """The Gtid set of server."""


class ServerProperties(TypedDict, total=False):
    """The properties of a server.

    :ivar administrator_login: The administrator's login name of a server. Can only be specified
     when the server is being created (and is required for creation).
    :vartype administrator_login: str
    :ivar administrator_login_password: The password of the administrator login (required for
     server creation).
    :vartype administrator_login_password: str
    :ivar version: Major version of MySQL. 8.0.21 stands for MySQL 8.0, 5.7.44 stands for MySQL
     5.7. Known values are: "5.7", "8.0.21", and "8.4".
    :vartype version: Union[str, "ServerVersion"]
    :ivar full_version: Major version and actual engine version.
    :vartype full_version: str
    :ivar availability_zone: availability Zone information of the server.
    :vartype availability_zone: str
    :ivar create_mode: The mode to create a new MySQL server. Known values are: "Default",
     "PointInTimeRestore", "Replica", "GeoRestore", and "Rename".
    :vartype create_mode: Union[str, "CreateMode"]
    :ivar source_server_resource_id: The source MySQL server id.
    :vartype source_server_resource_id: str
    :ivar restore_point_in_time: Restore point creation time (ISO8601 format), specifying the time
     to restore from.
    :vartype restore_point_in_time: str
    :ivar replication_role: The replication role. Known values are: "None", "Source", and
     "Replica".
    :vartype replication_role: Union[str, "ReplicationRole"]
    :ivar replica_capacity: The maximum number of replicas that a primary server can have.
    :vartype replica_capacity: int
    :ivar data_encryption: The Data Encryption for CMK.
    :vartype data_encryption: "DataEncryption"
    :ivar state: The state of a server. Known values are: "Ready", "Dropping", "Disabled",
     "Starting", "Stopping", "Stopped", and "Updating".
    :vartype state: Union[str, "ServerState"]
    :ivar fully_qualified_domain_name: The fully qualified domain name of a server.
    :vartype fully_qualified_domain_name: str
    :ivar database_port: The server database port. Can only be specified when the server is being
     created.
    :vartype database_port: int
    :ivar storage: Storage related properties of a server.
    :vartype storage: "Storage"
    :ivar backup: Backup related properties of a server.
    :vartype backup: "Backup"
    :ivar high_availability: High availability related properties of a server.
    :vartype high_availability: "HighAvailability"
    :ivar network: Network related properties of a server.
    :vartype network: "Network"
    :ivar private_endpoint_connections: PrivateEndpointConnections related properties of a server.
    :vartype private_endpoint_connections: list["PrivateEndpointConnection"]
    :ivar maintenance_policy: Maintenance policy of a server.
    :vartype maintenance_policy: "MaintenancePolicy"
    :ivar maintenance_window: Maintenance window of a server. Known issue: cannot be set during
     server creation or updated with other properties during server update; must be updated
     separately.
    :vartype maintenance_window: "MaintenanceWindow"
    :ivar import_source_properties: Source properties for import from storage.
    :vartype import_source_properties: "ImportSourceProperties"
    :ivar lower_case_table_names: The mysql parameter lower_case_table_names. Can only be specified
     when the server is being created. Allowed values 1 or 2.
    :vartype lower_case_table_names: int
    """

    administratorLogin: str
    """The administrator's login name of a server. Can only be specified when the server is being
     created (and is required for creation)."""
    administratorLoginPassword: str
    """The password of the administrator login (required for server creation)."""
    version: Union[str, "ServerVersion"]
    """Major version of MySQL. 8.0.21 stands for MySQL 8.0, 5.7.44 stands for MySQL 5.7. Known values
     are: \"5.7\", \"8.0.21\", and \"8.4\"."""
    fullVersion: str
    """Major version and actual engine version."""
    availabilityZone: str
    """availability Zone information of the server."""
    createMode: Union[str, "CreateMode"]
    """The mode to create a new MySQL server. Known values are: \"Default\", \"PointInTimeRestore\",
     \"Replica\", \"GeoRestore\", and \"Rename\"."""
    sourceServerResourceId: str
    """The source MySQL server id."""
    restorePointInTime: str
    """Restore point creation time (ISO8601 format), specifying the time to restore from."""
    replicationRole: Union[str, "ReplicationRole"]
    """The replication role. Known values are: \"None\", \"Source\", and \"Replica\"."""
    replicaCapacity: int
    """The maximum number of replicas that a primary server can have."""
    dataEncryption: "DataEncryption"
    """The Data Encryption for CMK."""
    state: Union[str, "ServerState"]
    """The state of a server. Known values are: \"Ready\", \"Dropping\", \"Disabled\", \"Starting\",
     \"Stopping\", \"Stopped\", and \"Updating\"."""
    fullyQualifiedDomainName: str
    """The fully qualified domain name of a server."""
    databasePort: int
    """The server database port. Can only be specified when the server is being created."""
    storage: "Storage"
    """Storage related properties of a server."""
    backup: "Backup"
    """Backup related properties of a server."""
    highAvailability: "HighAvailability"
    """High availability related properties of a server."""
    network: "Network"
    """Network related properties of a server."""
    privateEndpointConnections: list["PrivateEndpointConnection"]
    """PrivateEndpointConnections related properties of a server."""
    maintenancePolicy: "MaintenancePolicy"
    """Maintenance policy of a server."""
    maintenanceWindow: "MaintenanceWindow"
    """Maintenance window of a server. Known issue: cannot be set during server creation or updated
     with other properties during server update; must be updated separately."""
    importSourceProperties: "ImportSourceProperties"
    """Source properties for import from storage."""
    lowerCaseTableNames: int
    """The mysql parameter lower_case_table_names. Can only be specified when the server is being
     created. Allowed values 1 or 2."""


class ServerPropertiesForUpdate(TypedDict, total=False):
    """The properties that can be updated for a server.

    :ivar administrator_login_password: The password of the administrator login.
    :vartype administrator_login_password: str
    :ivar version: Server version. Known values are: "5.7", "8.0.21", and "8.4".
    :vartype version: Union[str, "ServerVersion"]
    :ivar storage: Storage related properties of a server.
    :vartype storage: "Storage"
    :ivar backup: Backup related properties of a server.
    :vartype backup: "Backup"
    :ivar high_availability: High availability related properties of a server.
    :vartype high_availability: "HighAvailability"
    :ivar maintenance_policy: Maintenance policy of a server.
    :vartype maintenance_policy: "MaintenancePolicy"
    :ivar maintenance_window: Maintenance window of a server.
    :vartype maintenance_window: "MaintenanceWindow"
    :ivar replication_role: The replication role of the server. Known values are: "None", "Source",
     and "Replica".
    :vartype replication_role: Union[str, "ReplicationRole"]
    :ivar data_encryption: The Data Encryption for CMK.
    :vartype data_encryption: "DataEncryption"
    :ivar network: Network related properties of a server.
    :vartype network: "Network"
    """

    administratorLoginPassword: str
    """The password of the administrator login."""
    version: Union[str, "ServerVersion"]
    """Server version. Known values are: \"5.7\", \"8.0.21\", and \"8.4\"."""
    storage: "Storage"
    """Storage related properties of a server."""
    backup: "Backup"
    """Backup related properties of a server."""
    highAvailability: "HighAvailability"
    """High availability related properties of a server."""
    maintenancePolicy: "MaintenancePolicy"
    """Maintenance policy of a server."""
    maintenanceWindow: "MaintenanceWindow"
    """Maintenance window of a server."""
    replicationRole: Union[str, "ReplicationRole"]
    """The replication role of the server. Known values are: \"None\", \"Source\", and \"Replica\"."""
    dataEncryption: "DataEncryption"
    """The Data Encryption for CMK."""
    network: "Network"
    """Network related properties of a server."""


class ServerRestartParameter(TypedDict, total=False):
    """Server restart parameters.

    :ivar restart_with_failover: Whether or not failover to standby server when restarting a server
     with high availability enabled. Known values are: "Enabled" and "Disabled".
    :vartype restart_with_failover: Union[str, "EnableStatusEnum"]
    :ivar max_failover_seconds: The maximum allowed failover time in seconds.
    :vartype max_failover_seconds: int
    """

    restartWithFailover: Union[str, "EnableStatusEnum"]
    """Whether or not failover to standby server when restarting a server with high availability
     enabled. Known values are: \"Enabled\" and \"Disabled\"."""
    maxFailoverSeconds: int
    """The maximum allowed failover time in seconds."""


class Storage(TypedDict, total=False):
    """Storage Profile properties of a server.

    :ivar storage_size_gb: Max storage size allowed for a server.
    :vartype storage_size_gb: int
    :ivar iops: Storage IOPS for a server.
    :vartype iops: int
    :ivar auto_grow: Enable Storage Auto Grow or not. Known values are: "Enabled" and "Disabled".
    :vartype auto_grow: Union[str, "EnableStatusEnum"]
    :ivar log_on_disk: Enable Log On Disk or not. Known values are: "Enabled" and "Disabled".
    :vartype log_on_disk: Union[str, "EnableStatusEnum"]
    :ivar storage_sku: The sku name of the server storage.
    :vartype storage_sku: str
    :ivar auto_io_scaling: Enable IO Auto Scaling or not. Known values are: "Enabled" and
     "Disabled".
    :vartype auto_io_scaling: Union[str, "EnableStatusEnum"]
    :ivar storage_redundancy: The redundant type of the server storage. The parameter is used for
     server creation. Known values are: "LocalRedundancy" and "ZoneRedundancy".
    :vartype storage_redundancy: Union[str, "StorageRedundancyEnum"]
    """

    storageSizeGB: int
    """Max storage size allowed for a server."""
    iops: int
    """Storage IOPS for a server."""
    autoGrow: Union[str, "EnableStatusEnum"]
    """Enable Storage Auto Grow or not. Known values are: \"Enabled\" and \"Disabled\"."""
    logOnDisk: Union[str, "EnableStatusEnum"]
    """Enable Log On Disk or not. Known values are: \"Enabled\" and \"Disabled\"."""
    storageSku: str
    """The sku name of the server storage."""
    autoIoScaling: Union[str, "EnableStatusEnum"]
    """Enable IO Auto Scaling or not. Known values are: \"Enabled\" and \"Disabled\"."""
    storageRedundancy: Union[str, "StorageRedundancyEnum"]
    """The redundant type of the server storage. The parameter is used for server creation. Known
     values are: \"LocalRedundancy\" and \"ZoneRedundancy\"."""


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 UserAssignedIdentity(TypedDict, total=False):
    """Metadata of user assigned identity.

    :ivar principal_id: Principal Id of user assigned identity.
    :vartype principal_id: str
    :ivar client_id: Client Id of user assigned identity.
    :vartype client_id: str
    """

    principalId: str
    """Principal Id of user assigned identity."""
    clientId: str
    """Client Id of user assigned identity."""


class VirtualNetworkSubnetUsageParameter(TypedDict, total=False):
    """Virtual network subnet usage parameter.

    :ivar virtual_network_resource_id: Virtual network resource id.
    :vartype virtual_network_resource_id: str
    """

    virtualNetworkResourceId: str
    """Virtual network resource id."""


BackupStoreDetails = Union[FullBackupStoreDetails]
