{-# 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.Config.Types.RemediationConfiguration
-- 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.Config.Types.RemediationConfiguration where

import Amazonka.Config.Types.ExecutionControls
import Amazonka.Config.Types.RemediationParameterValue
import Amazonka.Config.Types.RemediationTargetType
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

-- | An object that represents the details about the remediation
-- configuration that includes the remediation action, parameters, and data
-- to execute the action.
--
-- /See:/ 'newRemediationConfiguration' smart constructor.
data RemediationConfiguration = RemediationConfiguration'
  { -- | Amazon Resource Name (ARN) of remediation configuration.
    RemediationConfiguration -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The remediation is triggered automatically.
    RemediationConfiguration -> Maybe Bool
automatic :: Prelude.Maybe Prelude.Bool,
    -- | Name of the service that owns the service-linked rule, if applicable.
    RemediationConfiguration -> Maybe Text
createdByService :: Prelude.Maybe Prelude.Text,
    -- | An ExecutionControls object.
    RemediationConfiguration -> Maybe ExecutionControls
executionControls :: Prelude.Maybe ExecutionControls,
    -- | The maximum number of failed attempts for auto-remediation. If you do
    -- not select a number, the default is 5.
    --
    -- For example, if you specify MaximumAutomaticAttempts as 5 with
    -- RetryAttemptSeconds as 50 seconds, Config will put a
    -- RemediationException on your behalf for the failing resource after the
    -- 5th failed attempt within 50 seconds.
    RemediationConfiguration -> Maybe Natural
maximumAutomaticAttempts :: Prelude.Maybe Prelude.Natural,
    -- | An object of the RemediationParameterValue.
    RemediationConfiguration
-> Maybe (HashMap Text RemediationParameterValue)
parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text RemediationParameterValue),
    -- | The type of a resource.
    RemediationConfiguration -> Maybe Text
resourceType :: Prelude.Maybe Prelude.Text,
    -- | Maximum time in seconds that Config runs auto-remediation. If you do not
    -- select a number, the default is 60 seconds.
    --
    -- For example, if you specify RetryAttemptSeconds as 50 seconds and
    -- MaximumAutomaticAttempts as 5, Config will run auto-remediations 5 times
    -- within 50 seconds before throwing an exception.
    RemediationConfiguration -> Maybe Natural
retryAttemptSeconds :: Prelude.Maybe Prelude.Natural,
    -- | Version of the target. For example, version of the SSM document.
    --
    -- If you make backward incompatible changes to the SSM document, you must
    -- call PutRemediationConfiguration API again to ensure the remediations
    -- can run.
    RemediationConfiguration -> Maybe Text
targetVersion :: Prelude.Maybe Prelude.Text,
    -- | The name of the Config rule.
    RemediationConfiguration -> Text
configRuleName :: Prelude.Text,
    -- | The type of the target. Target executes remediation. For example, SSM
    -- document.
    RemediationConfiguration -> RemediationTargetType
targetType :: RemediationTargetType,
    -- | Target ID is the name of the public document.
    RemediationConfiguration -> Text
targetId :: Prelude.Text
  }
  deriving (RemediationConfiguration -> RemediationConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RemediationConfiguration -> RemediationConfiguration -> Bool
$c/= :: RemediationConfiguration -> RemediationConfiguration -> Bool
== :: RemediationConfiguration -> RemediationConfiguration -> Bool
$c== :: RemediationConfiguration -> RemediationConfiguration -> Bool
Prelude.Eq, ReadPrec [RemediationConfiguration]
ReadPrec RemediationConfiguration
Int -> ReadS RemediationConfiguration
ReadS [RemediationConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RemediationConfiguration]
$creadListPrec :: ReadPrec [RemediationConfiguration]
readPrec :: ReadPrec RemediationConfiguration
$creadPrec :: ReadPrec RemediationConfiguration
readList :: ReadS [RemediationConfiguration]
$creadList :: ReadS [RemediationConfiguration]
readsPrec :: Int -> ReadS RemediationConfiguration
$creadsPrec :: Int -> ReadS RemediationConfiguration
Prelude.Read, Int -> RemediationConfiguration -> ShowS
[RemediationConfiguration] -> ShowS
RemediationConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RemediationConfiguration] -> ShowS
$cshowList :: [RemediationConfiguration] -> ShowS
show :: RemediationConfiguration -> String
$cshow :: RemediationConfiguration -> String
showsPrec :: Int -> RemediationConfiguration -> ShowS
$cshowsPrec :: Int -> RemediationConfiguration -> ShowS
Prelude.Show, forall x.
Rep RemediationConfiguration x -> RemediationConfiguration
forall x.
RemediationConfiguration -> Rep RemediationConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RemediationConfiguration x -> RemediationConfiguration
$cfrom :: forall x.
RemediationConfiguration -> Rep RemediationConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'RemediationConfiguration' 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:
--
-- 'arn', 'remediationConfiguration_arn' - Amazon Resource Name (ARN) of remediation configuration.
--
-- 'automatic', 'remediationConfiguration_automatic' - The remediation is triggered automatically.
--
-- 'createdByService', 'remediationConfiguration_createdByService' - Name of the service that owns the service-linked rule, if applicable.
--
-- 'executionControls', 'remediationConfiguration_executionControls' - An ExecutionControls object.
--
-- 'maximumAutomaticAttempts', 'remediationConfiguration_maximumAutomaticAttempts' - The maximum number of failed attempts for auto-remediation. If you do
-- not select a number, the default is 5.
--
-- For example, if you specify MaximumAutomaticAttempts as 5 with
-- RetryAttemptSeconds as 50 seconds, Config will put a
-- RemediationException on your behalf for the failing resource after the
-- 5th failed attempt within 50 seconds.
--
-- 'parameters', 'remediationConfiguration_parameters' - An object of the RemediationParameterValue.
--
-- 'resourceType', 'remediationConfiguration_resourceType' - The type of a resource.
--
-- 'retryAttemptSeconds', 'remediationConfiguration_retryAttemptSeconds' - Maximum time in seconds that Config runs auto-remediation. If you do not
-- select a number, the default is 60 seconds.
--
-- For example, if you specify RetryAttemptSeconds as 50 seconds and
-- MaximumAutomaticAttempts as 5, Config will run auto-remediations 5 times
-- within 50 seconds before throwing an exception.
--
-- 'targetVersion', 'remediationConfiguration_targetVersion' - Version of the target. For example, version of the SSM document.
--
-- If you make backward incompatible changes to the SSM document, you must
-- call PutRemediationConfiguration API again to ensure the remediations
-- can run.
--
-- 'configRuleName', 'remediationConfiguration_configRuleName' - The name of the Config rule.
--
-- 'targetType', 'remediationConfiguration_targetType' - The type of the target. Target executes remediation. For example, SSM
-- document.
--
-- 'targetId', 'remediationConfiguration_targetId' - Target ID is the name of the public document.
newRemediationConfiguration ::
  -- | 'configRuleName'
  Prelude.Text ->
  -- | 'targetType'
  RemediationTargetType ->
  -- | 'targetId'
  Prelude.Text ->
  RemediationConfiguration
