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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.container.inputs.AwsClusterAuthorizationArgs;
import com.pulumi.gcp.container.inputs.AwsClusterControlPlaneArgs;
import com.pulumi.gcp.container.inputs.AwsClusterFleetArgs;
import com.pulumi.gcp.container.inputs.AwsClusterLoggingConfigArgs;
import com.pulumi.gcp.container.inputs.AwsClusterNetworkingArgs;
import com.pulumi.gcp.container.inputs.AwsClusterWorkloadIdentityConfigArgs;
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 AwsClusterState extends com.pulumi.resources.ResourceArgs {

    public static final AwsClusterState Empty = new AwsClusterState();

    /**
     * Optional. Annotations on the cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.
     * 
     */
    @Import(name="annotations")
    private @Nullable Output<Map<String,String>> annotations;

    /**
     * @return Optional. Annotations on the cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.
     * 
     */
    public Optional<Output<Map<String,String>>> annotations() {
        return Optional.ofNullable(this.annotations);
    }

    /**
     * Configuration related to the cluster RBAC settings.
     * 
     */
    @Import(name="authorization")
    private @Nullable Output<AwsClusterAuthorizationArgs> authorization;

    /**
     * @return Configuration related to the cluster RBAC settings.
     * 
     */
    public Optional<Output<AwsClusterAuthorizationArgs>> authorization() {
        return Optional.ofNullable(this.authorization);
    }

    /**
     * The AWS region where the cluster runs. Each Google Cloud region supports a subset of nearby AWS regions. You can call to list all supported AWS regions within a given Google Cloud region.
     * 
     */
    @Import(name="awsRegion")
    private @Nullable Output<String> awsRegion;

    /**
     * @return The AWS region where the cluster runs. Each Google Cloud region supports a subset of nearby AWS regions. You can call to list all supported AWS regions within a given Google Cloud region.
     * 
     */
    public Optional<Output<String>> awsRegion() {
        return Optional.ofNullable(this.awsRegion);
    }

    /**
     * Configuration related to the cluster control plane.
     * 
     */
    @Import(name="controlPlane")
    private @Nullable Output<AwsClusterControlPlaneArgs> controlPlane;

    /**
     * @return Configuration related to the cluster control plane.
     * 
     */
    public Optional<Output<AwsClusterControlPlaneArgs>> controlPlane() {
        return Optional.ofNullable(this.controlPlane);
    }

    /**
     * Output only. The time at which this cluster was created.
     * 
     */
    @Import(name="createTime")
    private @Nullable Output<String> createTime;

    /**
     * @return Output only. The time at which this cluster was created.
     * 
     */
    public Optional<Output<String>> createTime() {
        return Optional.ofNullable(this.createTime);
    }

    /**
     * Optional. A human readable description of this cluster. Cannot be longer than 255 UTF-8 encoded bytes.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return Optional. A human readable description of this cluster. Cannot be longer than 255 UTF-8 encoded bytes.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Output only. The endpoint of the cluster&#39;s API server.
     * 
     */
    @Import(name="endpoint")
    private @Nullable Output<String> endpoint;

    /**
     * @return Output only. The endpoint of the cluster&#39;s API server.
     * 
     */
    public Optional<Output<String>> endpoint() {
        return Optional.ofNullable(this.endpoint);
    }

    /**
     * Allows clients to perform consistent read-modify-writes through optimistic concurrency control. 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 Allows clients to perform consistent read-modify-writes through optimistic concurrency control. 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);
    }

    /**
     * Fleet configuration.
     * 
     */
    @Import(name="fleet")
    private @Nullable Output<AwsClusterFleetArgs> fleet;

    /**
     * @return Fleet configuration.
     * 
     */
    public Optional<Output<AwsClusterFleetArgs>> fleet() {
        return Optional.ofNullable(this.fleet);
    }

    /**
     * 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) Logging configuration.
     * 
     */
    @Import(name="loggingConfig")
    private @Nullable Output<AwsClusterLoggingConfigArgs> loggingConfig;

    /**
     * @return (Beta only) Logging configuration.
     * 
     */
    public Optional<Output<AwsClusterLoggingConfigArgs>> loggingConfig() {
        return Optional.ofNullable(this.loggingConfig);
    }

    /**
     * The name of this resource.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

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

    /**
     * Cluster-wide networking configuration.
     * 
     */
    @Import(name="networking")
    private @Nullable Output<AwsClusterNetworkingArgs> networking;

    /**
     * @return Cluster-wide networking configuration.
     * 
     */
    public Optional<Output<AwsClusterNetworkingArgs>> networking() {
        return Optional.ofNullable(this.networking);
    }

    /**
     * The number of the Fleet host project where this cluster will be registered.
     * 
     * (Optional)
     * The project for the resource
     * 
     */
    @Import(name="project")
    private @Nullable Output<String> project;

    /**
     * @return The number of the Fleet host project where this cluster will be registered.
     * 
     * (Optional)
     * The project for the resource
     * 
     */
    public Optional<Output<String>> project() {
        return Optional.ofNullable(this.project);
    }

    /**
     * Output only. If set, there are currently changes in flight to the cluster.
     * 
     */
    @Import(name="reconciling")
    private @Nullable Output<Boolean> reconciling;

    /**
     * @return Output only. If set, there are currently changes in flight to the cluster.
     * 
     */
    public Optional<Output<Boolean>> reconciling() {
        return Optional.ofNullable(this.reconciling);
    }

    /**
     * Output only. The current state of the cluster. Possible values: STATE_UNSPECIFIED, PROVISIONING, RUNNING, RECONCILING, STOPPING, ERROR, DEGRADED
     * 
     */
    @Import(name="state")
    private @Nullable Output<String> state;

    /**
     * @return Output only. The current state of the cluster. Possible values: STATE_UNSPECIFIED, PROVISIONING, RUNNING, RECONCILING, STOPPING, ERROR, DEGRADED
     * 
     */
    public Optional<Output<String>> state() {
        return Optional.ofNullable(this.state);
    }

    /**
     * Output only. A globally unique identifier for the cluster.
     * 
     */
    @Import(name="uid")
    private @Nullable Output<String> uid;

    /**
     * @return Output only. A globally unique identifier for the cluster.
     * 
     */
    public Optional<Output<String>> uid() {
        return Optional.ofNullable(this.uid);
    }

    /**
     * Output only. The time at which this cluster was last updated.
     * 
     */
    @Import(name="updateTime")
    private @Nullable Output<String> updateTime;

    /**
     * @return Output only. The time at which this cluster was last updated.
     * 
     */
    public Optional<Output<String>> updateTime() {
        return Optional.ofNullable(this.updateTime);
    }

    /**
     * Output only. Workload Identity settings.
     * 
     */
    @Import(name="workloadIdentityConfigs")
    private @Nullable Output<List<AwsClusterWorkloadIdentityConfigArgs>> workloadIdentityConfigs;

    /**
     * @return Output only. Workload Identity settings.
     * 
     */
    public Optional<Output<List<AwsClusterWorkloadIdentityConfigArgs>>> workloadIdentityConfigs() {
        return Optional.ofNullable(this.workloadIdentityConfigs);
    }

    private AwsClusterState() {}

    private AwsClusterState(AwsClusterState $) {
        this.annotations = $.annotations;
        this.authorization = $.authorization;
        this.awsRegion = $.awsRegion;
        this.controlPlane = $.controlPlane;
        this.createTime = $.createTime;
        this.description = $.description;
        this.endpoint = $.endpoint;
        this.etag = $.etag;
        this.fleet = $.fleet;
        this.location = $.location;
        this.loggingConfig = $.loggingConfig;
        this.name = $.name;
        this.networking = $.networking;
        this.project = $.project;
        this.reconciling = $.reconciling;
        this.state = $.state;
        this.uid = $.uid;
        this.updateTime = $.updateTime;
        this.workloadIdentityConfigs = $.workloadIdentityConfigs;
    }

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

    public static final class Builder {
        private AwsClusterState $;

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

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

        /**
         * @param annotations Optional. Annotations on the cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.
         * 
         * @return builder
         * 
         */
        public Builder annotations(@Nullable Output<Map<String,String>> annotations) {
            $.annotations = annotations;
            return this;
        }

        /**
         * @param annotations Optional. Annotations on the cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between.
         * 
         * @return builder
         * 
         */
        public Builder annotations(Map<String,String> annotations) {
            return annotations(Output.of(annotations));
        }

        /**
         * @param authorization Configuration related to the cluster RBAC settings.
         * 
         * @return builder
         * 
         */
        public Builder authorization(@Nullable Output<AwsClusterAuthorizationArgs> authorization) {
            $.authorization = authorization;
            return this;
        }

        /**
         * @param authorization Configuration related to the cluster RBAC settings.
         * 
         * @return builder
         * 
         */
        public Builder authorization(AwsClusterAuthorizationArgs authorization) {
            return authorization(Output.of(authorization));
        }

        /**
         * @param awsRegion The AWS region where the cluster runs. Each Google Cloud region supports a subset of nearby AWS regions. You can call to list all supported AWS regions within a given Google Cloud region.
         * 
         * @return builder
         * 
         */
        public Builder awsRegion(@Nullable Output<String> awsRegion) {
            $.awsRegion = awsRegion;
            return this;
        }

        /**
         * @param awsRegion The AWS region where the cluster runs. Each Google Cloud region supports a subset of nearby AWS regions. You can call to list all supported AWS regions within a given Google Cloud region.
         * 
         * @return builder
         * 
         */
        public Builder awsRegion(String awsRegion) {
            return awsRegion(Output.of(awsRegion));
        }

        /**
         * @param controlPlane Configuration related to the cluster control plane.
         * 
         * @return builder
         * 
         */
        public Builder controlPlane(@Nullable Output<AwsClusterControlPlaneArgs> controlPlane) {
            $.controlPlane = controlPlane;
            return this;
        }

        /**
         * @param controlPlane Configuration related to the cluster control plane.
         * 
         * @return builder
         * 
         */
        public Builder controlPlane(AwsClusterControlPlaneArgs controlPlane) {
            return controlPlane(Output.of(controlPlane));
        }

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

        /**
         * @param createTime Output only. The time at which this cluster was created.
         * 
         * @return builder
         * 
         */
        public Builder createTime(String createTime) {
            return createTime(Output.of(createTime));
        }

        /**
         * @param description Optional. A human readable description of this cluster. Cannot be longer than 255 UTF-8 encoded bytes.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description Optional. A human readable description of this cluster. Cannot be longer than 255 UTF-8 encoded bytes.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param endpoint Output only. The endpoint of the cluster&#39;s API server.
         * 
         * @return builder
         * 
         */
        public Builder endpoint(@Nullable Output<String> endpoint) {
            $.endpoint = endpoint;
            return this;
        }

        /**
         * @param endpoint Output only. The endpoint of the cluster&#39;s API server.
         * 
         * @return builder
         * 
         */
        public Builder endpoint(String endpoint) {
            return endpoint(Output.of(endpoint));
        }

        /**
         * @param etag Allows clients to perform consistent read-modify-writes through optimistic concurrency control. 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 Allows clients to perform consistent read-modify-writes through optimistic concurrency control. 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 fleet Fleet configuration.
         * 
         * @return builder
         * 
         */
        public Builder fleet(@Nullable Output<AwsClusterFleetArgs> fleet) {
            $.fleet = fleet;
            return this;
        }

        /**
         * @param fleet Fleet configuration.
         * 
         * @return builder
         * 
         */
        public Builder fleet(AwsClusterFleetArgs fleet) {
            return fleet(Output.of(fleet));
        }

        /**
         * @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 loggingConfig (Beta only) Logging configuration.
         * 
         * @return builder
         * 
         */
        public Builder loggingConfig(@Nullable Output<AwsClusterLoggingConfigArgs> loggingConfig) {
            $.loggingConfig = loggingConfig;
            return this;
        }

        /**
         * @param loggingConfig (Beta only) Logging configuration.
         * 
         * @return builder
         * 
         */
        public Builder loggingConfig(AwsClusterLoggingConfigArgs loggingConfig) {
            return loggingConfig(Output.of(loggingConfig));
        }

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

        /**
         * @param name The name of this resource.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param networking Cluster-wide networking configuration.
         * 
         * @return builder
         * 
         */
        public Builder networking(@Nullable Output<AwsClusterNetworkingArgs> networking) {
            $.networking = networking;
            return this;
        }

        /**
         * @param networking Cluster-wide networking configuration.
         * 
         * @return builder
         * 
         */
        public Builder networking(AwsClusterNetworkingArgs networking) {
            return networking(Output.of(networking));
        }

        /**
         * @param project The number of the Fleet host project where this cluster will be registered.
         * 
         * (Optional)
         * The project for the resource
         * 
         * @return builder
         * 
         */
        public Builder project(@Nullable Output<String> project) {
            $.project = project;
            return this;
        }

        /**
         * @param project The number of the Fleet host project where this cluster will be registered.
         * 
         * (Optional)
         * The project for the resource
         * 
         * @return builder
         * 
         */
        public Builder project(String project) {
            return project(Output.of(project));
        }

        /**
         * @param reconciling Output only. If set, there are currently changes in flight to the cluster.
         * 
         * @return builder
         * 
         */
        public Builder reconciling(@Nullable Output<Boolean> reconciling) {
            $.reconciling = reconciling;
            return this;
        }

        /**
         * @param reconciling Output only. If set, there are currently changes in flight to the cluster.
         * 
         * @return builder
         * 
         */
        public Builder reconciling(Boolean reconciling) {
            return reconciling(Output.of(reconciling));
        }

        /**
         * @param state Output only. The current state of the cluster. Possible values: STATE_UNSPECIFIED, PROVISIONING, RUNNING, RECONCILING, STOPPING, ERROR, DEGRADED
         * 
         * @return builder
         * 
         */
        public Builder state(@Nullable Output<String> state) {
            $.state = state;
            return this;
        }

        /**
         * @param state Output only. The current state of the cluster. Possible values: STATE_UNSPECIFIED, PROVISIONING, RUNNING, RECONCILING, STOPPING, ERROR, DEGRADED
         * 
         * @return builder
         * 
         */
        public Builder state(String state) {
            return state(Output.of(state));
        }

        /**
         * @param uid Output only. A globally unique identifier for the cluster.
         * 
         * @return builder
         * 
         */
        public Builder uid(@Nullable Output<String> uid) {
            $.uid = uid;
            return this;
        }

        /**
         * @param uid Output only. A globally unique identifier for the cluster.
         * 
         * @return builder
         * 
         */
        public Builder uid(String uid) {
            return uid(Output.of(uid));
        }

        /**
         * @param updateTime Output only. The time at which this cluster was last updated.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(@Nullable Output<String> updateTime) {
            $.updateTime = updateTime;
            return this;
        }

        /**
         * @param updateTime Output only. The time at which this cluster was last updated.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(String updateTime) {
            return updateTime(Output.of(updateTime));
        }

        /**
         * @param workloadIdentityConfigs Output only. Workload Identity settings.
         * 
         * @return builder
         * 
         */
        public Builder workloadIdentityConfigs(@Nullable Output<List<AwsClusterWorkloadIdentityConfigArgs>> workloadIdentityConfigs) {
            $.workloadIdentityConfigs = workloadIdentityConfigs;
            return this;
        }

        /**
         * @param workloadIdentityConfigs Output only. Workload Identity settings.
         * 
         * @return builder
         * 
         */
        public Builder workloadIdentityConfigs(List<AwsClusterWorkloadIdentityConfigArgs> workloadIdentityConfigs) {
            return workloadIdentityConfigs(Output.of(workloadIdentityConfigs));
        }

        /**
         * @param workloadIdentityConfigs Output only. Workload Identity settings.
         * 
         * @return builder
         * 
         */
        public Builder workloadIdentityConfigs(AwsClusterWorkloadIdentityConfigArgs... workloadIdentityConfigs) {
            return workloadIdentityConfigs(List.of(workloadIdentityConfigs));
        }

        public AwsClusterState build() {
            return $;
        }
    }

}
