{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.EC2.Types.InstanceRequirementsRequest
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EC2.Types.InstanceRequirementsRequest where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.AcceleratorCountRequest
import Amazonka.EC2.Types.AcceleratorManufacturer
import Amazonka.EC2.Types.AcceleratorName
import Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest
import Amazonka.EC2.Types.AcceleratorType
import Amazonka.EC2.Types.BareMetal
import Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest
import Amazonka.EC2.Types.BurstablePerformance
import Amazonka.EC2.Types.CpuManufacturer
import Amazonka.EC2.Types.InstanceGeneration
import Amazonka.EC2.Types.LocalStorage
import Amazonka.EC2.Types.LocalStorageType
import Amazonka.EC2.Types.MemoryGiBPerVCpuRequest
import Amazonka.EC2.Types.MemoryMiBRequest
import Amazonka.EC2.Types.NetworkBandwidthGbpsRequest
import Amazonka.EC2.Types.NetworkInterfaceCountRequest
import Amazonka.EC2.Types.TotalLocalStorageGBRequest
import Amazonka.EC2.Types.VCpuCountRangeRequest
import qualified Amazonka.Prelude as Prelude

-- | The attributes for the instance types. When you specify instance
-- attributes, Amazon EC2 will identify instance types with these
-- attributes.
--
-- When you specify multiple attributes, you get instance types that
-- satisfy all of the specified attributes. If you specify multiple values
-- for an attribute, you get instance types that satisfy any of the
-- specified values.
--
-- To limit the list of instance types from which Amazon EC2 can identify
-- matching instance types, you can use one of the following parameters,
-- but not both in the same request:
--
-- -   @AllowedInstanceTypes@ - The instance types to include in the list.
--     All other instance types are ignored, even if they match your
--     specified attributes.
--
-- -   @ExcludedInstanceTypes@ - The instance types to exclude from the
--     list, even if they match your specified attributes.
--
-- You must specify @VCpuCount@ and @MemoryMiB@. All other attributes are
-- optional. Any unspecified optional attribute is set to its default.
--
-- For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for EC2 Fleet>,
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for Spot Fleet>,
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html Spot placement score>
-- in the /Amazon EC2 User Guide/.
--
-- /See:/ 'newInstanceRequirementsRequest' smart constructor.
data InstanceRequirementsRequest = InstanceRequirementsRequest'
  { -- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
    -- Web Services Inferentia chips) on an instance.
    --
    -- To exclude accelerator-enabled instance types, set @Max@ to @0@.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest -> Maybe AcceleratorCountRequest
acceleratorCount :: Prelude.Maybe AcceleratorCountRequest,
    -- | Indicates whether instance types must have accelerators by specific
    -- manufacturers.
    --
    -- -   For instance types with NVIDIA devices, specify @nvidia@.
    --
    -- -   For instance types with AMD devices, specify @amd@.
    --
    -- -   For instance types with Amazon Web Services devices, specify
    --     @amazon-web-services@.
    --
    -- -   For instance types with Xilinx devices, specify @xilinx@.
    --
    -- Default: Any manufacturer
    InstanceRequirementsRequest -> Maybe [AcceleratorManufacturer]
acceleratorManufacturers :: Prelude.Maybe [AcceleratorManufacturer],
    -- | The accelerators that must be on the instance type.
    --
    -- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
    --
    -- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
    --
    -- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
    --
    -- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
    --
    -- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
    --
    -- -   For instance types with AMD Radeon Pro V520 GPUs, specify
    --     @radeon-pro-v520@.
    --
    -- -   For instance types with Xilinx VU9P FPGAs, specify @ vu9p@.
    --
    -- -   For instance types with Amazon Web Services Inferentia chips,
    --     specify @inferentia@.
    --
    -- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
    --
    -- Default: Any accelerator
    InstanceRequirementsRequest -> Maybe [AcceleratorName]
acceleratorNames :: Prelude.Maybe [AcceleratorName],
    -- | The minimum and maximum amount of total accelerator memory, in MiB.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest
-> Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB :: Prelude.Maybe AcceleratorTotalMemoryMiBRequest,
    -- | The accelerator types that must be on the instance type.
    --
    -- -   To include instance types with GPU hardware, specify @gpu@.
    --
    -- -   To include instance types with FPGA hardware, specify @fpga@.
    --
    -- -   To include instance types with inference hardware, specify
    --     @inference@.
    --
    -- Default: Any accelerator type
    InstanceRequirementsRequest -> Maybe [AcceleratorType]
acceleratorTypes :: Prelude.Maybe [AcceleratorType],
    -- | The 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*@,Amazon EC2 will allow the entire C5
    -- instance family, which includes all C5a and C5n instance types. If you
    -- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
    -- not the M5n instance types.
    --
    -- If you specify @AllowedInstanceTypes@, you can\'t specify
    -- @ExcludedInstanceTypes@.
    --
    -- Default: All instance types
    InstanceRequirementsRequest -> Maybe [Text]
allowedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | Indicates whether bare metal instance types must be included, excluded,
    -- or required.
    --
    -- -   To include bare metal instance types, specify @included@.
    --
    -- -   To require only bare metal instance types, specify @required@.
    --
    -- -   To exclude bare metal instance types, specify @excluded@.
    --
    -- Default: @excluded@
    InstanceRequirementsRequest -> Maybe BareMetal
bareMetal :: Prelude.Maybe BareMetal,
    -- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
    -- more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
    -- in the /Amazon EC2 User Guide/.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest
-> Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps :: Prelude.Maybe BaselineEbsBandwidthMbpsRequest,
    -- | Indicates whether burstable performance T instance types are included,
    -- excluded, or required. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
    --
    -- -   To include burstable performance instance types, specify @included@.
    --
    -- -   To require only burstable performance instance types, specify
    --     @required@.
    --
    -- -   To exclude burstable performance instance types, specify @excluded@.
    --
    -- Default: @excluded@
    InstanceRequirementsRequest -> Maybe BurstablePerformance
burstablePerformance :: Prelude.Maybe BurstablePerformance,
    -- | The CPU manufacturers to include.
    --
    -- -   For instance types with Intel CPUs, specify @intel@.
    --
    -- -   For instance types with AMD CPUs, specify @amd@.
    --
    -- -   For instance types with Amazon Web Services CPUs, specify
    --     @amazon-web-services@.
    --
    -- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
    -- will be launched with a compatible CPU architecture based on the Amazon
    -- Machine Image (AMI) that you specify in your launch template.
    --
    -- Default: Any manufacturer
    InstanceRequirementsRequest -> Maybe [CpuManufacturer]
cpuManufacturers :: Prelude.Maybe [CpuManufacturer],
    -- | The instance types to exclude.
    --
    -- You can use strings with one or more wild cards, represented by an
    -- asterisk (@*@), to exclude an instance family, type, size, or
    -- generation. The following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@,
    -- @r*@, @*3*@.
    --
    -- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
    -- instance family, which includes all C5a and C5n instance types. If you
    -- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
    -- not the M5n instance types.
    --
    -- If you specify @ExcludedInstanceTypes@, you can\'t specify
    -- @AllowedInstanceTypes@.
    --
    -- Default: No excluded instance types
    InstanceRequirementsRequest -> Maybe [Text]
excludedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | Indicates whether current or previous generation instance types are
    -- included. The current generation instance types are recommended for use.
    -- Current generation instance types are typically the latest two to three
    -- generations in each instance family. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
    -- in the /Amazon EC2 User Guide/.
    --
    -- For current generation instance types, specify @current@.
    --
    -- For previous generation instance types, specify @previous@.
    --
    -- Default: Current and previous generation instance types
    InstanceRequirementsRequest -> Maybe [InstanceGeneration]
instanceGenerations :: Prelude.Maybe [InstanceGeneration],
    -- | Indicates whether instance types with instance store volumes are
    -- included, excluded, or required. For more information,
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
    -- in the /Amazon EC2 User Guide/.
    --
    -- -   To include instance types with instance store volumes, specify
    --     @included@.
    --
    -- -   To require only instance types with instance store volumes, specify
    --     @required@.
    --
    -- -   To exclude instance types with instance store volumes, specify
    --     @excluded@.
    --
    -- Default: @included@
    InstanceRequirementsRequest -> Maybe LocalStorage
localStorage :: Prelude.Maybe LocalStorage,
    -- | The type of local storage that is required.
    --
    -- -   For instance types with hard disk drive (HDD) storage, specify
    --     @hdd@.
    --
    -- -   For instance types with solid state drive (SSD) storage, specify
    --     @ssd@.
    --
    -- Default: @hdd@ and @ssd@
    InstanceRequirementsRequest -> Maybe [LocalStorageType]
localStorageTypes :: Prelude.Maybe [LocalStorageType],
    -- | The minimum and maximum amount of memory per vCPU, in GiB.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest -> Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu :: Prelude.Maybe MemoryGiBPerVCpuRequest,
    -- | The minimum and maximum amount of network bandwidth, in gigabits per
    -- second (Gbps).
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest -> Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps :: Prelude.Maybe NetworkBandwidthGbpsRequest,
    -- | The minimum and maximum number of network interfaces.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest -> Maybe NetworkInterfaceCountRequest
networkInterfaceCount :: Prelude.Maybe NetworkInterfaceCountRequest,
    -- | The price protection threshold for On-Demand Instances. This is the
    -- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
    -- above the least expensive current generation M, C, or R instance type
    -- with your specified attributes. When Amazon EC2 selects instance types
    -- with your attributes, it excludes instance types priced above your
    -- threshold.
    --
    -- The parameter accepts an integer, which Amazon EC2 interprets as a
    -- percentage.
    --
    -- To turn off price protection, specify a high value, such as @999999@.
    --
    -- This parameter is not supported for
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
    -- and
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
    --
    -- If you set @TargetCapacityUnitType@ 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.
    --
    -- Default: @20@
    InstanceRequirementsRequest -> Maybe Int
onDemandMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Int,
    -- | Indicates whether instance types must support hibernation for On-Demand
    -- Instances.
    --
    -- This parameter is not supported for
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
    --
    -- Default: @false@
    InstanceRequirementsRequest -> Maybe Bool
requireHibernateSupport :: Prelude.Maybe Prelude.Bool,
    -- | The price protection threshold for Spot Instance. This is the maximum
    -- you’ll pay for an Spot Instance, expressed as a percentage above the
    -- least expensive current generation M, C, or R instance type with your
    -- specified attributes. When Amazon EC2 selects instance types with your
    -- attributes, it excludes instance types priced above your threshold.
    --
    -- The parameter accepts an integer, which Amazon EC2 interprets as a
    -- percentage.
    --
    -- To turn off price protection, specify a high value, such as @999999@.
    --
    -- This parameter is not supported for
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
    -- and
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
    --
    -- If you set @TargetCapacityUnitType@ 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.
    --
    -- Default: @100@
    InstanceRequirementsRequest -> Maybe Int
spotMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Int,
    -- | The minimum and maximum amount of total local storage, in GB.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirementsRequest -> Maybe TotalLocalStorageGBRequest
totalLocalStorageGB :: Prelude.Maybe TotalLocalStorageGBRequest,
    -- | The minimum and maximum number of vCPUs.
    InstanceRequirementsRequest -> VCpuCountRangeRequest
vCpuCount :: VCpuCountRangeRequest,
    -- | The minimum and maximum amount of memory, in MiB.
    InstanceRequirementsRequest -> MemoryMiBRequest
memoryMiB :: MemoryMiBRequest
  }
  deriving (InstanceRequirementsRequest -> InstanceRequirementsRequest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstanceRequirementsRequest -> InstanceRequirementsRequest -> Bool
$c/= :: InstanceRequirementsRequest -> InstanceRequirementsRequest -> Bool
== :: InstanceRequirementsRequest -> InstanceRequirementsRequest -> Bool
$c== :: InstanceRequirementsRequest -> InstanceRequirementsRequest -> Bool
Prelude.Eq, ReadPrec [InstanceRequirementsRequest]
ReadPrec InstanceRequirementsRequest
Int -> ReadS InstanceRequirementsRequest
ReadS [InstanceRequirementsRequest]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstanceRequirementsRequest]
$creadListPrec :: ReadPrec [InstanceRequirementsRequest]
readPrec :: ReadPrec InstanceRequirementsRequest
$creadPrec :: ReadPrec InstanceRequirementsRequest
readList :: ReadS [InstanceRequirementsRequest]
$creadList :: ReadS [InstanceRequirementsRequest]
readsPrec :: Int -> ReadS InstanceRequirementsRequest
$creadsPrec :: Int -> ReadS InstanceRequirementsRequest
Prelude.Read, Int -> InstanceRequirementsRequest -> ShowS
[InstanceRequirementsRequest] -> ShowS
InstanceRequirementsRequest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstanceRequirementsRequest] -> ShowS
$cshowList :: [InstanceRequirementsRequest] -> ShowS
show :: InstanceRequirementsRequest -> String
$cshow :: InstanceRequirementsRequest -> String
showsPrec :: Int -> InstanceRequirementsRequest -> ShowS
$cshowsPrec :: Int -> InstanceRequirementsRequest -> ShowS
Prelude.Show, forall x.
Rep InstanceRequirementsRequest x -> InstanceRequirementsRequest
forall x.
InstanceRequirementsRequest -> Rep InstanceRequirementsRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep InstanceRequirementsRequest x -> InstanceRequirementsRequest
$cfrom :: forall x.
InstanceRequirementsRequest -> Rep InstanceRequirementsRequest x
Prelude.Generic)

