# 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 warnings
import pulumi
import pulumi.runtime
from typing import Any, Dict, List, Mapping, Optional, Tuple, Union
from .. import _utilities, _tables
from . import outputs

__all__ = [
    'HBaseClusterComponentVersion',
    'HBaseClusterGateway',
    'HBaseClusterMetastores',
    'HBaseClusterMetastoresAmbari',
    'HBaseClusterMetastoresHive',
    'HBaseClusterMetastoresOozie',
    'HBaseClusterMonitor',
    'HBaseClusterRoles',
    'HBaseClusterRolesHeadNode',
    'HBaseClusterRolesWorkerNode',
    'HBaseClusterRolesZookeeperNode',
    'HBaseClusterStorageAccount',
    'HBaseClusterStorageAccountGen2',
    'HadoopClusterComponentVersion',
    'HadoopClusterGateway',
    'HadoopClusterMetastores',
    'HadoopClusterMetastoresAmbari',
    'HadoopClusterMetastoresHive',
    'HadoopClusterMetastoresOozie',
    'HadoopClusterMonitor',
    'HadoopClusterRoles',
    'HadoopClusterRolesEdgeNode',
    'HadoopClusterRolesEdgeNodeInstallScriptAction',
    'HadoopClusterRolesHeadNode',
    'HadoopClusterRolesWorkerNode',
    'HadoopClusterRolesZookeeperNode',
    'HadoopClusterStorageAccount',
    'HadoopClusterStorageAccountGen2',
    'InteractiveQueryClusterComponentVersion',
    'InteractiveQueryClusterGateway',
    'InteractiveQueryClusterMetastores',
    'InteractiveQueryClusterMetastoresAmbari',
    'InteractiveQueryClusterMetastoresHive',
    'InteractiveQueryClusterMetastoresOozie',
    'InteractiveQueryClusterMonitor',
    'InteractiveQueryClusterRoles',
    'InteractiveQueryClusterRolesHeadNode',
    'InteractiveQueryClusterRolesWorkerNode',
    'InteractiveQueryClusterRolesZookeeperNode',
    'InteractiveQueryClusterStorageAccount',
    'InteractiveQueryClusterStorageAccountGen2',
    'KafkaClusterComponentVersion',
    'KafkaClusterGateway',
    'KafkaClusterMetastores',
    'KafkaClusterMetastoresAmbari',
    'KafkaClusterMetastoresHive',
    'KafkaClusterMetastoresOozie',
    'KafkaClusterMonitor',
    'KafkaClusterRoles',
    'KafkaClusterRolesHeadNode',
    'KafkaClusterRolesWorkerNode',
    'KafkaClusterRolesZookeeperNode',
    'KafkaClusterStorageAccount',
    'KafkaClusterStorageAccountGen2',
    'MLServicesClusterGateway',
    'MLServicesClusterRoles',
    'MLServicesClusterRolesEdgeNode',
    'MLServicesClusterRolesHeadNode',
    'MLServicesClusterRolesWorkerNode',
    'MLServicesClusterRolesZookeeperNode',
    'MLServicesClusterStorageAccount',
    'RServerClusterGateway',
    'RServerClusterRoles',
    'RServerClusterRolesEdgeNode',
    'RServerClusterRolesHeadNode',
    'RServerClusterRolesWorkerNode',
    'RServerClusterRolesZookeeperNode',
    'RServerClusterStorageAccount',
    'SparkClusterComponentVersion',
    'SparkClusterGateway',
    'SparkClusterMetastores',
    'SparkClusterMetastoresAmbari',
    'SparkClusterMetastoresHive',
    'SparkClusterMetastoresOozie',
    'SparkClusterMonitor',
    'SparkClusterRoles',
    'SparkClusterRolesHeadNode',
    'SparkClusterRolesWorkerNode',
    'SparkClusterRolesZookeeperNode',
    'SparkClusterStorageAccount',
    'SparkClusterStorageAccountGen2',
    'StormClusterComponentVersion',
    'StormClusterGateway',
    'StormClusterMetastores',
    'StormClusterMetastoresAmbari',
    'StormClusterMetastoresHive',
    'StormClusterMetastoresOozie',
    'StormClusterMonitor',
    'StormClusterRoles',
    'StormClusterRolesHeadNode',
    'StormClusterRolesWorkerNode',
    'StormClusterRolesZookeeperNode',
    'StormClusterStorageAccount',
    'GetClusterGatewayResult',
]

