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

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

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

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.CapacityReservationFleetState
import Amazonka.EC2.Types.FleetCapacityReservation
import Amazonka.EC2.Types.FleetCapacityReservationTenancy
import Amazonka.EC2.Types.FleetInstanceMatchCriteria
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Information about a Capacity Reservation Fleet.
--
-- /See:/ 'newCapacityReservationFleet' smart constructor.
data CapacityReservationFleet = CapacityReservationFleet'
  { -- | The strategy used by the Capacity Reservation Fleet to determine which
    -- of the specified instance types to use. For more information, see For
    -- more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
    -- in the Amazon EC2 User Guide.
    CapacityReservationFleet -> Maybe Text
allocationStrategy :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the Capacity Reservation Fleet.
    CapacityReservationFleet -> Maybe Text
capacityReservationFleetArn :: Prelude.Maybe Prelude.Text,
    -- | The ID of the Capacity Reservation Fleet.
    CapacityReservationFleet -> Maybe Text
capacityReservationFleetId :: Prelude.Maybe Prelude.Text,
    -- | The date and time at which the Capacity Reservation Fleet was created.
    CapacityReservationFleet -> Maybe ISO8601
createTime :: Prelude.Maybe Data.ISO8601,
    -- | The date and time at which the Capacity Reservation Fleet expires.
    CapacityReservationFleet -> Maybe ISO8601
endDate :: Prelude.Maybe Data.ISO8601,
    -- | Indicates the type of instance launches that the Capacity Reservation
    -- Fleet accepts. All Capacity Reservations in the Fleet inherit this
    -- instance matching criteria.
    --
    -- Currently, Capacity Reservation Fleets support @open@ instance matching
    -- criteria only. This means that instances that have matching attributes
    -- (instance type, platform, and Availability Zone) run in the Capacity
    -- Reservations automatically. Instances do not need to explicitly target a
    -- Capacity Reservation Fleet to use its reserved capacity.
    CapacityReservationFleet -> Maybe FleetInstanceMatchCriteria
instanceMatchCriteria :: Prelude.Maybe FleetInstanceMatchCriteria,
    -- | Information about the instance types for which to reserve the capacity.
    CapacityReservationFleet -> Maybe [FleetCapacityReservation]
instanceTypeSpecifications :: Prelude.Maybe [FleetCapacityReservation],
    -- | The state of the Capacity Reservation Fleet. Possible states include:
    --
    -- -   @submitted@ - The Capacity Reservation Fleet request has been
    --     submitted and Amazon Elastic Compute Cloud is preparing to create
    --     the Capacity Reservations.
    --
    -- -   @modifying@ - The Capacity Reservation Fleet is being modified. The
    --     Fleet remains in this state until the modification is complete.
    --
    -- -   @active@ - The Capacity Reservation Fleet has fulfilled its total
    --     target capacity and it is attempting to maintain this capacity. The
    --     Fleet remains in this state until it is modified or deleted.
    --
    -- -   @partially_fulfilled@ - The Capacity Reservation Fleet has partially
    --     fulfilled its total target capacity. There is insufficient Amazon
    --     EC2 to fulfill the total target capacity. The Fleet is attempting to
    --     asynchronously fulfill its total target capacity.
    --
    -- -   @expiring@ - The Capacity Reservation Fleet has reach its end date
    --     and it is in the process of expiring. One or more of its Capacity
    --     reservations might still be active.
    --
    -- -   @expired@ - The Capacity Reservation Fleet has reach its end date.
    --     The Fleet and its Capacity Reservations are expired. The Fleet
    --     can\'t create new Capacity Reservations.
    --
    -- -   @cancelling@ - The Capacity Reservation Fleet is in the process of
    --     being cancelled. One or more of its Capacity reservations might
    --     still be active.
    --
    -- -   @cancelled@ - The Capacity Reservation Fleet has been manually
    --     cancelled. The Fleet and its Capacity Reservations are cancelled and
    --     the Fleet can\'t create new Capacity Reservations.
    --
    -- -   @failed@ - The Capacity Reservation Fleet failed to reserve capacity
    --     for the specified instance types.
    CapacityReservationFleet -> Maybe CapacityReservationFleetState
state :: Prelude.Maybe CapacityReservationFleetState,
    -- | The tags assigned to the Capacity Reservation Fleet.
    CapacityReservationFleet -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The tenancy of the Capacity Reservation Fleet. Tenancies include:
    --
    -- -   @default@ - The Capacity Reservation Fleet is created on hardware
    --     that is shared with other Amazon Web Services accounts.
    --
    -- -   @dedicated@ - The Capacity Reservation Fleet is created on
    --     single-tenant hardware that is dedicated to a single Amazon Web
    --     Services account.
    CapacityReservationFleet -> Maybe FleetCapacityReservationTenancy
tenancy :: Prelude.Maybe FleetCapacityReservationTenancy,
    -- | The capacity units that have been fulfilled.
    CapacityReservationFleet -> Maybe Double
totalFulfilledCapacity :: Prelude.Maybe Prelude.Double,
    -- | The total number of capacity units for which the Capacity Reservation
    -- Fleet reserves capacity. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
    -- in the Amazon EC2 User Guide.
    CapacityReservationFleet -> Maybe Int
totalTargetCapacity :: Prelude.Maybe Prelude.Int
  }
  deriving (CapacityReservationFleet -> CapacityReservationFleet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CapacityReservationFleet -> CapacityReservationFleet -> Bool
$c/= :: CapacityReservationFleet -> CapacityReservationFleet -> Bool
== :: CapacityReservationFleet -> CapacityReservationFleet -> Bool
$c== :: CapacityReservationFleet -> CapacityReservationFleet -> Bool
Prelude.Eq, ReadPrec [CapacityReservationFleet]
ReadPrec CapacityReservationFleet
Int -> ReadS CapacityReservationFleet
ReadS [CapacityReservationFleet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CapacityReservationFleet]
$creadListPrec :: ReadPrec [CapacityReservationFleet]
readPrec :: ReadPrec CapacityReservationFleet
$creadPrec :: ReadPrec CapacityReservationFleet
readList :: ReadS [CapacityReservationFleet]
$creadList :: ReadS [CapacityReservationFleet]
readsPrec :: Int -> ReadS CapacityReservationFleet
$creadsPrec :: Int -> ReadS CapacityReservationFleet
Prelude.Read, Int -> CapacityReservationFleet -> ShowS
[CapacityReservationFleet] -> ShowS
CapacityReservationFleet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CapacityReservationFleet] -> ShowS
$cshowList :: [CapacityReservationFleet] -> ShowS
show :: CapacityReservationFleet -> String
$cshow :: CapacityReservationFleet -> String
showsPrec :: Int -> CapacityReservationFleet -> ShowS
$cshowsPrec :: Int -> CapacityReservationFleet -> ShowS
Prelude.Show, forall x.
Rep CapacityReservationFleet x -> CapacityReservationFleet
forall x.
CapacityReservationFleet -> Rep CapacityReservationFleet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CapacityReservationFleet x -> CapacityReservationFleet
$cfrom :: forall x.
CapacityReservationFleet -> Rep CapacityReservationFleet x
Prelude.Generic)

