{-# 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.AutoScaling.Types.InstanceRequirements
-- 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.AutoScaling.Types.InstanceRequirements where

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

-- | The attributes for the instance types for a mixed instances policy.
-- Amazon EC2 Auto Scaling uses your specified requirements to identify
-- instance types. Then, it uses your On-Demand and Spot allocation
-- strategies to launch instances from these instance types.
--
-- 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 Auto Scaling
-- 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/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html Creating an Auto Scaling group using attribute-based instance type selection>
-- in the /Amazon EC2 Auto Scaling User Guide/. For help determining which
-- instance types match your attributes before you apply them to your Auto
-- Scaling group, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements Preview instance types with specified attributes>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- /See:/ 'newInstanceRequirements' smart constructor.
data InstanceRequirements = InstanceRequirements'
  { -- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
    -- Web Services Inferentia chips) for an instance type.
    --
    -- To exclude accelerator-enabled instance types, set @Max@ to @0@.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirements -> 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
    InstanceRequirements -> Maybe [AcceleratorManufacturer]
acceleratorManufacturers :: Prelude.Maybe [AcceleratorManufacturer],
    -- | Lists the accelerators that must be on an 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@.
    --
    -- Default: Any accelerator
    InstanceRequirements -> Maybe [AcceleratorName]
acceleratorNames :: Prelude.Maybe [AcceleratorName],
    -- | The minimum and maximum total memory size for the accelerators on an
    -- instance type, in MiB.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirements -> Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB :: Prelude.Maybe AcceleratorTotalMemoryMiBRequest,
    -- | Lists the accelerator types that must be on an instance type.
    --
    -- -   For instance types with GPU accelerators, specify @gpu@.
    --
    -- -   For instance types with FPGA accelerators, specify @fpga@.
    --
    -- -   For instance types with inference accelerators, specify @inference@.
    --
    -- Default: Any accelerator type
    InstanceRequirements -> 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 Auto Scaling will allow
    -- the entire C5 instance family, which includes all C5a and C5n instance
    -- types. If you specify @m5a.*@, Amazon EC2 Auto Scaling 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
    InstanceRequirements -> Maybe [Text]
allowedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | Indicates whether bare metal instance types are included, excluded, or
    -- required.
    --
    -- Default: @excluded@
    InstanceRequirements -> Maybe BareMetal
bareMetal :: Prelude.Maybe BareMetal,
    -- | The minimum and maximum baseline bandwidth performance for an instance
    -- type, 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 for Linux Instances/.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirements -> Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps :: Prelude.Maybe BaselineEbsBandwidthMbpsRequest,
    -- | Indicates whether burstable performance 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>
    -- in the /Amazon EC2 User Guide for Linux Instances/.
    --
    -- Default: @excluded@
    InstanceRequirements -> Maybe BurstablePerformance
burstablePerformance :: Prelude.Maybe BurstablePerformance,
    -- | Lists which specific 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 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.
    --
    -- Default: Any manufacturer
    InstanceRequirements -> 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*@, you are excluding the entire C5
    -- instance family, which includes all C5a and C5n instance types. If you
    -- specify @m5a.*@, Amazon EC2 Auto Scaling 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
    InstanceRequirements -> Maybe [Text]
excludedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | Indicates whether current or previous generation instance types are
    -- included.
    --
    -- -   For current generation instance types, specify @current@. The
    --     current generation includes EC2 instance types currently recommended
    --     for use. This typically includes 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 Linux Instances/.
    --
    -- -   For previous generation instance types, specify @previous@.
    --
    -- Default: Any current or previous generation
    InstanceRequirements -> Maybe [InstanceGeneration]
instanceGenerations :: Prelude.Maybe [InstanceGeneration],
    -- | Indicates whether instance types with instance store volumes are
    -- included, excluded, or required. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
    -- in the /Amazon EC2 User Guide for Linux Instances/.
    --
    -- Default: @included@
    InstanceRequirements -> Maybe LocalStorage
localStorage :: Prelude.Maybe LocalStorage,
    -- | Indicates 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: Any local storage type
    InstanceRequirements -> Maybe [LocalStorageType]
localStorageTypes :: Prelude.Maybe [LocalStorageType],
    -- | The minimum and maximum amount of memory per vCPU for an instance type,
    -- in GiB.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirements -> 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
    InstanceRequirements -> Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps :: Prelude.Maybe NetworkBandwidthGbpsRequest,
    -- | The minimum and maximum number of network interfaces for an instance
    -- type.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirements -> 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
    -- higher than the least expensive current generation 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@.
    --
    -- 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.
    --
    -- Default: @20@
    InstanceRequirements -> Maybe Natural
onDemandMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Natural,
    -- | Indicates whether instance types must provide On-Demand Instance
    -- hibernation support.
    --
    -- Default: @false@
    InstanceRequirements -> Maybe Bool
requireHibernateSupport :: Prelude.Maybe Prelude.Bool,
    -- | The price protection threshold for Spot Instances. This is the maximum
    -- you’ll pay for a Spot Instance, expressed as a percentage higher than
    -- the least expensive current generation 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@.
    --
    -- 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.
    --
    -- Default: @100@
    InstanceRequirements -> Maybe Natural
spotMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Natural,
    -- | The minimum and maximum total local storage size for an instance type,
    -- in GB.
    --
    -- Default: No minimum or maximum limits
    InstanceRequirements -> Maybe TotalLocalStorageGBRequest
totalLocalStorageGB :: Prelude.Maybe TotalLocalStorageGBRequest,
    -- | The minimum and maximum number of vCPUs for an instance type.
    InstanceRequirements -> VCpuCountRequest
vCpuCount :: VCpuCountRequest,
    -- | The minimum and maximum instance memory size for an instance type, in
    -- MiB.
    InstanceRequirements -> MemoryMiBRequest
memoryMiB :: MemoryMiBRequest
  }
  deriving (InstanceRequirements -> InstanceRequirements -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstanceRequirements -> InstanceRequirements -> Bool
$c/= :: InstanceRequirements -> InstanceRequirements -> Bool
== :: InstanceRequirements -> InstanceRequirements -> Bool
$c== :: InstanceRequirements -> InstanceRequirements -> Bool
Prelude.Eq, ReadPrec [InstanceRequirements]
ReadPrec InstanceRequirements
Int -> ReadS InstanceRequirements
ReadS [InstanceRequirements]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstanceRequirements]
$creadListPrec :: ReadPrec [InstanceRequirements]
readPrec :: ReadPrec InstanceRequirements
$creadPrec :: ReadPrec InstanceRequirements
readList :: ReadS [InstanceRequirements]
$creadList :: ReadS [InstanceRequirements]
readsPrec :: Int -> ReadS InstanceRequirements
$creadsPrec :: Int -> ReadS InstanceRequirements
Prelude.Read, Int -> InstanceRequirements -> ShowS
[InstanceRequirements] -> ShowS
InstanceRequirements -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstanceRequirements] -> ShowS
$cshowList :: [InstanceRequirements] -> ShowS
show :: InstanceRequirements -> String
$cshow :: InstanceRequirements -> String
showsPrec :: Int -> InstanceRequirements -> ShowS
$cshowsPrec :: Int -> InstanceRequirements -> ShowS
Prelude.Show, forall x. Rep InstanceRequirements x -> InstanceRequirements
forall x. InstanceRequirements -> Rep InstanceRequirements x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep InstanceRequirements x -> InstanceRequirements
$cfrom :: forall x. InstanceRequirements -> Rep InstanceRequirements x
Prelude.Generic)

