packages feed

amazonka-ec2-2.0: gen/Amazonka/EC2/ModifyCapacityReservationFleet.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# 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.ModifyCapacityReservationFleet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies a Capacity Reservation Fleet.
--
-- When you modify the total target capacity of a Capacity Reservation
-- Fleet, the Fleet automatically creates new Capacity Reservations, or
-- modifies or cancels existing Capacity Reservations in the Fleet to meet
-- the new total target capacity. When you modify the end date for the
-- Fleet, the end dates for all of the individual Capacity Reservations in
-- the Fleet are updated accordingly.
module Amazonka.EC2.ModifyCapacityReservationFleet
  ( -- * Creating a Request
    ModifyCapacityReservationFleet (..),
    newModifyCapacityReservationFleet,

    -- * Request Lenses
    modifyCapacityReservationFleet_dryRun,
    modifyCapacityReservationFleet_endDate,
    modifyCapacityReservationFleet_removeEndDate,
    modifyCapacityReservationFleet_totalTargetCapacity,
    modifyCapacityReservationFleet_capacityReservationFleetId,

    -- * Destructuring the Response
    ModifyCapacityReservationFleetResponse (..),
    newModifyCapacityReservationFleetResponse,

    -- * Response Lenses
    modifyCapacityReservationFleetResponse_return,
    modifyCapacityReservationFleetResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newModifyCapacityReservationFleet' smart constructor.
data ModifyCapacityReservationFleet = ModifyCapacityReservationFleet'
  { -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The date and time at which the Capacity Reservation Fleet expires. When
    -- the Capacity Reservation Fleet expires, its state changes to @expired@
    -- and all of the Capacity Reservations in the Fleet expire.
    --
    -- The Capacity Reservation Fleet expires within an hour after the
    -- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
    -- the Capacity Reservation Fleet is guaranteed to expire between
    -- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
    --
    -- You can\'t specify __EndDate__ and __RemoveEndDate__ in the same
    -- request.
    endDate :: Prelude.Maybe Data.ISO8601,
    -- | Indicates whether to remove the end date from the Capacity Reservation
    -- Fleet. If you remove the end date, the Capacity Reservation Fleet does
    -- not expire and it remains active until you explicitly cancel it using
    -- the __CancelCapacityReservationFleet__ action.
    --
    -- You can\'t specify __RemoveEndDate__ and __EndDate__ in the same
    -- request.
    removeEndDate :: Prelude.Maybe Prelude.Bool,
    -- | The total number of capacity units to be reserved by the Capacity
    -- Reservation Fleet. This value, together with the instance type weights
    -- that you assign to each instance type used by the Fleet determine the
    -- number of instances for which the Fleet reserves capacity. Both values
    -- are based on units that make sense for your workload. 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.
    totalTargetCapacity :: Prelude.Maybe Prelude.Int,
    -- | The ID of the Capacity Reservation Fleet to modify.
    capacityReservationFleetId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ModifyCapacityReservationFleet' 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:
--
-- 'dryRun', 'modifyCapacityReservationFleet_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'endDate', 'modifyCapacityReservationFleet_endDate' - The date and time at which the Capacity Reservation Fleet expires. When
-- the Capacity Reservation Fleet expires, its state changes to @expired@
-- and all of the Capacity Reservations in the Fleet expire.
--
-- The Capacity Reservation Fleet expires within an hour after the
-- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
-- the Capacity Reservation Fleet is guaranteed to expire between
-- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
--
-- You can\'t specify __EndDate__ and __RemoveEndDate__ in the same
-- request.
--
-- 'removeEndDate', 'modifyCapacityReservationFleet_removeEndDate' - Indicates whether to remove the end date from the Capacity Reservation
-- Fleet. If you remove the end date, the Capacity Reservation Fleet does
-- not expire and it remains active until you explicitly cancel it using
-- the __CancelCapacityReservationFleet__ action.
--
-- You can\'t specify __RemoveEndDate__ and __EndDate__ in the same
-- request.
--
-- 'totalTargetCapacity', 'modifyCapacityReservationFleet_totalTargetCapacity' - The total number of capacity units to be reserved by the Capacity
-- Reservation Fleet. This value, together with the instance type weights
-- that you assign to each instance type used by the Fleet determine the
-- number of instances for which the Fleet reserves capacity. Both values
-- are based on units that make sense for your workload. 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.
--
-- 'capacityReservationFleetId', 'modifyCapacityReservationFleet_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet to modify.
newModifyCapacityReservationFleet ::
  -- | 'capacityReservationFleetId'
  Prelude.Text ->
  ModifyCapacityReservationFleet
newModifyCapacityReservationFleet
  pCapacityReservationFleetId_ =
    ModifyCapacityReservationFleet'
      { dryRun =
          Prelude.Nothing,
        endDate = Prelude.Nothing,
        removeEndDate = Prelude.Nothing,
        totalTargetCapacity = Prelude.Nothing,
        capacityReservationFleetId =
          pCapacityReservationFleetId_
      }

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
modifyCapacityReservationFleet_dryRun :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.Bool)
modifyCapacityReservationFleet_dryRun = Lens.lens (\ModifyCapacityReservationFleet' {dryRun} -> dryRun) (\s@ModifyCapacityReservationFleet' {} a -> s {dryRun = a} :: ModifyCapacityReservationFleet)

-- | The date and time at which the Capacity Reservation Fleet expires. When
-- the Capacity Reservation Fleet expires, its state changes to @expired@
-- and all of the Capacity Reservations in the Fleet expire.
--
-- The Capacity Reservation Fleet expires within an hour after the
-- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
-- the Capacity Reservation Fleet is guaranteed to expire between
-- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
--
-- You can\'t specify __EndDate__ and __RemoveEndDate__ in the same
-- request.
modifyCapacityReservationFleet_endDate :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
modifyCapacityReservationFleet_endDate = Lens.lens (\ModifyCapacityReservationFleet' {endDate} -> endDate) (\s@ModifyCapacityReservationFleet' {} a -> s {endDate = a} :: ModifyCapacityReservationFleet) Prelude.. Lens.mapping Data._Time

-- | Indicates whether to remove the end date from the Capacity Reservation
-- Fleet. If you remove the end date, the Capacity Reservation Fleet does
-- not expire and it remains active until you explicitly cancel it using
-- the __CancelCapacityReservationFleet__ action.
--
-- You can\'t specify __RemoveEndDate__ and __EndDate__ in the same
-- request.
modifyCapacityReservationFleet_removeEndDate :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.Bool)
modifyCapacityReservationFleet_removeEndDate = Lens.lens (\ModifyCapacityReservationFleet' {removeEndDate} -> removeEndDate) (\s@ModifyCapacityReservationFleet' {} a -> s {removeEndDate = a} :: ModifyCapacityReservationFleet)