-- |
-- Create a value of 'CapacityReservationFleet' 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:
--
-- 'allocationStrategy', 'capacityReservationFleet_allocationStrategy' - The strategy used by the Capacity Reservation Fleet to determine which
-- of the specified instance types to use. For more information, see For
-- more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
-- in the Amazon EC2 User Guide.
--
-- 'capacityReservationFleetArn', 'capacityReservationFleet_capacityReservationFleetArn' - The ARN of the Capacity Reservation Fleet.
--
-- 'capacityReservationFleetId', 'capacityReservationFleet_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet.
--
-- 'createTime', 'capacityReservationFleet_createTime' - The date and time at which the Capacity Reservation Fleet was created.
--
-- 'endDate', 'capacityReservationFleet_endDate' - The date and time at which the Capacity Reservation Fleet expires.
--
-- 'instanceMatchCriteria', 'capacityReservationFleet_instanceMatchCriteria' - Indicates the type of instance launches that the Capacity Reservation
-- Fleet accepts. All Capacity Reservations in the Fleet inherit this
-- instance matching criteria.
--
-- Currently, Capacity Reservation Fleets support @open@ instance matching
-- criteria only. This means that instances that have matching attributes
-- (instance type, platform, and Availability Zone) run in the Capacity
-- Reservations automatically. Instances do not need to explicitly target a
-- Capacity Reservation Fleet to use its reserved capacity.
--
-- 'instanceTypeSpecifications', 'capacityReservationFleet_instanceTypeSpecifications' - Information about the instance types for which to reserve the capacity.
--
-- 'state', 'capacityReservationFleet_state' - The state of the Capacity Reservation Fleet. Possible states include:
--
-- -   @submitted@ - The Capacity Reservation Fleet request has been
--     submitted and Amazon Elastic Compute Cloud is preparing to create
--     the Capacity Reservations.
--
-- -   @modifying@ - The Capacity Reservation Fleet is being modified. The
--     Fleet remains in this state until the modification is complete.
--
-- -   @active@ - The Capacity Reservation Fleet has fulfilled its total
--     target capacity and it is attempting to maintain this capacity. The
--     Fleet remains in this state until it is modified or deleted.
--
-- -   @partially_fulfilled@ - The Capacity Reservation Fleet has partially
--     fulfilled its total target capacity. There is insufficient Amazon
--     EC2 to fulfill the total target capacity. The Fleet is attempting to
--     asynchronously fulfill its total target capacity.
--
-- -   @expiring@ - The Capacity Reservation Fleet has reach its end date
--     and it is in the process of expiring. One or more of its Capacity
--     reservations might still be active.
--
-- -   @expired@ - The Capacity Reservation Fleet has reach its end date.
--     The Fleet and its Capacity Reservations are expired. The Fleet
--     can\'t create new Capacity Reservations.
--
-- -   @cancelling@ - The Capacity Reservation Fleet is in the process of
--     being cancelled. One or more of its Capacity reservations might
--     still be active.
--
-- -   @cancelled@ - The Capacity Reservation Fleet has been manually
--     cancelled. The Fleet and its Capacity Reservations are cancelled and
--     the Fleet can\'t create new Capacity Reservations.
--
-- -   @failed@ - The Capacity Reservation Fleet failed to reserve capacity
--     for the specified instance types.
--
-- 'tags', 'capacityReservationFleet_tags' - The tags assigned to the Capacity Reservation Fleet.
--
-- 'tenancy', 'capacityReservationFleet_tenancy' - The tenancy of the Capacity Reservation Fleet. Tenancies include:
--
-- -   @default@ - The Capacity Reservation Fleet is created on hardware
--     that is shared with other Amazon Web Services accounts.
--
-- -   @dedicated@ - The Capacity Reservation Fleet is created on
--     single-tenant hardware that is dedicated to a single Amazon Web
--     Services account.
--
-- 'totalFulfilledCapacity', 'capacityReservationFleet_totalFulfilledCapacity' - The capacity units that have been fulfilled.
--
-- 'totalTargetCapacity', 'capacityReservationFleet_totalTargetCapacity' - The total number of capacity units for which the Capacity Reservation
-- Fleet reserves capacity. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
-- in the Amazon EC2 User Guide.
newCapacityReservationFleet ::
  CapacityReservationFleet
