/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the elasticmapreduce-2009-03-31.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.ElasticMapReduce.Model
{
    /// 
    /// Configuration defining a new instance group.
    /// 
    public partial class InstanceGroupConfig
    {
        private AutoScalingPolicy _autoScalingPolicy;
        private string _bidPrice;
        private List _configurations = new List();
        private string _customAmiId;
        private EbsConfiguration _ebsConfiguration;
        private int? _instanceCount;
        private InstanceRoleType _instanceRole;
        private string _instanceType;
        private MarketType _market;
        private string _name;
        /// 
        /// Empty constructor used to set  properties independently even when a simple constructor is available
        /// 
        public InstanceGroupConfig() { }
        /// 
        /// Instantiates InstanceGroupConfig with the parameterized properties
        /// 
        /// The role of the instance group in the cluster.
        /// The Amazon EC2 instance type for all instances in the instance group.
        /// Target number of instances for the instance group.
        public InstanceGroupConfig(InstanceRoleType instanceRole, string instanceType, int instanceCount)
        {
            _instanceRole = instanceRole;
            _instanceType = instanceType;
            _instanceCount = instanceCount;
        }
        /// 
        /// Gets and sets the property AutoScalingPolicy. 
        /// 
        /// An automatic scaling policy for a core instance group or task instance group in an
        /// Amazon EMR cluster. The automatic scaling policy defines how an instance group dynamically
        /// adds and terminates Amazon EC2 instances in response to the value of a CloudWatch
        /// metric. See PutAutoScalingPolicy.
        /// 
        /// 
        public AutoScalingPolicy AutoScalingPolicy
        {
            get { return this._autoScalingPolicy; }
            set { this._autoScalingPolicy = value; }
        }
        // Check to see if AutoScalingPolicy property is set
        internal bool IsSetAutoScalingPolicy()
        {
            return this._autoScalingPolicy != null;
        }
        /// 
        /// Gets and sets the property BidPrice. 
        /// 
        /// If specified, indicates that the instance group uses Spot Instances. This is the maximum
        /// price you are willing to pay for Spot Instances. Specify OnDemandPrice
        /// to set the amount equal to the On-Demand price, or specify an amount in USD.
        /// 
        /// 
        [AWSProperty(Min=0, Max=256)]
        public string BidPrice
        {
            get { return this._bidPrice; }
            set { this._bidPrice = value; }
        }
        // Check to see if BidPrice property is set
        internal bool IsSetBidPrice()
        {
            return this._bidPrice != null;
        }
        /// 
        /// Gets and sets the property Configurations.  
        /// 
        /// Amazon EMR releases 4.x or later.
        /// 
        ///   
        /// 
        /// The list of configurations supplied for an Amazon EMR cluster instance group. You
        /// can specify a separate configuration for each instance group (master, core, and task).
        /// 
        /// 
        public List Configurations
        {
            get { return this._configurations; }
            set { this._configurations = value; }
        }
        // Check to see if Configurations property is set
        internal bool IsSetConfigurations()
        {
            return this._configurations != null && this._configurations.Count > 0; 
        }
        /// 
        /// Gets and sets the property CustomAmiId. 
        /// 
        /// The custom AMI ID to use for the provisioned instance group.
        /// 
        /// 
        [AWSProperty(Min=0, Max=256)]
        public string CustomAmiId
        {
            get { return this._customAmiId; }
            set { this._customAmiId = value; }
        }
        // Check to see if CustomAmiId property is set
        internal bool IsSetCustomAmiId()
        {
            return this._customAmiId != null;
        }
        /// 
        /// Gets and sets the property EbsConfiguration. 
        /// 
        /// EBS configurations that will be attached to each Amazon EC2 instance in the instance
        /// group.
        /// 
        /// 
        public EbsConfiguration EbsConfiguration
        {
            get { return this._ebsConfiguration; }
            set { this._ebsConfiguration = value; }
        }
        // Check to see if EbsConfiguration property is set
        internal bool IsSetEbsConfiguration()
        {
            return this._ebsConfiguration != null;
        }
        /// 
        /// Gets and sets the property InstanceCount. 
        /// 
        /// Target number of instances for the instance group.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public int InstanceCount
        {
            get { return this._instanceCount.GetValueOrDefault(); }
            set { this._instanceCount = value; }
        }
        // Check to see if InstanceCount property is set
        internal bool IsSetInstanceCount()
        {
            return this._instanceCount.HasValue; 
        }
        /// 
        /// Gets and sets the property InstanceRole. 
        /// 
        /// The role of the instance group in the cluster.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public InstanceRoleType InstanceRole
        {
            get { return this._instanceRole; }
            set { this._instanceRole = value; }
        }
        // Check to see if InstanceRole property is set
        internal bool IsSetInstanceRole()
        {
            return this._instanceRole != null;
        }
        /// 
        /// Gets and sets the property InstanceType. 
        /// 
        /// The Amazon EC2 instance type for all instances in the instance group.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=256)]
        public string InstanceType
        {
            get { return this._instanceType; }
            set { this._instanceType = value; }
        }
        // Check to see if InstanceType property is set
        internal bool IsSetInstanceType()
        {
            return this._instanceType != null;
        }
        /// 
        /// Gets and sets the property Market. 
        /// 
        /// Market type of the Amazon EC2 instances used to create a cluster node.
        /// 
        /// 
        public MarketType Market
        {
            get { return this._market; }
            set { this._market = value; }
        }
        // Check to see if Market property is set
        internal bool IsSetMarket()
        {
            return this._market != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// Friendly name given to the instance group.
        /// 
        /// 
        [AWSProperty(Min=0, Max=256)]
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        // Check to see if Name property is set
        internal bool IsSetName()
        {
            return this._name != null;
        }
    }
}