-- |
-- Create a value of 'InstanceRequirementsRequest' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'acceleratorCount', 'instanceRequirementsRequest_acceleratorCount' - The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
-- Web Services Inferentia chips) on an instance.
--
-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
--
-- Default: No minimum or maximum limits
--
-- 'acceleratorManufacturers', 'instanceRequirementsRequest_acceleratorManufacturers' - Indicates whether instance types must have accelerators by specific
-- manufacturers.
--
-- -   For instance types with NVIDIA devices, specify @nvidia@.
--
-- -   For instance types with AMD devices, specify @amd@.
--
-- -   For instance types with Amazon Web Services devices, specify
--     @amazon-web-services@.
--
-- -   For instance types with Xilinx devices, specify @xilinx@.
--
-- Default: Any manufacturer
--
-- 'acceleratorNames', 'instanceRequirementsRequest_acceleratorNames' - The accelerators that must be on the instance type.
--
-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
--
-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
--
-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
--
-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
--
-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
--
-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
--     @radeon-pro-v520@.
--
-- -   For instance types with Xilinx VU9P FPGAs, specify @ vu9p@.
--
-- -   For instance types with Amazon Web Services Inferentia chips,
--     specify @inferentia@.
--
-- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
--
-- Default: Any accelerator
--
-- 'acceleratorTotalMemoryMiB', 'instanceRequirementsRequest_acceleratorTotalMemoryMiB' - The minimum and maximum amount of total accelerator memory, in MiB.
--
-- Default: No minimum or maximum limits
--
-- 'acceleratorTypes', 'instanceRequirementsRequest_acceleratorTypes' - The accelerator types that must be on the instance type.
--
-- -   To include instance types with GPU hardware, specify @gpu@.
--
-- -   To include instance types with FPGA hardware, specify @fpga@.
--
-- -   To include instance types with inference hardware, specify
--     @inference@.
--
-- Default: Any accelerator type
--
-- 'allowedInstanceTypes', 'instanceRequirementsRequest_allowedInstanceTypes' - The 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*@,Amazon EC2 will allow the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
-- not the M5n instance types.
--
-- If you specify @AllowedInstanceTypes@, you can\'t specify
-- @ExcludedInstanceTypes@.
--
-- Default: All instance types
--
-- 'bareMetal', 'instanceRequirementsRequest_bareMetal' - Indicates whether bare metal instance types must be included, excluded,
-- or required.
--
-- -   To include bare metal instance types, specify @included@.
--
-- -   To require only bare metal instance types, specify @required@.
--
-- -   To exclude bare metal instance types, specify @excluded@.
--
-- Default: @excluded@
--
-- 'baselineEbsBandwidthMbps', 'instanceRequirementsRequest_baselineEbsBandwidthMbps' - The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
-- more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
-- in the /Amazon EC2 User Guide/.
--
-- Default: No minimum or maximum limits
--
-- 'burstablePerformance', 'instanceRequirementsRequest_burstablePerformance' - Indicates whether burstable performance T instance types are included,
-- excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
--
-- -   To include burstable performance instance types, specify @included@.
--
-- -   To require only burstable performance instance types, specify
--     @required@.
--
-- -   To exclude burstable performance instance types, specify @excluded@.
--
-- Default: @excluded@
--
-- 'cpuManufacturers', 'instanceRequirementsRequest_cpuManufacturers' - The CPU manufacturers to include.
--
-- -   For instance types with Intel CPUs, specify @intel@.
--
-- -   For instance types with AMD CPUs, specify @amd@.
--
-- -   For instance types with Amazon Web Services CPUs, specify
--     @amazon-web-services@.
--
-- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
-- will be launched with a compatible CPU architecture based on the Amazon
-- Machine Image (AMI) that you specify in your launch template.
--
-- Default: Any manufacturer
--
-- 'excludedInstanceTypes', 'instanceRequirementsRequest_excludedInstanceTypes' - The instance types to exclude.
--
-- You can use strings with one or more wild cards, represented by an
-- asterisk (@*@), to exclude an instance family, type, size, or
-- generation. The following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@,
-- @r*@, @*3*@.
--
-- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
-- not the M5n instance types.
--
-- If you specify @ExcludedInstanceTypes@, you can\'t specify
-- @AllowedInstanceTypes@.
--
-- Default: No excluded instance types
--
-- 'instanceGenerations', 'instanceRequirementsRequest_instanceGenerations' - Indicates whether current or previous generation instance types are
-- included. The current generation instance types are recommended for use.
-- Current generation instance types are typically the latest two to three
-- generations in each instance family. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
-- in the /Amazon EC2 User Guide/.
--
-- For current generation instance types, specify @current@.
--
-- For previous generation instance types, specify @previous@.
--
-- Default: Current and previous generation instance types
--
-- 'localStorage', 'instanceRequirementsRequest_localStorage' - Indicates whether instance types with instance store volumes are
-- included, excluded, or required. For more information,
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
-- in the /Amazon EC2 User Guide/.
--
-- -   To include instance types with instance store volumes, specify
--     @included@.
--
-- -   To require only instance types with instance store volumes, specify
--     @required@.
--
-- -   To exclude instance types with instance store volumes, specify
--     @excluded@.
--
-- Default: @included@
--
-- 'localStorageTypes', 'instanceRequirementsRequest_localStorageTypes' - The type of local storage that is required.
--
-- -   For instance types with hard disk drive (HDD) storage, specify
--     @hdd@.
--
-- -   For instance types with solid state drive (SSD) storage, specify
--     @ssd@.
--
-- Default: @hdd@ and @ssd@
--
-- 'memoryGiBPerVCpu', 'instanceRequirementsRequest_memoryGiBPerVCpu' - The minimum and maximum amount of memory per vCPU, in GiB.
--
-- Default: No minimum or maximum limits
--
-- 'networkBandwidthGbps', 'instanceRequirementsRequest_networkBandwidthGbps' - The minimum and maximum amount of network bandwidth, in gigabits per
-- second (Gbps).
--
-- Default: No minimum or maximum limits
--
-- 'networkInterfaceCount', 'instanceRequirementsRequest_networkInterfaceCount' - The minimum and maximum number of network interfaces.
--
-- Default: No minimum or maximum limits
--
-- 'onDemandMaxPricePercentageOverLowestPrice', 'instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice' - The price protection threshold for On-Demand Instances. This is the
-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
-- above the least expensive current generation M, C, or R instance type
-- with your specified attributes. When Amazon EC2 selects instance types
-- with your attributes, it excludes instance types priced above your
-- threshold.
--
-- The parameter accepts an integer, which Amazon EC2 interprets as a
-- percentage.
--
-- To turn off price protection, specify a high value, such as @999999@.
--
-- This parameter is not supported for
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
--
-- If you set @TargetCapacityUnitType@ 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.
--
-- Default: @20@
--
-- 'requireHibernateSupport', 'instanceRequirementsRequest_requireHibernateSupport' - Indicates whether instance types must support hibernation for On-Demand
-- Instances.
--
-- This parameter is not supported for
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
--
-- Default: @false@
--
-- 'spotMaxPricePercentageOverLowestPrice', 'instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice' - The price protection threshold for Spot Instance. This is the maximum
-- you’ll pay for an Spot Instance, expressed as a percentage above the
-- least expensive current generation M, C, or R instance type with your
-- specified attributes. When Amazon EC2 selects instance types with your
-- attributes, it excludes instance types priced above your threshold.
--
-- The parameter accepts an integer, which Amazon EC2 interprets as a
-- percentage.
--
-- To turn off price protection, specify a high value, such as @999999@.
--
-- This parameter is not supported for
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
--
-- If you set @TargetCapacityUnitType@ 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.
--
-- Default: @100@
--
-- 'totalLocalStorageGB', 'instanceRequirementsRequest_totalLocalStorageGB' - The minimum and maximum amount of total local storage, in GB.
--
-- Default: No minimum or maximum limits
--
-- 'vCpuCount', 'instanceRequirementsRequest_vCpuCount' - The minimum and maximum number of vCPUs.
--
-- 'memoryMiB', 'instanceRequirementsRequest_memoryMiB' - The minimum and maximum amount of memory, in MiB.
newInstanceRequirementsRequest ::
  -- | 'vCpuCount'
  VCpuCountRangeRequest ->
  -- | 'memoryMiB'
  MemoryMiBRequest ->
  InstanceRequirementsRequest
