/*
 * 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 autoscaling-2011-01-01.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.AutoScaling.Model
{
    /// 
    /// Describes a lifecycle hook. A lifecycle hook lets you create solutions that are aware
    /// of events in the Auto Scaling instance lifecycle, and then perform a custom action
    /// on instances when the corresponding lifecycle event occurs.
    /// 
    public partial class LifecycleHook
    {
        private string _autoScalingGroupName;
        private string _defaultResult;
        private int? _globalTimeout;
        private int? _heartbeatTimeout;
        private string _lifecycleHookName;
        private string _lifecycleTransition;
        private string _notificationMetadata;
        private string _notificationTargetARN;
        private string _roleARN;
        /// 
        /// Gets and sets the property AutoScalingGroupName. 
        /// 
        /// The name of the Auto Scaling group for the lifecycle hook.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string AutoScalingGroupName
        {
            get { return this._autoScalingGroupName; }
            set { this._autoScalingGroupName = value; }
        }
        // Check to see if AutoScalingGroupName property is set
        internal bool IsSetAutoScalingGroupName()
        {
            return this._autoScalingGroupName != null;
        }
        /// 
        /// Gets and sets the property DefaultResult. 
        /// 
        /// The action the Auto Scaling group takes when the lifecycle hook timeout elapses or
        /// if an unexpected failure occurs.
        /// 
        ///  
        /// 
        /// Valid values: CONTINUE | ABANDON 
        /// 
        /// 
        public string DefaultResult
        {
            get { return this._defaultResult; }
            set { this._defaultResult = value; }
        }
        // Check to see if DefaultResult property is set
        internal bool IsSetDefaultResult()
        {
            return this._defaultResult != null;
        }
        /// 
        /// Gets and sets the property GlobalTimeout. 
        /// 
        /// The maximum time, in seconds, that an instance can remain in a wait state. The maximum
        /// is 172800 seconds (48 hours) or 100 times HeartbeatTimeout, whichever
        /// is smaller.
        /// 
        /// 
        public int GlobalTimeout
        {
            get { return this._globalTimeout.GetValueOrDefault(); }
            set { this._globalTimeout = value; }
        }
        // Check to see if GlobalTimeout property is set
        internal bool IsSetGlobalTimeout()
        {
            return this._globalTimeout.HasValue; 
        }
        /// 
        /// Gets and sets the property HeartbeatTimeout. 
        /// 
        /// The maximum time, in seconds, that can elapse before the lifecycle hook times out.
        /// If the lifecycle hook times out, Amazon EC2 Auto Scaling performs the action that
        /// you specified in the DefaultResult property.
        /// 
        /// 
        public int HeartbeatTimeout
        {
            get { return this._heartbeatTimeout.GetValueOrDefault(); }
            set { this._heartbeatTimeout = value; }
        }
        // Check to see if HeartbeatTimeout property is set
        internal bool IsSetHeartbeatTimeout()
        {
            return this._heartbeatTimeout.HasValue; 
        }
        /// 
        /// Gets and sets the property LifecycleHookName. 
        /// 
        /// The name of the lifecycle hook.
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string LifecycleHookName
        {
            get { return this._lifecycleHookName; }
            set { this._lifecycleHookName = value; }
        }
        // Check to see if LifecycleHookName property is set
        internal bool IsSetLifecycleHookName()
        {
            return this._lifecycleHookName != null;
        }
        /// 
        /// Gets and sets the property LifecycleTransition. 
        /// 
        /// The lifecycle transition.
        /// 
        ///  
        /// 
        /// Valid values: autoscaling:EC2_INSTANCE_LAUNCHING | autoscaling:EC2_INSTANCE_TERMINATING
        /// 
        /// 
        /// 
        public string LifecycleTransition
        {
            get { return this._lifecycleTransition; }
            set { this._lifecycleTransition = value; }
        }
        // Check to see if LifecycleTransition property is set
        internal bool IsSetLifecycleTransition()
        {
            return this._lifecycleTransition != null;
        }
        /// 
        /// Gets and sets the property NotificationMetadata. 
        /// 
        /// Additional information that is included any time Amazon EC2 Auto Scaling sends a message
        /// to the notification target.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1023)]
        public string NotificationMetadata
        {
            get { return this._notificationMetadata; }
            set { this._notificationMetadata = value; }
        }
        // Check to see if NotificationMetadata property is set
        internal bool IsSetNotificationMetadata()
        {
            return this._notificationMetadata != null;
        }
        /// 
        /// Gets and sets the property NotificationTargetARN. 
        /// 
        /// The ARN of the target that Amazon EC2 Auto Scaling sends notifications to when an
        /// instance is in a wait state for the lifecycle hook.
        /// 
        /// 
        [AWSProperty(Min=0, Max=255)]
        public string NotificationTargetARN
        {
            get { return this._notificationTargetARN; }
            set { this._notificationTargetARN = value; }
        }
        // Check to see if NotificationTargetARN property is set
        internal bool IsSetNotificationTargetARN()
        {
            return this._notificationTargetARN != null;
        }
        /// 
        /// Gets and sets the property RoleARN. 
        /// 
        /// The ARN of the IAM role that allows the Auto Scaling group to publish to the specified
        /// notification target (an Amazon SNS topic or an Amazon SQS queue).
        /// 
        /// 
        [AWSProperty(Min=1, Max=255)]
        public string RoleARN
        {
            get { return this._roleARN; }
            set { this._roleARN = value; }
        }
        // Check to see if RoleARN property is set
        internal bool IsSetRoleARN()
        {
            return this._roleARN != null;
        }
    }
}