newRemediationConfiguration :: Text -> RemediationTargetType -> Text -> RemediationConfiguration
newRemediationConfiguration
  Text
pConfigRuleName_
  RemediationTargetType
pTargetType_
  Text
pTargetId_ =
    RemediationConfiguration'
      { $sel:arn:RemediationConfiguration' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
        $sel:automatic:RemediationConfiguration' :: Maybe Bool
automatic = forall a. Maybe a
Prelude.Nothing,
        $sel:createdByService:RemediationConfiguration' :: Maybe Text
createdByService = forall a. Maybe a
Prelude.Nothing,
        $sel:executionControls:RemediationConfiguration' :: Maybe ExecutionControls
executionControls = forall a. Maybe a
Prelude.Nothing,
        $sel:maximumAutomaticAttempts:RemediationConfiguration' :: Maybe Natural
maximumAutomaticAttempts = forall a. Maybe a
Prelude.Nothing,
        $sel:parameters:RemediationConfiguration' :: Maybe (HashMap Text RemediationParameterValue)
parameters = forall a. Maybe a
Prelude.Nothing,
        $sel:resourceType:RemediationConfiguration' :: Maybe Text
resourceType = forall a. Maybe a
Prelude.Nothing,
        $sel:retryAttemptSeconds:RemediationConfiguration' :: Maybe Natural
retryAttemptSeconds = forall a. Maybe a
Prelude.Nothing,
        $sel:targetVersion:RemediationConfiguration' :: Maybe Text
targetVersion = forall a. Maybe a
Prelude.Nothing,
        $sel:configRuleName:RemediationConfiguration' :: Text
configRuleName = Text
pConfigRuleName_,
        $sel:targetType:RemediationConfiguration' :: RemediationTargetType
targetType = RemediationTargetType
pTargetType_,
        $sel:targetId:RemediationConfiguration' :: Text
targetId = Text
pTargetId_
      }