-- |
-- Create a value of 'InstanceRequirements' 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', 'instanceRequirements_acceleratorCount' - The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
-- Web Services Inferentia chips) for an instance type.
--
-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
--
-- Default: No minimum or maximum limits
--
-- 'acceleratorManufacturers', 'instanceRequirements_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', 'instanceRequirements_acceleratorNames' - Lists the accelerators that must be on an 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@.
--
-- Default: Any accelerator
--
-- 'acceleratorTotalMemoryMiB', 'instanceRequirements_acceleratorTotalMemoryMiB' - The minimum and maximum total memory size for the accelerators on an
-- instance type, in MiB.
--
-- Default: No minimum or maximum limits
--
-- 'acceleratorTypes', 'instanceRequirements_acceleratorTypes' - Lists the accelerator types that must be on an instance type.
--
-- -   For instance types with GPU accelerators, specify @gpu@.
--
-- -   For instance types with FPGA accelerators, specify @fpga@.
--
-- -   For instance types with inference accelerators, specify @inference@.
--
-- Default: Any accelerator type
--
-- 'allowedInstanceTypes', 'instanceRequirements_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 Auto Scaling will allow
-- the entire C5 instance family, which includes all C5a and C5n instance
-- types. If you specify @m5a.*@, Amazon EC2 Auto Scaling 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', 'instanceRequirements_bareMetal' - Indicates whether bare metal instance types are included, excluded, or
-- required.
--
-- Default: @excluded@
--
-- 'baselineEbsBandwidthMbps', 'instanceRequirements_baselineEbsBandwidthMbps' - The minimum and maximum baseline bandwidth performance for an instance
-- type, 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 for Linux Instances/.
--
-- Default: No minimum or maximum limits
--
-- 'burstablePerformance', 'instanceRequirements_burstablePerformance' - Indicates whether burstable performance 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>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @excluded@
--
-- 'cpuManufacturers', 'instanceRequirements_cpuManufacturers' - Lists which specific 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 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.
--
-- Default: Any manufacturer
--
-- 'excludedInstanceTypes', 'instanceRequirements_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*@, you are excluding the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 Auto Scaling 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', 'instanceRequirements_instanceGenerations' - Indicates whether current or previous generation instance types are
-- included.
--
-- -   For current generation instance types, specify @current@. The
--     current generation includes EC2 instance types currently recommended
--     for use. This typically includes 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 Linux Instances/.
--
-- -   For previous generation instance types, specify @previous@.
--
-- Default: Any current or previous generation
--
-- 'localStorage', 'instanceRequirements_localStorage' - Indicates whether instance types with instance store volumes are
-- included, excluded, or required. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @included@
--
-- 'localStorageTypes', 'instanceRequirements_localStorageTypes' - Indicates 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: Any local storage type
--
-- 'memoryGiBPerVCpu', 'instanceRequirements_memoryGiBPerVCpu' - The minimum and maximum amount of memory per vCPU for an instance type,
-- in GiB.
--
-- Default: No minimum or maximum limits
--
-- 'networkBandwidthGbps', 'instanceRequirements_networkBandwidthGbps' - The minimum and maximum amount of network bandwidth, in gigabits per
-- second (Gbps).
--
-- Default: No minimum or maximum limits
--
-- 'networkInterfaceCount', 'instanceRequirements_networkInterfaceCount' - The minimum and maximum number of network interfaces for an instance
-- type.
--
-- Default: No minimum or maximum limits
--
-- 'onDemandMaxPricePercentageOverLowestPrice', 'instanceRequirements_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
-- higher than the least expensive current generation 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@.
--
-- 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.
--
-- Default: @20@
--
-- 'requireHibernateSupport', 'instanceRequirements_requireHibernateSupport' - Indicates whether instance types must provide On-Demand Instance
-- hibernation support.
--
-- Default: @false@
--
-- 'spotMaxPricePercentageOverLowestPrice', 'instanceRequirements_spotMaxPricePercentageOverLowestPrice' - The price protection threshold for Spot Instances. This is the maximum
-- you’ll pay for a Spot Instance, expressed as a percentage higher than
-- the least expensive current generation 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@.
--
-- 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.
--
-- Default: @100@
--
-- 'totalLocalStorageGB', 'instanceRequirements_totalLocalStorageGB' - The minimum and maximum total local storage size for an instance type,
-- in GB.
--
-- Default: No minimum or maximum limits
--
-- 'vCpuCount', 'instanceRequirements_vCpuCount' - The minimum and maximum number of vCPUs for an instance type.
--
-- 'memoryMiB', 'instanceRequirements_memoryMiB' - The minimum and maximum instance memory size for an instance type, in
-- MiB.
newInstanceRequirements ::
  -- | 'vCpuCount'
  VCpuCountRequest ->
  -- | 'memoryMiB'
  MemoryMiBRequest ->
  InstanceRequirements