newInstanceRequirementsRequest :: VCpuCountRangeRequest
-> MemoryMiBRequest -> InstanceRequirementsRequest
newInstanceRequirementsRequest
  VCpuCountRangeRequest
pVCpuCount_
  MemoryMiBRequest
pMemoryMiB_ =
    InstanceRequirementsRequest'
      { $sel:acceleratorCount:InstanceRequirementsRequest' :: Maybe AcceleratorCountRequest
acceleratorCount =
          forall a. Maybe a
Prelude.Nothing,
        $sel:acceleratorManufacturers:InstanceRequirementsRequest' :: Maybe [AcceleratorManufacturer]
acceleratorManufacturers = forall a. Maybe a
Prelude.Nothing,
        $sel:acceleratorNames:InstanceRequirementsRequest' :: Maybe [AcceleratorName]
acceleratorNames = forall a. Maybe a
Prelude.Nothing,
        $sel:acceleratorTotalMemoryMiB:InstanceRequirementsRequest' :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB = forall a. Maybe a
Prelude.Nothing,
        $sel:acceleratorTypes:InstanceRequirementsRequest' :: Maybe [AcceleratorType]
acceleratorTypes = forall a. Maybe a
Prelude.Nothing,
        $sel:allowedInstanceTypes:InstanceRequirementsRequest' :: Maybe [Text]
allowedInstanceTypes = forall a. Maybe a
Prelude.Nothing,
        $sel:bareMetal:InstanceRequirementsRequest' :: Maybe BareMetal
bareMetal = forall a. Maybe a
Prelude.Nothing,
        $sel:baselineEbsBandwidthMbps:InstanceRequirementsRequest' :: Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps = forall a. Maybe a
Prelude.Nothing,
        $sel:burstablePerformance:InstanceRequirementsRequest' :: Maybe BurstablePerformance
burstablePerformance = forall a. Maybe a
Prelude.Nothing,
        $sel:cpuManufacturers:InstanceRequirementsRequest' :: Maybe [CpuManufacturer]
cpuManufacturers = forall a. Maybe a
Prelude.Nothing,
        $sel:excludedInstanceTypes:InstanceRequirementsRequest' :: Maybe [Text]
excludedInstanceTypes = forall a. Maybe a
Prelude.Nothing,
        $sel:instanceGenerations:InstanceRequirementsRequest' :: Maybe [InstanceGeneration]
instanceGenerations = forall a. Maybe a
Prelude.Nothing,
        $sel:localStorage:InstanceRequirementsRequest' :: Maybe LocalStorage
localStorage = forall a. Maybe a
Prelude.Nothing,
        $sel:localStorageTypes:InstanceRequirementsRequest' :: Maybe [LocalStorageType]
localStorageTypes = forall a. Maybe a
Prelude.Nothing,
        $sel:memoryGiBPerVCpu:InstanceRequirementsRequest' :: Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu = forall a. Maybe a
Prelude.Nothing,
        $sel:networkBandwidthGbps:InstanceRequirementsRequest' :: Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps = forall a. Maybe a
Prelude.Nothing,
        $sel:networkInterfaceCount:InstanceRequirementsRequest' :: Maybe NetworkInterfaceCountRequest
networkInterfaceCount = forall a. Maybe a
Prelude.Nothing,
        $sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: Maybe Int
onDemandMaxPricePercentageOverLowestPrice =
          forall a. Maybe a
Prelude.Nothing,
        $sel:requireHibernateSupport:InstanceRequirementsRequest' :: Maybe Bool
requireHibernateSupport = forall a. Maybe a
Prelude.Nothing,
        $sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: Maybe Int
spotMaxPricePercentageOverLowestPrice =
          forall a. Maybe a
Prelude.Nothing,
        $sel:totalLocalStorageGB:InstanceRequirementsRequest' :: Maybe TotalLocalStorageGBRequest
totalLocalStorageGB = forall a. Maybe a
Prelude.Nothing,
        $sel:vCpuCount:InstanceRequirementsRequest' :: VCpuCountRangeRequest
vCpuCount = VCpuCountRangeRequest
pVCpuCount_,
        $sel:memoryMiB:InstanceRequirementsRequest' :: MemoryMiBRequest
memoryMiB = MemoryMiBRequest
pMemoryMiB_
      }

-- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
-- Web Services Inferentia chips) on an instance.
--
-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_acceleratorCount :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe AcceleratorCountRequest)
instanceRequirementsRequest_acceleratorCount :: Lens' InstanceRequirementsRequest (Maybe AcceleratorCountRequest)
instanceRequirementsRequest_acceleratorCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe AcceleratorCountRequest
acceleratorCount :: Maybe AcceleratorCountRequest
$sel:acceleratorCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe AcceleratorCountRequest
acceleratorCount} -> Maybe AcceleratorCountRequest
acceleratorCount) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe AcceleratorCountRequest
a -> InstanceRequirementsRequest
s {$sel:acceleratorCount:InstanceRequirementsRequest' :: Maybe AcceleratorCountRequest
acceleratorCount = Maybe AcceleratorCountRequest
a} :: InstanceRequirementsRequest)

-- | Indicates whether instance types must have accelerators by specific
-- manufacturers.
--
-- -   For instance types with NVIDIA devices, specify @nvidia@.
--
-- -   For instance types with AMD devices, specify @amd@.
--
-- -   For instance types with Amazon Web Services devices, specify
--     @amazon-web-services@.
--
-- -   For instance types with Xilinx devices, specify @xilinx@.
--
-- Default: Any manufacturer
instanceRequirementsRequest_acceleratorManufacturers :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [AcceleratorManufacturer])
instanceRequirementsRequest_acceleratorManufacturers :: Lens' InstanceRequirementsRequest (Maybe [AcceleratorManufacturer])
instanceRequirementsRequest_acceleratorManufacturers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [AcceleratorManufacturer]
acceleratorManufacturers :: Maybe [AcceleratorManufacturer]
$sel:acceleratorManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorManufacturer]
acceleratorManufacturers} -> Maybe [AcceleratorManufacturer]
acceleratorManufacturers) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [AcceleratorManufacturer]
a -> InstanceRequirementsRequest
s {$sel:acceleratorManufacturers:InstanceRequirementsRequest' :: Maybe [AcceleratorManufacturer]
acceleratorManufacturers = Maybe [AcceleratorManufacturer]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The accelerators that must be on the instance type.
--
-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
--
-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
--
-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
--
-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
--
-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
--
-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
--     @radeon-pro-v520@.
--
-- -   For instance types with Xilinx VU9P FPGAs, specify @ vu9p@.
--
-- -   For instance types with Amazon Web Services Inferentia chips,
--     specify @inferentia@.
--
-- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
--
-- Default: Any accelerator
instanceRequirementsRequest_acceleratorNames :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [AcceleratorName])
instanceRequirementsRequest_acceleratorNames :: Lens' InstanceRequirementsRequest (Maybe [AcceleratorName])
instanceRequirementsRequest_acceleratorNames = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [AcceleratorName]
acceleratorNames :: Maybe [AcceleratorName]
$sel:acceleratorNames:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorName]
acceleratorNames} -> Maybe [AcceleratorName]
acceleratorNames) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [AcceleratorName]
a -> InstanceRequirementsRequest
s {$sel:acceleratorNames:InstanceRequirementsRequest' :: Maybe [AcceleratorName]
acceleratorNames = Maybe [AcceleratorName]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The minimum and maximum amount of total accelerator memory, in MiB.
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_acceleratorTotalMemoryMiB :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe AcceleratorTotalMemoryMiBRequest)
instanceRequirementsRequest_acceleratorTotalMemoryMiB :: Lens'
  InstanceRequirementsRequest
  (Maybe AcceleratorTotalMemoryMiBRequest)
instanceRequirementsRequest_acceleratorTotalMemoryMiB = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB :: Maybe AcceleratorTotalMemoryMiBRequest
$sel:acceleratorTotalMemoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB} -> Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe AcceleratorTotalMemoryMiBRequest
a -> InstanceRequirementsRequest
s {$sel:acceleratorTotalMemoryMiB:InstanceRequirementsRequest' :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB = Maybe AcceleratorTotalMemoryMiBRequest
a} :: InstanceRequirementsRequest)

