packages feed

amazonka-cloudformation-2.0: gen/Amazonka/CloudFormation/DetectStackResourceDrift.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.CloudFormation.DetectStackResourceDrift
-- 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 information about whether a resource\'s actual configuration
-- differs, or has /drifted/, from it\'s expected configuration, as defined
-- in the stack template and any values specified as template parameters.
-- This information includes actual and expected property values for
-- resources in which CloudFormation detects drift. Only resource
-- properties explicitly defined in the stack template are checked for
-- drift. For more information about stack and resource drift, see
-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html Detecting Unregulated Configuration Changes to Stacks and Resources>.
--
-- Use @DetectStackResourceDrift@ to detect drift on individual resources,
-- or DetectStackDrift to detect drift on all resources in a given stack
-- that support drift detection.
--
-- Resources that don\'t currently support drift detection can\'t be
-- checked. For a list of resources that support drift detection, see
-- <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift-resource-list.html Resources that Support Drift Detection>.
module Amazonka.CloudFormation.DetectStackResourceDrift
  ( -- * Creating a Request
    DetectStackResourceDrift (..),
    newDetectStackResourceDrift,

    -- * Request Lenses
    detectStackResourceDrift_stackName,
    detectStackResourceDrift_logicalResourceId,

    -- * Destructuring the Response
    DetectStackResourceDriftResponse (..),
    newDetectStackResourceDriftResponse,

    -- * Response Lenses
    detectStackResourceDriftResponse_httpStatus,
    detectStackResourceDriftResponse_stackResourceDrift,
  )
where

import Amazonka.CloudFormation.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:/ 'newDetectStackResourceDrift' smart constructor.
data DetectStackResourceDrift = DetectStackResourceDrift'
  { -- | The name of the stack to which the resource belongs.
    stackName :: Prelude.Text,
    -- | The logical name of the resource for which to return drift information.
    logicalResourceId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DetectStackResourceDrift' 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:
--
-- 'stackName', 'detectStackResourceDrift_stackName' - The name of the stack to which the resource belongs.
--
-- 'logicalResourceId', 'detectStackResourceDrift_logicalResourceId' - The logical name of the resource for which to return drift information.
newDetectStackResourceDrift ::
  -- | 'stackName'
  Prelude.Text ->
  -- | 'logicalResourceId'
  Prelude.Text ->
  DetectStackResourceDrift
newDetectStackResourceDrift
  pStackName_
  pLogicalResourceId_ =
    DetectStackResourceDrift'
      { stackName = pStackName_,
        logicalResourceId = pLogicalResourceId_
      }

-- | The name of the stack to which the resource belongs.
detectStackResourceDrift_stackName :: Lens.Lens' DetectStackResourceDrift Prelude.Text
detectStackResourceDrift_stackName = Lens.lens (\DetectStackResourceDrift' {stackName} -> stackName) (\s@DetectStackResourceDrift' {} a -> s {stackName = a} :: DetectStackResourceDrift)

-- | The logical name of the resource for which to return drift information.
detectStackResourceDrift_logicalResourceId :: Lens.Lens' DetectStackResourceDrift Prelude.Text
detectStackResourceDrift_logicalResourceId = Lens.lens (\DetectStackResourceDrift' {logicalResourceId} -> logicalResourceId) (\s@DetectStackResourceDrift' {} a -> s {logicalResourceId = a} :: DetectStackResourceDrift)

instance Core.AWSRequest DetectStackResourceDrift where
  type
    AWSResponse DetectStackResourceDrift =
      DetectStackResourceDriftResponse
  request overrides =
    Request.postQuery (overrides defaultService)
  response =
    Response.receiveXMLWrapper
      "DetectStackResourceDriftResult"
      ( \s h x ->
          DetectStackResourceDriftResponse'
            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
            Prelude.<*> (x Data..@ "StackResourceDrift")
      )

instance Prelude.Hashable DetectStackResourceDrift where
  hashWithSalt _salt DetectStackResourceDrift' {..} =
    _salt
      `Prelude.hashWithSalt` stackName
      `Prelude.hashWithSalt` logicalResourceId

instance Prelude.NFData DetectStackResourceDrift where
  rnf DetectStackResourceDrift' {..} =
    Prelude.rnf stackName
      `Prelude.seq` Prelude.rnf logicalResourceId

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

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

instance Data.ToQuery DetectStackResourceDrift where
  toQuery DetectStackResourceDrift' {..} =
    Prelude.mconcat
      [ "Action"
          Data.=: ("DetectStackResourceDrift" :: Prelude.ByteString),
        "Version"
          Data.=: ("2010-05-15" :: Prelude.ByteString),
        "StackName" Data.=: stackName,
        "LogicalResourceId" Data.=: logicalResourceId
      ]

-- | /See:/ 'newDetectStackResourceDriftResponse' smart constructor.
data DetectStackResourceDriftResponse = DetectStackResourceDriftResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | Information about whether the resource\'s actual configuration has
    -- drifted from its expected template configuration, including actual and
    -- expected property values and any differences detected.
    stackResourceDrift :: StackResourceDrift
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DetectStackResourceDriftResponse' 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:
--
-- 'httpStatus', 'detectStackResourceDriftResponse_httpStatus' - The response's http status code.
--
-- 'stackResourceDrift', 'detectStackResourceDriftResponse_stackResourceDrift' - Information about whether the resource\'s actual configuration has
-- drifted from its expected template configuration, including actual and
-- expected property values and any differences detected.
newDetectStackResourceDriftResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'stackResourceDrift'
  StackResourceDrift ->
  DetectStackResourceDriftResponse
newDetectStackResourceDriftResponse
  pHttpStatus_
  pStackResourceDrift_ =
    DetectStackResourceDriftResponse'
      { httpStatus =
          pHttpStatus_,
        stackResourceDrift = pStackResourceDrift_
      }

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

-- | Information about whether the resource\'s actual configuration has
-- drifted from its expected template configuration, including actual and
-- expected property values and any differences detected.
detectStackResourceDriftResponse_stackResourceDrift :: Lens.Lens' DetectStackResourceDriftResponse StackResourceDrift
detectStackResourceDriftResponse_stackResourceDrift = Lens.lens (\DetectStackResourceDriftResponse' {stackResourceDrift} -> stackResourceDrift) (\s@DetectStackResourceDriftResponse' {} a -> s {stackResourceDrift = a} :: DetectStackResourceDriftResponse)

instance
  Prelude.NFData
    DetectStackResourceDriftResponse
  where
  rnf DetectStackResourceDriftResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf stackResourceDrift