{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-azure-service-fabric/json-schema/microsoft-azure-service-fabric-cluster-schema.json",
  "title": "Cluster",
  "description": "The cluster resource\n",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_superseded/microsoft-azure-service-fabric-clusters-api-openapi.yml#/components/schemas/Cluster",
  "type": "object",
  "allOf": [
    {
      "description": "The cluster resource properties"
    },
    {
      "$ref": "#/$defs/Resource"
    },
    {
      "type": "object"
    }
  ],
  "properties": {
    "properties": {
      "$ref": "#/$defs/ClusterProperties"
    }
  },
  "$defs": {
    "AddOnFeatures": {
      "type": "string",
      "description": "Available cluster add-on features",
      "enum": [
        "RepairManager",
        "DnsService",
        "BackupRestoreService",
        "ResourceMonitorService"
      ]
    },
    "ApplicationDeltaHealthPolicy": {
      "type": "object",
      "description": "Defines a delta health policy used to evaluate the health of an application or one of its child entities when upgrading the cluster.\n",
      "properties": {
        "defaultServiceTypeDeltaHealthPolicy": {
          "$ref": "#/$defs/ServiceTypeDeltaHealthPolicy"
        },
        "serviceTypeDeltaHealthPolicies": {
          "$ref": "#/$defs/ServiceTypeDeltaHealthPolicyMap"
        }
      }
    },
    "ApplicationDeltaHealthPolicyMap": {
      "type": "object",
      "description": "Defines a map that contains specific application delta health policies for different applications.\nEach entry specifies as key the application name and as value an ApplicationDeltaHealthPolicy used to evaluate the application health when upgrading the cluster.\nThe application name should include the 'fabric:' URI scheme.\nThe map is empty by default.\n",
      "additionalProperties": {
        "$ref": "#/$defs/ApplicationDeltaHealthPolicy"
      }
    },
    "ApplicationHealthPolicy": {
      "type": "object",
      "description": "Defines a health policy used to evaluate the health of an application or one of its children entities.\n",
      "properties": {
        "defaultServiceTypeHealthPolicy": {
          "$ref": "#/$defs/ServiceTypeHealthPolicy"
        },
        "serviceTypeHealthPolicies": {
          "$ref": "#/$defs/ServiceTypeHealthPolicyMap"
        }
      }
    },
    "ApplicationHealthPolicyMap": {
      "type": "object",
      "description": "Defines a map that contains specific application health policies for different applications.\nEach entry specifies as key the application name and as value an ApplicationHealthPolicy used to evaluate the application health.\nThe application name should include the 'fabric:' URI scheme.\nThe map is empty by default.\n",
      "additionalProperties": {
        "$ref": "#/$defs/ApplicationHealthPolicy"
      }
    },
    "ApplicationTypeVersionsCleanupPolicy": {
      "type": "object",
      "required": [
        "maxUnusedVersionsToKeep"
      ],
      "properties": {
        "maxUnusedVersionsToKeep": {
          "type": "integer",
          "format": "int64",
          "minimum": 0,
          "description": "Number of unused versions per application type to keep."
        }
      }
    },
    "AzureActiveDirectory": {
      "type": "object",
      "properties": {
        "tenantId": {
          "type": "string",
          "description": "Azure active directory tenant id."
        },
        "clusterApplication": {
          "type": "string",
          "description": "Azure active directory cluster application id."
        },
        "clientApplication": {
          "type": "string",
          "description": "Azure active directory client application id."
        }
      },
      "description": "The settings to enable AAD authentication on the cluster."
    },
    "CertificateDescription": {
      "type": "object",
      "required": [
        "thumbprint"
      ],
      "properties": {
        "thumbprint": {
          "type": "string",
          "description": "Thumbprint of the primary certificate."
        },
        "thumbprintSecondary": {
          "type": "string",
          "description": "Thumbprint of the secondary certificate."
        },
        "x509StoreName": {
          "$ref": "#/$defs/StoreName"
        }
      },
      "description": "Describes the certificate details."
    },
    "ClientCertificateCommonName": {
      "type": "object",
      "required": [
        "certificateCommonName",
        "isAdmin",
        "certificateIssuerThumbprint"
      ],
      "properties": {
        "isAdmin": {
          "type": "boolean",
          "description": "Indicates if the client certificate has admin access to the cluster. Non admin clients can perform only read only operations on the cluster."
        },
        "certificateCommonName": {
          "type": "string",
          "description": "The common name of the client certificate."
        },
        "certificateIssuerThumbprint": {
          "type": "string",
          "description": "The issuer thumbprint of the client certificate."
        }
      },
      "description": "Describes the client certificate details using common name."
    },
    "ClientCertificateThumbprint": {
      "type": "object",
      "required": [
        "certificateThumbprint",
        "isAdmin"
      ],
      "properties": {
        "isAdmin": {
          "type": "boolean",
          "description": "Indicates if the client certificate has admin access to the cluster. Non admin clients can perform only read only operations on the cluster."
        },
        "certificateThumbprint": {
          "type": "string",
          "description": "The thumbprint of the client certificate."
        }
      },
      "description": "Describes the client certificate details using thumbprint."
    },
    "ClusterEnvironment": {
      "type": "string",
      "description": "Cluster operating system, the default will be Windows",
      "enum": [
        "Windows",
        "Linux"
      ]
    },
    "ClusterHealthPolicy": {
      "type": "object",
      "description": "Defines a health policy used to evaluate the health of the cluster or of a cluster node.\n",
      "properties": {
        "maxPercentUnhealthyNodes": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum allowed percentage of unhealthy nodes before reporting an error. For example, to allow 10% of nodes to be unhealthy, this value would be 10.\n\nThe percentage represents the maximum tolerated percentage of nodes that can be unhealthy before the cluster is considered in error.\nIf the percentage is respected but there is at least one unhealthy node, the health is evaluated as Warning.\nThe percentage is calculated by dividing the number of unhealthy nodes over the total number of nodes in the cluster.\nThe computation rounds up to tolerate one failure on small numbers of nodes. Default percentage is zero.\n\nIn large clusters, some nodes will always be down or out for repairs, so this percentage should be configured to tolerate that.\n",
          "default": 0,
          "minimum": 0,
          "maximum": 100
        },
        "maxPercentUnhealthyApplications": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum allowed percentage of unhealthy applications before reporting an error. For example, to allow 10% of applications to be unhealthy, this value would be 10.\n\nThe percentage represents the maximum tolerated percentage of applications that can be unhealthy before the cluster is considered in error.\nIf the percentage is respected but there is at least one unhealthy application, the health is evaluated as Warning.\nThis is calculated by dividing the number of unhealthy applications over the total number of application instances in the cluster, excluding applications of application types that are included in the ApplicationTypeHealthPolicyMap.\nThe computation rounds up to tolerate one failure on small numbers of applications. Default percentage is zero.\n",
          "default": 0,
          "minimum": 0,
          "maximum": 100
        },
        "applicationHealthPolicies": {
          "$ref": "#/$defs/ApplicationHealthPolicyMap"
        }
      }
    },
    "ClusterProperties": {
      "type": "object",
      "required": [
        "managementEndpoint",
        "nodeTypes"
      ],
      "properties": {
        "addOnFeatures": {
          "type": "array",
          "description": "The list of add-on features to enable in the cluster.",
          "items": {
            "$ref": "#/$defs/AddOnFeatures"
          }
        },
        "availableClusterVersions": {
          "type": "array",
          "description": "The Service Fabric runtime versions available for this cluster.",
          "readOnly": true,
          "items": {
            "$ref": "#/$defs/ClusterVersionDetails"
          }
        },
        "azureActiveDirectory": {
          "$ref": "#/$defs/AzureActiveDirectory"
        },
        "certificate": {
          "$ref": "#/$defs/CertificateDescription"
        },
        "certificateCommonNames": {
          "$ref": "#/$defs/ServerCertificateCommonNames"
        },
        "clientCertificateCommonNames": {
          "type": "array",
          "description": "The list of client certificates referenced by common name that are allowed to manage the cluster.",
          "items": {
            "$ref": "#/$defs/ClientCertificateCommonName"
          }
        },
        "clientCertificateThumbprints": {
          "type": "array",
          "description": "The list of client certificates referenced by thumbprint that are allowed to manage the cluster.",
          "items": {
            "$ref": "#/$defs/ClientCertificateThumbprint"
          }
        },
        "clusterCodeVersion": {
          "type": "string",
          "description": "The Service Fabric runtime version of the cluster. This property can only by set the user when **upgradeMode** is set to 'Manual'. To get list of available Service Fabric versions for new clusters use [ClusterVersion API](https://learn.microsoft.com/rest/api/servicefabric/cluster-versions/list). To get the list of available version for existing clusters use **availableClusterVersions**."
        },
        "clusterEndpoint": {
          "type": "string",
          "description": "The Azure Resource Provider endpoint. A system service in the cluster connects to this  endpoint.",
          "readOnly": true
        },
        "clusterId": {
          "type": "string",
          "description": "A service generated unique identifier for the cluster resource.",
          "readOnly": true
        },
        "clusterState": {
          "$ref": "#/$defs/ClusterState"
        },
        "diagnosticsStorageAccountConfig": {
          "$ref": "#/$defs/DiagnosticsStorageAccountConfig"
        },
        "eventStoreServiceEnabled": {
          "type": "boolean",
          "description": "Indicates if the event store service is enabled."
        },
        "fabricSettings": {
          "type": "array",
          "description": "The list of custom fabric settings to configure the cluster.",
          "items": {
            "$ref": "#/$defs/SettingsSectionDescription"
          }
        },
        "managementEndpoint": {
          "type": "string",
          "description": "The http management endpoint of the cluster."
        },
        "nodeTypes": {
          "type": "array",
          "description": "The list of node types in the cluster.",
          "items": {
            "$ref": "#/$defs/NodeTypeDescription"
          }
        },
        "provisioningState": {
          "type": "string",
          "description": "The provisioning state of the cluster resource.",
          "readOnly": true,
          "enum": [
            "Updating",
            "Succeeded",
            "Failed",
            "Canceled"
          ],
          "x-ms-enum": {
            "name": "ProvisioningState",
            "modelAsString": true
          }
        },
        "reliabilityLevel": {
          "$ref": "#/$defs/ReliabilityLevel"
        },
        "reverseProxyCertificate": {
          "$ref": "#/$defs/CertificateDescription"
        },
        "reverseProxyCertificateCommonNames": {
          "$ref": "#/$defs/ServerCertificateCommonNames"
        },
        "upgradeDescription": {
          "$ref": "#/$defs/ClusterUpgradePolicy"
        },
        "upgradeMode": {
          "$ref": "#/$defs/UpgradeMode"
        },
        "applicationTypeVersionsCleanupPolicy": {
          "$ref": "#/$defs/ApplicationTypeVersionsCleanupPolicy"
        },
        "vmImage": {
          "type": "string",
          "description": "The VM image VMSS has been configured with. Generic names such as Windows or Linux can be used."
        },
        "sfZonalUpgradeMode": {
          "$ref": "#/$defs/SfZonalUpgradeMode"
        },
        "vmssZonalUpgradeMode": {
          "$ref": "#/$defs/VmssZonalUpgradeMode"
        },
        "infrastructureServiceManager": {
          "type": "boolean",
          "description": "Indicates if infrastructure service manager is enabled."
        },
        "upgradeWave": {
          "$ref": "#/$defs/ClusterUpgradeCadence"
        },
        "upgradePauseStartTimestampUtc": {
          "type": "string",
          "format": "date-time",
          "description": "Indicates the start date and time to pause automatic runtime version upgrades on the cluster for an specific period of time on the cluster (UTC)."
        },
        "upgradePauseEndTimestampUtc": {
          "type": "string",
          "format": "date-time",
          "description": "Indicates the end date and time to pause automatic runtime version upgrades on the cluster for an specific period of time on the cluster (UTC)."
        },
        "waveUpgradePaused": {
          "type": "boolean",
          "description": "Boolean to pause automatic runtime version upgrades to the cluster."
        },
        "notifications": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Notification"
          },
          "description": "Indicates a list of notification channels for cluster events."
        }
      },
      "description": "Describes the cluster resource properties."
    },
    "ClusterState": {
      "type": "string",
      "description": "The current state of the cluster.\n\n  - 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.\n  - 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.\n  - 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.\n  - UpdatingUserConfiguration - Indicates that the cluster is being upgraded with the user provided configuration.\n  - UpdatingUserCertificate - Indicates that the cluster is being upgraded with the user provided certificate.\n  - 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'.\n  - EnforcingClusterVersion - Indicates that cluster is on a different version than expected and the cluster is being upgraded to the expected version.\n  - 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.\n  - AutoScale - Indicates that the ReliabilityLevel of the cluster is being adjusted.\n  - Ready - Indicates that the cluster is in a stable state.\n",
      "enum": [
        "WaitingForNodes",
        "Deploying",
        "BaselineUpgrade",
        "UpdatingUserConfiguration",
        "UpdatingUserCertificate",
        "UpdatingInfrastructure",
        "EnforcingClusterVersion",
        "UpgradeServiceUnreachable",
        "AutoScale",
        "Ready"
      ]
    },
    "ClusterUpgradeCadence": {
      "type": "string",
      "enum": [
        "Wave0",
        "Wave1",
        "Wave2"
      ],
      "x-ms-enum": {
        "name": "clusterUpgradeCadence",
        "modelAsString": true,
        "values": [
          {
            "value": "Wave0",
            "description": "Cluster upgrade starts immediately after a new version is rolled out. Recommended for Test/Dev clusters."
          },
          {
            "value": "Wave1",
            "description": "Cluster upgrade starts 7 days after a new version is rolled out. Recommended for Pre-prod clusters."
          },
          {
            "value": "Wave2",
            "description": "Cluster upgrade starts 14 days after a new version is rolled out. Recommended for Production clusters."
          }
        ]
      },
      "description": "Indicates when new cluster runtime version upgrades will be applied after they are released. By default is Wave0."
    },
    "ClusterUpgradeDeltaHealthPolicy": {
      "type": "object",
      "description": "Describes the delta health policies for the cluster upgrade.",
      "required": [
        "maxPercentDeltaUnhealthyApplications",
        "maxPercentDeltaUnhealthyNodes",
        "maxPercentUpgradeDomainDeltaUnhealthyNodes"
      ],
      "properties": {
        "maxPercentDeltaUnhealthyNodes": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum allowed percentage of nodes health degradation allowed during cluster upgrades.\nThe delta is measured between the state of the nodes at the beginning of upgrade and the state of the nodes at the time of the health evaluation.\nThe check is performed after every upgrade domain upgrade completion to make sure the global state of the cluster is within tolerated limits.\n",
          "minimum": 0,
          "maximum": 100
        },
        "maxPercentUpgradeDomainDeltaUnhealthyNodes": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum allowed percentage of upgrade domain nodes health degradation allowed during cluster upgrades.\nThe delta is measured between the state of the upgrade domain nodes at the beginning of upgrade and the state of the upgrade domain nodes at the time of the health evaluation.\nThe check is performed after every upgrade domain upgrade completion for all completed upgrade domains to make sure the state of the upgrade domains is within tolerated limits.\n",
          "minimum": 0,
          "maximum": 100
        },
        "maxPercentDeltaUnhealthyApplications": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum allowed percentage of applications health degradation allowed during cluster upgrades.\nThe delta is measured between the state of the applications at the beginning of upgrade and the state of the applications at the time of the health evaluation.\nThe check is performed after every upgrade domain upgrade completion to make sure the global state of the cluster is within tolerated limits. System services are not included in this.\n",
          "minimum": 0,
          "maximum": 100
        },
        "applicationDeltaHealthPolicies": {
          "$ref": "#/$defs/ApplicationDeltaHealthPolicyMap"
        }
      }
    },
    "ClusterUpgradePolicy": {
      "type": "object",
      "required": [
        "healthCheckRetryTimeout",
        "healthCheckStableDuration",
        "healthCheckWaitDuration",
        "healthPolicy",
        "upgradeDomainTimeout",
        "upgradeReplicaSetCheckTimeout",
        "upgradeTimeout"
      ],
      "properties": {
        "forceRestart": {
          "type": "boolean",
          "description": "If true, then processes are forcefully restarted during upgrade even when the code version has not changed (the upgrade only changes configuration or data)."
        },
        "upgradeReplicaSetCheckTimeout": {
          "type": "string",
          "description": "The maximum amount of time to block processing of an upgrade domain and prevent loss of availability when there are unexpected issues. When this timeout expires, processing of the upgrade domain will proceed regardless of availability loss issues. The timeout is reset at the start of each upgrade domain. The timeout can be in either hh:mm:ss or in d.hh:mm:ss.ms format."
        },
        "healthCheckWaitDuration": {
          "type": "string",
          "description": "The length of time to wait after completing an upgrade domain before performing health checks. The duration can be in either hh:mm:ss or in d.hh:mm:ss.ms format."
        },
        "healthCheckStableDuration": {
          "type": "string",
          "description": "The amount of time that the application or cluster must remain healthy before the upgrade proceeds to the next upgrade domain. The duration can be in either hh:mm:ss or in d.hh:mm:ss.ms format."
        },
        "healthCheckRetryTimeout": {
          "type": "string",
          "description": "The amount of time to retry health evaluation when the application or cluster is unhealthy before the upgrade rolls back. The timeout can be in either hh:mm:ss or in d.hh:mm:ss.ms format."
        },
        "upgradeTimeout": {
          "type": "string",
          "description": "The amount of time the overall upgrade has to complete before the upgrade rolls back. The timeout can be in either hh:mm:ss or in d.hh:mm:ss.ms format."
        },
        "upgradeDomainTimeout": {
          "type": "string",
          "description": "The amount of time each upgrade domain has to complete before the upgrade rolls back. The timeout can be in either hh:mm:ss or in d.hh:mm:ss.ms format."
        },
        "healthPolicy": {
          "$ref": "#/$defs/ClusterHealthPolicy"
        },
        "deltaHealthPolicy": {
          "$ref": "#/$defs/ClusterUpgradeDeltaHealthPolicy"
        }
      },
      "description": "Describes the policy used when upgrading the cluster."
    },
    "ClusterVersionDetails": {
      "type": "object",
      "properties": {
        "codeVersion": {
          "type": "string",
          "description": "The Service Fabric runtime version of the cluster."
        },
        "supportExpiryUtc": {
          "type": "string",
          "description": "The date of expiry of support of the version."
        },
        "environment": {
          "$ref": "#/$defs/ClusterEnvironment"
        }
      },
      "description": "The detail of the Service Fabric runtime version result"
    },
    "DiagnosticsStorageAccountConfig": {
      "type": "object",
      "required": [
        "blobEndpoint",
        "protectedAccountKeyName",
        "queueEndpoint",
        "storageAccountName",
        "tableEndpoint"
      ],
      "properties": {
        "storageAccountName": {
          "type": "string",
          "description": "The Azure storage account name."
        },
        "protectedAccountKeyName": {
          "type": "string",
          "description": "The protected diagnostics storage key name."
        },
        "protectedAccountKeyName2": {
          "type": "string",
          "description": "The secondary protected diagnostics storage key name. If one of the storage account keys is rotated the cluster will fallback to using the other."
        },
        "blobEndpoint": {
          "type": "string",
          "description": "The blob endpoint of the azure storage account."
        },
        "queueEndpoint": {
          "type": "string",
          "description": "The queue endpoint of the azure storage account."
        },
        "tableEndpoint": {
          "type": "string",
          "description": "The table endpoint of the azure storage account."
        }
      },
      "description": "The storage account information for storing Service Fabric diagnostic logs."
    },
    "DurabilityLevel": {
      "type": "string",
      "description": "The durability level of the node type. Learn about [DurabilityLevel](https://docs.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity).\n\n  - Bronze - No privileges. This is the default.\n  - Silver - The infrastructure jobs can be paused for a duration of 10 minutes per UD.\n  - 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.\n",
      "enum": [
        "Bronze",
        "Silver",
        "Gold"
      ]
    },
    "EndpointRangeDescription": {
      "type": "object",
      "required": [
        "endPort",
        "startPort"
      ],
      "properties": {
        "startPort": {
          "type": "integer",
          "format": "int32",
          "description": "Starting port of a range of ports"
        },
        "endPort": {
          "type": "integer",
          "format": "int32",
          "description": "End port of a range of ports"
        }
      },
      "description": "Port range details"
    },
    "NodeTypeDescription": {
      "type": "object",
      "required": [
        "clientConnectionEndpointPort",
        "httpGatewayEndpointPort",
        "isPrimary",
        "name",
        "vmInstanceCount"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the node type."
        },
        "placementProperties": {
          "type": "object",
          "description": "The placement tags applied to nodes in the node type, which can be used to indicate where certain services (workload) should run.",
          "additionalProperties": {
            "type": "string",
            "description": "Placement tag value"
          }
        },
        "capacities": {
          "type": "object",
          "description": "The capacity tags applied to the nodes in the node type, the cluster resource manager uses these tags to understand how much resource a node has.",
          "additionalProperties": {
            "type": "string",
            "description": "Capacity tag value"
          }
        },
        "clientConnectionEndpointPort": {
          "type": "integer",
          "format": "int32",
          "description": "The TCP cluster management endpoint port."
        },
        "httpGatewayEndpointPort": {
          "type": "integer",
          "format": "int32",
          "description": "The HTTP cluster management endpoint port."
        },
        "durabilityLevel": {
          "$ref": "#/$defs/DurabilityLevel"
        },
        "applicationPorts": {
          "$ref": "#/$defs/EndpointRangeDescription"
        },
        "ephemeralPorts": {
          "$ref": "#/$defs/EndpointRangeDescription"
        },
        "isPrimary": {
          "type": "boolean",
          "description": "The node type on which system services will run. Only one node type should be marked as primary. Primary node type cannot be deleted or changed for existing clusters."
        },
        "vmInstanceCount": {
          "type": "integer",
          "format": "int32",
          "description": "VMInstanceCount should be 1 to n, where n indicates the number of VM instances corresponding to this nodeType. VMInstanceCount = 0 can be done only in these scenarios: NodeType is a secondary nodeType. Durability = Bronze or Durability >= Bronze and InfrastructureServiceManager = true. If VMInstanceCount = 0, implies the VMs for this nodeType will not be used for the initial cluster size computation.",
          "minimum": 0,
          "maximum": 2147483647
        },
        "reverseProxyEndpointPort": {
          "type": "integer",
          "format": "int32",
          "description": "The endpoint used by reverse proxy."
        },
        "isStateless": {
          "type": "boolean",
          "description": "Indicates if the node type can only host Stateless workloads."
        },
        "multipleAvailabilityZones": {
          "type": "boolean",
          "description": "Indicates if the node type is enabled to support multiple zones."
        }
      },
      "description": "Describes a node type in the cluster, each node type represents sub set of nodes in the cluster."
    },
    "Notification": {
      "type": "object",
      "required": [
        "isEnabled",
        "notificationCategory",
        "notificationLevel",
        "notificationTargets"
      ],
      "properties": {
        "isEnabled": {
          "type": "boolean",
          "description": "Indicates if the notification is enabled."
        },
        "notificationCategory": {
          "type": "string",
          "description": "The category of notification.",
          "enum": [
            "WaveProgress"
          ],
          "x-ms-enum": {
            "name": "notificationCategory",
            "modelAsString": true,
            "values": [
              {
                "value": "WaveProgress",
                "description": "Notification will be regarding wave progress."
              }
            ]
          }
        },
        "notificationLevel": {
          "type": "string",
          "description": "The level of notification.",
          "enum": [
            "Critical",
            "All"
          ],
          "x-ms-enum": {
            "name": "notificationLevel",
            "modelAsString": true,
            "values": [
              {
                "value": "Critical",
                "description": "Receive only critical notifications."
              },
              {
                "value": "All",
                "description": "Receive all notifications."
              }
            ]
          }
        },
        "notificationTargets": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/NotificationTarget"
          },
          "description": "List of targets that subscribe to the notification."
        }
      },
      "description": "Describes the notification channel for cluster events."
    },
    "NotificationTarget": {
      "type": "object",
      "required": [
        "notificationChannel",
        "receivers"
      ],
      "properties": {
        "notificationChannel": {
          "type": "string",
          "description": "The notification channel indicates the type of receivers subscribed to the notification, either user or subscription.",
          "enum": [
            "EmailUser",
            "EmailSubscription"
          ],
          "x-ms-enum": {
            "name": "notificationChannel",
            "modelAsString": true,
            "values": [
              {
                "value": "EmailUser",
                "description": "For email user receivers. In this case, the parameter receivers should be a list of email addresses that will receive the notifications."
              },
              {
                "value": "EmailSubscription",
                "description": "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."
              }
            ]
          }
        },
        "receivers": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of targets that subscribe to the notification."
        }
      },
      "description": "Describes the notification target properties."
    },
    "ReliabilityLevel": {
      "type": "string",
      "description": "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).\n\n  - None - Run the System services with a target replica set count of 1. This should only be used for test clusters.\n  - Bronze - Run the System services with a target replica set count of 3. This should only be used for test clusters.\n  - Silver - Run the System services with a target replica set count of 5.\n  - Gold - Run the System services with a target replica set count of 7.\n  - Platinum - Run the System services with a target replica set count of 9.\n",
      "enum": [
        "None",
        "Bronze",
        "Silver",
        "Gold",
        "Platinum"
      ]
    },
    "Resource": {
      "type": "object",
      "required": [
        "location"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Azure resource identifier.",
          "readOnly": true
        },
        "name": {
          "type": "string",
          "description": "Azure resource name.",
          "readOnly": true
        },
        "type": {
          "type": "string",
          "description": "Azure resource type.",
          "readOnly": true
        },
        "location": {
          "type": "string",
          "description": "Azure resource location.",
          "x-ms-mutability": [
            "create",
            "read"
          ]
        },
        "tags": {
          "type": "object",
          "description": "Azure resource tags.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "etag": {
          "type": "string",
          "description": "Azure resource etag.",
          "readOnly": true
        },
        "systemData": {
          "$ref": "#/$defs/SystemData"
        }
      },
      "description": "The resource model definition.",
      "x-ms-azure-resource": true
    },
    "ServerCertificateCommonName": {
      "type": "object",
      "description": "Describes the server certificate details using common name.",
      "required": [
        "certificateCommonName",
        "certificateIssuerThumbprint"
      ],
      "properties": {
        "certificateCommonName": {
          "type": "string",
          "description": "The common name of the server certificate."
        },
        "certificateIssuerThumbprint": {
          "type": "string",
          "description": "The issuer thumbprint of the server certificate."
        }
      }
    },
    "ServerCertificateCommonNames": {
      "type": "object",
      "description": "Describes a list of server certificates referenced by common name that are used to secure the cluster.",
      "properties": {
        "commonNames": {
          "type": "array",
          "description": "The list of server certificates referenced by common name that are used to secure the cluster.",
          "items": {
            "$ref": "#/$defs/ServerCertificateCommonName"
          }
        },
        "x509StoreName": {
          "$ref": "#/$defs/StoreName"
        }
      }
    },
    "ServiceTypeDeltaHealthPolicy": {
      "type": "object",
      "description": "Represents the delta health policy used to evaluate the health of services belonging to a service type when upgrading the cluster.\n",
      "properties": {
        "maxPercentDeltaUnhealthyServices": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum allowed percentage of services health degradation allowed during cluster upgrades.\nThe delta is measured between the state of the services at the beginning of upgrade and the state of the services at the time of the health evaluation.\nThe check is performed after every upgrade domain upgrade completion to make sure the global state of the cluster is within tolerated limits.\n",
          "default": 0,
          "minimum": 0,
          "maximum": 100
        }
      }
    },
    "ServiceTypeDeltaHealthPolicyMap": {
      "type": "object",
      "description": "Defines a map that contains specific delta health policies for different service types.\nEach entry specifies as key the service type name and as value a ServiceTypeDeltaHealthPolicy used to evaluate the service health when upgrading the cluster.\nThe map is empty by default.\n",
      "additionalProperties": {
        "$ref": "#/$defs/ServiceTypeDeltaHealthPolicy"
      }
    },
    "ServiceTypeHealthPolicy": {
      "type": "object",
      "description": "Represents the health policy used to evaluate the health of services belonging to a service type.\n",
      "properties": {
        "maxPercentUnhealthyServices": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum percentage of services allowed to be unhealthy before your application is considered in error.\n",
          "default": 0,
          "minimum": 0,
          "maximum": 100
        }
      }
    },
    "ServiceTypeHealthPolicyMap": {
      "type": "object",
      "description": "Defines a ServiceTypeHealthPolicy per service type name.\n\nThe entries in the map replace the default service type health policy for each specified service type.\nFor example, in an application that contains both a stateless gateway service type and a stateful engine service type, the health policies for the stateless and stateful services can be configured differently.\nWith policy per service type, there's more granular control of the health of the service.\n\nIf no policy is specified for a service type name, the DefaultServiceTypeHealthPolicy is used for evaluation.\n",
      "additionalProperties": {
        "$ref": "#/$defs/ServiceTypeHealthPolicy"
      }
    },
    "SettingsParameterDescription": {
      "type": "object",
      "required": [
        "name",
        "value"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The parameter name of fabric setting."
        },
        "value": {
          "type": "string",
          "description": "The parameter value of fabric setting."
        }
      },
      "description": "Describes a parameter in fabric settings of the cluster."
    },
    "SettingsSectionDescription": {
      "type": "object",
      "required": [
        "name",
        "parameters"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The section name of the fabric settings."
        },
        "parameters": {
          "type": "array",
          "description": "The collection of parameters in the section.",
          "items": {
            "$ref": "#/$defs/SettingsParameterDescription"
          }
        }
      },
      "description": "Describes a section in the fabric settings of the cluster."
    },
    "SfZonalUpgradeMode": {
      "type": "string",
      "enum": [
        "Parallel",
        "Hierarchical"
      ],
      "x-ms-enum": {
        "name": "sfZonalUpgradeMode",
        "modelAsString": true,
        "values": [
          {
            "value": "Parallel",
            "description": "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."
          },
          {
            "value": "Hierarchical",
            "description": "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."
          }
        ]
      },
      "description": "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."
    },
    "StoreName": {
      "type": "string",
      "description": "The local certificate store location.",
      "enum": [
        "AddressBook",
        "AuthRoot",
        "CertificateAuthority",
        "Disallowed",
        "My",
        "Root",
        "TrustedPeople",
        "TrustedPublisher"
      ]
    },
    "SystemData": {
      "description": "Metadata pertaining to creation and last modification of the resource.",
      "type": "object",
      "readOnly": true,
      "properties": {
        "createdBy": {
          "type": "string",
          "description": "The identity that created the resource."
        },
        "createdByType": {
          "type": "string",
          "description": "The type of identity that created the resource."
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "The timestamp of resource creation (UTC)."
        },
        "lastModifiedBy": {
          "type": "string",
          "description": "The identity that last modified the resource."
        },
        "lastModifiedByType": {
          "type": "string",
          "description": "The type of identity that last modified the resource."
        },
        "lastModifiedAt": {
          "type": "string",
          "format": "date-time",
          "description": "The timestamp of resource last modification (UTC)."
        }
      }
    },
    "UpgradeMode": {
      "type": "string",
      "description": "The upgrade mode of the cluster when new Service Fabric runtime version is available.",
      "enum": [
        "Automatic",
        "Manual"
      ],
      "default": "Automatic",
      "x-ms-enum": {
        "name": "UpgradeMode",
        "modelAsString": true,
        "values": [
          {
            "value": "Automatic",
            "description": "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."
          },
          {
            "value": "Manual",
            "description": "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."
          }
        ]
      }
    },
    "VmssZonalUpgradeMode": {
      "type": "string",
      "enum": [
        "Parallel",
        "Hierarchical"
      ],
      "x-ms-enum": {
        "name": "vmssZonalUpgradeMode",
        "modelAsString": true,
        "values": [
          {
            "value": "Parallel",
            "description": "Updates will happen in all Availability Zones at once for the virtual machine scale sets."
          },
          {
            "value": "Hierarchical",
            "description": "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."
          }
        ]
      },
      "description": "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."
    }
  }
}