// *** 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 java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ClusterDnsConfigArgs Empty = new ClusterDnsConfigArgs();

    /**
     * Which in-cluster DNS provider should be used. `PROVIDER_UNSPECIFIED` (default) or `PLATFORM_DEFAULT` or `CLOUD_DNS`.
     * 
     */
    @Import(name="clusterDns")
    private @Nullable Output<String> clusterDns;

    /**
     * @return Which in-cluster DNS provider should be used. `PROVIDER_UNSPECIFIED` (default) or `PLATFORM_DEFAULT` or `CLOUD_DNS`.
     * 
     */
    public Optional<Output<String>> clusterDns() {
        return Optional.ofNullable(this.clusterDns);
    }

    /**
     * The suffix used for all cluster service records.
     * 
     */
    @Import(name="clusterDnsDomain")
    private @Nullable Output<String> clusterDnsDomain;

    /**
     * @return The suffix used for all cluster service records.
     * 
     */
    public Optional<Output<String>> clusterDnsDomain() {
        return Optional.ofNullable(this.clusterDnsDomain);
    }

    /**
     * The scope of access to cluster DNS records. `DNS_SCOPE_UNSPECIFIED` (default) or `CLUSTER_SCOPE` or `VPC_SCOPE`.
     * 
     */
    @Import(name="clusterDnsScope")
    private @Nullable Output<String> clusterDnsScope;

    /**
     * @return The scope of access to cluster DNS records. `DNS_SCOPE_UNSPECIFIED` (default) or `CLUSTER_SCOPE` or `VPC_SCOPE`.
     * 
     */
    public Optional<Output<String>> clusterDnsScope() {
        return Optional.ofNullable(this.clusterDnsScope);
    }

    private ClusterDnsConfigArgs() {}

    private ClusterDnsConfigArgs(ClusterDnsConfigArgs $) {
        this.clusterDns = $.clusterDns;
        this.clusterDnsDomain = $.clusterDnsDomain;
        this.clusterDnsScope = $.clusterDnsScope;
    }

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

    public static final class Builder {
        private ClusterDnsConfigArgs $;

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

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

        /**
         * @param clusterDns Which in-cluster DNS provider should be used. `PROVIDER_UNSPECIFIED` (default) or `PLATFORM_DEFAULT` or `CLOUD_DNS`.
         * 
         * @return builder
         * 
         */
        public Builder clusterDns(@Nullable Output<String> clusterDns) {
            $.clusterDns = clusterDns;
            return this;
        }

        /**
         * @param clusterDns Which in-cluster DNS provider should be used. `PROVIDER_UNSPECIFIED` (default) or `PLATFORM_DEFAULT` or `CLOUD_DNS`.
         * 
         * @return builder
         * 
         */
        public Builder clusterDns(String clusterDns) {
            return clusterDns(Output.of(clusterDns));
        }

        /**
         * @param clusterDnsDomain The suffix used for all cluster service records.
         * 
         * @return builder
         * 
         */
        public Builder clusterDnsDomain(@Nullable Output<String> clusterDnsDomain) {
            $.clusterDnsDomain = clusterDnsDomain;
            return this;
        }

        /**
         * @param clusterDnsDomain The suffix used for all cluster service records.
         * 
         * @return builder
         * 
         */
        public Builder clusterDnsDomain(String clusterDnsDomain) {
            return clusterDnsDomain(Output.of(clusterDnsDomain));
        }

        /**
         * @param clusterDnsScope The scope of access to cluster DNS records. `DNS_SCOPE_UNSPECIFIED` (default) or `CLUSTER_SCOPE` or `VPC_SCOPE`.
         * 
         * @return builder
         * 
         */
        public Builder clusterDnsScope(@Nullable Output<String> clusterDnsScope) {
            $.clusterDnsScope = clusterDnsScope;
            return this;
        }

        /**
         * @param clusterDnsScope The scope of access to cluster DNS records. `DNS_SCOPE_UNSPECIFIED` (default) or `CLUSTER_SCOPE` or `VPC_SCOPE`.
         * 
         * @return builder
         * 
         */
        public Builder clusterDnsScope(String clusterDnsScope) {
            return clusterDnsScope(Output.of(clusterDnsScope));
        }

        public ClusterDnsConfigArgs build() {
            return $;
        }
    }

}
