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


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

    public static final ClusterNodeConfigKubeletConfigArgs Empty = new ClusterNodeConfigKubeletConfigArgs();

    /**
     * If true, enables CPU CFS quota enforcement for
     * containers that specify CPU limits.
     * 
     */
    @Import(name="cpuCfsQuota")
    private @Nullable Output<Boolean> cpuCfsQuota;

    /**
     * @return If true, enables CPU CFS quota enforcement for
     * containers that specify CPU limits.
     * 
     */
    public Optional<Output<Boolean>> cpuCfsQuota() {
        return Optional.ofNullable(this.cpuCfsQuota);
    }

    /**
     * The CPU CFS quota period value. Specified
     * as a sequence of decimal numbers, each with optional fraction and a unit suffix,
     * such as `&#34;300ms&#34;`. Valid time units are &#34;ns&#34;, &#34;us&#34; (or &#34;µs&#34;), &#34;ms&#34;, &#34;s&#34;, &#34;m&#34;,
     * &#34;h&#34;. The value must be a positive duration.
     * 
     * &gt; Note: At the time of writing (2020/08/18) the GKE API rejects the `none`
     * value and accepts an invalid `default` value instead. While this remains true,
     * not specifying the `kubelet_config` block should be the equivalent of specifying
     * `none`.
     * 
     */
    @Import(name="cpuCfsQuotaPeriod")
    private @Nullable Output<String> cpuCfsQuotaPeriod;

    /**
     * @return The CPU CFS quota period value. Specified
     * as a sequence of decimal numbers, each with optional fraction and a unit suffix,
     * such as `&#34;300ms&#34;`. Valid time units are &#34;ns&#34;, &#34;us&#34; (or &#34;µs&#34;), &#34;ms&#34;, &#34;s&#34;, &#34;m&#34;,
     * &#34;h&#34;. The value must be a positive duration.
     * 
     * &gt; Note: At the time of writing (2020/08/18) the GKE API rejects the `none`
     * value and accepts an invalid `default` value instead. While this remains true,
     * not specifying the `kubelet_config` block should be the equivalent of specifying
     * `none`.
     * 
     */
    public Optional<Output<String>> cpuCfsQuotaPeriod() {
        return Optional.ofNullable(this.cpuCfsQuotaPeriod);
    }

    /**
     * The CPU management policy on the node. See
     * [K8S CPU Management Policies](https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/).
     * One of `&#34;none&#34;` or `&#34;static&#34;`. Defaults to `none` when `kubelet_config` is unset.
     * 
     */
    @Import(name="cpuManagerPolicy", required=true)
    private Output<String> cpuManagerPolicy;

    /**
     * @return The CPU management policy on the node. See
     * [K8S CPU Management Policies](https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/).
     * One of `&#34;none&#34;` or `&#34;static&#34;`. Defaults to `none` when `kubelet_config` is unset.
     * 
     */
    public Output<String> cpuManagerPolicy() {
        return this.cpuManagerPolicy;
    }

    /**
     * Controls the maximum number of processes allowed to run in a pod. The value must be greater than or equal to 1024 and less than 4194304.
     * 
     */
    @Import(name="podPidsLimit")
    private @Nullable Output<Integer> podPidsLimit;

    /**
     * @return Controls the maximum number of processes allowed to run in a pod. The value must be greater than or equal to 1024 and less than 4194304.
     * 
     */
    public Optional<Output<Integer>> podPidsLimit() {
        return Optional.ofNullable(this.podPidsLimit);
    }

    private ClusterNodeConfigKubeletConfigArgs() {}

    private ClusterNodeConfigKubeletConfigArgs(ClusterNodeConfigKubeletConfigArgs $) {
        this.cpuCfsQuota = $.cpuCfsQuota;
        this.cpuCfsQuotaPeriod = $.cpuCfsQuotaPeriod;
        this.cpuManagerPolicy = $.cpuManagerPolicy;
        this.podPidsLimit = $.podPidsLimit;
    }

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

    public static final class Builder {
        private ClusterNodeConfigKubeletConfigArgs $;

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

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

        /**
         * @param cpuCfsQuota If true, enables CPU CFS quota enforcement for
         * containers that specify CPU limits.
         * 
         * @return builder
         * 
         */
        public Builder cpuCfsQuota(@Nullable Output<Boolean> cpuCfsQuota) {
            $.cpuCfsQuota = cpuCfsQuota;
            return this;
        }

        /**
         * @param cpuCfsQuota If true, enables CPU CFS quota enforcement for
         * containers that specify CPU limits.
         * 
         * @return builder
         * 
         */
        public Builder cpuCfsQuota(Boolean cpuCfsQuota) {
            return cpuCfsQuota(Output.of(cpuCfsQuota));
        }

        /**
         * @param cpuCfsQuotaPeriod The CPU CFS quota period value. Specified
         * as a sequence of decimal numbers, each with optional fraction and a unit suffix,
         * such as `&#34;300ms&#34;`. Valid time units are &#34;ns&#34;, &#34;us&#34; (or &#34;µs&#34;), &#34;ms&#34;, &#34;s&#34;, &#34;m&#34;,
         * &#34;h&#34;. The value must be a positive duration.
         * 
         * &gt; Note: At the time of writing (2020/08/18) the GKE API rejects the `none`
         * value and accepts an invalid `default` value instead. While this remains true,
         * not specifying the `kubelet_config` block should be the equivalent of specifying
         * `none`.
         * 
         * @return builder
         * 
         */
        public Builder cpuCfsQuotaPeriod(@Nullable Output<String> cpuCfsQuotaPeriod) {
            $.cpuCfsQuotaPeriod = cpuCfsQuotaPeriod;
            return this;
        }

        /**
         * @param cpuCfsQuotaPeriod The CPU CFS quota period value. Specified
         * as a sequence of decimal numbers, each with optional fraction and a unit suffix,
         * such as `&#34;300ms&#34;`. Valid time units are &#34;ns&#34;, &#34;us&#34; (or &#34;µs&#34;), &#34;ms&#34;, &#34;s&#34;, &#34;m&#34;,
         * &#34;h&#34;. The value must be a positive duration.
         * 
         * &gt; Note: At the time of writing (2020/08/18) the GKE API rejects the `none`
         * value and accepts an invalid `default` value instead. While this remains true,
         * not specifying the `kubelet_config` block should be the equivalent of specifying
         * `none`.
         * 
         * @return builder
         * 
         */
        public Builder cpuCfsQuotaPeriod(String cpuCfsQuotaPeriod) {
            return cpuCfsQuotaPeriod(Output.of(cpuCfsQuotaPeriod));
        }

        /**
         * @param cpuManagerPolicy The CPU management policy on the node. See
         * [K8S CPU Management Policies](https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/).
         * One of `&#34;none&#34;` or `&#34;static&#34;`. Defaults to `none` when `kubelet_config` is unset.
         * 
         * @return builder
         * 
         */
        public Builder cpuManagerPolicy(Output<String> cpuManagerPolicy) {
            $.cpuManagerPolicy = cpuManagerPolicy;
            return this;
        }

        /**
         * @param cpuManagerPolicy The CPU management policy on the node. See
         * [K8S CPU Management Policies](https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/).
         * One of `&#34;none&#34;` or `&#34;static&#34;`. Defaults to `none` when `kubelet_config` is unset.
         * 
         * @return builder
         * 
         */
        public Builder cpuManagerPolicy(String cpuManagerPolicy) {
            return cpuManagerPolicy(Output.of(cpuManagerPolicy));
        }

        /**
         * @param podPidsLimit Controls the maximum number of processes allowed to run in a pod. The value must be greater than or equal to 1024 and less than 4194304.
         * 
         * @return builder
         * 
         */
        public Builder podPidsLimit(@Nullable Output<Integer> podPidsLimit) {
            $.podPidsLimit = podPidsLimit;
            return this;
        }

        /**
         * @param podPidsLimit Controls the maximum number of processes allowed to run in a pod. The value must be greater than or equal to 1024 and less than 4194304.
         * 
         * @return builder
         * 
         */
        public Builder podPidsLimit(Integer podPidsLimit) {
            return podPidsLimit(Output.of(podPidsLimit));
        }

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

}
