// *** 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.dataproc.outputs;

import com.pulumi.core.annotations.CustomType;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class ClusterVirtualClusterConfigKubernetesClusterConfigGkeClusterConfigNodePoolTargetNodePoolConfigConfig {
    /**
     * @return The number of local SSD disks to attach to the node,
     * which is limited by the maximum number of disks allowable per zone.
     * 
     */
    private @Nullable Integer localSsdCount;
    /**
     * @return The name of a Compute Engine machine type.
     * 
     * to create for the master. If not specified, GCP will default to a predetermined
     * computed value (currently `n1-standard-4`).
     * 
     * to create for the worker nodes. If not specified, GCP will default to a predetermined
     * computed value (currently `n1-standard-4`).
     * 
     */
    private @Nullable String machineType;
    /**
     * @return Minimum CPU platform to be used by this instance.
     * The instance may be scheduled on the specified or a newer CPU platform.
     * Specify the friendly names of CPU platforms, such as &#34;Intel Haswell&#34; or &#34;Intel Sandy Bridge&#34;.
     * 
     * for the master. If not specified, GCP will default to a predetermined computed value
     * for each zone. See [the guide](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
     * for details about which CPU families are available (and defaulted) for each zone.
     * 
     * for the master. If not specified, GCP will default to a predetermined computed value
     * for each zone. See [the guide](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
     * for details about which CPU families are available (and defaulted) for each zone.
     * 
     */
    private @Nullable String minCpuPlatform;
    /**
     * @return Whether the nodes are created as preemptible VM instances.
     * Preemptible nodes cannot be used in a node pool with the CONTROLLER role or in the DEFAULT node pool if the
     * CONTROLLER role is not assigned (the DEFAULT node pool will assume the CONTROLLER role).
     * 
     */
    private @Nullable Boolean preemptible;
    /**
     * @return Spot flag for enabling Spot VM, which is a rebrand of the existing preemptible flag.
     * 
     */
    private @Nullable Boolean spot;

    private ClusterVirtualClusterConfigKubernetesClusterConfigGkeClusterConfigNodePoolTargetNodePoolConfigConfig() {}
    /**
     * @return The number of local SSD disks to attach to the node,
     * which is limited by the maximum number of disks allowable per zone.
     * 
     */
    public Optional<Integer> localSsdCount() {
        return Optional.ofNullable(this.localSsdCount);
    }
    /**
     * @return The name of a Compute Engine machine type.
     * 
     * to create for the master. If not specified, GCP will default to a predetermined
     * computed value (currently `n1-standard-4`).
     * 
     * to create for the worker nodes. If not specified, GCP will default to a predetermined
     * computed value (currently `n1-standard-4`).
     * 
     */
    public Optional<String> machineType() {
        return Optional.ofNullable(this.machineType);
    }
    /**
     * @return Minimum CPU platform to be used by this instance.
     * The instance may be scheduled on the specified or a newer CPU platform.
     * Specify the friendly names of CPU platforms, such as &#34;Intel Haswell&#34; or &#34;Intel Sandy Bridge&#34;.
     * 
     * for the master. If not specified, GCP will default to a predetermined computed value
     * for each zone. See [the guide](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
     * for details about which CPU families are available (and defaulted) for each zone.
     * 
     * for the master. If not specified, GCP will default to a predetermined computed value
     * for each zone. See [the guide](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
     * for details about which CPU families are available (and defaulted) for each zone.
     * 
     */
    public Optional<String> minCpuPlatform() {
        return Optional.ofNullable(this.minCpuPlatform);
    }
    /**
     * @return Whether the nodes are created as preemptible VM instances.
     * Preemptible nodes cannot be used in a node pool with the CONTROLLER role or in the DEFAULT node pool if the
     * CONTROLLER role is not assigned (the DEFAULT node pool will assume the CONTROLLER role).
     * 
     */
    public Optional<Boolean> preemptible() {
        return Optional.ofNullable(this.preemptible);
    }
    /**
     * @return Spot flag for enabling Spot VM, which is a rebrand of the existing preemptible flag.
     * 
     */
    public Optional<Boolean> spot() {
        return Optional.ofNullable(this.spot);
    }

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

    public static Builder builder(ClusterVirtualClusterConfigKubernetesClusterConfigGkeClusterConfigNodePoolTargetNodePoolConfigConfig defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable Integer localSsdCount;
        private @Nullable String machineType;
        private @Nullable String minCpuPlatform;
        private @Nullable Boolean preemptible;
        private @Nullable Boolean spot;
        public Builder() {}
        public Builder(ClusterVirtualClusterConfigKubernetesClusterConfigGkeClusterConfigNodePoolTargetNodePoolConfigConfig defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.localSsdCount = defaults.localSsdCount;
    	      this.machineType = defaults.machineType;
    	      this.minCpuPlatform = defaults.minCpuPlatform;
    	      this.preemptible = defaults.preemptible;
    	      this.spot = defaults.spot;
        }

        @CustomType.Setter
        public Builder localSsdCount(@Nullable Integer localSsdCount) {
            this.localSsdCount = localSsdCount;
            return this;
        }
        @CustomType.Setter
        public Builder machineType(@Nullable String machineType) {
            this.machineType = machineType;
            return this;
        }
        @CustomType.Setter
        public Builder minCpuPlatform(@Nullable String minCpuPlatform) {
            this.minCpuPlatform = minCpuPlatform;
            return this;
        }
        @CustomType.Setter
        public Builder preemptible(@Nullable Boolean preemptible) {
            this.preemptible = preemptible;
            return this;
        }
        @CustomType.Setter
        public Builder spot(@Nullable Boolean spot) {
            this.spot = spot;
            return this;
        }
        public ClusterVirtualClusterConfigKubernetesClusterConfigGkeClusterConfigNodePoolTargetNodePoolConfigConfig build() {
            final var o = new ClusterVirtualClusterConfigKubernetesClusterConfigGkeClusterConfigNodePoolTargetNodePoolConfigConfig();
            o.localSsdCount = localSsdCount;
            o.machineType = machineType;
            o.minCpuPlatform = minCpuPlatform;
            o.preemptible = preemptible;
            o.spot = spot;
            return o;
        }
    }
}
