/*
 * 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 ecs-2014-11-13.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.ECS.Model
{
    /// 
    /// Container for the parameters to the CreateCluster operation.
    /// Creates a new Amazon ECS cluster. By default, your account receives a default
    /// cluster when you launch your first container instance. However, you can create your
    /// own cluster with a unique name with the CreateCluster action.
    /// 
    ///   
    /// 
    /// When you call the CreateCluster API operation, Amazon ECS attempts to create
    /// the Amazon ECS service-linked role for your account. This is so that it can manage
    /// required resources in other Amazon Web Services services on your behalf. However,
    /// if the user that makes the call doesn't have permissions to create the service-linked
    /// role, it isn't created. For more information, see Using
    /// service-linked roles for Amazon ECS in the Amazon Elastic Container Service
    /// Developer Guide.
    /// 
    ///  
    /// 
    public partial class CreateClusterRequest : AmazonECSRequest
    {
        private List _capacityProviders = new List();
        private string _clusterName;
        private ClusterConfiguration _configuration;
        private List _defaultCapacityProviderStrategy = new List();
        private ClusterServiceConnectDefaultsRequest _serviceConnectDefaults;
        private List _settings = new List();
        private List _tags = new List();
        /// 
        /// Gets and sets the property CapacityProviders. 
        /// 
        /// The short name of one or more capacity providers to associate with the cluster. A
        /// capacity provider must be associated with a cluster before it can be included as part
        /// of the default capacity provider strategy of the cluster or used in a capacity provider
        /// strategy when calling the CreateService
        /// or RunTask
        /// actions.
        /// 
        ///  
        /// 
        /// If specifying a capacity provider that uses an Auto Scaling group, the capacity provider
        /// must be created but not associated with another cluster. New Auto Scaling group capacity
        /// providers can be created with the CreateCapacityProvider
        /// API operation.
        /// 
        ///  
        /// 
        /// To use a Fargate capacity provider, specify either the FARGATE or FARGATE_SPOT
        /// capacity providers. The Fargate capacity providers are available to all accounts and
        /// only need to be associated with a cluster to be used.
        /// 
        ///  
        /// 
        /// The PutCapacityProvider
        /// API operation is used to update the list of available capacity providers for a cluster
        /// after the cluster is created.
        /// 
        /// 
        public List CapacityProviders
        {
            get { return this._capacityProviders; }
            set { this._capacityProviders = value; }
        }
        // Check to see if CapacityProviders property is set
        internal bool IsSetCapacityProviders()
        {
            return this._capacityProviders != null && this._capacityProviders.Count > 0; 
        }
        /// 
        /// Gets and sets the property ClusterName. 
        /// 
        /// The name of your cluster. If you don't specify a name for your cluster, you create
        /// a cluster that's named default. Up to 255 letters (uppercase and lowercase),
        /// numbers, underscores, and hyphens are allowed. 
        /// 
        /// 
        public string ClusterName
        {
            get { return this._clusterName; }
            set { this._clusterName = value; }
        }
        // Check to see if ClusterName property is set
        internal bool IsSetClusterName()
        {
            return this._clusterName != null;
        }
        /// 
        /// Gets and sets the property Configuration. 
        /// 
        /// The execute command configuration for the cluster.
        /// 
        /// 
        public ClusterConfiguration Configuration
        {
            get { return this._configuration; }
            set { this._configuration = value; }
        }
        // Check to see if Configuration property is set
        internal bool IsSetConfiguration()
        {
            return this._configuration != null;
        }
        /// 
        /// Gets and sets the property DefaultCapacityProviderStrategy. 
        /// 
        /// The capacity provider strategy to set as the default for the cluster. After a default
        /// capacity provider strategy is set for a cluster, when you call the CreateService
        /// or RunTask
        /// APIs with no capacity provider strategy or launch type specified, the default capacity
        /// provider strategy for the cluster is used.
        /// 
        ///  
        /// 
        /// If a default capacity provider strategy isn't defined for a cluster when it was created,
        /// it can be defined later with the PutClusterCapacityProviders API operation.
        /// 
        /// 
        public List DefaultCapacityProviderStrategy
        {
            get { return this._defaultCapacityProviderStrategy; }
            set { this._defaultCapacityProviderStrategy = value; }
        }
        // Check to see if DefaultCapacityProviderStrategy property is set
        internal bool IsSetDefaultCapacityProviderStrategy()
        {
            return this._defaultCapacityProviderStrategy != null && this._defaultCapacityProviderStrategy.Count > 0; 
        }
        /// 
        /// Gets and sets the property ServiceConnectDefaults. 
        /// 
        /// Use this parameter to set a default Service Connect namespace. After you set a default
        /// Service Connect namespace, any new services with Service Connect turned on that are
        /// created in the cluster are added as client services in the namespace. This setting
        /// only applies to new services that set the enabled parameter to true
        /// in the ServiceConnectConfiguration. You can set the namespace of each
        /// service individually in the ServiceConnectConfiguration to override this
        /// default parameter.
        /// 
        ///  
        /// 
        /// Tasks that run in a namespace can use short names to connect to services in the namespace.
        /// Tasks can connect to services across all of the clusters in the namespace. Tasks connect
        /// through a managed proxy container that collects logs and metrics for increased visibility.
        /// Only the tasks that Amazon ECS services create are supported with Service Connect.
        /// For more information, see Service
        /// Connect in the Amazon Elastic Container Service Developer Guide.
        /// 
        /// 
        public ClusterServiceConnectDefaultsRequest ServiceConnectDefaults
        {
            get { return this._serviceConnectDefaults; }
            set { this._serviceConnectDefaults = value; }
        }
        // Check to see if ServiceConnectDefaults property is set
        internal bool IsSetServiceConnectDefaults()
        {
            return this._serviceConnectDefaults != null;
        }
        /// 
        /// Gets and sets the property Settings. 
        /// 
        /// The setting to use when creating a cluster. This parameter is used to turn on CloudWatch
        /// Container Insights for a cluster. If this value is specified, it overrides the containerInsights
        /// value set with PutAccountSetting or PutAccountSettingDefault.
        /// 
        /// 
        public List Settings
        {
            get { return this._settings; }
            set { this._settings = value; }
        }
        // Check to see if Settings property is set
        internal bool IsSetSettings()
        {
            return this._settings != null && this._settings.Count > 0; 
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// The metadata that you apply to the cluster to help you categorize and organize them.
        /// Each tag consists of a key and an optional value. You define both.
        /// 
        ///  
        /// 
        /// The following basic restrictions apply to tags:
        /// 
        ///   -  
        /// 
        /// Maximum number of tags per resource - 50
        /// 
        ///  
-  
        /// 
        /// For each resource, each tag key must be unique, and each tag key can have only one
        /// value.
        /// 
        ///  
-  
        /// 
        /// Maximum key length - 128 Unicode characters in UTF-8
        /// 
        ///  
-  
        /// 
        /// Maximum value length - 256 Unicode characters in UTF-8
        /// 
        ///  
-  
        /// 
        /// If your tagging schema is used across multiple services and resources, remember that
        /// other services may have restrictions on allowed characters. Generally allowed characters
        /// are: letters, numbers, and spaces representable in UTF-8, and the following characters:
        /// + - = . _ : / @.
        /// 
        ///  
-  
        /// 
        /// Tag keys and values are case-sensitive.
        /// 
        ///  
-  
        /// 
        /// Do not use aws:,AWS:, or any upper or lowercase combination
        /// of such as a prefix for either keys or values as it is reserved for Amazon Web Services
        /// use. You cannot edit or delete tag keys or values with this prefix. Tags with this
        /// prefix do not count against your tags per resource limit.
        /// 
        ///
/// 
        [AWSProperty(Min=0, Max=50)]
        public List Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
    }
}