# 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, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'HBaseClusterComponentVersionArgs',
    'HBaseClusterGatewayArgs',
    'HBaseClusterMetastoresArgs',
    'HBaseClusterMetastoresAmbariArgs',
    'HBaseClusterMetastoresHiveArgs',
    'HBaseClusterMetastoresOozieArgs',
    'HBaseClusterMonitorArgs',
    'HBaseClusterRolesArgs',
    'HBaseClusterRolesHeadNodeArgs',
    'HBaseClusterRolesWorkerNodeArgs',
    'HBaseClusterRolesWorkerNodeAutoscaleArgs',
    'HBaseClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'HBaseClusterRolesZookeeperNodeArgs',
    'HBaseClusterStorageAccountArgs',
    'HBaseClusterStorageAccountGen2Args',
    'HadoopClusterComponentVersionArgs',
    'HadoopClusterGatewayArgs',
    'HadoopClusterMetastoresArgs',
    'HadoopClusterMetastoresAmbariArgs',
    'HadoopClusterMetastoresHiveArgs',
    'HadoopClusterMetastoresOozieArgs',
    'HadoopClusterMonitorArgs',
    'HadoopClusterNetworkArgs',
    'HadoopClusterRolesArgs',
    'HadoopClusterRolesEdgeNodeArgs',
    'HadoopClusterRolesEdgeNodeInstallScriptActionArgs',
    'HadoopClusterRolesHeadNodeArgs',
    'HadoopClusterRolesWorkerNodeArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleCapacityArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'HadoopClusterRolesZookeeperNodeArgs',
    'HadoopClusterStorageAccountArgs',
    'HadoopClusterStorageAccountGen2Args',
    'InteractiveQueryClusterComponentVersionArgs',
    'InteractiveQueryClusterGatewayArgs',
    'InteractiveQueryClusterMetastoresArgs',
    'InteractiveQueryClusterMetastoresAmbariArgs',
    'InteractiveQueryClusterMetastoresHiveArgs',
    'InteractiveQueryClusterMetastoresOozieArgs',
    'InteractiveQueryClusterMonitorArgs',
    'InteractiveQueryClusterNetworkArgs',
    'InteractiveQueryClusterRolesArgs',
    'InteractiveQueryClusterRolesHeadNodeArgs',
    'InteractiveQueryClusterRolesWorkerNodeArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleCapacityArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'InteractiveQueryClusterRolesZookeeperNodeArgs',
    'InteractiveQueryClusterStorageAccountArgs',
    'InteractiveQueryClusterStorageAccountGen2Args',
    'KafkaClusterComponentVersionArgs',
    'KafkaClusterGatewayArgs',
    'KafkaClusterMetastoresArgs',
    'KafkaClusterMetastoresAmbariArgs',
    'KafkaClusterMetastoresHiveArgs',
    'KafkaClusterMetastoresOozieArgs',
    'KafkaClusterMonitorArgs',
    'KafkaClusterRestProxyArgs',
    'KafkaClusterRolesArgs',
    'KafkaClusterRolesHeadNodeArgs',
    'KafkaClusterRolesKafkaManagementNodeArgs',
    'KafkaClusterRolesWorkerNodeArgs',
    'KafkaClusterRolesZookeeperNodeArgs',
    'KafkaClusterStorageAccountArgs',
    'KafkaClusterStorageAccountGen2Args',
    'MLServicesClusterGatewayArgs',
    'MLServicesClusterRolesArgs',
    'MLServicesClusterRolesEdgeNodeArgs',
    'MLServicesClusterRolesHeadNodeArgs',
    'MLServicesClusterRolesWorkerNodeArgs',
    'MLServicesClusterRolesZookeeperNodeArgs',
    'MLServicesClusterStorageAccountArgs',
    'RServerClusterGatewayArgs',
    'RServerClusterRolesArgs',
    'RServerClusterRolesEdgeNodeArgs',
    'RServerClusterRolesHeadNodeArgs',
    'RServerClusterRolesWorkerNodeArgs',
    'RServerClusterRolesZookeeperNodeArgs',
    'RServerClusterStorageAccountArgs',
    'SparkClusterComponentVersionArgs',
    'SparkClusterGatewayArgs',
    'SparkClusterMetastoresArgs',
    'SparkClusterMetastoresAmbariArgs',
    'SparkClusterMetastoresHiveArgs',
    'SparkClusterMetastoresOozieArgs',
    'SparkClusterMonitorArgs',
    'SparkClusterNetworkArgs',
    'SparkClusterRolesArgs',
    'SparkClusterRolesHeadNodeArgs',
    'SparkClusterRolesWorkerNodeArgs',
    'SparkClusterRolesWorkerNodeAutoscaleArgs',
    'SparkClusterRolesWorkerNodeAutoscaleCapacityArgs',
    'SparkClusterRolesWorkerNodeAutoscaleRecurrenceArgs',
    'SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs',
    'SparkClusterRolesZookeeperNodeArgs',
    'SparkClusterStorageAccountArgs',
    'SparkClusterStorageAccountGen2Args',
    'StormClusterComponentVersionArgs',
    'StormClusterGatewayArgs',
    'StormClusterMetastoresArgs',
    'StormClusterMetastoresAmbariArgs',
    'StormClusterMetastoresHiveArgs',
    'StormClusterMetastoresOozieArgs',
    'StormClusterMonitorArgs',
    'StormClusterRolesArgs',
    'StormClusterRolesHeadNodeArgs',
    'StormClusterRolesWorkerNodeArgs',
    'StormClusterRolesZookeeperNodeArgs',
    'StormClusterStorageAccountArgs',
]

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

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

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