newInstanceRequirements :: VCpuCountRequest -> MemoryMiBRequest -> InstanceRequirements
newInstanceRequirements VCpuCountRequest
pVCpuCount_ MemoryMiBRequest
pMemoryMiB_ =
  InstanceRequirements'
    { $sel:acceleratorCount:InstanceRequirements' :: Maybe AcceleratorCountRequest
acceleratorCount =
        forall a. Maybe a
Prelude.Nothing,
      $sel:acceleratorManufacturers:InstanceRequirements' :: Maybe [AcceleratorManufacturer]
acceleratorManufacturers = forall a. Maybe a
Prelude.Nothing,
      $sel:acceleratorNames:InstanceRequirements' :: Maybe [AcceleratorName]
acceleratorNames = forall a. Maybe a
Prelude.Nothing,
      $sel:acceleratorTotalMemoryMiB:InstanceRequirements' :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB = forall a. Maybe a
Prelude.Nothing,
      $sel:acceleratorTypes:InstanceRequirements' :: Maybe [AcceleratorType]
acceleratorTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:allowedInstanceTypes:InstanceRequirements' :: Maybe [Text]
allowedInstanceTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:bareMetal:InstanceRequirements' :: Maybe BareMetal
bareMetal = forall a. Maybe a
Prelude.Nothing,
      $sel:baselineEbsBandwidthMbps:InstanceRequirements' :: Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps = forall a. Maybe a
Prelude.Nothing,
      $sel:burstablePerformance:InstanceRequirements' :: Maybe BurstablePerformance
burstablePerformance = forall a. Maybe a
Prelude.Nothing,
      $sel:cpuManufacturers:InstanceRequirements' :: Maybe [CpuManufacturer]
cpuManufacturers = forall a. Maybe a
Prelude.Nothing,
      $sel:excludedInstanceTypes:InstanceRequirements' :: Maybe [Text]
excludedInstanceTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceGenerations:InstanceRequirements' :: Maybe [InstanceGeneration]
instanceGenerations = forall a. Maybe a
Prelude.Nothing,
      $sel:localStorage:InstanceRequirements' :: Maybe LocalStorage
localStorage = forall a. Maybe a
Prelude.Nothing,
      $sel:localStorageTypes:InstanceRequirements' :: Maybe [LocalStorageType]
localStorageTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:memoryGiBPerVCpu:InstanceRequirements' :: Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu = forall a. Maybe a
Prelude.Nothing,
      $sel:networkBandwidthGbps:InstanceRequirements' :: Maybe NetworkBandwidthGbpsRequest
networkBandwidthGbps = forall a. Maybe a
Prelude.Nothing,
      $sel:networkInterfaceCount:InstanceRequirements' :: Maybe NetworkInterfaceCountRequest
networkInterfaceCount = forall a. Maybe a
Prelude.Nothing,
      $sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirements' :: Maybe Natural
onDemandMaxPricePercentageOverLowestPrice =
        forall a. Maybe a
Prelude.Nothing,
      $sel:requireHibernateSupport:InstanceRequirements' :: Maybe Bool
requireHibernateSupport = forall a. Maybe a
Prelude.Nothing,
      $sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirements' :: Maybe Natural
spotMaxPricePercentageOverLowestPrice =
        forall a. Maybe a
Prelude.Nothing,
      $sel:totalLocalStorageGB:InstanceRequirements' :: Maybe TotalLocalStorageGBRequest
totalLocalStorageGB = forall a. Maybe a
Prelude.Nothing,
      $sel:vCpuCount:InstanceRequirements' :: VCpuCountRequest
vCpuCount = VCpuCountRequest
pVCpuCount_,
      $sel:memoryMiB:InstanceRequirements' :: MemoryMiBRequest
memoryMiB = MemoryMiBRequest
pMemoryMiB_
    }

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

