# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities

__all__ = [
    'HBaseClusterComponentVersionArgs',
    'HBaseClusterComponentVersionArgsDict',
    'HBaseClusterComputeIsolationArgs',
    'HBaseClusterComputeIsolationArgsDict',
    'HBaseClusterDiskEncryptionArgs',
    'HBaseClusterDiskEncryptionArgsDict',
    'HBaseClusterExtensionArgs',
    'HBaseClusterExtensionArgsDict',
    'HBaseClusterGatewayArgs',
    'HBaseClusterGatewayArgsDict',
    'HBaseClusterMetastoresArgs',
    'HBaseClusterMetastoresArgsDict',
    'HBaseClusterMetastoresAmbariArgs',
    'HBaseClusterMetastoresAmbariArgsDict',
    'HBaseClusterMetastoresHiveArgs',
    'HBaseClusterMetastoresHiveArgsDict',
    'HBaseClusterMetastoresOozieArgs',
    'HBaseClusterMetastoresOozieArgsDict',
    'HBaseClusterMonitorArgs',
    'HBaseClusterMonitorArgsDict',
    'HBaseClusterNetworkArgs',
    'HBaseClusterNetworkArgsDict',
    'HBaseClusterPrivateLinkConfigurationArgs',
    'HBaseClusterPrivateLinkConfigurationArgsDict',
    'HBaseClusterPrivateLinkConfigurationIpConfigurationArgs',
    'HBaseClusterPrivateLinkConfigurationIpConfigurationArgsDict',
    'HBaseClusterRolesArgs',
    'HBaseClusterRolesArgsDict',
    'HBaseClusterRolesHeadNodeArgs',
    'HBaseClusterRolesHeadNodeArgsDict',
    'HBaseClusterRolesHeadNodeScriptActionArgs',
    'HBaseClusterRolesHeadNodeScriptActionArgsDict',
    'HBaseClusterRolesWorkerNodeArgs',
    'HBaseClusterRolesWorkerNodeArgsDict',
    'HBaseClusterRolesWorkerNodeAutoscaleArgs',
    'HBaseClusterRolesWorkerNodeAutoscaleArgsDict',
    'HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict',
    'HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict',
    'HBaseClusterRolesWorkerNodeScriptActionArgs',
    'HBaseClusterRolesWorkerNodeScriptActionArgsDict',
    'HBaseClusterRolesZookeeperNodeArgs',
    'HBaseClusterRolesZookeeperNodeArgsDict',
    'HBaseClusterRolesZookeeperNodeScriptActionArgs',
    'HBaseClusterRolesZookeeperNodeScriptActionArgsDict',
    'HBaseClusterSecurityProfileArgs',
    'HBaseClusterSecurityProfileArgsDict',
    'HBaseClusterStorageAccountArgs',
    'HBaseClusterStorageAccountArgsDict',
    'HBaseClusterStorageAccountGen2Args',
    'HBaseClusterStorageAccountGen2ArgsDict',
    'HadoopClusterComponentVersionArgs',
    'HadoopClusterComponentVersionArgsDict',
    'HadoopClusterComputeIsolationArgs',
    'HadoopClusterComputeIsolationArgsDict',
    'HadoopClusterDiskEncryptionArgs',
    'HadoopClusterDiskEncryptionArgsDict',
    'HadoopClusterExtensionArgs',
    'HadoopClusterExtensionArgsDict',
    'HadoopClusterGatewayArgs',
    'HadoopClusterGatewayArgsDict',
    'HadoopClusterMetastoresArgs',
    'HadoopClusterMetastoresArgsDict',
    'HadoopClusterMetastoresAmbariArgs',
    'HadoopClusterMetastoresAmbariArgsDict',
    'HadoopClusterMetastoresHiveArgs',
    'HadoopClusterMetastoresHiveArgsDict',
    'HadoopClusterMetastoresOozieArgs',
    'HadoopClusterMetastoresOozieArgsDict',
    'HadoopClusterMonitorArgs',
    'HadoopClusterMonitorArgsDict',
    'HadoopClusterNetworkArgs',
    'HadoopClusterNetworkArgsDict',
    'HadoopClusterPrivateLinkConfigurationArgs',
    'HadoopClusterPrivateLinkConfigurationArgsDict',
    'HadoopClusterPrivateLinkConfigurationIpConfigurationArgs',
    'HadoopClusterPrivateLinkConfigurationIpConfigurationArgsDict',
    'HadoopClusterRolesArgs',
    'HadoopClusterRolesArgsDict',
    'HadoopClusterRolesEdgeNodeArgs',
    'HadoopClusterRolesEdgeNodeArgsDict',
    'HadoopClusterRolesEdgeNodeHttpsEndpointArgs',
    'HadoopClusterRolesEdgeNodeHttpsEndpointArgsDict',
    'HadoopClusterRolesEdgeNodeInstallScriptActionArgs',
    'HadoopClusterRolesEdgeNodeInstallScriptActionArgsDict',
    'HadoopClusterRolesEdgeNodeUninstallScriptActionArgs',
    'HadoopClusterRolesEdgeNodeUninstallScriptActionArgsDict',
    'HadoopClusterRolesHeadNodeArgs',
    'HadoopClusterRolesHeadNodeArgsDict',
    'HadoopClusterRolesHeadNodeScriptActionArgs',
    'HadoopClusterRolesHeadNodeScriptActionArgsDict',
    'HadoopClusterRolesWorkerNodeArgs',
    'HadoopClusterRolesWorkerNodeArgsDict',
    'HadoopClusterRolesWorkerNodeAutoscaleArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleArgsDict',
    'HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleCapacityArgsDict',
    'HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict',
    'HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict',
    'HadoopClusterRolesWorkerNodeScriptActionArgs',
    'HadoopClusterRolesWorkerNodeScriptActionArgsDict',
    'HadoopClusterRolesZookeeperNodeArgs',
    'HadoopClusterRolesZookeeperNodeArgsDict',
    'HadoopClusterRolesZookeeperNodeScriptActionArgs',
    'HadoopClusterRolesZookeeperNodeScriptActionArgsDict',
    'HadoopClusterSecurityProfileArgs',
    'HadoopClusterSecurityProfileArgsDict',
    'HadoopClusterStorageAccountArgs',
    'HadoopClusterStorageAccountArgsDict',
    'HadoopClusterStorageAccountGen2Args',
    'HadoopClusterStorageAccountGen2ArgsDict',
    'InteractiveQueryClusterComponentVersionArgs',
    'InteractiveQueryClusterComponentVersionArgsDict',
    'InteractiveQueryClusterComputeIsolationArgs',
    'InteractiveQueryClusterComputeIsolationArgsDict',
    'InteractiveQueryClusterDiskEncryptionArgs',
    'InteractiveQueryClusterDiskEncryptionArgsDict',
    'InteractiveQueryClusterExtensionArgs',
    'InteractiveQueryClusterExtensionArgsDict',
    'InteractiveQueryClusterGatewayArgs',
    'InteractiveQueryClusterGatewayArgsDict',
    'InteractiveQueryClusterMetastoresArgs',
    'InteractiveQueryClusterMetastoresArgsDict',
    'InteractiveQueryClusterMetastoresAmbariArgs',
    'InteractiveQueryClusterMetastoresAmbariArgsDict',
    'InteractiveQueryClusterMetastoresHiveArgs',
    'InteractiveQueryClusterMetastoresHiveArgsDict',
    'InteractiveQueryClusterMetastoresOozieArgs',
    'InteractiveQueryClusterMetastoresOozieArgsDict',
    'InteractiveQueryClusterMonitorArgs',
    'InteractiveQueryClusterMonitorArgsDict',
    'InteractiveQueryClusterNetworkArgs',
    'InteractiveQueryClusterNetworkArgsDict',
    'InteractiveQueryClusterPrivateLinkConfigurationArgs',
    'InteractiveQueryClusterPrivateLinkConfigurationArgsDict',
    'InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgs',
    'InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgsDict',
    'InteractiveQueryClusterRolesArgs',
    'InteractiveQueryClusterRolesArgsDict',
    'InteractiveQueryClusterRolesHeadNodeArgs',
    'InteractiveQueryClusterRolesHeadNodeArgsDict',
    'InteractiveQueryClusterRolesHeadNodeScriptActionArgs',
    'InteractiveQueryClusterRolesHeadNodeScriptActionArgsDict',
    'InteractiveQueryClusterRolesWorkerNodeArgs',
    'InteractiveQueryClusterRolesWorkerNodeArgsDict',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleArgsDict',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict',
    'InteractiveQueryClusterRolesWorkerNodeScriptActionArgs',
    'InteractiveQueryClusterRolesWorkerNodeScriptActionArgsDict',
    'InteractiveQueryClusterRolesZookeeperNodeArgs',
    'InteractiveQueryClusterRolesZookeeperNodeArgsDict',
    'InteractiveQueryClusterRolesZookeeperNodeScriptActionArgs',
    'InteractiveQueryClusterRolesZookeeperNodeScriptActionArgsDict',
    'InteractiveQueryClusterSecurityProfileArgs',
    'InteractiveQueryClusterSecurityProfileArgsDict',
    'InteractiveQueryClusterStorageAccountArgs',
    'InteractiveQueryClusterStorageAccountArgsDict',
    'InteractiveQueryClusterStorageAccountGen2Args',
    'InteractiveQueryClusterStorageAccountGen2ArgsDict',
    'KafkaClusterComponentVersionArgs',
    'KafkaClusterComponentVersionArgsDict',
    'KafkaClusterComputeIsolationArgs',
    'KafkaClusterComputeIsolationArgsDict',
    'KafkaClusterDiskEncryptionArgs',
    'KafkaClusterDiskEncryptionArgsDict',
    'KafkaClusterExtensionArgs',
    'KafkaClusterExtensionArgsDict',
    'KafkaClusterGatewayArgs',
    'KafkaClusterGatewayArgsDict',
    'KafkaClusterMetastoresArgs',
    'KafkaClusterMetastoresArgsDict',
    'KafkaClusterMetastoresAmbariArgs',
    'KafkaClusterMetastoresAmbariArgsDict',
    'KafkaClusterMetastoresHiveArgs',
    'KafkaClusterMetastoresHiveArgsDict',
    'KafkaClusterMetastoresOozieArgs',
    'KafkaClusterMetastoresOozieArgsDict',
    'KafkaClusterMonitorArgs',
    'KafkaClusterMonitorArgsDict',
    'KafkaClusterNetworkArgs',
    'KafkaClusterNetworkArgsDict',
    'KafkaClusterPrivateLinkConfigurationArgs',
    'KafkaClusterPrivateLinkConfigurationArgsDict',
    'KafkaClusterPrivateLinkConfigurationIpConfigurationArgs',
    'KafkaClusterPrivateLinkConfigurationIpConfigurationArgsDict',
    'KafkaClusterRestProxyArgs',
    'KafkaClusterRestProxyArgsDict',
    'KafkaClusterRolesArgs',
    'KafkaClusterRolesArgsDict',
    'KafkaClusterRolesHeadNodeArgs',
    'KafkaClusterRolesHeadNodeArgsDict',
    'KafkaClusterRolesHeadNodeScriptActionArgs',
    'KafkaClusterRolesHeadNodeScriptActionArgsDict',
    'KafkaClusterRolesKafkaManagementNodeArgs',
    'KafkaClusterRolesKafkaManagementNodeArgsDict',
    'KafkaClusterRolesKafkaManagementNodeScriptActionArgs',
    'KafkaClusterRolesKafkaManagementNodeScriptActionArgsDict',
    'KafkaClusterRolesWorkerNodeArgs',
    'KafkaClusterRolesWorkerNodeArgsDict',
    'KafkaClusterRolesWorkerNodeScriptActionArgs',
    'KafkaClusterRolesWorkerNodeScriptActionArgsDict',
    'KafkaClusterRolesZookeeperNodeArgs',
    'KafkaClusterRolesZookeeperNodeArgsDict',
    'KafkaClusterRolesZookeeperNodeScriptActionArgs',
    'KafkaClusterRolesZookeeperNodeScriptActionArgsDict',
    'KafkaClusterSecurityProfileArgs',
    'KafkaClusterSecurityProfileArgsDict',
    'KafkaClusterStorageAccountArgs',
    'KafkaClusterStorageAccountArgsDict',
    'KafkaClusterStorageAccountGen2Args',
    'KafkaClusterStorageAccountGen2ArgsDict',
    'SparkClusterComponentVersionArgs',
    'SparkClusterComponentVersionArgsDict',
    'SparkClusterComputeIsolationArgs',
    'SparkClusterComputeIsolationArgsDict',
    'SparkClusterDiskEncryptionArgs',
    'SparkClusterDiskEncryptionArgsDict',
    'SparkClusterExtensionArgs',
    'SparkClusterExtensionArgsDict',
    'SparkClusterGatewayArgs',
    'SparkClusterGatewayArgsDict',
    'SparkClusterMetastoresArgs',
    'SparkClusterMetastoresArgsDict',
    'SparkClusterMetastoresAmbariArgs',
    'SparkClusterMetastoresAmbariArgsDict',
    'SparkClusterMetastoresHiveArgs',
    'SparkClusterMetastoresHiveArgsDict',
    'SparkClusterMetastoresOozieArgs',
    'SparkClusterMetastoresOozieArgsDict',
    'SparkClusterMonitorArgs',
    'SparkClusterMonitorArgsDict',
    'SparkClusterNetworkArgs',
    'SparkClusterNetworkArgsDict',
    'SparkClusterPrivateLinkConfigurationArgs',
    'SparkClusterPrivateLinkConfigurationArgsDict',
    'SparkClusterPrivateLinkConfigurationIpConfigurationArgs',
    'SparkClusterPrivateLinkConfigurationIpConfigurationArgsDict',
    'SparkClusterRolesArgs',
    'SparkClusterRolesArgsDict',
    'SparkClusterRolesHeadNodeArgs',
    'SparkClusterRolesHeadNodeArgsDict',
    'SparkClusterRolesHeadNodeScriptActionArgs',
    'SparkClusterRolesHeadNodeScriptActionArgsDict',
    'SparkClusterRolesWorkerNodeArgs',
    'SparkClusterRolesWorkerNodeArgsDict',
    'SparkClusterRolesWorkerNodeAutoscaleArgs',
    'SparkClusterRolesWorkerNodeAutoscaleArgsDict',
    'SparkClusterRolesWorkerNodeAutoscaleCapacityArgs',
    'SparkClusterRolesWorkerNodeAutoscaleCapacityArgsDict',
    'SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict',
    'SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict',
    'SparkClusterRolesWorkerNodeScriptActionArgs',
    'SparkClusterRolesWorkerNodeScriptActionArgsDict',
    'SparkClusterRolesZookeeperNodeArgs',
    'SparkClusterRolesZookeeperNodeArgsDict',
    'SparkClusterRolesZookeeperNodeScriptActionArgs',
    'SparkClusterRolesZookeeperNodeScriptActionArgsDict',
    'SparkClusterSecurityProfileArgs',
    'SparkClusterSecurityProfileArgsDict',
    'SparkClusterStorageAccountArgs',
    'SparkClusterStorageAccountArgsDict',
    'SparkClusterStorageAccountGen2Args',
    'SparkClusterStorageAccountGen2ArgsDict',
]

MYPY = False

