// *** 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.aws.emr.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 ManagedScalingPolicyComputeLimitArgs extends com.pulumi.resources.ResourceArgs {

    public static final ManagedScalingPolicyComputeLimitArgs Empty = new ManagedScalingPolicyComputeLimitArgs();

    /**
     * The upper boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
     * 
     */
    @Import(name="maximumCapacityUnits", required=true)
    private Output<Integer> maximumCapacityUnits;

    /**
     * @return The upper boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
     * 
     */
    public Output<Integer> maximumCapacityUnits() {
        return this.maximumCapacityUnits;
    }

    /**
     * The upper boundary of EC2 units for core node type in a cluster. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The core units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between core and task nodes.
     * 
     */
    @Import(name="maximumCoreCapacityUnits")
    private @Nullable Output<Integer> maximumCoreCapacityUnits;

    /**
     * @return The upper boundary of EC2 units for core node type in a cluster. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The core units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between core and task nodes.
     * 
     */
    public Optional<Output<Integer>> maximumCoreCapacityUnits() {
        return Optional.ofNullable(this.maximumCoreCapacityUnits);
    }

    /**
     * The upper boundary of On-Demand EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The On-Demand units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between On-Demand and Spot instances.
     * 
     */
    @Import(name="maximumOndemandCapacityUnits")
    private @Nullable Output<Integer> maximumOndemandCapacityUnits;

    /**
     * @return The upper boundary of On-Demand EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The On-Demand units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between On-Demand and Spot instances.
     * 
     */
    public Optional<Output<Integer>> maximumOndemandCapacityUnits() {
        return Optional.ofNullable(this.maximumOndemandCapacityUnits);
    }

    /**
     * The lower boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
     * 
     */
    @Import(name="minimumCapacityUnits", required=true)
    private Output<Integer> minimumCapacityUnits;

    /**
     * @return The lower boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
     * 
     */
    public Output<Integer> minimumCapacityUnits() {
        return this.minimumCapacityUnits;
    }

    /**
     * The unit type used for specifying a managed scaling policy. Valid Values: `InstanceFleetUnits` | `Instances` | `VCPU`
     * 
     */
    @Import(name="unitType", required=true)
    private Output<String> unitType;

    /**
     * @return The unit type used for specifying a managed scaling policy. Valid Values: `InstanceFleetUnits` | `Instances` | `VCPU`
     * 
     */
    public Output<String> unitType() {
        return this.unitType;
    }

    private ManagedScalingPolicyComputeLimitArgs() {}

    private ManagedScalingPolicyComputeLimitArgs(ManagedScalingPolicyComputeLimitArgs $) {
        this.maximumCapacityUnits = $.maximumCapacityUnits;
        this.maximumCoreCapacityUnits = $.maximumCoreCapacityUnits;
        this.maximumOndemandCapacityUnits = $.maximumOndemandCapacityUnits;
        this.minimumCapacityUnits = $.minimumCapacityUnits;
        this.unitType = $.unitType;
    }

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

    public static final class Builder {
        private ManagedScalingPolicyComputeLimitArgs $;

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

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

        /**
         * @param maximumCapacityUnits The upper boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
         * 
         * @return builder
         * 
         */
        public Builder maximumCapacityUnits(Output<Integer> maximumCapacityUnits) {
            $.maximumCapacityUnits = maximumCapacityUnits;
            return this;
        }

        /**
         * @param maximumCapacityUnits The upper boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
         * 
         * @return builder
         * 
         */
        public Builder maximumCapacityUnits(Integer maximumCapacityUnits) {
            return maximumCapacityUnits(Output.of(maximumCapacityUnits));
        }

        /**
         * @param maximumCoreCapacityUnits The upper boundary of EC2 units for core node type in a cluster. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The core units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between core and task nodes.
         * 
         * @return builder
         * 
         */
        public Builder maximumCoreCapacityUnits(@Nullable Output<Integer> maximumCoreCapacityUnits) {
            $.maximumCoreCapacityUnits = maximumCoreCapacityUnits;
            return this;
        }

        /**
         * @param maximumCoreCapacityUnits The upper boundary of EC2 units for core node type in a cluster. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The core units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between core and task nodes.
         * 
         * @return builder
         * 
         */
        public Builder maximumCoreCapacityUnits(Integer maximumCoreCapacityUnits) {
            return maximumCoreCapacityUnits(Output.of(maximumCoreCapacityUnits));
        }

        /**
         * @param maximumOndemandCapacityUnits The upper boundary of On-Demand EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The On-Demand units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between On-Demand and Spot instances.
         * 
         * @return builder
         * 
         */
        public Builder maximumOndemandCapacityUnits(@Nullable Output<Integer> maximumOndemandCapacityUnits) {
            $.maximumOndemandCapacityUnits = maximumOndemandCapacityUnits;
            return this;
        }

        /**
         * @param maximumOndemandCapacityUnits The upper boundary of On-Demand EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. The On-Demand units are not allowed to scale beyond this boundary. The parameter is used to split capacity allocation between On-Demand and Spot instances.
         * 
         * @return builder
         * 
         */
        public Builder maximumOndemandCapacityUnits(Integer maximumOndemandCapacityUnits) {
            return maximumOndemandCapacityUnits(Output.of(maximumOndemandCapacityUnits));
        }

        /**
         * @param minimumCapacityUnits The lower boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
         * 
         * @return builder
         * 
         */
        public Builder minimumCapacityUnits(Output<Integer> minimumCapacityUnits) {
            $.minimumCapacityUnits = minimumCapacityUnits;
            return this;
        }

        /**
         * @param minimumCapacityUnits The lower boundary of EC2 units. It is measured through VCPU cores or instances for instance groups and measured through units for instance fleets. Managed scaling activities are not allowed beyond this boundary. The limit only applies to the core and task nodes. The master node cannot be scaled after initial configuration.
         * 
         * @return builder
         * 
         */
        public Builder minimumCapacityUnits(Integer minimumCapacityUnits) {
            return minimumCapacityUnits(Output.of(minimumCapacityUnits));
        }

        /**
         * @param unitType The unit type used for specifying a managed scaling policy. Valid Values: `InstanceFleetUnits` | `Instances` | `VCPU`
         * 
         * @return builder
         * 
         */
        public Builder unitType(Output<String> unitType) {
            $.unitType = unitType;
            return this;
        }

        /**
         * @param unitType The unit type used for specifying a managed scaling policy. Valid Values: `InstanceFleetUnits` | `Instances` | `VCPU`
         * 
         * @return builder
         * 
         */
        public Builder unitType(String unitType) {
            return unitType(Output.of(unitType));
        }

        public ManagedScalingPolicyComputeLimitArgs build() {
            $.maximumCapacityUnits = Objects.requireNonNull($.maximumCapacityUnits, "expected parameter 'maximumCapacityUnits' to be non-null");
            $.minimumCapacityUnits = Objects.requireNonNull($.minimumCapacityUnits, "expected parameter 'minimumCapacityUnits' to be non-null");
            $.unitType = Objects.requireNonNull($.unitType, "expected parameter 'unitType' to be non-null");
            return $;
        }
    }

}
