{-# 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.GetReservedInstancesExchangeQuote -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Returns a quote and exchange information for exchanging one or more -- specified Convertible Reserved Instances for a new Convertible Reserved -- Instance. If the exchange cannot be performed, the reason is returned in -- the response. Use AcceptReservedInstancesExchangeQuote to perform the -- exchange. module Amazonka.EC2.GetReservedInstancesExchangeQuote ( -- * Creating a Request GetReservedInstancesExchangeQuote (..), newGetReservedInstancesExchangeQuote, -- * Request Lenses getReservedInstancesExchangeQuote_dryRun, getReservedInstancesExchangeQuote_targetConfigurations, getReservedInstancesExchangeQuote_reservedInstanceIds, -- * Destructuring the Response GetReservedInstancesExchangeQuoteResponse (..), newGetReservedInstancesExchangeQuoteResponse, -- * Response Lenses getReservedInstancesExchangeQuoteResponse_currencyCode, getReservedInstancesExchangeQuoteResponse_isValidExchange, getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt, getReservedInstancesExchangeQuoteResponse_paymentDue, getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup, getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet, getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup, getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet, getReservedInstancesExchangeQuoteResponse_validationFailureReason, getReservedInstancesExchangeQuoteResponse_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 -- | Contains the parameters for GetReservedInstanceExchangeQuote. -- -- /See:/ 'newGetReservedInstancesExchangeQuote' smart constructor. data GetReservedInstancesExchangeQuote = GetReservedInstancesExchangeQuote' { -- | 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 configuration of the target Convertible Reserved Instance to -- exchange for your current Convertible Reserved Instances. targetConfigurations :: Prelude.Maybe [TargetConfigurationRequest], -- | The IDs of the Convertible Reserved Instances to exchange. reservedInstanceIds :: [Prelude.Text] } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'GetReservedInstancesExchangeQuote' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'dryRun', 'getReservedInstancesExchangeQuote_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@. -- -- 'targetConfigurations', 'getReservedInstancesExchangeQuote_targetConfigurations' - The configuration of the target Convertible Reserved Instance to -- exchange for your current Convertible Reserved Instances. -- -- 'reservedInstanceIds', 'getReservedInstancesExchangeQuote_reservedInstanceIds' - The IDs of the Convertible Reserved Instances to exchange. newGetReservedInstancesExchangeQuote :: GetReservedInstancesExchangeQuote newGetReservedInstancesExchangeQuote = GetReservedInstancesExchangeQuote' { dryRun = Prelude.Nothing, targetConfigurations = Prelude.Nothing, reservedInstanceIds = Prelude.mempty } -- | 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@. getReservedInstancesExchangeQuote_dryRun :: Lens.Lens' GetReservedInstancesExchangeQuote (Prelude.Maybe Prelude.Bool) getReservedInstancesExchangeQuote_dryRun = Lens.lens (\GetReservedInstancesExchangeQuote' {dryRun} -> dryRun) (\s@GetReservedInstancesExchangeQuote' {} a -> s {dryRun = a} :: GetReservedInstancesExchangeQuote) -- | The configuration of the target Convertible Reserved Instance to -- exchange for your current Convertible Reserved Instances. getReservedInstancesExchangeQuote_targetConfigurations :: Lens.Lens' GetReservedInstancesExchangeQuote (Prelude.Maybe [TargetConfigurationRequest]) getReservedInstancesExchangeQuote_targetConfigurations = Lens.lens (\GetReservedInstancesExchangeQuote' {targetConfigurations} -> targetConfigurations) (\s@GetReservedInstancesExchangeQuote' {} a -> s {targetConfigurations = a} :: GetReservedInstancesExchangeQuote) Prelude.. Lens.mapping Lens.coerced -- | The IDs of the Convertible Reserved Instances to exchange. getReservedInstancesExchangeQuote_reservedInstanceIds :: Lens.Lens' GetReservedInstancesExchangeQuote [Prelude.Text] getReservedInstancesExchangeQuote_reservedInstanceIds = Lens.lens (\GetReservedInstancesExchangeQuote' {reservedInstanceIds} -> reservedInstanceIds) (\s@GetReservedInstancesExchangeQuote' {} a -> s {reservedInstanceIds = a} :: GetReservedInstancesExchangeQuote) Prelude.. Lens.coerced instance Core.AWSRequest GetReservedInstancesExchangeQuote where type AWSResponse GetReservedInstancesExchangeQuote = GetReservedInstancesExchangeQuoteResponse request overrides = Request.postQuery (overrides defaultService) response = Response.receiveXML ( \s h x -> GetReservedInstancesExchangeQuoteResponse' Prelude.<$> (x Data..@? "currencyCode") Prelude.<*> (x Data..@? "isValidExchange") Prelude.<*> (x Data..@? "outputReservedInstancesWillExpireAt") Prelude.<*> (x Data..@? "paymentDue") Prelude.<*> (x Data..@? "reservedInstanceValueRollup") Prelude.<*> ( x Data..@? "reservedInstanceValueSet" Core..!@ Prelude.mempty Prelude.>>= Core.may (Data.parseXMLList "item") ) Prelude.<*> (x Data..@? "targetConfigurationValueRollup") Prelude.<*> ( x Data..@? "targetConfigurationValueSet" Core..!@ Prelude.mempty Prelude.>>= Core.may (Data.parseXMLList "item") ) Prelude.<*> (x Data..@? "validationFailureReason") Prelude.<*> (Prelude.pure (Prelude.fromEnum s)) ) instance Prelude.Hashable GetReservedInstancesExchangeQuote where hashWithSalt _salt GetReservedInstancesExchangeQuote' {..} = _salt `Prelude.hashWithSalt` dryRun `Prelude.hashWithSalt` targetConfigurations `Prelude.hashWithSalt` reservedInstanceIds instance Prelude.NFData GetReservedInstancesExchangeQuote where rnf GetReservedInstancesExchangeQuote' {..} = Prelude.rnf dryRun `Prelude.seq` Prelude.rnf targetConfigurations `Prelude.seq` Prelude.rnf reservedInstanceIds instance Data.ToHeaders GetReservedInstancesExchangeQuote where toHeaders = Prelude.const Prelude.mempty instance Data.ToPath GetReservedInstancesExchangeQuote where toPath = Prelude.const "/" instance Data.ToQuery GetReservedInstancesExchangeQuote where toQuery GetReservedInstancesExchangeQuote' {..} = Prelude.mconcat [ "Action" Data.=: ( "GetReservedInstancesExchangeQuote" :: Prelude.ByteString ), "Version" Data.=: ("2016-11-15" :: Prelude.ByteString), "DryRun" Data.=: dryRun, Data.toQuery ( Data.toQueryList "TargetConfiguration" Prelude.<$> targetConfigurations ), Data.toQueryList "ReservedInstanceId" reservedInstanceIds ] -- | Contains the output of GetReservedInstancesExchangeQuote. -- -- /See:/ 'newGetReservedInstancesExchangeQuoteResponse' smart constructor. data GetReservedInstancesExchangeQuoteResponse = GetReservedInstancesExchangeQuoteResponse' { -- | The currency of the transaction. currencyCode :: Prelude.Maybe Prelude.Text, -- | If @true@, the exchange is valid. If @false@, the exchange cannot be -- completed. isValidExchange :: Prelude.Maybe Prelude.Bool, -- | The new end date of the reservation term. outputReservedInstancesWillExpireAt :: Prelude.Maybe Data.ISO8601, -- | The total true upfront charge for the exchange. paymentDue :: Prelude.Maybe Prelude.Text, -- | The cost associated with the Reserved Instance. reservedInstanceValueRollup :: Prelude.Maybe ReservationValue, -- | The configuration of your Convertible Reserved Instances. reservedInstanceValueSet :: Prelude.Maybe [ReservedInstanceReservationValue], -- | The cost associated with the Reserved Instance. targetConfigurationValueRollup :: Prelude.Maybe ReservationValue, -- | The values of the target Convertible Reserved Instances. targetConfigurationValueSet :: Prelude.Maybe [TargetReservationValue], -- | Describes the reason why the exchange cannot be completed. validationFailureReason :: Prelude.Maybe Prelude.Text, -- | The response's http status code. httpStatus :: Prelude.Int } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'GetReservedInstancesExchangeQuoteResponse' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'currencyCode', 'getReservedInstancesExchangeQuoteResponse_currencyCode' - The currency of the transaction. -- -- 'isValidExchange', 'getReservedInstancesExchangeQuoteResponse_isValidExchange' - If @true@, the exchange is valid. If @false@, the exchange cannot be -- completed. -- -- 'outputReservedInstancesWillExpireAt', 'getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt' - The new end date of the reservation term. -- -- 'paymentDue', 'getReservedInstancesExchangeQuoteResponse_paymentDue' - The total true upfront charge for the exchange. -- -- 'reservedInstanceValueRollup', 'getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup' - The cost associated with the Reserved Instance. -- -- 'reservedInstanceValueSet', 'getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet' - The configuration of your Convertible Reserved Instances. -- -- 'targetConfigurationValueRollup', 'getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup' - The cost associated with the Reserved Instance. -- -- 'targetConfigurationValueSet', 'getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet' - The values of the target Convertible Reserved Instances. -- -- 'validationFailureReason', 'getReservedInstancesExchangeQuoteResponse_validationFailureReason' - Describes the reason why the exchange cannot be completed. -- -- 'httpStatus', 'getReservedInstancesExchangeQuoteResponse_httpStatus' - The response's http status code. newGetReservedInstancesExchangeQuoteResponse :: -- | 'httpStatus' Prelude.Int -> GetReservedInstancesExchangeQuoteResponse newGetReservedInstancesExchangeQuoteResponse pHttpStatus_ = GetReservedInstancesExchangeQuoteResponse' { currencyCode = Prelude.Nothing, isValidExchange = Prelude.Nothing, outputReservedInstancesWillExpireAt = Prelude.Nothing, paymentDue = Prelude.Nothing, reservedInstanceValueRollup = Prelude.Nothing, reservedInstanceValueSet = Prelude.Nothing, targetConfigurationValueRollup = Prelude.Nothing, targetConfigurationValueSet = Prelude.Nothing, validationFailureReason = Prelude.Nothing, httpStatus = pHttpStatus_ } -- | The currency of the transaction. getReservedInstancesExchangeQuoteResponse_currencyCode :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text) getReservedInstancesExchangeQuoteResponse_currencyCode = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {currencyCode} -> currencyCode) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {currencyCode = a} :: GetReservedInstancesExchangeQuoteResponse) -- | If @true@, the exchange is valid. If @false@, the exchange cannot be -- completed. getReservedInstancesExchangeQuoteResponse_isValidExchange :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Bool) getReservedInstancesExchangeQuoteResponse_isValidExchange = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {isValidExchange} -> isValidExchange) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {isValidExchange = a} :: GetReservedInstancesExchangeQuoteResponse) -- | The new end date of the reservation term. getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.UTCTime) getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {outputReservedInstancesWillExpireAt} -> outputReservedInstancesWillExpireAt) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {outputReservedInstancesWillExpireAt = a} :: GetReservedInstancesExchangeQuoteResponse) Prelude.. Lens.mapping Data._Time -- | The total true upfront charge for the exchange. getReservedInstancesExchangeQuoteResponse_paymentDue :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text) getReservedInstancesExchangeQuoteResponse_paymentDue = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {paymentDue} -> paymentDue) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {paymentDue = a} :: GetReservedInstancesExchangeQuoteResponse) -- | The cost associated with the Reserved Instance. getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe ReservationValue) getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {reservedInstanceValueRollup} -> reservedInstanceValueRollup) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {reservedInstanceValueRollup = a} :: GetReservedInstancesExchangeQuoteResponse) -- | The configuration of your Convertible Reserved Instances. getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe [ReservedInstanceReservationValue]) getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {reservedInstanceValueSet} -> reservedInstanceValueSet) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {reservedInstanceValueSet = a} :: GetReservedInstancesExchangeQuoteResponse) Prelude.. Lens.mapping Lens.coerced -- | The cost associated with the Reserved Instance. getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe ReservationValue) getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {targetConfigurationValueRollup} -> targetConfigurationValueRollup) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {targetConfigurationValueRollup = a} :: GetReservedInstancesExchangeQuoteResponse) -- | The values of the target Convertible Reserved Instances. getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe [TargetReservationValue]) getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {targetConfigurationValueSet} -> targetConfigurationValueSet) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {targetConfigurationValueSet = a} :: GetReservedInstancesExchangeQuoteResponse) Prelude.. Lens.mapping Lens.coerced -- | Describes the reason why the exchange cannot be completed. getReservedInstancesExchangeQuoteResponse_validationFailureReason :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text) getReservedInstancesExchangeQuoteResponse_validationFailureReason = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {validationFailureReason} -> validationFailureReason) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {validationFailureReason = a} :: GetReservedInstancesExchangeQuoteResponse) -- | The response's http status code. getReservedInstancesExchangeQuoteResponse_httpStatus :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse Prelude.Int getReservedInstancesExchangeQuoteResponse_httpStatus = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {httpStatus} -> httpStatus) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {httpStatus = a} :: GetReservedInstancesExchangeQuoteResponse) instance Prelude.NFData GetReservedInstancesExchangeQuoteResponse where rnf GetReservedInstancesExchangeQuoteResponse' {..} = Prelude.rnf currencyCode `Prelude.seq` Prelude.rnf isValidExchange `Prelude.seq` Prelude.rnf outputReservedInstancesWillExpireAt `Prelude.seq` Prelude.rnf paymentDue `Prelude.seq` Prelude.rnf reservedInstanceValueRollup `Prelude.seq` Prelude.rnf reservedInstanceValueSet `Prelude.seq` Prelude.rnf targetConfigurationValueRollup `Prelude.seq` Prelude.rnf targetConfigurationValueSet `Prelude.seq` Prelude.rnf validationFailureReason `Prelude.seq` Prelude.rnf httpStatus