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

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

__all__ = ['MrScalarArgs', 'MrScalar']

@pulumi.input_type
class MrScalarArgs:
    def __init__(__self__, *,
                 strategy: pulumi.Input[str],
                 additional_info: Optional[pulumi.Input[str]] = None,
                 additional_primary_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 additional_replica_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 applications: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarApplicationArgs']]]] = None,
                 availability_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 bootstrap_actions_files: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarBootstrapActionsFileArgs']]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 configurations_files: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarConfigurationsFileArgs']]]] = None,
                 core_desired_capacity: Optional[pulumi.Input[int]] = None,
                 core_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreEbsBlockDeviceArgs']]]] = None,
                 core_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 core_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 core_lifecycle: Optional[pulumi.Input[str]] = None,
                 core_max_size: Optional[pulumi.Input[int]] = None,
                 core_min_size: Optional[pulumi.Input[int]] = None,
                 core_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingDownPolicyArgs']]]] = None,
                 core_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingUpPolicyArgs']]]] = None,
                 core_unit: Optional[pulumi.Input[str]] = None,
                 custom_ami_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 ebs_root_volume_size: Optional[pulumi.Input[int]] = None,
                 ec2_key_name: Optional[pulumi.Input[str]] = None,
                 expose_cluster_id: Optional[pulumi.Input[bool]] = None,
                 instance_weights: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarInstanceWeightArgs']]]] = None,
                 job_flow_role: Optional[pulumi.Input[str]] = None,
                 keep_job_flow_alive: Optional[pulumi.Input[bool]] = None,
                 log_uri: Optional[pulumi.Input[str]] = None,
                 managed_primary_security_group: Optional[pulumi.Input[str]] = None,
                 managed_replica_security_group: Optional[pulumi.Input[str]] = None,
                 master_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarMasterEbsBlockDeviceArgs']]]] = None,
                 master_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 master_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 master_lifecycle: Optional[pulumi.Input[str]] = None,
                 master_target: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 provisioning_timeout: Optional[pulumi.Input['MrScalarProvisioningTimeoutArgs']] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 release_label: Optional[pulumi.Input[str]] = None,
                 repo_upgrade_on_boot: Optional[pulumi.Input[str]] = None,
                 retries: Optional[pulumi.Input[int]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarScheduledTaskArgs']]]] = None,
                 security_config: Optional[pulumi.Input[str]] = None,
                 service_access_security_group: Optional[pulumi.Input[str]] = None,
                 service_role: Optional[pulumi.Input[str]] = None,
                 steps_files: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarStepsFileArgs']]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTagArgs']]]] = None,
                 task_desired_capacity: Optional[pulumi.Input[int]] = None,
                 task_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskEbsBlockDeviceArgs']]]] = None,
                 task_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 task_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 task_lifecycle: Optional[pulumi.Input[str]] = None,
                 task_max_size: Optional[pulumi.Input[int]] = None,
                 task_min_size: Optional[pulumi.Input[int]] = None,
                 task_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingDownPolicyArgs']]]] = None,
                 task_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingUpPolicyArgs']]]] = None,
                 task_unit: Optional[pulumi.Input[str]] = None,
                 termination_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTerminationPolicyArgs']]]] = None,
                 termination_protected: Optional[pulumi.Input[bool]] = None,
                 visible_to_all_users: Optional[pulumi.Input[bool]] = None):
        """
        The set of arguments for constructing a MrScalar resource.
        :param pulumi.Input[str] strategy: The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        :param pulumi.Input[str] cluster_id: The MrScaler cluster id.
        :param pulumi.Input[str] description: The MrScaler description.
        :param pulumi.Input[bool] expose_cluster_id: Allow the `cluster_id` to set a provider output variable.
        :param pulumi.Input[str] name: The MrScaler name.
        :param pulumi.Input[str] region: The MrScaler region.
        :param pulumi.Input[Sequence[pulumi.Input['MrScalarTerminationPolicyArgs']]] termination_policies: Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        pulumi.set(__self__, "strategy", strategy)
        if additional_info is not None:
            pulumi.set(__self__, "additional_info", additional_info)
        if additional_primary_security_groups is not None:
            pulumi.set(__self__, "additional_primary_security_groups", additional_primary_security_groups)
        if additional_replica_security_groups is not None:
            pulumi.set(__self__, "additional_replica_security_groups", additional_replica_security_groups)
        if applications is not None:
            pulumi.set(__self__, "applications", applications)
        if availability_zones is not None:
            pulumi.set(__self__, "availability_zones", availability_zones)
        if bootstrap_actions_files is not None:
            pulumi.set(__self__, "bootstrap_actions_files", bootstrap_actions_files)
        if cluster_id is not None:
            pulumi.set(__self__, "cluster_id", cluster_id)
        if configurations_files is not None:
            pulumi.set(__self__, "configurations_files", configurations_files)
        if core_desired_capacity is not None:
            pulumi.set(__self__, "core_desired_capacity", core_desired_capacity)
        if core_ebs_block_devices is not None:
            pulumi.set(__self__, "core_ebs_block_devices", core_ebs_block_devices)
        if core_ebs_optimized is not None:
            pulumi.set(__self__, "core_ebs_optimized", core_ebs_optimized)
        if core_instance_types is not None:
            pulumi.set(__self__, "core_instance_types", core_instance_types)
        if core_lifecycle is not None:
            pulumi.set(__self__, "core_lifecycle", core_lifecycle)
        if core_max_size is not None:
            pulumi.set(__self__, "core_max_size", core_max_size)
        if core_min_size is not None:
            pulumi.set(__self__, "core_min_size", core_min_size)
        if core_scaling_down_policies is not None:
            pulumi.set(__self__, "core_scaling_down_policies", core_scaling_down_policies)
        if core_scaling_up_policies is not None:
            pulumi.set(__self__, "core_scaling_up_policies", core_scaling_up_policies)
        if core_unit is not None:
            pulumi.set(__self__, "core_unit", core_unit)
        if custom_ami_id is not None:
            pulumi.set(__self__, "custom_ami_id", custom_ami_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if ebs_root_volume_size is not None:
            pulumi.set(__self__, "ebs_root_volume_size", ebs_root_volume_size)
        if ec2_key_name is not None:
            pulumi.set(__self__, "ec2_key_name", ec2_key_name)
        if expose_cluster_id is not None:
            pulumi.set(__self__, "expose_cluster_id", expose_cluster_id)
        if instance_weights is not None:
            pulumi.set(__self__, "instance_weights", instance_weights)
        if job_flow_role is not None:
            pulumi.set(__self__, "job_flow_role", job_flow_role)
        if keep_job_flow_alive is not None:
            pulumi.set(__self__, "keep_job_flow_alive", keep_job_flow_alive)
        if log_uri is not None:
            pulumi.set(__self__, "log_uri", log_uri)
        if managed_primary_security_group is not None:
            pulumi.set(__self__, "managed_primary_security_group", managed_primary_security_group)
        if managed_replica_security_group is not None:
            pulumi.set(__self__, "managed_replica_security_group", managed_replica_security_group)
        if master_ebs_block_devices is not None:
            pulumi.set(__self__, "master_ebs_block_devices", master_ebs_block_devices)
        if master_ebs_optimized is not None:
            pulumi.set(__self__, "master_ebs_optimized", master_ebs_optimized)
        if master_instance_types is not None:
            pulumi.set(__self__, "master_instance_types", master_instance_types)
        if master_lifecycle is not None:
            pulumi.set(__self__, "master_lifecycle", master_lifecycle)
        if master_target is not None:
            pulumi.set(__self__, "master_target", master_target)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if provisioning_timeout is not None:
            pulumi.set(__self__, "provisioning_timeout", provisioning_timeout)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if release_label is not None:
            pulumi.set(__self__, "release_label", release_label)
        if repo_upgrade_on_boot is not None:
            pulumi.set(__self__, "repo_upgrade_on_boot", repo_upgrade_on_boot)
        if retries is not None:
            pulumi.set(__self__, "retries", retries)
        if scheduled_tasks is not None:
            pulumi.set(__self__, "scheduled_tasks", scheduled_tasks)
        if security_config is not None:
            pulumi.set(__self__, "security_config", security_config)
        if service_access_security_group is not None:
            pulumi.set(__self__, "service_access_security_group", service_access_security_group)
        if service_role is not None:
            pulumi.set(__self__, "service_role", service_role)
        if steps_files is not None:
            pulumi.set(__self__, "steps_files", steps_files)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if task_desired_capacity is not None:
            pulumi.set(__self__, "task_desired_capacity", task_desired_capacity)
        if task_ebs_block_devices is not None:
            pulumi.set(__self__, "task_ebs_block_devices", task_ebs_block_devices)
        if task_ebs_optimized is not None:
            pulumi.set(__self__, "task_ebs_optimized", task_ebs_optimized)
        if task_instance_types is not None:
            pulumi.set(__self__, "task_instance_types", task_instance_types)
        if task_lifecycle is not None:
            pulumi.set(__self__, "task_lifecycle", task_lifecycle)
        if task_max_size is not None:
            pulumi.set(__self__, "task_max_size", task_max_size)
        if task_min_size is not None:
            pulumi.set(__self__, "task_min_size", task_min_size)
        if task_scaling_down_policies is not None:
            pulumi.set(__self__, "task_scaling_down_policies", task_scaling_down_policies)
        if task_scaling_up_policies is not None:
            pulumi.set(__self__, "task_scaling_up_policies", task_scaling_up_policies)
        if task_unit is not None:
            pulumi.set(__self__, "task_unit", task_unit)
        if termination_policies is not None:
            pulumi.set(__self__, "termination_policies", termination_policies)
        if termination_protected is not None:
            pulumi.set(__self__, "termination_protected", termination_protected)
        if visible_to_all_users is not None:
            warnings.warn("""This field has been removed from our API and is no longer functional.""", DeprecationWarning)
            pulumi.log.warn("""visible_to_all_users is deprecated: This field has been removed from our API and is no longer functional.""")
        if visible_to_all_users is not None:
            pulumi.set(__self__, "visible_to_all_users", visible_to_all_users)

    @property
    @pulumi.getter
    def strategy(self) -> pulumi.Input[str]:
        """
        The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        """
        return pulumi.get(self, "strategy")

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def applications(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarApplicationArgs']]]]:
        return pulumi.get(self, "applications")

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

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

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

    @property
    @pulumi.getter(name="bootstrapActionsFiles")
    def bootstrap_actions_files(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarBootstrapActionsFileArgs']]]]:
        return pulumi.get(self, "bootstrap_actions_files")

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

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler cluster id.
        """
        return pulumi.get(self, "cluster_id")

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

    @property
    @pulumi.getter(name="configurationsFiles")
    def configurations_files(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarConfigurationsFileArgs']]]]:
        return pulumi.get(self, "configurations_files")

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

    @property
    @pulumi.getter(name="coreDesiredCapacity")
    def core_desired_capacity(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "core_desired_capacity")

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

    @property
    @pulumi.getter(name="coreEbsBlockDevices")
    def core_ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreEbsBlockDeviceArgs']]]]:
        return pulumi.get(self, "core_ebs_block_devices")

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

    @property
    @pulumi.getter(name="coreEbsOptimized")
    def core_ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "core_ebs_optimized")

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

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

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

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

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

    @property
    @pulumi.getter(name="coreMaxSize")
    def core_max_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "core_max_size")

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

    @property
    @pulumi.getter(name="coreMinSize")
    def core_min_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "core_min_size")

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

    @property
    @pulumi.getter(name="coreScalingDownPolicies")
    def core_scaling_down_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingDownPolicyArgs']]]]:
        return pulumi.get(self, "core_scaling_down_policies")

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

    @property
    @pulumi.getter(name="coreScalingUpPolicies")
    def core_scaling_up_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingUpPolicyArgs']]]]:
        return pulumi.get(self, "core_scaling_up_policies")

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

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

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

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

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler description.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="ebsRootVolumeSize")
    def ebs_root_volume_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "ebs_root_volume_size")

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

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

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

    @property
    @pulumi.getter(name="exposeClusterId")
    def expose_cluster_id(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow the `cluster_id` to set a provider output variable.
        """
        return pulumi.get(self, "expose_cluster_id")

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

    @property
    @pulumi.getter(name="instanceWeights")
    def instance_weights(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarInstanceWeightArgs']]]]:
        return pulumi.get(self, "instance_weights")

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

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

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

    @property
    @pulumi.getter(name="keepJobFlowAlive")
    def keep_job_flow_alive(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "keep_job_flow_alive")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="masterEbsBlockDevices")
    def master_ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarMasterEbsBlockDeviceArgs']]]]:
        return pulumi.get(self, "master_ebs_block_devices")

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

    @property
    @pulumi.getter(name="masterEbsOptimized")
    def master_ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "master_ebs_optimized")

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

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

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

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

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

    @property
    @pulumi.getter(name="masterTarget")
    def master_target(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "master_target")

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

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

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

    @property
    @pulumi.getter(name="provisioningTimeout")
    def provisioning_timeout(self) -> Optional[pulumi.Input['MrScalarProvisioningTimeoutArgs']]:
        return pulumi.get(self, "provisioning_timeout")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler region.
        """
        return pulumi.get(self, "region")

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

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

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

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

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

    @property
    @pulumi.getter
    def retries(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "retries")

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

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarScheduledTaskArgs']]]]:
        return pulumi.get(self, "scheduled_tasks")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="stepsFiles")
    def steps_files(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarStepsFileArgs']]]]:
        return pulumi.get(self, "steps_files")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTagArgs']]]]:
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter(name="taskDesiredCapacity")
    def task_desired_capacity(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "task_desired_capacity")

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

    @property
    @pulumi.getter(name="taskEbsBlockDevices")
    def task_ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskEbsBlockDeviceArgs']]]]:
        return pulumi.get(self, "task_ebs_block_devices")

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

    @property
    @pulumi.getter(name="taskEbsOptimized")
    def task_ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "task_ebs_optimized")

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

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

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

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

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

    @property
    @pulumi.getter(name="taskMaxSize")
    def task_max_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "task_max_size")

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

    @property
    @pulumi.getter(name="taskMinSize")
    def task_min_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "task_min_size")

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

    @property
    @pulumi.getter(name="taskScalingDownPolicies")
    def task_scaling_down_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingDownPolicyArgs']]]]:
        return pulumi.get(self, "task_scaling_down_policies")

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

    @property
    @pulumi.getter(name="taskScalingUpPolicies")
    def task_scaling_up_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingUpPolicyArgs']]]]:
        return pulumi.get(self, "task_scaling_up_policies")

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

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

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

    @property
    @pulumi.getter(name="terminationPolicies")
    def termination_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTerminationPolicyArgs']]]]:
        """
        Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        return pulumi.get(self, "termination_policies")

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

    @property
    @pulumi.getter(name="terminationProtected")
    def termination_protected(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "termination_protected")

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

    @property
    @pulumi.getter(name="visibleToAllUsers")
    @_utilities.deprecated("""This field has been removed from our API and is no longer functional.""")
    def visible_to_all_users(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "visible_to_all_users")

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


@pulumi.input_type
class _MrScalarState:
    def __init__(__self__, *,
                 additional_info: Optional[pulumi.Input[str]] = None,
                 additional_primary_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 additional_replica_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 applications: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarApplicationArgs']]]] = None,
                 availability_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 bootstrap_actions_files: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarBootstrapActionsFileArgs']]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 configurations_files: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarConfigurationsFileArgs']]]] = None,
                 core_desired_capacity: Optional[pulumi.Input[int]] = None,
                 core_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreEbsBlockDeviceArgs']]]] = None,
                 core_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 core_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 core_lifecycle: Optional[pulumi.Input[str]] = None,
                 core_max_size: Optional[pulumi.Input[int]] = None,
                 core_min_size: Optional[pulumi.Input[int]] = None,
                 core_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingDownPolicyArgs']]]] = None,
                 core_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingUpPolicyArgs']]]] = None,
                 core_unit: Optional[pulumi.Input[str]] = None,
                 custom_ami_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 ebs_root_volume_size: Optional[pulumi.Input[int]] = None,
                 ec2_key_name: Optional[pulumi.Input[str]] = None,
                 expose_cluster_id: Optional[pulumi.Input[bool]] = None,
                 instance_weights: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarInstanceWeightArgs']]]] = None,
                 job_flow_role: Optional[pulumi.Input[str]] = None,
                 keep_job_flow_alive: Optional[pulumi.Input[bool]] = None,
                 log_uri: Optional[pulumi.Input[str]] = None,
                 managed_primary_security_group: Optional[pulumi.Input[str]] = None,
                 managed_replica_security_group: Optional[pulumi.Input[str]] = None,
                 master_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarMasterEbsBlockDeviceArgs']]]] = None,
                 master_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 master_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 master_lifecycle: Optional[pulumi.Input[str]] = None,
                 master_target: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 output_cluster_id: Optional[pulumi.Input[str]] = None,
                 provisioning_timeout: Optional[pulumi.Input['MrScalarProvisioningTimeoutArgs']] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 release_label: Optional[pulumi.Input[str]] = None,
                 repo_upgrade_on_boot: Optional[pulumi.Input[str]] = None,
                 retries: Optional[pulumi.Input[int]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarScheduledTaskArgs']]]] = None,
                 security_config: Optional[pulumi.Input[str]] = None,
                 service_access_security_group: Optional[pulumi.Input[str]] = None,
                 service_role: Optional[pulumi.Input[str]] = None,
                 steps_files: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarStepsFileArgs']]]] = None,
                 strategy: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTagArgs']]]] = None,
                 task_desired_capacity: Optional[pulumi.Input[int]] = None,
                 task_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskEbsBlockDeviceArgs']]]] = None,
                 task_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 task_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 task_lifecycle: Optional[pulumi.Input[str]] = None,
                 task_max_size: Optional[pulumi.Input[int]] = None,
                 task_min_size: Optional[pulumi.Input[int]] = None,
                 task_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingDownPolicyArgs']]]] = None,
                 task_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingUpPolicyArgs']]]] = None,
                 task_unit: Optional[pulumi.Input[str]] = None,
                 termination_policies: Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTerminationPolicyArgs']]]] = None,
                 termination_protected: Optional[pulumi.Input[bool]] = None,
                 visible_to_all_users: Optional[pulumi.Input[bool]] = None):
        """
        Input properties used for looking up and filtering MrScalar resources.
        :param pulumi.Input[str] cluster_id: The MrScaler cluster id.
        :param pulumi.Input[str] description: The MrScaler description.
        :param pulumi.Input[bool] expose_cluster_id: Allow the `cluster_id` to set a provider output variable.
        :param pulumi.Input[str] name: The MrScaler name.
        :param pulumi.Input[str] region: The MrScaler region.
        :param pulumi.Input[str] strategy: The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        :param pulumi.Input[Sequence[pulumi.Input['MrScalarTerminationPolicyArgs']]] termination_policies: Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        if additional_info is not None:
            pulumi.set(__self__, "additional_info", additional_info)
        if additional_primary_security_groups is not None:
            pulumi.set(__self__, "additional_primary_security_groups", additional_primary_security_groups)
        if additional_replica_security_groups is not None:
            pulumi.set(__self__, "additional_replica_security_groups", additional_replica_security_groups)
        if applications is not None:
            pulumi.set(__self__, "applications", applications)
        if availability_zones is not None:
            pulumi.set(__self__, "availability_zones", availability_zones)
        if bootstrap_actions_files is not None:
            pulumi.set(__self__, "bootstrap_actions_files", bootstrap_actions_files)
        if cluster_id is not None:
            pulumi.set(__self__, "cluster_id", cluster_id)
        if configurations_files is not None:
            pulumi.set(__self__, "configurations_files", configurations_files)
        if core_desired_capacity is not None:
            pulumi.set(__self__, "core_desired_capacity", core_desired_capacity)
        if core_ebs_block_devices is not None:
            pulumi.set(__self__, "core_ebs_block_devices", core_ebs_block_devices)
        if core_ebs_optimized is not None:
            pulumi.set(__self__, "core_ebs_optimized", core_ebs_optimized)
        if core_instance_types is not None:
            pulumi.set(__self__, "core_instance_types", core_instance_types)
        if core_lifecycle is not None:
            pulumi.set(__self__, "core_lifecycle", core_lifecycle)
        if core_max_size is not None:
            pulumi.set(__self__, "core_max_size", core_max_size)
        if core_min_size is not None:
            pulumi.set(__self__, "core_min_size", core_min_size)
        if core_scaling_down_policies is not None:
            pulumi.set(__self__, "core_scaling_down_policies", core_scaling_down_policies)
        if core_scaling_up_policies is not None:
            pulumi.set(__self__, "core_scaling_up_policies", core_scaling_up_policies)
        if core_unit is not None:
            pulumi.set(__self__, "core_unit", core_unit)
        if custom_ami_id is not None:
            pulumi.set(__self__, "custom_ami_id", custom_ami_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if ebs_root_volume_size is not None:
            pulumi.set(__self__, "ebs_root_volume_size", ebs_root_volume_size)
        if ec2_key_name is not None:
            pulumi.set(__self__, "ec2_key_name", ec2_key_name)
        if expose_cluster_id is not None:
            pulumi.set(__self__, "expose_cluster_id", expose_cluster_id)
        if instance_weights is not None:
            pulumi.set(__self__, "instance_weights", instance_weights)
        if job_flow_role is not None:
            pulumi.set(__self__, "job_flow_role", job_flow_role)
        if keep_job_flow_alive is not None:
            pulumi.set(__self__, "keep_job_flow_alive", keep_job_flow_alive)
        if log_uri is not None:
            pulumi.set(__self__, "log_uri", log_uri)
        if managed_primary_security_group is not None:
            pulumi.set(__self__, "managed_primary_security_group", managed_primary_security_group)
        if managed_replica_security_group is not None:
            pulumi.set(__self__, "managed_replica_security_group", managed_replica_security_group)
        if master_ebs_block_devices is not None:
            pulumi.set(__self__, "master_ebs_block_devices", master_ebs_block_devices)
        if master_ebs_optimized is not None:
            pulumi.set(__self__, "master_ebs_optimized", master_ebs_optimized)
        if master_instance_types is not None:
            pulumi.set(__self__, "master_instance_types", master_instance_types)
        if master_lifecycle is not None:
            pulumi.set(__self__, "master_lifecycle", master_lifecycle)
        if master_target is not None:
            pulumi.set(__self__, "master_target", master_target)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if output_cluster_id is not None:
            pulumi.set(__self__, "output_cluster_id", output_cluster_id)
        if provisioning_timeout is not None:
            pulumi.set(__self__, "provisioning_timeout", provisioning_timeout)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if release_label is not None:
            pulumi.set(__self__, "release_label", release_label)
        if repo_upgrade_on_boot is not None:
            pulumi.set(__self__, "repo_upgrade_on_boot", repo_upgrade_on_boot)
        if retries is not None:
            pulumi.set(__self__, "retries", retries)
        if scheduled_tasks is not None:
            pulumi.set(__self__, "scheduled_tasks", scheduled_tasks)
        if security_config is not None:
            pulumi.set(__self__, "security_config", security_config)
        if service_access_security_group is not None:
            pulumi.set(__self__, "service_access_security_group", service_access_security_group)
        if service_role is not None:
            pulumi.set(__self__, "service_role", service_role)
        if steps_files is not None:
            pulumi.set(__self__, "steps_files", steps_files)
        if strategy is not None:
            pulumi.set(__self__, "strategy", strategy)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if task_desired_capacity is not None:
            pulumi.set(__self__, "task_desired_capacity", task_desired_capacity)
        if task_ebs_block_devices is not None:
            pulumi.set(__self__, "task_ebs_block_devices", task_ebs_block_devices)
        if task_ebs_optimized is not None:
            pulumi.set(__self__, "task_ebs_optimized", task_ebs_optimized)
        if task_instance_types is not None:
            pulumi.set(__self__, "task_instance_types", task_instance_types)
        if task_lifecycle is not None:
            pulumi.set(__self__, "task_lifecycle", task_lifecycle)
        if task_max_size is not None:
            pulumi.set(__self__, "task_max_size", task_max_size)
        if task_min_size is not None:
            pulumi.set(__self__, "task_min_size", task_min_size)
        if task_scaling_down_policies is not None:
            pulumi.set(__self__, "task_scaling_down_policies", task_scaling_down_policies)
        if task_scaling_up_policies is not None:
            pulumi.set(__self__, "task_scaling_up_policies", task_scaling_up_policies)
        if task_unit is not None:
            pulumi.set(__self__, "task_unit", task_unit)
        if termination_policies is not None:
            pulumi.set(__self__, "termination_policies", termination_policies)
        if termination_protected is not None:
            pulumi.set(__self__, "termination_protected", termination_protected)
        if visible_to_all_users is not None:
            warnings.warn("""This field has been removed from our API and is no longer functional.""", DeprecationWarning)
            pulumi.log.warn("""visible_to_all_users is deprecated: This field has been removed from our API and is no longer functional.""")
        if visible_to_all_users is not None:
            pulumi.set(__self__, "visible_to_all_users", visible_to_all_users)

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

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

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

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

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

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

    @property
    @pulumi.getter
    def applications(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarApplicationArgs']]]]:
        return pulumi.get(self, "applications")

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

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

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

    @property
    @pulumi.getter(name="bootstrapActionsFiles")
    def bootstrap_actions_files(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarBootstrapActionsFileArgs']]]]:
        return pulumi.get(self, "bootstrap_actions_files")

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

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler cluster id.
        """
        return pulumi.get(self, "cluster_id")

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

    @property
    @pulumi.getter(name="configurationsFiles")
    def configurations_files(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarConfigurationsFileArgs']]]]:
        return pulumi.get(self, "configurations_files")

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

    @property
    @pulumi.getter(name="coreDesiredCapacity")
    def core_desired_capacity(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "core_desired_capacity")

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

    @property
    @pulumi.getter(name="coreEbsBlockDevices")
    def core_ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreEbsBlockDeviceArgs']]]]:
        return pulumi.get(self, "core_ebs_block_devices")

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

    @property
    @pulumi.getter(name="coreEbsOptimized")
    def core_ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "core_ebs_optimized")

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

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

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

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

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

    @property
    @pulumi.getter(name="coreMaxSize")
    def core_max_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "core_max_size")

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

    @property
    @pulumi.getter(name="coreMinSize")
    def core_min_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "core_min_size")

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

    @property
    @pulumi.getter(name="coreScalingDownPolicies")
    def core_scaling_down_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingDownPolicyArgs']]]]:
        return pulumi.get(self, "core_scaling_down_policies")

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

    @property
    @pulumi.getter(name="coreScalingUpPolicies")
    def core_scaling_up_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarCoreScalingUpPolicyArgs']]]]:
        return pulumi.get(self, "core_scaling_up_policies")

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

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

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

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

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler description.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="ebsRootVolumeSize")
    def ebs_root_volume_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "ebs_root_volume_size")

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

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

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

    @property
    @pulumi.getter(name="exposeClusterId")
    def expose_cluster_id(self) -> Optional[pulumi.Input[bool]]:
        """
        Allow the `cluster_id` to set a provider output variable.
        """
        return pulumi.get(self, "expose_cluster_id")

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

    @property
    @pulumi.getter(name="instanceWeights")
    def instance_weights(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarInstanceWeightArgs']]]]:
        return pulumi.get(self, "instance_weights")

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

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

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

    @property
    @pulumi.getter(name="keepJobFlowAlive")
    def keep_job_flow_alive(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "keep_job_flow_alive")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="masterEbsBlockDevices")
    def master_ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarMasterEbsBlockDeviceArgs']]]]:
        return pulumi.get(self, "master_ebs_block_devices")

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

    @property
    @pulumi.getter(name="masterEbsOptimized")
    def master_ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "master_ebs_optimized")

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

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

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

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

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

    @property
    @pulumi.getter(name="masterTarget")
    def master_target(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "master_target")

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

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

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

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

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

    @property
    @pulumi.getter(name="provisioningTimeout")
    def provisioning_timeout(self) -> Optional[pulumi.Input['MrScalarProvisioningTimeoutArgs']]:
        return pulumi.get(self, "provisioning_timeout")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler region.
        """
        return pulumi.get(self, "region")

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

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

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

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

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

    @property
    @pulumi.getter
    def retries(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "retries")

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

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarScheduledTaskArgs']]]]:
        return pulumi.get(self, "scheduled_tasks")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="stepsFiles")
    def steps_files(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarStepsFileArgs']]]]:
        return pulumi.get(self, "steps_files")

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

    @property
    @pulumi.getter
    def strategy(self) -> Optional[pulumi.Input[str]]:
        """
        The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        """
        return pulumi.get(self, "strategy")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTagArgs']]]]:
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter(name="taskDesiredCapacity")
    def task_desired_capacity(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "task_desired_capacity")

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

    @property
    @pulumi.getter(name="taskEbsBlockDevices")
    def task_ebs_block_devices(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskEbsBlockDeviceArgs']]]]:
        return pulumi.get(self, "task_ebs_block_devices")

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

    @property
    @pulumi.getter(name="taskEbsOptimized")
    def task_ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "task_ebs_optimized")

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

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

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

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

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

    @property
    @pulumi.getter(name="taskMaxSize")
    def task_max_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "task_max_size")

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

    @property
    @pulumi.getter(name="taskMinSize")
    def task_min_size(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "task_min_size")

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

    @property
    @pulumi.getter(name="taskScalingDownPolicies")
    def task_scaling_down_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingDownPolicyArgs']]]]:
        return pulumi.get(self, "task_scaling_down_policies")

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

    @property
    @pulumi.getter(name="taskScalingUpPolicies")
    def task_scaling_up_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTaskScalingUpPolicyArgs']]]]:
        return pulumi.get(self, "task_scaling_up_policies")

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

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

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

    @property
    @pulumi.getter(name="terminationPolicies")
    def termination_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MrScalarTerminationPolicyArgs']]]]:
        """
        Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        return pulumi.get(self, "termination_policies")

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

    @property
    @pulumi.getter(name="terminationProtected")
    def termination_protected(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "termination_protected")

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

    @property
    @pulumi.getter(name="visibleToAllUsers")
    @_utilities.deprecated("""This field has been removed from our API and is no longer functional.""")
    def visible_to_all_users(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "visible_to_all_users")

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


class MrScalar(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 additional_info: Optional[pulumi.Input[str]] = None,
                 additional_primary_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 additional_replica_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 applications: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarApplicationArgs', 'MrScalarApplicationArgsDict']]]]] = None,
                 availability_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 bootstrap_actions_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarBootstrapActionsFileArgs', 'MrScalarBootstrapActionsFileArgsDict']]]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 configurations_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarConfigurationsFileArgs', 'MrScalarConfigurationsFileArgsDict']]]]] = None,
                 core_desired_capacity: Optional[pulumi.Input[int]] = None,
                 core_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreEbsBlockDeviceArgs', 'MrScalarCoreEbsBlockDeviceArgsDict']]]]] = None,
                 core_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 core_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 core_lifecycle: Optional[pulumi.Input[str]] = None,
                 core_max_size: Optional[pulumi.Input[int]] = None,
                 core_min_size: Optional[pulumi.Input[int]] = None,
                 core_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreScalingDownPolicyArgs', 'MrScalarCoreScalingDownPolicyArgsDict']]]]] = None,
                 core_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreScalingUpPolicyArgs', 'MrScalarCoreScalingUpPolicyArgsDict']]]]] = None,
                 core_unit: Optional[pulumi.Input[str]] = None,
                 custom_ami_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 ebs_root_volume_size: Optional[pulumi.Input[int]] = None,
                 ec2_key_name: Optional[pulumi.Input[str]] = None,
                 expose_cluster_id: Optional[pulumi.Input[bool]] = None,
                 instance_weights: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarInstanceWeightArgs', 'MrScalarInstanceWeightArgsDict']]]]] = None,
                 job_flow_role: Optional[pulumi.Input[str]] = None,
                 keep_job_flow_alive: Optional[pulumi.Input[bool]] = None,
                 log_uri: Optional[pulumi.Input[str]] = None,
                 managed_primary_security_group: Optional[pulumi.Input[str]] = None,
                 managed_replica_security_group: Optional[pulumi.Input[str]] = None,
                 master_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarMasterEbsBlockDeviceArgs', 'MrScalarMasterEbsBlockDeviceArgsDict']]]]] = None,
                 master_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 master_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 master_lifecycle: Optional[pulumi.Input[str]] = None,
                 master_target: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 provisioning_timeout: Optional[pulumi.Input[Union['MrScalarProvisioningTimeoutArgs', 'MrScalarProvisioningTimeoutArgsDict']]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 release_label: Optional[pulumi.Input[str]] = None,
                 repo_upgrade_on_boot: Optional[pulumi.Input[str]] = None,
                 retries: Optional[pulumi.Input[int]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarScheduledTaskArgs', 'MrScalarScheduledTaskArgsDict']]]]] = None,
                 security_config: Optional[pulumi.Input[str]] = None,
                 service_access_security_group: Optional[pulumi.Input[str]] = None,
                 service_role: Optional[pulumi.Input[str]] = None,
                 steps_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarStepsFileArgs', 'MrScalarStepsFileArgsDict']]]]] = None,
                 strategy: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTagArgs', 'MrScalarTagArgsDict']]]]] = None,
                 task_desired_capacity: Optional[pulumi.Input[int]] = None,
                 task_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskEbsBlockDeviceArgs', 'MrScalarTaskEbsBlockDeviceArgsDict']]]]] = None,
                 task_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 task_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 task_lifecycle: Optional[pulumi.Input[str]] = None,
                 task_max_size: Optional[pulumi.Input[int]] = None,
                 task_min_size: Optional[pulumi.Input[int]] = None,
                 task_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskScalingDownPolicyArgs', 'MrScalarTaskScalingDownPolicyArgsDict']]]]] = None,
                 task_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskScalingUpPolicyArgs', 'MrScalarTaskScalingUpPolicyArgsDict']]]]] = None,
                 task_unit: Optional[pulumi.Input[str]] = None,
                 termination_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTerminationPolicyArgs', 'MrScalarTerminationPolicyArgsDict']]]]] = None,
                 termination_protected: Optional[pulumi.Input[bool]] = None,
                 visible_to_all_users: Optional[pulumi.Input[bool]] = None,
                 __props__=None):
        """
        Provides a Spotinst AWS MrScaler resource.

        ## Example Usage

        ### Wrap Strategy

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        # Create a Mr Scaler with Wrap strategy
        example_scaler_2 = spotinst.aws.MrScalar("example-scaler-2",
            name="spotinst-mr-scaler-2",
            description="created by Pulumi",
            region="us-west-2",
            strategy="wrap",
            cluster_id="j-27UVDEHXL4OQM",
            task_instance_types=[
                "c3.xlarge",
                "c4.xlarge",
            ],
            task_desired_capacity=2,
            task_min_size=0,
            task_max_size=4,
            task_lifecycle="SPOT",
            task_unit="instance",
            task_ebs_block_devices=[{
                "volumes_per_instance": 1,
                "volume_type": "gp2",
                "size_in_gb": 20,
            }])
        ```

        ### New Strategy

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        # Create a Mr Scaler with New strategy
        sample__mr_scaler_01 = spotinst.aws.MrScalar("sample-MrScaler-01",
            name="sample-MrScaler-01",
            description="Testing MrScaler creation",
            region="us-west-2",
            strategy="new",
            release_label="emr-5.17.0",
            retries=2,
            availability_zones=["us-west-2a:subnet-123456"],
            provisioning_timeout={
                "timeout": 15,
                "timeout_action": "terminateAndRetry",
            },
            log_uri="s3://example-logs",
            additional_info="{'test':'more information'}",
            job_flow_role="EMR_EC2_ExampleRole",
            security_config="example-config",
            service_role="example-role",
            termination_protected=False,
            keep_job_flow_alive=True,
            custom_ami_id="ami-123456",
            repo_upgrade_on_boot="NONE",
            ec2_key_name="test-key",
            managed_primary_security_group="sg-123456",
            managed_replica_security_group="sg-987654",
            service_access_security_group="access-example",
            additional_primary_security_groups=["sg-456321"],
            additional_replica_security_groups=["sg-123654"],
            applications=[
                {
                    "name": "Ganglia",
                    "version": "1.0",
                },
                {
                    "name": "Hadoop",
                },
                {
                    "name": "Pig",
                    "args": [
                        "fake",
                        "args",
                    ],
                },
            ],
            instance_weights=[
                {
                    "instance_type": "t2.small",
                    "weighted_capacity": 10,
                },
                {
                    "instance_type": "t2.medium",
                    "weighted_capacity": 90,
                },
            ],
            steps_files=[{
                "bucket": "example-bucket",
                "key": "steps.json",
            }],
            configurations_files=[{
                "bucket": "example-bucket",
                "key": "configurations.json",
            }],
            bootstrap_actions_files=[{
                "bucket": "sample-emr-test",
                "key": "bootstrap-actions.json",
            }],
            master_instance_types=["c3.xlarge"],
            master_lifecycle="SPOT",
            master_ebs_optimized=True,
            master_target=1,
            master_ebs_block_devices=[{
                "volumes_per_instance": 1,
                "volume_type": "gp2",
                "size_in_gb": 30,
            }],
            core_instance_types=[
                "c3.xlarge",
                "c4.xlarge",
            ],
            core_min_size=1,
            core_max_size=1,
            core_desired_capacity=1,
            core_lifecycle="ON_DEMAND",
            core_ebs_optimized=False,
            core_unit="instance",
            core_ebs_block_devices=[{
                "volumes_per_instance": 2,
                "volume_type": "gp2",
                "size_in_gb": 40,
            }],
            task_instance_types=[
                "c3.xlarge",
                "c4.xlarge",
            ],
            task_min_size=0,
            task_max_size=30,
            task_desired_capacity=1,
            task_lifecycle="SPOT",
            task_ebs_optimized=False,
            task_unit="instance",
            task_ebs_block_devices=[{
                "volumes_per_instance": 2,
                "volume_type": "gp2",
                "size_in_gb": 40,
            }],
            tags=[{
                "key": "Creator",
                "value": "Pulumi",
            }])
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] cluster_id: The MrScaler cluster id.
        :param pulumi.Input[str] description: The MrScaler description.
        :param pulumi.Input[bool] expose_cluster_id: Allow the `cluster_id` to set a provider output variable.
        :param pulumi.Input[str] name: The MrScaler name.
        :param pulumi.Input[str] region: The MrScaler region.
        :param pulumi.Input[str] strategy: The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        :param pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTerminationPolicyArgs', 'MrScalarTerminationPolicyArgsDict']]]] termination_policies: Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: MrScalarArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Provides a Spotinst AWS MrScaler resource.

        ## Example Usage

        ### Wrap Strategy

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        # Create a Mr Scaler with Wrap strategy
        example_scaler_2 = spotinst.aws.MrScalar("example-scaler-2",
            name="spotinst-mr-scaler-2",
            description="created by Pulumi",
            region="us-west-2",
            strategy="wrap",
            cluster_id="j-27UVDEHXL4OQM",
            task_instance_types=[
                "c3.xlarge",
                "c4.xlarge",
            ],
            task_desired_capacity=2,
            task_min_size=0,
            task_max_size=4,
            task_lifecycle="SPOT",
            task_unit="instance",
            task_ebs_block_devices=[{
                "volumes_per_instance": 1,
                "volume_type": "gp2",
                "size_in_gb": 20,
            }])
        ```

        ### New Strategy

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        # Create a Mr Scaler with New strategy
        sample__mr_scaler_01 = spotinst.aws.MrScalar("sample-MrScaler-01",
            name="sample-MrScaler-01",
            description="Testing MrScaler creation",
            region="us-west-2",
            strategy="new",
            release_label="emr-5.17.0",
            retries=2,
            availability_zones=["us-west-2a:subnet-123456"],
            provisioning_timeout={
                "timeout": 15,
                "timeout_action": "terminateAndRetry",
            },
            log_uri="s3://example-logs",
            additional_info="{'test':'more information'}",
            job_flow_role="EMR_EC2_ExampleRole",
            security_config="example-config",
            service_role="example-role",
            termination_protected=False,
            keep_job_flow_alive=True,
            custom_ami_id="ami-123456",
            repo_upgrade_on_boot="NONE",
            ec2_key_name="test-key",
            managed_primary_security_group="sg-123456",
            managed_replica_security_group="sg-987654",
            service_access_security_group="access-example",
            additional_primary_security_groups=["sg-456321"],
            additional_replica_security_groups=["sg-123654"],
            applications=[
                {
                    "name": "Ganglia",
                    "version": "1.0",
                },
                {
                    "name": "Hadoop",
                },
                {
                    "name": "Pig",
                    "args": [
                        "fake",
                        "args",
                    ],
                },
            ],
            instance_weights=[
                {
                    "instance_type": "t2.small",
                    "weighted_capacity": 10,
                },
                {
                    "instance_type": "t2.medium",
                    "weighted_capacity": 90,
                },
            ],
            steps_files=[{
                "bucket": "example-bucket",
                "key": "steps.json",
            }],
            configurations_files=[{
                "bucket": "example-bucket",
                "key": "configurations.json",
            }],
            bootstrap_actions_files=[{
                "bucket": "sample-emr-test",
                "key": "bootstrap-actions.json",
            }],
            master_instance_types=["c3.xlarge"],
            master_lifecycle="SPOT",
            master_ebs_optimized=True,
            master_target=1,
            master_ebs_block_devices=[{
                "volumes_per_instance": 1,
                "volume_type": "gp2",
                "size_in_gb": 30,
            }],
            core_instance_types=[
                "c3.xlarge",
                "c4.xlarge",
            ],
            core_min_size=1,
            core_max_size=1,
            core_desired_capacity=1,
            core_lifecycle="ON_DEMAND",
            core_ebs_optimized=False,
            core_unit="instance",
            core_ebs_block_devices=[{
                "volumes_per_instance": 2,
                "volume_type": "gp2",
                "size_in_gb": 40,
            }],
            task_instance_types=[
                "c3.xlarge",
                "c4.xlarge",
            ],
            task_min_size=0,
            task_max_size=30,
            task_desired_capacity=1,
            task_lifecycle="SPOT",
            task_ebs_optimized=False,
            task_unit="instance",
            task_ebs_block_devices=[{
                "volumes_per_instance": 2,
                "volume_type": "gp2",
                "size_in_gb": 40,
            }],
            tags=[{
                "key": "Creator",
                "value": "Pulumi",
            }])
        ```

        :param str resource_name: The name of the resource.
        :param MrScalarArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(MrScalarArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 additional_info: Optional[pulumi.Input[str]] = None,
                 additional_primary_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 additional_replica_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 applications: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarApplicationArgs', 'MrScalarApplicationArgsDict']]]]] = None,
                 availability_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 bootstrap_actions_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarBootstrapActionsFileArgs', 'MrScalarBootstrapActionsFileArgsDict']]]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 configurations_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarConfigurationsFileArgs', 'MrScalarConfigurationsFileArgsDict']]]]] = None,
                 core_desired_capacity: Optional[pulumi.Input[int]] = None,
                 core_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreEbsBlockDeviceArgs', 'MrScalarCoreEbsBlockDeviceArgsDict']]]]] = None,
                 core_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 core_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 core_lifecycle: Optional[pulumi.Input[str]] = None,
                 core_max_size: Optional[pulumi.Input[int]] = None,
                 core_min_size: Optional[pulumi.Input[int]] = None,
                 core_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreScalingDownPolicyArgs', 'MrScalarCoreScalingDownPolicyArgsDict']]]]] = None,
                 core_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreScalingUpPolicyArgs', 'MrScalarCoreScalingUpPolicyArgsDict']]]]] = None,
                 core_unit: Optional[pulumi.Input[str]] = None,
                 custom_ami_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 ebs_root_volume_size: Optional[pulumi.Input[int]] = None,
                 ec2_key_name: Optional[pulumi.Input[str]] = None,
                 expose_cluster_id: Optional[pulumi.Input[bool]] = None,
                 instance_weights: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarInstanceWeightArgs', 'MrScalarInstanceWeightArgsDict']]]]] = None,
                 job_flow_role: Optional[pulumi.Input[str]] = None,
                 keep_job_flow_alive: Optional[pulumi.Input[bool]] = None,
                 log_uri: Optional[pulumi.Input[str]] = None,
                 managed_primary_security_group: Optional[pulumi.Input[str]] = None,
                 managed_replica_security_group: Optional[pulumi.Input[str]] = None,
                 master_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarMasterEbsBlockDeviceArgs', 'MrScalarMasterEbsBlockDeviceArgsDict']]]]] = None,
                 master_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 master_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 master_lifecycle: Optional[pulumi.Input[str]] = None,
                 master_target: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 provisioning_timeout: Optional[pulumi.Input[Union['MrScalarProvisioningTimeoutArgs', 'MrScalarProvisioningTimeoutArgsDict']]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 release_label: Optional[pulumi.Input[str]] = None,
                 repo_upgrade_on_boot: Optional[pulumi.Input[str]] = None,
                 retries: Optional[pulumi.Input[int]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarScheduledTaskArgs', 'MrScalarScheduledTaskArgsDict']]]]] = None,
                 security_config: Optional[pulumi.Input[str]] = None,
                 service_access_security_group: Optional[pulumi.Input[str]] = None,
                 service_role: Optional[pulumi.Input[str]] = None,
                 steps_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarStepsFileArgs', 'MrScalarStepsFileArgsDict']]]]] = None,
                 strategy: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTagArgs', 'MrScalarTagArgsDict']]]]] = None,
                 task_desired_capacity: Optional[pulumi.Input[int]] = None,
                 task_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskEbsBlockDeviceArgs', 'MrScalarTaskEbsBlockDeviceArgsDict']]]]] = None,
                 task_ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 task_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 task_lifecycle: Optional[pulumi.Input[str]] = None,
                 task_max_size: Optional[pulumi.Input[int]] = None,
                 task_min_size: Optional[pulumi.Input[int]] = None,
                 task_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskScalingDownPolicyArgs', 'MrScalarTaskScalingDownPolicyArgsDict']]]]] = None,
                 task_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskScalingUpPolicyArgs', 'MrScalarTaskScalingUpPolicyArgsDict']]]]] = None,
                 task_unit: Optional[pulumi.Input[str]] = None,
                 termination_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTerminationPolicyArgs', 'MrScalarTerminationPolicyArgsDict']]]]] = None,
                 termination_protected: Optional[pulumi.Input[bool]] = None,
                 visible_to_all_users: Optional[pulumi.Input[bool]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = MrScalarArgs.__new__(MrScalarArgs)

            __props__.__dict__["additional_info"] = additional_info
            __props__.__dict__["additional_primary_security_groups"] = additional_primary_security_groups
            __props__.__dict__["additional_replica_security_groups"] = additional_replica_security_groups
            __props__.__dict__["applications"] = applications
            __props__.__dict__["availability_zones"] = availability_zones
            __props__.__dict__["bootstrap_actions_files"] = bootstrap_actions_files
            __props__.__dict__["cluster_id"] = cluster_id
            __props__.__dict__["configurations_files"] = configurations_files
            __props__.__dict__["core_desired_capacity"] = core_desired_capacity
            __props__.__dict__["core_ebs_block_devices"] = core_ebs_block_devices
            __props__.__dict__["core_ebs_optimized"] = core_ebs_optimized
            __props__.__dict__["core_instance_types"] = core_instance_types
            __props__.__dict__["core_lifecycle"] = core_lifecycle
            __props__.__dict__["core_max_size"] = core_max_size
            __props__.__dict__["core_min_size"] = core_min_size
            __props__.__dict__["core_scaling_down_policies"] = core_scaling_down_policies
            __props__.__dict__["core_scaling_up_policies"] = core_scaling_up_policies
            __props__.__dict__["core_unit"] = core_unit
            __props__.__dict__["custom_ami_id"] = custom_ami_id
            __props__.__dict__["description"] = description
            __props__.__dict__["ebs_root_volume_size"] = ebs_root_volume_size
            __props__.__dict__["ec2_key_name"] = ec2_key_name
            __props__.__dict__["expose_cluster_id"] = expose_cluster_id
            __props__.__dict__["instance_weights"] = instance_weights
            __props__.__dict__["job_flow_role"] = job_flow_role
            __props__.__dict__["keep_job_flow_alive"] = keep_job_flow_alive
            __props__.__dict__["log_uri"] = log_uri
            __props__.__dict__["managed_primary_security_group"] = managed_primary_security_group
            __props__.__dict__["managed_replica_security_group"] = managed_replica_security_group
            __props__.__dict__["master_ebs_block_devices"] = master_ebs_block_devices
            __props__.__dict__["master_ebs_optimized"] = master_ebs_optimized
            __props__.__dict__["master_instance_types"] = master_instance_types
            __props__.__dict__["master_lifecycle"] = master_lifecycle
            __props__.__dict__["master_target"] = master_target
            __props__.__dict__["name"] = name
            __props__.__dict__["provisioning_timeout"] = provisioning_timeout
            __props__.__dict__["region"] = region
            __props__.__dict__["release_label"] = release_label
            __props__.__dict__["repo_upgrade_on_boot"] = repo_upgrade_on_boot
            __props__.__dict__["retries"] = retries
            __props__.__dict__["scheduled_tasks"] = scheduled_tasks
            __props__.__dict__["security_config"] = security_config
            __props__.__dict__["service_access_security_group"] = service_access_security_group
            __props__.__dict__["service_role"] = service_role
            __props__.__dict__["steps_files"] = steps_files
            if strategy is None and not opts.urn:
                raise TypeError("Missing required property 'strategy'")
            __props__.__dict__["strategy"] = strategy
            __props__.__dict__["tags"] = tags
            __props__.__dict__["task_desired_capacity"] = task_desired_capacity
            __props__.__dict__["task_ebs_block_devices"] = task_ebs_block_devices
            __props__.__dict__["task_ebs_optimized"] = task_ebs_optimized
            __props__.__dict__["task_instance_types"] = task_instance_types
            __props__.__dict__["task_lifecycle"] = task_lifecycle
            __props__.__dict__["task_max_size"] = task_max_size
            __props__.__dict__["task_min_size"] = task_min_size
            __props__.__dict__["task_scaling_down_policies"] = task_scaling_down_policies
            __props__.__dict__["task_scaling_up_policies"] = task_scaling_up_policies
            __props__.__dict__["task_unit"] = task_unit
            __props__.__dict__["termination_policies"] = termination_policies
            __props__.__dict__["termination_protected"] = termination_protected
            __props__.__dict__["visible_to_all_users"] = visible_to_all_users
            __props__.__dict__["output_cluster_id"] = None
        super(MrScalar, __self__).__init__(
            'spotinst:aws/mrScalar:MrScalar',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            additional_info: Optional[pulumi.Input[str]] = None,
            additional_primary_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            additional_replica_security_groups: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            applications: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarApplicationArgs', 'MrScalarApplicationArgsDict']]]]] = None,
            availability_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            bootstrap_actions_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarBootstrapActionsFileArgs', 'MrScalarBootstrapActionsFileArgsDict']]]]] = None,
            cluster_id: Optional[pulumi.Input[str]] = None,
            configurations_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarConfigurationsFileArgs', 'MrScalarConfigurationsFileArgsDict']]]]] = None,
            core_desired_capacity: Optional[pulumi.Input[int]] = None,
            core_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreEbsBlockDeviceArgs', 'MrScalarCoreEbsBlockDeviceArgsDict']]]]] = None,
            core_ebs_optimized: Optional[pulumi.Input[bool]] = None,
            core_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            core_lifecycle: Optional[pulumi.Input[str]] = None,
            core_max_size: Optional[pulumi.Input[int]] = None,
            core_min_size: Optional[pulumi.Input[int]] = None,
            core_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreScalingDownPolicyArgs', 'MrScalarCoreScalingDownPolicyArgsDict']]]]] = None,
            core_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarCoreScalingUpPolicyArgs', 'MrScalarCoreScalingUpPolicyArgsDict']]]]] = None,
            core_unit: Optional[pulumi.Input[str]] = None,
            custom_ami_id: Optional[pulumi.Input[str]] = None,
            description: Optional[pulumi.Input[str]] = None,
            ebs_root_volume_size: Optional[pulumi.Input[int]] = None,
            ec2_key_name: Optional[pulumi.Input[str]] = None,
            expose_cluster_id: Optional[pulumi.Input[bool]] = None,
            instance_weights: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarInstanceWeightArgs', 'MrScalarInstanceWeightArgsDict']]]]] = None,
            job_flow_role: Optional[pulumi.Input[str]] = None,
            keep_job_flow_alive: Optional[pulumi.Input[bool]] = None,
            log_uri: Optional[pulumi.Input[str]] = None,
            managed_primary_security_group: Optional[pulumi.Input[str]] = None,
            managed_replica_security_group: Optional[pulumi.Input[str]] = None,
            master_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarMasterEbsBlockDeviceArgs', 'MrScalarMasterEbsBlockDeviceArgsDict']]]]] = None,
            master_ebs_optimized: Optional[pulumi.Input[bool]] = None,
            master_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            master_lifecycle: Optional[pulumi.Input[str]] = None,
            master_target: Optional[pulumi.Input[int]] = None,
            name: Optional[pulumi.Input[str]] = None,
            output_cluster_id: Optional[pulumi.Input[str]] = None,
            provisioning_timeout: Optional[pulumi.Input[Union['MrScalarProvisioningTimeoutArgs', 'MrScalarProvisioningTimeoutArgsDict']]] = None,
            region: Optional[pulumi.Input[str]] = None,
            release_label: Optional[pulumi.Input[str]] = None,
            repo_upgrade_on_boot: Optional[pulumi.Input[str]] = None,
            retries: Optional[pulumi.Input[int]] = None,
            scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarScheduledTaskArgs', 'MrScalarScheduledTaskArgsDict']]]]] = None,
            security_config: Optional[pulumi.Input[str]] = None,
            service_access_security_group: Optional[pulumi.Input[str]] = None,
            service_role: Optional[pulumi.Input[str]] = None,
            steps_files: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarStepsFileArgs', 'MrScalarStepsFileArgsDict']]]]] = None,
            strategy: Optional[pulumi.Input[str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTagArgs', 'MrScalarTagArgsDict']]]]] = None,
            task_desired_capacity: Optional[pulumi.Input[int]] = None,
            task_ebs_block_devices: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskEbsBlockDeviceArgs', 'MrScalarTaskEbsBlockDeviceArgsDict']]]]] = None,
            task_ebs_optimized: Optional[pulumi.Input[bool]] = None,
            task_instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            task_lifecycle: Optional[pulumi.Input[str]] = None,
            task_max_size: Optional[pulumi.Input[int]] = None,
            task_min_size: Optional[pulumi.Input[int]] = None,
            task_scaling_down_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskScalingDownPolicyArgs', 'MrScalarTaskScalingDownPolicyArgsDict']]]]] = None,
            task_scaling_up_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTaskScalingUpPolicyArgs', 'MrScalarTaskScalingUpPolicyArgsDict']]]]] = None,
            task_unit: Optional[pulumi.Input[str]] = None,
            termination_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTerminationPolicyArgs', 'MrScalarTerminationPolicyArgsDict']]]]] = None,
            termination_protected: Optional[pulumi.Input[bool]] = None,
            visible_to_all_users: Optional[pulumi.Input[bool]] = None) -> 'MrScalar':
        """
        Get an existing MrScalar resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] cluster_id: The MrScaler cluster id.
        :param pulumi.Input[str] description: The MrScaler description.
        :param pulumi.Input[bool] expose_cluster_id: Allow the `cluster_id` to set a provider output variable.
        :param pulumi.Input[str] name: The MrScaler name.
        :param pulumi.Input[str] region: The MrScaler region.
        :param pulumi.Input[str] strategy: The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        :param pulumi.Input[Sequence[pulumi.Input[Union['MrScalarTerminationPolicyArgs', 'MrScalarTerminationPolicyArgsDict']]]] termination_policies: Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _MrScalarState.__new__(_MrScalarState)

        __props__.__dict__["additional_info"] = additional_info
        __props__.__dict__["additional_primary_security_groups"] = additional_primary_security_groups
        __props__.__dict__["additional_replica_security_groups"] = additional_replica_security_groups
        __props__.__dict__["applications"] = applications
        __props__.__dict__["availability_zones"] = availability_zones
        __props__.__dict__["bootstrap_actions_files"] = bootstrap_actions_files
        __props__.__dict__["cluster_id"] = cluster_id
        __props__.__dict__["configurations_files"] = configurations_files
        __props__.__dict__["core_desired_capacity"] = core_desired_capacity
        __props__.__dict__["core_ebs_block_devices"] = core_ebs_block_devices
        __props__.__dict__["core_ebs_optimized"] = core_ebs_optimized
        __props__.__dict__["core_instance_types"] = core_instance_types
        __props__.__dict__["core_lifecycle"] = core_lifecycle
        __props__.__dict__["core_max_size"] = core_max_size
        __props__.__dict__["core_min_size"] = core_min_size
        __props__.__dict__["core_scaling_down_policies"] = core_scaling_down_policies
        __props__.__dict__["core_scaling_up_policies"] = core_scaling_up_policies
        __props__.__dict__["core_unit"] = core_unit
        __props__.__dict__["custom_ami_id"] = custom_ami_id
        __props__.__dict__["description"] = description
        __props__.__dict__["ebs_root_volume_size"] = ebs_root_volume_size
        __props__.__dict__["ec2_key_name"] = ec2_key_name
        __props__.__dict__["expose_cluster_id"] = expose_cluster_id
        __props__.__dict__["instance_weights"] = instance_weights
        __props__.__dict__["job_flow_role"] = job_flow_role
        __props__.__dict__["keep_job_flow_alive"] = keep_job_flow_alive
        __props__.__dict__["log_uri"] = log_uri
        __props__.__dict__["managed_primary_security_group"] = managed_primary_security_group
        __props__.__dict__["managed_replica_security_group"] = managed_replica_security_group
        __props__.__dict__["master_ebs_block_devices"] = master_ebs_block_devices
        __props__.__dict__["master_ebs_optimized"] = master_ebs_optimized
        __props__.__dict__["master_instance_types"] = master_instance_types
        __props__.__dict__["master_lifecycle"] = master_lifecycle
        __props__.__dict__["master_target"] = master_target
        __props__.__dict__["name"] = name
        __props__.__dict__["output_cluster_id"] = output_cluster_id
        __props__.__dict__["provisioning_timeout"] = provisioning_timeout
        __props__.__dict__["region"] = region
        __props__.__dict__["release_label"] = release_label
        __props__.__dict__["repo_upgrade_on_boot"] = repo_upgrade_on_boot
        __props__.__dict__["retries"] = retries
        __props__.__dict__["scheduled_tasks"] = scheduled_tasks
        __props__.__dict__["security_config"] = security_config
        __props__.__dict__["service_access_security_group"] = service_access_security_group
        __props__.__dict__["service_role"] = service_role
        __props__.__dict__["steps_files"] = steps_files
        __props__.__dict__["strategy"] = strategy
        __props__.__dict__["tags"] = tags
        __props__.__dict__["task_desired_capacity"] = task_desired_capacity
        __props__.__dict__["task_ebs_block_devices"] = task_ebs_block_devices
        __props__.__dict__["task_ebs_optimized"] = task_ebs_optimized
        __props__.__dict__["task_instance_types"] = task_instance_types
        __props__.__dict__["task_lifecycle"] = task_lifecycle
        __props__.__dict__["task_max_size"] = task_max_size
        __props__.__dict__["task_min_size"] = task_min_size
        __props__.__dict__["task_scaling_down_policies"] = task_scaling_down_policies
        __props__.__dict__["task_scaling_up_policies"] = task_scaling_up_policies
        __props__.__dict__["task_unit"] = task_unit
        __props__.__dict__["termination_policies"] = termination_policies
        __props__.__dict__["termination_protected"] = termination_protected
        __props__.__dict__["visible_to_all_users"] = visible_to_all_users
        return MrScalar(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="additionalInfo")
    def additional_info(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "additional_info")

    @property
    @pulumi.getter(name="additionalPrimarySecurityGroups")
    def additional_primary_security_groups(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "additional_primary_security_groups")

    @property
    @pulumi.getter(name="additionalReplicaSecurityGroups")
    def additional_replica_security_groups(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "additional_replica_security_groups")

    @property
    @pulumi.getter
    def applications(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarApplication']]]:
        return pulumi.get(self, "applications")

    @property
    @pulumi.getter(name="availabilityZones")
    def availability_zones(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "availability_zones")

    @property
    @pulumi.getter(name="bootstrapActionsFiles")
    def bootstrap_actions_files(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarBootstrapActionsFile']]]:
        return pulumi.get(self, "bootstrap_actions_files")

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> pulumi.Output[Optional[str]]:
        """
        The MrScaler cluster id.
        """
        return pulumi.get(self, "cluster_id")

    @property
    @pulumi.getter(name="configurationsFiles")
    def configurations_files(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarConfigurationsFile']]]:
        return pulumi.get(self, "configurations_files")

    @property
    @pulumi.getter(name="coreDesiredCapacity")
    def core_desired_capacity(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "core_desired_capacity")

    @property
    @pulumi.getter(name="coreEbsBlockDevices")
    def core_ebs_block_devices(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarCoreEbsBlockDevice']]]:
        return pulumi.get(self, "core_ebs_block_devices")

    @property
    @pulumi.getter(name="coreEbsOptimized")
    def core_ebs_optimized(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "core_ebs_optimized")

    @property
    @pulumi.getter(name="coreInstanceTypes")
    def core_instance_types(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "core_instance_types")

    @property
    @pulumi.getter(name="coreLifecycle")
    def core_lifecycle(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "core_lifecycle")

    @property
    @pulumi.getter(name="coreMaxSize")
    def core_max_size(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "core_max_size")

    @property
    @pulumi.getter(name="coreMinSize")
    def core_min_size(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "core_min_size")

    @property
    @pulumi.getter(name="coreScalingDownPolicies")
    def core_scaling_down_policies(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarCoreScalingDownPolicy']]]:
        return pulumi.get(self, "core_scaling_down_policies")

    @property
    @pulumi.getter(name="coreScalingUpPolicies")
    def core_scaling_up_policies(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarCoreScalingUpPolicy']]]:
        return pulumi.get(self, "core_scaling_up_policies")

    @property
    @pulumi.getter(name="coreUnit")
    def core_unit(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "core_unit")

    @property
    @pulumi.getter(name="customAmiId")
    def custom_ami_id(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "custom_ami_id")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[Optional[str]]:
        """
        The MrScaler description.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="ebsRootVolumeSize")
    def ebs_root_volume_size(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "ebs_root_volume_size")

    @property
    @pulumi.getter(name="ec2KeyName")
    def ec2_key_name(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "ec2_key_name")

    @property
    @pulumi.getter(name="exposeClusterId")
    def expose_cluster_id(self) -> pulumi.Output[Optional[bool]]:
        """
        Allow the `cluster_id` to set a provider output variable.
        """
        return pulumi.get(self, "expose_cluster_id")

    @property
    @pulumi.getter(name="instanceWeights")
    def instance_weights(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarInstanceWeight']]]:
        return pulumi.get(self, "instance_weights")

    @property
    @pulumi.getter(name="jobFlowRole")
    def job_flow_role(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "job_flow_role")

    @property
    @pulumi.getter(name="keepJobFlowAlive")
    def keep_job_flow_alive(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "keep_job_flow_alive")

    @property
    @pulumi.getter(name="logUri")
    def log_uri(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "log_uri")

    @property
    @pulumi.getter(name="managedPrimarySecurityGroup")
    def managed_primary_security_group(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "managed_primary_security_group")

    @property
    @pulumi.getter(name="managedReplicaSecurityGroup")
    def managed_replica_security_group(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "managed_replica_security_group")

    @property
    @pulumi.getter(name="masterEbsBlockDevices")
    def master_ebs_block_devices(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarMasterEbsBlockDevice']]]:
        return pulumi.get(self, "master_ebs_block_devices")

    @property
    @pulumi.getter(name="masterEbsOptimized")
    def master_ebs_optimized(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "master_ebs_optimized")

    @property
    @pulumi.getter(name="masterInstanceTypes")
    def master_instance_types(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "master_instance_types")

    @property
    @pulumi.getter(name="masterLifecycle")
    def master_lifecycle(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "master_lifecycle")

    @property
    @pulumi.getter(name="masterTarget")
    def master_target(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "master_target")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        The MrScaler name.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="outputClusterId")
    def output_cluster_id(self) -> pulumi.Output[str]:
        return pulumi.get(self, "output_cluster_id")

    @property
    @pulumi.getter(name="provisioningTimeout")
    def provisioning_timeout(self) -> pulumi.Output[Optional['outputs.MrScalarProvisioningTimeout']]:
        return pulumi.get(self, "provisioning_timeout")

    @property
    @pulumi.getter
    def region(self) -> pulumi.Output[Optional[str]]:
        """
        The MrScaler region.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="releaseLabel")
    def release_label(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "release_label")

    @property
    @pulumi.getter(name="repoUpgradeOnBoot")
    def repo_upgrade_on_boot(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "repo_upgrade_on_boot")

    @property
    @pulumi.getter
    def retries(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "retries")

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarScheduledTask']]]:
        return pulumi.get(self, "scheduled_tasks")

    @property
    @pulumi.getter(name="securityConfig")
    def security_config(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "security_config")

    @property
    @pulumi.getter(name="serviceAccessSecurityGroup")
    def service_access_security_group(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "service_access_security_group")

    @property
    @pulumi.getter(name="serviceRole")
    def service_role(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "service_role")

    @property
    @pulumi.getter(name="stepsFiles")
    def steps_files(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarStepsFile']]]:
        return pulumi.get(self, "steps_files")

    @property
    @pulumi.getter
    def strategy(self) -> pulumi.Output[str]:
        """
        The MrScaler strategy. Allowed values are `new` `clone` and `wrap`.
        """
        return pulumi.get(self, "strategy")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarTag']]]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="taskDesiredCapacity")
    def task_desired_capacity(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "task_desired_capacity")

    @property
    @pulumi.getter(name="taskEbsBlockDevices")
    def task_ebs_block_devices(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarTaskEbsBlockDevice']]]:
        return pulumi.get(self, "task_ebs_block_devices")

    @property
    @pulumi.getter(name="taskEbsOptimized")
    def task_ebs_optimized(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "task_ebs_optimized")

    @property
    @pulumi.getter(name="taskInstanceTypes")
    def task_instance_types(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "task_instance_types")

    @property
    @pulumi.getter(name="taskLifecycle")
    def task_lifecycle(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "task_lifecycle")

    @property
    @pulumi.getter(name="taskMaxSize")
    def task_max_size(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "task_max_size")

    @property
    @pulumi.getter(name="taskMinSize")
    def task_min_size(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "task_min_size")

    @property
    @pulumi.getter(name="taskScalingDownPolicies")
    def task_scaling_down_policies(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarTaskScalingDownPolicy']]]:
        return pulumi.get(self, "task_scaling_down_policies")

    @property
    @pulumi.getter(name="taskScalingUpPolicies")
    def task_scaling_up_policies(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarTaskScalingUpPolicy']]]:
        return pulumi.get(self, "task_scaling_up_policies")

    @property
    @pulumi.getter(name="taskUnit")
    def task_unit(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "task_unit")

    @property
    @pulumi.getter(name="terminationPolicies")
    def termination_policies(self) -> pulumi.Output[Optional[Sequence['outputs.MrScalarTerminationPolicy']]]:
        """
        Allows defining termination policies for EMR clusters based on CloudWatch Metrics.
        """
        return pulumi.get(self, "termination_policies")

    @property
    @pulumi.getter(name="terminationProtected")
    def termination_protected(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "termination_protected")

    @property
    @pulumi.getter(name="visibleToAllUsers")
    @_utilities.deprecated("""This field has been removed from our API and is no longer functional.""")
    def visible_to_all_users(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "visible_to_all_users")