newCapacityReservationFleet :: CapacityReservationFleet
newCapacityReservationFleet =
  CapacityReservationFleet'
    { $sel:allocationStrategy:CapacityReservationFleet' :: Maybe Text
allocationStrategy =
        forall a. Maybe a
Prelude.Nothing,
      $sel:capacityReservationFleetArn:CapacityReservationFleet' :: Maybe Text
capacityReservationFleetArn = forall a. Maybe a
Prelude.Nothing,
      $sel:capacityReservationFleetId:CapacityReservationFleet' :: Maybe Text
capacityReservationFleetId = forall a. Maybe a
Prelude.Nothing,
      $sel:createTime:CapacityReservationFleet' :: Maybe ISO8601
createTime = forall a. Maybe a
Prelude.Nothing,
      $sel:endDate:CapacityReservationFleet' :: Maybe ISO8601
endDate = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceMatchCriteria:CapacityReservationFleet' :: Maybe FleetInstanceMatchCriteria
instanceMatchCriteria = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceTypeSpecifications:CapacityReservationFleet' :: Maybe [FleetCapacityReservation]
instanceTypeSpecifications = forall a. Maybe a
Prelude.Nothing,
      $sel:state:CapacityReservationFleet' :: Maybe CapacityReservationFleetState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CapacityReservationFleet' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:tenancy:CapacityReservationFleet' :: Maybe FleetCapacityReservationTenancy
tenancy = forall a. Maybe a
Prelude.Nothing,
      $sel:totalFulfilledCapacity:CapacityReservationFleet' :: Maybe Double
totalFulfilledCapacity = forall a. Maybe a
Prelude.Nothing,
      $sel:totalTargetCapacity:CapacityReservationFleet' :: Maybe Int
totalTargetCapacity = forall a. Maybe a
Prelude.Nothing
    }