-- | Amazon Resource Name (ARN) of remediation configuration.
remediationConfiguration_arn :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Text)
remediationConfiguration_arn :: Lens' RemediationConfiguration (Maybe Text)
remediationConfiguration_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Text
arn :: Maybe Text
$sel:arn:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
arn} -> Maybe Text
arn) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Text
a -> RemediationConfiguration
s {$sel:arn:RemediationConfiguration' :: Maybe Text
arn = Maybe Text
a} :: RemediationConfiguration)

-- | The remediation is triggered automatically.
remediationConfiguration_automatic :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Bool)
remediationConfiguration_automatic :: Lens' RemediationConfiguration (Maybe Bool)
remediationConfiguration_automatic = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Bool
automatic :: Maybe Bool
$sel:automatic:RemediationConfiguration' :: RemediationConfiguration -> Maybe Bool
automatic} -> Maybe Bool
automatic) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Bool
a -> RemediationConfiguration
s {$sel:automatic:RemediationConfiguration' :: Maybe Bool
automatic = Maybe Bool
a} :: RemediationConfiguration)

-- | Name of the service that owns the service-linked rule, if applicable.
remediationConfiguration_createdByService :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Text)
remediationConfiguration_createdByService :: Lens' RemediationConfiguration (Maybe Text)
remediationConfiguration_createdByService = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Text
createdByService :: Maybe Text
$sel:createdByService:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
createdByService} -> Maybe Text
createdByService) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Text
a -> RemediationConfiguration
s {$sel:createdByService:RemediationConfiguration' :: Maybe Text
createdByService = Maybe Text
a} :: RemediationConfiguration)

-- | An ExecutionControls object.
remediationConfiguration_executionControls :: Lens.Lens' RemediationConfiguration (Prelude.Maybe ExecutionControls)
remediationConfiguration_executionControls :: Lens' RemediationConfiguration (Maybe ExecutionControls)
remediationConfiguration_executionControls = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe ExecutionControls
executionControls :: Maybe ExecutionControls
$sel:executionControls:RemediationConfiguration' :: RemediationConfiguration -> Maybe ExecutionControls
executionControls} -> Maybe ExecutionControls
executionControls) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe ExecutionControls
a -> RemediationConfiguration
s {$sel:executionControls:RemediationConfiguration' :: Maybe ExecutionControls
executionControls = Maybe ExecutionControls
a} :: RemediationConfiguration)

-- | The maximum number of failed attempts for auto-remediation. If you do
-- not select a number, the default is 5.
--
-- For example, if you specify MaximumAutomaticAttempts as 5 with
-- RetryAttemptSeconds as 50 seconds, Config will put a
-- RemediationException on your behalf for the failing resource after the
-- 5th failed attempt within 50 seconds.
remediationConfiguration_maximumAutomaticAttempts :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Natural)
remediationConfiguration_maximumAutomaticAttempts :: Lens' RemediationConfiguration (Maybe Natural)
remediationConfiguration_maximumAutomaticAttempts = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Natural
maximumAutomaticAttempts :: Maybe Natural
$sel:maximumAutomaticAttempts:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
maximumAutomaticAttempts} -> Maybe Natural
maximumAutomaticAttempts) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Natural
a -> RemediationConfiguration
s {$sel:maximumAutomaticAttempts:RemediationConfiguration' :: Maybe Natural
maximumAutomaticAttempts = Maybe Natural
a} :: RemediationConfiguration)