-- | 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
instanceRequirements_acceleratorManufacturers :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorManufacturer])
instanceRequirements_acceleratorManufacturers :: Lens' InstanceRequirements (Maybe [AcceleratorManufacturer])
instanceRequirements_acceleratorManufacturers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [AcceleratorManufacturer]
acceleratorManufacturers :: Maybe [AcceleratorManufacturer]
$sel:acceleratorManufacturers:InstanceRequirements' :: InstanceRequirements -> Maybe [AcceleratorManufacturer]
acceleratorManufacturers} -> Maybe [AcceleratorManufacturer]
acceleratorManufacturers) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [AcceleratorManufacturer]
a -> InstanceRequirements
s {$sel:acceleratorManufacturers:InstanceRequirements' :: Maybe [AcceleratorManufacturer]
acceleratorManufacturers = Maybe [AcceleratorManufacturer]
a} :: InstanceRequirements) 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

-- | Lists the accelerators that must be on an 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@.
--
-- Default: Any accelerator
instanceRequirements_acceleratorNames :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorName])
instanceRequirements_acceleratorNames :: Lens' InstanceRequirements (Maybe [AcceleratorName])
instanceRequirements_acceleratorNames = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [AcceleratorName]
acceleratorNames :: Maybe [AcceleratorName]
$sel:acceleratorNames:InstanceRequirements' :: InstanceRequirements -> Maybe [AcceleratorName]
acceleratorNames} -> Maybe [AcceleratorName]
acceleratorNames) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [AcceleratorName]
a -> InstanceRequirements
s {$sel:acceleratorNames:InstanceRequirements' :: Maybe [AcceleratorName]
acceleratorNames = Maybe [AcceleratorName]
a} :: InstanceRequirements) 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 total memory size for the accelerators on an
-- instance type, in MiB.
--
-- Default: No minimum or maximum limits
instanceRequirements_acceleratorTotalMemoryMiB :: Lens.Lens' InstanceRequirements (Prelude.Maybe AcceleratorTotalMemoryMiBRequest)
instanceRequirements_acceleratorTotalMemoryMiB :: Lens' InstanceRequirements (Maybe AcceleratorTotalMemoryMiBRequest)
instanceRequirements_acceleratorTotalMemoryMiB = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB :: Maybe AcceleratorTotalMemoryMiBRequest
$sel:acceleratorTotalMemoryMiB:InstanceRequirements' :: InstanceRequirements -> Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB} -> Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe AcceleratorTotalMemoryMiBRequest
a -> InstanceRequirements
s {$sel:acceleratorTotalMemoryMiB:InstanceRequirements' :: Maybe AcceleratorTotalMemoryMiBRequest
acceleratorTotalMemoryMiB = Maybe AcceleratorTotalMemoryMiBRequest
a} :: InstanceRequirements)