-- | The strategy used by the Capacity Reservation Fleet to determine which
-- of the specified instance types to use. For more information, see For
-- more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
-- in the Amazon EC2 User Guide.
capacityReservationFleet_allocationStrategy :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Text)
capacityReservationFleet_allocationStrategy :: Lens' CapacityReservationFleet (Maybe Text)
capacityReservationFleet_allocationStrategy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe Text
allocationStrategy :: Maybe Text
$sel:allocationStrategy:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
allocationStrategy} -> Maybe Text
allocationStrategy) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe Text
a -> CapacityReservationFleet
s {$sel:allocationStrategy:CapacityReservationFleet' :: Maybe Text
allocationStrategy = Maybe Text
a} :: CapacityReservationFleet)

-- | The ARN of the Capacity Reservation Fleet.
capacityReservationFleet_capacityReservationFleetArn :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Text)
capacityReservationFleet_capacityReservationFleetArn :: Lens' CapacityReservationFleet (Maybe Text)
capacityReservationFleet_capacityReservationFleetArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe Text
capacityReservationFleetArn :: Maybe Text
$sel:capacityReservationFleetArn:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
capacityReservationFleetArn} -> Maybe Text
capacityReservationFleetArn) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe Text
a -> CapacityReservationFleet
s {$sel:capacityReservationFleetArn:CapacityReservationFleet' :: Maybe Text
capacityReservationFleetArn = Maybe Text
a} :: CapacityReservationFleet)

-- | The ID of the Capacity Reservation Fleet.
capacityReservationFleet_capacityReservationFleetId :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Text)
capacityReservationFleet_capacityReservationFleetId :: Lens' CapacityReservationFleet (Maybe Text)
capacityReservationFleet_capacityReservationFleetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe Text
capacityReservationFleetId :: Maybe Text
$sel:capacityReservationFleetId:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
capacityReservationFleetId} -> Maybe Text
capacityReservationFleetId) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe Text
a -> CapacityReservationFleet
s {$sel:capacityReservationFleetId:CapacityReservationFleet' :: Maybe Text
capacityReservationFleetId = Maybe Text
a} :: CapacityReservationFleet)

-- | The date and time at which the Capacity Reservation Fleet was created.
capacityReservationFleet_createTime :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
capacityReservationFleet_createTime :: Lens' CapacityReservationFleet (Maybe UTCTime)
capacityReservationFleet_createTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe ISO8601
createTime :: Maybe ISO8601
$sel:createTime:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe ISO8601
createTime} -> Maybe ISO8601
createTime) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe ISO8601
a -> CapacityReservationFleet
s {$sel:createTime:CapacityReservationFleet' :: Maybe ISO8601
createTime = Maybe ISO8601
a} :: CapacityReservationFleet) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The date and time at which the Capacity Reservation Fleet expires.
capacityReservationFleet_endDate :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
capacityReservationFleet_endDate :: Lens' CapacityReservationFleet (Maybe UTCTime)
capacityReservationFleet_endDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe ISO8601
endDate :: Maybe ISO8601
$sel:endDate:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe ISO8601
endDate} -> Maybe ISO8601
endDate) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe ISO8601
a -> CapacityReservationFleet
s {$sel:endDate:CapacityReservationFleet' :: Maybe ISO8601
endDate = Maybe ISO8601
a} :: CapacityReservationFleet) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | Indicates the type of instance launches that the Capacity Reservation
-- Fleet accepts. All Capacity Reservations in the Fleet inherit this
-- instance matching criteria.
--
-- Currently, Capacity Reservation Fleets support @open@ instance matching
-- criteria only. This means that instances that have matching attributes
-- (instance type, platform, and Availability Zone) run in the Capacity
-- Reservations automatically. Instances do not need to explicitly target a
-- Capacity Reservation Fleet to use its reserved capacity.
capacityReservationFleet_instanceMatchCriteria :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe FleetInstanceMatchCriteria)
capacityReservationFleet_instanceMatchCriteria :: Lens' CapacityReservationFleet (Maybe FleetInstanceMatchCriteria)
capacityReservationFleet_instanceMatchCriteria = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe FleetInstanceMatchCriteria
instanceMatchCriteria :: Maybe FleetInstanceMatchCriteria
$sel:instanceMatchCriteria:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe FleetInstanceMatchCriteria
instanceMatchCriteria} -> Maybe FleetInstanceMatchCriteria
instanceMatchCriteria) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe FleetInstanceMatchCriteria
a -> CapacityReservationFleet
s {$sel:instanceMatchCriteria:CapacityReservationFleet' :: Maybe FleetInstanceMatchCriteria
instanceMatchCriteria = Maybe FleetInstanceMatchCriteria
a} :: CapacityReservationFleet)