-- | The accelerator types that must be on the instance type.
--
-- -   To include instance types with GPU hardware, specify @gpu@.
--
-- -   To include instance types with FPGA hardware, specify @fpga@.
--
-- -   To include instance types with inference hardware, specify
--     @inference@.
--
-- Default: Any accelerator type
instanceRequirementsRequest_acceleratorTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [AcceleratorType])
instanceRequirementsRequest_acceleratorTypes :: Lens' InstanceRequirementsRequest (Maybe [AcceleratorType])
instanceRequirementsRequest_acceleratorTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [AcceleratorType]
acceleratorTypes :: Maybe [AcceleratorType]
$sel:acceleratorTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorType]
acceleratorTypes} -> Maybe [AcceleratorType]
acceleratorTypes) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [AcceleratorType]
a -> InstanceRequirementsRequest
s {$sel:acceleratorTypes:InstanceRequirementsRequest' :: Maybe [AcceleratorType]
acceleratorTypes = Maybe [AcceleratorType]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The 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*@,Amazon EC2 will allow the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
-- not the M5n instance types.
--
-- If you specify @AllowedInstanceTypes@, you can\'t specify
-- @ExcludedInstanceTypes@.
--
-- Default: All instance types
instanceRequirementsRequest_allowedInstanceTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [Prelude.Text])
instanceRequirementsRequest_allowedInstanceTypes :: Lens' InstanceRequirementsRequest (Maybe [Text])
instanceRequirementsRequest_allowedInstanceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [Text]
allowedInstanceTypes :: Maybe [Text]
$sel:allowedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
allowedInstanceTypes} -> Maybe [Text]
allowedInstanceTypes) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [Text]
a -> InstanceRequirementsRequest
s {$sel:allowedInstanceTypes:InstanceRequirementsRequest' :: Maybe [Text]
allowedInstanceTypes = Maybe [Text]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Indicates whether bare metal instance types must be included, excluded,
-- or required.
--
-- -   To include bare metal instance types, specify @included@.
--
-- -   To require only bare metal instance types, specify @required@.
--
-- -   To exclude bare metal instance types, specify @excluded@.
--
-- Default: @excluded@
instanceRequirementsRequest_bareMetal :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe BareMetal)
instanceRequirementsRequest_bareMetal :: Lens' InstanceRequirementsRequest (Maybe BareMetal)
instanceRequirementsRequest_bareMetal = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe BareMetal
bareMetal :: Maybe BareMetal
$sel:bareMetal:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BareMetal
bareMetal} -> Maybe BareMetal
bareMetal) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe BareMetal
a -> InstanceRequirementsRequest
s {$sel:bareMetal:InstanceRequirementsRequest' :: Maybe BareMetal
bareMetal = Maybe BareMetal
a} :: InstanceRequirementsRequest)

-- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
-- more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
-- in the /Amazon EC2 User Guide/.
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_baselineEbsBandwidthMbps :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe BaselineEbsBandwidthMbpsRequest)
instanceRequirementsRequest_baselineEbsBandwidthMbps :: Lens'
  InstanceRequirementsRequest (Maybe BaselineEbsBandwidthMbpsRequest)
instanceRequirementsRequest_baselineEbsBandwidthMbps = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps :: Maybe BaselineEbsBandwidthMbpsRequest
$sel:baselineEbsBandwidthMbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps} -> Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe BaselineEbsBandwidthMbpsRequest
a -> InstanceRequirementsRequest
s {$sel:baselineEbsBandwidthMbps:InstanceRequirementsRequest' :: Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps = Maybe BaselineEbsBandwidthMbpsRequest
a} :: InstanceRequirementsRequest)

-- | Indicates whether burstable performance T instance types are included,
-- excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
--
-- -   To include burstable performance instance types, specify @included@.
--
-- -   To require only burstable performance instance types, specify
--     @required@.
--
-- -   To exclude burstable performance instance types, specify @excluded@.
--
-- Default: @excluded@
instanceRequirementsRequest_burstablePerformance :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe BurstablePerformance)
instanceRequirementsRequest_burstablePerformance :: Lens' InstanceRequirementsRequest (Maybe BurstablePerformance)
instanceRequirementsRequest_burstablePerformance = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe BurstablePerformance
burstablePerformance :: Maybe BurstablePerformance
$sel:burstablePerformance:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BurstablePerformance
burstablePerformance} -> Maybe BurstablePerformance
burstablePerformance) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe BurstablePerformance
a -> InstanceRequirementsRequest
s {$sel:burstablePerformance:InstanceRequirementsRequest' :: Maybe BurstablePerformance
burstablePerformance = Maybe BurstablePerformance
a} :: InstanceRequirementsRequest)

-- | The CPU manufacturers to include.
--
-- -   For instance types with Intel CPUs, specify @intel@.
--
-- -   For instance types with AMD CPUs, specify @amd@.
--
-- -   For instance types with Amazon Web Services CPUs, specify
--     @amazon-web-services@.
--
-- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
-- will be launched with a compatible CPU architecture based on the Amazon
-- Machine Image (AMI) that you specify in your launch template.
--
-- Default: Any manufacturer
instanceRequirementsRequest_cpuManufacturers :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [CpuManufacturer])
instanceRequirementsRequest_cpuManufacturers :: Lens' InstanceRequirementsRequest (Maybe [CpuManufacturer])
instanceRequirementsRequest_cpuManufacturers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [CpuManufacturer]
cpuManufacturers :: Maybe [CpuManufacturer]
$sel:cpuManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [CpuManufacturer]
cpuManufacturers} -> Maybe [CpuManufacturer]
cpuManufacturers) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [CpuManufacturer]
a -> InstanceRequirementsRequest
s {$sel:cpuManufacturers:InstanceRequirementsRequest' :: Maybe [CpuManufacturer]
cpuManufacturers = Maybe [CpuManufacturer]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The instance types to exclude.
--
-- You can use strings with one or more wild cards, represented by an
-- asterisk (@*@), to exclude an instance family, type, size, or
-- generation. The following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@,
-- @r*@, @*3*@.
--
-- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
-- not the M5n instance types.
--
-- If you specify @ExcludedInstanceTypes@, you can\'t specify
-- @AllowedInstanceTypes@.
--
-- Default: No excluded instance types
instanceRequirementsRequest_excludedInstanceTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [Prelude.Text])
instanceRequirementsRequest_excludedInstanceTypes :: Lens' InstanceRequirementsRequest (Maybe [Text])
instanceRequirementsRequest_excludedInstanceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [Text]
excludedInstanceTypes :: Maybe [Text]
$sel:excludedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
excludedInstanceTypes} -> Maybe [Text]
excludedInstanceTypes) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [Text]
a -> InstanceRequirementsRequest
s {$sel:excludedInstanceTypes:InstanceRequirementsRequest' :: Maybe [Text]
excludedInstanceTypes = Maybe [Text]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Indicates whether current or previous generation instance types are
-- included. The current generation instance types are recommended for use.
-- Current generation instance types are typically the latest two to three
-- generations in each instance family. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
-- in the /Amazon EC2 User Guide/.
--
-- For current generation instance types, specify @current@.
--
-- For previous generation instance types, specify @previous@.
--
-- Default: Current and previous generation instance types
instanceRequirementsRequest_instanceGenerations :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [InstanceGeneration])
instanceRequirementsRequest_instanceGenerations :: Lens' InstanceRequirementsRequest (Maybe [InstanceGeneration])
instanceRequirementsRequest_instanceGenerations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [InstanceGeneration]
instanceGenerations :: Maybe [InstanceGeneration]
$sel:instanceGenerations:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [InstanceGeneration]
instanceGenerations} -> Maybe [InstanceGeneration]
instanceGenerations) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [InstanceGeneration]
a -> InstanceRequirementsRequest
s {$sel:instanceGenerations:InstanceRequirementsRequest' :: Maybe [InstanceGeneration]
instanceGenerations = Maybe [InstanceGeneration]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Indicates whether instance types with instance store volumes are
-- included, excluded, or required. For more information,
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
-- in the /Amazon EC2 User Guide/.
--
-- -   To include instance types with instance store volumes, specify
--     @included@.
--
-- -   To require only instance types with instance store volumes, specify
--     @required@.
--
-- -   To exclude instance types with instance store volumes, specify
--     @excluded@.
--
-- Default: @included@
instanceRequirementsRequest_localStorage :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe LocalStorage)
instanceRequirementsRequest_localStorage :: Lens' InstanceRequirementsRequest (Maybe LocalStorage)
instanceRequirementsRequest_localStorage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe LocalStorage
localStorage :: Maybe LocalStorage
$sel:localStorage:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe LocalStorage
localStorage} -> Maybe LocalStorage
localStorage) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe LocalStorage
a -> InstanceRequirementsRequest
s {$sel:localStorage:InstanceRequirementsRequest' :: Maybe LocalStorage
localStorage = Maybe LocalStorage
a} :: InstanceRequirementsRequest)