-- | An object of the RemediationParameterValue.
remediationConfiguration_parameters :: Lens.Lens' RemediationConfiguration (Prelude.Maybe (Prelude.HashMap Prelude.Text RemediationParameterValue))
remediationConfiguration_parameters :: Lens'
  RemediationConfiguration
  (Maybe (HashMap Text RemediationParameterValue))
remediationConfiguration_parameters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe (HashMap Text RemediationParameterValue)
parameters :: Maybe (HashMap Text RemediationParameterValue)
$sel:parameters:RemediationConfiguration' :: RemediationConfiguration
-> Maybe (HashMap Text RemediationParameterValue)
parameters} -> Maybe (HashMap Text RemediationParameterValue)
parameters) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe (HashMap Text RemediationParameterValue)
a -> RemediationConfiguration
s {$sel:parameters:RemediationConfiguration' :: Maybe (HashMap Text RemediationParameterValue)
parameters = Maybe (HashMap Text RemediationParameterValue)
a} :: RemediationConfiguration) 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 type of a resource.
remediationConfiguration_resourceType :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Text)
remediationConfiguration_resourceType :: Lens' RemediationConfiguration (Maybe Text)
remediationConfiguration_resourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Text
resourceType :: Maybe Text
$sel:resourceType:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
resourceType} -> Maybe Text
resourceType) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Text
a -> RemediationConfiguration
s {$sel:resourceType:RemediationConfiguration' :: Maybe Text
resourceType = Maybe Text
a} :: RemediationConfiguration)

-- | Maximum time in seconds that Config runs auto-remediation. If you do not
-- select a number, the default is 60 seconds.
--
-- For example, if you specify RetryAttemptSeconds as 50 seconds and
-- MaximumAutomaticAttempts as 5, Config will run auto-remediations 5 times
-- within 50 seconds before throwing an exception.
remediationConfiguration_retryAttemptSeconds :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Natural)
remediationConfiguration_retryAttemptSeconds :: Lens' RemediationConfiguration (Maybe Natural)
remediationConfiguration_retryAttemptSeconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Natural
retryAttemptSeconds :: Maybe Natural
$sel:retryAttemptSeconds:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
retryAttemptSeconds} -> Maybe Natural
retryAttemptSeconds) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Natural
a -> RemediationConfiguration
s {$sel:retryAttemptSeconds:RemediationConfiguration' :: Maybe Natural
retryAttemptSeconds = Maybe Natural
a} :: RemediationConfiguration)

-- | Version of the target. For example, version of the SSM document.
--
-- If you make backward incompatible changes to the SSM document, you must
-- call PutRemediationConfiguration API again to ensure the remediations
-- can run.
remediationConfiguration_targetVersion :: Lens.Lens' RemediationConfiguration (Prelude.Maybe Prelude.Text)
remediationConfiguration_targetVersion :: Lens' RemediationConfiguration (Maybe Text)
remediationConfiguration_targetVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Maybe Text
targetVersion :: Maybe Text
$sel:targetVersion:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
targetVersion} -> Maybe Text
targetVersion) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Maybe Text
a -> RemediationConfiguration
s {$sel:targetVersion:RemediationConfiguration' :: Maybe Text
targetVersion = Maybe Text
a} :: RemediationConfiguration)

-- | The name of the Config rule.
remediationConfiguration_configRuleName :: Lens.Lens' RemediationConfiguration Prelude.Text
remediationConfiguration_configRuleName :: Lens' RemediationConfiguration Text
remediationConfiguration_configRuleName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Text
configRuleName :: Text
$sel:configRuleName:RemediationConfiguration' :: RemediationConfiguration -> Text
configRuleName} -> Text
configRuleName) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Text
a -> RemediationConfiguration
s {$sel:configRuleName:RemediationConfiguration' :: Text
configRuleName = Text
a} :: RemediationConfiguration)

