/*
 * 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 ImportSnapshot operation.
    /// Imports a disk into an EBS snapshot.
    /// 
    ///  
    /// 
    /// For more information, see Importing
    /// a disk as a snapshot using VM Import/Export in the VM Import/Export User Guide.
    /// 
    /// 
    public partial class ImportSnapshotRequest : AmazonEC2Request
    {
        private ClientData _clientData;
        private string _clientToken;
        private string _description;
        private SnapshotDiskContainer _diskContainer;
        private bool? _encrypted;
        private string _kmsKeyId;
        private string _roleName;
        private List _tagSpecifications = new List();
        /// 
        /// Gets and sets the property ClientData. 
        /// 
        /// The client-specific data.
        /// 
        /// 
        public ClientData ClientData
        {
            get { return this._clientData; }
            set { this._clientData = value; }
        }
        // Check to see if ClientData property is set
        internal bool IsSetClientData()
        {
            return this._clientData != null;
        }
        /// 
        /// Gets and sets the property ClientToken. 
        /// 
        /// Token to enable idempotency for VM import requests.
        /// 
        /// 
        public string ClientToken
        {
            get { return this._clientToken; }
            set { this._clientToken = value; }
        }
        // Check to see if ClientToken property is set
        internal bool IsSetClientToken()
        {
            return this._clientToken != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// The description string for the import snapshot task.
        /// 
        /// 
        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 DiskContainer. 
        /// 
        /// Information about the disk container.
        /// 
        /// 
        public SnapshotDiskContainer DiskContainer
        {
            get { return this._diskContainer; }
            set { this._diskContainer = value; }
        }
        // Check to see if DiskContainer property is set
        internal bool IsSetDiskContainer()
        {
            return this._diskContainer != null;
        }
        /// 
        /// Gets and sets the property Encrypted. 
        /// 
        /// Specifies whether the destination snapshot of the imported image should be encrypted.
        /// The default KMS key for EBS is used unless you specify a non-default KMS key using
        /// KmsKeyId. For more information, see Amazon
        /// EBS Encryption in the Amazon Elastic Compute Cloud User Guide.
        /// 
        /// 
        public bool Encrypted
        {
            get { return this._encrypted.GetValueOrDefault(); }
            set { this._encrypted = value; }
        }
        // Check to see if Encrypted property is set
        internal bool IsSetEncrypted()
        {
            return this._encrypted.HasValue; 
        }
        /// 
        /// Gets and sets the property KmsKeyId. 
        /// 
        /// An identifier for the symmetric KMS key to use when creating the encrypted snapshot.
        /// This parameter is only required if you want to use a non-default KMS key; if this
        /// parameter is not specified, the default KMS key for EBS is used. If a KmsKeyId
        /// is specified, the Encrypted flag must also be set. 
        /// 
        ///  
        /// 
        /// The KMS key identifier may be provided in any of the following formats: 
        /// 
        ///   -  
        /// 
        /// Key ID
        /// 
        ///  
-  
        /// 
        /// Key alias
        /// 
        ///  
-  
        /// 
        /// ARN using key ID. The ID ARN contains the arn:aws:kmsnamespace, followed
        /// by the Region of the key, the Amazon Web Services account ID of the key owner, the
        ///keynamespace, and then the key ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef.
        /// 
        ///
-  
        /// 
        /// ARN using key alias. The alias ARN contains the arn:aws:kmsnamespace,
        /// followed by the Region of the key, the Amazon Web Services account ID of the key owner,
        /// thealiasnamespace, and then the key alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.
        /// 
        /// 
        ///
/// 
        /// Amazon Web Services parsesKmsKeyId asynchronously, meaning that the
        /// action you call may appear to complete even though you provided an invalid identifier.
        /// This action will eventually report failure. 
        /// 
        ///  
        /// 
        /// The specified KMS key must exist in the Region that the snapshot is being copied to.
        /// 
        ///  
        /// 
        /// Amazon EBS does not support asymmetric KMS keys.
        /// 
        /// 
        public string KmsKeyId
        {
            get { return this._kmsKeyId; }
            set { this._kmsKeyId = value; }
        }
        // Check to see if KmsKeyId property is set
        internal bool IsSetKmsKeyId()
        {
            return this._kmsKeyId != null;
        }
        /// 
        /// Gets and sets the property RoleName. 
        /// 
        /// The name of the role to use when not using the default role, 'vmimport'.
        /// 
        /// 
        public string RoleName
        {
            get { return this._roleName; }
            set { this._roleName = value; }
        }
        // Check to see if RoleName property is set
        internal bool IsSetRoleName()
        {
            return this._roleName != null;
        }
        /// 
        /// Gets and sets the property TagSpecifications. 
        /// 
        /// The tags to apply to the import snapshot task during creation.
        /// 
        /// 
        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; 
        }
    }
}