# coding: utf-8

"""
    herd

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    OpenAPI spec version: 0.178.0-SNAPSHOT
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six


class EmrClusterDefinition(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'ssh_key_pair_name': 'str',
        'subnet_id': 'str',
        'log_bucket': 'str',
        'keep_alive': 'bool',
        'visible_to_all': 'bool',
        'termination_protection': 'bool',
        'encryption_enabled': 'bool',
        'account_id': 'str',
        'service_iam_role': 'str',
        'ec2_node_iam_profile_name': 'str',
        'ami_version': 'str',
        'release_label': 'str',
        'hadoop_version': 'str',
        'hive_version': 'str',
        'pig_version': 'str',
        'install_oozie': 'bool',
        'custom_bootstrap_action_master': 'list[ScriptDefinition]',
        'custom_bootstrap_action_all': 'list[ScriptDefinition]',
        'additional_info': 'str',
        'instance_definitions': 'InstanceDefinitions',
        'instance_fleet_minimum_ip_available_filter': 'int',
        'instance_fleets': 'list[EmrClusterDefinitionInstanceFleet]',
        'node_tags': 'list[NodeTag]',
        'supported_product': 'str',
        'applications': 'list[EmrClusterDefinitionApplication]',
        'configurations': 'list[EmrClusterDefinitionConfiguration]',
        'daemon_configurations': 'list[Parameter]',
        'hadoop_configurations': 'list[str]',
        'hadoop_jar_steps': 'list[HadoopJarStep]',
        'additional_master_security_groups': 'list[str]',
        'additional_slave_security_groups': 'list[str]',
        'security_configuration': 'str',
        'master_security_group': 'str',
        'slave_security_group': 'str',
        'service_access_security_group': 'str',
        'scale_down_behavior': 'str',
        'kerberos_attributes': 'EmrClusterDefinitionKerberosAttributes',
        'step_concurrency_level': 'int',
        'auto_termination_policy': 'EmrClusterDefinitionAutoTerminationPolicy'
    }

    attribute_map = {
        'ssh_key_pair_name': 'sshKeyPairName',
        'subnet_id': 'subnetId',
        'log_bucket': 'logBucket',
        'keep_alive': 'keepAlive',
        'visible_to_all': 'visibleToAll',
        'termination_protection': 'terminationProtection',
        'encryption_enabled': 'encryptionEnabled',
        'account_id': 'accountId',
        'service_iam_role': 'serviceIamRole',
        'ec2_node_iam_profile_name': 'ec2NodeIamProfileName',
        'ami_version': 'amiVersion',
        'release_label': 'releaseLabel',
        'hadoop_version': 'hadoopVersion',
        'hive_version': 'hiveVersion',
        'pig_version': 'pigVersion',
        'install_oozie': 'installOozie',
        'custom_bootstrap_action_master': 'customBootstrapActionMaster',
        'custom_bootstrap_action_all': 'customBootstrapActionAll',
        'additional_info': 'additionalInfo',
        'instance_definitions': 'instanceDefinitions',
        'instance_fleet_minimum_ip_available_filter': 'instanceFleetMinimumIpAvailableFilter',
        'instance_fleets': 'instanceFleets',
        'node_tags': 'nodeTags',
        'supported_product': 'supportedProduct',
        'applications': 'applications',
        'configurations': 'configurations',
        'daemon_configurations': 'daemonConfigurations',
        'hadoop_configurations': 'hadoopConfigurations',
        'hadoop_jar_steps': 'hadoopJarSteps',
        'additional_master_security_groups': 'additionalMasterSecurityGroups',
        'additional_slave_security_groups': 'additionalSlaveSecurityGroups',
        'security_configuration': 'securityConfiguration',
        'master_security_group': 'masterSecurityGroup',
        'slave_security_group': 'slaveSecurityGroup',
        'service_access_security_group': 'serviceAccessSecurityGroup',
        'scale_down_behavior': 'scaleDownBehavior',
        'kerberos_attributes': 'kerberosAttributes',
        'step_concurrency_level': 'stepConcurrencyLevel',
        'auto_termination_policy': 'autoTerminationPolicy'
    }

    def __init__(self, ssh_key_pair_name=None, subnet_id=None, log_bucket=None, keep_alive=None, visible_to_all=None, termination_protection=None, encryption_enabled=None, account_id=None, service_iam_role=None, ec2_node_iam_profile_name=None, ami_version=None, release_label=None, hadoop_version=None, hive_version=None, pig_version=None, install_oozie=None, custom_bootstrap_action_master=None, custom_bootstrap_action_all=None, additional_info=None, instance_definitions=None, instance_fleet_minimum_ip_available_filter=None, instance_fleets=None, node_tags=None, supported_product=None, applications=None, configurations=None, daemon_configurations=None, hadoop_configurations=None, hadoop_jar_steps=None, additional_master_security_groups=None, additional_slave_security_groups=None, security_configuration=None, master_security_group=None, slave_security_group=None, service_access_security_group=None, scale_down_behavior=None, kerberos_attributes=None, step_concurrency_level=None, auto_termination_policy=None):  # noqa: E501
        """EmrClusterDefinition - a model defined in OpenAPI"""  # noqa: E501

        self._ssh_key_pair_name = None
        self._subnet_id = None
        self._log_bucket = None
        self._keep_alive = None
        self._visible_to_all = None
        self._termination_protection = None
        self._encryption_enabled = None
        self._account_id = None
        self._service_iam_role = None
        self._ec2_node_iam_profile_name = None
        self._ami_version = None
        self._release_label = None
        self._hadoop_version = None
        self._hive_version = None
        self._pig_version = None
        self._install_oozie = None
        self._custom_bootstrap_action_master = None
        self._custom_bootstrap_action_all = None
        self._additional_info = None
        self._instance_definitions = None
        self._instance_fleet_minimum_ip_available_filter = None
        self._instance_fleets = None
        self._node_tags = None
        self._supported_product = None
        self._applications = None
        self._configurations = None
        self._daemon_configurations = None
        self._hadoop_configurations = None
        self._hadoop_jar_steps = None
        self._additional_master_security_groups = None
        self._additional_slave_security_groups = None
        self._security_configuration = None
        self._master_security_group = None
        self._slave_security_group = None
        self._service_access_security_group = None
        self._scale_down_behavior = None
        self._kerberos_attributes = None
        self._step_concurrency_level = None
        self._auto_termination_policy = None
        self.discriminator = None

        if ssh_key_pair_name is not None:
            self.ssh_key_pair_name = ssh_key_pair_name
        if subnet_id is not None:
            self.subnet_id = subnet_id
        if log_bucket is not None:
            self.log_bucket = log_bucket
        if keep_alive is not None:
            self.keep_alive = keep_alive
        if visible_to_all is not None:
            self.visible_to_all = visible_to_all
        if termination_protection is not None:
            self.termination_protection = termination_protection
        if encryption_enabled is not None:
            self.encryption_enabled = encryption_enabled
        if account_id is not None:
            self.account_id = account_id
        if service_iam_role is not None:
            self.service_iam_role = service_iam_role
        if ec2_node_iam_profile_name is not None:
            self.ec2_node_iam_profile_name = ec2_node_iam_profile_name
        if ami_version is not None:
            self.ami_version = ami_version
        if release_label is not None:
            self.release_label = release_label
        if hadoop_version is not None:
            self.hadoop_version = hadoop_version
        if hive_version is not None:
            self.hive_version = hive_version
        if pig_version is not None:
            self.pig_version = pig_version
        if install_oozie is not None:
            self.install_oozie = install_oozie
        if custom_bootstrap_action_master is not None:
            self.custom_bootstrap_action_master = custom_bootstrap_action_master
        if custom_bootstrap_action_all is not None:
            self.custom_bootstrap_action_all = custom_bootstrap_action_all
        if additional_info is not None:
            self.additional_info = additional_info
        if instance_definitions is not None:
            self.instance_definitions = instance_definitions
        if instance_fleet_minimum_ip_available_filter is not None:
            self.instance_fleet_minimum_ip_available_filter = instance_fleet_minimum_ip_available_filter
        if instance_fleets is not None:
            self.instance_fleets = instance_fleets
        if node_tags is not None:
            self.node_tags = node_tags
        if supported_product is not None:
            self.supported_product = supported_product
        if applications is not None:
            self.applications = applications
        if configurations is not None:
            self.configurations = configurations
        if daemon_configurations is not None:
            self.daemon_configurations = daemon_configurations
        if hadoop_configurations is not None:
            self.hadoop_configurations = hadoop_configurations
        if hadoop_jar_steps is not None:
            self.hadoop_jar_steps = hadoop_jar_steps
        if additional_master_security_groups is not None:
            self.additional_master_security_groups = additional_master_security_groups
        if additional_slave_security_groups is not None:
            self.additional_slave_security_groups = additional_slave_security_groups
        if security_configuration is not None:
            self.security_configuration = security_configuration
        if master_security_group is not None:
            self.master_security_group = master_security_group
        if slave_security_group is not None:
            self.slave_security_group = slave_security_group
        if service_access_security_group is not None:
            self.service_access_security_group = service_access_security_group
        if scale_down_behavior is not None:
            self.scale_down_behavior = scale_down_behavior
        if kerberos_attributes is not None:
            self.kerberos_attributes = kerberos_attributes
        if step_concurrency_level is not None:
            self.step_concurrency_level = step_concurrency_level
        if auto_termination_policy is not None:
            self.auto_termination_policy = auto_termination_policy

    @property
    def ssh_key_pair_name(self):
        """Gets the ssh_key_pair_name of this EmrClusterDefinition.  # noqa: E501

        The name of the Amazon EC2 key pair to set as the connection credential  # noqa: E501

        :return: The ssh_key_pair_name of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._ssh_key_pair_name

    @ssh_key_pair_name.setter
    def ssh_key_pair_name(self, ssh_key_pair_name):
        """Sets the ssh_key_pair_name of this EmrClusterDefinition.

        The name of the Amazon EC2 key pair to set as the connection credential  # noqa: E501

        :param ssh_key_pair_name: The ssh_key_pair_name of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._ssh_key_pair_name = ssh_key_pair_name

    @property
    def subnet_id(self):
        """Gets the subnet_id of this EmrClusterDefinition.  # noqa: E501

        <p>A comma separated list of Amazon VPC subnets.</p>                   <ul>                   <li>When multiple subnets are specified, the subnet in the AZ with the best price will be used.</li>                   <li>When multiple subnets belong to the same AZ, the subnet with the largest amount of available IP's will be used.</li>                   </ul>                   <p>Cross-VPC access in PROD will only accept internal/emr subnets at this time.</p>                  # noqa: E501

        :return: The subnet_id of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._subnet_id

    @subnet_id.setter
    def subnet_id(self, subnet_id):
        """Sets the subnet_id of this EmrClusterDefinition.

        <p>A comma separated list of Amazon VPC subnets.</p>                   <ul>                   <li>When multiple subnets are specified, the subnet in the AZ with the best price will be used.</li>                   <li>When multiple subnets belong to the same AZ, the subnet with the largest amount of available IP's will be used.</li>                   </ul>                   <p>Cross-VPC access in PROD will only accept internal/emr subnets at this time.</p>                  # noqa: E501

        :param subnet_id: The subnet_id of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._subnet_id = subnet_id

    @property
    def log_bucket(self):
        """Gets the log_bucket of this EmrClusterDefinition.  # noqa: E501

        Amazon S3 bucket to receive log files  # noqa: E501

        :return: The log_bucket of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._log_bucket

    @log_bucket.setter
    def log_bucket(self, log_bucket):
        """Sets the log_bucket of this EmrClusterDefinition.

        Amazon S3 bucket to receive log files  # noqa: E501

        :param log_bucket: The log_bucket of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._log_bucket = log_bucket

    @property
    def keep_alive(self):
        """Gets the keep_alive of this EmrClusterDefinition.  # noqa: E501

        Launch a cluster that continues running even after completing all its steps  # noqa: E501

        :return: The keep_alive of this EmrClusterDefinition.  # noqa: E501
        :rtype: bool
        """
        return self._keep_alive

    @keep_alive.setter
    def keep_alive(self, keep_alive):
        """Sets the keep_alive of this EmrClusterDefinition.

        Launch a cluster that continues running even after completing all its steps  # noqa: E501

        :param keep_alive: The keep_alive of this EmrClusterDefinition.  # noqa: E501
        :type: bool
        """

        self._keep_alive = keep_alive

    @property
    def visible_to_all(self):
        """Gets the visible_to_all of this EmrClusterDefinition.  # noqa: E501

        Makes the instances in an existing cluster visible to all IAM users  # noqa: E501

        :return: The visible_to_all of this EmrClusterDefinition.  # noqa: E501
        :rtype: bool
        """
        return self._visible_to_all

    @visible_to_all.setter
    def visible_to_all(self, visible_to_all):
        """Sets the visible_to_all of this EmrClusterDefinition.

        Makes the instances in an existing cluster visible to all IAM users  # noqa: E501

        :param visible_to_all: The visible_to_all of this EmrClusterDefinition.  # noqa: E501
        :type: bool
        """

        self._visible_to_all = visible_to_all

    @property
    def termination_protection(self):
        """Gets the termination_protection of this EmrClusterDefinition.  # noqa: E501

        Launch the cluster with termination protection enabled  # noqa: E501

        :return: The termination_protection of this EmrClusterDefinition.  # noqa: E501
        :rtype: bool
        """
        return self._termination_protection

    @termination_protection.setter
    def termination_protection(self, termination_protection):
        """Sets the termination_protection of this EmrClusterDefinition.

        Launch the cluster with termination protection enabled  # noqa: E501

        :param termination_protection: The termination_protection of this EmrClusterDefinition.  # noqa: E501
        :type: bool
        """

        self._termination_protection = termination_protection

    @property
    def encryption_enabled(self):
        """Gets the encryption_enabled of this EmrClusterDefinition.  # noqa: E501

        Volume level encryption for the disks (using custom scripts). Encryption is not supported for AMI versions lower than                   3.1.0                  # noqa: E501

        :return: The encryption_enabled of this EmrClusterDefinition.  # noqa: E501
        :rtype: bool
        """
        return self._encryption_enabled

    @encryption_enabled.setter
    def encryption_enabled(self, encryption_enabled):
        """Sets the encryption_enabled of this EmrClusterDefinition.

        Volume level encryption for the disks (using custom scripts). Encryption is not supported for AMI versions lower than                   3.1.0                  # noqa: E501

        :param encryption_enabled: The encryption_enabled of this EmrClusterDefinition.  # noqa: E501
        :type: bool
        """

        self._encryption_enabled = encryption_enabled

    @property
    def account_id(self):
        """Gets the account_id of this EmrClusterDefinition.  # noqa: E501

        The AWS account number, without dashes, to launch the Amazon EMR service in  # noqa: E501

        :return: The account_id of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._account_id

    @account_id.setter
    def account_id(self, account_id):
        """Sets the account_id of this EmrClusterDefinition.

        The AWS account number, without dashes, to launch the Amazon EMR service in  # noqa: E501

        :param account_id: The account_id of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._account_id = account_id

    @property
    def service_iam_role(self):
        """Gets the service_iam_role of this EmrClusterDefinition.  # noqa: E501

        Launches the Amazon EMR service with the specified IAM role  # noqa: E501

        :return: The service_iam_role of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._service_iam_role

    @service_iam_role.setter
    def service_iam_role(self, service_iam_role):
        """Sets the service_iam_role of this EmrClusterDefinition.

        Launches the Amazon EMR service with the specified IAM role  # noqa: E501

        :param service_iam_role: The service_iam_role of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._service_iam_role = service_iam_role

    @property
    def ec2_node_iam_profile_name(self):
        """Gets the ec2_node_iam_profile_name of this EmrClusterDefinition.  # noqa: E501

        Launches the EC2 instances of a cluster with the specified IAM role  # noqa: E501

        :return: The ec2_node_iam_profile_name of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._ec2_node_iam_profile_name

    @ec2_node_iam_profile_name.setter
    def ec2_node_iam_profile_name(self, ec2_node_iam_profile_name):
        """Sets the ec2_node_iam_profile_name of this EmrClusterDefinition.

        Launches the EC2 instances of a cluster with the specified IAM role  # noqa: E501

        :param ec2_node_iam_profile_name: The ec2_node_iam_profile_name of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._ec2_node_iam_profile_name = ec2_node_iam_profile_name

    @property
    def ami_version(self):
        """Gets the ami_version of this EmrClusterDefinition.  # noqa: E501

        Specify the version of the AMI to use  # noqa: E501

        :return: The ami_version of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._ami_version

    @ami_version.setter
    def ami_version(self, ami_version):
        """Sets the ami_version of this EmrClusterDefinition.

        Specify the version of the AMI to use  # noqa: E501

        :param ami_version: The ami_version of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._ami_version = ami_version

    @property
    def release_label(self):
        """Gets the release_label of this EmrClusterDefinition.  # noqa: E501

        The release label. Available from 4.x  # noqa: E501

        :return: The release_label of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._release_label

    @release_label.setter
    def release_label(self, release_label):
        """Sets the release_label of this EmrClusterDefinition.

        The release label. Available from 4.x  # noqa: E501

        :param release_label: The release_label of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._release_label = release_label

    @property
    def hadoop_version(self):
        """Gets the hadoop_version of this EmrClusterDefinition.  # noqa: E501

        Specify the version of Hadoop to install  # noqa: E501

        :return: The hadoop_version of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._hadoop_version

    @hadoop_version.setter
    def hadoop_version(self, hadoop_version):
        """Sets the hadoop_version of this EmrClusterDefinition.

        Specify the version of Hadoop to install  # noqa: E501

        :param hadoop_version: The hadoop_version of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._hadoop_version = hadoop_version

    @property
    def hive_version(self):
        """Gets the hive_version of this EmrClusterDefinition.  # noqa: E501

        The Hive version to load  # noqa: E501

        :return: The hive_version of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._hive_version

    @hive_version.setter
    def hive_version(self, hive_version):
        """Sets the hive_version of this EmrClusterDefinition.

        The Hive version to load  # noqa: E501

        :param hive_version: The hive_version of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._hive_version = hive_version

    @property
    def pig_version(self):
        """Gets the pig_version of this EmrClusterDefinition.  # noqa: E501

        The Pig version to load  # noqa: E501

        :return: The pig_version of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._pig_version

    @pig_version.setter
    def pig_version(self, pig_version):
        """Sets the pig_version of this EmrClusterDefinition.

        The Pig version to load  # noqa: E501

        :param pig_version: The pig_version of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._pig_version = pig_version

    @property
    def install_oozie(self):
        """Gets the install_oozie of this EmrClusterDefinition.  # noqa: E501


        :return: The install_oozie of this EmrClusterDefinition.  # noqa: E501
        :rtype: bool
        """
        return self._install_oozie

    @install_oozie.setter
    def install_oozie(self, install_oozie):
        """Sets the install_oozie of this EmrClusterDefinition.


        :param install_oozie: The install_oozie of this EmrClusterDefinition.  # noqa: E501
        :type: bool
        """

        self._install_oozie = install_oozie

    @property
    def custom_bootstrap_action_master(self):
        """Gets the custom_bootstrap_action_master of this EmrClusterDefinition.  # noqa: E501

        Bootstrapping scripts that are executed only on the Master node  # noqa: E501

        :return: The custom_bootstrap_action_master of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[ScriptDefinition]
        """
        return self._custom_bootstrap_action_master

    @custom_bootstrap_action_master.setter
    def custom_bootstrap_action_master(self, custom_bootstrap_action_master):
        """Sets the custom_bootstrap_action_master of this EmrClusterDefinition.

        Bootstrapping scripts that are executed only on the Master node  # noqa: E501

        :param custom_bootstrap_action_master: The custom_bootstrap_action_master of this EmrClusterDefinition.  # noqa: E501
        :type: list[ScriptDefinition]
        """

        self._custom_bootstrap_action_master = custom_bootstrap_action_master

    @property
    def custom_bootstrap_action_all(self):
        """Gets the custom_bootstrap_action_all of this EmrClusterDefinition.  # noqa: E501

        Bootstrapping scripts that are executed on all the nodes  # noqa: E501

        :return: The custom_bootstrap_action_all of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[ScriptDefinition]
        """
        return self._custom_bootstrap_action_all

    @custom_bootstrap_action_all.setter
    def custom_bootstrap_action_all(self, custom_bootstrap_action_all):
        """Sets the custom_bootstrap_action_all of this EmrClusterDefinition.

        Bootstrapping scripts that are executed on all the nodes  # noqa: E501

        :param custom_bootstrap_action_all: The custom_bootstrap_action_all of this EmrClusterDefinition.  # noqa: E501
        :type: list[ScriptDefinition]
        """

        self._custom_bootstrap_action_all = custom_bootstrap_action_all

    @property
    def additional_info(self):
        """Gets the additional_info of this EmrClusterDefinition.  # noqa: E501

        Specifies additional information during cluster creation  # noqa: E501

        :return: The additional_info of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._additional_info

    @additional_info.setter
    def additional_info(self, additional_info):
        """Sets the additional_info of this EmrClusterDefinition.

        Specifies additional information during cluster creation  # noqa: E501

        :param additional_info: The additional_info of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._additional_info = additional_info

    @property
    def instance_definitions(self):
        """Gets the instance_definitions of this EmrClusterDefinition.  # noqa: E501


        :return: The instance_definitions of this EmrClusterDefinition.  # noqa: E501
        :rtype: InstanceDefinitions
        """
        return self._instance_definitions

    @instance_definitions.setter
    def instance_definitions(self, instance_definitions):
        """Sets the instance_definitions of this EmrClusterDefinition.


        :param instance_definitions: The instance_definitions of this EmrClusterDefinition.  # noqa: E501
        :type: InstanceDefinitions
        """

        self._instance_definitions = instance_definitions

    @property
    def instance_fleet_minimum_ip_available_filter(self):
        """Gets the instance_fleet_minimum_ip_available_filter of this EmrClusterDefinition.  # noqa: E501

        Specifies minimum number of available IPs required for the instance fleet  # noqa: E501

        :return: The instance_fleet_minimum_ip_available_filter of this EmrClusterDefinition.  # noqa: E501
        :rtype: int
        """
        return self._instance_fleet_minimum_ip_available_filter

    @instance_fleet_minimum_ip_available_filter.setter
    def instance_fleet_minimum_ip_available_filter(self, instance_fleet_minimum_ip_available_filter):
        """Sets the instance_fleet_minimum_ip_available_filter of this EmrClusterDefinition.

        Specifies minimum number of available IPs required for the instance fleet  # noqa: E501

        :param instance_fleet_minimum_ip_available_filter: The instance_fleet_minimum_ip_available_filter of this EmrClusterDefinition.  # noqa: E501
        :type: int
        """

        self._instance_fleet_minimum_ip_available_filter = instance_fleet_minimum_ip_available_filter

    @property
    def instance_fleets(self):
        """Gets the instance_fleets of this EmrClusterDefinition.  # noqa: E501

        Describes the EC2 instances and instance configurations for clusters that use the instance fleet configuration. The instance                   fleet configuration is available only in Amazon EMR versions 4.8.0 and later, excluding 5.0.x versions                  # noqa: E501

        :return: The instance_fleets of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[EmrClusterDefinitionInstanceFleet]
        """
        return self._instance_fleets

    @instance_fleets.setter
    def instance_fleets(self, instance_fleets):
        """Sets the instance_fleets of this EmrClusterDefinition.

        Describes the EC2 instances and instance configurations for clusters that use the instance fleet configuration. The instance                   fleet configuration is available only in Amazon EMR versions 4.8.0 and later, excluding 5.0.x versions                  # noqa: E501

        :param instance_fleets: The instance_fleets of this EmrClusterDefinition.  # noqa: E501
        :type: list[EmrClusterDefinitionInstanceFleet]
        """

        self._instance_fleets = instance_fleets

    @property
    def node_tags(self):
        """Gets the node_tags of this EmrClusterDefinition.  # noqa: E501

        Custom tags to be applied on the EC2 nodes  # noqa: E501

        :return: The node_tags of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[NodeTag]
        """
        return self._node_tags

    @node_tags.setter
    def node_tags(self, node_tags):
        """Sets the node_tags of this EmrClusterDefinition.

        Custom tags to be applied on the EC2 nodes  # noqa: E501

        :param node_tags: The node_tags of this EmrClusterDefinition.  # noqa: E501
        :type: list[NodeTag]
        """

        self._node_tags = node_tags

    @property
    def supported_product(self):
        """Gets the supported_product of this EmrClusterDefinition.  # noqa: E501

        Installs third-party software on an Amazon EMR cluster  # noqa: E501

        :return: The supported_product of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._supported_product

    @supported_product.setter
    def supported_product(self, supported_product):
        """Sets the supported_product of this EmrClusterDefinition.

        Installs third-party software on an Amazon EMR cluster  # noqa: E501

        :param supported_product: The supported_product of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._supported_product = supported_product

    @property
    def applications(self):
        """Gets the applications of this EmrClusterDefinition.  # noqa: E501

        List of applications  # noqa: E501

        :return: The applications of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[EmrClusterDefinitionApplication]
        """
        return self._applications

    @applications.setter
    def applications(self, applications):
        """Sets the applications of this EmrClusterDefinition.

        List of applications  # noqa: E501

        :param applications: The applications of this EmrClusterDefinition.  # noqa: E501
        :type: list[EmrClusterDefinitionApplication]
        """

        self._applications = applications

    @property
    def configurations(self):
        """Gets the configurations of this EmrClusterDefinition.  # noqa: E501

        List of configurations  # noqa: E501

        :return: The configurations of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[EmrClusterDefinitionConfiguration]
        """
        return self._configurations

    @configurations.setter
    def configurations(self, configurations):
        """Sets the configurations of this EmrClusterDefinition.

        List of configurations  # noqa: E501

        :param configurations: The configurations of this EmrClusterDefinition.  # noqa: E501
        :type: list[EmrClusterDefinitionConfiguration]
        """

        self._configurations = configurations

    @property
    def daemon_configurations(self):
        """Gets the daemon_configurations of this EmrClusterDefinition.  # noqa: E501

        Predefined bootstrap action to configure hadoop daemons  # noqa: E501

        :return: The daemon_configurations of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[Parameter]
        """
        return self._daemon_configurations

    @daemon_configurations.setter
    def daemon_configurations(self, daemon_configurations):
        """Sets the daemon_configurations of this EmrClusterDefinition.

        Predefined bootstrap action to configure hadoop daemons  # noqa: E501

        :param daemon_configurations: The daemon_configurations of this EmrClusterDefinition.  # noqa: E501
        :type: list[Parameter]
        """

        self._daemon_configurations = daemon_configurations

    @property
    def hadoop_configurations(self):
        """Gets the hadoop_configurations of this EmrClusterDefinition.  # noqa: E501

        Predefined bootstrap action to specify hadoop configurations  # noqa: E501

        :return: The hadoop_configurations of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[str]
        """
        return self._hadoop_configurations

    @hadoop_configurations.setter
    def hadoop_configurations(self, hadoop_configurations):
        """Sets the hadoop_configurations of this EmrClusterDefinition.

        Predefined bootstrap action to specify hadoop configurations  # noqa: E501

        :param hadoop_configurations: The hadoop_configurations of this EmrClusterDefinition.  # noqa: E501
        :type: list[str]
        """

        self._hadoop_configurations = hadoop_configurations

    @property
    def hadoop_jar_steps(self):
        """Gets the hadoop_jar_steps of this EmrClusterDefinition.  # noqa: E501

        Hadoop jar steps that are added, to be executed once the cluster is started  # noqa: E501

        :return: The hadoop_jar_steps of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[HadoopJarStep]
        """
        return self._hadoop_jar_steps

    @hadoop_jar_steps.setter
    def hadoop_jar_steps(self, hadoop_jar_steps):
        """Sets the hadoop_jar_steps of this EmrClusterDefinition.

        Hadoop jar steps that are added, to be executed once the cluster is started  # noqa: E501

        :param hadoop_jar_steps: The hadoop_jar_steps of this EmrClusterDefinition.  # noqa: E501
        :type: list[HadoopJarStep]
        """

        self._hadoop_jar_steps = hadoop_jar_steps

    @property
    def additional_master_security_groups(self):
        """Gets the additional_master_security_groups of this EmrClusterDefinition.  # noqa: E501

        List of additional master node security groups. The security group defined by the configuration value                   emr.herd.support.security.group will automatically be added whether this list is specified or not                  # noqa: E501

        :return: The additional_master_security_groups of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[str]
        """
        return self._additional_master_security_groups

    @additional_master_security_groups.setter
    def additional_master_security_groups(self, additional_master_security_groups):
        """Sets the additional_master_security_groups of this EmrClusterDefinition.

        List of additional master node security groups. The security group defined by the configuration value                   emr.herd.support.security.group will automatically be added whether this list is specified or not                  # noqa: E501

        :param additional_master_security_groups: The additional_master_security_groups of this EmrClusterDefinition.  # noqa: E501
        :type: list[str]
        """

        self._additional_master_security_groups = additional_master_security_groups

    @property
    def additional_slave_security_groups(self):
        """Gets the additional_slave_security_groups of this EmrClusterDefinition.  # noqa: E501

        List of additional slave node security groups  # noqa: E501

        :return: The additional_slave_security_groups of this EmrClusterDefinition.  # noqa: E501
        :rtype: list[str]
        """
        return self._additional_slave_security_groups

    @additional_slave_security_groups.setter
    def additional_slave_security_groups(self, additional_slave_security_groups):
        """Sets the additional_slave_security_groups of this EmrClusterDefinition.

        List of additional slave node security groups  # noqa: E501

        :param additional_slave_security_groups: The additional_slave_security_groups of this EmrClusterDefinition.  # noqa: E501
        :type: list[str]
        """

        self._additional_slave_security_groups = additional_slave_security_groups

    @property
    def security_configuration(self):
        """Gets the security_configuration of this EmrClusterDefinition.  # noqa: E501

        The name of a security configuration to apply to the cluster  # noqa: E501

        :return: The security_configuration of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._security_configuration

    @security_configuration.setter
    def security_configuration(self, security_configuration):
        """Sets the security_configuration of this EmrClusterDefinition.

        The name of a security configuration to apply to the cluster  # noqa: E501

        :param security_configuration: The security_configuration of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._security_configuration = security_configuration

    @property
    def master_security_group(self):
        """Gets the master_security_group of this EmrClusterDefinition.  # noqa: E501

        The master security group to use instead of the account default value  # noqa: E501

        :return: The master_security_group of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._master_security_group

    @master_security_group.setter
    def master_security_group(self, master_security_group):
        """Sets the master_security_group of this EmrClusterDefinition.

        The master security group to use instead of the account default value  # noqa: E501

        :param master_security_group: The master_security_group of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._master_security_group = master_security_group

    @property
    def slave_security_group(self):
        """Gets the slave_security_group of this EmrClusterDefinition.  # noqa: E501

        The slave security group to use instead of the account default value  # noqa: E501

        :return: The slave_security_group of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._slave_security_group

    @slave_security_group.setter
    def slave_security_group(self, slave_security_group):
        """Sets the slave_security_group of this EmrClusterDefinition.

        The slave security group to use instead of the account default value  # noqa: E501

        :param slave_security_group: The slave_security_group of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._slave_security_group = slave_security_group

    @property
    def service_access_security_group(self):
        """Gets the service_access_security_group of this EmrClusterDefinition.  # noqa: E501

        The service access security group to use  # noqa: E501

        :return: The service_access_security_group of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._service_access_security_group

    @service_access_security_group.setter
    def service_access_security_group(self, service_access_security_group):
        """Sets the service_access_security_group of this EmrClusterDefinition.

        The service access security group to use  # noqa: E501

        :param service_access_security_group: The service_access_security_group of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._service_access_security_group = service_access_security_group

    @property
    def scale_down_behavior(self):
        """Gets the scale_down_behavior of this EmrClusterDefinition.  # noqa: E501

        Specifies the way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an instance                   group is resized. One of the following values: TERMINATE_AT_INSTANCE_HOUR or TERMINATE_AT_TASK_COMPLETION                  # noqa: E501

        :return: The scale_down_behavior of this EmrClusterDefinition.  # noqa: E501
        :rtype: str
        """
        return self._scale_down_behavior

    @scale_down_behavior.setter
    def scale_down_behavior(self, scale_down_behavior):
        """Sets the scale_down_behavior of this EmrClusterDefinition.

        Specifies the way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an instance                   group is resized. One of the following values: TERMINATE_AT_INSTANCE_HOUR or TERMINATE_AT_TASK_COMPLETION                  # noqa: E501

        :param scale_down_behavior: The scale_down_behavior of this EmrClusterDefinition.  # noqa: E501
        :type: str
        """

        self._scale_down_behavior = scale_down_behavior

    @property
    def kerberos_attributes(self):
        """Gets the kerberos_attributes of this EmrClusterDefinition.  # noqa: E501


        :return: The kerberos_attributes of this EmrClusterDefinition.  # noqa: E501
        :rtype: EmrClusterDefinitionKerberosAttributes
        """
        return self._kerberos_attributes

    @kerberos_attributes.setter
    def kerberos_attributes(self, kerberos_attributes):
        """Sets the kerberos_attributes of this EmrClusterDefinition.


        :param kerberos_attributes: The kerberos_attributes of this EmrClusterDefinition.  # noqa: E501
        :type: EmrClusterDefinitionKerberosAttributes
        """

        self._kerberos_attributes = kerberos_attributes

    @property
    def step_concurrency_level(self):
        """Gets the step_concurrency_level of this EmrClusterDefinition.  # noqa: E501

        The step concurrency level of the cluster. Default is 1 which is non-concurrent. The maximum value is 256  # noqa: E501

        :return: The step_concurrency_level of this EmrClusterDefinition.  # noqa: E501
        :rtype: int
        """
        return self._step_concurrency_level

    @step_concurrency_level.setter
    def step_concurrency_level(self, step_concurrency_level):
        """Sets the step_concurrency_level of this EmrClusterDefinition.

        The step concurrency level of the cluster. Default is 1 which is non-concurrent. The maximum value is 256  # noqa: E501

        :param step_concurrency_level: The step_concurrency_level of this EmrClusterDefinition.  # noqa: E501
        :type: int
        """

        self._step_concurrency_level = step_concurrency_level

    @property
    def auto_termination_policy(self):
        """Gets the auto_termination_policy of this EmrClusterDefinition.  # noqa: E501


        :return: The auto_termination_policy of this EmrClusterDefinition.  # noqa: E501
        :rtype: EmrClusterDefinitionAutoTerminationPolicy
        """
        return self._auto_termination_policy

    @auto_termination_policy.setter
    def auto_termination_policy(self, auto_termination_policy):
        """Sets the auto_termination_policy of this EmrClusterDefinition.


        :param auto_termination_policy: The auto_termination_policy of this EmrClusterDefinition.  # noqa: E501
        :type: EmrClusterDefinitionAutoTerminationPolicy
        """

        self._auto_termination_policy = auto_termination_policy

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, EmrClusterDefinition):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