-- | The type of the target. Target executes remediation. For example, SSM
-- document.
remediationConfiguration_targetType :: Lens.Lens' RemediationConfiguration RemediationTargetType
remediationConfiguration_targetType :: Lens' RemediationConfiguration RemediationTargetType
remediationConfiguration_targetType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {RemediationTargetType
targetType :: RemediationTargetType
$sel:targetType:RemediationConfiguration' :: RemediationConfiguration -> RemediationTargetType
targetType} -> RemediationTargetType
targetType) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} RemediationTargetType
a -> RemediationConfiguration
s {$sel:targetType:RemediationConfiguration' :: RemediationTargetType
targetType = RemediationTargetType
a} :: RemediationConfiguration)

-- | Target ID is the name of the public document.
remediationConfiguration_targetId :: Lens.Lens' RemediationConfiguration Prelude.Text
remediationConfiguration_targetId :: Lens' RemediationConfiguration Text
remediationConfiguration_targetId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemediationConfiguration' {Text
targetId :: Text
$sel:targetId:RemediationConfiguration' :: RemediationConfiguration -> Text
targetId} -> Text
targetId) (\s :: RemediationConfiguration
s@RemediationConfiguration' {} Text
a -> RemediationConfiguration
s {$sel:targetId:RemediationConfiguration' :: Text
targetId = Text
a} :: RemediationConfiguration)

instance Data.FromJSON RemediationConfiguration where
  parseJSON :: Value -> Parser RemediationConfiguration
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"RemediationConfiguration"
      ( \Object
x ->
          Maybe Text
-> Maybe Bool
-> Maybe Text
-> Maybe ExecutionControls
-> Maybe Natural
-> Maybe (HashMap Text RemediationParameterValue)
-> Maybe Text
-> Maybe Natural
-> Maybe Text
-> Text
-> RemediationTargetType
-> Text
-> RemediationConfiguration
RemediationConfiguration'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Automatic")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"CreatedByService")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ExecutionControls")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"MaximumAutomaticAttempts")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Parameters" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ResourceType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"RetryAttemptSeconds")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"TargetVersion")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"ConfigRuleName")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"TargetType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"TargetId")
      )

instance Prelude.Hashable RemediationConfiguration where
  hashWithSalt :: Int -> RemediationConfiguration -> Int
hashWithSalt Int
_salt RemediationConfiguration' {Maybe Bool
Maybe Natural
Maybe Text
Maybe (HashMap Text RemediationParameterValue)
Maybe ExecutionControls
Text
RemediationTargetType
targetId :: Text
targetType :: RemediationTargetType
configRuleName :: Text
targetVersion :: Maybe Text
retryAttemptSeconds :: Maybe Natural
resourceType :: Maybe Text
parameters :: Maybe (HashMap Text RemediationParameterValue)
maximumAutomaticAttempts :: Maybe Natural
executionControls :: Maybe ExecutionControls
createdByService :: Maybe Text
automatic :: Maybe Bool
arn :: Maybe Text
$sel:targetId:RemediationConfiguration' :: RemediationConfiguration -> Text
$sel:targetType:RemediationConfiguration' :: RemediationConfiguration -> RemediationTargetType
$sel:configRuleName:RemediationConfiguration' :: RemediationConfiguration -> Text
$sel:targetVersion:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:retryAttemptSeconds:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
$sel:resourceType:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:parameters:RemediationConfiguration' :: RemediationConfiguration
-> Maybe (HashMap Text RemediationParameterValue)
$sel:maximumAutomaticAttempts:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
$sel:executionControls:RemediationConfiguration' :: RemediationConfiguration -> Maybe ExecutionControls
$sel:createdByService:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:automatic:RemediationConfiguration' :: RemediationConfiguration -> Maybe Bool
$sel:arn:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
automatic
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
createdByService
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ExecutionControls
executionControls
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maximumAutomaticAttempts
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text RemediationParameterValue)
parameters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
resourceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
retryAttemptSeconds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
targetVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
configRuleName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RemediationTargetType
targetType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
targetId

instance Prelude.NFData RemediationConfiguration where
  rnf :: RemediationConfiguration -> ()