-- | The total number of capacity units to be reserved by the Capacity
-- Reservation Fleet. This value, together with the instance type weights
-- that you assign to each instance type used by the Fleet determine the
-- number of instances for which the Fleet reserves capacity. Both values
-- are based on units that make sense for your workload. 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.
modifyCapacityReservationFleet_totalTargetCapacity :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.Int)
modifyCapacityReservationFleet_totalTargetCapacity = Lens.lens (\ModifyCapacityReservationFleet' {totalTargetCapacity} -> totalTargetCapacity) (\s@ModifyCapacityReservationFleet' {} a -> s {totalTargetCapacity = a} :: ModifyCapacityReservationFleet)

-- | The ID of the Capacity Reservation Fleet to modify.
modifyCapacityReservationFleet_capacityReservationFleetId :: Lens.Lens' ModifyCapacityReservationFleet Prelude.Text
modifyCapacityReservationFleet_capacityReservationFleetId = Lens.lens (\ModifyCapacityReservationFleet' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@ModifyCapacityReservationFleet' {} a -> s {capacityReservationFleetId = a} :: ModifyCapacityReservationFleet)

instance
  Core.AWSRequest
    ModifyCapacityReservationFleet
  where
  type
    AWSResponse ModifyCapacityReservationFleet =
      ModifyCapacityReservationFleetResponse
  request overrides =
    Request.postQuery (overrides defaultService)
  response =
    Response.receiveXML
      ( \s h x ->
          ModifyCapacityReservationFleetResponse'
            Prelude.<$> (x Data..@? "return")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance
  Prelude.Hashable
    ModifyCapacityReservationFleet
  where
  hashWithSalt
    _salt
    ModifyCapacityReservationFleet' {..} =
      _salt
        `Prelude.hashWithSalt` dryRun
        `Prelude.hashWithSalt` endDate
        `Prelude.hashWithSalt` removeEndDate
        `Prelude.hashWithSalt` totalTargetCapacity
        `Prelude.hashWithSalt` capacityReservationFleetId

instance
  Prelude.NFData
    ModifyCapacityReservationFleet
  where
  rnf ModifyCapacityReservationFleet' {..} =
    Prelude.rnf dryRun
      `Prelude.seq` Prelude.rnf endDate
      `Prelude.seq` Prelude.rnf removeEndDate
      `Prelude.seq` Prelude.rnf totalTargetCapacity
      `Prelude.seq` Prelude.rnf capacityReservationFleetId

instance
  Data.ToHeaders
    ModifyCapacityReservationFleet
  where
  toHeaders = Prelude.const Prelude.mempty

instance Data.ToPath ModifyCapacityReservationFleet where
  toPath = Prelude.const "/"

instance Data.ToQuery ModifyCapacityReservationFleet where
  toQuery ModifyCapacityReservationFleet' {..} =
    Prelude.mconcat
      [ "Action"
          Data.=: ( "ModifyCapacityReservationFleet" ::
                      Prelude.ByteString
                  ),
        "Version"
          Data.=: ("2016-11-15" :: Prelude.ByteString),
        "DryRun" Data.=: dryRun,
        "EndDate" Data.=: endDate,
        "RemoveEndDate" Data.=: removeEndDate,
        "TotalTargetCapacity" Data.=: totalTargetCapacity,
        "CapacityReservationFleetId"
          Data.=: capacityReservationFleetId
      ]

-- | /See:/ 'newModifyCapacityReservationFleetResponse' smart constructor.
data ModifyCapacityReservationFleetResponse = ModifyCapacityReservationFleetResponse'
  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
    return' :: Prelude.Maybe Prelude.Bool,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ModifyCapacityReservationFleetResponse' 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:
--
-- 'return'', 'modifyCapacityReservationFleetResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
--
-- 'httpStatus', 'modifyCapacityReservationFleetResponse_httpStatus' - The response's http status code.
newModifyCapacityReservationFleetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ModifyCapacityReservationFleetResponse
newModifyCapacityReservationFleetResponse
  pHttpStatus_ =
    ModifyCapacityReservationFleetResponse'
      { return' =
          Prelude.Nothing,
        httpStatus = pHttpStatus_
      }

-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
modifyCapacityReservationFleetResponse_return :: Lens.Lens' ModifyCapacityReservationFleetResponse (Prelude.Maybe Prelude.Bool)
modifyCapacityReservationFleetResponse_return = Lens.lens (\ModifyCapacityReservationFleetResponse' {return'} -> return') (\s@ModifyCapacityReservationFleetResponse' {} a -> s {return' = a} :: ModifyCapacityReservationFleetResponse)

-- | The response's http status code.
modifyCapacityReservationFleetResponse_httpStatus :: Lens.Lens' ModifyCapacityReservationFleetResponse Prelude.Int
modifyCapacityReservationFleetResponse_httpStatus = Lens.lens (\ModifyCapacityReservationFleetResponse' {httpStatus} -> httpStatus) (\s@ModifyCapacityReservationFleetResponse' {} a -> s {httpStatus = a} :: ModifyCapacityReservationFleetResponse)

instance
  Prelude.NFData
    ModifyCapacityReservationFleetResponse
  where
  rnf ModifyCapacityReservationFleetResponse' {..} =
    Prelude.rnf return'
      `Prelude.seq` Prelude.rnf httpStatus