-- | Information about the instance types for which to reserve the capacity.
capacityReservationFleet_instanceTypeSpecifications :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe [FleetCapacityReservation])
capacityReservationFleet_instanceTypeSpecifications :: Lens' CapacityReservationFleet (Maybe [FleetCapacityReservation])
capacityReservationFleet_instanceTypeSpecifications = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe [FleetCapacityReservation]
instanceTypeSpecifications :: Maybe [FleetCapacityReservation]
$sel:instanceTypeSpecifications:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe [FleetCapacityReservation]
instanceTypeSpecifications} -> Maybe [FleetCapacityReservation]
instanceTypeSpecifications) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe [FleetCapacityReservation]
a -> CapacityReservationFleet
s {$sel:instanceTypeSpecifications:CapacityReservationFleet' :: Maybe [FleetCapacityReservation]
instanceTypeSpecifications = Maybe [FleetCapacityReservation]
a} :: CapacityReservationFleet) 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 state of the Capacity Reservation Fleet. Possible states include:
--
-- -   @submitted@ - The Capacity Reservation Fleet request has been
--     submitted and Amazon Elastic Compute Cloud is preparing to create
--     the Capacity Reservations.
--
-- -   @modifying@ - The Capacity Reservation Fleet is being modified. The
--     Fleet remains in this state until the modification is complete.
--
-- -   @active@ - The Capacity Reservation Fleet has fulfilled its total
--     target capacity and it is attempting to maintain this capacity. The
--     Fleet remains in this state until it is modified or deleted.
--
-- -   @partially_fulfilled@ - The Capacity Reservation Fleet has partially
--     fulfilled its total target capacity. There is insufficient Amazon
--     EC2 to fulfill the total target capacity. The Fleet is attempting to
--     asynchronously fulfill its total target capacity.
--
-- -   @expiring@ - The Capacity Reservation Fleet has reach its end date
--     and it is in the process of expiring. One or more of its Capacity
--     reservations might still be active.
--
-- -   @expired@ - The Capacity Reservation Fleet has reach its end date.
--     The Fleet and its Capacity Reservations are expired. The Fleet
--     can\'t create new Capacity Reservations.
--
-- -   @cancelling@ - The Capacity Reservation Fleet is in the process of
--     being cancelled. One or more of its Capacity reservations might
--     still be active.
--
-- -   @cancelled@ - The Capacity Reservation Fleet has been manually
--     cancelled. The Fleet and its Capacity Reservations are cancelled and
--     the Fleet can\'t create new Capacity Reservations.
--
-- -   @failed@ - The Capacity Reservation Fleet failed to reserve capacity
--     for the specified instance types.
capacityReservationFleet_state :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe CapacityReservationFleetState)
capacityReservationFleet_state :: Lens'
  CapacityReservationFleet (Maybe CapacityReservationFleetState)
