// *** 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.gcp.clouddeploy.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.clouddeploy.inputs.TargetAnthosClusterArgs;
import com.pulumi.gcp.clouddeploy.inputs.TargetExecutionConfigArgs;
import com.pulumi.gcp.clouddeploy.inputs.TargetGkeArgs;
import com.pulumi.gcp.clouddeploy.inputs.TargetMultiTargetArgs;
import com.pulumi.gcp.clouddeploy.inputs.TargetRunArgs;
import java.lang.Boolean;
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 TargetState extends com.pulumi.resources.ResourceArgs {

    public static final TargetState Empty = new TargetState();

    /**
     * Optional. User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
     * 
     */
    @Import(name="annotations")
    private @Nullable Output<Map<String,String>> annotations;

    /**
     * @return Optional. User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
     * 
     */
    public Optional<Output<Map<String,String>>> annotations() {
        return Optional.ofNullable(this.annotations);
    }

    /**
     * Information specifying an Anthos Cluster.
     * 
     */
    @Import(name="anthosCluster")
    private @Nullable Output<TargetAnthosClusterArgs> anthosCluster;

    /**
     * @return Information specifying an Anthos Cluster.
     * 
     */
    public Optional<Output<TargetAnthosClusterArgs>> anthosCluster() {
        return Optional.ofNullable(this.anthosCluster);
    }

    /**
     * Output only. Time at which the `Target` was created.
     * 
     */
    @Import(name="createTime")
    private @Nullable Output<String> createTime;

    /**
     * @return Output only. Time at which the `Target` was created.
     * 
     */
    public Optional<Output<String>> createTime() {
        return Optional.ofNullable(this.createTime);
    }

    /**
     * Optional. The deploy parameters to use for this target.
     * 
     */
    @Import(name="deployParameters")
    private @Nullable Output<Map<String,String>> deployParameters;

    /**
     * @return Optional. The deploy parameters to use for this target.
     * 
     */
    public Optional<Output<Map<String,String>>> deployParameters() {
        return Optional.ofNullable(this.deployParameters);
    }

    /**
     * Optional. Description of the `Target`. Max length is 255 characters.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return Optional. Description of the `Target`. Max length is 255 characters.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Optional. This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
     * 
     */
    @Import(name="etag")
    private @Nullable Output<String> etag;

    /**
     * @return Optional. This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
     * 
     */
    public Optional<Output<String>> etag() {
        return Optional.ofNullable(this.etag);
    }

    /**
     * Configurations for all execution that relates to this `Target`. Each `ExecutionEnvironmentUsage` value may only be used in a single configuration; using the same value multiple times is an error. When one or more configurations are specified, they must include the `RENDER` and `DEPLOY` `ExecutionEnvironmentUsage` values. When no configurations are specified, execution will use the default specified in `DefaultPool`.
     * 
     */
    @Import(name="executionConfigs")
    private @Nullable Output<List<TargetExecutionConfigArgs>> executionConfigs;

    /**
     * @return Configurations for all execution that relates to this `Target`. Each `ExecutionEnvironmentUsage` value may only be used in a single configuration; using the same value multiple times is an error. When one or more configurations are specified, they must include the `RENDER` and `DEPLOY` `ExecutionEnvironmentUsage` values. When no configurations are specified, execution will use the default specified in `DefaultPool`.
     * 
     */
    public Optional<Output<List<TargetExecutionConfigArgs>>> executionConfigs() {
        return Optional.ofNullable(this.executionConfigs);
    }

    /**
     * Information specifying a GKE Cluster.
     * 
     */
    @Import(name="gke")
    private @Nullable Output<TargetGkeArgs> gke;

    /**
     * @return Information specifying a GKE Cluster.
     * 
     */
    public Optional<Output<TargetGkeArgs>> gke() {
        return Optional.ofNullable(this.gke);
    }

    /**
     * Optional. Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
     * 
     */
    @Import(name="labels")
    private @Nullable Output<Map<String,String>> labels;

    /**
     * @return Optional. Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
     * 
     */
    public Optional<Output<Map<String,String>>> labels() {
        return Optional.ofNullable(this.labels);
    }

    /**
     * The location for the resource
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

    /**
     * @return The location for the resource
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * (Beta only) Information specifying a multiTarget.
     * 
     */
    @Import(name="multiTarget")
    private @Nullable Output<TargetMultiTargetArgs> multiTarget;

    /**
     * @return (Beta only) Information specifying a multiTarget.
     * 
     */
    public Optional<Output<TargetMultiTargetArgs>> multiTarget() {
        return Optional.ofNullable(this.multiTarget);
    }

    /**
     * Name of the `Target`. Format is [a-z][a-z0-9\-]{0,62}.
     * 
     * ***
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Name of the `Target`. Format is [a-z][a-z0-9\-]{0,62}.
     * 
     * ***
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The project for the resource
     * 
     */
    @Import(name="project")
    private @Nullable Output<String> project;

    /**
     * @return The project for the resource
     * 
     */
    public Optional<Output<String>> project() {
        return Optional.ofNullable(this.project);
    }

    /**
     * Optional. Whether or not the `Target` requires approval.
     * 
     */
    @Import(name="requireApproval")
    private @Nullable Output<Boolean> requireApproval;

    /**
     * @return Optional. Whether or not the `Target` requires approval.
     * 
     */
    public Optional<Output<Boolean>> requireApproval() {
        return Optional.ofNullable(this.requireApproval);
    }

    /**
     * Information specifying a Cloud Run deployment target.
     * 
     */
    @Import(name="run")
    private @Nullable Output<TargetRunArgs> run;

    /**
     * @return Information specifying a Cloud Run deployment target.
     * 
     */
    public Optional<Output<TargetRunArgs>> run() {
        return Optional.ofNullable(this.run);
    }

    /**
     * Output only. Resource id of the `Target`.
     * 
     */
    @Import(name="targetId")
    private @Nullable Output<String> targetId;

    /**
     * @return Output only. Resource id of the `Target`.
     * 
     */
    public Optional<Output<String>> targetId() {
        return Optional.ofNullable(this.targetId);
    }

    /**
     * Output only. Unique identifier of the `Target`.
     * 
     */
    @Import(name="uid")
    private @Nullable Output<String> uid;

    /**
     * @return Output only. Unique identifier of the `Target`.
     * 
     */
    public Optional<Output<String>> uid() {
        return Optional.ofNullable(this.uid);
    }

    /**
     * Output only. Most recent time at which the `Target` was updated.
     * 
     */
    @Import(name="updateTime")
    private @Nullable Output<String> updateTime;

    /**
     * @return Output only. Most recent time at which the `Target` was updated.
     * 
     */
    public Optional<Output<String>> updateTime() {
        return Optional.ofNullable(this.updateTime);
    }

    private TargetState() {}

    private TargetState(TargetState $) {
        this.annotations = $.annotations;
        this.anthosCluster = $.anthosCluster;
        this.createTime = $.createTime;
        this.deployParameters = $.deployParameters;
        this.description = $.description;
        this.etag = $.etag;
        this.executionConfigs = $.executionConfigs;
        this.gke = $.gke;
        this.labels = $.labels;
        this.location = $.location;
        this.multiTarget = $.multiTarget;
        this.name = $.name;
        this.project = $.project;
        this.requireApproval = $.requireApproval;
        this.run = $.run;
        this.targetId = $.targetId;
        this.uid = $.uid;
        this.updateTime = $.updateTime;
    }

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

    public static final class Builder {
        private TargetState $;

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

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

        /**
         * @param annotations Optional. User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
         * 
         * @return builder
         * 
         */
        public Builder annotations(@Nullable Output<Map<String,String>> annotations) {
            $.annotations = annotations;
            return this;
        }

        /**
         * @param annotations Optional. User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
         * 
         * @return builder
         * 
         */
        public Builder annotations(Map<String,String> annotations) {
            return annotations(Output.of(annotations));
        }

        /**
         * @param anthosCluster Information specifying an Anthos Cluster.
         * 
         * @return builder
         * 
         */
        public Builder anthosCluster(@Nullable Output<TargetAnthosClusterArgs> anthosCluster) {
            $.anthosCluster = anthosCluster;
            return this;
        }

        /**
         * @param anthosCluster Information specifying an Anthos Cluster.
         * 
         * @return builder
         * 
         */
        public Builder anthosCluster(TargetAnthosClusterArgs anthosCluster) {
            return anthosCluster(Output.of(anthosCluster));
        }

        /**
         * @param createTime Output only. Time at which the `Target` was created.
         * 
         * @return builder
         * 
         */
        public Builder createTime(@Nullable Output<String> createTime) {
            $.createTime = createTime;
            return this;
        }

        /**
         * @param createTime Output only. Time at which the `Target` was created.
         * 
         * @return builder
         * 
         */
        public Builder createTime(String createTime) {
            return createTime(Output.of(createTime));
        }

        /**
         * @param deployParameters Optional. The deploy parameters to use for this target.
         * 
         * @return builder
         * 
         */
        public Builder deployParameters(@Nullable Output<Map<String,String>> deployParameters) {
            $.deployParameters = deployParameters;
            return this;
        }

        /**
         * @param deployParameters Optional. The deploy parameters to use for this target.
         * 
         * @return builder
         * 
         */
        public Builder deployParameters(Map<String,String> deployParameters) {
            return deployParameters(Output.of(deployParameters));
        }

        /**
         * @param description Optional. Description of the `Target`. Max length is 255 characters.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description Optional. Description of the `Target`. Max length is 255 characters.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param etag Optional. This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
         * 
         * @return builder
         * 
         */
        public Builder etag(@Nullable Output<String> etag) {
            $.etag = etag;
            return this;
        }

        /**
         * @param etag Optional. This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
         * 
         * @return builder
         * 
         */
        public Builder etag(String etag) {
            return etag(Output.of(etag));
        }

        /**
         * @param executionConfigs Configurations for all execution that relates to this `Target`. Each `ExecutionEnvironmentUsage` value may only be used in a single configuration; using the same value multiple times is an error. When one or more configurations are specified, they must include the `RENDER` and `DEPLOY` `ExecutionEnvironmentUsage` values. When no configurations are specified, execution will use the default specified in `DefaultPool`.
         * 
         * @return builder
         * 
         */
        public Builder executionConfigs(@Nullable Output<List<TargetExecutionConfigArgs>> executionConfigs) {
            $.executionConfigs = executionConfigs;
            return this;
        }

        /**
         * @param executionConfigs Configurations for all execution that relates to this `Target`. Each `ExecutionEnvironmentUsage` value may only be used in a single configuration; using the same value multiple times is an error. When one or more configurations are specified, they must include the `RENDER` and `DEPLOY` `ExecutionEnvironmentUsage` values. When no configurations are specified, execution will use the default specified in `DefaultPool`.
         * 
         * @return builder
         * 
         */
        public Builder executionConfigs(List<TargetExecutionConfigArgs> executionConfigs) {
            return executionConfigs(Output.of(executionConfigs));
        }

        /**
         * @param executionConfigs Configurations for all execution that relates to this `Target`. Each `ExecutionEnvironmentUsage` value may only be used in a single configuration; using the same value multiple times is an error. When one or more configurations are specified, they must include the `RENDER` and `DEPLOY` `ExecutionEnvironmentUsage` values. When no configurations are specified, execution will use the default specified in `DefaultPool`.
         * 
         * @return builder
         * 
         */
        public Builder executionConfigs(TargetExecutionConfigArgs... executionConfigs) {
            return executionConfigs(List.of(executionConfigs));
        }

        /**
         * @param gke Information specifying a GKE Cluster.
         * 
         * @return builder
         * 
         */
        public Builder gke(@Nullable Output<TargetGkeArgs> gke) {
            $.gke = gke;
            return this;
        }

        /**
         * @param gke Information specifying a GKE Cluster.
         * 
         * @return builder
         * 
         */
        public Builder gke(TargetGkeArgs gke) {
            return gke(Output.of(gke));
        }

        /**
         * @param labels Optional. Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
         * 
         * @return builder
         * 
         */
        public Builder labels(@Nullable Output<Map<String,String>> labels) {
            $.labels = labels;
            return this;
        }

        /**
         * @param labels Optional. Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
         * 
         * @return builder
         * 
         */
        public Builder labels(Map<String,String> labels) {
            return labels(Output.of(labels));
        }

        /**
         * @param location The location for the resource
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location The location for the resource
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param multiTarget (Beta only) Information specifying a multiTarget.
         * 
         * @return builder
         * 
         */
        public Builder multiTarget(@Nullable Output<TargetMultiTargetArgs> multiTarget) {
            $.multiTarget = multiTarget;
            return this;
        }

        /**
         * @param multiTarget (Beta only) Information specifying a multiTarget.
         * 
         * @return builder
         * 
         */
        public Builder multiTarget(TargetMultiTargetArgs multiTarget) {
            return multiTarget(Output.of(multiTarget));
        }

        /**
         * @param name Name of the `Target`. Format is [a-z][a-z0-9\-]{0,62}.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Name of the `Target`. Format is [a-z][a-z0-9\-]{0,62}.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param project The project for the resource
         * 
         * @return builder
         * 
         */
        public Builder project(@Nullable Output<String> project) {
            $.project = project;
            return this;
        }

        /**
         * @param project The project for the resource
         * 
         * @return builder
         * 
         */
        public Builder project(String project) {
            return project(Output.of(project));
        }

        /**
         * @param requireApproval Optional. Whether or not the `Target` requires approval.
         * 
         * @return builder
         * 
         */
        public Builder requireApproval(@Nullable Output<Boolean> requireApproval) {
            $.requireApproval = requireApproval;
            return this;
        }

        /**
         * @param requireApproval Optional. Whether or not the `Target` requires approval.
         * 
         * @return builder
         * 
         */
        public Builder requireApproval(Boolean requireApproval) {
            return requireApproval(Output.of(requireApproval));
        }

        /**
         * @param run Information specifying a Cloud Run deployment target.
         * 
         * @return builder
         * 
         */
        public Builder run(@Nullable Output<TargetRunArgs> run) {
            $.run = run;
            return this;
        }

        /**
         * @param run Information specifying a Cloud Run deployment target.
         * 
         * @return builder
         * 
         */
        public Builder run(TargetRunArgs run) {
            return run(Output.of(run));
        }

        /**
         * @param targetId Output only. Resource id of the `Target`.
         * 
         * @return builder
         * 
         */
        public Builder targetId(@Nullable Output<String> targetId) {
            $.targetId = targetId;
            return this;
        }

        /**
         * @param targetId Output only. Resource id of the `Target`.
         * 
         * @return builder
         * 
         */
        public Builder targetId(String targetId) {
            return targetId(Output.of(targetId));
        }

        /**
         * @param uid Output only. Unique identifier of the `Target`.
         * 
         * @return builder
         * 
         */
        public Builder uid(@Nullable Output<String> uid) {
            $.uid = uid;
            return this;
        }

        /**
         * @param uid Output only. Unique identifier of the `Target`.
         * 
         * @return builder
         * 
         */
        public Builder uid(String uid) {
            return uid(Output.of(uid));
        }

        /**
         * @param updateTime Output only. Most recent time at which the `Target` was updated.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(@Nullable Output<String> updateTime) {
            $.updateTime = updateTime;
            return this;
        }

        /**
         * @param updateTime Output only. Most recent time at which the `Target` was updated.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(String updateTime) {
            return updateTime(Output.of(updateTime));
        }

        public TargetState build() {
            return $;
        }
    }

}