-- | Lists the accelerator types that must be on an instance type.
--
-- -   For instance types with GPU accelerators, specify @gpu@.
--
-- -   For instance types with FPGA accelerators, specify @fpga@.
--
-- -   For instance types with inference accelerators, specify @inference@.
--
-- Default: Any accelerator type
instanceRequirements_acceleratorTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorType])
instanceRequirements_acceleratorTypes :: Lens' InstanceRequirements (Maybe [AcceleratorType])
instanceRequirements_acceleratorTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [AcceleratorType]
acceleratorTypes :: Maybe [AcceleratorType]
$sel:acceleratorTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [AcceleratorType]
acceleratorTypes} -> Maybe [AcceleratorType]
acceleratorTypes) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [AcceleratorType]
a -> InstanceRequirements
s {$sel:acceleratorTypes:InstanceRequirements' :: Maybe [AcceleratorType]
acceleratorTypes = Maybe [AcceleratorType]
a} :: InstanceRequirements) 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 Auto Scaling will allow
-- the entire C5 instance family, which includes all C5a and C5n instance
-- types. If you specify @m5a.*@, Amazon EC2 Auto Scaling 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
instanceRequirements_allowedInstanceTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [Prelude.Text])
instanceRequirements_allowedInstanceTypes :: Lens' InstanceRequirements (Maybe [Text])
instanceRequirements_allowedInstanceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [Text]
allowedInstanceTypes :: Maybe [Text]
$sel:allowedInstanceTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [Text]
allowedInstanceTypes} -> Maybe [Text]
allowedInstanceTypes) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [Text]
a -> InstanceRequirements
s {$sel:allowedInstanceTypes:InstanceRequirements' :: Maybe [Text]
allowedInstanceTypes = Maybe [Text]
a} :: InstanceRequirements) 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 are included, excluded, or
-- required.
--
-- Default: @excluded@
instanceRequirements_bareMetal :: Lens.Lens' InstanceRequirements (Prelude.Maybe BareMetal)
instanceRequirements_bareMetal :: Lens' InstanceRequirements (Maybe BareMetal)
instanceRequirements_bareMetal = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe BareMetal
bareMetal :: Maybe BareMetal
$sel:bareMetal:InstanceRequirements' :: InstanceRequirements -> Maybe BareMetal
bareMetal} -> Maybe BareMetal
bareMetal) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe BareMetal
a -> InstanceRequirements
s {$sel:bareMetal:InstanceRequirements' :: Maybe BareMetal
bareMetal = Maybe BareMetal
a} :: InstanceRequirements)

-- | The minimum and maximum baseline bandwidth performance for an instance
-- type, 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 for Linux Instances/.
--
-- Default: No minimum or maximum limits
instanceRequirements_baselineEbsBandwidthMbps :: Lens.Lens' InstanceRequirements (Prelude.Maybe BaselineEbsBandwidthMbpsRequest)
instanceRequirements_baselineEbsBandwidthMbps :: Lens' InstanceRequirements (Maybe BaselineEbsBandwidthMbpsRequest)
instanceRequirements_baselineEbsBandwidthMbps = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps :: Maybe BaselineEbsBandwidthMbpsRequest
$sel:baselineEbsBandwidthMbps:InstanceRequirements' :: InstanceRequirements -> Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps} -> Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe BaselineEbsBandwidthMbpsRequest
a -> InstanceRequirements
s {$sel:baselineEbsBandwidthMbps:InstanceRequirements' :: Maybe BaselineEbsBandwidthMbpsRequest
baselineEbsBandwidthMbps = Maybe BaselineEbsBandwidthMbpsRequest
a} :: InstanceRequirements)

-- | Indicates whether burstable performance 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>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @excluded@
instanceRequirements_burstablePerformance :: Lens.Lens' InstanceRequirements (Prelude.Maybe BurstablePerformance)
instanceRequirements_burstablePerformance :: Lens' InstanceRequirements (Maybe BurstablePerformance)
instanceRequirements_burstablePerformance = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe BurstablePerformance
burstablePerformance :: Maybe BurstablePerformance
$sel:burstablePerformance:InstanceRequirements' :: InstanceRequirements -> Maybe BurstablePerformance
burstablePerformance} -> Maybe BurstablePerformance
burstablePerformance) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe BurstablePerformance
a -> InstanceRequirements
s {$sel:burstablePerformance:InstanceRequirements' :: Maybe BurstablePerformance
burstablePerformance = Maybe BurstablePerformance
a} :: InstanceRequirements)

-- | Lists which specific 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 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.
--
-- Default: Any manufacturer
instanceRequirements_cpuManufacturers :: Lens.Lens' InstanceRequirements (Prelude.Maybe [CpuManufacturer])
instanceRequirements_cpuManufacturers :: Lens' InstanceRequirements (Maybe [CpuManufacturer])
instanceRequirements_cpuManufacturers = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [CpuManufacturer]
cpuManufacturers :: Maybe [CpuManufacturer]
$sel:cpuManufacturers:InstanceRequirements' :: InstanceRequirements -> Maybe [CpuManufacturer]
cpuManufacturers} -> Maybe [CpuManufacturer]
cpuManufacturers) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [CpuManufacturer]
a -> InstanceRequirements
s {$sel:cpuManufacturers:InstanceRequirements' :: Maybe [CpuManufacturer]
cpuManufacturers = Maybe [CpuManufacturer]
a} :: InstanceRequirements) 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*@, you are excluding the entire C5
-- instance family, which includes all C5a and C5n instance types. If you
-- specify @m5a.*@, Amazon EC2 Auto Scaling 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
instanceRequirements_excludedInstanceTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [Prelude.Text])
instanceRequirements_excludedInstanceTypes :: Lens' InstanceRequirements (Maybe [Text])
instanceRequirements_excludedInstanceTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [Text]
excludedInstanceTypes :: Maybe [Text]
$sel:excludedInstanceTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [Text]
excludedInstanceTypes} -> Maybe [Text]
excludedInstanceTypes) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [Text]
a -> InstanceRequirements
s {$sel:excludedInstanceTypes:InstanceRequirements' :: Maybe [Text]
excludedInstanceTypes = Maybe [Text]
a} :: InstanceRequirements) 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.
--
-- -   For current generation instance types, specify @current@. The
--     current generation includes EC2 instance types currently recommended
--     for use. This typically includes 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 Linux Instances/.
--
-- -   For previous generation instance types, specify @previous@.
--
-- Default: Any current or previous generation
instanceRequirements_instanceGenerations :: Lens.Lens' InstanceRequirements (Prelude.Maybe [InstanceGeneration])
instanceRequirements_instanceGenerations :: Lens' InstanceRequirements (Maybe [InstanceGeneration])
instanceRequirements_instanceGenerations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [InstanceGeneration]
instanceGenerations :: Maybe [InstanceGeneration]
$sel:instanceGenerations:InstanceRequirements' :: InstanceRequirements -> Maybe [InstanceGeneration]
instanceGenerations} -> Maybe [InstanceGeneration]
instanceGenerations) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [InstanceGeneration]
a -> InstanceRequirements
s {$sel:instanceGenerations:InstanceRequirements' :: Maybe [InstanceGeneration]
instanceGenerations = Maybe [InstanceGeneration]
a} :: InstanceRequirements) 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, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
-- in the /Amazon EC2 User Guide for Linux Instances/.
--
-- Default: @included@
instanceRequirements_localStorage :: Lens.Lens' InstanceRequirements (Prelude.Maybe LocalStorage)
instanceRequirements_localStorage :: Lens' InstanceRequirements (Maybe LocalStorage)
instanceRequirements_localStorage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe LocalStorage
localStorage :: Maybe LocalStorage
$sel:localStorage:InstanceRequirements' :: InstanceRequirements -> Maybe LocalStorage
localStorage} -> Maybe LocalStorage
localStorage) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe LocalStorage
a -> InstanceRequirements
s {$sel:localStorage:InstanceRequirements' :: Maybe LocalStorage
localStorage = Maybe LocalStorage
a} :: InstanceRequirements)

