// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.ecs.inputs;

import com.pulumi.aws.ecs.inputs.TaskDefinitionEphemeralStorageArgs;
import com.pulumi.aws.ecs.inputs.TaskDefinitionInferenceAcceleratorArgs;
import com.pulumi.aws.ecs.inputs.TaskDefinitionPlacementConstraintArgs;
import com.pulumi.aws.ecs.inputs.TaskDefinitionProxyConfigurationArgs;
import com.pulumi.aws.ecs.inputs.TaskDefinitionRuntimePlatformArgs;
import com.pulumi.aws.ecs.inputs.TaskDefinitionVolumeArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class TaskDefinitionState extends com.pulumi.resources.ResourceArgs {

    public static final TaskDefinitionState Empty = new TaskDefinitionState();

    /**
     * Full ARN of the Task Definition (including both `family` and `revision`).
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return Full ARN of the Task Definition (including both `family` and `revision`).
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * ARN of the Task Definition with the trailing `revision` removed. This may be useful for situations where the latest task definition is always desired. If a revision isn&#39;t specified, the latest ACTIVE revision is used. See the [AWS documentation](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StartTask.html#ECS-StartTask-request-taskDefinition) for details.
     * 
     */
    @Import(name="arnWithoutRevision")
    private @Nullable Output<String> arnWithoutRevision;

    /**
     * @return ARN of the Task Definition with the trailing `revision` removed. This may be useful for situations where the latest task definition is always desired. If a revision isn&#39;t specified, the latest ACTIVE revision is used. See the [AWS documentation](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StartTask.html#ECS-StartTask-request-taskDefinition) for details.
     * 
     */
    public Optional<Output<String>> arnWithoutRevision() {
        return Optional.ofNullable(this.arnWithoutRevision);
    }

    /**
     * A list of valid [container definitions](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html) provided as a single valid JSON document. Please note that you should only provide values that are part of the container definition document. For a detailed description of what parameters are available, see the [Task Definition Parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) section from the official [Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide).
     * 
     */
    @Import(name="containerDefinitions")
    private @Nullable Output<String> containerDefinitions;

    /**
     * @return A list of valid [container definitions](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html) provided as a single valid JSON document. Please note that you should only provide values that are part of the container definition document. For a detailed description of what parameters are available, see the [Task Definition Parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) section from the official [Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide).
     * 
     */
    public Optional<Output<String>> containerDefinitions() {
        return Optional.ofNullable(this.containerDefinitions);
    }

    /**
     * Number of cpu units used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
     * 
     */
    @Import(name="cpu")
    private @Nullable Output<String> cpu;

    /**
     * @return Number of cpu units used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
     * 
     */
    public Optional<Output<String>> cpu() {
        return Optional.ofNullable(this.cpu);
    }

    /**
     * The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate. See Ephemeral Storage.
     * 
     */
    @Import(name="ephemeralStorage")
    private @Nullable Output<TaskDefinitionEphemeralStorageArgs> ephemeralStorage;

    /**
     * @return The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate. See Ephemeral Storage.
     * 
     */
    public Optional<Output<TaskDefinitionEphemeralStorageArgs>> ephemeralStorage() {
        return Optional.ofNullable(this.ephemeralStorage);
    }

    /**
     * ARN of the task execution role that the Amazon ECS container agent and the Docker daemon can assume.
     * 
     */
    @Import(name="executionRoleArn")
    private @Nullable Output<String> executionRoleArn;

    /**
     * @return ARN of the task execution role that the Amazon ECS container agent and the Docker daemon can assume.
     * 
     */
    public Optional<Output<String>> executionRoleArn() {
        return Optional.ofNullable(this.executionRoleArn);
    }

    /**
     * A unique name for your task definition.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="family")
    private @Nullable Output<String> family;

    /**
     * @return A unique name for your task definition.
     * 
     * The following arguments are optional:
     * 
     */
    public Optional<Output<String>> family() {
        return Optional.ofNullable(this.family);
    }

    /**
     * Configuration block(s) with Inference Accelerators settings. Detailed below.
     * 
     */
    @Import(name="inferenceAccelerators")
    private @Nullable Output<List<TaskDefinitionInferenceAcceleratorArgs>> inferenceAccelerators;

    /**
     * @return Configuration block(s) with Inference Accelerators settings. Detailed below.
     * 
     */
    public Optional<Output<List<TaskDefinitionInferenceAcceleratorArgs>>> inferenceAccelerators() {
        return Optional.ofNullable(this.inferenceAccelerators);
    }

    /**
     * IPC resource namespace to be used for the containers in the task The valid values are `host`, `task`, and `none`.
     * 
     */
    @Import(name="ipcMode")
    private @Nullable Output<String> ipcMode;

    /**
     * @return IPC resource namespace to be used for the containers in the task The valid values are `host`, `task`, and `none`.
     * 
     */
    public Optional<Output<String>> ipcMode() {
        return Optional.ofNullable(this.ipcMode);
    }

    /**
     * Amount (in MiB) of memory used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
     * 
     */
    @Import(name="memory")
    private @Nullable Output<String> memory;

    /**
     * @return Amount (in MiB) of memory used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
     * 
     */
    public Optional<Output<String>> memory() {
        return Optional.ofNullable(this.memory);
    }

    /**
     * Docker networking mode to use for the containers in the task. Valid values are `none`, `bridge`, `awsvpc`, and `host`.
     * 
     */
    @Import(name="networkMode")
    private @Nullable Output<String> networkMode;

    /**
     * @return Docker networking mode to use for the containers in the task. Valid values are `none`, `bridge`, `awsvpc`, and `host`.
     * 
     */
    public Optional<Output<String>> networkMode() {
        return Optional.ofNullable(this.networkMode);
    }

    /**
     * Process namespace to use for the containers in the task. The valid values are `host` and `task`.
     * 
     */
    @Import(name="pidMode")
    private @Nullable Output<String> pidMode;

    /**
     * @return Process namespace to use for the containers in the task. The valid values are `host` and `task`.
     * 
     */
    public Optional<Output<String>> pidMode() {
        return Optional.ofNullable(this.pidMode);
    }

    /**
     * Configuration block for rules that are taken into consideration during task placement. Maximum number of `placement_constraints` is `10`. Detailed below.
     * 
     */
    @Import(name="placementConstraints")
    private @Nullable Output<List<TaskDefinitionPlacementConstraintArgs>> placementConstraints;

    /**
     * @return Configuration block for rules that are taken into consideration during task placement. Maximum number of `placement_constraints` is `10`. Detailed below.
     * 
     */
    public Optional<Output<List<TaskDefinitionPlacementConstraintArgs>>> placementConstraints() {
        return Optional.ofNullable(this.placementConstraints);
    }

    /**
     * Configuration block for the App Mesh proxy. Detailed below.
     * 
     */
    @Import(name="proxyConfiguration")
    private @Nullable Output<TaskDefinitionProxyConfigurationArgs> proxyConfiguration;

    /**
     * @return Configuration block for the App Mesh proxy. Detailed below.
     * 
     */
    public Optional<Output<TaskDefinitionProxyConfigurationArgs>> proxyConfiguration() {
        return Optional.ofNullable(this.proxyConfiguration);
    }

    /**
     * Set of launch types required by the task. The valid values are `EC2` and `FARGATE`.
     * 
     */
    @Import(name="requiresCompatibilities")
    private @Nullable Output<List<String>> requiresCompatibilities;

    /**
     * @return Set of launch types required by the task. The valid values are `EC2` and `FARGATE`.
     * 
     */
    public Optional<Output<List<String>>> requiresCompatibilities() {
        return Optional.ofNullable(this.requiresCompatibilities);
    }

    /**
     * Revision of the task in a particular family.
     * 
     */
    @Import(name="revision")
    private @Nullable Output<Integer> revision;

    /**
     * @return Revision of the task in a particular family.
     * 
     */
    public Optional<Output<Integer>> revision() {
        return Optional.ofNullable(this.revision);
    }

    /**
     * Configuration block for runtime_platform that containers in your task may use.
     * 
     */
    @Import(name="runtimePlatform")
    private @Nullable Output<TaskDefinitionRuntimePlatformArgs> runtimePlatform;

    /**
     * @return Configuration block for runtime_platform that containers in your task may use.
     * 
     */
    public Optional<Output<TaskDefinitionRuntimePlatformArgs>> runtimePlatform() {
        return Optional.ofNullable(this.runtimePlatform);
    }

    /**
     * Whether to retain the old revision when the resource is destroyed or replacement is necessary. Default is `false`.
     * 
     */
    @Import(name="skipDestroy")
    private @Nullable Output<Boolean> skipDestroy;

    /**
     * @return Whether to retain the old revision when the resource is destroyed or replacement is necessary. Default is `false`.
     * 
     */
    public Optional<Output<Boolean>> skipDestroy() {
        return Optional.ofNullable(this.skipDestroy);
    }

    /**
     * Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    @Import(name="tagsAll")
    private @Nullable Output<Map<String,String>> tagsAll;

    /**
     * @return Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    public Optional<Output<Map<String,String>>> tagsAll() {
        return Optional.ofNullable(this.tagsAll);
    }

    /**
     * ARN of IAM role that allows your Amazon ECS container task to make calls to other AWS services.
     * 
     */
    @Import(name="taskRoleArn")
    private @Nullable Output<String> taskRoleArn;

    /**
     * @return ARN of IAM role that allows your Amazon ECS container task to make calls to other AWS services.
     * 
     */
    public Optional<Output<String>> taskRoleArn() {
        return Optional.ofNullable(this.taskRoleArn);
    }

    /**
     * Configuration block for volumes that containers in your task may use. Detailed below.
     * 
     */
    @Import(name="volumes")
    private @Nullable Output<List<TaskDefinitionVolumeArgs>> volumes;

    /**
     * @return Configuration block for volumes that containers in your task may use. Detailed below.
     * 
     */
    public Optional<Output<List<TaskDefinitionVolumeArgs>>> volumes() {
        return Optional.ofNullable(this.volumes);
    }

    private TaskDefinitionState() {}

    private TaskDefinitionState(TaskDefinitionState $) {
        this.arn = $.arn;
        this.arnWithoutRevision = $.arnWithoutRevision;
        this.containerDefinitions = $.containerDefinitions;
        this.cpu = $.cpu;
        this.ephemeralStorage = $.ephemeralStorage;
        this.executionRoleArn = $.executionRoleArn;
        this.family = $.family;
        this.inferenceAccelerators = $.inferenceAccelerators;
        this.ipcMode = $.ipcMode;
        this.memory = $.memory;
        this.networkMode = $.networkMode;
        this.pidMode = $.pidMode;
        this.placementConstraints = $.placementConstraints;
        this.proxyConfiguration = $.proxyConfiguration;
        this.requiresCompatibilities = $.requiresCompatibilities;
        this.revision = $.revision;
        this.runtimePlatform = $.runtimePlatform;
        this.skipDestroy = $.skipDestroy;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.taskRoleArn = $.taskRoleArn;
        this.volumes = $.volumes;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(TaskDefinitionState defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private TaskDefinitionState $;

        public Builder() {
            $ = new TaskDefinitionState();
        }

        public Builder(TaskDefinitionState defaults) {
            $ = new TaskDefinitionState(Objects.requireNonNull(defaults));
        }

        /**
         * @param arn Full ARN of the Task Definition (including both `family` and `revision`).
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn Full ARN of the Task Definition (including both `family` and `revision`).
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param arnWithoutRevision ARN of the Task Definition with the trailing `revision` removed. This may be useful for situations where the latest task definition is always desired. If a revision isn&#39;t specified, the latest ACTIVE revision is used. See the [AWS documentation](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StartTask.html#ECS-StartTask-request-taskDefinition) for details.
         * 
         * @return builder
         * 
         */
        public Builder arnWithoutRevision(@Nullable Output<String> arnWithoutRevision) {
            $.arnWithoutRevision = arnWithoutRevision;
            return this;
        }

        /**
         * @param arnWithoutRevision ARN of the Task Definition with the trailing `revision` removed. This may be useful for situations where the latest task definition is always desired. If a revision isn&#39;t specified, the latest ACTIVE revision is used. See the [AWS documentation](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_StartTask.html#ECS-StartTask-request-taskDefinition) for details.
         * 
         * @return builder
         * 
         */
        public Builder arnWithoutRevision(String arnWithoutRevision) {
            return arnWithoutRevision(Output.of(arnWithoutRevision));
        }

        /**
         * @param containerDefinitions A list of valid [container definitions](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html) provided as a single valid JSON document. Please note that you should only provide values that are part of the container definition document. For a detailed description of what parameters are available, see the [Task Definition Parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) section from the official [Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide).
         * 
         * @return builder
         * 
         */
        public Builder containerDefinitions(@Nullable Output<String> containerDefinitions) {
            $.containerDefinitions = containerDefinitions;
            return this;
        }

        /**
         * @param containerDefinitions A list of valid [container definitions](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html) provided as a single valid JSON document. Please note that you should only provide values that are part of the container definition document. For a detailed description of what parameters are available, see the [Task Definition Parameters](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) section from the official [Developer Guide](https://docs.aws.amazon.com/AmazonECS/latest/developerguide).
         * 
         * @return builder
         * 
         */
        public Builder containerDefinitions(String containerDefinitions) {
            return containerDefinitions(Output.of(containerDefinitions));
        }

        /**
         * @param cpu Number of cpu units used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
         * 
         * @return builder
         * 
         */
        public Builder cpu(@Nullable Output<String> cpu) {
            $.cpu = cpu;
            return this;
        }

        /**
         * @param cpu Number of cpu units used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
         * 
         * @return builder
         * 
         */
        public Builder cpu(String cpu) {
            return cpu(Output.of(cpu));
        }

        /**
         * @param ephemeralStorage The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate. See Ephemeral Storage.
         * 
         * @return builder
         * 
         */
        public Builder ephemeralStorage(@Nullable Output<TaskDefinitionEphemeralStorageArgs> ephemeralStorage) {
            $.ephemeralStorage = ephemeralStorage;
            return this;
        }

        /**
         * @param ephemeralStorage The amount of ephemeral storage to allocate for the task. This parameter is used to expand the total amount of ephemeral storage available, beyond the default amount, for tasks hosted on AWS Fargate. See Ephemeral Storage.
         * 
         * @return builder
         * 
         */
        public Builder ephemeralStorage(TaskDefinitionEphemeralStorageArgs ephemeralStorage) {
            return ephemeralStorage(Output.of(ephemeralStorage));
        }

        /**
         * @param executionRoleArn ARN of the task execution role that the Amazon ECS container agent and the Docker daemon can assume.
         * 
         * @return builder
         * 
         */
        public Builder executionRoleArn(@Nullable Output<String> executionRoleArn) {
            $.executionRoleArn = executionRoleArn;
            return this;
        }

        /**
         * @param executionRoleArn ARN of the task execution role that the Amazon ECS container agent and the Docker daemon can assume.
         * 
         * @return builder
         * 
         */
        public Builder executionRoleArn(String executionRoleArn) {
            return executionRoleArn(Output.of(executionRoleArn));
        }

        /**
         * @param family A unique name for your task definition.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder family(@Nullable Output<String> family) {
            $.family = family;
            return this;
        }

        /**
         * @param family A unique name for your task definition.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder family(String family) {
            return family(Output.of(family));
        }

        /**
         * @param inferenceAccelerators Configuration block(s) with Inference Accelerators settings. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder inferenceAccelerators(@Nullable Output<List<TaskDefinitionInferenceAcceleratorArgs>> inferenceAccelerators) {
            $.inferenceAccelerators = inferenceAccelerators;
            return this;
        }

        /**
         * @param inferenceAccelerators Configuration block(s) with Inference Accelerators settings. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder inferenceAccelerators(List<TaskDefinitionInferenceAcceleratorArgs> inferenceAccelerators) {
            return inferenceAccelerators(Output.of(inferenceAccelerators));
        }

        /**
         * @param inferenceAccelerators Configuration block(s) with Inference Accelerators settings. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder inferenceAccelerators(TaskDefinitionInferenceAcceleratorArgs... inferenceAccelerators) {
            return inferenceAccelerators(List.of(inferenceAccelerators));
        }

        /**
         * @param ipcMode IPC resource namespace to be used for the containers in the task The valid values are `host`, `task`, and `none`.
         * 
         * @return builder
         * 
         */
        public Builder ipcMode(@Nullable Output<String> ipcMode) {
            $.ipcMode = ipcMode;
            return this;
        }

        /**
         * @param ipcMode IPC resource namespace to be used for the containers in the task The valid values are `host`, `task`, and `none`.
         * 
         * @return builder
         * 
         */
        public Builder ipcMode(String ipcMode) {
            return ipcMode(Output.of(ipcMode));
        }

        /**
         * @param memory Amount (in MiB) of memory used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
         * 
         * @return builder
         * 
         */
        public Builder memory(@Nullable Output<String> memory) {
            $.memory = memory;
            return this;
        }

        /**
         * @param memory Amount (in MiB) of memory used by the task. If the `requires_compatibilities` is `FARGATE` this field is required.
         * 
         * @return builder
         * 
         */
        public Builder memory(String memory) {
            return memory(Output.of(memory));
        }

        /**
         * @param networkMode Docker networking mode to use for the containers in the task. Valid values are `none`, `bridge`, `awsvpc`, and `host`.
         * 
         * @return builder
         * 
         */
        public Builder networkMode(@Nullable Output<String> networkMode) {
            $.networkMode = networkMode;
            return this;
        }

        /**
         * @param networkMode Docker networking mode to use for the containers in the task. Valid values are `none`, `bridge`, `awsvpc`, and `host`.
         * 
         * @return builder
         * 
         */
        public Builder networkMode(String networkMode) {
            return networkMode(Output.of(networkMode));
        }

        /**
         * @param pidMode Process namespace to use for the containers in the task. The valid values are `host` and `task`.
         * 
         * @return builder
         * 
         */
        public Builder pidMode(@Nullable Output<String> pidMode) {
            $.pidMode = pidMode;
            return this;
        }

        /**
         * @param pidMode Process namespace to use for the containers in the task. The valid values are `host` and `task`.
         * 
         * @return builder
         * 
         */
        public Builder pidMode(String pidMode) {
            return pidMode(Output.of(pidMode));
        }

        /**
         * @param placementConstraints Configuration block for rules that are taken into consideration during task placement. Maximum number of `placement_constraints` is `10`. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder placementConstraints(@Nullable Output<List<TaskDefinitionPlacementConstraintArgs>> placementConstraints) {
            $.placementConstraints = placementConstraints;
            return this;
        }

        /**
         * @param placementConstraints Configuration block for rules that are taken into consideration during task placement. Maximum number of `placement_constraints` is `10`. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder placementConstraints(List<TaskDefinitionPlacementConstraintArgs> placementConstraints) {
            return placementConstraints(Output.of(placementConstraints));
        }

        /**
         * @param placementConstraints Configuration block for rules that are taken into consideration during task placement. Maximum number of `placement_constraints` is `10`. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder placementConstraints(TaskDefinitionPlacementConstraintArgs... placementConstraints) {
            return placementConstraints(List.of(placementConstraints));
        }

        /**
         * @param proxyConfiguration Configuration block for the App Mesh proxy. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder proxyConfiguration(@Nullable Output<TaskDefinitionProxyConfigurationArgs> proxyConfiguration) {
            $.proxyConfiguration = proxyConfiguration;
            return this;
        }

        /**
         * @param proxyConfiguration Configuration block for the App Mesh proxy. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder proxyConfiguration(TaskDefinitionProxyConfigurationArgs proxyConfiguration) {
            return proxyConfiguration(Output.of(proxyConfiguration));
        }

        /**
         * @param requiresCompatibilities Set of launch types required by the task. The valid values are `EC2` and `FARGATE`.
         * 
         * @return builder
         * 
         */
        public Builder requiresCompatibilities(@Nullable Output<List<String>> requiresCompatibilities) {
            $.requiresCompatibilities = requiresCompatibilities;
            return this;
        }

        /**
         * @param requiresCompatibilities Set of launch types required by the task. The valid values are `EC2` and `FARGATE`.
         * 
         * @return builder
         * 
         */
        public Builder requiresCompatibilities(List<String> requiresCompatibilities) {
            return requiresCompatibilities(Output.of(requiresCompatibilities));
        }

        /**
         * @param requiresCompatibilities Set of launch types required by the task. The valid values are `EC2` and `FARGATE`.
         * 
         * @return builder
         * 
         */
        public Builder requiresCompatibilities(String... requiresCompatibilities) {
            return requiresCompatibilities(List.of(requiresCompatibilities));
        }

        /**
         * @param revision Revision of the task in a particular family.
         * 
         * @return builder
         * 
         */
        public Builder revision(@Nullable Output<Integer> revision) {
            $.revision = revision;
            return this;
        }

        /**
         * @param revision Revision of the task in a particular family.
         * 
         * @return builder
         * 
         */
        public Builder revision(Integer revision) {
            return revision(Output.of(revision));
        }

        /**
         * @param runtimePlatform Configuration block for runtime_platform that containers in your task may use.
         * 
         * @return builder
         * 
         */
        public Builder runtimePlatform(@Nullable Output<TaskDefinitionRuntimePlatformArgs> runtimePlatform) {
            $.runtimePlatform = runtimePlatform;
            return this;
        }

        /**
         * @param runtimePlatform Configuration block for runtime_platform that containers in your task may use.
         * 
         * @return builder
         * 
         */
        public Builder runtimePlatform(TaskDefinitionRuntimePlatformArgs runtimePlatform) {
            return runtimePlatform(Output.of(runtimePlatform));
        }

        /**
         * @param skipDestroy Whether to retain the old revision when the resource is destroyed or replacement is necessary. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder skipDestroy(@Nullable Output<Boolean> skipDestroy) {
            $.skipDestroy = skipDestroy;
            return this;
        }

        /**
         * @param skipDestroy Whether to retain the old revision when the resource is destroyed or replacement is necessary. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder skipDestroy(Boolean skipDestroy) {
            return skipDestroy(Output.of(skipDestroy));
        }

        /**
         * @param tags Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags Key-value map of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(@Nullable Output<Map<String,String>> tagsAll) {
            $.tagsAll = tagsAll;
            return this;
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(Map<String,String> tagsAll) {
            return tagsAll(Output.of(tagsAll));
        }

        /**
         * @param taskRoleArn ARN of IAM role that allows your Amazon ECS container task to make calls to other AWS services.
         * 
         * @return builder
         * 
         */
        public Builder taskRoleArn(@Nullable Output<String> taskRoleArn) {
            $.taskRoleArn = taskRoleArn;
            return this;
        }

        /**
         * @param taskRoleArn ARN of IAM role that allows your Amazon ECS container task to make calls to other AWS services.
         * 
         * @return builder
         * 
         */
        public Builder taskRoleArn(String taskRoleArn) {
            return taskRoleArn(Output.of(taskRoleArn));
        }

        /**
         * @param volumes Configuration block for volumes that containers in your task may use. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder volumes(@Nullable Output<List<TaskDefinitionVolumeArgs>> volumes) {
            $.volumes = volumes;
            return this;
        }

        /**
         * @param volumes Configuration block for volumes that containers in your task may use. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder volumes(List<TaskDefinitionVolumeArgs> volumes) {
            return volumes(Output.of(volumes));
        }

        /**
         * @param volumes Configuration block for volumes that containers in your task may use. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder volumes(TaskDefinitionVolumeArgs... volumes) {
            return volumes(List.of(volumes));
        }

        public TaskDefinitionState build() {
            return $;
        }
    }

}
