/*
 * 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 ssm-2014-11-06.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.SimpleSystemsManagement.Model
{
    /// 
    /// Container for the parameters to the PutParameter operation.
    /// Add a parameter to the system.
    /// 
    public partial class PutParameterRequest : AmazonSimpleSystemsManagementRequest
    {
        private string _allowedPattern;
        private string _dataType;
        private string _description;
        private string _keyId;
        private string _name;
        private bool? _overwrite;
        private string _policies;
        private List _tags = new List();
        private ParameterTier _tier;
        private ParameterType _type;
        private string _value;
        /// 
        /// Gets and sets the property AllowedPattern. 
        /// 
        /// A regular expression used to validate the parameter value. For example, for String
        /// types with values restricted to numbers, you can specify the following: AllowedPattern=^\d+$
        /// 
        /// 
        /// 
        [AWSProperty(Min=0, Max=1024)]
        public string AllowedPattern
        {
            get { return this._allowedPattern; }
            set { this._allowedPattern = value; }
        }
        // Check to see if AllowedPattern property is set
        internal bool IsSetAllowedPattern()
        {
            return this._allowedPattern != null;
        }
        /// 
        /// Gets and sets the property DataType. 
        /// 
        /// The data type for a String parameter. Supported data types include plain
        /// text and Amazon Machine Image (AMI) IDs.
        /// 
        ///  
        /// 
        ///  The following data type values are supported. 
        /// 
        ///   -  
        /// 
        ///  
text 
        /// 
        ///    -  
        /// 
        ///  
aws:ec2:image 
        /// 
        ///    -  
        /// 
        ///  
aws:ssm:integration 
        /// 
        ///    
 
        /// 
        /// When you create a String parameter and specify aws:ec2:image,
        /// Amazon Web Services Systems Manager validates the parameter value is in the required
        /// format, such as ami-12345abcdeEXAMPLE, and that the specified AMI is
        /// available in your Amazon Web Services account.
        /// 
        ///   
        /// 
        /// If the action is successful, the service sends back an HTTP 200 response which indicates
        /// a successful PutParameter call for all cases except for data type aws:ec2:image.
        /// If you call PutParameter with aws:ec2:image data type, a
        /// successful HTTP 200 response does not guarantee that your parameter was successfully
        /// created or updated. The aws:ec2:image value is validated asynchronously,
        /// and the PutParameter call returns before the validation is complete.
        /// If you submit an invalid AMI value, the PutParameter operation will return success,
        /// but the asynchronous validation will fail and the parameter will not be created or
        /// updated. To monitor whether your aws:ec2:image parameters are created
        /// successfully, see Setting
        /// up notifications or trigger actions based on Parameter Store events. For more
        /// information about AMI format validation , see Native
        /// parameter support for Amazon Machine Image (AMI) IDs. 
        /// 
        ///  
        /// 
        [AWSProperty(Min=0, Max=128)]
        public string DataType
        {
            get { return this._dataType; }
            set { this._dataType = value; }
        }
        // Check to see if DataType property is set
        internal bool IsSetDataType()
        {
            return this._dataType != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// Information about the parameter that you want to add to the system. Optional but recommended.
        /// 
        ///   
        /// 
        /// Don't enter personally identifiable information in this field.
        /// 
        ///  
        /// 
        [AWSProperty(Min=0, Max=1024)]
        public string Description
        {
            get { return this._description; }
            set { this._description = value; }
        }
        // Check to see if Description property is set
        internal bool IsSetDescription()
        {
            return this._description != null;
        }
        /// 
        /// Gets and sets the property KeyId. 
        /// 
        /// The Key Management Service (KMS) ID that you want to use to encrypt a parameter. Use
        /// a custom key for better security. Required for parameters that use the SecureString
        /// data type.
        /// 
        ///  
        /// 
        /// If you don't specify a key ID, the system uses the default key associated with your
        /// Amazon Web Services account which is not as secure as using a custom key.
        /// 
        ///   -  
        /// 
        /// To use a custom KMS key, choose the 
SecureString data type with the Key
        /// ID parameter.
        /// 
        ///    
        /// 
        [AWSProperty(Min=1, Max=256)]
        public string KeyId
        {
            get { return this._keyId; }
            set { this._keyId = value; }
        }
        // Check to see if KeyId property is set
        internal bool IsSetKeyId()
        {
            return this._keyId != null;
        }
        /// 
        /// Gets and sets the property Name. 
        /// 
        /// The fully qualified name of the parameter that you want to add to the system. The
        /// fully qualified name includes the complete hierarchy of the parameter path and name.
        /// For parameters in a hierarchy, you must include a leading forward slash character
        /// (/) when you create or reference a parameter. For example: /Dev/DBServer/MySQL/db-string13
        /// 
        /// 
        ///  
        /// 
        /// Naming Constraints:
        /// 
        ///   -  
        /// 
        /// Parameter names are case sensitive.
        /// 
        ///  
  -  
        /// 
        /// A parameter name must be unique within an Amazon Web Services Region
        /// 
        ///  
  -  
        /// 
        /// A parameter name can't be prefixed with "
aws" or "ssm" (case-insensitive).
        /// 
        ///    -  
        /// 
        /// Parameter names can include only the following symbols and letters: 
a-zA-Z0-9_.-
        /// 
        /// 
        ///  
        /// 
        /// In addition, the slash character ( / ) is used to delineate hierarchies in parameter
        /// names. For example: /Dev/Production/East/Project-ABC/MyParameter 
        /// 
        ///    -  
        /// 
        /// A parameter name can't include spaces.
        /// 
        ///  
  -  
        /// 
        /// Parameter hierarchies are limited to a maximum depth of fifteen levels.
        /// 
        ///  
  
 
        /// 
        /// For additional information about valid values for parameter names, see Creating
        /// Systems Manager parameters in the Amazon Web Services Systems Manager User
        /// Guide.
        /// 
        ///   
        /// 
        /// The maximum length constraint of 2048 characters listed below includes 1037 characters
        /// reserved for internal use by Systems Manager. The maximum length for a parameter name
        /// that you create is 1011 characters. This includes the characters in the ARN that precede
        /// the name you specify, such as arn:aws:ssm:us-east-2:111122223333:parameter/.
        /// 
        ///  
        /// 
        [AWSProperty(Required=true, Min=1, Max=2048)]
        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;
        }
        /// 
        /// Gets and sets the property Overwrite. 
        /// 
        /// Overwrite an existing parameter. The default value is false.
        /// 
        /// 
        public bool Overwrite
        {
            get { return this._overwrite.GetValueOrDefault(); }
            set { this._overwrite = value; }
        }
        // Check to see if Overwrite property is set
        internal bool IsSetOverwrite()
        {
            return this._overwrite.HasValue; 
        }
        /// 
        /// Gets and sets the property Policies. 
        /// 
        /// One or more policies to apply to a parameter. This operation takes a JSON array. Parameter
        /// Store, a capability of Amazon Web Services Systems Manager supports the following
        /// policy types:
        /// 
        ///  
        /// 
        /// Expiration: This policy deletes the parameter after it expires. When you create the
        /// policy, you specify the expiration date. You can update the expiration date and time
        /// by updating the policy. Updating the parameter doesn't affect the expiration
        /// date and time. When the expiration time is reached, Parameter Store deletes the parameter.
        /// 
        ///  
        /// 
        /// ExpirationNotification: This policy initiates an event in Amazon CloudWatch Events
        /// that notifies you about the expiration. By using this policy, you can receive notification
        /// before or after the expiration time is reached, in units of days or hours.
        /// 
        ///  
        /// 
        /// NoChangeNotification: This policy initiates a CloudWatch Events event if a parameter
        /// hasn't been modified for a specified period of time. This policy type is useful when,
        /// for example, a secret needs to be changed within a period of time, but it hasn't been
        /// changed.
        /// 
        ///  
        /// 
        /// All existing policies are preserved until you send new policies or an empty policy.
        /// For more information about parameter policies, see Assigning
        /// parameter policies. 
        /// 
        /// 
        [AWSProperty(Min=1, Max=4096)]
        public string Policies
        {
            get { return this._policies; }
            set { this._policies = value; }
        }
        // Check to see if Policies property is set
        internal bool IsSetPolicies()
        {
            return this._policies != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// Optional metadata that you assign to a resource. Tags enable you to categorize a resource
        /// in different ways, such as by purpose, owner, or environment. For example, you might
        /// want to tag a Systems Manager parameter to identify the type of resource to which
        /// it applies, the environment, or the type of configuration data referenced by the parameter.
        /// In this case, you could specify the following key-value pairs:
        /// 
        ///   -  
        /// 
        ///  
Key=Resource,Value=S3bucket 
        /// 
        ///    -  
        /// 
        ///  
Key=OS,Value=Windows 
        /// 
        ///    -  
        /// 
        ///  
Key=ParameterType,Value=LicenseKey 
        /// 
        ///    
  
        /// 
        /// To add tags to an existing Systems Manager parameter, use the AddTagsToResource
        /// operation.
        /// 
        ///  
        /// 
        [AWSProperty(Max=1000)]
        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; 
        }
        /// 
        /// Gets and sets the property Tier. 
        /// 
        /// The parameter tier to assign to a parameter.
        /// 
        ///  
        /// 
        /// Parameter Store offers a standard tier and an advanced tier for parameters. Standard
        /// parameters have a content size limit of 4 KB and can't be configured to use parameter
        /// policies. You can create a maximum of 10,000 standard parameters for each Region in
        /// an Amazon Web Services account. Standard parameters are offered at no additional cost.
        /// 
        /// 
        ///  
        /// 
        /// Advanced parameters have a content size limit of 8 KB and can be configured to use
        /// parameter policies. You can create a maximum of 100,000 advanced parameters for each
        /// Region in an Amazon Web Services account. Advanced parameters incur a charge. For
        /// more information, see Standard
        /// and advanced parameter tiers in the Amazon Web Services Systems Manager User
        /// Guide.
        /// 
        ///  
        /// 
        /// You can change a standard parameter to an advanced parameter any time. But you can't
        /// revert an advanced parameter to a standard parameter. Reverting an advanced parameter
        /// to a standard parameter would result in data loss because the system would truncate
        /// the size of the parameter from 8 KB to 4 KB. Reverting would also remove any policies
        /// attached to the parameter. Lastly, advanced parameters use a different form of encryption
        /// than standard parameters. 
        /// 
        ///  
        /// 
        /// If you no longer need an advanced parameter, or if you no longer want to incur charges
        /// for an advanced parameter, you must delete it and recreate it as a new standard parameter.
        /// 
        /// 
        ///  
        /// 
        ///  Using the Default Tier Configuration 
        /// 
        ///  
        /// 
        /// In PutParameter requests, you can specify the tier to create the parameter
        /// in. Whenever you specify a tier in the request, Parameter Store creates or updates
        /// the parameter according to that request. However, if you don't specify a tier in a
        /// request, Parameter Store assigns the tier based on the current Parameter Store default
        /// tier configuration.
        /// 
        ///  
        /// 
        /// The default tier when you begin using Parameter Store is the standard-parameter tier.
        /// If you use the advanced-parameter tier, you can specify one of the following as the
        /// default:
        /// 
        ///   -  
        /// 
        ///  Advanced: With this option, Parameter Store evaluates all requests as advanced
        /// parameters. 
        /// 
        ///  
  -  
        /// 
        ///  Intelligent-Tiering: With this option, Parameter Store evaluates each request
        /// to determine if the parameter is standard or advanced. 
        /// 
        ///  
        /// 
        /// If the request doesn't include any options that require an advanced parameter, the
        /// parameter is created in the standard-parameter tier. If one or more options requiring
        /// an advanced parameter are included in the request, Parameter Store create a parameter
        /// in the advanced-parameter tier.
        /// 
        ///  
        /// 
        /// This approach helps control your parameter-related costs by always creating standard
        /// parameters unless an advanced parameter is necessary. 
        /// 
        ///  
  
 
        /// 
        /// Options that require an advanced parameter include the following:
        /// 
        ///   -  
        /// 
        /// The content size of the parameter is more than 4 KB.
        /// 
        ///  
  -  
        /// 
        /// The parameter uses a parameter policy.
        /// 
        ///  
  -  
        /// 
        /// More than 10,000 parameters already exist in your Amazon Web Services account in the
        /// current Amazon Web Services Region.
        /// 
        ///  
  
 
        /// 
        /// For more information about configuring the default tier option, see Specifying
        /// a default parameter tier in the Amazon Web Services Systems Manager User Guide.
        /// 
        /// 
        public ParameterTier Tier
        {
            get { return this._tier; }
            set { this._tier = value; }
        }
        // Check to see if Tier property is set
        internal bool IsSetTier()
        {
            return this._tier != null;
        }
        /// 
        /// Gets and sets the property Type. 
        /// 
        /// The type of parameter that you want to add to the system.
        /// 
        ///   
        /// 
        ///  SecureString isn't currently supported for CloudFormation templates.
        /// 
        ///   
        /// 
        /// Items in a StringList must be separated by a comma (,). You can't use
        /// other punctuation or special character to escape items in the list. If you have a
        /// parameter value that requires a comma, then use the String data type.
        /// 
        ///   
        /// 
        /// Specifying a parameter type isn't required when updating a parameter. You must specify
        /// a parameter type when creating a parameter.
        /// 
        ///  
        /// 
        public ParameterType Type
        {
            get { return this._type; }
            set { this._type = value; }
        }
        // Check to see if Type property is set
        internal bool IsSetType()
        {
            return this._type != null;
        }
        /// 
        /// Gets and sets the property Value. 
        /// 
        /// The parameter value that you want to add to the system. Standard parameters have a
        /// value limit of 4 KB. Advanced parameters have a value limit of 8 KB.
        /// 
        ///   
        /// 
        /// Parameters can't be referenced or nested in the values of other parameters. You can't
        /// include {{}} or {{ssm:parameter-name}} in a parameter
        /// value.
        /// 
        ///  
        /// 
        [AWSProperty(Required=true, Sensitive=true)]
        public string Value
        {
            get { return this._value; }
            set { this._value = value; }
        }
        // Check to see if Value property is set
        internal bool IsSetValue()
        {
            return this._value != null;
        }
    }
}