-- | Indicates 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: Any local storage type
instanceRequirements_localStorageTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [LocalStorageType])
instanceRequirements_localStorageTypes :: Lens' InstanceRequirements (Maybe [LocalStorageType])
instanceRequirements_localStorageTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe [LocalStorageType]
localStorageTypes :: Maybe [LocalStorageType]
$sel:localStorageTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [LocalStorageType]
localStorageTypes} -> Maybe [LocalStorageType]
localStorageTypes) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe [LocalStorageType]
a -> InstanceRequirements
s {$sel:localStorageTypes:InstanceRequirements' :: Maybe [LocalStorageType]
localStorageTypes = Maybe [LocalStorageType]
a} :: InstanceRequirements) 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 for an instance type,
-- in GiB.
--
-- Default: No minimum or maximum limits
instanceRequirements_memoryGiBPerVCpu :: Lens.Lens' InstanceRequirements (Prelude.Maybe MemoryGiBPerVCpuRequest)
instanceRequirements_memoryGiBPerVCpu :: Lens' InstanceRequirements (Maybe MemoryGiBPerVCpuRequest)
instanceRequirements_memoryGiBPerVCpu = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu :: Maybe MemoryGiBPerVCpuRequest
$sel:memoryGiBPerVCpu:InstanceRequirements' :: InstanceRequirements -> Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu} -> Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe MemoryGiBPerVCpuRequest
a -> InstanceRequirements
s {$sel:memoryGiBPerVCpu:InstanceRequirements' :: Maybe MemoryGiBPerVCpuRequest
memoryGiBPerVCpu = Maybe MemoryGiBPerVCpuRequest
a} :: InstanceRequirements)

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

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

-- | The 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 least expensive current generation 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@.
--
-- 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.
--
-- Default: @20@
instanceRequirements_onDemandMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Natural)
instanceRequirements_onDemandMaxPricePercentageOverLowestPrice :: Lens' InstanceRequirements (Maybe Natural)
instanceRequirements_onDemandMaxPricePercentageOverLowestPrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe Natural
onDemandMaxPricePercentageOverLowestPrice :: Maybe Natural
$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirements' :: InstanceRequirements -> Maybe Natural
onDemandMaxPricePercentageOverLowestPrice} -> Maybe Natural
onDemandMaxPricePercentageOverLowestPrice) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe Natural
a -> InstanceRequirements
s {$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirements' :: Maybe Natural
onDemandMaxPricePercentageOverLowestPrice = Maybe Natural
a} :: InstanceRequirements)

-- | Indicates whether instance types must provide On-Demand Instance
-- hibernation support.
--
-- Default: @false@
instanceRequirements_requireHibernateSupport :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Bool)
instanceRequirements_requireHibernateSupport :: Lens' InstanceRequirements (Maybe Bool)
instanceRequirements_requireHibernateSupport = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe Bool
requireHibernateSupport :: Maybe Bool
$sel:requireHibernateSupport:InstanceRequirements' :: InstanceRequirements -> Maybe Bool
requireHibernateSupport} -> Maybe Bool
requireHibernateSupport) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe Bool
a -> InstanceRequirements
s {$sel:requireHibernateSupport:InstanceRequirements' :: Maybe Bool
requireHibernateSupport = Maybe Bool
a} :: InstanceRequirements)

