// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function autoscalingGroupInitialLifecycleHookToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        default_result: cdktf.stringToTerraform(struct.defaultResult),
        heartbeat_timeout: cdktf.numberToTerraform(struct.heartbeatTimeout),
        lifecycle_transition: cdktf.stringToTerraform(struct.lifecycleTransition),
        name: cdktf.stringToTerraform(struct.name),
        notification_metadata: cdktf.stringToTerraform(struct.notificationMetadata),
        notification_target_arn: cdktf.stringToTerraform(struct.notificationTargetArn),
        role_arn: cdktf.stringToTerraform(struct.roleArn),
    };
}
export function autoscalingGroupInstanceRefreshPreferencesToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        checkpoint_delay: cdktf.stringToTerraform(struct.checkpointDelay),
        checkpoint_percentages: cdktf.listMapper(cdktf.numberToTerraform)(struct.checkpointPercentages),
        instance_warmup: cdktf.stringToTerraform(struct.instanceWarmup),
        min_healthy_percentage: cdktf.numberToTerraform(struct.minHealthyPercentage),
    };
}
export class AutoscalingGroupInstanceRefreshPreferencesOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._checkpointDelay !== undefined) {
            hasAnyValues = true;
            internalValueResult.checkpointDelay = this._checkpointDelay;
        }
        if (this._checkpointPercentages !== undefined) {
            hasAnyValues = true;
            internalValueResult.checkpointPercentages = this._checkpointPercentages;
        }
        if (this._instanceWarmup !== undefined) {
            hasAnyValues = true;
            internalValueResult.instanceWarmup = this._instanceWarmup;
        }
        if (this._minHealthyPercentage !== undefined) {
            hasAnyValues = true;
            internalValueResult.minHealthyPercentage = this._minHealthyPercentage;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._checkpointDelay = undefined;
            this._checkpointPercentages = undefined;
            this._instanceWarmup = undefined;
            this._minHealthyPercentage = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._checkpointDelay = value.checkpointDelay;
            this._checkpointPercentages = value.checkpointPercentages;
            this._instanceWarmup = value.instanceWarmup;
            this._minHealthyPercentage = value.minHealthyPercentage;
        }
    }
    // checkpoint_delay - computed: false, optional: true, required: false
    _checkpointDelay;
    get checkpointDelay() {
        return this.getStringAttribute('checkpoint_delay');
    }
    set checkpointDelay(value) {
        this._checkpointDelay = value;
    }
    resetCheckpointDelay() {
        this._checkpointDelay = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get checkpointDelayInput() {
        return this._checkpointDelay;
    }
    // checkpoint_percentages - computed: false, optional: true, required: false
    _checkpointPercentages;
    get checkpointPercentages() {
        return this.getNumberListAttribute('checkpoint_percentages');
    }
    set checkpointPercentages(value) {
        this._checkpointPercentages = value;
    }
    resetCheckpointPercentages() {
        this._checkpointPercentages = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get checkpointPercentagesInput() {
        return this._checkpointPercentages;
    }
    // instance_warmup - computed: false, optional: true, required: false
    _instanceWarmup;
    get instanceWarmup() {
        return this.getStringAttribute('instance_warmup');
    }
    set instanceWarmup(value) {
        this._instanceWarmup = value;
    }
    resetInstanceWarmup() {
        this._instanceWarmup = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instanceWarmupInput() {
        return this._instanceWarmup;
    }
    // min_healthy_percentage - computed: false, optional: true, required: false
    _minHealthyPercentage;
    get minHealthyPercentage() {
        return this.getNumberAttribute('min_healthy_percentage');
    }
    set minHealthyPercentage(value) {
        this._minHealthyPercentage = value;
    }
    resetMinHealthyPercentage() {
        this._minHealthyPercentage = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get minHealthyPercentageInput() {
        return this._minHealthyPercentage;
    }
}
export function autoscalingGroupInstanceRefreshToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        strategy: cdktf.stringToTerraform(struct.strategy),
        triggers: cdktf.listMapper(cdktf.stringToTerraform)(struct.triggers),
        preferences: autoscalingGroupInstanceRefreshPreferencesToTerraform(struct.preferences),
    };
}
export class AutoscalingGroupInstanceRefreshOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._strategy !== undefined) {
            hasAnyValues = true;
            internalValueResult.strategy = this._strategy;
        }
        if (this._triggers !== undefined) {
            hasAnyValues = true;
            internalValueResult.triggers = this._triggers;
        }
        if (this._preferences?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.preferences = this._preferences?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._strategy = undefined;
            this._triggers = undefined;
            this._preferences.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._strategy = value.strategy;
            this._triggers = value.triggers;
            this._preferences.internalValue = value.preferences;
        }
    }
    // strategy - computed: false, optional: false, required: true
    _strategy;
    get strategy() {
        return this.getStringAttribute('strategy');
    }
    set strategy(value) {
        this._strategy = value;
    }
    // Temporarily expose input value. Use with caution.
    get strategyInput() {
        return this._strategy;
    }
    // triggers - computed: false, optional: true, required: false
    _triggers;
    get triggers() {
        return cdktf.Fn.tolist(this.getListAttribute('triggers'));
    }
    set triggers(value) {
        this._triggers = value;
    }
    resetTriggers() {
        this._triggers = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get triggersInput() {
        return this._triggers;
    }
    // preferences - computed: false, optional: true, required: false
    _preferences = new AutoscalingGroupInstanceRefreshPreferencesOutputReference(this, "preferences", true);
    get preferences() {
        return this._preferences;
    }
    putPreferences(value) {
        this._preferences.internalValue = value;
    }
    resetPreferences() {
        this._preferences.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get preferencesInput() {
        return this._preferences.internalValue;
    }
}
export function autoscalingGroupLaunchTemplateToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        name: cdktf.stringToTerraform(struct.name),
        version: cdktf.stringToTerraform(struct.version),
    };
}
export class AutoscalingGroupLaunchTemplateOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._name !== undefined) {
            hasAnyValues = true;
            internalValueResult.name = this._name;
        }
        if (this._version !== undefined) {
            hasAnyValues = true;
            internalValueResult.version = this._version;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._name = undefined;
            this._version = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._name = value.name;
            this._version = value.version;
        }
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // name - computed: true, optional: true, required: false
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    resetName() {
        this._name = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // version - computed: false, optional: true, required: false
    _version;
    get version() {
        return this.getStringAttribute('version');
    }
    set version(value) {
        this._version = value;
    }
    resetVersion() {
        this._version = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get versionInput() {
        return this._version;
    }
}
export function autoscalingGroupMixedInstancesPolicyInstancesDistributionToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        on_demand_allocation_strategy: cdktf.stringToTerraform(struct.onDemandAllocationStrategy),
        on_demand_base_capacity: cdktf.numberToTerraform(struct.onDemandBaseCapacity),
        on_demand_percentage_above_base_capacity: cdktf.numberToTerraform(struct.onDemandPercentageAboveBaseCapacity),
        spot_allocation_strategy: cdktf.stringToTerraform(struct.spotAllocationStrategy),
        spot_instance_pools: cdktf.numberToTerraform(struct.spotInstancePools),
        spot_max_price: cdktf.stringToTerraform(struct.spotMaxPrice),
    };
}
export class AutoscalingGroupMixedInstancesPolicyInstancesDistributionOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._onDemandAllocationStrategy !== undefined) {
            hasAnyValues = true;
            internalValueResult.onDemandAllocationStrategy = this._onDemandAllocationStrategy;
        }
        if (this._onDemandBaseCapacity !== undefined) {
            hasAnyValues = true;
            internalValueResult.onDemandBaseCapacity = this._onDemandBaseCapacity;
        }
        if (this._onDemandPercentageAboveBaseCapacity !== undefined) {
            hasAnyValues = true;
            internalValueResult.onDemandPercentageAboveBaseCapacity = this._onDemandPercentageAboveBaseCapacity;
        }
        if (this._spotAllocationStrategy !== undefined) {
            hasAnyValues = true;
            internalValueResult.spotAllocationStrategy = this._spotAllocationStrategy;
        }
        if (this._spotInstancePools !== undefined) {
            hasAnyValues = true;
            internalValueResult.spotInstancePools = this._spotInstancePools;
        }
        if (this._spotMaxPrice !== undefined) {
            hasAnyValues = true;
            internalValueResult.spotMaxPrice = this._spotMaxPrice;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._onDemandAllocationStrategy = undefined;
            this._onDemandBaseCapacity = undefined;
            this._onDemandPercentageAboveBaseCapacity = undefined;
            this._spotAllocationStrategy = undefined;
            this._spotInstancePools = undefined;
            this._spotMaxPrice = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._onDemandAllocationStrategy = value.onDemandAllocationStrategy;
            this._onDemandBaseCapacity = value.onDemandBaseCapacity;
            this._onDemandPercentageAboveBaseCapacity = value.onDemandPercentageAboveBaseCapacity;
            this._spotAllocationStrategy = value.spotAllocationStrategy;
            this._spotInstancePools = value.spotInstancePools;
            this._spotMaxPrice = value.spotMaxPrice;
        }
    }
    // on_demand_allocation_strategy - computed: true, optional: true, required: false
    _onDemandAllocationStrategy;
    get onDemandAllocationStrategy() {
        return this.getStringAttribute('on_demand_allocation_strategy');
    }
    set onDemandAllocationStrategy(value) {
        this._onDemandAllocationStrategy = value;
    }
    resetOnDemandAllocationStrategy() {
        this._onDemandAllocationStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get onDemandAllocationStrategyInput() {
        return this._onDemandAllocationStrategy;
    }
    // on_demand_base_capacity - computed: true, optional: true, required: false
    _onDemandBaseCapacity;
    get onDemandBaseCapacity() {
        return this.getNumberAttribute('on_demand_base_capacity');
    }
    set onDemandBaseCapacity(value) {
        this._onDemandBaseCapacity = value;
    }
    resetOnDemandBaseCapacity() {
        this._onDemandBaseCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get onDemandBaseCapacityInput() {
        return this._onDemandBaseCapacity;
    }
    // on_demand_percentage_above_base_capacity - computed: true, optional: true, required: false
    _onDemandPercentageAboveBaseCapacity;
    get onDemandPercentageAboveBaseCapacity() {
        return this.getNumberAttribute('on_demand_percentage_above_base_capacity');
    }
    set onDemandPercentageAboveBaseCapacity(value) {
        this._onDemandPercentageAboveBaseCapacity = value;
    }
    resetOnDemandPercentageAboveBaseCapacity() {
        this._onDemandPercentageAboveBaseCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get onDemandPercentageAboveBaseCapacityInput() {
        return this._onDemandPercentageAboveBaseCapacity;
    }
    // spot_allocation_strategy - computed: true, optional: true, required: false
    _spotAllocationStrategy;
    get spotAllocationStrategy() {
        return this.getStringAttribute('spot_allocation_strategy');
    }
    set spotAllocationStrategy(value) {
        this._spotAllocationStrategy = value;
    }
    resetSpotAllocationStrategy() {
        this._spotAllocationStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get spotAllocationStrategyInput() {
        return this._spotAllocationStrategy;
    }
    // spot_instance_pools - computed: true, optional: true, required: false
    _spotInstancePools;
    get spotInstancePools() {
        return this.getNumberAttribute('spot_instance_pools');
    }
    set spotInstancePools(value) {
        this._spotInstancePools = value;
    }
    resetSpotInstancePools() {
        this._spotInstancePools = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get spotInstancePoolsInput() {
        return this._spotInstancePools;
    }
    // spot_max_price - computed: false, optional: true, required: false
    _spotMaxPrice;
    get spotMaxPrice() {
        return this.getStringAttribute('spot_max_price');
    }
    set spotMaxPrice(value) {
        this._spotMaxPrice = value;
    }
    resetSpotMaxPrice() {
        this._spotMaxPrice = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get spotMaxPriceInput() {
        return this._spotMaxPrice;
    }
}
export function autoscalingGroupMixedInstancesPolicyLaunchTemplateLaunchTemplateSpecificationToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        launch_template_id: cdktf.stringToTerraform(struct.launchTemplateId),
        launch_template_name: cdktf.stringToTerraform(struct.launchTemplateName),
        version: cdktf.stringToTerraform(struct.version),
    };
}
export class AutoscalingGroupMixedInstancesPolicyLaunchTemplateLaunchTemplateSpecificationOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._launchTemplateId !== undefined) {
            hasAnyValues = true;
            internalValueResult.launchTemplateId = this._launchTemplateId;
        }
        if (this._launchTemplateName !== undefined) {
            hasAnyValues = true;
            internalValueResult.launchTemplateName = this._launchTemplateName;
        }
        if (this._version !== undefined) {
            hasAnyValues = true;
            internalValueResult.version = this._version;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._launchTemplateId = undefined;
            this._launchTemplateName = undefined;
            this._version = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._launchTemplateId = value.launchTemplateId;
            this._launchTemplateName = value.launchTemplateName;
            this._version = value.version;
        }
    }
    // launch_template_id - computed: true, optional: true, required: false
    _launchTemplateId;
    get launchTemplateId() {
        return this.getStringAttribute('launch_template_id');
    }
    set launchTemplateId(value) {
        this._launchTemplateId = value;
    }
    resetLaunchTemplateId() {
        this._launchTemplateId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateIdInput() {
        return this._launchTemplateId;
    }
    // launch_template_name - computed: true, optional: true, required: false
    _launchTemplateName;
    get launchTemplateName() {
        return this.getStringAttribute('launch_template_name');
    }
    set launchTemplateName(value) {
        this._launchTemplateName = value;
    }
    resetLaunchTemplateName() {
        this._launchTemplateName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateNameInput() {
        return this._launchTemplateName;
    }
    // version - computed: false, optional: true, required: false
    _version;
    get version() {
        return this.getStringAttribute('version');
    }
    set version(value) {
        this._version = value;
    }
    resetVersion() {
        this._version = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get versionInput() {
        return this._version;
    }
}
export function autoscalingGroupMixedInstancesPolicyLaunchTemplateOverrideLaunchTemplateSpecificationToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        launch_template_id: cdktf.stringToTerraform(struct.launchTemplateId),
        launch_template_name: cdktf.stringToTerraform(struct.launchTemplateName),
        version: cdktf.stringToTerraform(struct.version),
    };
}
export class AutoscalingGroupMixedInstancesPolicyLaunchTemplateOverrideLaunchTemplateSpecificationOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._launchTemplateId !== undefined) {
            hasAnyValues = true;
            internalValueResult.launchTemplateId = this._launchTemplateId;
        }
        if (this._launchTemplateName !== undefined) {
            hasAnyValues = true;
            internalValueResult.launchTemplateName = this._launchTemplateName;
        }
        if (this._version !== undefined) {
            hasAnyValues = true;
            internalValueResult.version = this._version;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._launchTemplateId = undefined;
            this._launchTemplateName = undefined;
            this._version = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._launchTemplateId = value.launchTemplateId;
            this._launchTemplateName = value.launchTemplateName;
            this._version = value.version;
        }
    }
    // launch_template_id - computed: true, optional: true, required: false
    _launchTemplateId;
    get launchTemplateId() {
        return this.getStringAttribute('launch_template_id');
    }
    set launchTemplateId(value) {
        this._launchTemplateId = value;
    }
    resetLaunchTemplateId() {
        this._launchTemplateId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateIdInput() {
        return this._launchTemplateId;
    }
    // launch_template_name - computed: true, optional: true, required: false
    _launchTemplateName;
    get launchTemplateName() {
        return this.getStringAttribute('launch_template_name');
    }
    set launchTemplateName(value) {
        this._launchTemplateName = value;
    }
    resetLaunchTemplateName() {
        this._launchTemplateName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateNameInput() {
        return this._launchTemplateName;
    }
    // version - computed: false, optional: true, required: false
    _version;
    get version() {
        return this.getStringAttribute('version');
    }
    set version(value) {
        this._version = value;
    }
    resetVersion() {
        this._version = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get versionInput() {
        return this._version;
    }
}
export function autoscalingGroupMixedInstancesPolicyLaunchTemplateOverrideToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        instance_type: cdktf.stringToTerraform(struct.instanceType),
        weighted_capacity: cdktf.stringToTerraform(struct.weightedCapacity),
        launch_template_specification: autoscalingGroupMixedInstancesPolicyLaunchTemplateOverrideLaunchTemplateSpecificationToTerraform(struct.launchTemplateSpecification),
    };
}
export function autoscalingGroupMixedInstancesPolicyLaunchTemplateToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        launch_template_specification: autoscalingGroupMixedInstancesPolicyLaunchTemplateLaunchTemplateSpecificationToTerraform(struct.launchTemplateSpecification),
        override: cdktf.listMapper(autoscalingGroupMixedInstancesPolicyLaunchTemplateOverrideToTerraform)(struct.override),
    };
}
export class AutoscalingGroupMixedInstancesPolicyLaunchTemplateOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._launchTemplateSpecification?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.launchTemplateSpecification = this._launchTemplateSpecification?.internalValue;
        }
        if (this._override !== undefined) {
            hasAnyValues = true;
            internalValueResult.override = this._override;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._launchTemplateSpecification.internalValue = undefined;
            this._override = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._launchTemplateSpecification.internalValue = value.launchTemplateSpecification;
            this._override = value.override;
        }
    }
    // launch_template_specification - computed: false, optional: false, required: true
    _launchTemplateSpecification = new AutoscalingGroupMixedInstancesPolicyLaunchTemplateLaunchTemplateSpecificationOutputReference(this, "launch_template_specification", true);
    get launchTemplateSpecification() {
        return this._launchTemplateSpecification;
    }
    putLaunchTemplateSpecification(value) {
        this._launchTemplateSpecification.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateSpecificationInput() {
        return this._launchTemplateSpecification.internalValue;
    }
    // override - computed: false, optional: true, required: false
    _override;
    get override() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('override');
    }
    set override(value) {
        this._override = value;
    }
    resetOverride() {
        this._override = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get overrideInput() {
        return this._override;
    }
}
export function autoscalingGroupMixedInstancesPolicyToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        instances_distribution: autoscalingGroupMixedInstancesPolicyInstancesDistributionToTerraform(struct.instancesDistribution),
        launch_template: autoscalingGroupMixedInstancesPolicyLaunchTemplateToTerraform(struct.launchTemplate),
    };
}
export class AutoscalingGroupMixedInstancesPolicyOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._instancesDistribution?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.instancesDistribution = this._instancesDistribution?.internalValue;
        }
        if (this._launchTemplate?.internalValue !== undefined) {
            hasAnyValues = true;
            internalValueResult.launchTemplate = this._launchTemplate?.internalValue;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._instancesDistribution.internalValue = undefined;
            this._launchTemplate.internalValue = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._instancesDistribution.internalValue = value.instancesDistribution;
            this._launchTemplate.internalValue = value.launchTemplate;
        }
    }
    // instances_distribution - computed: false, optional: true, required: false
    _instancesDistribution = new AutoscalingGroupMixedInstancesPolicyInstancesDistributionOutputReference(this, "instances_distribution", true);
    get instancesDistribution() {
        return this._instancesDistribution;
    }
    putInstancesDistribution(value) {
        this._instancesDistribution.internalValue = value;
    }
    resetInstancesDistribution() {
        this._instancesDistribution.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instancesDistributionInput() {
        return this._instancesDistribution.internalValue;
    }
    // launch_template - computed: false, optional: false, required: true
    _launchTemplate = new AutoscalingGroupMixedInstancesPolicyLaunchTemplateOutputReference(this, "launch_template", true);
    get launchTemplate() {
        return this._launchTemplate;
    }
    putLaunchTemplate(value) {
        this._launchTemplate.internalValue = value;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateInput() {
        return this._launchTemplate.internalValue;
    }
}
export function autoscalingGroupTagToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        key: cdktf.stringToTerraform(struct.key),
        propagate_at_launch: cdktf.booleanToTerraform(struct.propagateAtLaunch),
        value: cdktf.stringToTerraform(struct.value),
    };
}
export function autoscalingGroupTimeoutsToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        delete: cdktf.stringToTerraform(struct.delete),
    };
}
export class AutoscalingGroupTimeoutsOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._delete !== undefined) {
            hasAnyValues = true;
            internalValueResult.delete = this._delete;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._delete = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._delete = value.delete;
        }
    }
    // delete - computed: false, optional: true, required: false
    _delete;
    get delete() {
        return this.getStringAttribute('delete');
    }
    set delete(value) {
        this._delete = value;
    }
    resetDelete() {
        this._delete = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deleteInput() {
        return this._delete;
    }
}
export function autoscalingGroupWarmPoolToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        max_group_prepared_capacity: cdktf.numberToTerraform(struct.maxGroupPreparedCapacity),
        min_size: cdktf.numberToTerraform(struct.minSize),
        pool_state: cdktf.stringToTerraform(struct.poolState),
    };
}
export class AutoscalingGroupWarmPoolOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._maxGroupPreparedCapacity !== undefined) {
            hasAnyValues = true;
            internalValueResult.maxGroupPreparedCapacity = this._maxGroupPreparedCapacity;
        }
        if (this._minSize !== undefined) {
            hasAnyValues = true;
            internalValueResult.minSize = this._minSize;
        }
        if (this._poolState !== undefined) {
            hasAnyValues = true;
            internalValueResult.poolState = this._poolState;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._maxGroupPreparedCapacity = undefined;
            this._minSize = undefined;
            this._poolState = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._maxGroupPreparedCapacity = value.maxGroupPreparedCapacity;
            this._minSize = value.minSize;
            this._poolState = value.poolState;
        }
    }
    // max_group_prepared_capacity - computed: false, optional: true, required: false
    _maxGroupPreparedCapacity;
    get maxGroupPreparedCapacity() {
        return this.getNumberAttribute('max_group_prepared_capacity');
    }
    set maxGroupPreparedCapacity(value) {
        this._maxGroupPreparedCapacity = value;
    }
    resetMaxGroupPreparedCapacity() {
        this._maxGroupPreparedCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maxGroupPreparedCapacityInput() {
        return this._maxGroupPreparedCapacity;
    }
    // min_size - computed: false, optional: true, required: false
    _minSize;
    get minSize() {
        return this.getNumberAttribute('min_size');
    }
    set minSize(value) {
        this._minSize = value;
    }
    resetMinSize() {
        this._minSize = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get minSizeInput() {
        return this._minSize;
    }
    // pool_state - computed: false, optional: true, required: false
    _poolState;
    get poolState() {
        return this.getStringAttribute('pool_state');
    }
    set poolState(value) {
        this._poolState = value;
    }
    resetPoolState() {
        this._poolState = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get poolStateInput() {
        return this._poolState;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/autoscaling_group aws_autoscaling_group}
*/
export class AutoscalingGroup extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_autoscaling_group";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/autoscaling_group aws_autoscaling_group} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options AutoscalingGroupConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_autoscaling_group',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._availabilityZones = config.availabilityZones;
        this._capacityRebalance = config.capacityRebalance;
        this._defaultCooldown = config.defaultCooldown;
        this._desiredCapacity = config.desiredCapacity;
        this._enabledMetrics = config.enabledMetrics;
        this._forceDelete = config.forceDelete;
        this._forceDeleteWarmPool = config.forceDeleteWarmPool;
        this._healthCheckGracePeriod = config.healthCheckGracePeriod;
        this._healthCheckType = config.healthCheckType;
        this._launchConfiguration = config.launchConfiguration;
        this._loadBalancers = config.loadBalancers;
        this._maxInstanceLifetime = config.maxInstanceLifetime;
        this._maxSize = config.maxSize;
        this._metricsGranularity = config.metricsGranularity;
        this._minElbCapacity = config.minElbCapacity;
        this._minSize = config.minSize;
        this._name = config.name;
        this._namePrefix = config.namePrefix;
        this._placementGroup = config.placementGroup;
        this._protectFromScaleIn = config.protectFromScaleIn;
        this._serviceLinkedRoleArn = config.serviceLinkedRoleArn;
        this._suspendedProcesses = config.suspendedProcesses;
        this._tags = config.tags;
        this._targetGroupArns = config.targetGroupArns;
        this._terminationPolicies = config.terminationPolicies;
        this._vpcZoneIdentifier = config.vpcZoneIdentifier;
        this._waitForCapacityTimeout = config.waitForCapacityTimeout;
        this._waitForElbCapacity = config.waitForElbCapacity;
        this._initialLifecycleHook = config.initialLifecycleHook;
        this._instanceRefresh.internalValue = config.instanceRefresh;
        this._launchTemplate.internalValue = config.launchTemplate;
        this._mixedInstancesPolicy.internalValue = config.mixedInstancesPolicy;
        this._tag = config.tag;
        this._timeouts.internalValue = config.timeouts;
        this._warmPool.internalValue = config.warmPool;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // availability_zones - computed: true, optional: true, required: false
    _availabilityZones;
    get availabilityZones() {
        return cdktf.Fn.tolist(this.getListAttribute('availability_zones'));
    }
    set availabilityZones(value) {
        this._availabilityZones = value;
    }
    resetAvailabilityZones() {
        this._availabilityZones = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get availabilityZonesInput() {
        return this._availabilityZones;
    }
    // capacity_rebalance - computed: false, optional: true, required: false
    _capacityRebalance;
    get capacityRebalance() {
        return this.getBooleanAttribute('capacity_rebalance');
    }
    set capacityRebalance(value) {
        this._capacityRebalance = value;
    }
    resetCapacityRebalance() {
        this._capacityRebalance = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get capacityRebalanceInput() {
        return this._capacityRebalance;
    }
    // default_cooldown - computed: true, optional: true, required: false
    _defaultCooldown;
    get defaultCooldown() {
        return this.getNumberAttribute('default_cooldown');
    }
    set defaultCooldown(value) {
        this._defaultCooldown = value;
    }
    resetDefaultCooldown() {
        this._defaultCooldown = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get defaultCooldownInput() {
        return this._defaultCooldown;
    }
    // desired_capacity - computed: true, optional: true, required: false
    _desiredCapacity;
    get desiredCapacity() {
        return this.getNumberAttribute('desired_capacity');
    }
    set desiredCapacity(value) {
        this._desiredCapacity = value;
    }
    resetDesiredCapacity() {
        this._desiredCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get desiredCapacityInput() {
        return this._desiredCapacity;
    }
    // enabled_metrics - computed: false, optional: true, required: false
    _enabledMetrics;
    get enabledMetrics() {
        return cdktf.Fn.tolist(this.getListAttribute('enabled_metrics'));
    }
    set enabledMetrics(value) {
        this._enabledMetrics = value;
    }
    resetEnabledMetrics() {
        this._enabledMetrics = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enabledMetricsInput() {
        return this._enabledMetrics;
    }
    // force_delete - computed: false, optional: true, required: false
    _forceDelete;
    get forceDelete() {
        return this.getBooleanAttribute('force_delete');
    }
    set forceDelete(value) {
        this._forceDelete = value;
    }
    resetForceDelete() {
        this._forceDelete = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get forceDeleteInput() {
        return this._forceDelete;
    }
    // force_delete_warm_pool - computed: false, optional: true, required: false
    _forceDeleteWarmPool;
    get forceDeleteWarmPool() {
        return this.getBooleanAttribute('force_delete_warm_pool');
    }
    set forceDeleteWarmPool(value) {
        this._forceDeleteWarmPool = value;
    }
    resetForceDeleteWarmPool() {
        this._forceDeleteWarmPool = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get forceDeleteWarmPoolInput() {
        return this._forceDeleteWarmPool;
    }
    // health_check_grace_period - computed: false, optional: true, required: false
    _healthCheckGracePeriod;
    get healthCheckGracePeriod() {
        return this.getNumberAttribute('health_check_grace_period');
    }
    set healthCheckGracePeriod(value) {
        this._healthCheckGracePeriod = value;
    }
    resetHealthCheckGracePeriod() {
        this._healthCheckGracePeriod = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get healthCheckGracePeriodInput() {
        return this._healthCheckGracePeriod;
    }
    // health_check_type - computed: true, optional: true, required: false
    _healthCheckType;
    get healthCheckType() {
        return this.getStringAttribute('health_check_type');
    }
    set healthCheckType(value) {
        this._healthCheckType = value;
    }
    resetHealthCheckType() {
        this._healthCheckType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get healthCheckTypeInput() {
        return this._healthCheckType;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // launch_configuration - computed: false, optional: true, required: false
    _launchConfiguration;
    get launchConfiguration() {
        return this.getStringAttribute('launch_configuration');
    }
    set launchConfiguration(value) {
        this._launchConfiguration = value;
    }
    resetLaunchConfiguration() {
        this._launchConfiguration = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchConfigurationInput() {
        return this._launchConfiguration;
    }
    // load_balancers - computed: false, optional: true, required: false
    _loadBalancers;
    get loadBalancers() {
        return cdktf.Fn.tolist(this.getListAttribute('load_balancers'));
    }
    set loadBalancers(value) {
        this._loadBalancers = value;
    }
    resetLoadBalancers() {
        this._loadBalancers = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get loadBalancersInput() {
        return this._loadBalancers;
    }
    // max_instance_lifetime - computed: false, optional: true, required: false
    _maxInstanceLifetime;
    get maxInstanceLifetime() {
        return this.getNumberAttribute('max_instance_lifetime');
    }
    set maxInstanceLifetime(value) {
        this._maxInstanceLifetime = value;
    }
    resetMaxInstanceLifetime() {
        this._maxInstanceLifetime = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get maxInstanceLifetimeInput() {
        return this._maxInstanceLifetime;
    }
    // max_size - computed: false, optional: false, required: true
    _maxSize;
    get maxSize() {
        return this.getNumberAttribute('max_size');
    }
    set maxSize(value) {
        this._maxSize = value;
    }
    // Temporarily expose input value. Use with caution.
    get maxSizeInput() {
        return this._maxSize;
    }
    // metrics_granularity - computed: false, optional: true, required: false
    _metricsGranularity;
    get metricsGranularity() {
        return this.getStringAttribute('metrics_granularity');
    }
    set metricsGranularity(value) {
        this._metricsGranularity = value;
    }
    resetMetricsGranularity() {
        this._metricsGranularity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get metricsGranularityInput() {
        return this._metricsGranularity;
    }
    // min_elb_capacity - computed: false, optional: true, required: false
    _minElbCapacity;
    get minElbCapacity() {
        return this.getNumberAttribute('min_elb_capacity');
    }
    set minElbCapacity(value) {
        this._minElbCapacity = value;
    }
    resetMinElbCapacity() {
        this._minElbCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get minElbCapacityInput() {
        return this._minElbCapacity;
    }
    // min_size - computed: false, optional: false, required: true
    _minSize;
    get minSize() {
        return this.getNumberAttribute('min_size');
    }
    set minSize(value) {
        this._minSize = value;
    }
    // Temporarily expose input value. Use with caution.
    get minSizeInput() {
        return this._minSize;
    }
    // name - computed: true, optional: true, required: false
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    resetName() {
        this._name = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // name_prefix - computed: true, optional: true, required: false
    _namePrefix;
    get namePrefix() {
        return this.getStringAttribute('name_prefix');
    }
    set namePrefix(value) {
        this._namePrefix = value;
    }
    resetNamePrefix() {
        this._namePrefix = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get namePrefixInput() {
        return this._namePrefix;
    }
    // placement_group - computed: false, optional: true, required: false
    _placementGroup;
    get placementGroup() {
        return this.getStringAttribute('placement_group');
    }
    set placementGroup(value) {
        this._placementGroup = value;
    }
    resetPlacementGroup() {
        this._placementGroup = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get placementGroupInput() {
        return this._placementGroup;
    }
    // protect_from_scale_in - computed: false, optional: true, required: false
    _protectFromScaleIn;
    get protectFromScaleIn() {
        return this.getBooleanAttribute('protect_from_scale_in');
    }
    set protectFromScaleIn(value) {
        this._protectFromScaleIn = value;
    }
    resetProtectFromScaleIn() {
        this._protectFromScaleIn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get protectFromScaleInInput() {
        return this._protectFromScaleIn;
    }
    // service_linked_role_arn - computed: true, optional: true, required: false
    _serviceLinkedRoleArn;
    get serviceLinkedRoleArn() {
        return this.getStringAttribute('service_linked_role_arn');
    }
    set serviceLinkedRoleArn(value) {
        this._serviceLinkedRoleArn = value;
    }
    resetServiceLinkedRoleArn() {
        this._serviceLinkedRoleArn = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serviceLinkedRoleArnInput() {
        return this._serviceLinkedRoleArn;
    }
    // suspended_processes - computed: false, optional: true, required: false
    _suspendedProcesses;
    get suspendedProcesses() {
        return cdktf.Fn.tolist(this.getListAttribute('suspended_processes'));
    }
    set suspendedProcesses(value) {
        this._suspendedProcesses = value;
    }
    resetSuspendedProcesses() {
        this._suspendedProcesses = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get suspendedProcessesInput() {
        return this._suspendedProcesses;
    }
    // tags - computed: false, optional: true, required: false
    _tags;
    get tags() {
        return this.getStringMapAttribute('tags');
    }
    set tags(value) {
        this._tags = value;
    }
    resetTags() {
        this._tags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsInput() {
        return this._tags;
    }
    // target_group_arns - computed: false, optional: true, required: false
    _targetGroupArns;
    get targetGroupArns() {
        return cdktf.Fn.tolist(this.getListAttribute('target_group_arns'));
    }
    set targetGroupArns(value) {
        this._targetGroupArns = value;
    }
    resetTargetGroupArns() {
        this._targetGroupArns = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get targetGroupArnsInput() {
        return this._targetGroupArns;
    }
    // termination_policies - computed: false, optional: true, required: false
    _terminationPolicies;
    get terminationPolicies() {
        return this.getListAttribute('termination_policies');
    }
    set terminationPolicies(value) {
        this._terminationPolicies = value;
    }
    resetTerminationPolicies() {
        this._terminationPolicies = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get terminationPoliciesInput() {
        return this._terminationPolicies;
    }
    // vpc_zone_identifier - computed: true, optional: true, required: false
    _vpcZoneIdentifier;
    get vpcZoneIdentifier() {
        return cdktf.Fn.tolist(this.getListAttribute('vpc_zone_identifier'));
    }
    set vpcZoneIdentifier(value) {
        this._vpcZoneIdentifier = value;
    }
    resetVpcZoneIdentifier() {
        this._vpcZoneIdentifier = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get vpcZoneIdentifierInput() {
        return this._vpcZoneIdentifier;
    }
    // wait_for_capacity_timeout - computed: false, optional: true, required: false
    _waitForCapacityTimeout;
    get waitForCapacityTimeout() {
        return this.getStringAttribute('wait_for_capacity_timeout');
    }
    set waitForCapacityTimeout(value) {
        this._waitForCapacityTimeout = value;
    }
    resetWaitForCapacityTimeout() {
        this._waitForCapacityTimeout = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get waitForCapacityTimeoutInput() {
        return this._waitForCapacityTimeout;
    }
    // wait_for_elb_capacity - computed: false, optional: true, required: false
    _waitForElbCapacity;
    get waitForElbCapacity() {
        return this.getNumberAttribute('wait_for_elb_capacity');
    }
    set waitForElbCapacity(value) {
        this._waitForElbCapacity = value;
    }
    resetWaitForElbCapacity() {
        this._waitForElbCapacity = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get waitForElbCapacityInput() {
        return this._waitForElbCapacity;
    }
    // initial_lifecycle_hook - computed: false, optional: true, required: false
    _initialLifecycleHook;
    get initialLifecycleHook() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('initial_lifecycle_hook')));
    }
    set initialLifecycleHook(value) {
        this._initialLifecycleHook = value;
    }
    resetInitialLifecycleHook() {
        this._initialLifecycleHook = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get initialLifecycleHookInput() {
        return this._initialLifecycleHook;
    }
    // instance_refresh - computed: false, optional: true, required: false
    _instanceRefresh = new AutoscalingGroupInstanceRefreshOutputReference(this, "instance_refresh", true);
    get instanceRefresh() {
        return this._instanceRefresh;
    }
    putInstanceRefresh(value) {
        this._instanceRefresh.internalValue = value;
    }
    resetInstanceRefresh() {
        this._instanceRefresh.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get instanceRefreshInput() {
        return this._instanceRefresh.internalValue;
    }
    // launch_template - computed: false, optional: true, required: false
    _launchTemplate = new AutoscalingGroupLaunchTemplateOutputReference(this, "launch_template", true);
    get launchTemplate() {
        return this._launchTemplate;
    }
    putLaunchTemplate(value) {
        this._launchTemplate.internalValue = value;
    }
    resetLaunchTemplate() {
        this._launchTemplate.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTemplateInput() {
        return this._launchTemplate.internalValue;
    }
    // mixed_instances_policy - computed: false, optional: true, required: false
    _mixedInstancesPolicy = new AutoscalingGroupMixedInstancesPolicyOutputReference(this, "mixed_instances_policy", true);
    get mixedInstancesPolicy() {
        return this._mixedInstancesPolicy;
    }
    putMixedInstancesPolicy(value) {
        this._mixedInstancesPolicy.internalValue = value;
    }
    resetMixedInstancesPolicy() {
        this._mixedInstancesPolicy.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get mixedInstancesPolicyInput() {
        return this._mixedInstancesPolicy.internalValue;
    }
    // tag - computed: false, optional: true, required: false
    _tag;
    get tag() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('tag')));
    }
    set tag(value) {
        this._tag = value;
    }
    resetTag() {
        this._tag = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagInput() {
        return this._tag;
    }
    // timeouts - computed: false, optional: true, required: false
    _timeouts = new AutoscalingGroupTimeoutsOutputReference(this, "timeouts", true);
    get timeouts() {
        return this._timeouts;
    }
    putTimeouts(value) {
        this._timeouts.internalValue = value;
    }
    resetTimeouts() {
        this._timeouts.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get timeoutsInput() {
        return this._timeouts.internalValue;
    }
    // warm_pool - computed: false, optional: true, required: false
    _warmPool = new AutoscalingGroupWarmPoolOutputReference(this, "warm_pool", true);
    get warmPool() {
        return this._warmPool;
    }
    putWarmPool(value) {
        this._warmPool.internalValue = value;
    }
    resetWarmPool() {
        this._warmPool.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get warmPoolInput() {
        return this._warmPool.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            availability_zones: cdktf.listMapper(cdktf.stringToTerraform)(this._availabilityZones),
            capacity_rebalance: cdktf.booleanToTerraform(this._capacityRebalance),
            default_cooldown: cdktf.numberToTerraform(this._defaultCooldown),
            desired_capacity: cdktf.numberToTerraform(this._desiredCapacity),
            enabled_metrics: cdktf.listMapper(cdktf.stringToTerraform)(this._enabledMetrics),
            force_delete: cdktf.booleanToTerraform(this._forceDelete),
            force_delete_warm_pool: cdktf.booleanToTerraform(this._forceDeleteWarmPool),
            health_check_grace_period: cdktf.numberToTerraform(this._healthCheckGracePeriod),
            health_check_type: cdktf.stringToTerraform(this._healthCheckType),
            launch_configuration: cdktf.stringToTerraform(this._launchConfiguration),
            load_balancers: cdktf.listMapper(cdktf.stringToTerraform)(this._loadBalancers),
            max_instance_lifetime: cdktf.numberToTerraform(this._maxInstanceLifetime),
            max_size: cdktf.numberToTerraform(this._maxSize),
            metrics_granularity: cdktf.stringToTerraform(this._metricsGranularity),
            min_elb_capacity: cdktf.numberToTerraform(this._minElbCapacity),
            min_size: cdktf.numberToTerraform(this._minSize),
            name: cdktf.stringToTerraform(this._name),
            name_prefix: cdktf.stringToTerraform(this._namePrefix),
            placement_group: cdktf.stringToTerraform(this._placementGroup),
            protect_from_scale_in: cdktf.booleanToTerraform(this._protectFromScaleIn),
            service_linked_role_arn: cdktf.stringToTerraform(this._serviceLinkedRoleArn),
            suspended_processes: cdktf.listMapper(cdktf.stringToTerraform)(this._suspendedProcesses),
            tags: cdktf.listMapper(cdktf.hashMapper(cdktf.stringToTerraform))(this._tags),
            target_group_arns: cdktf.listMapper(cdktf.stringToTerraform)(this._targetGroupArns),
            termination_policies: cdktf.listMapper(cdktf.stringToTerraform)(this._terminationPolicies),
            vpc_zone_identifier: cdktf.listMapper(cdktf.stringToTerraform)(this._vpcZoneIdentifier),
            wait_for_capacity_timeout: cdktf.stringToTerraform(this._waitForCapacityTimeout),
            wait_for_elb_capacity: cdktf.numberToTerraform(this._waitForElbCapacity),
            initial_lifecycle_hook: cdktf.listMapper(autoscalingGroupInitialLifecycleHookToTerraform)(this._initialLifecycleHook),
            instance_refresh: autoscalingGroupInstanceRefreshToTerraform(this._instanceRefresh.internalValue),
            launch_template: autoscalingGroupLaunchTemplateToTerraform(this._launchTemplate.internalValue),
            mixed_instances_policy: autoscalingGroupMixedInstancesPolicyToTerraform(this._mixedInstancesPolicy.internalValue),
            tag: cdktf.listMapper(autoscalingGroupTagToTerraform)(this._tag),
            timeouts: autoscalingGroupTimeoutsToTerraform(this._timeouts.internalValue),
            warm_pool: autoscalingGroupWarmPoolToTerraform(this._warmPool.internalValue),
        };
    }
}
//# sourceMappingURL=autoscaling-group.js.map