-- | The type of local storage that is required.
--
-- -   For instance types with hard disk drive (HDD) storage, specify
--     @hdd@.
--
-- -   For instance types with solid state drive (SSD) storage, specify
--     @ssd@.
--
-- Default: @hdd@ and @ssd@
instanceRequirementsRequest_localStorageTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [LocalStorageType])
instanceRequirementsRequest_localStorageTypes :: Lens' InstanceRequirementsRequest (Maybe [LocalStorageType])
instanceRequirementsRequest_localStorageTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe [LocalStorageType]
localStorageTypes :: Maybe [LocalStorageType]
$sel:localStorageTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [LocalStorageType]
localStorageTypes} -> Maybe [LocalStorageType]
localStorageTypes) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe [LocalStorageType]
a -> InstanceRequirementsRequest
s {$sel:localStorageTypes:InstanceRequirementsRequest' :: Maybe [LocalStorageType]
localStorageTypes = Maybe [LocalStorageType]
a} :: InstanceRequirementsRequest) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The minimum and maximum amount of memory per vCPU, in GiB.
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_memoryGiBPerVCpu :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe MemoryGiBPerVCpuRequest)
instanceRequirementsRequest_memoryGiBPerVCpu :: Lens' InstanceRequirementsRequest (Maybe MemoryGiBPerVCpuRequest)
instanceRequirementsRequest_memoryGiBPerVCpu = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu :: Maybe MemoryGiBPerVCpuRequest
$sel:memoryGiBPerVCpu:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu} -> Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe MemoryGiBPerVCpuRequest
a -> InstanceRequirementsRequest
s {$sel:memoryGiBPerVCpu:InstanceRequirementsRequest' :: Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu = Maybe MemoryGiBPerVCpuRequest
a} :: InstanceRequirementsRequest)

-- | The minimum and maximum amount of network bandwidth, in gigabits per
-- second (Gbps).
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_networkBandwidthGbps :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe NetworkBandwidthGbpsRequest)
instanceRequirementsRequest_networkBandwidthGbps :: Lens'
  InstanceRequirementsRequest (Maybe NetworkBandwidthGbpsRequest)
instanceRequirementsRequest_networkBandwidthGbps = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps :: Maybe NetworkBandwidthGbpsRequest
$sel:networkBandwidthGbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps} -> Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe NetworkBandwidthGbpsRequest
a -> InstanceRequirementsRequest
s {$sel:networkBandwidthGbps:InstanceRequirementsRequest' :: Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps = Maybe NetworkBandwidthGbpsRequest
a} :: InstanceRequirementsRequest)

-- | The minimum and maximum number of network interfaces.
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_networkInterfaceCount :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe NetworkInterfaceCountRequest)
instanceRequirementsRequest_networkInterfaceCount :: Lens'
  InstanceRequirementsRequest (Maybe NetworkInterfaceCountRequest)
instanceRequirementsRequest_networkInterfaceCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe NetworkInterfaceCountRequest
networkInterfaceCount :: Maybe NetworkInterfaceCountRequest
$sel:networkInterfaceCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkInterfaceCountRequest
networkInterfaceCount} -> Maybe NetworkInterfaceCountRequest
networkInterfaceCount) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe NetworkInterfaceCountRequest
a -> InstanceRequirementsRequest
s {$sel:networkInterfaceCount:InstanceRequirementsRequest' :: Maybe NetworkInterfaceCountRequest
networkInterfaceCount = Maybe NetworkInterfaceCountRequest
a} :: InstanceRequirementsRequest)

-- | The price protection threshold for On-Demand Instances. This is the
-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
-- above the least expensive current generation M, C, or R instance type
-- with your specified attributes. When Amazon EC2 selects instance types
-- with your attributes, it excludes instance types priced above your
-- threshold.
--
-- The parameter accepts an integer, which Amazon EC2 interprets as a
-- percentage.
--
-- To turn off price protection, specify a high value, such as @999999@.
--
-- This parameter is not supported for
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
--
-- If you set @TargetCapacityUnitType@ 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.
--
-- Default: @20@
instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe Prelude.Int)
instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice :: Lens' InstanceRequirementsRequest (Maybe Int)
instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe Int
onDemandMaxPricePercentageOverLowestPrice :: Maybe Int
$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
onDemandMaxPricePercentageOverLowestPrice} -> Maybe Int
onDemandMaxPricePercentageOverLowestPrice) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe Int
a -> InstanceRequirementsRequest
s {$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: Maybe Int
onDemandMaxPricePercentageOverLowestPrice = Maybe Int
a} :: InstanceRequirementsRequest)

-- | Indicates whether instance types must support hibernation for On-Demand
-- Instances.
--
-- This parameter is not supported for
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
--
-- Default: @false@
instanceRequirementsRequest_requireHibernateSupport :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe Prelude.Bool)
instanceRequirementsRequest_requireHibernateSupport :: Lens' InstanceRequirementsRequest (Maybe Bool)
instanceRequirementsRequest_requireHibernateSupport = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe Bool
requireHibernateSupport :: Maybe Bool
$sel:requireHibernateSupport:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Bool
requireHibernateSupport} -> Maybe Bool
requireHibernateSupport) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe Bool
a -> InstanceRequirementsRequest
s {$sel:requireHibernateSupport:InstanceRequirementsRequest' :: Maybe Bool
requireHibernateSupport = Maybe Bool
a} :: InstanceRequirementsRequest)

-- | The price protection threshold for Spot Instance. This is the maximum
-- you’ll pay for an Spot Instance, expressed as a percentage above the
-- least expensive current generation M, C, or R instance type with your
-- specified attributes. When Amazon EC2 selects instance types with your
-- attributes, it excludes instance types priced above your threshold.
--
-- The parameter accepts an integer, which Amazon EC2 interprets as a
-- percentage.
--
-- To turn off price protection, specify a high value, such as @999999@.
--
-- This parameter is not supported for
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
-- and
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
--
-- If you set @TargetCapacityUnitType@ 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.
--
-- Default: @100@
instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe Prelude.Int)
instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice :: Lens' InstanceRequirementsRequest (Maybe Int)
instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe Int
spotMaxPricePercentageOverLowestPrice :: Maybe Int
$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
spotMaxPricePercentageOverLowestPrice} -> Maybe Int
spotMaxPricePercentageOverLowestPrice) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe Int
a -> InstanceRequirementsRequest
s {$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: Maybe Int
spotMaxPricePercentageOverLowestPrice = Maybe Int
a} :: InstanceRequirementsRequest)

-- | The minimum and maximum amount of total local storage, in GB.
--
-- Default: No minimum or maximum limits
instanceRequirementsRequest_totalLocalStorageGB :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe TotalLocalStorageGBRequest)
instanceRequirementsRequest_totalLocalStorageGB :: Lens'
  InstanceRequirementsRequest (Maybe TotalLocalStorageGBRequest)
instanceRequirementsRequest_totalLocalStorageGB = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {Maybe TotalLocalStorageGBRequest
totalLocalStorageGB :: Maybe TotalLocalStorageGBRequest
$sel:totalLocalStorageGB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe TotalLocalStorageGBRequest
totalLocalStorageGB} -> Maybe TotalLocalStorageGBRequest
totalLocalStorageGB) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} Maybe TotalLocalStorageGBRequest
a -> InstanceRequirementsRequest
s {$sel:totalLocalStorageGB:InstanceRequirementsRequest' :: Maybe TotalLocalStorageGBRequest
totalLocalStorageGB = Maybe TotalLocalStorageGBRequest
a} :: InstanceRequirementsRequest)

-- | The minimum and maximum number of vCPUs.
instanceRequirementsRequest_vCpuCount :: Lens.Lens' InstanceRequirementsRequest VCpuCountRangeRequest
instanceRequirementsRequest_vCpuCount :: Lens' InstanceRequirementsRequest VCpuCountRangeRequest
instanceRequirementsRequest_vCpuCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {VCpuCountRangeRequest
vCpuCount :: VCpuCountRangeRequest
$sel:vCpuCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> VCpuCountRangeRequest
vCpuCount} -> VCpuCountRangeRequest
vCpuCount) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} VCpuCountRangeRequest
a -> InstanceRequirementsRequest
s {$sel:vCpuCount:InstanceRequirementsRequest' :: VCpuCountRangeRequest
vCpuCount = VCpuCountRangeRequest
a} :: InstanceRequirementsRequest)