-- | The price protection threshold for Spot Instances. This is the maximum
-- you’ll pay for a Spot Instance, expressed as a percentage higher than
-- the least expensive current generation 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@.
--
-- 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.
--
-- Default: @100@
instanceRequirements_spotMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Natural)
instanceRequirements_spotMaxPricePercentageOverLowestPrice :: Lens' InstanceRequirements (Maybe Natural)
instanceRequirements_spotMaxPricePercentageOverLowestPrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe Natural
spotMaxPricePercentageOverLowestPrice :: Maybe Natural
$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirements' :: InstanceRequirements -> Maybe Natural
spotMaxPricePercentageOverLowestPrice} -> Maybe Natural
spotMaxPricePercentageOverLowestPrice) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe Natural
a -> InstanceRequirements
s {$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirements' :: Maybe Natural
spotMaxPricePercentageOverLowestPrice = Maybe Natural
a} :: InstanceRequirements)

-- | The minimum and maximum total local storage size for an instance type,
-- in GB.
--
-- Default: No minimum or maximum limits
instanceRequirements_totalLocalStorageGB :: Lens.Lens' InstanceRequirements (Prelude.Maybe TotalLocalStorageGBRequest)
instanceRequirements_totalLocalStorageGB :: Lens' InstanceRequirements (Maybe TotalLocalStorageGBRequest)
instanceRequirements_totalLocalStorageGB = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {Maybe TotalLocalStorageGBRequest
totalLocalStorageGB :: Maybe TotalLocalStorageGBRequest
$sel:totalLocalStorageGB:InstanceRequirements' :: InstanceRequirements -> Maybe TotalLocalStorageGBRequest
totalLocalStorageGB} -> Maybe TotalLocalStorageGBRequest
totalLocalStorageGB) (\s :: InstanceRequirements
s@InstanceRequirements' {} Maybe TotalLocalStorageGBRequest
a -> InstanceRequirements
s {$sel:totalLocalStorageGB:InstanceRequirements' :: Maybe TotalLocalStorageGBRequest
totalLocalStorageGB = Maybe TotalLocalStorageGBRequest
a} :: InstanceRequirements)

-- | The minimum and maximum number of vCPUs for an instance type.
instanceRequirements_vCpuCount :: Lens.Lens' InstanceRequirements VCpuCountRequest
instanceRequirements_vCpuCount :: Lens' InstanceRequirements VCpuCountRequest
instanceRequirements_vCpuCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {VCpuCountRequest
vCpuCount :: VCpuCountRequest
$sel:vCpuCount:InstanceRequirements' :: InstanceRequirements -> VCpuCountRequest
vCpuCount} -> VCpuCountRequest
vCpuCount) (\s :: InstanceRequirements
s@InstanceRequirements' {} VCpuCountRequest
a -> InstanceRequirements
s {$sel:vCpuCount:InstanceRequirements' :: VCpuCountRequest
vCpuCount = VCpuCountRequest
a} :: InstanceRequirements)

-- | The minimum and maximum instance memory size for an instance type, in
-- MiB.
instanceRequirements_memoryMiB :: Lens.Lens' InstanceRequirements MemoryMiBRequest
instanceRequirements_memoryMiB :: Lens' InstanceRequirements MemoryMiBRequest
instanceRequirements_memoryMiB = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceRequirements' {MemoryMiBRequest
memoryMiB :: MemoryMiBRequest
$sel:memoryMiB:InstanceRequirements' :: InstanceRequirements -> MemoryMiBRequest
memoryMiB} -> MemoryMiBRequest
memoryMiB) (\s :: InstanceRequirements
s@InstanceRequirements' {} MemoryMiBRequest
a -> InstanceRequirements
s {$sel:memoryMiB:InstanceRequirements' :: MemoryMiBRequest
memoryMiB = MemoryMiBRequest
a} :: InstanceRequirements)

instance Data.FromXML InstanceRequirements where
  parseXML :: [Node] -> Either String InstanceRequirements
parseXML [Node]
x =
    Maybe AcceleratorCountRequest
-> Maybe [AcceleratorManufacturer]
-> Maybe [AcceleratorName]
-> Maybe AcceleratorTotalMemoryMiBRequest
-> Maybe [AcceleratorType]
-> Maybe [Text]
-> Maybe BareMetal
-> Maybe BaselineEbsBandwidthMbpsRequest
-> Maybe BurstablePerformance
-> Maybe [CpuManufacturer]
-> Maybe [Text]
-> Maybe [InstanceGeneration]
-> Maybe LocalStorage
-> Maybe [LocalStorageType]
-> Maybe MemoryGiBPerVCpuRequest
-> Maybe NetworkBandwidthGbpsRequest
-> Maybe NetworkInterfaceCountRequest
-> Maybe Natural
-> Maybe Bool
-> Maybe Natural
-> Maybe TotalLocalStorageGBRequest
-> VCpuCountRequest
-> MemoryMiBRequest
-> InstanceRequirements
InstanceRequirements'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AcceleratorCount")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AcceleratorManufacturers"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AcceleratorNames"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AcceleratorTotalMemoryMiB")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AcceleratorTypes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"AllowedInstanceTypes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"BareMetal")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"BaselineEbsBandwidthMbps")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"BurstablePerformance")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"CpuManufacturers"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ExcludedInstanceTypes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"InstanceGenerations"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"LocalStorage")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"LocalStorageTypes"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"MemoryGiBPerVCpu")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"NetworkBandwidthGbps")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"NetworkInterfaceCount")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"OnDemandMaxPricePercentageOverLowestPrice"
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"RequireHibernateSupport")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"SpotMaxPricePercentageOverLowestPrice")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"TotalLocalStorageGB")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"VCpuCount")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"MemoryMiB")

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

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

