packages feed

amazonka-config-2.0: gen/Amazonka/Config/PutRemediationConfigurations.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.Config.PutRemediationConfigurations
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Adds or updates the remediation configuration with a specific Config
-- rule with the selected target or action. The API creates the
-- @RemediationConfiguration@ object for the Config rule. The Config rule
-- must already exist for you to add a remediation configuration. The
-- target (SSM document) must exist and have permissions to use the target.
--
-- If you make backward incompatible changes to the SSM document, you must
-- call this again to ensure the remediations can run.
--
-- This API does not support adding remediation configurations for
-- service-linked Config Rules such as Organization Config rules, the rules
-- deployed by conformance packs, and rules deployed by Amazon Web Services
-- Security Hub.
--
-- For manual remediation configuration, you need to provide a value for
-- @automationAssumeRole@ or use a value in the @assumeRole@field to
-- remediate your resources. The SSM automation document can use either as
-- long as it maps to a valid parameter.
--
-- However, for automatic remediation configuration, the only valid
-- @assumeRole@ field value is @AutomationAssumeRole@ and you need to
-- provide a value for @AutomationAssumeRole@ to remediate your resources.
module Amazonka.Config.PutRemediationConfigurations
  ( -- * Creating a Request
    PutRemediationConfigurations (..),
    newPutRemediationConfigurations,

    -- * Request Lenses
    putRemediationConfigurations_remediationConfigurations,

    -- * Destructuring the Response
    PutRemediationConfigurationsResponse (..),
    newPutRemediationConfigurationsResponse,

    -- * Response Lenses
    putRemediationConfigurationsResponse_failedBatches,
    putRemediationConfigurationsResponse_httpStatus,
  )
where

import Amazonka.Config.Types
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
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newPutRemediationConfigurations' smart constructor.
data PutRemediationConfigurations = PutRemediationConfigurations'
  { -- | A list of remediation configuration objects.
    remediationConfigurations :: [RemediationConfiguration]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutRemediationConfigurations' 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:
--
-- 'remediationConfigurations', 'putRemediationConfigurations_remediationConfigurations' - A list of remediation configuration objects.
newPutRemediationConfigurations ::
  PutRemediationConfigurations
newPutRemediationConfigurations =
  PutRemediationConfigurations'
    { remediationConfigurations =
        Prelude.mempty
    }

-- | A list of remediation configuration objects.
putRemediationConfigurations_remediationConfigurations :: Lens.Lens' PutRemediationConfigurations [RemediationConfiguration]
putRemediationConfigurations_remediationConfigurations = Lens.lens (\PutRemediationConfigurations' {remediationConfigurations} -> remediationConfigurations) (\s@PutRemediationConfigurations' {} a -> s {remediationConfigurations = a} :: PutRemediationConfigurations) Prelude.. Lens.coerced

instance Core.AWSRequest PutRemediationConfigurations where
  type
    AWSResponse PutRemediationConfigurations =
      PutRemediationConfigurationsResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          PutRemediationConfigurationsResponse'
            Prelude.<$> (x Data..?> "FailedBatches" Core..!@ Prelude.mempty)
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance
  Prelude.Hashable
    PutRemediationConfigurations
  where
  hashWithSalt _salt PutRemediationConfigurations' {..} =
    _salt
      `Prelude.hashWithSalt` remediationConfigurations

instance Prelude.NFData PutRemediationConfigurations where
  rnf PutRemediationConfigurations' {..} =
    Prelude.rnf remediationConfigurations

instance Data.ToHeaders PutRemediationConfigurations where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "X-Amz-Target"
              Data.=# ( "StarlingDoveService.PutRemediationConfigurations" ::
                          Prelude.ByteString
                      ),
            "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON PutRemediationConfigurations where
  toJSON PutRemediationConfigurations' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just
              ( "RemediationConfigurations"
                  Data..= remediationConfigurations
              )
          ]
      )

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

instance Data.ToQuery PutRemediationConfigurations where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newPutRemediationConfigurationsResponse' smart constructor.
data PutRemediationConfigurationsResponse = PutRemediationConfigurationsResponse'
  { -- | Returns a list of failed remediation batch objects.
    failedBatches :: Prelude.Maybe [FailedRemediationBatch],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutRemediationConfigurationsResponse' 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:
--
-- 'failedBatches', 'putRemediationConfigurationsResponse_failedBatches' - Returns a list of failed remediation batch objects.
--
-- 'httpStatus', 'putRemediationConfigurationsResponse_httpStatus' - The response's http status code.
newPutRemediationConfigurationsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PutRemediationConfigurationsResponse
newPutRemediationConfigurationsResponse pHttpStatus_ =
  PutRemediationConfigurationsResponse'
    { failedBatches =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | Returns a list of failed remediation batch objects.
putRemediationConfigurationsResponse_failedBatches :: Lens.Lens' PutRemediationConfigurationsResponse (Prelude.Maybe [FailedRemediationBatch])
putRemediationConfigurationsResponse_failedBatches = Lens.lens (\PutRemediationConfigurationsResponse' {failedBatches} -> failedBatches) (\s@PutRemediationConfigurationsResponse' {} a -> s {failedBatches = a} :: PutRemediationConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced

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

instance
  Prelude.NFData
    PutRemediationConfigurationsResponse
  where
  rnf PutRemediationConfigurationsResponse' {..} =
    Prelude.rnf failedBatches
      `Prelude.seq` Prelude.rnf httpStatus