/*
 * 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 ec2-2016-11-15.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.EC2.Model
{
    /// 
    /// Container for the parameters to the CreateSnapshots operation.
    /// Creates crash-consistent snapshots of multiple EBS volumes and stores the data in
    /// S3. Volumes are chosen by specifying an instance. Any attached volumes will produce
    /// one snapshot each that is crash-consistent across the instance.
    /// 
    ///  
    /// 
    /// You can include all of the volumes currently attached to the instance, or you can
    /// exclude the root volume or specific data (non-root) volumes from the multi-volume
    /// snapshot set.
    /// 
    ///  
    /// 
    /// You can create multi-volume snapshots of instances in a Region and instances on an
    /// Outpost. If you create snapshots from an instance in a Region, the snapshots must
    /// be stored in the same Region as the instance. If you create snapshots from an instance
    /// on an Outpost, the snapshots can be stored on the same Outpost as the instance, or
    /// in the Region for that Outpost.
    /// 
    /// 
    public partial class CreateSnapshotsRequest : AmazonEC2Request
    {
        private CopyTagsFromSource _copyTagsFromSource;
        private string _description;
        private InstanceSpecification _instanceSpecification;
        private string _outpostArn;
        private List _tagSpecifications = new List();
        /// 
        /// Gets and sets the property CopyTagsFromSource. 
        /// 
        /// Copies the tags from the specified volume to corresponding snapshot.
        /// 
        /// 
        public CopyTagsFromSource CopyTagsFromSource
        {
            get { return this._copyTagsFromSource; }
            set { this._copyTagsFromSource = value; }
        }
        // Check to see if CopyTagsFromSource property is set
        internal bool IsSetCopyTagsFromSource()
        {
            return this._copyTagsFromSource != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        ///  A description propagated to every snapshot specified by the instance.
        /// 
        /// 
        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 InstanceSpecification. 
        /// 
        /// The instance to specify which volumes should be included in the snapshots.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public InstanceSpecification InstanceSpecification
        {
            get { return this._instanceSpecification; }
            set { this._instanceSpecification = value; }
        }
        // Check to see if InstanceSpecification property is set
        internal bool IsSetInstanceSpecification()
        {
            return this._instanceSpecification != null;
        }
        /// 
        /// Gets and sets the property OutpostArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the Outpost on which to create the local snapshots.
        /// 
        ///   -  
        /// 
        /// To create snapshots from an instance in a Region, omit this parameter. The snapshots
        /// are created in the same Region as the instance.
        /// 
        ///  
  -  
        /// 
        /// To create snapshots from an instance on an Outpost and store the snapshots in the
        /// Region, omit this parameter. The snapshots are created in the Region for the Outpost.
        /// 
        ///  
  -  
        /// 
        /// To create snapshots from an instance on an Outpost and store the snapshots on an Outpost,
        /// specify the ARN of the destination Outpost. The snapshots must be created on the same
        /// Outpost as the instance.
        /// 
        ///  
  
 
        /// 
        /// For more information, see 
        /// Create multi-volume local snapshots from instances on an Outpost in the Amazon
        /// Elastic Compute Cloud User Guide.
        /// 
        /// 
        public string OutpostArn
        {
            get { return this._outpostArn; }
            set { this._outpostArn = value; }
        }
        // Check to see if OutpostArn property is set
        internal bool IsSetOutpostArn()
        {
            return this._outpostArn != null;
        }
        /// 
        /// Gets and sets the property TagSpecifications. 
        /// 
        /// Tags to apply to every snapshot specified by the instance.
        /// 
        /// 
        public List TagSpecifications
        {
            get { return this._tagSpecifications; }
            set { this._tagSpecifications = value; }
        }
        // Check to see if TagSpecifications property is set
        internal bool IsSetTagSpecifications()
        {
            return this._tagSpecifications != null && this._tagSpecifications.Count > 0; 
        }
    }
}