if not MYPY:
    class HBaseClusterComponentVersionArgsDict(TypedDict):
        hbase: pulumi.Input[str]
        """
        The version of HBase which should be used for this HDInsight HBase Cluster. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterComponentVersionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterComponentVersionArgs:
    def __init__(__self__, *,
                 hbase: pulumi.Input[str]):
        """
        :param pulumi.Input[str] hbase: The version of HBase which should be used for this HDInsight HBase Cluster. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "hbase", hbase)

    @property
    @pulumi.getter
    def hbase(self) -> pulumi.Input[str]:
        """
        The version of HBase which should be used for this HDInsight HBase Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "hbase")

    @hbase.setter
    def hbase(self, value: pulumi.Input[str]):
        pulumi.set(self, "hbase", value)


if not MYPY:
    class HBaseClusterComputeIsolationArgsDict(TypedDict):
        compute_isolation_enabled: NotRequired[pulumi.Input[bool]]
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        host_sku: NotRequired[pulumi.Input[str]]
        """
        The name of the host SKU.
        """
elif False:
    HBaseClusterComputeIsolationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterComputeIsolationArgs:
    def __init__(__self__, *,
                 compute_isolation_enabled: Optional[pulumi.Input[bool]] = None,
                 host_sku: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] compute_isolation_enabled: This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        :param pulumi.Input[str] host_sku: The name of the host SKU.
        """
        if compute_isolation_enabled is not None:
            pulumi.set(__self__, "compute_isolation_enabled", compute_isolation_enabled)
        if host_sku is not None:
            pulumi.set(__self__, "host_sku", host_sku)

    @property
    @pulumi.getter(name="computeIsolationEnabled")
    def compute_isolation_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        return pulumi.get(self, "compute_isolation_enabled")

    @compute_isolation_enabled.setter
    def compute_isolation_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "compute_isolation_enabled", value)

    @property
    @pulumi.getter(name="hostSku")
    def host_sku(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the host SKU.
        """
        return pulumi.get(self, "host_sku")

    @host_sku.setter
    def host_sku(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_sku", value)


if not MYPY:
    class HBaseClusterDiskEncryptionArgsDict(TypedDict):
        encryption_algorithm: NotRequired[pulumi.Input[str]]
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        encryption_at_host_enabled: NotRequired[pulumi.Input[bool]]
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        key_vault_key_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the key vault key.
        """
        key_vault_managed_identity_id: NotRequired[pulumi.Input[str]]
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
elif False:
    HBaseClusterDiskEncryptionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterDiskEncryptionArgs:
    def __init__(__self__, *,
                 encryption_algorithm: Optional[pulumi.Input[str]] = None,
                 encryption_at_host_enabled: Optional[pulumi.Input[bool]] = None,
                 key_vault_key_id: Optional[pulumi.Input[str]] = None,
                 key_vault_managed_identity_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] encryption_algorithm: This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        :param pulumi.Input[bool] encryption_at_host_enabled: This is indicator to show whether resource disk encryption is enabled.
        :param pulumi.Input[str] key_vault_key_id: The ID of the key vault key.
        :param pulumi.Input[str] key_vault_managed_identity_id: This is the resource ID of Managed Identity used to access the key vault.
        """
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if encryption_at_host_enabled is not None:
            pulumi.set(__self__, "encryption_at_host_enabled", encryption_at_host_enabled)
        if key_vault_key_id is not None:
            pulumi.set(__self__, "key_vault_key_id", key_vault_key_id)
        if key_vault_managed_identity_id is not None:
            pulumi.set(__self__, "key_vault_managed_identity_id", key_vault_managed_identity_id)

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[pulumi.Input[str]]:
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        return pulumi.get(self, "encryption_algorithm")

    @encryption_algorithm.setter
    def encryption_algorithm(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "encryption_algorithm", value)

    @property
    @pulumi.getter(name="encryptionAtHostEnabled")
    def encryption_at_host_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        return pulumi.get(self, "encryption_at_host_enabled")

    @encryption_at_host_enabled.setter
    def encryption_at_host_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "encryption_at_host_enabled", value)

    @property
    @pulumi.getter(name="keyVaultKeyId")
    def key_vault_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the key vault key.
        """
        return pulumi.get(self, "key_vault_key_id")

    @key_vault_key_id.setter
    def key_vault_key_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_key_id", value)

    @property
    @pulumi.getter(name="keyVaultManagedIdentityId")
    def key_vault_managed_identity_id(self) -> Optional[pulumi.Input[str]]:
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
        return pulumi.get(self, "key_vault_managed_identity_id")

    @key_vault_managed_identity_id.setter
    def key_vault_managed_identity_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_managed_identity_id", value)


if not MYPY:
    class HBaseClusterExtensionArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The workspace ID of the log analytics extension.
        """
        primary_key: pulumi.Input[str]
        """
        The workspace key of the log analytics extension.
        """
elif False:
    HBaseClusterExtensionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterExtensionArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The workspace ID of the log analytics extension.
        :param pulumi.Input[str] primary_key: The workspace key of the log analytics extension.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The workspace ID of the log analytics extension.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The workspace key of the log analytics extension.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class HBaseClusterGatewayArgsDict(TypedDict):
        password: pulumi.Input[str]
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        username: pulumi.Input[str]
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterGatewayArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
               
               > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HBaseClusterMetastoresArgsDict(TypedDict):
        ambari: NotRequired[pulumi.Input['HBaseClusterMetastoresAmbariArgsDict']]
        """
        An `ambari` block as defined below.
        """
        hive: NotRequired[pulumi.Input['HBaseClusterMetastoresHiveArgsDict']]
        """
        A `hive` block as defined below.
        """
        oozie: NotRequired[pulumi.Input['HBaseClusterMetastoresOozieArgsDict']]
        """
        An `oozie` block as defined below.
        """
elif False:
    HBaseClusterMetastoresArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterMetastoresArgs:
    def __init__(__self__, *,
                 ambari: Optional[pulumi.Input['HBaseClusterMetastoresAmbariArgs']] = None,
                 hive: Optional[pulumi.Input['HBaseClusterMetastoresHiveArgs']] = None,
                 oozie: Optional[pulumi.Input['HBaseClusterMetastoresOozieArgs']] = None):
        """
        :param pulumi.Input['HBaseClusterMetastoresAmbariArgs'] ambari: An `ambari` block as defined below.
        :param pulumi.Input['HBaseClusterMetastoresHiveArgs'] hive: A `hive` block as defined below.
        :param pulumi.Input['HBaseClusterMetastoresOozieArgs'] oozie: An `oozie` block as defined below.
        """
        if ambari is not None:
            pulumi.set(__self__, "ambari", ambari)
        if hive is not None:
            pulumi.set(__self__, "hive", hive)
        if oozie is not None:
            pulumi.set(__self__, "oozie", oozie)

    @property
    @pulumi.getter
    def ambari(self) -> Optional[pulumi.Input['HBaseClusterMetastoresAmbariArgs']]:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

    @ambari.setter
    def ambari(self, value: Optional[pulumi.Input['HBaseClusterMetastoresAmbariArgs']]):
        pulumi.set(self, "ambari", value)

    @property
    @pulumi.getter
    def hive(self) -> Optional[pulumi.Input['HBaseClusterMetastoresHiveArgs']]:
        """
        A `hive` block as defined below.
        """
        return pulumi.get(self, "hive")

    @hive.setter
    def hive(self, value: Optional[pulumi.Input['HBaseClusterMetastoresHiveArgs']]):
        pulumi.set(self, "hive", value)

    @property
    @pulumi.getter
    def oozie(self) -> Optional[pulumi.Input['HBaseClusterMetastoresOozieArgs']]:
        """
        An `oozie` block as defined below.
        """
        return pulumi.get(self, "oozie")

    @oozie.setter
    def oozie(self, value: Optional[pulumi.Input['HBaseClusterMetastoresOozieArgs']]):
        pulumi.set(self, "oozie", value)


if not MYPY:
    class HBaseClusterMetastoresAmbariArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterMetastoresAmbariArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterMetastoresAmbariArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HBaseClusterMetastoresHiveArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterMetastoresHiveArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterMetastoresHiveArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HBaseClusterMetastoresOozieArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterMetastoresOozieArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterMetastoresOozieArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HBaseClusterMonitorArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        primary_key: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace key.
        """
elif False:
    HBaseClusterMonitorArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterMonitorArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param pulumi.Input[str] primary_key: The Operations Management Suite (OMS) workspace key.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace key.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class HBaseClusterNetworkArgsDict(TypedDict):
        connection_direction: NotRequired[pulumi.Input[str]]
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enable the private link the `connection_direction` must be set to `Outbound`.
        """
        private_link_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterNetworkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterNetworkArgs:
    def __init__(__self__, *,
                 connection_direction: Optional[pulumi.Input[str]] = None,
                 private_link_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] connection_direction: The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.
               
               > **NOTE:** To enable the private link the `connection_direction` must be set to `Outbound`.
        :param pulumi.Input[bool] private_link_enabled: Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        if connection_direction is not None:
            pulumi.set(__self__, "connection_direction", connection_direction)
        if private_link_enabled is not None:
            pulumi.set(__self__, "private_link_enabled", private_link_enabled)

    @property
    @pulumi.getter(name="connectionDirection")
    def connection_direction(self) -> Optional[pulumi.Input[str]]:
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enable the private link the `connection_direction` must be set to `Outbound`.
        """
        return pulumi.get(self, "connection_direction")

    @connection_direction.setter
    def connection_direction(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "connection_direction", value)

    @property
    @pulumi.getter(name="privateLinkEnabled")
    def private_link_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "private_link_enabled")

    @private_link_enabled.setter
    def private_link_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "private_link_enabled", value)


if not MYPY:
    class HBaseClusterPrivateLinkConfigurationArgsDict(TypedDict):
        group_id: pulumi.Input[str]
        """
        The ID of the private link service group.
        """
        ip_configuration: pulumi.Input['HBaseClusterPrivateLinkConfigurationIpConfigurationArgsDict']
        name: pulumi.Input[str]
        """
        The name of the private link configuration.
        """
elif False:
    HBaseClusterPrivateLinkConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterPrivateLinkConfigurationArgs:
    def __init__(__self__, *,
                 group_id: pulumi.Input[str],
                 ip_configuration: pulumi.Input['HBaseClusterPrivateLinkConfigurationIpConfigurationArgs'],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] group_id: The ID of the private link service group.
        :param pulumi.Input[str] name: The name of the private link configuration.
        """
        pulumi.set(__self__, "group_id", group_id)
        pulumi.set(__self__, "ip_configuration", ip_configuration)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> pulumi.Input[str]:
        """
        The ID of the private link service group.
        """
        return pulumi.get(self, "group_id")

    @group_id.setter
    def group_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "group_id", value)

    @property
    @pulumi.getter(name="ipConfiguration")
    def ip_configuration(self) -> pulumi.Input['HBaseClusterPrivateLinkConfigurationIpConfigurationArgs']:
        return pulumi.get(self, "ip_configuration")

    @ip_configuration.setter
    def ip_configuration(self, value: pulumi.Input['HBaseClusterPrivateLinkConfigurationIpConfigurationArgs']):
        pulumi.set(self, "ip_configuration", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the private link configuration.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


if not MYPY:
    class HBaseClusterPrivateLinkConfigurationIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name for this HDInsight HBase Cluster. Changing this forces a new resource to be created.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether this IP configuration is primary.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address of the IP configuration.
        """
        private_ip_allocation_method: NotRequired[pulumi.Input[str]]
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
elif False:
    HBaseClusterPrivateLinkConfigurationIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterPrivateLinkConfigurationIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 primary: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_allocation_method: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name for this HDInsight HBase Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] primary: Indicates whether this IP configuration is primary.
        :param pulumi.Input[str] private_ip_address: The private IP address of the IP configuration.
        :param pulumi.Input[str] private_ip_allocation_method: The private IP allocation method. The only possible value now is `Dynamic`.
        """
        pulumi.set(__self__, "name", name)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_allocation_method is not None:
            pulumi.set(__self__, "private_ip_allocation_method", private_ip_allocation_method)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name for this HDInsight HBase Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether this IP configuration is primary.
        """
        return pulumi.get(self, "primary")

    @primary.setter
    def primary(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "primary", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address of the IP configuration.
        """
        return pulumi.get(self, "private_ip_address")

    @private_ip_address.setter
    def private_ip_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_address", value)

    @property
    @pulumi.getter(name="privateIpAllocationMethod")
    def private_ip_allocation_method(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        return pulumi.get(self, "private_ip_allocation_method")

    @private_ip_allocation_method.setter
    def private_ip_allocation_method(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_allocation_method", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


if not MYPY:
    class HBaseClusterRolesArgsDict(TypedDict):
        head_node: pulumi.Input['HBaseClusterRolesHeadNodeArgsDict']
        """
        A `head_node` block as defined above.
        """
        worker_node: pulumi.Input['HBaseClusterRolesWorkerNodeArgsDict']
        """
        A `worker_node` block as defined below.
        """
        zookeeper_node: pulumi.Input['HBaseClusterRolesZookeeperNodeArgsDict']
        """
        A `zookeeper_node` block as defined below.
        """
elif False:
    HBaseClusterRolesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['HBaseClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['HBaseClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['HBaseClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['HBaseClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['HBaseClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['HBaseClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)

    @property
    @pulumi.getter(name="headNode")
    def head_node(self) -> pulumi.Input['HBaseClusterRolesHeadNodeArgs']:
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

    @head_node.setter
    def head_node(self, value: pulumi.Input['HBaseClusterRolesHeadNodeArgs']):
        pulumi.set(self, "head_node", value)

    @property
    @pulumi.getter(name="workerNode")
    def worker_node(self) -> pulumi.Input['HBaseClusterRolesWorkerNodeArgs']:
        """
        A `worker_node` block as defined below.
        """
        return pulumi.get(self, "worker_node")

    @worker_node.setter
    def worker_node(self, value: pulumi.Input['HBaseClusterRolesWorkerNodeArgs']):
        pulumi.set(self, "worker_node", value)

    @property
    @pulumi.getter(name="zookeeperNode")
    def zookeeper_node(self) -> pulumi.Input['HBaseClusterRolesZookeeperNodeArgs']:
        """
        A `zookeeper_node` block as defined below.
        """
        return pulumi.get(self, "zookeeper_node")

    @zookeeper_node.setter
    def zookeeper_node(self, value: pulumi.Input['HBaseClusterRolesZookeeperNodeArgs']):
        pulumi.set(self, "zookeeper_node", value)


if not MYPY:
    class HBaseClusterRolesHeadNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_E96a_V4`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesHeadNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterRolesHeadNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesHeadNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_E96a_V4`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesHeadNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_E96a_V4`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesHeadNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesHeadNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class HBaseClusterRolesHeadNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    HBaseClusterRolesHeadNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesHeadNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HBaseClusterRolesWorkerNodeArgsDict(TypedDict):
        target_instance_count: pulumi.Input[int]
        """
        The number of instances which should be run for the Worker Nodes.
        """
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        autoscale: NotRequired[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgsDict']]
        """
        A `autoscale` block as defined below.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterRolesWorkerNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def autoscale(self) -> Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgs']]:
        """
        A `autoscale` block as defined below.
        """
        return pulumi.get(self, "autoscale")

    @autoscale.setter
    def autoscale(self, value: Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgs']]):
        pulumi.set(self, "autoscale", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class HBaseClusterRolesWorkerNodeAutoscaleArgsDict(TypedDict):
        recurrence: NotRequired[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict']]
        """
        A `recurrence` block as defined below.

        > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
elif False:
    HBaseClusterRolesWorkerNodeAutoscaleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesWorkerNodeAutoscaleArgs:
    def __init__(__self__, *,
                 recurrence: Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs']] = None):
        """
        :param pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs'] recurrence: A `recurrence` block as defined below.
               
               > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
        if recurrence is not None:
            pulumi.set(__self__, "recurrence", recurrence)

    @property
    @pulumi.getter
    def recurrence(self) -> Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]:
        """
        A `recurrence` block as defined below.

        > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
        return pulumi.get(self, "recurrence")

    @recurrence.setter
    def recurrence(self, value: Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]):
        pulumi.set(self, "recurrence", value)


if not MYPY:
    class HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict(TypedDict):
        schedules: pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict']]]
        """
        A list of `schedule` blocks as defined below.
        """
        timezone: pulumi.Input[str]
        """
        The time zone for the autoscale schedule times.
        """
elif False:
    HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs:
    def __init__(__self__, *,
                 schedules: pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]],
                 timezone: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]] schedules: A list of `schedule` blocks as defined below.
        :param pulumi.Input[str] timezone: The time zone for the autoscale schedule times.
        """
        pulumi.set(__self__, "schedules", schedules)
        pulumi.set(__self__, "timezone", timezone)

    @property
    @pulumi.getter
    def schedules(self) -> pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]:
        """
        A list of `schedule` blocks as defined below.
        """
        return pulumi.get(self, "schedules")

    @schedules.setter
    def schedules(self, value: pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]):
        pulumi.set(self, "schedules", value)

    @property
    @pulumi.getter
    def timezone(self) -> pulumi.Input[str]:
        """
        The time zone for the autoscale schedule times.
        """
        return pulumi.get(self, "timezone")

    @timezone.setter
    def timezone(self, value: pulumi.Input[str]):
        pulumi.set(self, "timezone", value)


if not MYPY:
    class HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict(TypedDict):
        days: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        target_instance_count: pulumi.Input[int]
        """
        The number of worker nodes to autoscale at the specified time.
        """
        time: pulumi.Input[str]
        """
        The time of day to perform the autoscale in 24hour format.
        """
elif False:
    HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        return pulumi.get(self, "days")

    @days.setter
    def days(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "days", value)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of worker nodes to autoscale at the specified time.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def time(self) -> pulumi.Input[str]:
        """
        The time of day to perform the autoscale in 24hour format.
        """
        return pulumi.get(self, "time")

    @time.setter
    def time(self, value: pulumi.Input[str]):
        pulumi.set(self, "time", value)


if not MYPY:
    class HBaseClusterRolesWorkerNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    HBaseClusterRolesWorkerNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesWorkerNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HBaseClusterRolesZookeeperNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesZookeeperNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterRolesZookeeperNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesZookeeperNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesZookeeperNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesZookeeperNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HBaseClusterRolesZookeeperNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class HBaseClusterRolesZookeeperNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    HBaseClusterRolesZookeeperNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterRolesZookeeperNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HBaseClusterSecurityProfileArgsDict(TypedDict):
        aadds_resource_id: pulumi.Input[str]
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        domain_name: pulumi.Input[str]
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_user_password: pulumi.Input[str]
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_username: pulumi.Input[str]
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        msi_resource_id: pulumi.Input[str]
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        cluster_users_group_dns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterSecurityProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterSecurityProfileArgs:
    def __init__(__self__, *,
                 aadds_resource_id: pulumi.Input[str],
                 domain_name: pulumi.Input[str],
                 domain_user_password: pulumi.Input[str],
                 domain_username: pulumi.Input[str],
                 ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]],
                 msi_resource_id: pulumi.Input[str],
                 cluster_users_group_dns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] aadds_resource_id: The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_name: The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_user_password: The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_username: The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ldaps_urls: A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        :param pulumi.Input[str] msi_resource_id: The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cluster_users_group_dns: A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "aadds_resource_id", aadds_resource_id)
        pulumi.set(__self__, "domain_name", domain_name)
        pulumi.set(__self__, "domain_user_password", domain_user_password)
        pulumi.set(__self__, "domain_username", domain_username)
        pulumi.set(__self__, "ldaps_urls", ldaps_urls)
        pulumi.set(__self__, "msi_resource_id", msi_resource_id)
        if cluster_users_group_dns is not None:
            pulumi.set(__self__, "cluster_users_group_dns", cluster_users_group_dns)

    @property
    @pulumi.getter(name="aaddsResourceId")
    def aadds_resource_id(self) -> pulumi.Input[str]:
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "aadds_resource_id")

    @aadds_resource_id.setter
    def aadds_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "aadds_resource_id", value)

    @property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> pulumi.Input[str]:
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_name", value)

    @property
    @pulumi.getter(name="domainUserPassword")
    def domain_user_password(self) -> pulumi.Input[str]:
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_user_password")

    @domain_user_password.setter
    def domain_user_password(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_user_password", value)

    @property
    @pulumi.getter(name="domainUsername")
    def domain_username(self) -> pulumi.Input[str]:
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_username")

    @domain_username.setter
    def domain_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_username", value)

    @property
    @pulumi.getter(name="ldapsUrls")
    def ldaps_urls(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ldaps_urls")

    @ldaps_urls.setter
    def ldaps_urls(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "ldaps_urls", value)

    @property
    @pulumi.getter(name="msiResourceId")
    def msi_resource_id(self) -> pulumi.Input[str]:
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "msi_resource_id")

    @msi_resource_id.setter
    def msi_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "msi_resource_id", value)

    @property
    @pulumi.getter(name="clusterUsersGroupDns")
    def cluster_users_group_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "cluster_users_group_dns")

    @cluster_users_group_dns.setter
    def cluster_users_group_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cluster_users_group_dns", value)


