// *** 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.GetTaskExecutionCapacityProviderStrategy;
import com.pulumi.aws.ecs.inputs.GetTaskExecutionNetworkConfiguration;
import com.pulumi.aws.ecs.inputs.GetTaskExecutionOverrides;
import com.pulumi.aws.ecs.inputs.GetTaskExecutionPlacementConstraint;
import com.pulumi.aws.ecs.inputs.GetTaskExecutionPlacementStrategy;
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 GetTaskExecutionPlainArgs extends com.pulumi.resources.InvokeArgs {

    public static final GetTaskExecutionPlainArgs Empty = new GetTaskExecutionPlainArgs();

    /**
     * Set of capacity provider strategies to use for the cluster. See below.
     * 
     */
    @Import(name="capacityProviderStrategies")
    private @Nullable List<GetTaskExecutionCapacityProviderStrategy> capacityProviderStrategies;

    /**
     * @return Set of capacity provider strategies to use for the cluster. See below.
     * 
     */
    public Optional<List<GetTaskExecutionCapacityProviderStrategy>> capacityProviderStrategies() {
        return Optional.ofNullable(this.capacityProviderStrategies);
    }

    /**
     * Short name or full Amazon Resource Name (ARN) of the cluster to run the task on.
     * 
     */
    @Import(name="cluster", required=true)
    private String cluster;

    /**
     * @return Short name or full Amazon Resource Name (ARN) of the cluster to run the task on.
     * 
     */
    public String cluster() {
        return this.cluster;
    }

    /**
     * Number of instantiations of the specified task to place on your cluster. You can specify up to 10 tasks for each call.
     * 
     */
    @Import(name="desiredCount")
    private @Nullable Integer desiredCount;

    /**
     * @return Number of instantiations of the specified task to place on your cluster. You can specify up to 10 tasks for each call.
     * 
     */
    public Optional<Integer> desiredCount() {
        return Optional.ofNullable(this.desiredCount);
    }

    /**
     * Specifies whether to enable Amazon ECS managed tags for the tasks within the service.
     * 
     */
    @Import(name="enableEcsManagedTags")
    private @Nullable Boolean enableEcsManagedTags;

    /**
     * @return Specifies whether to enable Amazon ECS managed tags for the tasks within the service.
     * 
     */
    public Optional<Boolean> enableEcsManagedTags() {
        return Optional.ofNullable(this.enableEcsManagedTags);
    }

    /**
     * Specifies whether to enable Amazon ECS Exec for the tasks within the service.
     * 
     */
    @Import(name="enableExecuteCommand")
    private @Nullable Boolean enableExecuteCommand;

    /**
     * @return Specifies whether to enable Amazon ECS Exec for the tasks within the service.
     * 
     */
    public Optional<Boolean> enableExecuteCommand() {
        return Optional.ofNullable(this.enableExecuteCommand);
    }

    /**
     * Name of the task group to associate with the task. The default value is the family name of the task definition.
     * 
     */
    @Import(name="group")
    private @Nullable String group;

    /**
     * @return Name of the task group to associate with the task. The default value is the family name of the task definition.
     * 
     */
    public Optional<String> group() {
        return Optional.ofNullable(this.group);
    }

    /**
     * Launch type on which to run your service. Valid values are `EC2`, `FARGATE`, and `EXTERNAL`.
     * 
     */
    @Import(name="launchType")
    private @Nullable String launchType;

    /**
     * @return Launch type on which to run your service. Valid values are `EC2`, `FARGATE`, and `EXTERNAL`.
     * 
     */
    public Optional<String> launchType() {
        return Optional.ofNullable(this.launchType);
    }

    /**
     * Network configuration for the service. This parameter is required for task definitions that use the `awsvpc` network mode to receive their own Elastic Network Interface, and it is not supported for other network modes. See below.
     * 
     */
    @Import(name="networkConfiguration")
    private @Nullable GetTaskExecutionNetworkConfiguration networkConfiguration;

    /**
     * @return Network configuration for the service. This parameter is required for task definitions that use the `awsvpc` network mode to receive their own Elastic Network Interface, and it is not supported for other network modes. See below.
     * 
     */
    public Optional<GetTaskExecutionNetworkConfiguration> networkConfiguration() {
        return Optional.ofNullable(this.networkConfiguration);
    }

    /**
     * A list of container overrides that specify the name of a container in the specified task definition and the overrides it should receive.
     * 
     */
    @Import(name="overrides")
    private @Nullable GetTaskExecutionOverrides overrides;

    /**
     * @return A list of container overrides that specify the name of a container in the specified task definition and the overrides it should receive.
     * 
     */
    public Optional<GetTaskExecutionOverrides> overrides() {
        return Optional.ofNullable(this.overrides);
    }

    /**
     * An array of placement constraint objects to use for the task. You can specify up to 10 constraints for each task. See below.
     * 
     */
    @Import(name="placementConstraints")
    private @Nullable List<GetTaskExecutionPlacementConstraint> placementConstraints;

    /**
     * @return An array of placement constraint objects to use for the task. You can specify up to 10 constraints for each task. See below.
     * 
     */
    public Optional<List<GetTaskExecutionPlacementConstraint>> placementConstraints() {
        return Optional.ofNullable(this.placementConstraints);
    }

    /**
     * The placement strategy objects to use for the task. You can specify a maximum of 5 strategy rules for each task. See below.
     * 
     */
    @Import(name="placementStrategies")
    private @Nullable List<GetTaskExecutionPlacementStrategy> placementStrategies;

    /**
     * @return The placement strategy objects to use for the task. You can specify a maximum of 5 strategy rules for each task. See below.
     * 
     */
    public Optional<List<GetTaskExecutionPlacementStrategy>> placementStrategies() {
        return Optional.ofNullable(this.placementStrategies);
    }

    /**
     * The platform version the task uses. A platform version is only specified for tasks hosted on Fargate. If one isn&#39;t specified, the `LATEST` platform version is used.
     * 
     */
    @Import(name="platformVersion")
    private @Nullable String platformVersion;

    /**
     * @return The platform version the task uses. A platform version is only specified for tasks hosted on Fargate. If one isn&#39;t specified, the `LATEST` platform version is used.
     * 
     */
    public Optional<String> platformVersion() {
        return Optional.ofNullable(this.platformVersion);
    }

    /**
     * Specifies whether to propagate the tags from the task definition to the task. If no value is specified, the tags aren&#39;t propagated. An error will be received if you specify the `SERVICE` option when running a task. Valid values are `TASK_DEFINITION` or `NONE`.
     * 
     */
    @Import(name="propagateTags")
    private @Nullable String propagateTags;

    /**
     * @return Specifies whether to propagate the tags from the task definition to the task. If no value is specified, the tags aren&#39;t propagated. An error will be received if you specify the `SERVICE` option when running a task. Valid values are `TASK_DEFINITION` or `NONE`.
     * 
     */
    public Optional<String> propagateTags() {
        return Optional.ofNullable(this.propagateTags);
    }

    /**
     * The reference ID to use for the task.
     * 
     */
    @Import(name="referenceId")
    private @Nullable String referenceId;

    /**
     * @return The reference ID to use for the task.
     * 
     */
    public Optional<String> referenceId() {
        return Optional.ofNullable(this.referenceId);
    }

    /**
     * An optional tag specified when a task is started.
     * 
     */
    @Import(name="startedBy")
    private @Nullable String startedBy;

    /**
     * @return An optional tag specified when a task is started.
     * 
     */
    public Optional<String> startedBy() {
        return Optional.ofNullable(this.startedBy);
    }

    /**
     * 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 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<Map<String,String>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * The `family` and `revision` (`family:revision`) or full ARN of the task definition to run. If a revision isn&#39;t specified, the latest `ACTIVE` revision is used.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="taskDefinition", required=true)
    private String taskDefinition;

    /**
     * @return The `family` and `revision` (`family:revision`) or full ARN of the task definition to run. If a revision isn&#39;t specified, the latest `ACTIVE` revision is used.
     * 
     * The following arguments are optional:
     * 
     */
    public String taskDefinition() {
        return this.taskDefinition;
    }

    private GetTaskExecutionPlainArgs() {}

    private GetTaskExecutionPlainArgs(GetTaskExecutionPlainArgs $) {
        this.capacityProviderStrategies = $.capacityProviderStrategies;
        this.cluster = $.cluster;
        this.desiredCount = $.desiredCount;
        this.enableEcsManagedTags = $.enableEcsManagedTags;
        this.enableExecuteCommand = $.enableExecuteCommand;
        this.group = $.group;
        this.launchType = $.launchType;
        this.networkConfiguration = $.networkConfiguration;
        this.overrides = $.overrides;
        this.placementConstraints = $.placementConstraints;
        this.placementStrategies = $.placementStrategies;
        this.platformVersion = $.platformVersion;
        this.propagateTags = $.propagateTags;
        this.referenceId = $.referenceId;
        this.startedBy = $.startedBy;
        this.tags = $.tags;
        this.taskDefinition = $.taskDefinition;
    }

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

    public static final class Builder {
        private GetTaskExecutionPlainArgs $;

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

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

        /**
         * @param capacityProviderStrategies Set of capacity provider strategies to use for the cluster. See below.
         * 
         * @return builder
         * 
         */
        public Builder capacityProviderStrategies(@Nullable List<GetTaskExecutionCapacityProviderStrategy> capacityProviderStrategies) {
            $.capacityProviderStrategies = capacityProviderStrategies;
            return this;
        }

        /**
         * @param capacityProviderStrategies Set of capacity provider strategies to use for the cluster. See below.
         * 
         * @return builder
         * 
         */
        public Builder capacityProviderStrategies(GetTaskExecutionCapacityProviderStrategy... capacityProviderStrategies) {
            return capacityProviderStrategies(List.of(capacityProviderStrategies));
        }

        /**
         * @param cluster Short name or full Amazon Resource Name (ARN) of the cluster to run the task on.
         * 
         * @return builder
         * 
         */
        public Builder cluster(String cluster) {
            $.cluster = cluster;
            return this;
        }

        /**
         * @param desiredCount Number of instantiations of the specified task to place on your cluster. You can specify up to 10 tasks for each call.
         * 
         * @return builder
         * 
         */
        public Builder desiredCount(@Nullable Integer desiredCount) {
            $.desiredCount = desiredCount;
            return this;
        }

        /**
         * @param enableEcsManagedTags Specifies whether to enable Amazon ECS managed tags for the tasks within the service.
         * 
         * @return builder
         * 
         */
        public Builder enableEcsManagedTags(@Nullable Boolean enableEcsManagedTags) {
            $.enableEcsManagedTags = enableEcsManagedTags;
            return this;
        }

        /**
         * @param enableExecuteCommand Specifies whether to enable Amazon ECS Exec for the tasks within the service.
         * 
         * @return builder
         * 
         */
        public Builder enableExecuteCommand(@Nullable Boolean enableExecuteCommand) {
            $.enableExecuteCommand = enableExecuteCommand;
            return this;
        }

        /**
         * @param group Name of the task group to associate with the task. The default value is the family name of the task definition.
         * 
         * @return builder
         * 
         */
        public Builder group(@Nullable String group) {
            $.group = group;
            return this;
        }

        /**
         * @param launchType Launch type on which to run your service. Valid values are `EC2`, `FARGATE`, and `EXTERNAL`.
         * 
         * @return builder
         * 
         */
        public Builder launchType(@Nullable String launchType) {
            $.launchType = launchType;
            return this;
        }

        /**
         * @param networkConfiguration Network configuration for the service. This parameter is required for task definitions that use the `awsvpc` network mode to receive their own Elastic Network Interface, and it is not supported for other network modes. See below.
         * 
         * @return builder
         * 
         */
        public Builder networkConfiguration(@Nullable GetTaskExecutionNetworkConfiguration networkConfiguration) {
            $.networkConfiguration = networkConfiguration;
            return this;
        }

        /**
         * @param overrides A list of container overrides that specify the name of a container in the specified task definition and the overrides it should receive.
         * 
         * @return builder
         * 
         */
        public Builder overrides(@Nullable GetTaskExecutionOverrides overrides) {
            $.overrides = overrides;
            return this;
        }

        /**
         * @param placementConstraints An array of placement constraint objects to use for the task. You can specify up to 10 constraints for each task. See below.
         * 
         * @return builder
         * 
         */
        public Builder placementConstraints(@Nullable List<GetTaskExecutionPlacementConstraint> placementConstraints) {
            $.placementConstraints = placementConstraints;
            return this;
        }

        /**
         * @param placementConstraints An array of placement constraint objects to use for the task. You can specify up to 10 constraints for each task. See below.
         * 
         * @return builder
         * 
         */
        public Builder placementConstraints(GetTaskExecutionPlacementConstraint... placementConstraints) {
            return placementConstraints(List.of(placementConstraints));
        }

        /**
         * @param placementStrategies The placement strategy objects to use for the task. You can specify a maximum of 5 strategy rules for each task. See below.
         * 
         * @return builder
         * 
         */
        public Builder placementStrategies(@Nullable List<GetTaskExecutionPlacementStrategy> placementStrategies) {
            $.placementStrategies = placementStrategies;
            return this;
        }

        /**
         * @param placementStrategies The placement strategy objects to use for the task. You can specify a maximum of 5 strategy rules for each task. See below.
         * 
         * @return builder
         * 
         */
        public Builder placementStrategies(GetTaskExecutionPlacementStrategy... placementStrategies) {
            return placementStrategies(List.of(placementStrategies));
        }

        /**
         * @param platformVersion The platform version the task uses. A platform version is only specified for tasks hosted on Fargate. If one isn&#39;t specified, the `LATEST` platform version is used.
         * 
         * @return builder
         * 
         */
        public Builder platformVersion(@Nullable String platformVersion) {
            $.platformVersion = platformVersion;
            return this;
        }

        /**
         * @param propagateTags Specifies whether to propagate the tags from the task definition to the task. If no value is specified, the tags aren&#39;t propagated. An error will be received if you specify the `SERVICE` option when running a task. Valid values are `TASK_DEFINITION` or `NONE`.
         * 
         * @return builder
         * 
         */
        public Builder propagateTags(@Nullable String propagateTags) {
            $.propagateTags = propagateTags;
            return this;
        }

        /**
         * @param referenceId The reference ID to use for the task.
         * 
         * @return builder
         * 
         */
        public Builder referenceId(@Nullable String referenceId) {
            $.referenceId = referenceId;
            return this;
        }

        /**
         * @param startedBy An optional tag specified when a task is started.
         * 
         * @return builder
         * 
         */
        public Builder startedBy(@Nullable String startedBy) {
            $.startedBy = startedBy;
            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(@Nullable Map<String,String> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param taskDefinition The `family` and `revision` (`family:revision`) or full ARN of the task definition to run. If a revision isn&#39;t specified, the latest `ACTIVE` revision is used.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder taskDefinition(String taskDefinition) {
            $.taskDefinition = taskDefinition;
            return this;
        }

        public GetTaskExecutionPlainArgs build() {
            $.cluster = Objects.requireNonNull($.cluster, "expected parameter 'cluster' to be non-null");
            $.taskDefinition = Objects.requireNonNull($.taskDefinition, "expected parameter 'taskDefinition' to be non-null");
            return $;
        }
    }

}
