# 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 enum import Enum
from azure.core import CaseInsensitiveEnumMeta


class AddOnFeatures(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """Available cluster add-on features."""

    REPAIR_MANAGER = "RepairManager"
    """Add on RepairManager."""
    DNS_SERVICE = "DnsService"
    """Add on DnsService."""
    BACKUP_RESTORE_SERVICE = "BackupRestoreService"
    """Add on BackupRestoreService."""
    RESOURCE_MONITOR_SERVICE = "ResourceMonitorService"
    """Add on ResourceMonitorService."""


class ArmServicePackageActivationMode(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The activation Mode of the service package."""

    SHARED_PROCESS = "SharedProcess"
    """Indicates the application package activation mode will use shared process."""
    EXCLUSIVE_PROCESS = "ExclusiveProcess"
    """Indicates the application package activation mode will use exclusive process."""


class ArmUpgradeFailureAction(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The activation Mode of the service package."""

    ROLLBACK = "Rollback"
    """Indicates that a rollback of the upgrade will be performed by Service Fabric if the upgrade
    fails."""
    MANUAL = "Manual"
    """Indicates that a manual repair will need to be performed by the administrator if the upgrade
    fails. Service Fabric will not proceed to the next upgrade domain automatically."""


class ClusterEnvironment(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """Cluster operating system, the default will be Windows."""

    WINDOWS = "Windows"
    """Windows operating system."""
    LINUX = "Linux"
    """Linux operating system."""


class ClusterState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The current state of the cluster."""

    WAITING_FOR_NODES = "WaitingForNodes"
    """Indicates that the cluster resource is created and the resource provider is waiting for Service
    Fabric VM extension to boot up and report to it."""
    DEPLOYING = "Deploying"
    """Indicates that the Service Fabric runtime is being installed on the VMs. Cluster resource will
    be in this state until the cluster boots up and system services are up."""
    BASELINE_UPGRADE = "BaselineUpgrade"
    """Indicates that the cluster is upgrading to establishes the cluster version. This upgrade is
    automatically initiated when the cluster boots up for the first time."""
    UPDATING_USER_CONFIGURATION = "UpdatingUserConfiguration"
    """Indicates that the cluster is being upgraded with the user provided configuration."""
    UPDATING_USER_CERTIFICATE = "UpdatingUserCertificate"
    """Indicates that the cluster is being upgraded with the user provided certificate."""
    UPDATING_INFRASTRUCTURE = "UpdatingInfrastructure"
    """Indicates that the cluster is being upgraded with the latest Service Fabric runtime version.
    This happens only when the **upgradeMode** is set to 'Automatic'."""
    ENFORCING_CLUSTER_VERSION = "EnforcingClusterVersion"
    """Indicates that cluster is on a different version than expected and the cluster is being
    upgraded to the expected version."""
    UPGRADE_SERVICE_UNREACHABLE = "UpgradeServiceUnreachable"
    """Indicates that the system service in the cluster is no longer polling the Resource Provider.
    Clusters in this state cannot be managed by the Resource Provider."""
    AUTO_SCALE = "AutoScale"
    """Indicates that the ReliabilityLevel of the cluster is being adjusted."""
    READY = "Ready"
    """Indicates that the cluster is in a stable state."""


class ClusterUpgradeCadence(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """Indicates when new cluster runtime version upgrades will be applied after they are released. By
    default is Wave0.
    """

    WAVE0 = "Wave0"
    """Cluster upgrade starts immediately after a new version is rolled out. Recommended for Test/Dev
    clusters."""
    WAVE1 = "Wave1"
    """Cluster upgrade starts 7 days after a new version is rolled out. Recommended for Pre-prod
    clusters."""
    WAVE2 = "Wave2"
    """Cluster upgrade starts 14 days after a new version is rolled out. Recommended for Production
    clusters."""


class ClusterVersionsEnvironment(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The operating system or environment of the cluster version."""

    WINDOWS = "Windows"
    """Windows operating system."""
    LINUX = "Linux"
    """Linux operating system."""


class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The kind of entity that created the resource."""

    USER = "User"
    """The entity was created by a user."""
    APPLICATION = "Application"
    """The entity was created by an application."""
    MANAGED_IDENTITY = "ManagedIdentity"
    """The entity was created by a managed identity."""
    KEY = "Key"
    """The entity was created by a key."""


class DurabilityLevel(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The durability level of the node type. Learn about `DurabilityLevel
    <https://docs.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity>`_.
    """

    BRONZE = "Bronze"
    """No privileges. This is the default."""
    SILVER = "Silver"
    """The infrastructure jobs can be paused for a duration of 10 minutes per UD."""
    GOLD = "Gold"
    """The infrastructure jobs can be paused for a duration of 2 hours per UD. Gold durability can be
    enabled only on full node VM skus like D15_V2, G5 etc."""


class ManagedIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The type of managed identity for the resource."""

    SYSTEM_ASSIGNED = "SystemAssigned"
    """Indicates that system assigned identity is associated with the resource."""
    USER_ASSIGNED = "UserAssigned"
    """Indicates that user assigned identity is associated with the resource."""
    SYSTEM_ASSIGNED_USER_ASSIGNED = "SystemAssigned, UserAssigned"
    """Indicates that both system assigned and user assigned identity are associated with the
    resource."""
    NONE = "None"
    """Indicates that no identity is associated with the resource."""


class MoveCost(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """Specifies the move cost for the service."""

    ZERO = "Zero"
    """Zero move cost. This value is zero."""
    LOW = "Low"
    """Specifies the move cost of the service as Low. The value is 1."""
    MEDIUM = "Medium"
    """Specifies the move cost of the service as Medium. The value is 2."""
    HIGH = "High"
    """Specifies the move cost of the service as High. The value is 3."""


class NotificationCategory(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The category of notification."""

    WAVE_PROGRESS = "WaveProgress"
    """Notification will be regarding wave progress."""


class NotificationChannel(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The notification channel indicates the type of receivers subscribed to the notification, either
    user or subscription.
    """

    EMAIL_USER = "EmailUser"
    """For email user receivers. In this case, the parameter receivers should be a list of email
    addresses that will receive the notifications."""
    EMAIL_SUBSCRIPTION = "EmailSubscription"
    """For subscription receivers. In this case, the parameter receivers should be a list of roles of
    the subscription for the cluster (eg. Owner, AccountAdmin, etc) that will receive the
    notifications."""


class NotificationLevel(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The level of notification."""

    CRITICAL = "Critical"
    """Receive only critical notifications."""
    ALL = "All"
    """Receive all notifications."""


class PartitionScheme(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """Enumerates the ways that a service can be partitioned."""

    INVALID = "Invalid"
    """Indicates the partition kind is invalid. All Service Fabric enumerations have the invalid type.
    The value is zero."""
    SINGLETON = "Singleton"
    """Indicates that the partition is based on string names, and is a
    SingletonPartitionSchemeDescription object, The value is 1."""
    UNIFORM_INT64_RANGE = "UniformInt64Range"
    """Indicates that the partition is based on Int64 key ranges, and is a
    UniformInt64RangePartitionSchemeDescription object. The value is 2."""
    NAMED = "Named"
    """Indicates that the partition is based on string names, and is a NamedPartitionSchemeDescription
    object. The value is 3."""


class ProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The provisioning state of the cluster resource."""

    UPDATING = "Updating"
    """Cluster is updating."""
    SUCCEEDED = "Succeeded"
    """Cluster provisioning succeeded."""
    FAILED = "Failed"
    """Cluster provisioning failed."""
    CANCELED = "Canceled"
    """Cluster provisioning was canceled."""


class ReliabilityLevel(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The reliability level sets the replica set size of system services. Learn about
    `ReliabilityLevel
    <https://docs.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity>`_.
    """

    NONE = "None"
    """Run the System services with a target replica set count of 1. This should only be used for test
    clusters."""
    BRONZE = "Bronze"
    """Run the System services with a target replica set count of 3. This should only be used for test
    clusters."""
    SILVER = "Silver"
    """Run the System services with a target replica set count of 5."""
    GOLD = "Gold"
    """Run the System services with a target replica set count of 7."""
    PLATINUM = "Platinum"
    """Run the System services with a target replica set count of 9."""


class RollingUpgradeMode(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The mode used to monitor health during a rolling upgrade. The values are UnmonitoredAuto,
    UnmonitoredManual, and Monitored.
    """

    INVALID = "Invalid"
    """Indicates the upgrade mode is invalid. All Service Fabric enumerations have the invalid type.
    The value is zero."""
    UNMONITORED_AUTO = "UnmonitoredAuto"
    """The upgrade will proceed automatically without performing any health monitoring. The value is
    1."""
    UNMONITORED_MANUAL = "UnmonitoredManual"
    """The upgrade will stop after completing each upgrade domain, giving the opportunity to manually
    monitor health before proceeding. The value is 2."""
    MONITORED = "Monitored"
    """The upgrade will stop after completing each upgrade domain and automatically monitor health
    before proceeding. The value is 3."""


class ServiceCorrelationScheme(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The service correlation scheme."""

    INVALID = "Invalid"
    """An invalid correlation scheme. Cannot be used. The value is zero."""
    AFFINITY = "Affinity"
    """Indicates that this service has an affinity relationship with another service. Provided for
    backwards compatibility, consider preferring the Aligned or NonAlignedAffinity options. The
    value is 1."""
    ALIGNED_AFFINITY = "AlignedAffinity"
    """Aligned affinity ensures that the primaries of the partitions of the affinitized services are
    collocated on the same nodes. This is the default and is the same as selecting the Affinity
    scheme. The value is 2."""
    NON_ALIGNED_AFFINITY = "NonAlignedAffinity"
    """Non-Aligned affinity guarantees that all replicas of each service will be placed on the same
    nodes. Unlike Aligned Affinity, this does not guarantee that replicas of particular role will
    be collocated. The value is 3."""


class ServiceKind(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The kind of service (Stateless or Stateful)."""

    INVALID = "Invalid"
    """Indicates the service kind is invalid. All Service Fabric enumerations have the invalid type.
    The value is zero."""
    STATELESS = "Stateless"
    """Does not use Service Fabric to make its state highly available or reliable. The value is 1."""
    STATEFUL = "Stateful"
    """Uses Service Fabric to make its state or part of its state highly available and reliable. The
    value is 2."""


class ServiceLoadMetricWeight(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """Determines the metric weight relative to the other metrics that are configured for this
    service. During runtime, if two metrics end up in conflict, the Cluster Resource Manager
    prefers the metric with the higher weight.
    """

    ZERO = "Zero"
    """Disables resource balancing for this metric. This value is zero."""
    LOW = "Low"
    """Specifies the metric weight of the service load as Low. The value is 1."""
    MEDIUM = "Medium"
    """Specifies the metric weight of the service load as Medium. The value is 2."""
    HIGH = "High"
    """Specifies the metric weight of the service load as High. The value is 3."""


class ServicePlacementPolicyType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The type of placement policy for a service fabric service. Following are the possible values."""

    INVALID = "Invalid"
    """Indicates the type of the placement policy is invalid. All Service Fabric enumerations have the
    invalid type. The value is zero."""
    INVALID_DOMAIN = "InvalidDomain"
    """Indicates that the ServicePlacementPolicyDescription is of type
    ServicePlacementInvalidDomainPolicyDescription, which indicates that a particular fault or
    upgrade domain cannot be used for placement of this service. The value is 1."""
    REQUIRED_DOMAIN = "RequiredDomain"
    """Indicates that the ServicePlacementPolicyDescription is of type
    ServicePlacementRequireDomainDistributionPolicyDescription indicating that the replicas of the
    service must be placed in a specific domain. The value is 2."""
    PREFERRED_PRIMARY_DOMAIN = "PreferredPrimaryDomain"
    """Indicates that the ServicePlacementPolicyDescription is of type
    ServicePlacementPreferPrimaryDomainPolicyDescription, which indicates that if possible the
    Primary replica for the partitions of the service should be located in a particular domain as
    an optimization. The value is 3."""
    REQUIRED_DOMAIN_DISTRIBUTION = "RequiredDomainDistribution"
    """Indicates that the ServicePlacementPolicyDescription is of type
    ServicePlacementRequireDomainDistributionPolicyDescription, indicating that the system will
    disallow placement of any two replicas from the same partition in the same domain at any time.
    The value is 4."""
    NON_PARTIALLY_PLACE_SERVICE = "NonPartiallyPlaceService"
    """Indicates that the ServicePlacementPolicyDescription is of type
    ServicePlacementNonPartiallyPlaceServicePolicyDescription, which indicates that if possible all
    replicas of a particular partition of the service should be placed atomically. The value is 5."""


class SfZonalUpgradeMode(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """This property controls the logical grouping of VMs in upgrade domains (UDs). This property
    can't be modified if a node type with multiple Availability Zones is already present in the
    cluster.
    """

    PARALLEL = "Parallel"
    """VMs under the node type are grouped into UDs and ignore the zone info in five UDs. This setting
    causes UDs across all zones to be upgraded at the same time. This deployment mode is faster for
    upgrades, we don't recommend it because it goes against the SDP guidelines, which state that
    the updates should be applied to one zone at a time."""
    HIERARCHICAL = "Hierarchical"
    """If this value is omitted or set to Hierarchical, VMs are grouped to reflect the zonal
    distribution in up to 15 UDs. Each of the three zones has five UDs. This ensures that the zones
    are updated one at a time, moving to next zone only after completing five UDs within the first
    zone. This update process is safer for the cluster and the user application."""


class StoreName(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The local certificate store location."""

    ADDRESS_BOOK = "AddressBook"
    """Static value for AddressBook."""
    AUTH_ROOT = "AuthRoot"
    """Static value for AuthRoot."""
    CERTIFICATE_AUTHORITY = "CertificateAuthority"
    """Static value for CertificateAuthority."""
    DISALLOWED = "Disallowed"
    """Static value for Disallowed."""
    MY = "My"
    """Static value for My."""
    ROOT = "Root"
    """Static value for Root."""
    TRUSTED_PEOPLE = "TrustedPeople"
    """Static value for TrustedPeople."""
    TRUSTED_PUBLISHER = "TrustedPublisher"
    """Static value for TrustedPublisher."""


class UpgradeMode(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """The upgrade mode of the cluster when new Service Fabric runtime version is available."""

    AUTOMATIC = "Automatic"
    """The cluster will be automatically upgraded to the latest Service Fabric runtime version,
    **upgradeWave** will determine when the upgrade starts after the new version becomes available."""
    MANUAL = "Manual"
    """The cluster will not be automatically upgraded to the latest Service Fabric runtime version.
    The cluster is upgraded by setting the **clusterCodeVersion** property in the cluster resource."""


class VmssZonalUpgradeMode(str, Enum, metaclass=CaseInsensitiveEnumMeta):
    """This property defines the upgrade mode for the virtual machine scale set, it is mandatory if a
    node type with multiple Availability Zones is added.
    """

    PARALLEL = "Parallel"
    """Updates will happen in all Availability Zones at once for the virtual machine scale sets."""
    HIERARCHICAL = "Hierarchical"
    """VMs are grouped to reflect the zonal distribution in up to 15 UDs. Each of the three zones has
    five UDs. This ensures that the zones are updated one at a time, moving to next zone only after
    completing five UDs within the first zone."""