capacityReservationFleet_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe CapacityReservationFleetState
state :: Maybe CapacityReservationFleetState
$sel:state:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe CapacityReservationFleetState
state} -> Maybe CapacityReservationFleetState
state) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe CapacityReservationFleetState
a -> CapacityReservationFleet
s {$sel:state:CapacityReservationFleet' :: Maybe CapacityReservationFleetState
state = Maybe CapacityReservationFleetState
a} :: CapacityReservationFleet)

-- | The tags assigned to the Capacity Reservation Fleet.
capacityReservationFleet_tags :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe [Tag])
capacityReservationFleet_tags :: Lens' CapacityReservationFleet (Maybe [Tag])
capacityReservationFleet_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe [Tag]
a -> CapacityReservationFleet
s {$sel:tags:CapacityReservationFleet' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CapacityReservationFleet) 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 tenancy of the Capacity Reservation Fleet. Tenancies include:
--
-- -   @default@ - The Capacity Reservation Fleet is created on hardware
--     that is shared with other Amazon Web Services accounts.
--
-- -   @dedicated@ - The Capacity Reservation Fleet is created on
--     single-tenant hardware that is dedicated to a single Amazon Web
--     Services account.
capacityReservationFleet_tenancy :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe FleetCapacityReservationTenancy)
capacityReservationFleet_tenancy :: Lens'
  CapacityReservationFleet (Maybe FleetCapacityReservationTenancy)
capacityReservationFleet_tenancy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe FleetCapacityReservationTenancy
tenancy :: Maybe FleetCapacityReservationTenancy
$sel:tenancy:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe FleetCapacityReservationTenancy
tenancy} -> Maybe FleetCapacityReservationTenancy
tenancy) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe FleetCapacityReservationTenancy
a -> CapacityReservationFleet
s {$sel:tenancy:CapacityReservationFleet' :: Maybe FleetCapacityReservationTenancy
tenancy = Maybe FleetCapacityReservationTenancy
a} :: CapacityReservationFleet)

-- | The capacity units that have been fulfilled.
capacityReservationFleet_totalFulfilledCapacity :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Double)
capacityReservationFleet_totalFulfilledCapacity :: Lens' CapacityReservationFleet (Maybe Double)
capacityReservationFleet_totalFulfilledCapacity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe Double
totalFulfilledCapacity :: Maybe Double
$sel:totalFulfilledCapacity:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Double
totalFulfilledCapacity} -> Maybe Double
totalFulfilledCapacity) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe Double
a -> CapacityReservationFleet
s {$sel:totalFulfilledCapacity:CapacityReservationFleet' :: Maybe Double
totalFulfilledCapacity = Maybe Double
a} :: CapacityReservationFleet)

-- | The total number of capacity units for which the Capacity Reservation
-- Fleet reserves capacity. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
-- in the Amazon EC2 User Guide.
capacityReservationFleet_totalTargetCapacity :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Int)
capacityReservationFleet_totalTargetCapacity :: Lens' CapacityReservationFleet (Maybe Int)
capacityReservationFleet_totalTargetCapacity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CapacityReservationFleet' {Maybe Int
totalTargetCapacity :: Maybe Int
$sel:totalTargetCapacity:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Int
totalTargetCapacity} -> Maybe Int
totalTargetCapacity) (\s :: CapacityReservationFleet
s@CapacityReservationFleet' {} Maybe Int
a -> CapacityReservationFleet
s {$sel:totalTargetCapacity:CapacityReservationFleet' :: Maybe Int
totalTargetCapacity = Maybe Int
a} :: CapacityReservationFleet)

instance Data.FromXML CapacityReservationFleet where
  parseXML :: [Node] -> Either String CapacityReservationFleet
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe ISO8601
-> Maybe ISO8601
-> Maybe FleetInstanceMatchCriteria
-> Maybe [FleetCapacityReservation]
-> Maybe CapacityReservationFleetState
-> Maybe [Tag]
-> Maybe FleetCapacityReservationTenancy
-> Maybe Double
-> Maybe Int
-> CapacityReservationFleet
CapacityReservationFleet'
      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
"allocationStrategy")
      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
"capacityReservationFleetArn")
      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
"capacityReservationFleetId")
      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
"createTime")
      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
"endDate")
      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
"instanceMatchCriteria")
      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
"instanceTypeSpecificationSet"
                      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