if not MYPY:
    class HBaseClusterStorageAccountArgsDict(TypedDict):
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        storage_account_key: pulumi.Input[str]
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        storage_container_id: pulumi.Input[str]
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterStorageAccountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str],
                 storage_resource_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "storage_account_key", storage_account_key)
        pulumi.set(__self__, "storage_container_id", storage_container_id)
        if storage_resource_id is not None:
            pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> pulumi.Input[str]:
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_key")

    @storage_account_key.setter
    def storage_account_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_account_key", value)

    @property
    @pulumi.getter(name="storageContainerId")
    def storage_container_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "storage_container_id")

    @storage_container_id.setter
    def storage_container_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_container_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class HBaseClusterStorageAccountGen2ArgsDict(TypedDict):
        filesystem_id: pulumi.Input[str]
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        managed_identity_resource_id: pulumi.Input[str]
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: pulumi.Input[str]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    HBaseClusterStorageAccountGen2ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HBaseClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="filesystemId")
    def filesystem_id(self) -> pulumi.Input[str]:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

    @filesystem_id.setter
    def filesystem_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "filesystem_id", value)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="managedIdentityResourceId")
    def managed_identity_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "managed_identity_resource_id")

    @managed_identity_resource_id.setter
    def managed_identity_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "managed_identity_resource_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class HadoopClusterComponentVersionArgsDict(TypedDict):
        hadoop: pulumi.Input[str]
        """
        The version of Hadoop which should be used for this HDInsight Hadoop Cluster. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterComponentVersionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterComponentVersionArgs:
    def __init__(__self__, *,
                 hadoop: pulumi.Input[str]):
        """
        :param pulumi.Input[str] hadoop: The version of Hadoop which should be used for this HDInsight Hadoop Cluster. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "hadoop", hadoop)

    @property
    @pulumi.getter
    def hadoop(self) -> pulumi.Input[str]:
        """
        The version of Hadoop which should be used for this HDInsight Hadoop Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "hadoop")

    @hadoop.setter
    def hadoop(self, value: pulumi.Input[str]):
        pulumi.set(self, "hadoop", value)


if not MYPY:
    class HadoopClusterComputeIsolationArgsDict(TypedDict):
        compute_isolation_enabled: NotRequired[pulumi.Input[bool]]
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        host_sku: NotRequired[pulumi.Input[str]]
        """
        The name of the host SKU.
        """
elif False:
    HadoopClusterComputeIsolationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterComputeIsolationArgs:
    def __init__(__self__, *,
                 compute_isolation_enabled: Optional[pulumi.Input[bool]] = None,
                 host_sku: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] compute_isolation_enabled: This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        :param pulumi.Input[str] host_sku: The name of the host SKU.
        """
        if compute_isolation_enabled is not None:
            pulumi.set(__self__, "compute_isolation_enabled", compute_isolation_enabled)
        if host_sku is not None:
            pulumi.set(__self__, "host_sku", host_sku)

    @property
    @pulumi.getter(name="computeIsolationEnabled")
    def compute_isolation_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        return pulumi.get(self, "compute_isolation_enabled")

    @compute_isolation_enabled.setter
    def compute_isolation_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "compute_isolation_enabled", value)

    @property
    @pulumi.getter(name="hostSku")
    def host_sku(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the host SKU.
        """
        return pulumi.get(self, "host_sku")

    @host_sku.setter
    def host_sku(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_sku", value)


if not MYPY:
    class HadoopClusterDiskEncryptionArgsDict(TypedDict):
        encryption_algorithm: NotRequired[pulumi.Input[str]]
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        encryption_at_host_enabled: NotRequired[pulumi.Input[bool]]
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        key_vault_key_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the key vault key.
        """
        key_vault_managed_identity_id: NotRequired[pulumi.Input[str]]
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
elif False:
    HadoopClusterDiskEncryptionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterDiskEncryptionArgs:
    def __init__(__self__, *,
                 encryption_algorithm: Optional[pulumi.Input[str]] = None,
                 encryption_at_host_enabled: Optional[pulumi.Input[bool]] = None,
                 key_vault_key_id: Optional[pulumi.Input[str]] = None,
                 key_vault_managed_identity_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] encryption_algorithm: This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        :param pulumi.Input[bool] encryption_at_host_enabled: This is indicator to show whether resource disk encryption is enabled.
        :param pulumi.Input[str] key_vault_key_id: The ID of the key vault key.
        :param pulumi.Input[str] key_vault_managed_identity_id: This is the resource ID of Managed Identity used to access the key vault.
        """
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if encryption_at_host_enabled is not None:
            pulumi.set(__self__, "encryption_at_host_enabled", encryption_at_host_enabled)
        if key_vault_key_id is not None:
            pulumi.set(__self__, "key_vault_key_id", key_vault_key_id)
        if key_vault_managed_identity_id is not None:
            pulumi.set(__self__, "key_vault_managed_identity_id", key_vault_managed_identity_id)

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[pulumi.Input[str]]:
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        return pulumi.get(self, "encryption_algorithm")

    @encryption_algorithm.setter
    def encryption_algorithm(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "encryption_algorithm", value)

    @property
    @pulumi.getter(name="encryptionAtHostEnabled")
    def encryption_at_host_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        return pulumi.get(self, "encryption_at_host_enabled")

    @encryption_at_host_enabled.setter
    def encryption_at_host_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "encryption_at_host_enabled", value)

    @property
    @pulumi.getter(name="keyVaultKeyId")
    def key_vault_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the key vault key.
        """
        return pulumi.get(self, "key_vault_key_id")

    @key_vault_key_id.setter
    def key_vault_key_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_key_id", value)

    @property
    @pulumi.getter(name="keyVaultManagedIdentityId")
    def key_vault_managed_identity_id(self) -> Optional[pulumi.Input[str]]:
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
        return pulumi.get(self, "key_vault_managed_identity_id")

    @key_vault_managed_identity_id.setter
    def key_vault_managed_identity_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_managed_identity_id", value)


if not MYPY:
    class HadoopClusterExtensionArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The workspace ID of the log analytics extension.
        """
        primary_key: pulumi.Input[str]
        """
        The workspace key of the log analytics extension.
        """
elif False:
    HadoopClusterExtensionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterExtensionArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The workspace ID of the log analytics extension.
        :param pulumi.Input[str] primary_key: The workspace key of the log analytics extension.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The workspace ID of the log analytics extension.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The workspace key of the log analytics extension.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class HadoopClusterGatewayArgsDict(TypedDict):
        password: pulumi.Input[str]
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        username: pulumi.Input[str]
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterGatewayArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
               
               > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HadoopClusterMetastoresArgsDict(TypedDict):
        ambari: NotRequired[pulumi.Input['HadoopClusterMetastoresAmbariArgsDict']]
        """
        An `ambari` block as defined below.
        """
        hive: NotRequired[pulumi.Input['HadoopClusterMetastoresHiveArgsDict']]
        """
        A `hive` block as defined below.
        """
        oozie: NotRequired[pulumi.Input['HadoopClusterMetastoresOozieArgsDict']]
        """
        An `oozie` block as defined below.
        """
elif False:
    HadoopClusterMetastoresArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterMetastoresArgs:
    def __init__(__self__, *,
                 ambari: Optional[pulumi.Input['HadoopClusterMetastoresAmbariArgs']] = None,
                 hive: Optional[pulumi.Input['HadoopClusterMetastoresHiveArgs']] = None,
                 oozie: Optional[pulumi.Input['HadoopClusterMetastoresOozieArgs']] = None):
        """
        :param pulumi.Input['HadoopClusterMetastoresAmbariArgs'] ambari: An `ambari` block as defined below.
        :param pulumi.Input['HadoopClusterMetastoresHiveArgs'] hive: A `hive` block as defined below.
        :param pulumi.Input['HadoopClusterMetastoresOozieArgs'] oozie: An `oozie` block as defined below.
        """
        if ambari is not None:
            pulumi.set(__self__, "ambari", ambari)
        if hive is not None:
            pulumi.set(__self__, "hive", hive)
        if oozie is not None:
            pulumi.set(__self__, "oozie", oozie)

    @property
    @pulumi.getter
    def ambari(self) -> Optional[pulumi.Input['HadoopClusterMetastoresAmbariArgs']]:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

    @ambari.setter
    def ambari(self, value: Optional[pulumi.Input['HadoopClusterMetastoresAmbariArgs']]):
        pulumi.set(self, "ambari", value)

    @property
    @pulumi.getter
    def hive(self) -> Optional[pulumi.Input['HadoopClusterMetastoresHiveArgs']]:
        """
        A `hive` block as defined below.
        """
        return pulumi.get(self, "hive")

    @hive.setter
    def hive(self, value: Optional[pulumi.Input['HadoopClusterMetastoresHiveArgs']]):
        pulumi.set(self, "hive", value)

    @property
    @pulumi.getter
    def oozie(self) -> Optional[pulumi.Input['HadoopClusterMetastoresOozieArgs']]:
        """
        An `oozie` block as defined below.
        """
        return pulumi.get(self, "oozie")

    @oozie.setter
    def oozie(self, value: Optional[pulumi.Input['HadoopClusterMetastoresOozieArgs']]):
        pulumi.set(self, "oozie", value)


if not MYPY:
    class HadoopClusterMetastoresAmbariArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterMetastoresAmbariArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterMetastoresAmbariArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HadoopClusterMetastoresHiveArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterMetastoresHiveArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterMetastoresHiveArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HadoopClusterMetastoresOozieArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterMetastoresOozieArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterMetastoresOozieArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class HadoopClusterMonitorArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        primary_key: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace key.
        """
elif False:
    HadoopClusterMonitorArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterMonitorArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param pulumi.Input[str] primary_key: The Operations Management Suite (OMS) workspace key.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace key.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class HadoopClusterNetworkArgsDict(TypedDict):
        connection_direction: NotRequired[pulumi.Input[str]]
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        private_link_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterNetworkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterNetworkArgs:
    def __init__(__self__, *,
                 connection_direction: Optional[pulumi.Input[str]] = None,
                 private_link_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] connection_direction: The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.
               
               > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        :param pulumi.Input[bool] private_link_enabled: Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        if connection_direction is not None:
            pulumi.set(__self__, "connection_direction", connection_direction)
        if private_link_enabled is not None:
            pulumi.set(__self__, "private_link_enabled", private_link_enabled)

    @property
    @pulumi.getter(name="connectionDirection")
    def connection_direction(self) -> Optional[pulumi.Input[str]]:
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        return pulumi.get(self, "connection_direction")

    @connection_direction.setter
    def connection_direction(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "connection_direction", value)

    @property
    @pulumi.getter(name="privateLinkEnabled")
    def private_link_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "private_link_enabled")

    @private_link_enabled.setter
    def private_link_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "private_link_enabled", value)


if not MYPY:
    class HadoopClusterPrivateLinkConfigurationArgsDict(TypedDict):
        group_id: pulumi.Input[str]
        """
        The ID of the private link service group.
        """
        ip_configuration: pulumi.Input['HadoopClusterPrivateLinkConfigurationIpConfigurationArgsDict']
        name: pulumi.Input[str]
        """
        The name of the private link configuration.
        """