@pulumi.input_type
class HBaseClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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


@pulumi.input_type
class HBaseClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class HBaseClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input['HBaseClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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


@pulumi.input_type
class HBaseClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale.
        """
        return pulumi.get(self, "days")

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

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

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

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

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


@pulumi.input_type
class HBaseClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class HBaseClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class HBaseClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

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

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

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

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

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

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

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

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


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

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

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


@pulumi.input_type
class HadoopClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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


@pulumi.input_type
class HadoopClusterRolesEdgeNodeArgs:
    def __init__(__self__, *,
                 install_script_actions: pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]],
                 target_instance_count: pulumi.Input[int],
                 vm_size: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]] install_script_actions: A `install_script_action` block as defined below.
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Edge Nodes. 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) -> pulumi.Input[Sequence[pulumi.Input['HadoopClusterRolesEdgeNodeInstallScriptActionArgs']]]:
        """
        A `install_script_action` block as defined below.
        """
        return pulumi.get(self, "install_script_actions")

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

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

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

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

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


@pulumi.input_type
class HadoopClusterRolesEdgeNodeInstallScriptActionArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 uri: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: The name of the install script action. Changing this forces a new resource to be created.
        :param pulumi.Input[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) -> pulumi.Input[str]:
        """
        The name of the install script action. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

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

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

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


@pulumi.input_type
class HadoopClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class HadoopClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input['HadoopClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


@pulumi.input_type
class HadoopClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale.
        """
        return pulumi.get(self, "days")

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

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

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

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

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


@pulumi.input_type
class HadoopClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class HadoopClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class HadoopClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

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

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

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

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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterComponentVersionArgs:
    def __init__(__self__, *,
                 interactive_hive: pulumi.Input[str]):
        pulumi.set(__self__, "interactive_hive", interactive_hive)

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

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


@pulumi.input_type
class InteractiveQueryClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input['InteractiveQueryClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale.
        """
        return pulumi.get(self, "days")

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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class InteractiveQueryClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

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

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

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

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

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

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

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

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


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

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

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


@pulumi.input_type
class KafkaClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


@pulumi.input_type
class KafkaClusterRestProxyArgs:
    def __init__(__self__, *,
                 security_group_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] security_group_id: The Azure Active Directory Security Group ID.
        """
        pulumi.set(__self__, "security_group_id", security_group_id)

    @property
    @pulumi.getter(name="securityGroupId")
    def security_group_id(self) -> pulumi.Input[str]:
        """
        The Azure Active Directory Security Group ID.
        """
        return pulumi.get(self, "security_group_id")

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


@pulumi.input_type
class KafkaClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['KafkaClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['KafkaClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['KafkaClusterRolesZookeeperNodeArgs'],
                 kafka_management_node: Optional[pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgs']] = None):
        """
        :param pulumi.Input['KafkaClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['KafkaClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['KafkaClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        :param pulumi.Input['KafkaClusterRolesKafkaManagementNodeArgs'] kafka_management_node: A `kafka_management_node` block as defined below.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)
        if kafka_management_node is not None:
            pulumi.set(__self__, "kafka_management_node", kafka_management_node)

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

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

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

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

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

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

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

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


@pulumi.input_type
class KafkaClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class KafkaClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 number_of_disks_per_node: pulumi.Input[int],
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] number_of_disks_per_node: The number of Data Disks which should be assigned to each Worker Node, which can be between 1 and 8. Changing this forces a new resource to be created.
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "number_of_disks_per_node", number_of_disks_per_node)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of Data Disks which should be assigned to each Worker Node, which can be between 1 and 8. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "number_of_disks_per_node")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class KafkaClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class KafkaClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class KafkaClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

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

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

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

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

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

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

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

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


@pulumi.input_type
class MLServicesClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


@pulumi.input_type
class MLServicesClusterRolesArgs:
    def __init__(__self__, *,
                 edge_node: pulumi.Input['MLServicesClusterRolesEdgeNodeArgs'],
                 head_node: pulumi.Input['MLServicesClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['MLServicesClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['MLServicesClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['MLServicesClusterRolesEdgeNodeArgs'] edge_node: A `edge_node` block as defined above.
        :param pulumi.Input['MLServicesClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['MLServicesClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['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) -> pulumi.Input['MLServicesClusterRolesEdgeNodeArgs']:
        """
        A `edge_node` block as defined above.
        """
        return pulumi.get(self, "edge_node")

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MLServicesClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MLServicesClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MLServicesClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MLServicesClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class RServerClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


@pulumi.input_type
class RServerClusterRolesArgs:
    def __init__(__self__, *,
                 edge_node: pulumi.Input['RServerClusterRolesEdgeNodeArgs'],
                 head_node: pulumi.Input['RServerClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['RServerClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['RServerClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['RServerClusterRolesEdgeNodeArgs'] edge_node: A `edge_node` block as defined above.
        :param pulumi.Input['RServerClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['RServerClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['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) -> pulumi.Input['RServerClusterRolesEdgeNodeArgs']:
        """
        A `edge_node` block as defined above.
        """
        return pulumi.get(self, "edge_node")

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class RServerClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class RServerClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class RServerClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class RServerClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight RServer Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


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

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

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


@pulumi.input_type
class SparkClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


@pulumi.input_type
class SparkClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['SparkClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['SparkClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['SparkClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['SparkClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['SparkClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['SparkClusterRolesZookeeperNodeArgs'] zookeeper_node: A `zookeeper_node` block as defined below.
        """
        pulumi.set(__self__, "head_node", head_node)
        pulumi.set(__self__, "worker_node", worker_node)
        pulumi.set(__self__, "zookeeper_node", zookeeper_node)

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

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

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

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

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

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


@pulumi.input_type
class SparkClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class SparkClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 autoscale: Optional[pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgs']] = None,
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input['SparkClusterRolesWorkerNodeAutoscaleArgs'] autoscale: A `autoscale` block as defined below.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if autoscale is not None:
            pulumi.set(__self__, "autoscale", autoscale)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


@pulumi.input_type
class SparkClusterRolesWorkerNodeAutoscaleRecurrenceScheduleArgs:
    def __init__(__self__, *,
                 days: pulumi.Input[Sequence[pulumi.Input[str]]],
                 target_instance_count: pulumi.Input[int],
                 time: pulumi.Input[str]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days: The days of the week to perform autoscale.
        :param pulumi.Input[int] target_instance_count: The number of worker nodes to autoscale at the specified time.
        :param pulumi.Input[str] time: The time of day to perform the autoscale in 24hour format.
        """
        pulumi.set(__self__, "days", days)
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "time", time)

    @property
    @pulumi.getter
    def days(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        The days of the week to perform autoscale.
        """
        return pulumi.get(self, "days")

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

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

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

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

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


@pulumi.input_type
class SparkClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class SparkClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class SparkClusterStorageAccountGen2Args:
    def __init__(__self__, *,
                 filesystem_id: pulumi.Input[str],
                 is_default: pulumi.Input[bool],
                 managed_identity_resource_id: pulumi.Input[str],
                 storage_resource_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] filesystem_id: The ID of the Gen2 Filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Hadoop Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] managed_identity_resource_id: The ID of Managed Identity to use for accessing the Gen2 filesystem. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_resource_id: The ID of the Storage Account. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "filesystem_id", filesystem_id)
        pulumi.set(__self__, "is_default", is_default)
        pulumi.set(__self__, "managed_identity_resource_id", managed_identity_resource_id)
        pulumi.set(__self__, "storage_resource_id", storage_resource_id)

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

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

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

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

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

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

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

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


@pulumi.input_type
class StormClusterComponentVersionArgs:
    def __init__(__self__, *,
                 storm: pulumi.Input[str]):
        """
        :param pulumi.Input[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) -> pulumi.Input[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")

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


@pulumi.input_type
class StormClusterGatewayArgs:
    def __init__(__self__, *,
                 password: pulumi.Input[str],
                 username: pulumi.Input[str],
                 enabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] password: The password used for the Ambari Portal.
        :param pulumi.Input[str] username: The username used for the Ambari Portal. Changing this forces a new resource to be created.
        :param pulumi.Input[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:
            warnings.warn("""HDInsight doesn't support disabling gateway anymore""", DeprecationWarning)
            pulumi.log.warn("""enabled is deprecated: HDInsight doesn't support disabling gateway anymore""")
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

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

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

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

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

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

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


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

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

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

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

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

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


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

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Ambari metastore.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Ambari metastore's existing SQL server admin username.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


@pulumi.input_type
class StormClusterMetastoresHiveArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore.  Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Hive metastore's existing SQL server admin username.  Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Hive metastore.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Hive metastore's existing SQL server admin username.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


@pulumi.input_type
class StormClusterMetastoresOozieArgs:
    def __init__(__self__, *,
                 database_name: pulumi.Input[str],
                 password: pulumi.Input[str],
                 server: pulumi.Input[str],
                 username: pulumi.Input[str]):
        """
        :param pulumi.Input[str] database_name: The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        :param pulumi.Input[str] server: The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore.  Changing this forces a new resource to be created.
        :param pulumi.Input[str] username: The external Oozie metastore's existing SQL server admin username.  Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "database_name", database_name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "server", server)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter(name="databaseName")
    def database_name(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL database.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "database_name")

    @database_name.setter
    def database_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "database_name", value)

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin password.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: pulumi.Input[str]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter
    def server(self) -> pulumi.Input[str]:
        """
        The fully-qualified domain name (FQDN) of the SQL server to use for the external Oozie metastore.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "server")

    @server.setter
    def server(self, value: pulumi.Input[str]):
        pulumi.set(self, "server", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The external Oozie metastore's existing SQL server admin username.  Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)


@pulumi.input_type
class StormClusterMonitorArgs:
    def __init__(__self__, *,
                 log_analytics_workspace_id: pulumi.Input[str],
                 primary_key: pulumi.Input[str]):
        """
        :param pulumi.Input[str] log_analytics_workspace_id: The Operations Management Suite (OMS) workspace ID.
        :param pulumi.Input[str] primary_key: The Operations Management Suite (OMS) workspace key.
        """
        pulumi.set(__self__, "log_analytics_workspace_id", log_analytics_workspace_id)
        pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter(name="logAnalyticsWorkspaceId")
    def log_analytics_workspace_id(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace ID.
        """
        return pulumi.get(self, "log_analytics_workspace_id")

    @log_analytics_workspace_id.setter
    def log_analytics_workspace_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "log_analytics_workspace_id", value)

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> pulumi.Input[str]:
        """
        The Operations Management Suite (OMS) workspace key.
        """
        return pulumi.get(self, "primary_key")

    @primary_key.setter
    def primary_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "primary_key", value)


@pulumi.input_type
class StormClusterRolesArgs:
    def __init__(__self__, *,
                 head_node: pulumi.Input['StormClusterRolesHeadNodeArgs'],
                 worker_node: pulumi.Input['StormClusterRolesWorkerNodeArgs'],
                 zookeeper_node: pulumi.Input['StormClusterRolesZookeeperNodeArgs']):
        """
        :param pulumi.Input['StormClusterRolesHeadNodeArgs'] head_node: A `head_node` block as defined above.
        :param pulumi.Input['StormClusterRolesWorkerNodeArgs'] worker_node: A `worker_node` block as defined below.
        :param pulumi.Input['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) -> pulumi.Input['StormClusterRolesHeadNodeArgs']:
        """
        A `head_node` block as defined above.
        """
        return pulumi.get(self, "head_node")

    @head_node.setter
    def head_node(self, value: pulumi.Input['StormClusterRolesHeadNodeArgs']):
        pulumi.set(self, "head_node", value)

    @property
    @pulumi.getter(name="workerNode")
    def worker_node(self) -> pulumi.Input['StormClusterRolesWorkerNodeArgs']:
        """
        A `worker_node` block as defined below.
        """
        return pulumi.get(self, "worker_node")

    @worker_node.setter
    def worker_node(self, value: pulumi.Input['StormClusterRolesWorkerNodeArgs']):
        pulumi.set(self, "worker_node", value)

    @property
    @pulumi.getter(name="zookeeperNode")
    def zookeeper_node(self) -> pulumi.Input['StormClusterRolesZookeeperNodeArgs']:
        """
        A `zookeeper_node` block as defined below.
        """
        return pulumi.get(self, "zookeeper_node")

    @zookeeper_node.setter
    def zookeeper_node(self, value: pulumi.Input['StormClusterRolesZookeeperNodeArgs']):
        pulumi.set(self, "zookeeper_node", value)


@pulumi.input_type
class StormClusterRolesHeadNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Head Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Head Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


@pulumi.input_type
class StormClusterRolesWorkerNodeArgs:
    def __init__(__self__, *,
                 target_instance_count: pulumi.Input[int],
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 min_instance_count: Optional[pulumi.Input[int]] = None,
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] target_instance_count: The number of instances which should be run for the Worker Nodes.
        :param pulumi.Input[str] username: The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[int] 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 pulumi.Input[str] password: The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "target_instance_count", target_instance_count)
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if min_instance_count is not None:
            warnings.warn("""this has been deprecated from the API and will be removed in version 3.0 of the provider""", DeprecationWarning)
            pulumi.log.warn("""min_instance_count is deprecated: this has been deprecated from the API and will be removed in version 3.0 of the provider""")
        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) -> pulumi.Input[int]:
        """
        The number of instances which should be run for the Worker Nodes.
        """
        return pulumi.get(self, "target_instance_count")

    @target_instance_count.setter
    def target_instance_count(self, value: pulumi.Input[int]):
        pulumi.set(self, "target_instance_count", value)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter(name="minInstanceCount")
    def min_instance_count(self) -> Optional[pulumi.Input[int]]:
        """
        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")

    @min_instance_count.setter
    def min_instance_count(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "min_instance_count", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Worker Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Worker Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


@pulumi.input_type
class StormClusterRolesZookeeperNodeArgs:
    def __init__(__self__, *,
                 username: pulumi.Input[str],
                 vm_size: pulumi.Input[str],
                 password: Optional[pulumi.Input[str]] = None,
                 ssh_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 virtual_network_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] username: The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] vm_size: The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] password: The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ssh_keys: A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        :param pulumi.Input[str] subnet_id: The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        :param pulumi.Input[str] virtual_network_id: The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "username", username)
        pulumi.set(__self__, "vm_size", vm_size)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if ssh_keys is not None:
            pulumi.set(__self__, "ssh_keys", ssh_keys)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if virtual_network_id is not None:
            pulumi.set(__self__, "virtual_network_id", virtual_network_id)

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "username")

    @username.setter
    def username(self, value: pulumi.Input[str]):
        pulumi.set(self, "username", value)

    @property
    @pulumi.getter(name="vmSize")
    def vm_size(self) -> pulumi.Input[str]:
        """
        The Size of the Virtual Machine which should be used as the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "vm_size")

    @vm_size.setter
    def vm_size(self, value: pulumi.Input[str]):
        pulumi.set(self, "vm_size", value)

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[str]]:
        """
        The Password associated with the local administrator for the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "password")

    @password.setter
    def password(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "password", value)

    @property
    @pulumi.getter(name="sshKeys")
    def ssh_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of SSH Keys which should be used for the local administrator on the Zookeeper Nodes. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "ssh_keys")

    @ssh_keys.setter
    def ssh_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "ssh_keys", value)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Subnet within the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "subnet_id")

    @subnet_id.setter
    def subnet_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "subnet_id", value)

    @property
    @pulumi.getter(name="virtualNetworkId")
    def virtual_network_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the Virtual Network where the Zookeeper Nodes should be provisioned within. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "virtual_network_id")

    @virtual_network_id.setter
    def virtual_network_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "virtual_network_id", value)


@pulumi.input_type
class StormClusterStorageAccountArgs:
    def __init__(__self__, *,
                 is_default: pulumi.Input[bool],
                 storage_account_key: pulumi.Input[str],
                 storage_container_id: pulumi.Input[str]):
        """
        :param pulumi.Input[bool] is_default: Is this the Default Storage Account for the HDInsight Storm Cluster? Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_account_key: The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        :param pulumi.Input[str] storage_container_id: The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        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) -> pulumi.Input[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")

    @is_default.setter
    def is_default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "is_default", value)

    @property
    @pulumi.getter(name="storageAccountKey")
    def storage_account_key(self) -> pulumi.Input[str]:
        """
        The Access Key which should be used to connect to the Storage Account. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_account_key")

    @storage_account_key.setter
    def storage_account_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_account_key", value)

    @property
    @pulumi.getter(name="storageContainerId")
    def storage_container_id(self) -> pulumi.Input[str]:
        """
        The ID of the Storage Container. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "storage_container_id")

    @storage_container_id.setter
    def storage_container_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "storage_container_id", value)