"item")
                  )
      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
"state")
      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
"tagSet"
                      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
"item")
                  )
      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
"tenancy")
      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
"totalFulfilledCapacity")
      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
"totalTargetCapacity")

instance Prelude.Hashable CapacityReservationFleet where
  hashWithSalt :: Int -> CapacityReservationFleet -> Int
hashWithSalt Int
_salt CapacityReservationFleet' {Maybe Double
Maybe Int
Maybe [FleetCapacityReservation]
Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe CapacityReservationFleetState
Maybe FleetCapacityReservationTenancy
Maybe FleetInstanceMatchCriteria
totalTargetCapacity :: Maybe Int
totalFulfilledCapacity :: Maybe Double
tenancy :: Maybe FleetCapacityReservationTenancy
tags :: Maybe [Tag]
state :: Maybe CapacityReservationFleetState
instanceTypeSpecifications :: Maybe [FleetCapacityReservation]
instanceMatchCriteria :: Maybe FleetInstanceMatchCriteria
endDate :: Maybe ISO8601
createTime :: Maybe ISO8601
capacityReservationFleetId :: Maybe Text
capacityReservationFleetArn :: Maybe Text
allocationStrategy :: Maybe Text
$sel:totalTargetCapacity:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Int
$sel:totalFulfilledCapacity:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Double
$sel:tenancy:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe FleetCapacityReservationTenancy
$sel:tags:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe [Tag]
$sel:state:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe CapacityReservationFleetState
$sel:instanceTypeSpecifications:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe [FleetCapacityReservation]
$sel:instanceMatchCriteria:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe FleetInstanceMatchCriteria
$sel:endDate:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe ISO8601
$sel:createTime:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe ISO8601
$sel:capacityReservationFleetId:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
$sel:capacityReservationFleetArn:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
$sel:allocationStrategy:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
allocationStrategy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
capacityReservationFleetArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
capacityReservationFleetId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
createTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
endDate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FleetInstanceMatchCriteria
instanceMatchCriteria
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [FleetCapacityReservation]
instanceTypeSpecifications
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CapacityReservationFleetState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe FleetCapacityReservationTenancy
tenancy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
totalFulfilledCapacity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
totalTargetCapacity

instance Prelude.NFData CapacityReservationFleet where
  rnf :: CapacityReservationFleet -> ()
rnf CapacityReservationFleet' {Maybe Double
Maybe Int
Maybe [FleetCapacityReservation]
Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe CapacityReservationFleetState
Maybe FleetCapacityReservationTenancy
Maybe FleetInstanceMatchCriteria
totalTargetCapacity :: Maybe Int
totalFulfilledCapacity :: Maybe Double
tenancy :: Maybe FleetCapacityReservationTenancy
tags :: Maybe [Tag]
state :: Maybe CapacityReservationFleetState
instanceTypeSpecifications :: Maybe [FleetCapacityReservation]
instanceMatchCriteria :: Maybe FleetInstanceMatchCriteria
endDate :: Maybe ISO8601
createTime :: Maybe ISO8601
capacityReservationFleetId :: Maybe Text
capacityReservationFleetArn :: Maybe Text
allocationStrategy :: Maybe Text
$sel:totalTargetCapacity:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Int
$sel:totalFulfilledCapacity:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Double
$sel:tenancy:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe FleetCapacityReservationTenancy
$sel:tags:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe [Tag]
$sel:state:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe CapacityReservationFleetState
$sel:instanceTypeSpecifications:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe [FleetCapacityReservation]
$sel:instanceMatchCriteria:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe FleetInstanceMatchCriteria
$sel:endDate:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe ISO8601
$sel:createTime:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe ISO8601
$sel:capacityReservationFleetId:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
$sel:capacityReservationFleetArn:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
$sel:allocationStrategy:CapacityReservationFleet' :: CapacityReservationFleet -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
allocationStrategy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
capacityReservationFleetArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
capacityReservationFleetId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
createTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
endDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FleetInstanceMatchCriteria
instanceMatchCriteria
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [FleetCapacityReservation]
instanceTypeSpecifications
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CapacityReservationFleetState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe FleetCapacityReservationTenancy
tenancy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
totalFulfilledCapacity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
totalTargetCapacity