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

import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorCountArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorTotalMemoryMibArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsBaselineEbsBandwidthMbpsArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryGibPerVcpuArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryMibArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkBandwidthGbpsArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkInterfaceCountArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsTotalLocalStorageGbArgs;
import com.pulumi.aws.autoscaling.inputs.GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsVcpuCountArgs;
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.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs Empty = new GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs();

    /**
     * Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.
     * 
     */
    @Import(name="acceleratorCount")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorCountArgs> acceleratorCount;

    /**
     * @return Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorCountArgs>> acceleratorCount() {
        return Optional.ofNullable(this.acceleratorCount);
    }

    /**
     * List of accelerator manufacturer names. Default is any manufacturer.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    @Import(name="acceleratorManufacturers")
    private @Nullable Output<List<String>> acceleratorManufacturers;

    /**
     * @return List of accelerator manufacturer names. Default is any manufacturer.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    public Optional<Output<List<String>>> acceleratorManufacturers() {
        return Optional.ofNullable(this.acceleratorManufacturers);
    }

    /**
     * List of accelerator names. Default is any acclerator.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    @Import(name="acceleratorNames")
    private @Nullable Output<List<String>> acceleratorNames;

    /**
     * @return List of accelerator names. Default is any acclerator.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    public Optional<Output<List<String>>> acceleratorNames() {
        return Optional.ofNullable(this.acceleratorNames);
    }

    /**
     * Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.
     * 
     */
    @Import(name="acceleratorTotalMemoryMib")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorTotalMemoryMibArgs> acceleratorTotalMemoryMib;

    /**
     * @return Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorTotalMemoryMibArgs>> acceleratorTotalMemoryMib() {
        return Optional.ofNullable(this.acceleratorTotalMemoryMib);
    }

    /**
     * List of accelerator types. Default is any accelerator type.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    @Import(name="acceleratorTypes")
    private @Nullable Output<List<String>> acceleratorTypes;

    /**
     * @return List of accelerator types. Default is any accelerator type.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    public Optional<Output<List<String>>> acceleratorTypes() {
        return Optional.ofNullable(this.acceleratorTypes);
    }

    /**
     * List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (\*), to allow an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.
     * 
     * &gt; **NOTE:** If you specify `allowed_instance_types`, you can&#39;t specify `excluded_instance_types`.
     * 
     */
    @Import(name="allowedInstanceTypes")
    private @Nullable Output<List<String>> allowedInstanceTypes;

    /**
     * @return List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (\*), to allow an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.
     * 
     * &gt; **NOTE:** If you specify `allowed_instance_types`, you can&#39;t specify `excluded_instance_types`.
     * 
     */
    public Optional<Output<List<String>>> allowedInstanceTypes() {
        return Optional.ofNullable(this.allowedInstanceTypes);
    }

    /**
     * Indicate whether bare metal instace types should be `included`, `excluded`, or `required`. Default is `excluded`.
     * 
     */
    @Import(name="bareMetal")
    private @Nullable Output<String> bareMetal;

    /**
     * @return Indicate whether bare metal instace types should be `included`, `excluded`, or `required`. Default is `excluded`.
     * 
     */
    public Optional<Output<String>> bareMetal() {
        return Optional.ofNullable(this.bareMetal);
    }

    /**
     * Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.
     * 
     */
    @Import(name="baselineEbsBandwidthMbps")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsBaselineEbsBandwidthMbpsArgs> baselineEbsBandwidthMbps;

    /**
     * @return Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsBaselineEbsBandwidthMbpsArgs>> baselineEbsBandwidthMbps() {
        return Optional.ofNullable(this.baselineEbsBandwidthMbps);
    }

    /**
     * Indicate whether burstable performance instance types should be `included`, `excluded`, or `required`. Default is `excluded`.
     * 
     */
    @Import(name="burstablePerformance")
    private @Nullable Output<String> burstablePerformance;

    /**
     * @return Indicate whether burstable performance instance types should be `included`, `excluded`, or `required`. Default is `excluded`.
     * 
     */
    public Optional<Output<String>> burstablePerformance() {
        return Optional.ofNullable(this.burstablePerformance);
    }

    /**
     * List of CPU manufacturer names. Default is any manufacturer.
     * 
     * &gt; **NOTE:** Don&#39;t confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    @Import(name="cpuManufacturers")
    private @Nullable Output<List<String>> cpuManufacturers;

    /**
     * @return List of CPU manufacturer names. Default is any manufacturer.
     * 
     * &gt; **NOTE:** Don&#39;t confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    public Optional<Output<List<String>>> cpuManufacturers() {
        return Optional.ofNullable(this.cpuManufacturers);
    }

    /**
     * List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (\*), to exclude an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.
     * 
     * &gt; **NOTE:** If you specify `excluded_instance_types`, you can&#39;t specify `allowed_instance_types`.
     * 
     */
    @Import(name="excludedInstanceTypes")
    private @Nullable Output<List<String>> excludedInstanceTypes;

    /**
     * @return List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (\*), to exclude an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.
     * 
     * &gt; **NOTE:** If you specify `excluded_instance_types`, you can&#39;t specify `allowed_instance_types`.
     * 
     */
    public Optional<Output<List<String>>> excludedInstanceTypes() {
        return Optional.ofNullable(this.excludedInstanceTypes);
    }

    /**
     * List of instance generation names. Default is any generation.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    @Import(name="instanceGenerations")
    private @Nullable Output<List<String>> instanceGenerations;

    /**
     * @return List of instance generation names. Default is any generation.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    public Optional<Output<List<String>>> instanceGenerations() {
        return Optional.ofNullable(this.instanceGenerations);
    }

    /**
     * Indicate whether instance types with local storage volumes are `included`, `excluded`, or `required`. Default is `included`.
     * 
     */
    @Import(name="localStorage")
    private @Nullable Output<String> localStorage;

    /**
     * @return Indicate whether instance types with local storage volumes are `included`, `excluded`, or `required`. Default is `included`.
     * 
     */
    public Optional<Output<String>> localStorage() {
        return Optional.ofNullable(this.localStorage);
    }

    /**
     * List of local storage type names. Default any storage type.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    @Import(name="localStorageTypes")
    private @Nullable Output<List<String>> localStorageTypes;

    /**
     * @return List of local storage type names. Default any storage type.
     * ```java
     * package generated_program;
     * 
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import java.util.List;
     * import java.util.ArrayList;
     * import java.util.Map;
     * import java.io.File;
     * import java.nio.file.Files;
     * import java.nio.file.Paths;
     * 
     * public class App {
     *     public static void main(String[] args) {
     *         Pulumi.run(App::stack);
     *     }
     * 
     *     public static void stack(Context ctx) {
     *     }
     * }
     * ```
     * 
     */
    public Optional<Output<List<String>>> localStorageTypes() {
        return Optional.ofNullable(this.localStorageTypes);
    }

    /**
     * Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.
     * 
     */
    @Import(name="memoryGibPerVcpu")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryGibPerVcpuArgs> memoryGibPerVcpu;

    /**
     * @return Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryGibPerVcpuArgs>> memoryGibPerVcpu() {
        return Optional.ofNullable(this.memoryGibPerVcpu);
    }

    /**
     * Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.
     * 
     */
    @Import(name="memoryMib")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryMibArgs> memoryMib;

    /**
     * @return Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryMibArgs>> memoryMib() {
        return Optional.ofNullable(this.memoryMib);
    }

    /**
     * Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.
     * 
     */
    @Import(name="networkBandwidthGbps")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkBandwidthGbpsArgs> networkBandwidthGbps;

    /**
     * @return Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkBandwidthGbpsArgs>> networkBandwidthGbps() {
        return Optional.ofNullable(this.networkBandwidthGbps);
    }

    /**
     * Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.
     * 
     */
    @Import(name="networkInterfaceCount")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkInterfaceCountArgs> networkInterfaceCount;

    /**
     * @return Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkInterfaceCountArgs>> networkInterfaceCount() {
        return Optional.ofNullable(this.networkInterfaceCount);
    }

    /**
     * Price protection threshold for On-Demand Instances. This is the maximum you’ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.
     * 
     * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
     * 
     */
    @Import(name="onDemandMaxPricePercentageOverLowestPrice")
    private @Nullable Output<Integer> onDemandMaxPricePercentageOverLowestPrice;

    /**
     * @return Price protection threshold for On-Demand Instances. This is the maximum you’ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.
     * 
     * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
     * 
     */
    public Optional<Output<Integer>> onDemandMaxPricePercentageOverLowestPrice() {
        return Optional.ofNullable(this.onDemandMaxPricePercentageOverLowestPrice);
    }

    /**
     * Indicate whether instance types must support On-Demand Instance Hibernation, either `true` or `false`. Default is `false`.
     * 
     */
    @Import(name="requireHibernateSupport")
    private @Nullable Output<Boolean> requireHibernateSupport;

    /**
     * @return Indicate whether instance types must support On-Demand Instance Hibernation, either `true` or `false`. Default is `false`.
     * 
     */
    public Optional<Output<Boolean>> requireHibernateSupport() {
        return Optional.ofNullable(this.requireHibernateSupport);
    }

    /**
     * Price protection threshold for Spot Instances. This is the maximum you’ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100.
     * 
     * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
     * 
     */
    @Import(name="spotMaxPricePercentageOverLowestPrice")
    private @Nullable Output<Integer> spotMaxPricePercentageOverLowestPrice;

    /**
     * @return Price protection threshold for Spot Instances. This is the maximum you’ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100.
     * 
     * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
     * 
     */
    public Optional<Output<Integer>> spotMaxPricePercentageOverLowestPrice() {
        return Optional.ofNullable(this.spotMaxPricePercentageOverLowestPrice);
    }

    /**
     * Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.
     * 
     */
    @Import(name="totalLocalStorageGb")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsTotalLocalStorageGbArgs> totalLocalStorageGb;

    /**
     * @return Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsTotalLocalStorageGbArgs>> totalLocalStorageGb() {
        return Optional.ofNullable(this.totalLocalStorageGb);
    }

    /**
     * Block describing the minimum and maximum number of vCPUs. Default is no maximum.
     * 
     */
    @Import(name="vcpuCount")
    private @Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsVcpuCountArgs> vcpuCount;

    /**
     * @return Block describing the minimum and maximum number of vCPUs. Default is no maximum.
     * 
     */
    public Optional<Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsVcpuCountArgs>> vcpuCount() {
        return Optional.ofNullable(this.vcpuCount);
    }

    private GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs() {}

    private GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs $) {
        this.acceleratorCount = $.acceleratorCount;
        this.acceleratorManufacturers = $.acceleratorManufacturers;
        this.acceleratorNames = $.acceleratorNames;
        this.acceleratorTotalMemoryMib = $.acceleratorTotalMemoryMib;
        this.acceleratorTypes = $.acceleratorTypes;
        this.allowedInstanceTypes = $.allowedInstanceTypes;
        this.bareMetal = $.bareMetal;
        this.baselineEbsBandwidthMbps = $.baselineEbsBandwidthMbps;
        this.burstablePerformance = $.burstablePerformance;
        this.cpuManufacturers = $.cpuManufacturers;
        this.excludedInstanceTypes = $.excludedInstanceTypes;
        this.instanceGenerations = $.instanceGenerations;
        this.localStorage = $.localStorage;
        this.localStorageTypes = $.localStorageTypes;
        this.memoryGibPerVcpu = $.memoryGibPerVcpu;
        this.memoryMib = $.memoryMib;
        this.networkBandwidthGbps = $.networkBandwidthGbps;
        this.networkInterfaceCount = $.networkInterfaceCount;
        this.onDemandMaxPricePercentageOverLowestPrice = $.onDemandMaxPricePercentageOverLowestPrice;
        this.requireHibernateSupport = $.requireHibernateSupport;
        this.spotMaxPricePercentageOverLowestPrice = $.spotMaxPricePercentageOverLowestPrice;
        this.totalLocalStorageGb = $.totalLocalStorageGb;
        this.vcpuCount = $.vcpuCount;
    }

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

    public static final class Builder {
        private GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs $;

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

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

        /**
         * @param acceleratorCount Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder acceleratorCount(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorCountArgs> acceleratorCount) {
            $.acceleratorCount = acceleratorCount;
            return this;
        }

        /**
         * @param acceleratorCount Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder acceleratorCount(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorCountArgs acceleratorCount) {
            return acceleratorCount(Output.of(acceleratorCount));
        }

        /**
         * @param acceleratorManufacturers List of accelerator manufacturer names. Default is any manufacturer.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorManufacturers(@Nullable Output<List<String>> acceleratorManufacturers) {
            $.acceleratorManufacturers = acceleratorManufacturers;
            return this;
        }

        /**
         * @param acceleratorManufacturers List of accelerator manufacturer names. Default is any manufacturer.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorManufacturers(List<String> acceleratorManufacturers) {
            return acceleratorManufacturers(Output.of(acceleratorManufacturers));
        }

        /**
         * @param acceleratorManufacturers List of accelerator manufacturer names. Default is any manufacturer.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorManufacturers(String... acceleratorManufacturers) {
            return acceleratorManufacturers(List.of(acceleratorManufacturers));
        }

        /**
         * @param acceleratorNames List of accelerator names. Default is any acclerator.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorNames(@Nullable Output<List<String>> acceleratorNames) {
            $.acceleratorNames = acceleratorNames;
            return this;
        }

        /**
         * @param acceleratorNames List of accelerator names. Default is any acclerator.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorNames(List<String> acceleratorNames) {
            return acceleratorNames(Output.of(acceleratorNames));
        }

        /**
         * @param acceleratorNames List of accelerator names. Default is any acclerator.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorNames(String... acceleratorNames) {
            return acceleratorNames(List.of(acceleratorNames));
        }

        /**
         * @param acceleratorTotalMemoryMib Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder acceleratorTotalMemoryMib(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorTotalMemoryMibArgs> acceleratorTotalMemoryMib) {
            $.acceleratorTotalMemoryMib = acceleratorTotalMemoryMib;
            return this;
        }

        /**
         * @param acceleratorTotalMemoryMib Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder acceleratorTotalMemoryMib(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsAcceleratorTotalMemoryMibArgs acceleratorTotalMemoryMib) {
            return acceleratorTotalMemoryMib(Output.of(acceleratorTotalMemoryMib));
        }

        /**
         * @param acceleratorTypes List of accelerator types. Default is any accelerator type.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorTypes(@Nullable Output<List<String>> acceleratorTypes) {
            $.acceleratorTypes = acceleratorTypes;
            return this;
        }

        /**
         * @param acceleratorTypes List of accelerator types. Default is any accelerator type.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorTypes(List<String> acceleratorTypes) {
            return acceleratorTypes(Output.of(acceleratorTypes));
        }

        /**
         * @param acceleratorTypes List of accelerator types. Default is any accelerator type.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder acceleratorTypes(String... acceleratorTypes) {
            return acceleratorTypes(List.of(acceleratorTypes));
        }

        /**
         * @param allowedInstanceTypes List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (\*), to allow an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.
         * 
         * &gt; **NOTE:** If you specify `allowed_instance_types`, you can&#39;t specify `excluded_instance_types`.
         * 
         * @return builder
         * 
         */
        public Builder allowedInstanceTypes(@Nullable Output<List<String>> allowedInstanceTypes) {
            $.allowedInstanceTypes = allowedInstanceTypes;
            return this;
        }

        /**
         * @param allowedInstanceTypes List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (\*), to allow an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.
         * 
         * &gt; **NOTE:** If you specify `allowed_instance_types`, you can&#39;t specify `excluded_instance_types`.
         * 
         * @return builder
         * 
         */
        public Builder allowedInstanceTypes(List<String> allowedInstanceTypes) {
            return allowedInstanceTypes(Output.of(allowedInstanceTypes));
        }

        /**
         * @param allowedInstanceTypes List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (\*), to allow an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.
         * 
         * &gt; **NOTE:** If you specify `allowed_instance_types`, you can&#39;t specify `excluded_instance_types`.
         * 
         * @return builder
         * 
         */
        public Builder allowedInstanceTypes(String... allowedInstanceTypes) {
            return allowedInstanceTypes(List.of(allowedInstanceTypes));
        }

        /**
         * @param bareMetal Indicate whether bare metal instace types should be `included`, `excluded`, or `required`. Default is `excluded`.
         * 
         * @return builder
         * 
         */
        public Builder bareMetal(@Nullable Output<String> bareMetal) {
            $.bareMetal = bareMetal;
            return this;
        }

        /**
         * @param bareMetal Indicate whether bare metal instace types should be `included`, `excluded`, or `required`. Default is `excluded`.
         * 
         * @return builder
         * 
         */
        public Builder bareMetal(String bareMetal) {
            return bareMetal(Output.of(bareMetal));
        }

        /**
         * @param baselineEbsBandwidthMbps Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder baselineEbsBandwidthMbps(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsBaselineEbsBandwidthMbpsArgs> baselineEbsBandwidthMbps) {
            $.baselineEbsBandwidthMbps = baselineEbsBandwidthMbps;
            return this;
        }

        /**
         * @param baselineEbsBandwidthMbps Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder baselineEbsBandwidthMbps(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsBaselineEbsBandwidthMbpsArgs baselineEbsBandwidthMbps) {
            return baselineEbsBandwidthMbps(Output.of(baselineEbsBandwidthMbps));
        }

        /**
         * @param burstablePerformance Indicate whether burstable performance instance types should be `included`, `excluded`, or `required`. Default is `excluded`.
         * 
         * @return builder
         * 
         */
        public Builder burstablePerformance(@Nullable Output<String> burstablePerformance) {
            $.burstablePerformance = burstablePerformance;
            return this;
        }

        /**
         * @param burstablePerformance Indicate whether burstable performance instance types should be `included`, `excluded`, or `required`. Default is `excluded`.
         * 
         * @return builder
         * 
         */
        public Builder burstablePerformance(String burstablePerformance) {
            return burstablePerformance(Output.of(burstablePerformance));
        }

        /**
         * @param cpuManufacturers List of CPU manufacturer names. Default is any manufacturer.
         * 
         * &gt; **NOTE:** Don&#39;t confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder cpuManufacturers(@Nullable Output<List<String>> cpuManufacturers) {
            $.cpuManufacturers = cpuManufacturers;
            return this;
        }

        /**
         * @param cpuManufacturers List of CPU manufacturer names. Default is any manufacturer.
         * 
         * &gt; **NOTE:** Don&#39;t confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder cpuManufacturers(List<String> cpuManufacturers) {
            return cpuManufacturers(Output.of(cpuManufacturers));
        }

        /**
         * @param cpuManufacturers List of CPU manufacturer names. Default is any manufacturer.
         * 
         * &gt; **NOTE:** Don&#39;t confuse the CPU hardware manufacturer with the CPU hardware architecture. Instances will be launched with a compatible CPU architecture based on the Amazon Machine Image (AMI) that you specify in your launch template.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder cpuManufacturers(String... cpuManufacturers) {
            return cpuManufacturers(List.of(cpuManufacturers));
        }

        /**
         * @param excludedInstanceTypes List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (\*), to exclude an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.
         * 
         * &gt; **NOTE:** If you specify `excluded_instance_types`, you can&#39;t specify `allowed_instance_types`.
         * 
         * @return builder
         * 
         */
        public Builder excludedInstanceTypes(@Nullable Output<List<String>> excludedInstanceTypes) {
            $.excludedInstanceTypes = excludedInstanceTypes;
            return this;
        }

        /**
         * @param excludedInstanceTypes List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (\*), to exclude an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.
         * 
         * &gt; **NOTE:** If you specify `excluded_instance_types`, you can&#39;t specify `allowed_instance_types`.
         * 
         * @return builder
         * 
         */
        public Builder excludedInstanceTypes(List<String> excludedInstanceTypes) {
            return excludedInstanceTypes(Output.of(excludedInstanceTypes));
        }

        /**
         * @param excludedInstanceTypes List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (\*), to exclude an instance type, size, or generation. The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`. For example, if you specify `c5*`, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify `m5a.*`, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.
         * 
         * &gt; **NOTE:** If you specify `excluded_instance_types`, you can&#39;t specify `allowed_instance_types`.
         * 
         * @return builder
         * 
         */
        public Builder excludedInstanceTypes(String... excludedInstanceTypes) {
            return excludedInstanceTypes(List.of(excludedInstanceTypes));
        }

        /**
         * @param instanceGenerations List of instance generation names. Default is any generation.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder instanceGenerations(@Nullable Output<List<String>> instanceGenerations) {
            $.instanceGenerations = instanceGenerations;
            return this;
        }

        /**
         * @param instanceGenerations List of instance generation names. Default is any generation.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder instanceGenerations(List<String> instanceGenerations) {
            return instanceGenerations(Output.of(instanceGenerations));
        }

        /**
         * @param instanceGenerations List of instance generation names. Default is any generation.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder instanceGenerations(String... instanceGenerations) {
            return instanceGenerations(List.of(instanceGenerations));
        }

        /**
         * @param localStorage Indicate whether instance types with local storage volumes are `included`, `excluded`, or `required`. Default is `included`.
         * 
         * @return builder
         * 
         */
        public Builder localStorage(@Nullable Output<String> localStorage) {
            $.localStorage = localStorage;
            return this;
        }

        /**
         * @param localStorage Indicate whether instance types with local storage volumes are `included`, `excluded`, or `required`. Default is `included`.
         * 
         * @return builder
         * 
         */
        public Builder localStorage(String localStorage) {
            return localStorage(Output.of(localStorage));
        }

        /**
         * @param localStorageTypes List of local storage type names. Default any storage type.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder localStorageTypes(@Nullable Output<List<String>> localStorageTypes) {
            $.localStorageTypes = localStorageTypes;
            return this;
        }

        /**
         * @param localStorageTypes List of local storage type names. Default any storage type.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder localStorageTypes(List<String> localStorageTypes) {
            return localStorageTypes(Output.of(localStorageTypes));
        }

        /**
         * @param localStorageTypes List of local storage type names. Default any storage type.
         * ```java
         * package generated_program;
         * 
         * import com.pulumi.Context;
         * import com.pulumi.Pulumi;
         * import com.pulumi.core.Output;
         * import java.util.List;
         * import java.util.ArrayList;
         * import java.util.Map;
         * import java.io.File;
         * import java.nio.file.Files;
         * import java.nio.file.Paths;
         * 
         * public class App {
         *     public static void main(String[] args) {
         *         Pulumi.run(App::stack);
         *     }
         * 
         *     public static void stack(Context ctx) {
         *     }
         * }
         * ```
         * 
         * @return builder
         * 
         */
        public Builder localStorageTypes(String... localStorageTypes) {
            return localStorageTypes(List.of(localStorageTypes));
        }

        /**
         * @param memoryGibPerVcpu Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder memoryGibPerVcpu(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryGibPerVcpuArgs> memoryGibPerVcpu) {
            $.memoryGibPerVcpu = memoryGibPerVcpu;
            return this;
        }

        /**
         * @param memoryGibPerVcpu Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder memoryGibPerVcpu(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryGibPerVcpuArgs memoryGibPerVcpu) {
            return memoryGibPerVcpu(Output.of(memoryGibPerVcpu));
        }

        /**
         * @param memoryMib Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.
         * 
         * @return builder
         * 
         */
        public Builder memoryMib(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryMibArgs> memoryMib) {
            $.memoryMib = memoryMib;
            return this;
        }

        /**
         * @param memoryMib Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.
         * 
         * @return builder
         * 
         */
        public Builder memoryMib(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsMemoryMibArgs memoryMib) {
            return memoryMib(Output.of(memoryMib));
        }

        /**
         * @param networkBandwidthGbps Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder networkBandwidthGbps(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkBandwidthGbpsArgs> networkBandwidthGbps) {
            $.networkBandwidthGbps = networkBandwidthGbps;
            return this;
        }

        /**
         * @param networkBandwidthGbps Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder networkBandwidthGbps(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkBandwidthGbpsArgs networkBandwidthGbps) {
            return networkBandwidthGbps(Output.of(networkBandwidthGbps));
        }

        /**
         * @param networkInterfaceCount Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder networkInterfaceCount(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkInterfaceCountArgs> networkInterfaceCount) {
            $.networkInterfaceCount = networkInterfaceCount;
            return this;
        }

        /**
         * @param networkInterfaceCount Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder networkInterfaceCount(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsNetworkInterfaceCountArgs networkInterfaceCount) {
            return networkInterfaceCount(Output.of(networkInterfaceCount));
        }

        /**
         * @param onDemandMaxPricePercentageOverLowestPrice Price protection threshold for On-Demand Instances. This is the maximum you’ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.
         * 
         * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
         * 
         * @return builder
         * 
         */
        public Builder onDemandMaxPricePercentageOverLowestPrice(@Nullable Output<Integer> onDemandMaxPricePercentageOverLowestPrice) {
            $.onDemandMaxPricePercentageOverLowestPrice = onDemandMaxPricePercentageOverLowestPrice;
            return this;
        }

        /**
         * @param onDemandMaxPricePercentageOverLowestPrice Price protection threshold for On-Demand Instances. This is the maximum you’ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.
         * 
         * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
         * 
         * @return builder
         * 
         */
        public Builder onDemandMaxPricePercentageOverLowestPrice(Integer onDemandMaxPricePercentageOverLowestPrice) {
            return onDemandMaxPricePercentageOverLowestPrice(Output.of(onDemandMaxPricePercentageOverLowestPrice));
        }

        /**
         * @param requireHibernateSupport Indicate whether instance types must support On-Demand Instance Hibernation, either `true` or `false`. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder requireHibernateSupport(@Nullable Output<Boolean> requireHibernateSupport) {
            $.requireHibernateSupport = requireHibernateSupport;
            return this;
        }

        /**
         * @param requireHibernateSupport Indicate whether instance types must support On-Demand Instance Hibernation, either `true` or `false`. Default is `false`.
         * 
         * @return builder
         * 
         */
        public Builder requireHibernateSupport(Boolean requireHibernateSupport) {
            return requireHibernateSupport(Output.of(requireHibernateSupport));
        }

        /**
         * @param spotMaxPricePercentageOverLowestPrice Price protection threshold for Spot Instances. This is the maximum you’ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100.
         * 
         * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
         * 
         * @return builder
         * 
         */
        public Builder spotMaxPricePercentageOverLowestPrice(@Nullable Output<Integer> spotMaxPricePercentageOverLowestPrice) {
            $.spotMaxPricePercentageOverLowestPrice = spotMaxPricePercentageOverLowestPrice;
            return this;
        }

        /**
         * @param spotMaxPricePercentageOverLowestPrice Price protection threshold for Spot Instances. This is the maximum you’ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100.
         * 
         * If you set DesiredCapacityType to vcpu or memory-mib, the price protection threshold is applied based on the per vCPU or per memory price instead of the per instance price.
         * 
         * @return builder
         * 
         */
        public Builder spotMaxPricePercentageOverLowestPrice(Integer spotMaxPricePercentageOverLowestPrice) {
            return spotMaxPricePercentageOverLowestPrice(Output.of(spotMaxPricePercentageOverLowestPrice));
        }

        /**
         * @param totalLocalStorageGb Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder totalLocalStorageGb(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsTotalLocalStorageGbArgs> totalLocalStorageGb) {
            $.totalLocalStorageGb = totalLocalStorageGb;
            return this;
        }

        /**
         * @param totalLocalStorageGb Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.
         * 
         * @return builder
         * 
         */
        public Builder totalLocalStorageGb(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsTotalLocalStorageGbArgs totalLocalStorageGb) {
            return totalLocalStorageGb(Output.of(totalLocalStorageGb));
        }

        /**
         * @param vcpuCount Block describing the minimum and maximum number of vCPUs. Default is no maximum.
         * 
         * @return builder
         * 
         */
        public Builder vcpuCount(@Nullable Output<GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsVcpuCountArgs> vcpuCount) {
            $.vcpuCount = vcpuCount;
            return this;
        }

        /**
         * @param vcpuCount Block describing the minimum and maximum number of vCPUs. Default is no maximum.
         * 
         * @return builder
         * 
         */
        public Builder vcpuCount(GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsVcpuCountArgs vcpuCount) {
            return vcpuCount(Output.of(vcpuCount));
        }

        public GroupMixedInstancesPolicyLaunchTemplateOverrideInstanceRequirementsArgs build() {
            return $;
        }
    }

}
