// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function ecsServiceCapacityProviderStrategyToTerraform(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 {
        base: cdktf.numberToTerraform(struct.base),
        capacity_provider: cdktf.stringToTerraform(struct.capacityProvider),
        weight: cdktf.numberToTerraform(struct.weight),
    };
}
export function ecsServiceDeploymentCircuitBreakerToTerraform(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 {
        enable: cdktf.booleanToTerraform(struct.enable),
        rollback: cdktf.booleanToTerraform(struct.rollback),
    };
}
export class EcsServiceDeploymentCircuitBreakerOutputReference 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._enable !== undefined) {
            hasAnyValues = true;
            internalValueResult.enable = this._enable;
        }
        if (this._rollback !== undefined) {
            hasAnyValues = true;
            internalValueResult.rollback = this._rollback;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._enable = undefined;
            this._rollback = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._enable = value.enable;
            this._rollback = value.rollback;
        }
    }
    // enable - computed: false, optional: false, required: true
    _enable;
    get enable() {
        return this.getBooleanAttribute('enable');
    }
    set enable(value) {
        this._enable = value;
    }
    // Temporarily expose input value. Use with caution.
    get enableInput() {
        return this._enable;
    }
    // rollback - computed: false, optional: false, required: true
    _rollback;
    get rollback() {
        return this.getBooleanAttribute('rollback');
    }
    set rollback(value) {
        this._rollback = value;
    }
    // Temporarily expose input value. Use with caution.
    get rollbackInput() {
        return this._rollback;
    }
}
export function ecsServiceDeploymentControllerToTerraform(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 {
        type: cdktf.stringToTerraform(struct.type),
    };
}
export class EcsServiceDeploymentControllerOutputReference 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._type !== undefined) {
            hasAnyValues = true;
            internalValueResult.type = this._type;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._type = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._type = value.type;
        }
    }
    // type - computed: false, optional: true, required: false
    _type;
    get type() {
        return this.getStringAttribute('type');
    }
    set type(value) {
        this._type = value;
    }
    resetType() {
        this._type = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get typeInput() {
        return this._type;
    }
}
export function ecsServiceLoadBalancerToTerraform(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 {
        container_name: cdktf.stringToTerraform(struct.containerName),
        container_port: cdktf.numberToTerraform(struct.containerPort),
        elb_name: cdktf.stringToTerraform(struct.elbName),
        target_group_arn: cdktf.stringToTerraform(struct.targetGroupArn),
    };
}
export function ecsServiceNetworkConfigurationToTerraform(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 {
        assign_public_ip: cdktf.booleanToTerraform(struct.assignPublicIp),
        security_groups: cdktf.listMapper(cdktf.stringToTerraform)(struct.securityGroups),
        subnets: cdktf.listMapper(cdktf.stringToTerraform)(struct.subnets),
    };
}
export class EcsServiceNetworkConfigurationOutputReference 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._assignPublicIp !== undefined) {
            hasAnyValues = true;
            internalValueResult.assignPublicIp = this._assignPublicIp;
        }
        if (this._securityGroups !== undefined) {
            hasAnyValues = true;
            internalValueResult.securityGroups = this._securityGroups;
        }
        if (this._subnets !== undefined) {
            hasAnyValues = true;
            internalValueResult.subnets = this._subnets;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._assignPublicIp = undefined;
            this._securityGroups = undefined;
            this._subnets = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._assignPublicIp = value.assignPublicIp;
            this._securityGroups = value.securityGroups;
            this._subnets = value.subnets;
        }
    }
    // assign_public_ip - computed: false, optional: true, required: false
    _assignPublicIp;
    get assignPublicIp() {
        return this.getBooleanAttribute('assign_public_ip');
    }
    set assignPublicIp(value) {
        this._assignPublicIp = value;
    }
    resetAssignPublicIp() {
        this._assignPublicIp = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get assignPublicIpInput() {
        return this._assignPublicIp;
    }
    // security_groups - computed: false, optional: true, required: false
    _securityGroups;
    get securityGroups() {
        return cdktf.Fn.tolist(this.getListAttribute('security_groups'));
    }
    set securityGroups(value) {
        this._securityGroups = value;
    }
    resetSecurityGroups() {
        this._securityGroups = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get securityGroupsInput() {
        return this._securityGroups;
    }
    // subnets - computed: false, optional: false, required: true
    _subnets;
    get subnets() {
        return cdktf.Fn.tolist(this.getListAttribute('subnets'));
    }
    set subnets(value) {
        this._subnets = value;
    }
    // Temporarily expose input value. Use with caution.
    get subnetsInput() {
        return this._subnets;
    }
}
export function ecsServiceOrderedPlacementStrategyToTerraform(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 {
        field: cdktf.stringToTerraform(struct.field),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function ecsServicePlacementConstraintsToTerraform(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 {
        expression: cdktf.stringToTerraform(struct.expression),
        type: cdktf.stringToTerraform(struct.type),
    };
}
export function ecsServiceServiceRegistriesToTerraform(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 {
        container_name: cdktf.stringToTerraform(struct.containerName),
        container_port: cdktf.numberToTerraform(struct.containerPort),
        port: cdktf.numberToTerraform(struct.port),
        registry_arn: cdktf.stringToTerraform(struct.registryArn),
    };
}
export class EcsServiceServiceRegistriesOutputReference 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._containerName !== undefined) {
            hasAnyValues = true;
            internalValueResult.containerName = this._containerName;
        }
        if (this._containerPort !== undefined) {
            hasAnyValues = true;
            internalValueResult.containerPort = this._containerPort;
        }
        if (this._port !== undefined) {
            hasAnyValues = true;
            internalValueResult.port = this._port;
        }
        if (this._registryArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.registryArn = this._registryArn;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._containerName = undefined;
            this._containerPort = undefined;
            this._port = undefined;
            this._registryArn = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._containerName = value.containerName;
            this._containerPort = value.containerPort;
            this._port = value.port;
            this._registryArn = value.registryArn;
        }
    }
    // container_name - computed: false, optional: true, required: false
    _containerName;
    get containerName() {
        return this.getStringAttribute('container_name');
    }
    set containerName(value) {
        this._containerName = value;
    }
    resetContainerName() {
        this._containerName = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get containerNameInput() {
        return this._containerName;
    }
    // container_port - computed: false, optional: true, required: false
    _containerPort;
    get containerPort() {
        return this.getNumberAttribute('container_port');
    }
    set containerPort(value) {
        this._containerPort = value;
    }
    resetContainerPort() {
        this._containerPort = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get containerPortInput() {
        return this._containerPort;
    }
    // port - computed: false, optional: true, required: false
    _port;
    get port() {
        return this.getNumberAttribute('port');
    }
    set port(value) {
        this._port = value;
    }
    resetPort() {
        this._port = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get portInput() {
        return this._port;
    }
    // registry_arn - computed: false, optional: false, required: true
    _registryArn;
    get registryArn() {
        return this.getStringAttribute('registry_arn');
    }
    set registryArn(value) {
        this._registryArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get registryArnInput() {
        return this._registryArn;
    }
}
export function ecsServiceTimeoutsToTerraform(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 EcsServiceTimeoutsOutputReference 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;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/ecs_service aws_ecs_service}
*/
export class EcsService extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_ecs_service";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/ecs_service aws_ecs_service} 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 EcsServiceConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_ecs_service',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._cluster = config.cluster;
        this._deploymentMaximumPercent = config.deploymentMaximumPercent;
        this._deploymentMinimumHealthyPercent = config.deploymentMinimumHealthyPercent;
        this._desiredCount = config.desiredCount;
        this._enableEcsManagedTags = config.enableEcsManagedTags;
        this._enableExecuteCommand = config.enableExecuteCommand;
        this._forceNewDeployment = config.forceNewDeployment;
        this._healthCheckGracePeriodSeconds = config.healthCheckGracePeriodSeconds;
        this._iamRole = config.iamRole;
        this._launchType = config.launchType;
        this._name = config.name;
        this._platformVersion = config.platformVersion;
        this._propagateTags = config.propagateTags;
        this._schedulingStrategy = config.schedulingStrategy;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._taskDefinition = config.taskDefinition;
        this._waitForSteadyState = config.waitForSteadyState;
        this._capacityProviderStrategy = config.capacityProviderStrategy;
        this._deploymentCircuitBreaker.internalValue = config.deploymentCircuitBreaker;
        this._deploymentController.internalValue = config.deploymentController;
        this._loadBalancer = config.loadBalancer;
        this._networkConfiguration.internalValue = config.networkConfiguration;
        this._orderedPlacementStrategy = config.orderedPlacementStrategy;
        this._placementConstraints = config.placementConstraints;
        this._serviceRegistries.internalValue = config.serviceRegistries;
        this._timeouts.internalValue = config.timeouts;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // cluster - computed: true, optional: true, required: false
    _cluster;
    get cluster() {
        return this.getStringAttribute('cluster');
    }
    set cluster(value) {
        this._cluster = value;
    }
    resetCluster() {
        this._cluster = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clusterInput() {
        return this._cluster;
    }
    // deployment_maximum_percent - computed: false, optional: true, required: false
    _deploymentMaximumPercent;
    get deploymentMaximumPercent() {
        return this.getNumberAttribute('deployment_maximum_percent');
    }
    set deploymentMaximumPercent(value) {
        this._deploymentMaximumPercent = value;
    }
    resetDeploymentMaximumPercent() {
        this._deploymentMaximumPercent = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deploymentMaximumPercentInput() {
        return this._deploymentMaximumPercent;
    }
    // deployment_minimum_healthy_percent - computed: false, optional: true, required: false
    _deploymentMinimumHealthyPercent;
    get deploymentMinimumHealthyPercent() {
        return this.getNumberAttribute('deployment_minimum_healthy_percent');
    }
    set deploymentMinimumHealthyPercent(value) {
        this._deploymentMinimumHealthyPercent = value;
    }
    resetDeploymentMinimumHealthyPercent() {
        this._deploymentMinimumHealthyPercent = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deploymentMinimumHealthyPercentInput() {
        return this._deploymentMinimumHealthyPercent;
    }
    // desired_count - computed: false, optional: true, required: false
    _desiredCount;
    get desiredCount() {
        return this.getNumberAttribute('desired_count');
    }
    set desiredCount(value) {
        this._desiredCount = value;
    }
    resetDesiredCount() {
        this._desiredCount = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get desiredCountInput() {
        return this._desiredCount;
    }
    // enable_ecs_managed_tags - computed: false, optional: true, required: false
    _enableEcsManagedTags;
    get enableEcsManagedTags() {
        return this.getBooleanAttribute('enable_ecs_managed_tags');
    }
    set enableEcsManagedTags(value) {
        this._enableEcsManagedTags = value;
    }
    resetEnableEcsManagedTags() {
        this._enableEcsManagedTags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enableEcsManagedTagsInput() {
        return this._enableEcsManagedTags;
    }
    // enable_execute_command - computed: false, optional: true, required: false
    _enableExecuteCommand;
    get enableExecuteCommand() {
        return this.getBooleanAttribute('enable_execute_command');
    }
    set enableExecuteCommand(value) {
        this._enableExecuteCommand = value;
    }
    resetEnableExecuteCommand() {
        this._enableExecuteCommand = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get enableExecuteCommandInput() {
        return this._enableExecuteCommand;
    }
    // force_new_deployment - computed: false, optional: true, required: false
    _forceNewDeployment;
    get forceNewDeployment() {
        return this.getBooleanAttribute('force_new_deployment');
    }
    set forceNewDeployment(value) {
        this._forceNewDeployment = value;
    }
    resetForceNewDeployment() {
        this._forceNewDeployment = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get forceNewDeploymentInput() {
        return this._forceNewDeployment;
    }
    // health_check_grace_period_seconds - computed: false, optional: true, required: false
    _healthCheckGracePeriodSeconds;
    get healthCheckGracePeriodSeconds() {
        return this.getNumberAttribute('health_check_grace_period_seconds');
    }
    set healthCheckGracePeriodSeconds(value) {
        this._healthCheckGracePeriodSeconds = value;
    }
    resetHealthCheckGracePeriodSeconds() {
        this._healthCheckGracePeriodSeconds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get healthCheckGracePeriodSecondsInput() {
        return this._healthCheckGracePeriodSeconds;
    }
    // iam_role - computed: true, optional: true, required: false
    _iamRole;
    get iamRole() {
        return this.getStringAttribute('iam_role');
    }
    set iamRole(value) {
        this._iamRole = value;
    }
    resetIamRole() {
        this._iamRole = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iamRoleInput() {
        return this._iamRole;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // launch_type - computed: true, optional: true, required: false
    _launchType;
    get launchType() {
        return this.getStringAttribute('launch_type');
    }
    set launchType(value) {
        this._launchType = value;
    }
    resetLaunchType() {
        this._launchType = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get launchTypeInput() {
        return this._launchType;
    }
    // name - computed: false, optional: false, required: true
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // platform_version - computed: true, optional: true, required: false
    _platformVersion;
    get platformVersion() {
        return this.getStringAttribute('platform_version');
    }
    set platformVersion(value) {
        this._platformVersion = value;
    }
    resetPlatformVersion() {
        this._platformVersion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get platformVersionInput() {
        return this._platformVersion;
    }
    // propagate_tags - computed: false, optional: true, required: false
    _propagateTags;
    get propagateTags() {
        return this.getStringAttribute('propagate_tags');
    }
    set propagateTags(value) {
        this._propagateTags = value;
    }
    resetPropagateTags() {
        this._propagateTags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get propagateTagsInput() {
        return this._propagateTags;
    }
    // scheduling_strategy - computed: false, optional: true, required: false
    _schedulingStrategy;
    get schedulingStrategy() {
        return this.getStringAttribute('scheduling_strategy');
    }
    set schedulingStrategy(value) {
        this._schedulingStrategy = value;
    }
    resetSchedulingStrategy() {
        this._schedulingStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schedulingStrategyInput() {
        return this._schedulingStrategy;
    }
    // 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;
    }
    // tags_all - computed: true, optional: true, required: false
    _tagsAll;
    get tagsAll() {
        return this.getStringMapAttribute('tags_all');
    }
    set tagsAll(value) {
        this._tagsAll = value;
    }
    resetTagsAll() {
        this._tagsAll = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsAllInput() {
        return this._tagsAll;
    }
    // task_definition - computed: false, optional: true, required: false
    _taskDefinition;
    get taskDefinition() {
        return this.getStringAttribute('task_definition');
    }
    set taskDefinition(value) {
        this._taskDefinition = value;
    }
    resetTaskDefinition() {
        this._taskDefinition = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get taskDefinitionInput() {
        return this._taskDefinition;
    }
    // wait_for_steady_state - computed: false, optional: true, required: false
    _waitForSteadyState;
    get waitForSteadyState() {
        return this.getBooleanAttribute('wait_for_steady_state');
    }
    set waitForSteadyState(value) {
        this._waitForSteadyState = value;
    }
    resetWaitForSteadyState() {
        this._waitForSteadyState = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get waitForSteadyStateInput() {
        return this._waitForSteadyState;
    }
    // capacity_provider_strategy - computed: false, optional: true, required: false
    _capacityProviderStrategy;
    get capacityProviderStrategy() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('capacity_provider_strategy')));
    }
    set capacityProviderStrategy(value) {
        this._capacityProviderStrategy = value;
    }
    resetCapacityProviderStrategy() {
        this._capacityProviderStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get capacityProviderStrategyInput() {
        return this._capacityProviderStrategy;
    }
    // deployment_circuit_breaker - computed: false, optional: true, required: false
    _deploymentCircuitBreaker = new EcsServiceDeploymentCircuitBreakerOutputReference(this, "deployment_circuit_breaker", true);
    get deploymentCircuitBreaker() {
        return this._deploymentCircuitBreaker;
    }
    putDeploymentCircuitBreaker(value) {
        this._deploymentCircuitBreaker.internalValue = value;
    }
    resetDeploymentCircuitBreaker() {
        this._deploymentCircuitBreaker.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deploymentCircuitBreakerInput() {
        return this._deploymentCircuitBreaker.internalValue;
    }
    // deployment_controller - computed: false, optional: true, required: false
    _deploymentController = new EcsServiceDeploymentControllerOutputReference(this, "deployment_controller", true);
    get deploymentController() {
        return this._deploymentController;
    }
    putDeploymentController(value) {
        this._deploymentController.internalValue = value;
    }
    resetDeploymentController() {
        this._deploymentController.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get deploymentControllerInput() {
        return this._deploymentController.internalValue;
    }
    // load_balancer - computed: false, optional: true, required: false
    _loadBalancer;
    get loadBalancer() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('load_balancer')));
    }
    set loadBalancer(value) {
        this._loadBalancer = value;
    }
    resetLoadBalancer() {
        this._loadBalancer = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get loadBalancerInput() {
        return this._loadBalancer;
    }
    // network_configuration - computed: false, optional: true, required: false
    _networkConfiguration = new EcsServiceNetworkConfigurationOutputReference(this, "network_configuration", true);
    get networkConfiguration() {
        return this._networkConfiguration;
    }
    putNetworkConfiguration(value) {
        this._networkConfiguration.internalValue = value;
    }
    resetNetworkConfiguration() {
        this._networkConfiguration.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get networkConfigurationInput() {
        return this._networkConfiguration.internalValue;
    }
    // ordered_placement_strategy - computed: false, optional: true, required: false
    _orderedPlacementStrategy;
    get orderedPlacementStrategy() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('ordered_placement_strategy');
    }
    set orderedPlacementStrategy(value) {
        this._orderedPlacementStrategy = value;
    }
    resetOrderedPlacementStrategy() {
        this._orderedPlacementStrategy = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get orderedPlacementStrategyInput() {
        return this._orderedPlacementStrategy;
    }
    // placement_constraints - computed: false, optional: true, required: false
    _placementConstraints;
    get placementConstraints() {
        // Getting the computed value is not yet implemented
        return cdktf.Token.asAny(cdktf.Fn.tolist(this.interpolationForAttribute('placement_constraints')));
    }
    set placementConstraints(value) {
        this._placementConstraints = value;
    }
    resetPlacementConstraints() {
        this._placementConstraints = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get placementConstraintsInput() {
        return this._placementConstraints;
    }
    // service_registries - computed: false, optional: true, required: false
    _serviceRegistries = new EcsServiceServiceRegistriesOutputReference(this, "service_registries", true);
    get serviceRegistries() {
        return this._serviceRegistries;
    }
    putServiceRegistries(value) {
        this._serviceRegistries.internalValue = value;
    }
    resetServiceRegistries() {
        this._serviceRegistries.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get serviceRegistriesInput() {
        return this._serviceRegistries.internalValue;
    }
    // timeouts - computed: false, optional: true, required: false
    _timeouts = new EcsServiceTimeoutsOutputReference(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;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            cluster: cdktf.stringToTerraform(this._cluster),
            deployment_maximum_percent: cdktf.numberToTerraform(this._deploymentMaximumPercent),
            deployment_minimum_healthy_percent: cdktf.numberToTerraform(this._deploymentMinimumHealthyPercent),
            desired_count: cdktf.numberToTerraform(this._desiredCount),
            enable_ecs_managed_tags: cdktf.booleanToTerraform(this._enableEcsManagedTags),
            enable_execute_command: cdktf.booleanToTerraform(this._enableExecuteCommand),
            force_new_deployment: cdktf.booleanToTerraform(this._forceNewDeployment),
            health_check_grace_period_seconds: cdktf.numberToTerraform(this._healthCheckGracePeriodSeconds),
            iam_role: cdktf.stringToTerraform(this._iamRole),
            launch_type: cdktf.stringToTerraform(this._launchType),
            name: cdktf.stringToTerraform(this._name),
            platform_version: cdktf.stringToTerraform(this._platformVersion),
            propagate_tags: cdktf.stringToTerraform(this._propagateTags),
            scheduling_strategy: cdktf.stringToTerraform(this._schedulingStrategy),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            task_definition: cdktf.stringToTerraform(this._taskDefinition),
            wait_for_steady_state: cdktf.booleanToTerraform(this._waitForSteadyState),
            capacity_provider_strategy: cdktf.listMapper(ecsServiceCapacityProviderStrategyToTerraform)(this._capacityProviderStrategy),
            deployment_circuit_breaker: ecsServiceDeploymentCircuitBreakerToTerraform(this._deploymentCircuitBreaker.internalValue),
            deployment_controller: ecsServiceDeploymentControllerToTerraform(this._deploymentController.internalValue),
            load_balancer: cdktf.listMapper(ecsServiceLoadBalancerToTerraform)(this._loadBalancer),
            network_configuration: ecsServiceNetworkConfigurationToTerraform(this._networkConfiguration.internalValue),
            ordered_placement_strategy: cdktf.listMapper(ecsServiceOrderedPlacementStrategyToTerraform)(this._orderedPlacementStrategy),
            placement_constraints: cdktf.listMapper(ecsServicePlacementConstraintsToTerraform)(this._placementConstraints),
            service_registries: ecsServiceServiceRegistriesToTerraform(this._serviceRegistries.internalValue),
            timeouts: ecsServiceTimeoutsToTerraform(this._timeouts.internalValue),
        };
    }
}
//# sourceMappingURL=ecs-service.js.map