elif False:
    HadoopClusterPrivateLinkConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterPrivateLinkConfigurationArgs:
    def __init__(__self__, *,
                 group_id: pulumi.Input[str],
                 ip_configuration: pulumi.Input['HadoopClusterPrivateLinkConfigurationIpConfigurationArgs'],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] group_id: The ID of the private link service group.
        :param pulumi.Input[str] name: The name of the private link configuration.
        """
        pulumi.set(__self__, "group_id", group_id)
        pulumi.set(__self__, "ip_configuration", ip_configuration)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> pulumi.Input[str]:
        """
        The ID of the private link service group.
        """
        return pulumi.get(self, "group_id")

    @group_id.setter
    def group_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "group_id", value)

    @property
    @pulumi.getter(name="ipConfiguration")
    def ip_configuration(self) -> pulumi.Input['HadoopClusterPrivateLinkConfigurationIpConfigurationArgs']:
        return pulumi.get(self, "ip_configuration")

    @ip_configuration.setter
    def ip_configuration(self, value: pulumi.Input['HadoopClusterPrivateLinkConfigurationIpConfigurationArgs']):
        pulumi.set(self, "ip_configuration", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the private link configuration.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


if not MYPY:
    class HadoopClusterPrivateLinkConfigurationIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name for this HDInsight Hadoop Cluster. Changing this forces a new resource to be created.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether this IP configuration is primary.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        private_ip_allocation_method: NotRequired[pulumi.Input[str]]
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
elif False:
    HadoopClusterPrivateLinkConfigurationIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterPrivateLinkConfigurationIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 primary: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_allocation_method: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name for this HDInsight Hadoop Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] primary: Indicates whether this IP configuration is primary.
        :param pulumi.Input[str] private_ip_allocation_method: The private IP allocation method. The only possible value now is `Dynamic`.
        """
        pulumi.set(__self__, "name", name)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_allocation_method is not None:
            pulumi.set(__self__, "private_ip_allocation_method", private_ip_allocation_method)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name for this HDInsight Hadoop Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether this IP configuration is primary.
        """
        return pulumi.get(self, "primary")

    @primary.setter
    def primary(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "primary", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "private_ip_address")

    @private_ip_address.setter
    def private_ip_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_address", value)

    @property
    @pulumi.getter(name="privateIpAllocationMethod")
    def private_ip_allocation_method(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        return pulumi.get(self, "private_ip_allocation_method")

    @private_ip_allocation_method.setter
    def private_ip_allocation_method(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_allocation_method", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


if not MYPY:
    class HadoopClusterRolesArgsDict(TypedDict):
        head_node: pulumi.Input['HadoopClusterRolesHeadNodeArgsDict']
        """
        A `head_node` block as defined above.
        """
        worker_node: pulumi.Input['HadoopClusterRolesWorkerNodeArgsDict']
        """
        A `worker_node` block as defined below.
        """
        zookeeper_node: pulumi.Input['HadoopClusterRolesZookeeperNodeArgsDict']
        """
        A `zookeeper_node` block as defined below.
        """
        edge_node: NotRequired[pulumi.Input['HadoopClusterRolesEdgeNodeArgsDict']]
        """
        A `edge_node` block as defined below.
        """
elif False:
    HadoopClusterRolesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['HadoopClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['HadoopClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['HadoopClusterRolesZookeeperNodeArgs'],
                 edge_node: Optional[pulumi.Input['HadoopClusterRolesEdgeNodeArgs']] = None):
        """
        :param pulumi.Input['HadoopClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['HadoopClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['HadoopClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        :param pulumi.Input['HadoopClusterRolesEdgeNodeArgs'] edge_node: A `edge_node` block as defined below.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)
        if edge_node is not None:
            pulumi.set(__self__, "edge_node", edge_node)

    @property
    @pulumi.getter(name="headNode")
    def head_node(self) -> pulumi.Input['HadoopClusterRolesHeadNodeArgs']:
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

    @head_node.setter
    def head_node(self, value: pulumi.Input['HadoopClusterRolesHeadNodeArgs']):
        pulumi.set(self, "head_node", value)

    @property
    @pulumi.getter(name="workerNode")
    def worker_node(self) -> pulumi.Input['HadoopClusterRolesWorkerNodeArgs']:
        """
        A `worker_node` block as defined below.
        """
        return pulumi.get(self, "worker_node")

    @worker_node.setter
    def worker_node(self, value: pulumi.Input['HadoopClusterRolesWorkerNodeArgs']):
        pulumi.set(self, "worker_node", value)

    @property
    @pulumi.getter(name="zookeeperNode")
    def zookeeper_node(self) -> pulumi.Input['HadoopClusterRolesZookeeperNodeArgs']:
        """
        A `zookeeper_node` block as defined below.
        """
        return pulumi.get(self, "zookeeper_node")

    @zookeeper_node.setter
    def zookeeper_node(self, value: pulumi.Input['HadoopClusterRolesZookeeperNodeArgs']):
        pulumi.set(self, "zookeeper_node", value)

    @property
    @pulumi.getter(name="edgeNode")
    def edge_node(self) -> Optional[pulumi.Input['HadoopClusterRolesEdgeNodeArgs']]:
        """
        A `edge_node` block as defined below.
        """
        return pulumi.get(self, "edge_node")

    @edge_node.setter
    def edge_node(self, value: Optional[pulumi.Input['HadoopClusterRolesEdgeNodeArgs']]):
        pulumi.set(self, "edge_node", value)


if not MYPY:
    class HadoopClusterRolesEdgeNodeArgsDict(TypedDict):
        install_script_actions: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgsDict']]]
        """
        A `install_script_action` block as defined below.
        """
        target_instance_count: pulumi.Input[int]
        """
        The number of instances which should be run for the Worker Nodes.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Edge Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`.
        """
        https_endpoints: NotRequired[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeHttpsEndpointArgsDict']]]]
        """
        The HTTPS Connectivity Endpoint for this HDInsight Hadoop Cluster. One or more `https_endpoints` blocks as defined below.
        """
        uninstall_script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeUninstallScriptActionArgsDict']]]]
        """
        A `uninstall_script_actions` block as defined below.
        """
elif False:
    HadoopClusterRolesEdgeNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesEdgeNodeArgs:
    def __init__(__self__, *,
                 install_script_actions: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]],
                 target_instance_count: pulumi.Input[int],
                 vm_size: pulumi.Input[str],
                 https_endpoints: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeHttpsEndpointArgs']]]] = None,
                 uninstall_script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeUninstallScriptActionArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]] install_script_actions: A `install_script_action` block as defined below.
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Edge Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`.
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeHttpsEndpointArgs']]] https_endpoints: The HTTPS Connectivity Endpoint for this HDInsight Hadoop Cluster. One or more `https_endpoints` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeUninstallScriptActionArgs']]] uninstall_script_actions: A `uninstall_script_actions` block as defined below.
        """
        pulumi.set(__self__, "install_script_actions", install_script_actions)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "vm_size", vm_size)
        if https_endpoints is not None:
            pulumi.set(__self__, "https_endpoints", https_endpoints)
        if uninstall_script_actions is not None:
            pulumi.set(__self__, "uninstall_script_actions", uninstall_script_actions)

    @property
    @pulumi.getter(name="installScriptActions")
    def install_script_actions(self) -> pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]]:
        """
        A `install_script_action` block as defined below.
        """
        return pulumi.get(self, "install_script_actions")

    @install_script_actions.setter
    def install_script_actions(self, value: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]]):
        pulumi.set(self, "install_script_actions", value)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Edge Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter(name="httpsEndpoints")
    def https_endpoints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeHttpsEndpointArgs']]]]:
        """
        The HTTPS Connectivity Endpoint for this HDInsight Hadoop Cluster. One or more `https_endpoints` blocks as defined below.
        """
        return pulumi.get(self, "https_endpoints")

    @https_endpoints.setter
    def https_endpoints(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeHttpsEndpointArgs']]]]):
        pulumi.set(self, "https_endpoints", value)

    @property
    @pulumi.getter(name="uninstallScriptActions")
    def uninstall_script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeUninstallScriptActionArgs']]]]:
        """
        A `uninstall_script_actions` block as defined below.
        """
        return pulumi.get(self, "uninstall_script_actions")

    @uninstall_script_actions.setter
    def uninstall_script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeUninstallScriptActionArgs']]]]):
        pulumi.set(self, "uninstall_script_actions", value)


if not MYPY:
    class HadoopClusterRolesEdgeNodeHttpsEndpointArgsDict(TypedDict):
        access_modes: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of access modes for the application.
        """
        destination_port: NotRequired[pulumi.Input[int]]
        """
        The destination port to connect to.
        """
        disable_gateway_auth: NotRequired[pulumi.Input[bool]]
        """
        The value indicates whether the gateway authentication is enabled or not.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private ip address of the endpoint.
        """
        sub_domain_suffix: NotRequired[pulumi.Input[str]]
        """
        The application's subdomain suffix.
        """
elif False:
    HadoopClusterRolesEdgeNodeHttpsEndpointArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesEdgeNodeHttpsEndpointArgs:
    def __init__(__self__, *,
                 access_modes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 destination_port: Optional[pulumi.Input[int]] = None,
                 disable_gateway_auth: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 sub_domain_suffix: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] access_modes: A list of access modes for the application.
        :param pulumi.Input[int] destination_port: The destination port to connect to.
        :param pulumi.Input[bool] disable_gateway_auth: The value indicates whether the gateway authentication is enabled or not.
        :param pulumi.Input[str] private_ip_address: The private ip address of the endpoint.
        :param pulumi.Input[str] sub_domain_suffix: The application's subdomain suffix.
        """
        if access_modes is not None:
            pulumi.set(__self__, "access_modes", access_modes)
        if destination_port is not None:
            pulumi.set(__self__, "destination_port", destination_port)
        if disable_gateway_auth is not None:
            pulumi.set(__self__, "disable_gateway_auth", disable_gateway_auth)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if sub_domain_suffix is not None:
            pulumi.set(__self__, "sub_domain_suffix", sub_domain_suffix)

    @property
    @pulumi.getter(name="accessModes")
    def access_modes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of access modes for the application.
        """
        return pulumi.get(self, "access_modes")

    @access_modes.setter
    def access_modes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "access_modes", value)

    @property
    @pulumi.getter(name="destinationPort")
    def destination_port(self) -> Optional[pulumi.Input[int]]:
        """
        The destination port to connect to.
        """
        return pulumi.get(self, "destination_port")

    @destination_port.setter
    def destination_port(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "destination_port", value)

    @property
    @pulumi.getter(name="disableGatewayAuth")
    def disable_gateway_auth(self) -> Optional[pulumi.Input[bool]]:
        """
        The value indicates whether the gateway authentication is enabled or not.
        """
        return pulumi.get(self, "disable_gateway_auth")

    @disable_gateway_auth.setter
    def disable_gateway_auth(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "disable_gateway_auth", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private ip address of the endpoint.
        """
        return pulumi.get(self, "private_ip_address")

    @private_ip_address.setter
    def private_ip_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_address", value)

    @property
    @pulumi.getter(name="subDomainSuffix")
    def sub_domain_suffix(self) -> Optional[pulumi.Input[str]]:
        """
        The application's subdomain suffix.
        """
        return pulumi.get(self, "sub_domain_suffix")

    @sub_domain_suffix.setter
    def sub_domain_suffix(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sub_domain_suffix", value)


if not MYPY:
    class HadoopClusterRolesEdgeNodeInstallScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the install script action.
        """
        uri: pulumi.Input[str]
        """
        The URI pointing to the script to run during the installation of the edge node.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script.
        """
elif False:
    HadoopClusterRolesEdgeNodeInstallScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesEdgeNodeInstallScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the install script action.
        :param pulumi.Input[str] uri: The URI pointing to the script to run during the installation of the edge node.
        :param pulumi.Input[str] parameters: The parameters for the script.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the install script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI pointing to the script to run during the installation of the edge node.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HadoopClusterRolesEdgeNodeUninstallScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the uninstall script action.
        """
        uri: pulumi.Input[str]
        """
        The URI pointing to the script to run during the installation of the edge node.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script.
        """
elif False:
    HadoopClusterRolesEdgeNodeUninstallScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesEdgeNodeUninstallScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the uninstall script action.
        :param pulumi.Input[str] uri: The URI pointing to the script to run during the installation of the edge node.
        :param pulumi.Input[str] parameters: The parameters for the script.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the uninstall script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI pointing to the script to run during the installation of the edge node.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HadoopClusterRolesHeadNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesHeadNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterRolesHeadNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesHeadNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesHeadNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesHeadNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesHeadNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class HadoopClusterRolesHeadNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    HadoopClusterRolesHeadNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesHeadNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HadoopClusterRolesWorkerNodeArgsDict(TypedDict):
        target_instance_count: pulumi.Input[int]
        """
        The number of instances which should be run for the Worker Nodes.
        """
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        autoscale: NotRequired[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgsDict']]
        """
        A `autoscale` block as defined below.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterRolesWorkerNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def autoscale(self) -> Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgs']]:
        """
        A `autoscale` block as defined below.
        """
        return pulumi.get(self, "autoscale")

    @autoscale.setter
    def autoscale(self, value: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgs']]):
        pulumi.set(self, "autoscale", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class HadoopClusterRolesWorkerNodeAutoscaleArgsDict(TypedDict):
        capacity: NotRequired[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleCapacityArgsDict']]
        """
        A `capacity` block as defined below.
        """
        recurrence: NotRequired[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict']]
        """
        A `recurrence` block as defined below.

        > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
elif False:
    HadoopClusterRolesWorkerNodeAutoscaleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesWorkerNodeAutoscaleArgs:
    def __init__(__self__, *,
                 capacity: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs']] = None,
                 recurrence: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs']] = None):
        """
        :param pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs'] capacity: A `capacity` block as defined below.
        :param pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs'] recurrence: A `recurrence` block as defined below.
               
               > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
        if capacity is not None:
            pulumi.set(__self__, "capacity", capacity)
        if recurrence is not None:
            pulumi.set(__self__, "recurrence", recurrence)

    @property
    @pulumi.getter
    def capacity(self) -> Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs']]:
        """
        A `capacity` block as defined below.
        """
        return pulumi.get(self, "capacity")

    @capacity.setter
    def capacity(self, value: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs']]):
        pulumi.set(self, "capacity", value)

    @property
    @pulumi.getter
    def recurrence(self) -> Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]:
        """
        A `recurrence` block as defined below.

        > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
        return pulumi.get(self, "recurrence")

    @recurrence.setter
    def recurrence(self, value: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]):
        pulumi.set(self, "recurrence", value)


if not MYPY:
    class HadoopClusterRolesWorkerNodeAutoscaleCapacityArgsDict(TypedDict):
        max_instance_count: pulumi.Input[int]
        """
        The maximum number of worker nodes to autoscale to based on the cluster's activity.
        """
        min_instance_count: pulumi.Input[int]
        """
        The minimum number of worker nodes to autoscale to based on the cluster's activity.
        """
elif False:
    HadoopClusterRolesWorkerNodeAutoscaleCapacityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs:
    def __init__(__self__, *,
                 max_instance_count: pulumi.Input[int],
                 min_instance_count: pulumi.Input[int]):
        """
        :param pulumi.Input[int] max_instance_count: The maximum number of worker nodes to autoscale to based on the cluster's activity.
        :param pulumi.Input[int] min_instance_count: The minimum number of worker nodes to autoscale to based on the cluster's activity.
        """
        pulumi.set(__self__, "max_instance_count", max_instance_count)
        pulumi.set(__self__, "min_instance_count", min_instance_count)

    @property
    @pulumi.getter(name="maxInstanceCount")
    def max_instance_count(self) -> pulumi.Input[int]:
        """
        The maximum number of worker nodes to autoscale to based on the cluster's activity.
        """
        return pulumi.get(self, "max_instance_count")

    @max_instance_count.setter
    def max_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "max_instance_count", value)

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> pulumi.Input[int]:
        """
        The minimum number of worker nodes to autoscale to based on the cluster's activity.
        """
        return pulumi.get(self, "min_instance_count")

    @min_instance_count.setter
    def min_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "min_instance_count", value)


if not MYPY:
    class HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict(TypedDict):
        schedules: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict']]]
        """
        A list of `schedule` blocks as defined below.
        """
        timezone: pulumi.Input[str]
        """
        The time zone for the autoscale schedule times.
        """
elif False:
    HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs:
    def __init__(__self__, *,
                 schedules: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]],
                 timezone: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]] schedules: A list of `schedule` blocks as defined below.
        :param pulumi.Input[str] timezone: The time zone for the autoscale schedule times.
        """
        pulumi.set(__self__, "schedules", schedules)
        pulumi.set(__self__, "timezone", timezone)

    @property
    @pulumi.getter
    def schedules(self) -> pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]:
        """
        A list of `schedule` blocks as defined below.
        """
        return pulumi.get(self, "schedules")

    @schedules.setter
    def schedules(self, value: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]):
        pulumi.set(self, "schedules", value)

    @property
    @pulumi.getter
    def timezone(self) -> pulumi.Input[str]:
        """
        The time zone for the autoscale schedule times.
        """
        return pulumi.get(self, "timezone")

    @timezone.setter
    def timezone(self, value: pulumi.Input[str]):
        pulumi.set(self, "timezone", value)


if not MYPY:
    class HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict(TypedDict):
        days: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        target_instance_count: pulumi.Input[int]
        """
        The number of worker nodes to autoscale at the specified time.
        """
        time: pulumi.Input[str]
        """
        The time of day to perform the autoscale in 24hour format.
        """
elif False:
    HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        return pulumi.get(self, "days")

    @days.setter
    def days(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "days", value)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of worker nodes to autoscale at the specified time.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def time(self) -> pulumi.Input[str]:
        """
        The time of day to perform the autoscale in 24hour format.
        """
        return pulumi.get(self, "time")

    @time.setter
    def time(self, value: pulumi.Input[str]):
        pulumi.set(self, "time", value)


if not MYPY:
    class HadoopClusterRolesWorkerNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    HadoopClusterRolesWorkerNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesWorkerNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HadoopClusterRolesZookeeperNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesZookeeperNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterRolesZookeeperNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesZookeeperNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesZookeeperNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesZookeeperNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesZookeeperNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class HadoopClusterRolesZookeeperNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    HadoopClusterRolesZookeeperNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterRolesZookeeperNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class HadoopClusterSecurityProfileArgsDict(TypedDict):
        aadds_resource_id: pulumi.Input[str]
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        domain_name: pulumi.Input[str]
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_user_password: pulumi.Input[str]
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_username: pulumi.Input[str]
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        msi_resource_id: pulumi.Input[str]
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        cluster_users_group_dns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterSecurityProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterSecurityProfileArgs:
    def __init__(__self__, *,
                 aadds_resource_id: pulumi.Input[str],
                 domain_name: pulumi.Input[str],
                 domain_user_password: pulumi.Input[str],
                 domain_username: pulumi.Input[str],
                 ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]],
                 msi_resource_id: pulumi.Input[str],
                 cluster_users_group_dns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] aadds_resource_id: The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_name: The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_user_password: The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_username: The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ldaps_urls: A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        :param pulumi.Input[str] msi_resource_id: The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cluster_users_group_dns: A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "aadds_resource_id", aadds_resource_id)
        pulumi.set(__self__, "domain_name", domain_name)
        pulumi.set(__self__, "domain_user_password", domain_user_password)
        pulumi.set(__self__, "domain_username", domain_username)
        pulumi.set(__self__, "ldaps_urls", ldaps_urls)
        pulumi.set(__self__, "msi_resource_id", msi_resource_id)
        if cluster_users_group_dns is not None:
            pulumi.set(__self__, "cluster_users_group_dns", cluster_users_group_dns)

    @property
    @pulumi.getter(name="aaddsResourceId")
    def aadds_resource_id(self) -> pulumi.Input[str]:
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "aadds_resource_id")

    @aadds_resource_id.setter
    def aadds_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "aadds_resource_id", value)

    @property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> pulumi.Input[str]:
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_name", value)

    @property
    @pulumi.getter(name="domainUserPassword")
    def domain_user_password(self) -> pulumi.Input[str]:
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_user_password")

    @domain_user_password.setter
    def domain_user_password(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_user_password", value)

    @property
    @pulumi.getter(name="domainUsername")
    def domain_username(self) -> pulumi.Input[str]:
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_username")

    @domain_username.setter
    def domain_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_username", value)

    @property
    @pulumi.getter(name="ldapsUrls")
    def ldaps_urls(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ldaps_urls")

    @ldaps_urls.setter
    def ldaps_urls(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "ldaps_urls", value)

    @property
    @pulumi.getter(name="msiResourceId")
    def msi_resource_id(self) -> pulumi.Input[str]:
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "msi_resource_id")

    @msi_resource_id.setter
    def msi_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "msi_resource_id", value)

    @property
    @pulumi.getter(name="clusterUsersGroupDns")
    def cluster_users_group_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "cluster_users_group_dns")

    @cluster_users_group_dns.setter
    def cluster_users_group_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cluster_users_group_dns", value)


if not MYPY:
    class HadoopClusterStorageAccountArgsDict(TypedDict):
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        storage_account_key: pulumi.Input[str]
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        storage_container_id: pulumi.Input[str]
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterStorageAccountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str],
                 storage_resource_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "storage_account_key", storage_account_key)
        pulumi.set(__self__, "storage_container_id", storage_container_id)
        if storage_resource_id is not None:
            pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> pulumi.Input[str]:
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_key")

    @storage_account_key.setter
    def storage_account_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_account_key", value)

    @property
    @pulumi.getter(name="storageContainerId")
    def storage_container_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "storage_container_id")

    @storage_container_id.setter
    def storage_container_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_container_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class HadoopClusterStorageAccountGen2ArgsDict(TypedDict):
        filesystem_id: pulumi.Input[str]
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        managed_identity_resource_id: pulumi.Input[str]
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: pulumi.Input[str]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    HadoopClusterStorageAccountGen2ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class HadoopClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="filesystemId")
    def filesystem_id(self) -> pulumi.Input[str]:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

    @filesystem_id.setter
    def filesystem_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "filesystem_id", value)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="managedIdentityResourceId")
    def managed_identity_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "managed_identity_resource_id")

    @managed_identity_resource_id.setter
    def managed_identity_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "managed_identity_resource_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class InteractiveQueryClusterComponentVersionArgsDict(TypedDict):
        interactive_hive: pulumi.Input[str]
        """
        The version of Interactive Query which should be used for this HDInsight Interactive Query Cluster. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterComponentVersionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterComponentVersionArgs:
    def __init__(__self__, *,
                 interactive_hive: pulumi.Input[str]):
        """
        :param pulumi.Input[str] interactive_hive: The version of Interactive Query which should be used for this HDInsight Interactive Query Cluster. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "interactive_hive", interactive_hive)

    @property
    @pulumi.getter(name="interactiveHive")
    def interactive_hive(self) -> pulumi.Input[str]:
        """
        The version of Interactive Query which should be used for this HDInsight Interactive Query Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "interactive_hive")

    @interactive_hive.setter
    def interactive_hive(self, value: pulumi.Input[str]):
        pulumi.set(self, "interactive_hive", value)


if not MYPY:
    class InteractiveQueryClusterComputeIsolationArgsDict(TypedDict):
        compute_isolation_enabled: NotRequired[pulumi.Input[bool]]
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        host_sku: NotRequired[pulumi.Input[str]]
        """
        The name of the host SKU.
        """
elif False:
    InteractiveQueryClusterComputeIsolationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterComputeIsolationArgs:
    def __init__(__self__, *,
                 compute_isolation_enabled: Optional[pulumi.Input[bool]] = None,
                 host_sku: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] compute_isolation_enabled: This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        :param pulumi.Input[str] host_sku: The name of the host SKU.
        """
        if compute_isolation_enabled is not None:
            pulumi.set(__self__, "compute_isolation_enabled", compute_isolation_enabled)
        if host_sku is not None:
            pulumi.set(__self__, "host_sku", host_sku)

    @property
    @pulumi.getter(name="computeIsolationEnabled")
    def compute_isolation_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        return pulumi.get(self, "compute_isolation_enabled")

    @compute_isolation_enabled.setter
    def compute_isolation_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "compute_isolation_enabled", value)

    @property
    @pulumi.getter(name="hostSku")
    def host_sku(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the host SKU.
        """
        return pulumi.get(self, "host_sku")

    @host_sku.setter
    def host_sku(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_sku", value)


if not MYPY:
    class InteractiveQueryClusterDiskEncryptionArgsDict(TypedDict):
        encryption_algorithm: NotRequired[pulumi.Input[str]]
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        encryption_at_host_enabled: NotRequired[pulumi.Input[bool]]
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        key_vault_key_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the key vault key.
        """
        key_vault_managed_identity_id: NotRequired[pulumi.Input[str]]
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
elif False:
    InteractiveQueryClusterDiskEncryptionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterDiskEncryptionArgs:
    def __init__(__self__, *,
                 encryption_algorithm: Optional[pulumi.Input[str]] = None,
                 encryption_at_host_enabled: Optional[pulumi.Input[bool]] = None,
                 key_vault_key_id: Optional[pulumi.Input[str]] = None,
                 key_vault_managed_identity_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] encryption_algorithm: This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        :param pulumi.Input[bool] encryption_at_host_enabled: This is indicator to show whether resource disk encryption is enabled.
        :param pulumi.Input[str] key_vault_key_id: The ID of the key vault key.
        :param pulumi.Input[str] key_vault_managed_identity_id: This is the resource ID of Managed Identity used to access the key vault.
        """
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if encryption_at_host_enabled is not None:
            pulumi.set(__self__, "encryption_at_host_enabled", encryption_at_host_enabled)
        if key_vault_key_id is not None:
            pulumi.set(__self__, "key_vault_key_id", key_vault_key_id)
        if key_vault_managed_identity_id is not None:
            pulumi.set(__self__, "key_vault_managed_identity_id", key_vault_managed_identity_id)

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[pulumi.Input[str]]:
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        return pulumi.get(self, "encryption_algorithm")

    @encryption_algorithm.setter
    def encryption_algorithm(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "encryption_algorithm", value)

    @property
    @pulumi.getter(name="encryptionAtHostEnabled")
    def encryption_at_host_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        return pulumi.get(self, "encryption_at_host_enabled")

    @encryption_at_host_enabled.setter
    def encryption_at_host_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "encryption_at_host_enabled", value)

    @property
    @pulumi.getter(name="keyVaultKeyId")
    def key_vault_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the key vault key.
        """
        return pulumi.get(self, "key_vault_key_id")

    @key_vault_key_id.setter
    def key_vault_key_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_key_id", value)

    @property
    @pulumi.getter(name="keyVaultManagedIdentityId")
    def key_vault_managed_identity_id(self) -> Optional[pulumi.Input[str]]:
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
        return pulumi.get(self, "key_vault_managed_identity_id")

    @key_vault_managed_identity_id.setter
    def key_vault_managed_identity_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_managed_identity_id", value)


if not MYPY:
    class InteractiveQueryClusterExtensionArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The workspace ID of the log analytics extension.
        """
        primary_key: pulumi.Input[str]
        """
        The workspace key of the log analytics extension.
        """
elif False:
    InteractiveQueryClusterExtensionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterExtensionArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The workspace ID of the log analytics extension.
        :param pulumi.Input[str] primary_key: The workspace key of the log analytics extension.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The workspace ID of the log analytics extension.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The workspace key of the log analytics extension.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class InteractiveQueryClusterGatewayArgsDict(TypedDict):
        password: pulumi.Input[str]
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        username: pulumi.Input[str]
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterGatewayArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
               
               > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class InteractiveQueryClusterMetastoresArgsDict(TypedDict):
        ambari: NotRequired[pulumi.Input['InteractiveQueryClusterMetastoresAmbariArgsDict']]
        """
        An `ambari` block as defined below.
        """
        hive: NotRequired[pulumi.Input['InteractiveQueryClusterMetastoresHiveArgsDict']]
        """
        A `hive` block as defined below.
        """
        oozie: NotRequired[pulumi.Input['InteractiveQueryClusterMetastoresOozieArgsDict']]
        """
        An `oozie` block as defined below.
        """
elif False:
    InteractiveQueryClusterMetastoresArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterMetastoresArgs:
    def __init__(__self__, *,
                 ambari: Optional[pulumi.Input['InteractiveQueryClusterMetastoresAmbariArgs']] = None,
                 hive: Optional[pulumi.Input['InteractiveQueryClusterMetastoresHiveArgs']] = None,
                 oozie: Optional[pulumi.Input['InteractiveQueryClusterMetastoresOozieArgs']] = None):
        """
        :param pulumi.Input['InteractiveQueryClusterMetastoresAmbariArgs'] ambari: An `ambari` block as defined below.
        :param pulumi.Input['InteractiveQueryClusterMetastoresHiveArgs'] hive: A `hive` block as defined below.
        :param pulumi.Input['InteractiveQueryClusterMetastoresOozieArgs'] oozie: An `oozie` block as defined below.
        """
        if ambari is not None:
            pulumi.set(__self__, "ambari", ambari)
        if hive is not None:
            pulumi.set(__self__, "hive", hive)
        if oozie is not None:
            pulumi.set(__self__, "oozie", oozie)

    @property
    @pulumi.getter
    def ambari(self) -> Optional[pulumi.Input['InteractiveQueryClusterMetastoresAmbariArgs']]:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

    @ambari.setter
    def ambari(self, value: Optional[pulumi.Input['InteractiveQueryClusterMetastoresAmbariArgs']]):
        pulumi.set(self, "ambari", value)

    @property
    @pulumi.getter
    def hive(self) -> Optional[pulumi.Input['InteractiveQueryClusterMetastoresHiveArgs']]:
        """
        A `hive` block as defined below.
        """
        return pulumi.get(self, "hive")

    @hive.setter
    def hive(self, value: Optional[pulumi.Input['InteractiveQueryClusterMetastoresHiveArgs']]):
        pulumi.set(self, "hive", value)

    @property
    @pulumi.getter
    def oozie(self) -> Optional[pulumi.Input['InteractiveQueryClusterMetastoresOozieArgs']]:
        """
        An `oozie` block as defined below.
        """
        return pulumi.get(self, "oozie")

    @oozie.setter
    def oozie(self, value: Optional[pulumi.Input['InteractiveQueryClusterMetastoresOozieArgs']]):
        pulumi.set(self, "oozie", value)


if not MYPY:
    class InteractiveQueryClusterMetastoresAmbariArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterMetastoresAmbariArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterMetastoresAmbariArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class InteractiveQueryClusterMetastoresHiveArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterMetastoresHiveArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterMetastoresHiveArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class InteractiveQueryClusterMetastoresOozieArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterMetastoresOozieArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterMetastoresOozieArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class InteractiveQueryClusterMonitorArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        primary_key: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace key.
        """
elif False:
    InteractiveQueryClusterMonitorArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterMonitorArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param pulumi.Input[str] primary_key: The Operations Management Suite (OMS) workspace key.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace key.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class InteractiveQueryClusterNetworkArgsDict(TypedDict):
        connection_direction: NotRequired[pulumi.Input[str]]
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        private_link_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterNetworkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterNetworkArgs:
    def __init__(__self__, *,
                 connection_direction: Optional[pulumi.Input[str]] = None,
                 private_link_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] connection_direction: The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.
               
               > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        :param pulumi.Input[bool] private_link_enabled: Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        if connection_direction is not None:
            pulumi.set(__self__, "connection_direction", connection_direction)
        if private_link_enabled is not None:
            pulumi.set(__self__, "private_link_enabled", private_link_enabled)

    @property
    @pulumi.getter(name="connectionDirection")
    def connection_direction(self) -> Optional[pulumi.Input[str]]:
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        return pulumi.get(self, "connection_direction")

    @connection_direction.setter
    def connection_direction(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "connection_direction", value)

    @property
    @pulumi.getter(name="privateLinkEnabled")
    def private_link_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "private_link_enabled")

    @private_link_enabled.setter
    def private_link_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "private_link_enabled", value)


if not MYPY:
    class InteractiveQueryClusterPrivateLinkConfigurationArgsDict(TypedDict):
        group_id: pulumi.Input[str]
        """
        The ID of the private link service group.
        """
        ip_configuration: pulumi.Input['InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgsDict']
        name: pulumi.Input[str]
        """
        The name of the private link configuration.
        """
elif False:
    InteractiveQueryClusterPrivateLinkConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterPrivateLinkConfigurationArgs:
    def __init__(__self__, *,
                 group_id: pulumi.Input[str],
                 ip_configuration: pulumi.Input['InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgs'],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] group_id: The ID of the private link service group.
        :param pulumi.Input[str] name: The name of the private link configuration.
        """
        pulumi.set(__self__, "group_id", group_id)
        pulumi.set(__self__, "ip_configuration", ip_configuration)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> pulumi.Input[str]:
        """
        The ID of the private link service group.
        """
        return pulumi.get(self, "group_id")

    @group_id.setter
    def group_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "group_id", value)

    @property
    @pulumi.getter(name="ipConfiguration")
    def ip_configuration(self) -> pulumi.Input['InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgs']:
        return pulumi.get(self, "ip_configuration")

    @ip_configuration.setter
    def ip_configuration(self, value: pulumi.Input['InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgs']):
        pulumi.set(self, "ip_configuration", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the private link configuration.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


if not MYPY:
    class InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name for this HDInsight Interactive Query Cluster. Changing this forces a new resource to be created.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether this IP configuration is primary.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address of the IP configuration.
        """
        private_ip_allocation_method: NotRequired[pulumi.Input[str]]
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
elif False:
    InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterPrivateLinkConfigurationIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 primary: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_allocation_method: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name for this HDInsight Interactive Query Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] primary: Indicates whether this IP configuration is primary.
        :param pulumi.Input[str] private_ip_address: The private IP address of the IP configuration.
        :param pulumi.Input[str] private_ip_allocation_method: The private IP allocation method. The only possible value now is `Dynamic`.
        """
        pulumi.set(__self__, "name", name)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_allocation_method is not None:
            pulumi.set(__self__, "private_ip_allocation_method", private_ip_allocation_method)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name for this HDInsight Interactive Query Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether this IP configuration is primary.
        """
        return pulumi.get(self, "primary")

    @primary.setter
    def primary(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "primary", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address of the IP configuration.
        """
        return pulumi.get(self, "private_ip_address")

    @private_ip_address.setter
    def private_ip_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_address", value)

    @property
    @pulumi.getter(name="privateIpAllocationMethod")
    def private_ip_allocation_method(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        return pulumi.get(self, "private_ip_allocation_method")

    @private_ip_allocation_method.setter
    def private_ip_allocation_method(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_allocation_method", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


if not MYPY:
    class InteractiveQueryClusterRolesArgsDict(TypedDict):
        head_node: pulumi.Input['InteractiveQueryClusterRolesHeadNodeArgsDict']
        """
        A `head_node` block as defined above.
        """
        worker_node: pulumi.Input['InteractiveQueryClusterRolesWorkerNodeArgsDict']
        """
        A `worker_node` block as defined below.
        """
        zookeeper_node: pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeArgsDict']
        """
        A `zookeeper_node` block as defined below.
        """
elif False:
    InteractiveQueryClusterRolesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['InteractiveQueryClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['InteractiveQueryClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['InteractiveQueryClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['InteractiveQueryClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)

    @property
    @pulumi.getter(name="headNode")
    def head_node(self) -> pulumi.Input['InteractiveQueryClusterRolesHeadNodeArgs']:
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

    @head_node.setter
    def head_node(self, value: pulumi.Input['InteractiveQueryClusterRolesHeadNodeArgs']):
        pulumi.set(self, "head_node", value)

    @property
    @pulumi.getter(name="workerNode")
    def worker_node(self) -> pulumi.Input['InteractiveQueryClusterRolesWorkerNodeArgs']:
        """
        A `worker_node` block as defined below.
        """
        return pulumi.get(self, "worker_node")

    @worker_node.setter
    def worker_node(self, value: pulumi.Input['InteractiveQueryClusterRolesWorkerNodeArgs']):
        pulumi.set(self, "worker_node", value)

    @property
    @pulumi.getter(name="zookeeperNode")
    def zookeeper_node(self) -> pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeArgs']:
        """
        A `zookeeper_node` block as defined below.
        """
        return pulumi.get(self, "zookeeper_node")

    @zookeeper_node.setter
    def zookeeper_node(self, value: pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeArgs']):
        pulumi.set(self, "zookeeper_node", value)


if not MYPY:
    class InteractiveQueryClusterRolesHeadNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.

        > **NOTE:** High memory instances must be specified for the Head Node (Azure suggests a `Standard_D13_V2`).
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesHeadNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterRolesHeadNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesHeadNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
               
               > **NOTE:** High memory instances must be specified for the Head Node (Azure suggests a `Standard_D13_V2`).
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesHeadNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.

        > **NOTE:** High memory instances must be specified for the Head Node (Azure suggests a `Standard_D13_V2`).
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesHeadNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesHeadNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class InteractiveQueryClusterRolesHeadNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    InteractiveQueryClusterRolesHeadNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesHeadNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class InteractiveQueryClusterRolesWorkerNodeArgsDict(TypedDict):
        target_instance_count: pulumi.Input[int]
        """
        The number of instances which should be run for the Worker Nodes.
        """
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.

        > **NOTE:** High memory instances must be specified for the Head Node (Azure suggests a `Standard_D14_V2`).
        """
        autoscale: NotRequired[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgsDict']]
        """
        A `autoscale` block as defined below.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterRolesWorkerNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
               
               > **NOTE:** High memory instances must be specified for the Head Node (Azure suggests a `Standard_D14_V2`).
        :param pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.

        > **NOTE:** High memory instances must be specified for the Head Node (Azure suggests a `Standard_D14_V2`).
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def autoscale(self) -> Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs']]:
        """
        A `autoscale` block as defined below.
        """
        return pulumi.get(self, "autoscale")

    @autoscale.setter
    def autoscale(self, value: Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs']]):
        pulumi.set(self, "autoscale", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class InteractiveQueryClusterRolesWorkerNodeAutoscaleArgsDict(TypedDict):
        recurrence: NotRequired[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict']]
        """
        A `recurrence` block as defined below.
        """
elif False:
    InteractiveQueryClusterRolesWorkerNodeAutoscaleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs:
    def __init__(__self__, *,
                 recurrence: Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs']] = None):
        """
        :param pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs'] recurrence: A `recurrence` block as defined below.
        """
        if recurrence is not None:
            pulumi.set(__self__, "recurrence", recurrence)

    @property
    @pulumi.getter
    def recurrence(self) -> Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]:
        """
        A `recurrence` block as defined below.
        """
        return pulumi.get(self, "recurrence")

    @recurrence.setter
    def recurrence(self, value: Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]):
        pulumi.set(self, "recurrence", value)


if not MYPY:
    class InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict(TypedDict):
        schedules: pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict']]]
        """
        A list of `schedule` blocks as defined below.
        """
        timezone: pulumi.Input[str]
        """
        The time zone for the autoscale schedule times.
        """
elif False:
    InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs:
    def __init__(__self__, *,
                 schedules: pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]],
                 timezone: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]] schedules: A list of `schedule` blocks as defined below.
        :param pulumi.Input[str] timezone: The time zone for the autoscale schedule times.
        """
        pulumi.set(__self__, "schedules", schedules)
        pulumi.set(__self__, "timezone", timezone)

    @property
    @pulumi.getter
    def schedules(self) -> pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]:
        """
        A list of `schedule` blocks as defined below.
        """
        return pulumi.get(self, "schedules")

    @schedules.setter
    def schedules(self, value: pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]):
        pulumi.set(self, "schedules", value)

    @property
    @pulumi.getter
    def timezone(self) -> pulumi.Input[str]:
        """
        The time zone for the autoscale schedule times.
        """
        return pulumi.get(self, "timezone")

    @timezone.setter
    def timezone(self, value: pulumi.Input[str]):
        pulumi.set(self, "timezone", value)


if not MYPY:
    class InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict(TypedDict):
        days: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        target_instance_count: pulumi.Input[int]
        """
        The number of worker nodes to autoscale at the specified time.
        """
        time: pulumi.Input[str]
        """
        The time of day to perform the autoscale in 24hour format.
        """
elif False:
    InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        return pulumi.get(self, "days")

    @days.setter
    def days(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "days", value)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of worker nodes to autoscale at the specified time.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def time(self) -> pulumi.Input[str]:
        """
        The time of day to perform the autoscale in 24hour format.
        """
        return pulumi.get(self, "time")

    @time.setter
    def time(self, value: pulumi.Input[str]):
        pulumi.set(self, "time", value)


if not MYPY:
    class InteractiveQueryClusterRolesWorkerNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    InteractiveQueryClusterRolesWorkerNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class InteractiveQueryClusterRolesZookeeperNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterRolesZookeeperNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InteractiveQueryClusterRolesZookeeperNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class InteractiveQueryClusterRolesZookeeperNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    InteractiveQueryClusterRolesZookeeperNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterRolesZookeeperNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class InteractiveQueryClusterSecurityProfileArgsDict(TypedDict):
        aadds_resource_id: pulumi.Input[str]
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        domain_name: pulumi.Input[str]
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_user_password: pulumi.Input[str]
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_username: pulumi.Input[str]
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        msi_resource_id: pulumi.Input[str]
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        cluster_users_group_dns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterSecurityProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterSecurityProfileArgs:
    def __init__(__self__, *,
                 aadds_resource_id: pulumi.Input[str],
                 domain_name: pulumi.Input[str],
                 domain_user_password: pulumi.Input[str],
                 domain_username: pulumi.Input[str],
                 ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]],
                 msi_resource_id: pulumi.Input[str],
                 cluster_users_group_dns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] aadds_resource_id: The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_name: The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_user_password: The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_username: The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ldaps_urls: A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        :param pulumi.Input[str] msi_resource_id: The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cluster_users_group_dns: A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "aadds_resource_id", aadds_resource_id)
        pulumi.set(__self__, "domain_name", domain_name)
        pulumi.set(__self__, "domain_user_password", domain_user_password)
        pulumi.set(__self__, "domain_username", domain_username)
        pulumi.set(__self__, "ldaps_urls", ldaps_urls)
        pulumi.set(__self__, "msi_resource_id", msi_resource_id)
        if cluster_users_group_dns is not None:
            pulumi.set(__self__, "cluster_users_group_dns", cluster_users_group_dns)

    @property
    @pulumi.getter(name="aaddsResourceId")
    def aadds_resource_id(self) -> pulumi.Input[str]:
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "aadds_resource_id")

    @aadds_resource_id.setter
    def aadds_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "aadds_resource_id", value)

    @property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> pulumi.Input[str]:
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_name", value)

    @property
    @pulumi.getter(name="domainUserPassword")
    def domain_user_password(self) -> pulumi.Input[str]:
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_user_password")

    @domain_user_password.setter
    def domain_user_password(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_user_password", value)

    @property
    @pulumi.getter(name="domainUsername")
    def domain_username(self) -> pulumi.Input[str]:
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_username")

    @domain_username.setter
    def domain_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_username", value)

    @property
    @pulumi.getter(name="ldapsUrls")
    def ldaps_urls(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ldaps_urls")

    @ldaps_urls.setter
    def ldaps_urls(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "ldaps_urls", value)

    @property
    @pulumi.getter(name="msiResourceId")
    def msi_resource_id(self) -> pulumi.Input[str]:
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "msi_resource_id")

    @msi_resource_id.setter
    def msi_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "msi_resource_id", value)

    @property
    @pulumi.getter(name="clusterUsersGroupDns")
    def cluster_users_group_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "cluster_users_group_dns")

    @cluster_users_group_dns.setter
    def cluster_users_group_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cluster_users_group_dns", value)


if not MYPY:
    class InteractiveQueryClusterStorageAccountArgsDict(TypedDict):
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        storage_account_key: pulumi.Input[str]
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        storage_container_id: pulumi.Input[str]
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterStorageAccountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str],
                 storage_resource_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "storage_account_key", storage_account_key)
        pulumi.set(__self__, "storage_container_id", storage_container_id)
        if storage_resource_id is not None:
            pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> pulumi.Input[str]:
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_key")

    @storage_account_key.setter
    def storage_account_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_account_key", value)

    @property
    @pulumi.getter(name="storageContainerId")
    def storage_container_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "storage_container_id")

    @storage_container_id.setter
    def storage_container_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_container_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class InteractiveQueryClusterStorageAccountGen2ArgsDict(TypedDict):
        filesystem_id: pulumi.Input[str]
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        managed_identity_resource_id: pulumi.Input[str]
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: pulumi.Input[str]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    InteractiveQueryClusterStorageAccountGen2ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class InteractiveQueryClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="filesystemId")
    def filesystem_id(self) -> pulumi.Input[str]:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

    @filesystem_id.setter
    def filesystem_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "filesystem_id", value)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="managedIdentityResourceId")
    def managed_identity_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "managed_identity_resource_id")

    @managed_identity_resource_id.setter
    def managed_identity_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "managed_identity_resource_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class KafkaClusterComponentVersionArgsDict(TypedDict):
        kafka: pulumi.Input[str]
        """
        The version of Kafka which should be used for this HDInsight Kafka Cluster. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterComponentVersionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterComponentVersionArgs:
    def __init__(__self__, *,
                 kafka: pulumi.Input[str]):
        """
        :param pulumi.Input[str] kafka: The version of Kafka which should be used for this HDInsight Kafka Cluster. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "kafka", kafka)

    @property
    @pulumi.getter
    def kafka(self) -> pulumi.Input[str]:
        """
        The version of Kafka which should be used for this HDInsight Kafka Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "kafka")

    @kafka.setter
    def kafka(self, value: pulumi.Input[str]):
        pulumi.set(self, "kafka", value)


if not MYPY:
    class KafkaClusterComputeIsolationArgsDict(TypedDict):
        compute_isolation_enabled: NotRequired[pulumi.Input[bool]]
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        host_sku: NotRequired[pulumi.Input[str]]
        """
        The name of the host SKU.
        """
elif False:
    KafkaClusterComputeIsolationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterComputeIsolationArgs:
    def __init__(__self__, *,
                 compute_isolation_enabled: Optional[pulumi.Input[bool]] = None,
                 host_sku: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] compute_isolation_enabled: This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        :param pulumi.Input[str] host_sku: The name of the host SKU.
        """
        if compute_isolation_enabled is not None:
            pulumi.set(__self__, "compute_isolation_enabled", compute_isolation_enabled)
        if host_sku is not None:
            pulumi.set(__self__, "host_sku", host_sku)

    @property
    @pulumi.getter(name="computeIsolationEnabled")
    def compute_isolation_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        return pulumi.get(self, "compute_isolation_enabled")

    @compute_isolation_enabled.setter
    def compute_isolation_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "compute_isolation_enabled", value)

    @property
    @pulumi.getter(name="hostSku")
    def host_sku(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the host SKU.
        """
        return pulumi.get(self, "host_sku")

    @host_sku.setter
    def host_sku(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_sku", value)


if not MYPY:
    class KafkaClusterDiskEncryptionArgsDict(TypedDict):
        encryption_algorithm: NotRequired[pulumi.Input[str]]
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        encryption_at_host_enabled: NotRequired[pulumi.Input[bool]]
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        key_vault_key_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the key vault key.
        """
        key_vault_managed_identity_id: NotRequired[pulumi.Input[str]]
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
elif False:
    KafkaClusterDiskEncryptionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterDiskEncryptionArgs:
    def __init__(__self__, *,
                 encryption_algorithm: Optional[pulumi.Input[str]] = None,
                 encryption_at_host_enabled: Optional[pulumi.Input[bool]] = None,
                 key_vault_key_id: Optional[pulumi.Input[str]] = None,
                 key_vault_managed_identity_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] encryption_algorithm: This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        :param pulumi.Input[bool] encryption_at_host_enabled: This is indicator to show whether resource disk encryption is enabled.
        :param pulumi.Input[str] key_vault_key_id: The ID of the key vault key.
        :param pulumi.Input[str] key_vault_managed_identity_id: This is the resource ID of Managed Identity used to access the key vault.
        """
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if encryption_at_host_enabled is not None:
            pulumi.set(__self__, "encryption_at_host_enabled", encryption_at_host_enabled)
        if key_vault_key_id is not None:
            pulumi.set(__self__, "key_vault_key_id", key_vault_key_id)
        if key_vault_managed_identity_id is not None:
            pulumi.set(__self__, "key_vault_managed_identity_id", key_vault_managed_identity_id)

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[pulumi.Input[str]]:
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        return pulumi.get(self, "encryption_algorithm")

    @encryption_algorithm.setter
    def encryption_algorithm(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "encryption_algorithm", value)

    @property
    @pulumi.getter(name="encryptionAtHostEnabled")
    def encryption_at_host_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        return pulumi.get(self, "encryption_at_host_enabled")

    @encryption_at_host_enabled.setter
    def encryption_at_host_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "encryption_at_host_enabled", value)

    @property
    @pulumi.getter(name="keyVaultKeyId")
    def key_vault_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the key vault key.
        """
        return pulumi.get(self, "key_vault_key_id")

    @key_vault_key_id.setter
    def key_vault_key_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_key_id", value)

    @property
    @pulumi.getter(name="keyVaultManagedIdentityId")
    def key_vault_managed_identity_id(self) -> Optional[pulumi.Input[str]]:
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
        return pulumi.get(self, "key_vault_managed_identity_id")

    @key_vault_managed_identity_id.setter
    def key_vault_managed_identity_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_managed_identity_id", value)


if not MYPY:
    class KafkaClusterExtensionArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The workspace ID of the log analytics extension.
        """
        primary_key: pulumi.Input[str]
        """
        The workspace key of the log analytics extension.
        """
elif False:
    KafkaClusterExtensionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterExtensionArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The workspace ID of the log analytics extension.
        :param pulumi.Input[str] primary_key: The workspace key of the log analytics extension.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The workspace ID of the log analytics extension.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The workspace key of the log analytics extension.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class KafkaClusterGatewayArgsDict(TypedDict):
        password: pulumi.Input[str]
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        username: pulumi.Input[str]
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterGatewayArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
               
               > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class KafkaClusterMetastoresArgsDict(TypedDict):
        ambari: NotRequired[pulumi.Input['KafkaClusterMetastoresAmbariArgsDict']]
        """
        An `ambari` block as defined below.
        """
        hive: NotRequired[pulumi.Input['KafkaClusterMetastoresHiveArgsDict']]
        """
        A `hive` block as defined below.
        """
        oozie: NotRequired[pulumi.Input['KafkaClusterMetastoresOozieArgsDict']]
        """
        An `oozie` block as defined below.
        """
elif False:
    KafkaClusterMetastoresArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterMetastoresArgs:
    def __init__(__self__, *,
                 ambari: Optional[pulumi.Input['KafkaClusterMetastoresAmbariArgs']] = None,
                 hive: Optional[pulumi.Input['KafkaClusterMetastoresHiveArgs']] = None,
                 oozie: Optional[pulumi.Input['KafkaClusterMetastoresOozieArgs']] = None):
        """
        :param pulumi.Input['KafkaClusterMetastoresAmbariArgs'] ambari: An `ambari` block as defined below.
        :param pulumi.Input['KafkaClusterMetastoresHiveArgs'] hive: A `hive` block as defined below.
        :param pulumi.Input['KafkaClusterMetastoresOozieArgs'] oozie: An `oozie` block as defined below.
        """
        if ambari is not None:
            pulumi.set(__self__, "ambari", ambari)
        if hive is not None:
            pulumi.set(__self__, "hive", hive)
        if oozie is not None:
            pulumi.set(__self__, "oozie", oozie)

    @property
    @pulumi.getter
    def ambari(self) -> Optional[pulumi.Input['KafkaClusterMetastoresAmbariArgs']]:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

    @ambari.setter
    def ambari(self, value: Optional[pulumi.Input['KafkaClusterMetastoresAmbariArgs']]):
        pulumi.set(self, "ambari", value)

    @property
    @pulumi.getter
    def hive(self) -> Optional[pulumi.Input['KafkaClusterMetastoresHiveArgs']]:
        """
        A `hive` block as defined below.
        """
        return pulumi.get(self, "hive")

    @hive.setter
    def hive(self, value: Optional[pulumi.Input['KafkaClusterMetastoresHiveArgs']]):
        pulumi.set(self, "hive", value)

    @property
    @pulumi.getter
    def oozie(self) -> Optional[pulumi.Input['KafkaClusterMetastoresOozieArgs']]:
        """
        An `oozie` block as defined below.
        """
        return pulumi.get(self, "oozie")

    @oozie.setter
    def oozie(self, value: Optional[pulumi.Input['KafkaClusterMetastoresOozieArgs']]):
        pulumi.set(self, "oozie", value)


if not MYPY:
    class KafkaClusterMetastoresAmbariArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterMetastoresAmbariArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterMetastoresAmbariArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class KafkaClusterMetastoresHiveArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterMetastoresHiveArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterMetastoresHiveArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class KafkaClusterMetastoresOozieArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterMetastoresOozieArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterMetastoresOozieArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class KafkaClusterMonitorArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        primary_key: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace key.
        """
elif False:
    KafkaClusterMonitorArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterMonitorArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param pulumi.Input[str] primary_key: The Operations Management Suite (OMS) workspace key.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace key.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class KafkaClusterNetworkArgsDict(TypedDict):
        connection_direction: NotRequired[pulumi.Input[str]]
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        private_link_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterNetworkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterNetworkArgs:
    def __init__(__self__, *,
                 connection_direction: Optional[pulumi.Input[str]] = None,
                 private_link_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] connection_direction: The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.
               
               > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        :param pulumi.Input[bool] private_link_enabled: Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        if connection_direction is not None:
            pulumi.set(__self__, "connection_direction", connection_direction)
        if private_link_enabled is not None:
            pulumi.set(__self__, "private_link_enabled", private_link_enabled)

    @property
    @pulumi.getter(name="connectionDirection")
    def connection_direction(self) -> Optional[pulumi.Input[str]]:
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        return pulumi.get(self, "connection_direction")

    @connection_direction.setter
    def connection_direction(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "connection_direction", value)

    @property
    @pulumi.getter(name="privateLinkEnabled")
    def private_link_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "private_link_enabled")

    @private_link_enabled.setter
    def private_link_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "private_link_enabled", value)


if not MYPY:
    class KafkaClusterPrivateLinkConfigurationArgsDict(TypedDict):
        group_id: pulumi.Input[str]
        """
        The ID of the private link service group.
        """
        ip_configuration: pulumi.Input['KafkaClusterPrivateLinkConfigurationIpConfigurationArgsDict']
        name: pulumi.Input[str]
        """
        The name of the private link configuration.
        """
elif False:
    KafkaClusterPrivateLinkConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterPrivateLinkConfigurationArgs:
    def __init__(__self__, *,
                 group_id: pulumi.Input[str],
                 ip_configuration: pulumi.Input['KafkaClusterPrivateLinkConfigurationIpConfigurationArgs'],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] group_id: The ID of the private link service group.
        :param pulumi.Input[str] name: The name of the private link configuration.
        """
        pulumi.set(__self__, "group_id", group_id)
        pulumi.set(__self__, "ip_configuration", ip_configuration)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> pulumi.Input[str]:
        """
        The ID of the private link service group.
        """
        return pulumi.get(self, "group_id")

    @group_id.setter
    def group_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "group_id", value)

    @property
    @pulumi.getter(name="ipConfiguration")
    def ip_configuration(self) -> pulumi.Input['KafkaClusterPrivateLinkConfigurationIpConfigurationArgs']:
        return pulumi.get(self, "ip_configuration")

    @ip_configuration.setter
    def ip_configuration(self, value: pulumi.Input['KafkaClusterPrivateLinkConfigurationIpConfigurationArgs']):
        pulumi.set(self, "ip_configuration", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the private link configuration.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


if not MYPY:
    class KafkaClusterPrivateLinkConfigurationIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name for this HDInsight Kafka Cluster. Changing this forces a new resource to be created.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether this IP configuration is primary.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address of the IP configuration.
        """
        private_ip_allocation_method: NotRequired[pulumi.Input[str]]
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
elif False:
    KafkaClusterPrivateLinkConfigurationIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterPrivateLinkConfigurationIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 primary: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_allocation_method: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name for this HDInsight Kafka Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] primary: Indicates whether this IP configuration is primary.
        :param pulumi.Input[str] private_ip_address: The private IP address of the IP configuration.
        :param pulumi.Input[str] private_ip_allocation_method: The private IP allocation method. The only possible value now is `Dynamic`.
        """
        pulumi.set(__self__, "name", name)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_allocation_method is not None:
            pulumi.set(__self__, "private_ip_allocation_method", private_ip_allocation_method)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name for this HDInsight Kafka Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether this IP configuration is primary.
        """
        return pulumi.get(self, "primary")

    @primary.setter
    def primary(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "primary", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address of the IP configuration.
        """
        return pulumi.get(self, "private_ip_address")

    @private_ip_address.setter
    def private_ip_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_address", value)

    @property
    @pulumi.getter(name="privateIpAllocationMethod")
    def private_ip_allocation_method(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        return pulumi.get(self, "private_ip_allocation_method")

    @private_ip_allocation_method.setter
    def private_ip_allocation_method(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_allocation_method", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


if not MYPY:
    class KafkaClusterRestProxyArgsDict(TypedDict):
        security_group_id: pulumi.Input[str]
        """
        The Azure Active Directory Security Group ID. Changing this forces a new resource to be created.
        """
        security_group_name: pulumi.Input[str]
        """
        The Azure Active Directory Security Group name. Changing this forces a new resource to be created.

        > **Note:** The `security_group_name` property will be Required in version 3.0 of the AzureRM Provider.
        """
elif False:
    KafkaClusterRestProxyArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRestProxyArgs:
    def __init__(__self__, *,
                 security_group_id: pulumi.Input[str],
                 security_group_name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] security_group_id: The Azure Active Directory Security Group ID. Changing this forces a new resource to be created.
        :param pulumi.Input[str] security_group_name: The Azure Active Directory Security Group name. Changing this forces a new resource to be created.
               
               > **Note:** The `security_group_name` property will be Required in version 3.0 of the AzureRM Provider.
        """
        pulumi.set(__self__, "security_group_id", security_group_id)
        pulumi.set(__self__, "security_group_name", security_group_name)

    @property
    @pulumi.getter(name="securityGroupId")
    def security_group_id(self) -> pulumi.Input[str]:
        """
        The Azure Active Directory Security Group ID. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "security_group_id")

    @security_group_id.setter
    def security_group_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "security_group_id", value)

    @property
    @pulumi.getter(name="securityGroupName")
    def security_group_name(self) -> pulumi.Input[str]:
        """
        The Azure Active Directory Security Group name. Changing this forces a new resource to be created.

        > **Note:** The `security_group_name` property will be Required in version 3.0 of the AzureRM Provider.
        """
        return pulumi.get(self, "security_group_name")

    @security_group_name.setter
    def security_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "security_group_name", value)


if not MYPY:
    class KafkaClusterRolesArgsDict(TypedDict):
        head_node: pulumi.Input['KafkaClusterRolesHeadNodeArgsDict']
        """
        A `head_node` block as defined above.
        """
        worker_node: pulumi.Input['KafkaClusterRolesWorkerNodeArgsDict']
        """
        A `worker_node` block as defined below.
        """
        zookeeper_node: pulumi.Input['KafkaClusterRolesZookeeperNodeArgsDict']
        """
        A `zookeeper_node` block as defined below.
        """
        kafka_management_node: NotRequired[pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgsDict']]
        """
        A `kafka_management_node` block as defined below.

        > **Note:** This property has been deprecated and will be removed in version 4.0.
        """
elif False:
    KafkaClusterRolesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['KafkaClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['KafkaClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['KafkaClusterRolesZookeeperNodeArgs'],
                 kafka_management_node: Optional[pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgs']] = None):
        """
        :param pulumi.Input['KafkaClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['KafkaClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['KafkaClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        :param pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgs'] kafka_management_node: A `kafka_management_node` block as defined below.
               
               > **Note:** This property has been deprecated and will be removed in version 4.0.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)
        if kafka_management_node is not None:
            pulumi.set(__self__, "kafka_management_node", kafka_management_node)

    @property
    @pulumi.getter(name="headNode")
    def head_node(self) -> pulumi.Input['KafkaClusterRolesHeadNodeArgs']:
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

    @head_node.setter
    def head_node(self, value: pulumi.Input['KafkaClusterRolesHeadNodeArgs']):
        pulumi.set(self, "head_node", value)

    @property
    @pulumi.getter(name="workerNode")
    def worker_node(self) -> pulumi.Input['KafkaClusterRolesWorkerNodeArgs']:
        """
        A `worker_node` block as defined below.
        """
        return pulumi.get(self, "worker_node")

    @worker_node.setter
    def worker_node(self, value: pulumi.Input['KafkaClusterRolesWorkerNodeArgs']):
        pulumi.set(self, "worker_node", value)

    @property
    @pulumi.getter(name="zookeeperNode")
    def zookeeper_node(self) -> pulumi.Input['KafkaClusterRolesZookeeperNodeArgs']:
        """
        A `zookeeper_node` block as defined below.
        """
        return pulumi.get(self, "zookeeper_node")

    @zookeeper_node.setter
    def zookeeper_node(self, value: pulumi.Input['KafkaClusterRolesZookeeperNodeArgs']):
        pulumi.set(self, "zookeeper_node", value)

    @property
    @pulumi.getter(name="kafkaManagementNode")
    def kafka_management_node(self) -> Optional[pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgs']]:
        """
        A `kafka_management_node` block as defined below.

        > **Note:** This property has been deprecated and will be removed in version 4.0.
        """
        return pulumi.get(self, "kafka_management_node")

    @kafka_management_node.setter
    def kafka_management_node(self, value: Optional[pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgs']]):
        pulumi.set(self, "kafka_management_node", value)


if not MYPY:
    class KafkaClusterRolesHeadNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesHeadNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterRolesHeadNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesHeadNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesHeadNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesHeadNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesHeadNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class KafkaClusterRolesHeadNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    KafkaClusterRolesHeadNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesHeadNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class KafkaClusterRolesKafkaManagementNodeArgsDict(TypedDict):
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Kafka Management Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Kafka Management Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesKafkaManagementNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Kafka Management Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Kafka Management Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        username: NotRequired[pulumi.Input[str]]
        """
        The Username of the local administrator for the Kafka Management Nodes.

        > **NOTE:** The `username` value is automatically generated by the service and cannot be user specified. This property will become `Computed` only in 4.0 of the provider.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Kafka Management Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterRolesKafkaManagementNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesKafkaManagementNodeArgs:
    def __init__(__self__, *,
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesKafkaManagementNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 username: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Kafka Management Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Kafka Management Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesKafkaManagementNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Kafka Management Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Kafka Management Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The Username of the local administrator for the Kafka Management Nodes.
               
               > **NOTE:** The `username` value is automatically generated by the service and cannot be user specified. This property will become `Computed` only in 4.0 of the provider.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Kafka Management Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if username is not None:
            pulumi.set(__self__, "username", username)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Kafka Management Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Kafka Management Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesKafkaManagementNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesKafkaManagementNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Kafka Management Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Kafka Management Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter
    def username(self) -> Optional[pulumi.Input[str]]:
        """
        The Username of the local administrator for the Kafka Management Nodes.

        > **NOTE:** The `username` value is automatically generated by the service and cannot be user specified. This property will become `Computed` only in 4.0 of the provider.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Kafka Management Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class KafkaClusterRolesKafkaManagementNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    KafkaClusterRolesKafkaManagementNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesKafkaManagementNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class KafkaClusterRolesWorkerNodeArgsDict(TypedDict):
        number_of_disks_per_node: pulumi.Input[int]
        """
        The number of Data Disks which should be assigned to each Worker Node, which can be between 1 and 8. Changing this forces a new resource to be created.
        """
        target_instance_count: pulumi.Input[int]
        """
        The number of instances which should be run for the Worker Nodes.
        """
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesWorkerNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterRolesWorkerNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 number_of_disks_per_node: pulumi.Input[int],
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesWorkerNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] number_of_disks_per_node: The number of Data Disks which should be assigned to each Worker Node, which can be between 1 and 8. Changing this forces a new resource to be created.
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesWorkerNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "number_of_disks_per_node", number_of_disks_per_node)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter(name="numberOfDisksPerNode")
    def number_of_disks_per_node(self) -> pulumi.Input[int]:
        """
        The number of Data Disks which should be assigned to each Worker Node, which can be between 1 and 8. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "number_of_disks_per_node")

    @number_of_disks_per_node.setter
    def number_of_disks_per_node(self, value: pulumi.Input[int]):
        pulumi.set(self, "number_of_disks_per_node", value)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesWorkerNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesWorkerNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class KafkaClusterRolesWorkerNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    KafkaClusterRolesWorkerNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesWorkerNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class KafkaClusterRolesZookeeperNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesZookeeperNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterRolesZookeeperNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesZookeeperNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesZookeeperNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesZookeeperNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['KafkaClusterRolesZookeeperNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class KafkaClusterRolesZookeeperNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    KafkaClusterRolesZookeeperNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterRolesZookeeperNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class KafkaClusterSecurityProfileArgsDict(TypedDict):
        aadds_resource_id: pulumi.Input[str]
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        domain_name: pulumi.Input[str]
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_user_password: pulumi.Input[str]
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_username: pulumi.Input[str]
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        msi_resource_id: pulumi.Input[str]
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        cluster_users_group_dns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterSecurityProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterSecurityProfileArgs:
    def __init__(__self__, *,
                 aadds_resource_id: pulumi.Input[str],
                 domain_name: pulumi.Input[str],
                 domain_user_password: pulumi.Input[str],
                 domain_username: pulumi.Input[str],
                 ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]],
                 msi_resource_id: pulumi.Input[str],
                 cluster_users_group_dns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] aadds_resource_id: The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_name: The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_user_password: The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_username: The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ldaps_urls: A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        :param pulumi.Input[str] msi_resource_id: The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cluster_users_group_dns: A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "aadds_resource_id", aadds_resource_id)
        pulumi.set(__self__, "domain_name", domain_name)
        pulumi.set(__self__, "domain_user_password", domain_user_password)
        pulumi.set(__self__, "domain_username", domain_username)
        pulumi.set(__self__, "ldaps_urls", ldaps_urls)
        pulumi.set(__self__, "msi_resource_id", msi_resource_id)
        if cluster_users_group_dns is not None:
            pulumi.set(__self__, "cluster_users_group_dns", cluster_users_group_dns)

    @property
    @pulumi.getter(name="aaddsResourceId")
    def aadds_resource_id(self) -> pulumi.Input[str]:
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "aadds_resource_id")

    @aadds_resource_id.setter
    def aadds_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "aadds_resource_id", value)

    @property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> pulumi.Input[str]:
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_name", value)

    @property
    @pulumi.getter(name="domainUserPassword")
    def domain_user_password(self) -> pulumi.Input[str]:
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_user_password")

    @domain_user_password.setter
    def domain_user_password(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_user_password", value)

    @property
    @pulumi.getter(name="domainUsername")
    def domain_username(self) -> pulumi.Input[str]:
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_username")

    @domain_username.setter
    def domain_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_username", value)

    @property
    @pulumi.getter(name="ldapsUrls")
    def ldaps_urls(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ldaps_urls")

    @ldaps_urls.setter
    def ldaps_urls(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "ldaps_urls", value)

    @property
    @pulumi.getter(name="msiResourceId")
    def msi_resource_id(self) -> pulumi.Input[str]:
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "msi_resource_id")

    @msi_resource_id.setter
    def msi_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "msi_resource_id", value)

    @property
    @pulumi.getter(name="clusterUsersGroupDns")
    def cluster_users_group_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "cluster_users_group_dns")

    @cluster_users_group_dns.setter
    def cluster_users_group_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cluster_users_group_dns", value)


if not MYPY:
    class KafkaClusterStorageAccountArgsDict(TypedDict):
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        storage_account_key: pulumi.Input[str]
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        storage_container_id: pulumi.Input[str]
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterStorageAccountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str],
                 storage_resource_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "storage_account_key", storage_account_key)
        pulumi.set(__self__, "storage_container_id", storage_container_id)
        if storage_resource_id is not None:
            pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> pulumi.Input[str]:
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_key")

    @storage_account_key.setter
    def storage_account_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_account_key", value)

    @property
    @pulumi.getter(name="storageContainerId")
    def storage_container_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "storage_container_id")

    @storage_container_id.setter
    def storage_container_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_container_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class KafkaClusterStorageAccountGen2ArgsDict(TypedDict):
        filesystem_id: pulumi.Input[str]
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        managed_identity_resource_id: pulumi.Input[str]
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: pulumi.Input[str]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    KafkaClusterStorageAccountGen2ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class KafkaClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="filesystemId")
    def filesystem_id(self) -> pulumi.Input[str]:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

    @filesystem_id.setter
    def filesystem_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "filesystem_id", value)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="managedIdentityResourceId")
    def managed_identity_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "managed_identity_resource_id")

    @managed_identity_resource_id.setter
    def managed_identity_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "managed_identity_resource_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class SparkClusterComponentVersionArgsDict(TypedDict):
        spark: pulumi.Input[str]
        """
        The version of Spark which should be used for this HDInsight Spark Cluster. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterComponentVersionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterComponentVersionArgs:
    def __init__(__self__, *,
                 spark: pulumi.Input[str]):
        """
        :param pulumi.Input[str] spark: The version of Spark which should be used for this HDInsight Spark Cluster. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "spark", spark)

    @property
    @pulumi.getter
    def spark(self) -> pulumi.Input[str]:
        """
        The version of Spark which should be used for this HDInsight Spark Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "spark")

    @spark.setter
    def spark(self, value: pulumi.Input[str]):
        pulumi.set(self, "spark", value)


if not MYPY:
    class SparkClusterComputeIsolationArgsDict(TypedDict):
        compute_isolation_enabled: NotRequired[pulumi.Input[bool]]
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        host_sku: NotRequired[pulumi.Input[str]]
        """
        The name of the host SKU.
        """
elif False:
    SparkClusterComputeIsolationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterComputeIsolationArgs:
    def __init__(__self__, *,
                 compute_isolation_enabled: Optional[pulumi.Input[bool]] = None,
                 host_sku: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] compute_isolation_enabled: This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        :param pulumi.Input[str] host_sku: The name of the host SKU.
        """
        if compute_isolation_enabled is not None:
            pulumi.set(__self__, "compute_isolation_enabled", compute_isolation_enabled)
        if host_sku is not None:
            pulumi.set(__self__, "host_sku", host_sku)

    @property
    @pulumi.getter(name="computeIsolationEnabled")
    def compute_isolation_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This field indicates whether enable compute isolation or not. Possible values are `true` or `false`.
        """
        return pulumi.get(self, "compute_isolation_enabled")

    @compute_isolation_enabled.setter
    def compute_isolation_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "compute_isolation_enabled", value)

    @property
    @pulumi.getter(name="hostSku")
    def host_sku(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the host SKU.
        """
        return pulumi.get(self, "host_sku")

    @host_sku.setter
    def host_sku(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "host_sku", value)


if not MYPY:
    class SparkClusterDiskEncryptionArgsDict(TypedDict):
        encryption_algorithm: NotRequired[pulumi.Input[str]]
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        encryption_at_host_enabled: NotRequired[pulumi.Input[bool]]
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        key_vault_key_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the key vault key.
        """
        key_vault_managed_identity_id: NotRequired[pulumi.Input[str]]
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
elif False:
    SparkClusterDiskEncryptionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterDiskEncryptionArgs:
    def __init__(__self__, *,
                 encryption_algorithm: Optional[pulumi.Input[str]] = None,
                 encryption_at_host_enabled: Optional[pulumi.Input[bool]] = None,
                 key_vault_key_id: Optional[pulumi.Input[str]] = None,
                 key_vault_managed_identity_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] encryption_algorithm: This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        :param pulumi.Input[bool] encryption_at_host_enabled: This is indicator to show whether resource disk encryption is enabled.
        :param pulumi.Input[str] key_vault_key_id: The ID of the key vault key.
        :param pulumi.Input[str] key_vault_managed_identity_id: This is the resource ID of Managed Identity used to access the key vault.
        """
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if encryption_at_host_enabled is not None:
            pulumi.set(__self__, "encryption_at_host_enabled", encryption_at_host_enabled)
        if key_vault_key_id is not None:
            pulumi.set(__self__, "key_vault_key_id", key_vault_key_id)
        if key_vault_managed_identity_id is not None:
            pulumi.set(__self__, "key_vault_managed_identity_id", key_vault_managed_identity_id)

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[pulumi.Input[str]]:
        """
        This is an algorithm identifier for encryption. Possible values are `RSA1_5`, `RSA-OAEP`, `RSA-OAEP-256`.
        """
        return pulumi.get(self, "encryption_algorithm")

    @encryption_algorithm.setter
    def encryption_algorithm(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "encryption_algorithm", value)

    @property
    @pulumi.getter(name="encryptionAtHostEnabled")
    def encryption_at_host_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        This is indicator to show whether resource disk encryption is enabled.
        """
        return pulumi.get(self, "encryption_at_host_enabled")

    @encryption_at_host_enabled.setter
    def encryption_at_host_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "encryption_at_host_enabled", value)

    @property
    @pulumi.getter(name="keyVaultKeyId")
    def key_vault_key_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the key vault key.
        """
        return pulumi.get(self, "key_vault_key_id")

    @key_vault_key_id.setter
    def key_vault_key_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_key_id", value)

    @property
    @pulumi.getter(name="keyVaultManagedIdentityId")
    def key_vault_managed_identity_id(self) -> Optional[pulumi.Input[str]]:
        """
        This is the resource ID of Managed Identity used to access the key vault.
        """
        return pulumi.get(self, "key_vault_managed_identity_id")

    @key_vault_managed_identity_id.setter
    def key_vault_managed_identity_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_vault_managed_identity_id", value)


if not MYPY:
    class SparkClusterExtensionArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The workspace ID of the log analytics extension.
        """
        primary_key: pulumi.Input[str]
        """
        The workspace key of the log analytics extension.
        """
elif False:
    SparkClusterExtensionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterExtensionArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The workspace ID of the log analytics extension.
        :param pulumi.Input[str] primary_key: The workspace key of the log analytics extension.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The workspace ID of the log analytics extension.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The workspace key of the log analytics extension.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class SparkClusterGatewayArgsDict(TypedDict):
        password: pulumi.Input[str]
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        username: pulumi.Input[str]
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterGatewayArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
               
               > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password used for the Ambari Portal.

        > **NOTE:** This password must be different from the one used for the `head_node`, `worker_node` and `zookeeper_node` roles.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The username used for the Ambari Portal. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class SparkClusterMetastoresArgsDict(TypedDict):
        ambari: NotRequired[pulumi.Input['SparkClusterMetastoresAmbariArgsDict']]
        """
        An `ambari` block as defined below.
        """
        hive: NotRequired[pulumi.Input['SparkClusterMetastoresHiveArgsDict']]
        """
        A `hive` block as defined below.
        """
        oozie: NotRequired[pulumi.Input['SparkClusterMetastoresOozieArgsDict']]
        """
        An `oozie` block as defined below.
        """
elif False:
    SparkClusterMetastoresArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterMetastoresArgs:
    def __init__(__self__, *,
                 ambari: Optional[pulumi.Input['SparkClusterMetastoresAmbariArgs']] = None,
                 hive: Optional[pulumi.Input['SparkClusterMetastoresHiveArgs']] = None,
                 oozie: Optional[pulumi.Input['SparkClusterMetastoresOozieArgs']] = None):
        """
        :param pulumi.Input['SparkClusterMetastoresAmbariArgs'] ambari: An `ambari` block as defined below.
        :param pulumi.Input['SparkClusterMetastoresHiveArgs'] hive: A `hive` block as defined below.
        :param pulumi.Input['SparkClusterMetastoresOozieArgs'] oozie: An `oozie` block as defined below.
        """
        if ambari is not None:
            pulumi.set(__self__, "ambari", ambari)
        if hive is not None:
            pulumi.set(__self__, "hive", hive)
        if oozie is not None:
            pulumi.set(__self__, "oozie", oozie)

    @property
    @pulumi.getter
    def ambari(self) -> Optional[pulumi.Input['SparkClusterMetastoresAmbariArgs']]:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

    @ambari.setter
    def ambari(self, value: Optional[pulumi.Input['SparkClusterMetastoresAmbariArgs']]):
        pulumi.set(self, "ambari", value)

    @property
    @pulumi.getter
    def hive(self) -> Optional[pulumi.Input['SparkClusterMetastoresHiveArgs']]:
        """
        A `hive` block as defined below.
        """
        return pulumi.get(self, "hive")

    @hive.setter
    def hive(self, value: Optional[pulumi.Input['SparkClusterMetastoresHiveArgs']]):
        pulumi.set(self, "hive", value)

    @property
    @pulumi.getter
    def oozie(self) -> Optional[pulumi.Input['SparkClusterMetastoresOozieArgs']]:
        """
        An `oozie` block as defined below.
        """
        return pulumi.get(self, "oozie")

    @oozie.setter
    def oozie(self, value: Optional[pulumi.Input['SparkClusterMetastoresOozieArgs']]):
        pulumi.set(self, "oozie", value)


if not MYPY:
    class SparkClusterMetastoresAmbariArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterMetastoresAmbariArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterMetastoresAmbariArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class SparkClusterMetastoresHiveArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterMetastoresHiveArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterMetastoresHiveArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class SparkClusterMetastoresOozieArgsDict(TypedDict):
        database_name: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        password: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        server: pulumi.Input[str]
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        username: pulumi.Input[str]
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterMetastoresOozieArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterMetastoresOozieArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL database. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin password. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin username. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


if not MYPY:
    class SparkClusterMonitorArgsDict(TypedDict):
        log_analytics_workspace_id: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        primary_key: pulumi.Input[str]
        """
        The Operations Management Suite (OMS) workspace key.
        """
elif False:
    SparkClusterMonitorArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterMonitorArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param pulumi.Input[str] primary_key: The Operations Management Suite (OMS) workspace key.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace key.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


if not MYPY:
    class SparkClusterNetworkArgsDict(TypedDict):
        connection_direction: NotRequired[pulumi.Input[str]]
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        private_link_enabled: NotRequired[pulumi.Input[bool]]
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterNetworkArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterNetworkArgs:
    def __init__(__self__, *,
                 connection_direction: Optional[pulumi.Input[str]] = None,
                 private_link_enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] connection_direction: The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.
               
               > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        :param pulumi.Input[bool] private_link_enabled: Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        if connection_direction is not None:
            pulumi.set(__self__, "connection_direction", connection_direction)
        if private_link_enabled is not None:
            pulumi.set(__self__, "private_link_enabled", private_link_enabled)

    @property
    @pulumi.getter(name="connectionDirection")
    def connection_direction(self) -> Optional[pulumi.Input[str]]:
        """
        The direction of the resource provider connection. Possible values include `Inbound` or `Outbound`. Defaults to `Inbound`. Changing this forces a new resource to be created.

        > **NOTE:** To enabled the private link the `connection_direction` must be set to `Outbound`.
        """
        return pulumi.get(self, "connection_direction")

    @connection_direction.setter
    def connection_direction(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "connection_direction", value)

    @property
    @pulumi.getter(name="privateLinkEnabled")
    def private_link_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the private link enabled? Possible values include `true` or `false`. Defaults to `false`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "private_link_enabled")

    @private_link_enabled.setter
    def private_link_enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "private_link_enabled", value)


if not MYPY:
    class SparkClusterPrivateLinkConfigurationArgsDict(TypedDict):
        group_id: pulumi.Input[str]
        """
        The ID of the private link service group.
        """
        ip_configuration: pulumi.Input['SparkClusterPrivateLinkConfigurationIpConfigurationArgsDict']
        name: pulumi.Input[str]
        """
        The name of the private link configuration.
        """
elif False:
    SparkClusterPrivateLinkConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterPrivateLinkConfigurationArgs:
    def __init__(__self__, *,
                 group_id: pulumi.Input[str],
                 ip_configuration: pulumi.Input['SparkClusterPrivateLinkConfigurationIpConfigurationArgs'],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] group_id: The ID of the private link service group.
        :param pulumi.Input[str] name: The name of the private link configuration.
        """
        pulumi.set(__self__, "group_id", group_id)
        pulumi.set(__self__, "ip_configuration", ip_configuration)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="groupId")
    def group_id(self) -> pulumi.Input[str]:
        """
        The ID of the private link service group.
        """
        return pulumi.get(self, "group_id")

    @group_id.setter
    def group_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "group_id", value)

    @property
    @pulumi.getter(name="ipConfiguration")
    def ip_configuration(self) -> pulumi.Input['SparkClusterPrivateLinkConfigurationIpConfigurationArgs']:
        return pulumi.get(self, "ip_configuration")

    @ip_configuration.setter
    def ip_configuration(self, value: pulumi.Input['SparkClusterPrivateLinkConfigurationIpConfigurationArgs']):
        pulumi.set(self, "ip_configuration", value)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the private link configuration.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


if not MYPY:
    class SparkClusterPrivateLinkConfigurationIpConfigurationArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        Specifies the name for this HDInsight Spark Cluster. Changing this forces a new resource to be created.
        """
        primary: NotRequired[pulumi.Input[bool]]
        """
        Indicates whether this IP configuration is primary.
        """
        private_ip_address: NotRequired[pulumi.Input[str]]
        """
        The private IP address of the IP configuration.
        """
        private_ip_allocation_method: NotRequired[pulumi.Input[str]]
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
elif False:
    SparkClusterPrivateLinkConfigurationIpConfigurationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterPrivateLinkConfigurationIpConfigurationArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 primary: Optional[pulumi.Input[bool]] = None,
                 private_ip_address: Optional[pulumi.Input[str]] = None,
                 private_ip_allocation_method: Optional[pulumi.Input[str]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Specifies the name for this HDInsight Spark Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] primary: Indicates whether this IP configuration is primary.
        :param pulumi.Input[str] private_ip_address: The private IP address of the IP configuration.
        :param pulumi.Input[str] private_ip_allocation_method: The private IP allocation method. The only possible value now is `Dynamic`.
        """
        pulumi.set(__self__, "name", name)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)
        if private_ip_allocation_method is not None:
            pulumi.set(__self__, "private_ip_allocation_method", private_ip_allocation_method)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Specifies the name for this HDInsight Spark Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[bool]]:
        """
        Indicates whether this IP configuration is primary.
        """
        return pulumi.get(self, "primary")

    @primary.setter
    def primary(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "primary", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP address of the IP configuration.
        """
        return pulumi.get(self, "private_ip_address")

    @private_ip_address.setter
    def private_ip_address(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_address", value)

    @property
    @pulumi.getter(name="privateIpAllocationMethod")
    def private_ip_allocation_method(self) -> Optional[pulumi.Input[str]]:
        """
        The private IP allocation method. The only possible value now is `Dynamic`.
        """
        return pulumi.get(self, "private_ip_allocation_method")

    @private_ip_allocation_method.setter
    def private_ip_allocation_method(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip_allocation_method", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)


if not MYPY:
    class SparkClusterRolesArgsDict(TypedDict):
        head_node: pulumi.Input['SparkClusterRolesHeadNodeArgsDict']
        """
        A `head_node` block as defined above.
        """
        worker_node: pulumi.Input['SparkClusterRolesWorkerNodeArgsDict']
        """
        A `worker_node` block as defined below.
        """
        zookeeper_node: pulumi.Input['SparkClusterRolesZookeeperNodeArgsDict']
        """
        A `zookeeper_node` block as defined below.
        """
elif False:
    SparkClusterRolesArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['SparkClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['SparkClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['SparkClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['SparkClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['SparkClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['SparkClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)

    @property
    @pulumi.getter(name="headNode")
    def head_node(self) -> pulumi.Input['SparkClusterRolesHeadNodeArgs']:
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

    @head_node.setter
    def head_node(self, value: pulumi.Input['SparkClusterRolesHeadNodeArgs']):
        pulumi.set(self, "head_node", value)

    @property
    @pulumi.getter(name="workerNode")
    def worker_node(self) -> pulumi.Input['SparkClusterRolesWorkerNodeArgs']:
        """
        A `worker_node` block as defined below.
        """
        return pulumi.get(self, "worker_node")

    @worker_node.setter
    def worker_node(self, value: pulumi.Input['SparkClusterRolesWorkerNodeArgs']):
        pulumi.set(self, "worker_node", value)

    @property
    @pulumi.getter(name="zookeeperNode")
    def zookeeper_node(self) -> pulumi.Input['SparkClusterRolesZookeeperNodeArgs']:
        """
        A `zookeeper_node` block as defined below.
        """
        return pulumi.get(self, "zookeeper_node")

    @zookeeper_node.setter
    def zookeeper_node(self, value: pulumi.Input['SparkClusterRolesZookeeperNodeArgs']):
        pulumi.set(self, "zookeeper_node", value)


if not MYPY:
    class SparkClusterRolesHeadNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesHeadNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterRolesHeadNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesHeadNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesHeadNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesHeadNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined below.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesHeadNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class SparkClusterRolesHeadNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    SparkClusterRolesHeadNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesHeadNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class SparkClusterRolesWorkerNodeArgsDict(TypedDict):
        target_instance_count: pulumi.Input[int]
        """
        The number of instances which should be run for the Worker Nodes.
        """
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        autoscale: NotRequired[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgsDict']]
        """
        A `autoscale` block as defined below.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterRolesWorkerNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def autoscale(self) -> Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgs']]:
        """
        A `autoscale` block as defined below.
        """
        return pulumi.get(self, "autoscale")

    @autoscale.setter
    def autoscale(self, value: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgs']]):
        pulumi.set(self, "autoscale", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class SparkClusterRolesWorkerNodeAutoscaleArgsDict(TypedDict):
        capacity: NotRequired[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleCapacityArgsDict']]
        """
        A `capacity` block as defined below.
        """
        recurrence: NotRequired[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict']]
        """
        A `recurrence` block as defined below.

        > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
elif False:
    SparkClusterRolesWorkerNodeAutoscaleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesWorkerNodeAutoscaleArgs:
    def __init__(__self__, *,
                 capacity: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleCapacityArgs']] = None,
                 recurrence: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs']] = None):
        """
        :param pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleCapacityArgs'] capacity: A `capacity` block as defined below.
        :param pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs'] recurrence: A `recurrence` block as defined below.
               
               > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
        if capacity is not None:
            pulumi.set(__self__, "capacity", capacity)
        if recurrence is not None:
            pulumi.set(__self__, "recurrence", recurrence)

    @property
    @pulumi.getter
    def capacity(self) -> Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleCapacityArgs']]:
        """
        A `capacity` block as defined below.
        """
        return pulumi.get(self, "capacity")

    @capacity.setter
    def capacity(self, value: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleCapacityArgs']]):
        pulumi.set(self, "capacity", value)

    @property
    @pulumi.getter
    def recurrence(self) -> Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]:
        """
        A `recurrence` block as defined below.

        > **NOTE:** Either a `capacity` or `recurrence` block must be specified - but not both.
        """
        return pulumi.get(self, "recurrence")

    @recurrence.setter
    def recurrence(self, value: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs']]):
        pulumi.set(self, "recurrence", value)


if not MYPY:
    class SparkClusterRolesWorkerNodeAutoscaleCapacityArgsDict(TypedDict):
        max_instance_count: pulumi.Input[int]
        """
        The maximum number of worker nodes to autoscale to based on the cluster's activity.
        """
        min_instance_count: pulumi.Input[int]
        """
        The minimum number of worker nodes to autoscale to based on the cluster's activity.
        """
elif False:
    SparkClusterRolesWorkerNodeAutoscaleCapacityArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesWorkerNodeAutoscaleCapacityArgs:
    def __init__(__self__, *,
                 max_instance_count: pulumi.Input[int],
                 min_instance_count: pulumi.Input[int]):
        """
        :param pulumi.Input[int] max_instance_count: The maximum number of worker nodes to autoscale to based on the cluster's activity.
        :param pulumi.Input[int] min_instance_count: The minimum number of worker nodes to autoscale to based on the cluster's activity.
        """
        pulumi.set(__self__, "max_instance_count", max_instance_count)
        pulumi.set(__self__, "min_instance_count", min_instance_count)

    @property
    @pulumi.getter(name="maxInstanceCount")
    def max_instance_count(self) -> pulumi.Input[int]:
        """
        The maximum number of worker nodes to autoscale to based on the cluster's activity.
        """
        return pulumi.get(self, "max_instance_count")

    @max_instance_count.setter
    def max_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "max_instance_count", value)

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> pulumi.Input[int]:
        """
        The minimum number of worker nodes to autoscale to based on the cluster's activity.
        """
        return pulumi.get(self, "min_instance_count")

    @min_instance_count.setter
    def min_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "min_instance_count", value)


if not MYPY:
    class SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict(TypedDict):
        schedules: pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict']]]
        """
        A list of `schedule` blocks as defined below.
        """
        timezone: pulumi.Input[str]
        """
        The time zone for the autoscale schedule times.
        """
elif False:
    SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs:
    def __init__(__self__, *,
                 schedules: pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]],
                 timezone: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]] schedules: A list of `schedule` blocks as defined below.
        :param pulumi.Input[str] timezone: The time zone for the autoscale schedule times.
        """
        pulumi.set(__self__, "schedules", schedules)
        pulumi.set(__self__, "timezone", timezone)

    @property
    @pulumi.getter
    def schedules(self) -> pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]:
        """
        A list of `schedule` blocks as defined below.
        """
        return pulumi.get(self, "schedules")

    @schedules.setter
    def schedules(self, value: pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs']]]):
        pulumi.set(self, "schedules", value)

    @property
    @pulumi.getter
    def timezone(self) -> pulumi.Input[str]:
        """
        The time zone for the autoscale schedule times.
        """
        return pulumi.get(self, "timezone")

    @timezone.setter
    def timezone(self, value: pulumi.Input[str]):
        pulumi.set(self, "timezone", value)


if not MYPY:
    class SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict(TypedDict):
        days: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        target_instance_count: pulumi.Input[int]
        """
        The number of worker nodes to autoscale at the specified time.
        """
        time: pulumi.Input[str]
        """
        The time of day to perform the autoscale in 24hour format.
        """
elif False:
    SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale. Possible values are `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday` and `Sunday`.
        """
        return pulumi.get(self, "days")

    @days.setter
    def days(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "days", value)

    @property
    @pulumi.getter(name="targetInstanceCount")
    def target_instance_count(self) -> pulumi.Input[int]:
        """
        The number of worker nodes to autoscale at the specified time.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def time(self) -> pulumi.Input[str]:
        """
        The time of day to perform the autoscale in 24hour format.
        """
        return pulumi.get(self, "time")

    @time.setter
    def time(self, value: pulumi.Input[str]):
        pulumi.set(self, "time", value)


if not MYPY:
    class SparkClusterRolesWorkerNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    SparkClusterRolesWorkerNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesWorkerNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class SparkClusterRolesZookeeperNodeArgsDict(TypedDict):
        username: pulumi.Input[str]
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        vm_size: pulumi.Input[str]
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        password: NotRequired[pulumi.Input[str]]
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        script_actions: NotRequired[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesZookeeperNodeScriptActionArgsDict']]]]
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        ssh_keys: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        subnet_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        virtual_network_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterRolesZookeeperNodeArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 script_actions: Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesZookeeperNodeScriptActionArgs']]]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        :param pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesZookeeperNodeScriptActionArgs']]] script_actions: The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
               
               > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if script_actions is not None:
            pulumi.set(__self__, "script_actions", script_actions)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Possible values are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `A5`, `A6`, `A7`, `A8`, `A9`, `A10`, `A11`, `Standard_A1_V2`, `Standard_A2_V2`, `Standard_A2m_V2`, `Standard_A3`, `Standard_A4_V2`, `Standard_A4m_V2`, `Standard_A8_V2`, `Standard_A8m_V2`, `Standard_D1`, `Standard_D2`, `Standard_D3`, `Standard_D4`, `Standard_D11`, `Standard_D12`, `Standard_D13`, `Standard_D14`, `Standard_D1_V2`, `Standard_D2_V2`, `Standard_D3_V2`, `Standard_D4_V2`, `Standard_D5_V2`, `Standard_D11_V2`, `Standard_D12_V2`, `Standard_D13_V2`, `Standard_D14_V2`, `Standard_DS1_V2`, `Standard_DS2_V2`, `Standard_DS3_V2`, `Standard_DS4_V2`, `Standard_DS5_V2`, `Standard_DS11_V2`, `Standard_DS12_V2`, `Standard_DS13_V2`, `Standard_DS14_V2`, `Standard_E2_V3`, `Standard_E4_V3`, `Standard_E8_V3`, `Standard_E16_V3`, `Standard_E20_V3`, `Standard_E32_V3`, `Standard_E64_V3`, `Standard_E64i_V3`, `Standard_E2s_V3`, `Standard_E4s_V3`, `Standard_E8s_V3`, `Standard_E16s_V3`, `Standard_E20s_V3`, `Standard_E32s_V3`, `Standard_E64s_V3`, `Standard_E64is_V3`, `Standard_D2a_V4`, `Standard_D4a_V4`, `Standard_D8a_V4`, `Standard_D16a_V4`, `Standard_D32a_V4`, `Standard_D48a_V4`, `Standard_D64a_V4`, `Standard_D96a_V4`, `Standard_E2a_V4`, `Standard_E4a_V4`, `Standard_E8a_V4`, `Standard_E16a_V4`, `Standard_E20a_V4`, `Standard_E32a_V4`, `Standard_E48a_V4`, `Standard_E64a_V4`, `Standard_E96a_V4`, `Standard_D2ads_V5`, `Standard_D4ads_V5`, `Standard_D8ads_V5`, `Standard_D16ads_V5`, `Standard_D32ads_V5`, `Standard_D48ads_V5`, `Standard_D64ads_V5`, `Standard_D96ads_V5`, `Standard_E2ads_V5`, `Standard_E4ads_V5`, `Standard_E8ads_V5`, `Standard_E16ads_V5`, `Standard_E20ads_V5`, `Standard_E32ads_V5`, `Standard_E48ads_V5`, `Standard_E64ads_V5`, `Standard_E96ads_V5`, `Standard_G1`, `Standard_G2`, `Standard_G3`, `Standard_G4`, `Standard_G5`, `Standard_F2s_V2`, `Standard_F4s_V2`, `Standard_F8s_V2`, `Standard_F16s_V2`, `Standard_F32s_V2`, `Standard_F64s_V2`, `Standard_F72s_V2`, `Standard_GS1`, `Standard_GS2`, `Standard_GS3`, `Standard_GS4`, `Standard_GS5` and `Standard_NC24`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** If specified, this password must be at least 10 characters in length and must contain at least one digit, one uppercase and one lower case letter, one non-alphanumeric character (except characters ' " ` \\).
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="scriptActions")
    def script_actions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesZookeeperNodeScriptActionArgs']]]]:
        """
        The script action which will run on the cluster. One or more `script_actions` blocks as defined above.
        """
        return pulumi.get(self, "script_actions")

    @script_actions.setter
    def script_actions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SparkClusterRolesZookeeperNodeScriptActionArgs']]]]):
        pulumi.set(self, "script_actions", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.

        > **NOTE:** Either a `password` or one or more `ssh_keys` must be specified - but not both.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


if not MYPY:
    class SparkClusterRolesZookeeperNodeScriptActionArgsDict(TypedDict):
        name: pulumi.Input[str]
        """
        The name of the script action.
        """
        uri: pulumi.Input[str]
        """
        The URI to the script.
        """
        parameters: NotRequired[pulumi.Input[str]]
        """
        The parameters for the script provided.
        """
elif False:
    SparkClusterRolesZookeeperNodeScriptActionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterRolesZookeeperNodeScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 parameters: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: The name of the script action.
        :param pulumi.Input[str] uri: The URI to the script.
        :param pulumi.Input[str] parameters: The parameters for the script provided.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        The name of the script action.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        The URI to the script.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[str]]:
        """
        The parameters for the script provided.
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "parameters", value)


if not MYPY:
    class SparkClusterSecurityProfileArgsDict(TypedDict):
        aadds_resource_id: pulumi.Input[str]
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        domain_name: pulumi.Input[str]
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_user_password: pulumi.Input[str]
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        domain_username: pulumi.Input[str]
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]]
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        msi_resource_id: pulumi.Input[str]
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        cluster_users_group_dns: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]]
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterSecurityProfileArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterSecurityProfileArgs:
    def __init__(__self__, *,
                 aadds_resource_id: pulumi.Input[str],
                 domain_name: pulumi.Input[str],
                 domain_user_password: pulumi.Input[str],
                 domain_username: pulumi.Input[str],
                 ldaps_urls: pulumi.Input[Sequence[pulumi.Input[str]]],
                 msi_resource_id: pulumi.Input[str],
                 cluster_users_group_dns: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] aadds_resource_id: The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_name: The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_user_password: The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[str] domain_username: The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ldaps_urls: A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        :param pulumi.Input[str] msi_resource_id: The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] cluster_users_group_dns: A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "aadds_resource_id", aadds_resource_id)
        pulumi.set(__self__, "domain_name", domain_name)
        pulumi.set(__self__, "domain_user_password", domain_user_password)
        pulumi.set(__self__, "domain_username", domain_username)
        pulumi.set(__self__, "ldaps_urls", ldaps_urls)
        pulumi.set(__self__, "msi_resource_id", msi_resource_id)
        if cluster_users_group_dns is not None:
            pulumi.set(__self__, "cluster_users_group_dns", cluster_users_group_dns)

    @property
    @pulumi.getter(name="aaddsResourceId")
    def aadds_resource_id(self) -> pulumi.Input[str]:
        """
        The resource ID of the Azure Active Directory Domain Service. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "aadds_resource_id")

    @aadds_resource_id.setter
    def aadds_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "aadds_resource_id", value)

    @property
    @pulumi.getter(name="domainName")
    def domain_name(self) -> pulumi.Input[str]:
        """
        The name of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_name")

    @domain_name.setter
    def domain_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_name", value)

    @property
    @pulumi.getter(name="domainUserPassword")
    def domain_user_password(self) -> pulumi.Input[str]:
        """
        The user password of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_user_password")

    @domain_user_password.setter
    def domain_user_password(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_user_password", value)

    @property
    @pulumi.getter(name="domainUsername")
    def domain_username(self) -> pulumi.Input[str]:
        """
        The username of the Azure Active Directory Domain. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "domain_username")

    @domain_username.setter
    def domain_username(self, value: pulumi.Input[str]):
        pulumi.set(self, "domain_username", value)

    @property
    @pulumi.getter(name="ldapsUrls")
    def ldaps_urls(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of the LDAPS URLs to communicate with the Azure Active Directory. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ldaps_urls")

    @ldaps_urls.setter
    def ldaps_urls(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "ldaps_urls", value)

    @property
    @pulumi.getter(name="msiResourceId")
    def msi_resource_id(self) -> pulumi.Input[str]:
        """
        The User Assigned Identity for the HDInsight Cluster. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "msi_resource_id")

    @msi_resource_id.setter
    def msi_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "msi_resource_id", value)

    @property
    @pulumi.getter(name="clusterUsersGroupDns")
    def cluster_users_group_dns(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the distinguished names for the cluster user groups. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "cluster_users_group_dns")

    @cluster_users_group_dns.setter
    def cluster_users_group_dns(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "cluster_users_group_dns", value)