rnf RemediationConfiguration' {Maybe Bool
Maybe Natural
Maybe Text
Maybe (HashMap Text RemediationParameterValue)
Maybe ExecutionControls
Text
RemediationTargetType
targetId :: Text
targetType :: RemediationTargetType
configRuleName :: Text
targetVersion :: Maybe Text
retryAttemptSeconds :: Maybe Natural
resourceType :: Maybe Text
parameters :: Maybe (HashMap Text RemediationParameterValue)
maximumAutomaticAttempts :: Maybe Natural
executionControls :: Maybe ExecutionControls
createdByService :: Maybe Text
automatic :: Maybe Bool
arn :: Maybe Text
$sel:targetId:RemediationConfiguration' :: RemediationConfiguration -> Text
$sel:targetType:RemediationConfiguration' :: RemediationConfiguration -> RemediationTargetType
$sel:configRuleName:RemediationConfiguration' :: RemediationConfiguration -> Text
$sel:targetVersion:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:retryAttemptSeconds:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
$sel:resourceType:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:parameters:RemediationConfiguration' :: RemediationConfiguration
-> Maybe (HashMap Text RemediationParameterValue)
$sel:maximumAutomaticAttempts:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
$sel:executionControls:RemediationConfiguration' :: RemediationConfiguration -> Maybe ExecutionControls
$sel:createdByService:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:automatic:RemediationConfiguration' :: RemediationConfiguration -> Maybe Bool
$sel:arn:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
automatic
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
createdByService
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ExecutionControls
executionControls
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maximumAutomaticAttempts
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text RemediationParameterValue)
parameters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
resourceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
retryAttemptSeconds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
targetVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
configRuleName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf RemediationTargetType
targetType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
targetId

instance Data.ToJSON RemediationConfiguration where
  toJSON :: RemediationConfiguration -> Value
toJSON RemediationConfiguration' {Maybe Bool
Maybe Natural
Maybe Text
Maybe (HashMap Text RemediationParameterValue)
Maybe ExecutionControls
Text
RemediationTargetType
targetId :: Text
targetType :: RemediationTargetType
configRuleName :: Text
targetVersion :: Maybe Text
retryAttemptSeconds :: Maybe Natural
resourceType :: Maybe Text
parameters :: Maybe (HashMap Text RemediationParameterValue)
maximumAutomaticAttempts :: Maybe Natural
executionControls :: Maybe ExecutionControls
createdByService :: Maybe Text
automatic :: Maybe Bool
arn :: Maybe Text
$sel:targetId:RemediationConfiguration' :: RemediationConfiguration -> Text
$sel:targetType:RemediationConfiguration' :: RemediationConfiguration -> RemediationTargetType
$sel:configRuleName:RemediationConfiguration' :: RemediationConfiguration -> Text
$sel:targetVersion:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:retryAttemptSeconds:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
$sel:resourceType:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:parameters:RemediationConfiguration' :: RemediationConfiguration
-> Maybe (HashMap Text RemediationParameterValue)
$sel:maximumAutomaticAttempts:RemediationConfiguration' :: RemediationConfiguration -> Maybe Natural
$sel:executionControls:RemediationConfiguration' :: RemediationConfiguration -> Maybe ExecutionControls
$sel:createdByService:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
$sel:automatic:RemediationConfiguration' :: RemediationConfiguration -> Maybe Bool
$sel:arn:RemediationConfiguration' :: RemediationConfiguration -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Arn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
arn,
            (Key
"Automatic" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
automatic,
            (Key
"CreatedByService" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
createdByService,
            (Key
"ExecutionControls" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ExecutionControls
executionControls,
            (Key
"MaximumAutomaticAttempts" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
maximumAutomaticAttempts,
            (Key
"Parameters" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text RemediationParameterValue)
parameters,
            (Key
"ResourceType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
resourceType,
            (Key
"RetryAttemptSeconds" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
retryAttemptSeconds,
            (Key
"TargetVersion" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
targetVersion,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ConfigRuleName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
configRuleName),
            forall a. a -> Maybe a
Prelude.Just (Key
"TargetType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= RemediationTargetType
targetType),
            forall a. a -> Maybe a
Prelude.Just (Key
"TargetId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
targetId)
          ]
      )