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

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


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

    public static final PoolFixedScaleArgs Empty = new PoolFixedScaleArgs();

    /**
     * It determines what to do with a node and its running task(s) if the pool size is decreasing. Values are `Requeue`, `RetainedData`, `TaskCompletion` and `Terminate`.
     * 
     */
    @Import(name="nodeDeallocationMethod")
    private @Nullable Output<String> nodeDeallocationMethod;

    /**
     * @return It determines what to do with a node and its running task(s) if the pool size is decreasing. Values are `Requeue`, `RetainedData`, `TaskCompletion` and `Terminate`.
     * 
     */
    public Optional<Output<String>> nodeDeallocationMethod() {
        return Optional.ofNullable(this.nodeDeallocationMethod);
    }

    /**
     * The timeout for resize operations. Defaults to `PT15M`.
     * 
     */
    @Import(name="resizeTimeout")
    private @Nullable Output<String> resizeTimeout;

    /**
     * @return The timeout for resize operations. Defaults to `PT15M`.
     * 
     */
    public Optional<Output<String>> resizeTimeout() {
        return Optional.ofNullable(this.resizeTimeout);
    }

    /**
     * The number of nodes in the Batch pool. Defaults to `1`.
     * 
     */
    @Import(name="targetDedicatedNodes")
    private @Nullable Output<Integer> targetDedicatedNodes;

    /**
     * @return The number of nodes in the Batch pool. Defaults to `1`.
     * 
     */
    public Optional<Output<Integer>> targetDedicatedNodes() {
        return Optional.ofNullable(this.targetDedicatedNodes);
    }

    /**
     * The number of low priority nodes in the Batch pool. Defaults to `0`.
     * 
     */
    @Import(name="targetLowPriorityNodes")
    private @Nullable Output<Integer> targetLowPriorityNodes;

    /**
     * @return The number of low priority nodes in the Batch pool. Defaults to `0`.
     * 
     */
    public Optional<Output<Integer>> targetLowPriorityNodes() {
        return Optional.ofNullable(this.targetLowPriorityNodes);
    }

    private PoolFixedScaleArgs() {}

    private PoolFixedScaleArgs(PoolFixedScaleArgs $) {
        this.nodeDeallocationMethod = $.nodeDeallocationMethod;
        this.resizeTimeout = $.resizeTimeout;
        this.targetDedicatedNodes = $.targetDedicatedNodes;
        this.targetLowPriorityNodes = $.targetLowPriorityNodes;
    }

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

    public static final class Builder {
        private PoolFixedScaleArgs $;

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

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

        /**
         * @param nodeDeallocationMethod It determines what to do with a node and its running task(s) if the pool size is decreasing. Values are `Requeue`, `RetainedData`, `TaskCompletion` and `Terminate`.
         * 
         * @return builder
         * 
         */
        public Builder nodeDeallocationMethod(@Nullable Output<String> nodeDeallocationMethod) {
            $.nodeDeallocationMethod = nodeDeallocationMethod;
            return this;
        }

        /**
         * @param nodeDeallocationMethod It determines what to do with a node and its running task(s) if the pool size is decreasing. Values are `Requeue`, `RetainedData`, `TaskCompletion` and `Terminate`.
         * 
         * @return builder
         * 
         */
        public Builder nodeDeallocationMethod(String nodeDeallocationMethod) {
            return nodeDeallocationMethod(Output.of(nodeDeallocationMethod));
        }

        /**
         * @param resizeTimeout The timeout for resize operations. Defaults to `PT15M`.
         * 
         * @return builder
         * 
         */
        public Builder resizeTimeout(@Nullable Output<String> resizeTimeout) {
            $.resizeTimeout = resizeTimeout;
            return this;
        }

        /**
         * @param resizeTimeout The timeout for resize operations. Defaults to `PT15M`.
         * 
         * @return builder
         * 
         */
        public Builder resizeTimeout(String resizeTimeout) {
            return resizeTimeout(Output.of(resizeTimeout));
        }

        /**
         * @param targetDedicatedNodes The number of nodes in the Batch pool. Defaults to `1`.
         * 
         * @return builder
         * 
         */
        public Builder targetDedicatedNodes(@Nullable Output<Integer> targetDedicatedNodes) {
            $.targetDedicatedNodes = targetDedicatedNodes;
            return this;
        }

        /**
         * @param targetDedicatedNodes The number of nodes in the Batch pool. Defaults to `1`.
         * 
         * @return builder
         * 
         */
        public Builder targetDedicatedNodes(Integer targetDedicatedNodes) {
            return targetDedicatedNodes(Output.of(targetDedicatedNodes));
        }

        /**
         * @param targetLowPriorityNodes The number of low priority nodes in the Batch pool. Defaults to `0`.
         * 
         * @return builder
         * 
         */
        public Builder targetLowPriorityNodes(@Nullable Output<Integer> targetLowPriorityNodes) {
            $.targetLowPriorityNodes = targetLowPriorityNodes;
            return this;
        }

        /**
         * @param targetLowPriorityNodes The number of low priority nodes in the Batch pool. Defaults to `0`.
         * 
         * @return builder
         * 
         */
        public Builder targetLowPriorityNodes(Integer targetLowPriorityNodes) {
            return targetLowPriorityNodes(Output.of(targetLowPriorityNodes));
        }

        public PoolFixedScaleArgs build() {
            return $;
        }
    }

}