instance Data.ToQuery InstanceRequirements where
  toQuery :: InstanceRequirements -> QueryString
toQuery InstanceRequirements' {Maybe Bool
Maybe Natural
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
VCpuCountRequest
memoryMiB :: MemoryMiBRequest
vCpuCount :: VCpuCountRequest
totalLocalStorageGB :: Maybe TotalLocalStorageGBRequest
spotMaxPricePercentageOverLowestPrice :: Maybe Natural
requireHibernateSupport :: Maybe Bool
onDemandMaxPricePercentageOverLowestPrice :: Maybe Natural
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:InstanceRequirements' :: InstanceRequirements -> MemoryMiBRequest
$sel:vCpuCount:InstanceRequirements' :: InstanceRequirements -> VCpuCountRequest
$sel:totalLocalStorageGB:InstanceRequirements' :: InstanceRequirements -> Maybe TotalLocalStorageGBRequest
$sel:spotMaxPricePercentageOverLowestPrice:InstanceRequirements' :: InstanceRequirements -> Maybe Natural
$sel:requireHibernateSupport:InstanceRequirements' :: InstanceRequirements -> Maybe Bool
$sel:onDemandMaxPricePercentageOverLowestPrice:InstanceRequirements' :: InstanceRequirements -> Maybe Natural
$sel:networkInterfaceCount:InstanceRequirements' :: InstanceRequirements -> Maybe NetworkInterfaceCountRequest
$sel:networkBandwidthGbps:InstanceRequirements' :: InstanceRequirements -> Maybe NetworkBandwidthGbpsRequest
$sel:memoryGiBPerVCpu:InstanceRequirements' :: InstanceRequirements -> Maybe MemoryGiBPerVCpuRequest
$sel:localStorageTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [LocalStorageType]
$sel:localStorage:InstanceRequirements' :: InstanceRequirements -> Maybe LocalStorage
$sel:instanceGenerations:InstanceRequirements' :: InstanceRequirements -> Maybe [InstanceGeneration]
$sel:excludedInstanceTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [Text]
$sel:cpuManufacturers:InstanceRequirements' :: InstanceRequirements -> Maybe [CpuManufacturer]
$sel:burstablePerformance:InstanceRequirements' :: InstanceRequirements -> Maybe BurstablePerformance
$sel:baselineEbsBandwidthMbps:InstanceRequirements' :: InstanceRequirements -> Maybe BaselineEbsBandwidthMbpsRequest
$sel:bareMetal:InstanceRequirements' :: InstanceRequirements -> Maybe BareMetal
$sel:allowedInstanceTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [Text]
$sel:acceleratorTypes:InstanceRequirements' :: InstanceRequirements -> Maybe [AcceleratorType]
$sel:acceleratorTotalMemoryMiB:InstanceRequirements' :: InstanceRequirements -> Maybe AcceleratorTotalMemoryMiBRequest
$sel:acceleratorNames:InstanceRequirements' :: InstanceRequirements -> Maybe [AcceleratorName]
$sel:acceleratorManufacturers:InstanceRequirements' :: InstanceRequirements -> Maybe [AcceleratorManufacturer]
$sel:acceleratorCount:InstanceRequirements' :: InstanceRequirements -> Maybe AcceleratorCountRequest
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"AcceleratorCount" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe AcceleratorCountRequest
acceleratorCount,
        ByteString
"AcceleratorManufacturers"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AcceleratorManufacturer]
acceleratorManufacturers
            ),
        ByteString
"AcceleratorNames"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                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,
        ByteString
"AcceleratorTypes"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [AcceleratorType]
acceleratorTypes
            ),
        ByteString
"AllowedInstanceTypes"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                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,
        ByteString
"CpuManufacturers"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [CpuManufacturer]
cpuManufacturers
            ),
        ByteString
"ExcludedInstanceTypes"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
excludedInstanceTypes
            ),
        ByteString
"InstanceGenerations"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                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,
        ByteString
"LocalStorageTypes"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a. ToQuery a => a -> QueryString
Data.toQuery
            ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member"
                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 Natural
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 Natural
spotMaxPricePercentageOverLowestPrice,
        ByteString
"TotalLocalStorageGB" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe TotalLocalStorageGBRequest
totalLocalStorageGB,
        ByteString
"VCpuCount" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: VCpuCountRequest
vCpuCount,
        ByteString
"MemoryMiB" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: MemoryMiBRequest
memoryMiB
      ]