if not MYPY:
    class SparkClusterStorageAccountArgsDict(TypedDict):
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        storage_account_key: pulumi.Input[str]
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        storage_container_id: pulumi.Input[str]
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: NotRequired[pulumi.Input[str]]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterStorageAccountArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str],
                 storage_resource_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "storage_account_key", storage_account_key)
        pulumi.set(__self__, "storage_container_id", storage_container_id)
        if storage_resource_id is not None:
            pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> pulumi.Input[str]:
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_key")

    @storage_account_key.setter
    def storage_account_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_account_key", value)

    @property
    @pulumi.getter(name="storageContainerId")
    def storage_container_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "storage_container_id")

    @storage_container_id.setter
    def storage_container_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_container_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "storage_resource_id", value)


if not MYPY:
    class SparkClusterStorageAccountGen2ArgsDict(TypedDict):
        filesystem_id: pulumi.Input[str]
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        is_default: pulumi.Input[bool]
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        managed_identity_resource_id: pulumi.Input[str]
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        storage_resource_id: pulumi.Input[str]
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
elif False:
    SparkClusterStorageAccountGen2ArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SparkClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
               
               > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
               
               > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

    @property
    @pulumi.getter(name="filesystemId")
    def filesystem_id(self) -> pulumi.Input[str]:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

    @filesystem_id.setter
    def filesystem_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "filesystem_id", value)

    @property
    @pulumi.getter(name="isDefault")
    def is_default(self) -> pulumi.Input[bool]:
        """
        Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.

        > **NOTE:** One of the `storage_account` or `storage_account_gen2` blocks must be marked as the default.
        """
        return pulumi.get(self, "is_default")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="managedIdentityResourceId")
    def managed_identity_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.

        > **NOTE:** This can be obtained from the `id` of the `storage.Container` resource.
        """
        return pulumi.get(self, "managed_identity_resource_id")

    @managed_identity_resource_id.setter
    def managed_identity_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "managed_identity_resource_id", value)

    @property
    @pulumi.getter(name="storageResourceId")
    def storage_resource_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_resource_id")

    @storage_resource_id.setter
    def storage_resource_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_resource_id", value)