-- | The minimum and maximum amount of memory, in MiB.
instanceRequirementsRequest_memoryMiB :: Lens.Lens' InstanceRequirementsRequest MemoryMiBRequest
instanceRequirementsRequest_memoryMiB :: Lens' InstanceRequirementsRequest MemoryMiBRequest
instanceRequirementsRequest_memoryMiB = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirementsRequest' {MemoryMiBRequest
memoryMiB :: MemoryMiBRequest
$sel:memoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> MemoryMiBRequest
memoryMiB} -> MemoryMiBRequest
memoryMiB) (\s :: InstanceRequirementsRequest
s@InstanceRequirementsRequest' {} MemoryMiBRequest
a -> InstanceRequirementsRequest
s {$sel:memoryMiB:InstanceRequirementsRequest' :: MemoryMiBRequest
memoryMiB = MemoryMiBRequest
a} :: InstanceRequirementsRequest)

instance Prelude.Hashable InstanceRequirementsRequest where
  hashWithSalt :: Int -> InstanceRequirementsRequest -> Int
hashWithSalt Int
_salt InstanceRequirementsRequest' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [AcceleratorManufacturer]
Maybe [AcceleratorName]
Maybe [AcceleratorType]
Maybe [CpuManufacturer]
Maybe [InstanceGeneration]
Maybe [LocalStorageType]
Maybe AcceleratorCountRequest
Maybe AcceleratorTotalMemoryMiBRequest
Maybe BareMetal
Maybe BaselineEbsBandwidthMbpsRequest
Maybe BurstablePerformance
Maybe LocalStorage
Maybe MemoryGiBPerVCpuRequest
Maybe NetworkBandwidthGbpsRequest
Maybe NetworkInterfaceCountRequest
Maybe TotalLocalStorageGBRequest
MemoryMiBRequest
VCpuCountRangeRequest
memoryMiB :: MemoryMiBRequest
vCpuCount :: VCpuCountRangeRequest
totalLocalStorageGB :: Maybe TotalLocalStorageGBRequest
spotMaxPricePercentageOverLowestPrice :: Maybe Int
requireHibernateSupport :: Maybe Bool
onDemandMaxPricePercentageOverLowestPrice :: Maybe Int
networkInterfaceCount :: Maybe NetworkInterfaceCountRequest
networkBandwidthGbps :: Maybe NetworkBandwidthGbpsRequest
memoryGiBPerVCpu :: Maybe MemoryGiBPerVCpuRequest
localStorageTypes :: Maybe [LocalStorageType]
localStorage :: Maybe LocalStorage
instanceGenerations :: Maybe [InstanceGeneration]
excludedInstanceTypes :: Maybe [Text]
cpuManufacturers :: Maybe [CpuManufacturer]
burstablePerformance :: Maybe BurstablePerformance
baselineEbsBandwidthMbps :: Maybe BaselineEbsBandwidthMbpsRequest
bareMetal :: Maybe BareMetal
allowedInstanceTypes :: Maybe [Text]
acceleratorTypes :: Maybe [AcceleratorType]
acceleratorTotalMemoryMiB :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorNames :: Maybe [AcceleratorName]
acceleratorManufacturers :: Maybe [AcceleratorManufacturer]
acceleratorCount :: Maybe AcceleratorCountRequest
$sel:memoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> MemoryMiBRequest
$sel:vCpuCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> VCpuCountRangeRequest
$sel:totalLocalStorageGB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe TotalLocalStorageGBRequest
$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
$sel:requireHibernateSupport:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Bool
$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
$sel:networkInterfaceCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkInterfaceCountRequest
$sel:networkBandwidthGbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkBandwidthGbpsRequest
$sel:memoryGiBPerVCpu:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe MemoryGiBPerVCpuRequest
$sel:localStorageTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [LocalStorageType]
$sel:localStorage:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe LocalStorage
$sel:instanceGenerations:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [InstanceGeneration]
$sel:excludedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
$sel:cpuManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [CpuManufacturer]
$sel:burstablePerformance:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BurstablePerformance
$sel:baselineEbsBandwidthMbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe BaselineEbsBandwidthMbpsRequest
$sel:bareMetal:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BareMetal
$sel:allowedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
$sel:acceleratorTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorType]
$sel:acceleratorTotalMemoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe AcceleratorTotalMemoryMiBRequest
$sel:acceleratorNames:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorName]
$sel:acceleratorManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorManufacturer]
$sel:acceleratorCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe AcceleratorCountRequest
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AcceleratorCountRequest
acceleratorCount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AcceleratorManufacturer]
acceleratorManufacturers
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AcceleratorName]
acceleratorNames
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AcceleratorType]
acceleratorTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
allowedInstanceTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BareMetal
bareMetal
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BurstablePerformance
burstablePerformance
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [CpuManufacturer]
cpuManufacturers
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
excludedInstanceTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [InstanceGeneration]
instanceGenerations
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LocalStorage
localStorage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [LocalStorageType]
localStorageTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe NetworkInterfaceCountRequest
networkInterfaceCount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
onDemandMaxPricePercentageOverLowestPrice
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
requireHibernateSupport
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
spotMaxPricePercentageOverLowestPrice
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TotalLocalStorageGBRequest
totalLocalStorageGB
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` VCpuCountRangeRequest
vCpuCount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MemoryMiBRequest
memoryMiB

instance Prelude.NFData InstanceRequirementsRequest where
  rnf :: InstanceRequirementsRequest -> ()
rnf InstanceRequirementsRequest' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [AcceleratorManufacturer]
Maybe [AcceleratorName]
Maybe [AcceleratorType]
Maybe [CpuManufacturer]
Maybe [InstanceGeneration]
Maybe [LocalStorageType]
Maybe AcceleratorCountRequest
Maybe AcceleratorTotalMemoryMiBRequest
Maybe BareMetal
Maybe BaselineEbsBandwidthMbpsRequest
Maybe BurstablePerformance
Maybe LocalStorage
Maybe MemoryGiBPerVCpuRequest
Maybe NetworkBandwidthGbpsRequest
Maybe NetworkInterfaceCountRequest
Maybe TotalLocalStorageGBRequest
MemoryMiBRequest
VCpuCountRangeRequest
memoryMiB :: MemoryMiBRequest
vCpuCount :: VCpuCountRangeRequest
totalLocalStorageGB :: Maybe TotalLocalStorageGBRequest
spotMaxPricePercentageOverLowestPrice :: Maybe Int
requireHibernateSupport :: Maybe Bool
onDemandMaxPricePercentageOverLowestPrice :: Maybe Int
networkInterfaceCount :: Maybe NetworkInterfaceCountRequest
networkBandwidthGbps :: Maybe NetworkBandwidthGbpsRequest
memoryGiBPerVCpu :: Maybe MemoryGiBPerVCpuRequest
localStorageTypes :: Maybe [LocalStorageType]
localStorage :: Maybe LocalStorage
instanceGenerations :: Maybe [InstanceGeneration]
excludedInstanceTypes :: Maybe [Text]
cpuManufacturers :: Maybe [CpuManufacturer]
burstablePerformance :: Maybe BurstablePerformance
baselineEbsBandwidthMbps :: Maybe BaselineEbsBandwidthMbpsRequest
bareMetal :: Maybe BareMetal
allowedInstanceTypes :: Maybe [Text]
acceleratorTypes :: Maybe [AcceleratorType]
acceleratorTotalMemoryMiB :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorNames :: Maybe [AcceleratorName]
acceleratorManufacturers :: Maybe [AcceleratorManufacturer]
acceleratorCount :: Maybe AcceleratorCountRequest
$sel:memoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> MemoryMiBRequest
$sel:vCpuCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> VCpuCountRangeRequest
$sel:totalLocalStorageGB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe TotalLocalStorageGBRequest
$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
$sel:requireHibernateSupport:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Bool
$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
$sel:networkInterfaceCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkInterfaceCountRequest
$sel:networkBandwidthGbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkBandwidthGbpsRequest
$sel:memoryGiBPerVCpu:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe MemoryGiBPerVCpuRequest
$sel:localStorageTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [LocalStorageType]
$sel:localStorage:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe LocalStorage
$sel:instanceGenerations:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [InstanceGeneration]
$sel:excludedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
$sel:cpuManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [CpuManufacturer]
$sel:burstablePerformance:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BurstablePerformance
$sel:baselineEbsBandwidthMbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe BaselineEbsBandwidthMbpsRequest
$sel:bareMetal:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BareMetal
$sel:allowedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
$sel:acceleratorTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorType]
$sel:acceleratorTotalMemoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe AcceleratorTotalMemoryMiBRequest
$sel:acceleratorNames:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorName]
$sel:acceleratorManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorManufacturer]
$sel:acceleratorCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe AcceleratorCountRequest
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AcceleratorCountRequest
acceleratorCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AcceleratorManufacturer]
acceleratorManufacturers
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AcceleratorName]
acceleratorNames
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AcceleratorType]
acceleratorTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
allowedInstanceTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BareMetal
bareMetal
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BurstablePerformance
burstablePerformance
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [CpuManufacturer]
cpuManufacturers
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
excludedInstanceTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [InstanceGeneration]
instanceGenerations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LocalStorage
localStorage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [LocalStorageType]
localStorageTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe NetworkInterfaceCountRequest
networkInterfaceCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Int
onDemandMaxPricePercentageOverLowestPrice
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Bool
requireHibernateSupport
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Int
spotMaxPricePercentageOverLowestPrice
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe TotalLocalStorageGBRequest
totalLocalStorageGB
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf VCpuCountRangeRequest
vCpuCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MemoryMiBRequest
memoryMiB

instance Data.ToQuery InstanceRequirementsRequest where
  toQuery :: InstanceRequirementsRequest -> QueryString
toQuery InstanceRequirementsRequest' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [AcceleratorManufacturer]
Maybe [AcceleratorName]
Maybe [AcceleratorType]
Maybe [CpuManufacturer]
Maybe [InstanceGeneration]
Maybe [LocalStorageType]
Maybe AcceleratorCountRequest
Maybe AcceleratorTotalMemoryMiBRequest
Maybe BareMetal
Maybe BaselineEbsBandwidthMbpsRequest
Maybe BurstablePerformance
Maybe LocalStorage
Maybe MemoryGiBPerVCpuRequest
Maybe NetworkBandwidthGbpsRequest
Maybe NetworkInterfaceCountRequest
Maybe TotalLocalStorageGBRequest
MemoryMiBRequest
VCpuCountRangeRequest
memoryMiB :: MemoryMiBRequest
vCpuCount :: VCpuCountRangeRequest
totalLocalStorageGB :: Maybe TotalLocalStorageGBRequest
spotMaxPricePercentageOverLowestPrice :: Maybe Int
requireHibernateSupport :: Maybe Bool
onDemandMaxPricePercentageOverLowestPrice :: Maybe Int
networkInterfaceCount :: Maybe NetworkInterfaceCountRequest
networkBandwidthGbps :: Maybe NetworkBandwidthGbpsRequest
memoryGiBPerVCpu :: Maybe MemoryGiBPerVCpuRequest
localStorageTypes :: Maybe [LocalStorageType]
localStorage :: Maybe LocalStorage
instanceGenerations :: Maybe [InstanceGeneration]
excludedInstanceTypes :: Maybe [Text]
cpuManufacturers :: Maybe [CpuManufacturer]
burstablePerformance :: Maybe BurstablePerformance
baselineEbsBandwidthMbps :: Maybe BaselineEbsBandwidthMbpsRequest
bareMetal :: Maybe BareMetal
allowedInstanceTypes :: Maybe [Text]
acceleratorTypes :: Maybe [AcceleratorType]
acceleratorTotalMemoryMiB :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorNames :: Maybe [AcceleratorName]
acceleratorManufacturers :: Maybe [AcceleratorManufacturer]
acceleratorCount :: Maybe AcceleratorCountRequest
$sel:memoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> MemoryMiBRequest
$sel:vCpuCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> VCpuCountRangeRequest
$sel:totalLocalStorageGB:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe TotalLocalStorageGBRequest
$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
$sel:requireHibernateSupport:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Bool
$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe Int
$sel:networkInterfaceCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkInterfaceCountRequest
$sel:networkBandwidthGbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe NetworkBandwidthGbpsRequest
$sel:memoryGiBPerVCpu:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe MemoryGiBPerVCpuRequest
$sel:localStorageTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [LocalStorageType]
$sel:localStorage:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe LocalStorage
$sel:instanceGenerations:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [InstanceGeneration]
$sel:excludedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
$sel:cpuManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [CpuManufacturer]
$sel:burstablePerformance:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BurstablePerformance
$sel:baselineEbsBandwidthMbps:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe BaselineEbsBandwidthMbpsRequest
$sel:bareMetal:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe BareMetal
$sel:allowedInstanceTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [Text]
$sel:acceleratorTypes:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorType]
$sel:acceleratorTotalMemoryMiB:InstanceRequirementsRequest' :: InstanceRequirementsRequest
-> Maybe AcceleratorTotalMemoryMiBRequest
$sel:acceleratorNames:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorName]
$sel:acceleratorManufacturers:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe [AcceleratorManufacturer]
$sel:acceleratorCount:InstanceRequirementsRequest' :: InstanceRequirementsRequest -> Maybe AcceleratorCountRequest
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"AcceleratorCount" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe AcceleratorCountRequest
acceleratorCount,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"AcceleratorManufacturer"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AcceleratorManufacturer]
acceleratorManufacturers
          ),
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"AcceleratorName"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AcceleratorName]
acceleratorNames
          ),
        ByteString
"AcceleratorTotalMemoryMiB"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"AcceleratorType"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AcceleratorType]
acceleratorTypes
          ),
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"AllowedInstanceType"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
allowedInstanceTypes
          ),
        ByteString
"BareMetal" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe BareMetal
bareMetal,
        ByteString
"BaselineEbsBandwidthMbps"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps,
        ByteString
"BurstablePerformance" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe BurstablePerformance
burstablePerformance,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"CpuManufacturer"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [CpuManufacturer]
cpuManufacturers
          ),
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"ExcludedInstanceType"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
excludedInstanceTypes
          ),
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"InstanceGeneration"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [InstanceGeneration]
instanceGenerations
          ),
        ByteString
"LocalStorage" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe LocalStorage
localStorage,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"LocalStorageType"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [LocalStorageType]
localStorageTypes
          ),
        ByteString
"MemoryGiBPerVCpu" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu,
        ByteString
"NetworkBandwidthGbps" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps,
        ByteString
"NetworkInterfaceCount"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe NetworkInterfaceCountRequest
networkInterfaceCount,
        ByteString
"OnDemandMaxPricePercentageOverLowestPrice"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
onDemandMaxPricePercentageOverLowestPrice,
        ByteString
"RequireHibernateSupport"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
requireHibernateSupport,
        ByteString
"SpotMaxPricePercentageOverLowestPrice"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
spotMaxPricePercentageOverLowestPrice,
        ByteString
"TotalLocalStorageGB" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe TotalLocalStorageGBRequest
totalLocalStorageGB,
        ByteString
"VCpuCount" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: VCpuCountRangeRequest
vCpuCount,
        ByteString
"MemoryMiB" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: MemoryMiBRequest
memoryMiB
      ]