@pulumi.output_type
class HBaseClusterComponentVersion(dict):
    def __init__(__self__, *,
                 hbase: str):
        """
        :param 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) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterMetastores(dict):
    def __init__(__self__, *,
                 ambari: Optional['outputs.HBaseClusterMetastoresAmbari'] = None,
                 hive: Optional['outputs.HBaseClusterMetastoresHive'] = None,
                 oozie: Optional['outputs.HBaseClusterMetastoresOozie'] = None):
        """
        :param 'HBaseClusterMetastoresAmbariArgs' ambari: An `ambari` block as defined below.
        :param 'HBaseClusterMetastoresHiveArgs' hive: A `hive` block as defined below.
        :param '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['outputs.HBaseClusterMetastoresAmbari']:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterMetastoresAmbari(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterMetastoresHive(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterMetastoresOozie(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterMonitor(dict):
    def __init__(__self__, *,
                 log_analytics_workspace_id: str,
                 primary_key: str):
        """
        :param str log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param 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) -> str:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterRoles(dict):
    def __init__(__self__, *,
                 head_node: 'outputs.HBaseClusterRolesHeadNode',
                 worker_node: 'outputs.HBaseClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.HBaseClusterRolesZookeeperNode'):
        """
        :param 'HBaseClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'HBaseClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param '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) -> 'outputs.HBaseClusterRolesHeadNode':
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HBaseClusterStorageAccountGen2(dict):
    def __init__(__self__, *,
                 filesystem_id: str,
                 is_default: bool,
                 managed_identity_resource_id: str,
                 storage_resource_id: str):
        """
        :param str filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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.
        :param 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) -> str:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterComponentVersion(dict):
    def __init__(__self__, *,
                 hadoop: str):
        """
        :param 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) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterMetastores(dict):
    def __init__(__self__, *,
                 ambari: Optional['outputs.HadoopClusterMetastoresAmbari'] = None,
                 hive: Optional['outputs.HadoopClusterMetastoresHive'] = None,
                 oozie: Optional['outputs.HadoopClusterMetastoresOozie'] = None):
        """
        :param 'HadoopClusterMetastoresAmbariArgs' ambari: An `ambari` block as defined below.
        :param 'HadoopClusterMetastoresHiveArgs' hive: A `hive` block as defined below.
        :param '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['outputs.HadoopClusterMetastoresAmbari']:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterMetastoresAmbari(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterMetastoresHive(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterMetastoresOozie(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterMonitor(dict):
    def __init__(__self__, *,
                 log_analytics_workspace_id: str,
                 primary_key: str):
        """
        :param str log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param 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) -> str:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterRoles(dict):
    def __init__(__self__, *,
                 head_node: 'outputs.HadoopClusterRolesHeadNode',
                 worker_node: 'outputs.HadoopClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.HadoopClusterRolesZookeeperNode',
                 edge_node: Optional['outputs.HadoopClusterRolesEdgeNode'] = None):
        """
        :param 'HadoopClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'HadoopClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param 'HadoopClusterRolesZookeeperNodeArgs' zookeeper_node: A `zookeeper_node` block as defined below.
        :param '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) -> 'outputs.HadoopClusterRolesHeadNode':
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterRolesEdgeNode(dict):
    def __init__(__self__, *,
                 install_script_actions: List['outputs.HadoopClusterRolesEdgeNodeInstallScriptAction'],
                 target_instance_count: float,
                 vm_size: str):
        """
        :param List['HadoopClusterRolesEdgeNodeInstallScriptActionArgs'] install_script_actions: A `install_script_action` block as defined below.
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Edge Nodes. Changing this forces a new resource to be created.
        """
        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)

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

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

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Edge Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterRolesEdgeNodeInstallScriptAction(dict):
    def __init__(__self__, *,
                 name: str,
                 uri: str):
        """
        :param str name: The name of the install script action. Changing this forces a new resource to be created.
        :param str uri: The URI pointing to the script to run during the installation of the edge node. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "uri", uri)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the install script action. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def uri(self) -> str:
        """
        The URI pointing to the script to run during the installation of the edge node. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "uri")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class HadoopClusterStorageAccountGen2(dict):
    def __init__(__self__, *,
                 filesystem_id: str,
                 is_default: bool,
                 managed_identity_resource_id: str,
                 storage_resource_id: str):
        """
        :param str filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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.
        :param 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) -> str:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterComponentVersion(dict):
    def __init__(__self__, *,
                 interactive_hive: str):
        pulumi.set(__self__, "interactive_hive", interactive_hive)

    @property
    @pulumi.getter(name="interactiveHive")
    def interactive_hive(self) -> str:
        return pulumi.get(self, "interactive_hive")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterMetastores(dict):
    def __init__(__self__, *,
                 ambari: Optional['outputs.InteractiveQueryClusterMetastoresAmbari'] = None,
                 hive: Optional['outputs.InteractiveQueryClusterMetastoresHive'] = None,
                 oozie: Optional['outputs.InteractiveQueryClusterMetastoresOozie'] = None):
        """
        :param 'InteractiveQueryClusterMetastoresAmbariArgs' ambari: An `ambari` block as defined below.
        :param 'InteractiveQueryClusterMetastoresHiveArgs' hive: A `hive` block as defined below.
        :param '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['outputs.InteractiveQueryClusterMetastoresAmbari']:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterMetastoresAmbari(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterMetastoresHive(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterMetastoresOozie(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterMonitor(dict):
    def __init__(__self__, *,
                 log_analytics_workspace_id: str,
                 primary_key: str):
        """
        :param str log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param 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) -> str:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterRoles(dict):
    def __init__(__self__, *,
                 head_node: 'outputs.InteractiveQueryClusterRolesHeadNode',
                 worker_node: 'outputs.InteractiveQueryClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.InteractiveQueryClusterRolesZookeeperNode'):
        """
        :param 'InteractiveQueryClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'InteractiveQueryClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param '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) -> 'outputs.InteractiveQueryClusterRolesHeadNode':
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class InteractiveQueryClusterStorageAccountGen2(dict):
    def __init__(__self__, *,
                 filesystem_id: str,
                 is_default: bool,
                 managed_identity_resource_id: str,
                 storage_resource_id: str):
        """
        :param str filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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.
        :param 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) -> str:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterComponentVersion(dict):
    def __init__(__self__, *,
                 kafka: str):
        """
        :param 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) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterMetastores(dict):
    def __init__(__self__, *,
                 ambari: Optional['outputs.KafkaClusterMetastoresAmbari'] = None,
                 hive: Optional['outputs.KafkaClusterMetastoresHive'] = None,
                 oozie: Optional['outputs.KafkaClusterMetastoresOozie'] = None):
        """
        :param 'KafkaClusterMetastoresAmbariArgs' ambari: An `ambari` block as defined below.
        :param 'KafkaClusterMetastoresHiveArgs' hive: A `hive` block as defined below.
        :param '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['outputs.KafkaClusterMetastoresAmbari']:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterMetastoresAmbari(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterMetastoresHive(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterMetastoresOozie(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterMonitor(dict):
    def __init__(__self__, *,
                 log_analytics_workspace_id: str,
                 primary_key: str):
        """
        :param str log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param 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) -> str:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterRoles(dict):
    def __init__(__self__, *,
                 head_node: 'outputs.KafkaClusterRolesHeadNode',
                 worker_node: 'outputs.KafkaClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.KafkaClusterRolesZookeeperNode'):
        """
        :param 'KafkaClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'KafkaClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param 'KafkaClusterRolesZookeeperNodeArgs' 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) -> 'outputs.KafkaClusterRolesHeadNode':
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 number_of_disks_per_node: float,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float 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 float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        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")

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

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class KafkaClusterStorageAccountGen2(dict):
    def __init__(__self__, *,
                 filesystem_id: str,
                 is_default: bool,
                 managed_identity_resource_id: str,
                 storage_resource_id: str):
        """
        :param str filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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.
        :param 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) -> str:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterRoles(dict):
    def __init__(__self__, *,
                 edge_node: 'outputs.MLServicesClusterRolesEdgeNode',
                 head_node: 'outputs.MLServicesClusterRolesHeadNode',
                 worker_node: 'outputs.MLServicesClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.MLServicesClusterRolesZookeeperNode'):
        """
        :param 'MLServicesClusterRolesEdgeNodeArgs' edge_node: A `edge_node` block as defined above.
        :param 'MLServicesClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'MLServicesClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param 'MLServicesClusterRolesZookeeperNodeArgs' zookeeper_node: A `zookeeper_node` block as defined below.
        """
        pulumi.set(__self__, "edge_node", edge_node)
        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="edgeNode")
    def edge_node(self) -> 'outputs.MLServicesClusterRolesEdgeNode':
        """
        A `edge_node` block as defined above.
        """
        return pulumi.get(self, "edge_node")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterRolesEdgeNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Edge Node. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Edge Node. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Edge Node. Changing this forces a new resource to be created.
        :param List[str] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Edge Node. Changing this forces a new resource to be created.
        :param str subnet_id: The ID of the Subnet within the Virtual Network where the Edge Node should be provisioned within. Changing this forces a new resource to be created.
        :param str virtual_network_id: The ID of the Virtual Network where the Edge Node 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 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) -> str:
        """
        The Username of the local administrator for the Edge Node. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Edge Node. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class MLServicesClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight ML Services Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterRoles(dict):
    def __init__(__self__, *,
                 edge_node: 'outputs.RServerClusterRolesEdgeNode',
                 head_node: 'outputs.RServerClusterRolesHeadNode',
                 worker_node: 'outputs.RServerClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.RServerClusterRolesZookeeperNode'):
        """
        :param 'RServerClusterRolesEdgeNodeArgs' edge_node: A `edge_node` block as defined above.
        :param 'RServerClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'RServerClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param 'RServerClusterRolesZookeeperNodeArgs' zookeeper_node: A `zookeeper_node` block as defined below.
        """
        pulumi.set(__self__, "edge_node", edge_node)
        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="edgeNode")
    def edge_node(self) -> 'outputs.RServerClusterRolesEdgeNode':
        """
        A `edge_node` block as defined above.
        """
        return pulumi.get(self, "edge_node")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterRolesEdgeNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Edge Node. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Edge Node. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Edge Node. Changing this forces a new resource to be created.
        :param List[str] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Edge Node. Changing this forces a new resource to be created.
        :param str subnet_id: The ID of the Subnet within the Virtual Network where the Edge Node should be provisioned within. Changing this forces a new resource to be created.
        :param str virtual_network_id: The ID of the Virtual Network where the Edge Node 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 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) -> str:
        """
        The Username of the local administrator for the Edge Node. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Edge Node. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class RServerClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight RServer Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterComponentVersion(dict):
    def __init__(__self__, *,
                 spark: str):
        """
        :param 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) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterMetastores(dict):
    def __init__(__self__, *,
                 ambari: Optional['outputs.SparkClusterMetastoresAmbari'] = None,
                 hive: Optional['outputs.SparkClusterMetastoresHive'] = None,
                 oozie: Optional['outputs.SparkClusterMetastoresOozie'] = None):
        """
        :param 'SparkClusterMetastoresAmbariArgs' ambari: An `ambari` block as defined below.
        :param 'SparkClusterMetastoresHiveArgs' hive: A `hive` block as defined below.
        :param '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['outputs.SparkClusterMetastoresAmbari']:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterMetastoresAmbari(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterMetastoresHive(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterMetastoresOozie(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterMonitor(dict):
    def __init__(__self__, *,
                 log_analytics_workspace_id: str,
                 primary_key: str):
        """
        :param str log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param 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) -> str:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterRoles(dict):
    def __init__(__self__, *,
                 head_node: 'outputs.SparkClusterRolesHeadNode',
                 worker_node: 'outputs.SparkClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.SparkClusterRolesZookeeperNode'):
        """
        :param 'SparkClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'SparkClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param '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) -> 'outputs.SparkClusterRolesHeadNode':
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class SparkClusterStorageAccountGen2(dict):
    def __init__(__self__, *,
                 filesystem_id: str,
                 is_default: bool,
                 managed_identity_resource_id: str,
                 storage_resource_id: str):
        """
        :param str filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param bool is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param 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.
        :param 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) -> str:
        """
        The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "filesystem_id")

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

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterComponentVersion(dict):
    def __init__(__self__, *,
                 storm: str):
        """
        :param str storm: The version of Storm which should be used for this HDInsight Storm Cluster. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "storm", storm)

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterGateway(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 enabled: Optional[bool] = None):
        """
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param bool enabled: Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Is the Ambari portal enabled? The HDInsight API doesn't support disabling gateway anymore.
        """
        return pulumi.get(self, "enabled")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterMetastores(dict):
    def __init__(__self__, *,
                 ambari: Optional['outputs.StormClusterMetastoresAmbari'] = None,
                 hive: Optional['outputs.StormClusterMetastoresHive'] = None,
                 oozie: Optional['outputs.StormClusterMetastoresOozie'] = None):
        """
        :param 'StormClusterMetastoresAmbariArgs' ambari: An `ambari` block as defined below.
        :param 'StormClusterMetastoresHiveArgs' hive: A `hive` block as defined below.
        :param 'StormClusterMetastoresOozieArgs' 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['outputs.StormClusterMetastoresAmbari']:
        """
        An `ambari` block as defined below.
        """
        return pulumi.get(self, "ambari")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterMetastoresAmbari(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterMetastoresHive(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterMetastoresOozie(dict):
    def __init__(__self__, *,
                 database_name: str,
                 password: str,
                 server: str,
                 username: str):
        """
        :param str database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param str password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param 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 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) -> str:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @property
    @pulumi.getter
    def password(self) -> 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")

    @property
    @pulumi.getter
    def server(self) -> 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")

    @property
    @pulumi.getter
    def username(self) -> 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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterMonitor(dict):
    def __init__(__self__, *,
                 log_analytics_workspace_id: str,
                 primary_key: str):
        """
        :param str log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param 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) -> str:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterRoles(dict):
    def __init__(__self__, *,
                 head_node: 'outputs.StormClusterRolesHeadNode',
                 worker_node: 'outputs.StormClusterRolesWorkerNode',
                 zookeeper_node: 'outputs.StormClusterRolesZookeeperNode'):
        """
        :param 'StormClusterRolesHeadNodeArgs' head_node: A `head_node` block as defined above.
        :param 'StormClusterRolesWorkerNodeArgs' worker_node: A `worker_node` block as defined below.
        :param 'StormClusterRolesZookeeperNodeArgs' 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) -> 'outputs.StormClusterRolesHeadNode':
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

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

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterRolesHeadNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterRolesWorkerNode(dict):
    def __init__(__self__, *,
                 target_instance_count: float,
                 username: str,
                 vm_size: str,
                 min_instance_count: Optional[float] = None,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param float target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param str username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param float min_instance_count: The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 min_instance_count is not None:
            pulumi.set(__self__, "min_instance_count", min_instance_count)
        if password is not None:
            pulumi.set(__self__, "password", password)
        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) -> float:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @property
    @pulumi.getter
    def username(self) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[float]:
        """
        The minimum number of instances which should be run for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "min_instance_count")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterRolesZookeeperNode(dict):
    def __init__(__self__, *,
                 username: str,
                 vm_size: str,
                 password: Optional[str] = None,
                 ssh_keys: Optional[List[str]] = None,
                 subnet_id: Optional[str] = None,
                 virtual_network_id: Optional[str] = None):
        """
        :param str username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param str password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param List[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.
        :param 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 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 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) -> 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")

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> str:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

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

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[List[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.
        """
        return pulumi.get(self, "ssh_keys")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[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")

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[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")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class StormClusterStorageAccount(dict):
    def __init__(__self__, *,
                 is_default: bool,
                 storage_account_key: str,
                 storage_container_id: str):
        """
        :param bool is_default: Is this the Default Storage Account for the HDInsight Storm Cluster? Changing this forces a new resource to be created.
        :param 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 str storage_container_id: The ID of the Storage Container. 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)

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

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> 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")

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

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class GetClusterGatewayResult(dict):
    def __init__(__self__, *,
                 enabled: bool,
                 password: str,
                 username: str):
        """
        :param bool enabled: Is the Ambari Portal enabled?
        :param str password: The password used for the Ambari Portal.
        :param str username: The username used for the Ambari Portal.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        Is the Ambari Portal enabled?
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The password used for the Ambari Portal.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def username(self) -> str:
        """
        The username used for the Ambari Portal.
        """
        return pulumi.get(self, "username")


