{-# 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.SSM.StartChangeRequestExecution
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a change request for Change Manager. The Automation runbooks
-- specified in the change request run only after all required approvals
-- for the change request have been received.
module Amazonka.SSM.StartChangeRequestExecution
  ( -- * Creating a Request
    StartChangeRequestExecution (..),
    newStartChangeRequestExecution,

    -- * Request Lenses
    startChangeRequestExecution_autoApprove,
    startChangeRequestExecution_changeDetails,
    startChangeRequestExecution_changeRequestName,
    startChangeRequestExecution_clientToken,
    startChangeRequestExecution_documentVersion,
    startChangeRequestExecution_parameters,
    startChangeRequestExecution_scheduledEndTime,
    startChangeRequestExecution_scheduledTime,
    startChangeRequestExecution_tags,
    startChangeRequestExecution_documentName,
    startChangeRequestExecution_runbooks,

    -- * Destructuring the Response
    StartChangeRequestExecutionResponse (..),
    newStartChangeRequestExecutionResponse,

    -- * Response Lenses
    startChangeRequestExecutionResponse_automationExecutionId,
    startChangeRequestExecutionResponse_httpStatus,
  )
where

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
import Amazonka.SSM.Types

-- | /See:/ 'newStartChangeRequestExecution' smart constructor.
data StartChangeRequestExecution = StartChangeRequestExecution'
  { -- | Indicates whether the change request can be approved automatically
    -- without the need for manual approvals.
    --
    -- If @AutoApprovable@ is enabled in a change template, then setting
    -- @AutoApprove@ to @true@ in @StartChangeRequestExecution@ creates a
    -- change request that bypasses approver review.
    --
    -- Change Calendar restrictions are not bypassed in this scenario. If the
    -- state of an associated calendar is @CLOSED@, change freeze approvers
    -- must still grant permission for this change request to run. If they
    -- don\'t, the change won\'t be processed until the calendar state is again
    -- @OPEN@.
    StartChangeRequestExecution -> Maybe Bool
autoApprove :: Prelude.Maybe Prelude.Bool,
    -- | User-provided details about the change. If no details are provided,
    -- content specified in the __Template information__ section of the
    -- associated change template is added.
    StartChangeRequestExecution -> Maybe Text
changeDetails :: Prelude.Maybe Prelude.Text,
    -- | The name of the change request associated with the runbook workflow to
    -- be run.
    StartChangeRequestExecution -> Maybe Text
changeRequestName :: Prelude.Maybe Prelude.Text,
    -- | The user-provided idempotency token. The token must be unique, is case
    -- insensitive, enforces the UUID format, and can\'t be reused.
    StartChangeRequestExecution -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The version of the change template document to run during the runbook
    -- workflow.
    StartChangeRequestExecution -> Maybe Text
documentVersion :: Prelude.Maybe Prelude.Text,
    -- | A key-value map of parameters that match the declared parameters in the
    -- change template document.
    StartChangeRequestExecution -> Maybe (HashMap Text [Text])
parameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]),
    -- | The time that the requester expects the runbook workflow related to the
    -- change request to complete. The time is an estimate only that the
    -- requester provides for reviewers.
    StartChangeRequestExecution -> Maybe POSIX
scheduledEndTime :: Prelude.Maybe Data.POSIX,
    -- | The date and time specified in the change request to run the Automation
    -- runbooks.
    --
    -- The Automation runbooks specified for the runbook workflow can\'t run
    -- until all required approvals for the change request have been received.
    StartChangeRequestExecution -> Maybe POSIX
scheduledTime :: Prelude.Maybe Data.POSIX,
    -- | Optional metadata that you assign to a resource. You can specify a
    -- maximum of five tags for a change request. Tags enable you to categorize
    -- a resource in different ways, such as by purpose, owner, or environment.
    -- For example, you might want to tag a change request to identify an
    -- environment or target Amazon Web Services Region. In this case, you
    -- could specify the following key-value pairs:
    --
    -- -   @Key=Environment,Value=Production@
    --
    -- -   @Key=Region,Value=us-east-2@
    StartChangeRequestExecution -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name of the change template document to run during the runbook
    -- workflow.
    StartChangeRequestExecution -> Text
documentName :: Prelude.Text,
    -- | Information about the Automation runbooks that are run during the
    -- runbook workflow.
    --
    -- The Automation runbooks specified for the runbook workflow can\'t run
    -- until all required approvals for the change request have been received.
    StartChangeRequestExecution -> NonEmpty Runbook
runbooks :: Prelude.NonEmpty Runbook
  }
  deriving (StartChangeRequestExecution -> StartChangeRequestExecution -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartChangeRequestExecution -> StartChangeRequestExecution -> Bool
$c/= :: StartChangeRequestExecution -> StartChangeRequestExecution -> Bool
== :: StartChangeRequestExecution -> StartChangeRequestExecution -> Bool
$c== :: StartChangeRequestExecution -> StartChangeRequestExecution -> Bool
Prelude.Eq, ReadPrec [StartChangeRequestExecution]
ReadPrec StartChangeRequestExecution
Int -> ReadS StartChangeRequestExecution
ReadS [StartChangeRequestExecution]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartChangeRequestExecution]
$creadListPrec :: ReadPrec [StartChangeRequestExecution]
readPrec :: ReadPrec StartChangeRequestExecution
$creadPrec :: ReadPrec StartChangeRequestExecution
readList :: ReadS [StartChangeRequestExecution]
$creadList :: ReadS [StartChangeRequestExecution]
readsPrec :: Int -> ReadS StartChangeRequestExecution
$creadsPrec :: Int -> ReadS StartChangeRequestExecution
Prelude.Read, Int -> StartChangeRequestExecution -> ShowS
[StartChangeRequestExecution] -> ShowS
StartChangeRequestExecution -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartChangeRequestExecution] -> ShowS
$cshowList :: [StartChangeRequestExecution] -> ShowS
show :: StartChangeRequestExecution -> String
$cshow :: StartChangeRequestExecution -> String
showsPrec :: Int -> StartChangeRequestExecution -> ShowS
$cshowsPrec :: Int -> StartChangeRequestExecution -> ShowS
Prelude.Show, forall x.
Rep StartChangeRequestExecution x -> StartChangeRequestExecution
forall x.
StartChangeRequestExecution -> Rep StartChangeRequestExecution x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep StartChangeRequestExecution x -> StartChangeRequestExecution
$cfrom :: forall x.
StartChangeRequestExecution -> Rep StartChangeRequestExecution x
Prelude.Generic)

-- |
-- Create a value of 'StartChangeRequestExecution' 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:
--
-- 'autoApprove', 'startChangeRequestExecution_autoApprove' - Indicates whether the change request can be approved automatically
-- without the need for manual approvals.
--
-- If @AutoApprovable@ is enabled in a change template, then setting
-- @AutoApprove@ to @true@ in @StartChangeRequestExecution@ creates a
-- change request that bypasses approver review.
--
-- Change Calendar restrictions are not bypassed in this scenario. If the
-- state of an associated calendar is @CLOSED@, change freeze approvers
-- must still grant permission for this change request to run. If they
-- don\'t, the change won\'t be processed until the calendar state is again
-- @OPEN@.
--
-- 'changeDetails', 'startChangeRequestExecution_changeDetails' - User-provided details about the change. If no details are provided,
-- content specified in the __Template information__ section of the
-- associated change template is added.
--
-- 'changeRequestName', 'startChangeRequestExecution_changeRequestName' - The name of the change request associated with the runbook workflow to
-- be run.
--
-- 'clientToken', 'startChangeRequestExecution_clientToken' - The user-provided idempotency token. The token must be unique, is case
-- insensitive, enforces the UUID format, and can\'t be reused.
--
-- 'documentVersion', 'startChangeRequestExecution_documentVersion' - The version of the change template document to run during the runbook
-- workflow.
--
-- 'parameters', 'startChangeRequestExecution_parameters' - A key-value map of parameters that match the declared parameters in the
-- change template document.
--
-- 'scheduledEndTime', 'startChangeRequestExecution_scheduledEndTime' - The time that the requester expects the runbook workflow related to the
-- change request to complete. The time is an estimate only that the
-- requester provides for reviewers.
--
-- 'scheduledTime', 'startChangeRequestExecution_scheduledTime' - The date and time specified in the change request to run the Automation
-- runbooks.
--
-- The Automation runbooks specified for the runbook workflow can\'t run
-- until all required approvals for the change request have been received.
--
-- 'tags', 'startChangeRequestExecution_tags' - Optional metadata that you assign to a resource. You can specify a
-- maximum of five tags for a change request. Tags enable you to categorize
-- a resource in different ways, such as by purpose, owner, or environment.
-- For example, you might want to tag a change request to identify an
-- environment or target Amazon Web Services Region. In this case, you
-- could specify the following key-value pairs:
--
-- -   @Key=Environment,Value=Production@
--
-- -   @Key=Region,Value=us-east-2@
--
-- 'documentName', 'startChangeRequestExecution_documentName' - The name of the change template document to run during the runbook
-- workflow.
--
-- 'runbooks', 'startChangeRequestExecution_runbooks' - Information about the Automation runbooks that are run during the
-- runbook workflow.
--
-- The Automation runbooks specified for the runbook workflow can\'t run
-- until all required approvals for the change request have been received.
newStartChangeRequestExecution ::
  -- | 'documentName'
  Prelude.Text ->
  -- | 'runbooks'
  Prelude.NonEmpty Runbook ->
  StartChangeRequestExecution
newStartChangeRequestExecution :: Text -> NonEmpty Runbook -> StartChangeRequestExecution
newStartChangeRequestExecution
  Text
pDocumentName_
  NonEmpty Runbook
pRunbooks_ =
    StartChangeRequestExecution'
      { $sel:autoApprove:StartChangeRequestExecution' :: Maybe Bool
autoApprove =
          forall a. Maybe a
Prelude.Nothing,
        $sel:changeDetails:StartChangeRequestExecution' :: Maybe Text
changeDetails = forall a. Maybe a
Prelude.Nothing,
        $sel:changeRequestName:StartChangeRequestExecution' :: Maybe Text
changeRequestName = forall a. Maybe a
Prelude.Nothing,
        $sel:clientToken:StartChangeRequestExecution' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
        $sel:documentVersion:StartChangeRequestExecution' :: Maybe Text
documentVersion = forall a. Maybe a
Prelude.Nothing,
        $sel:parameters:StartChangeRequestExecution' :: Maybe (HashMap Text [Text])
parameters = forall a. Maybe a
Prelude.Nothing,
        $sel:scheduledEndTime:StartChangeRequestExecution' :: Maybe POSIX
scheduledEndTime = forall a. Maybe a
Prelude.Nothing,
        $sel:scheduledTime:StartChangeRequestExecution' :: Maybe POSIX
scheduledTime = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:StartChangeRequestExecution' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:documentName:StartChangeRequestExecution' :: Text
documentName = Text
pDocumentName_,
        $sel:runbooks:StartChangeRequestExecution' :: NonEmpty Runbook
runbooks = forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced forall t b. AReview t b -> b -> t
Lens.# NonEmpty Runbook
pRunbooks_
      }

-- | Indicates whether the change request can be approved automatically
-- without the need for manual approvals.
--
-- If @AutoApprovable@ is enabled in a change template, then setting
-- @AutoApprove@ to @true@ in @StartChangeRequestExecution@ creates a
-- change request that bypasses approver review.
--
-- Change Calendar restrictions are not bypassed in this scenario. If the
-- state of an associated calendar is @CLOSED@, change freeze approvers
-- must still grant permission for this change request to run. If they
-- don\'t, the change won\'t be processed until the calendar state is again
-- @OPEN@.
startChangeRequestExecution_autoApprove :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.Bool)
startChangeRequestExecution_autoApprove :: Lens' StartChangeRequestExecution (Maybe Bool)
startChangeRequestExecution_autoApprove = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe Bool
autoApprove :: Maybe Bool
$sel:autoApprove:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Bool
autoApprove} -> Maybe Bool
autoApprove) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe Bool
a -> StartChangeRequestExecution
s {$sel:autoApprove:StartChangeRequestExecution' :: Maybe Bool
autoApprove = Maybe Bool
a} :: StartChangeRequestExecution)

-- | User-provided details about the change. If no details are provided,
-- content specified in the __Template information__ section of the
-- associated change template is added.
startChangeRequestExecution_changeDetails :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.Text)
startChangeRequestExecution_changeDetails :: Lens' StartChangeRequestExecution (Maybe Text)
startChangeRequestExecution_changeDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe Text
changeDetails :: Maybe Text
$sel:changeDetails:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
changeDetails} -> Maybe Text
changeDetails) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe Text
a -> StartChangeRequestExecution
s {$sel:changeDetails:StartChangeRequestExecution' :: Maybe Text
changeDetails = Maybe Text
a} :: StartChangeRequestExecution)

-- | The name of the change request associated with the runbook workflow to
-- be run.
startChangeRequestExecution_changeRequestName :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.Text)
startChangeRequestExecution_changeRequestName :: Lens' StartChangeRequestExecution (Maybe Text)
startChangeRequestExecution_changeRequestName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe Text
changeRequestName :: Maybe Text
$sel:changeRequestName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
changeRequestName} -> Maybe Text
changeRequestName) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe Text
a -> StartChangeRequestExecution
s {$sel:changeRequestName:StartChangeRequestExecution' :: Maybe Text
changeRequestName = Maybe Text
a} :: StartChangeRequestExecution)

-- | The user-provided idempotency token. The token must be unique, is case
-- insensitive, enforces the UUID format, and can\'t be reused.
startChangeRequestExecution_clientToken :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.Text)
startChangeRequestExecution_clientToken :: Lens' StartChangeRequestExecution (Maybe Text)
startChangeRequestExecution_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe Text
a -> StartChangeRequestExecution
s {$sel:clientToken:StartChangeRequestExecution' :: Maybe Text
clientToken = Maybe Text
a} :: StartChangeRequestExecution)

-- | The version of the change template document to run during the runbook
-- workflow.
startChangeRequestExecution_documentVersion :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.Text)
startChangeRequestExecution_documentVersion :: Lens' StartChangeRequestExecution (Maybe Text)
startChangeRequestExecution_documentVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe Text
documentVersion :: Maybe Text
$sel:documentVersion:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
documentVersion} -> Maybe Text
documentVersion) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe Text
a -> StartChangeRequestExecution
s {$sel:documentVersion:StartChangeRequestExecution' :: Maybe Text
documentVersion = Maybe Text
a} :: StartChangeRequestExecution)

-- | A key-value map of parameters that match the declared parameters in the
-- change template document.
startChangeRequestExecution_parameters :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe (Prelude.HashMap Prelude.Text [Prelude.Text]))
startChangeRequestExecution_parameters :: Lens' StartChangeRequestExecution (Maybe (HashMap Text [Text]))
startChangeRequestExecution_parameters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe (HashMap Text [Text])
parameters :: Maybe (HashMap Text [Text])
$sel:parameters:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe (HashMap Text [Text])
parameters} -> Maybe (HashMap Text [Text])
parameters) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe (HashMap Text [Text])
a -> StartChangeRequestExecution
s {$sel:parameters:StartChangeRequestExecution' :: Maybe (HashMap Text [Text])
parameters = Maybe (HashMap Text [Text])
a} :: StartChangeRequestExecution) 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 time that the requester expects the runbook workflow related to the
-- change request to complete. The time is an estimate only that the
-- requester provides for reviewers.
startChangeRequestExecution_scheduledEndTime :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.UTCTime)
startChangeRequestExecution_scheduledEndTime :: Lens' StartChangeRequestExecution (Maybe UTCTime)
startChangeRequestExecution_scheduledEndTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe POSIX
scheduledEndTime :: Maybe POSIX
$sel:scheduledEndTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
scheduledEndTime} -> Maybe POSIX
scheduledEndTime) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe POSIX
a -> StartChangeRequestExecution
s {$sel:scheduledEndTime:StartChangeRequestExecution' :: Maybe POSIX
scheduledEndTime = Maybe POSIX
a} :: StartChangeRequestExecution) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The date and time specified in the change request to run the Automation
-- runbooks.
--
-- The Automation runbooks specified for the runbook workflow can\'t run
-- until all required approvals for the change request have been received.
startChangeRequestExecution_scheduledTime :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe Prelude.UTCTime)
startChangeRequestExecution_scheduledTime :: Lens' StartChangeRequestExecution (Maybe UTCTime)
startChangeRequestExecution_scheduledTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe POSIX
scheduledTime :: Maybe POSIX
$sel:scheduledTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
scheduledTime} -> Maybe POSIX
scheduledTime) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe POSIX
a -> StartChangeRequestExecution
s {$sel:scheduledTime:StartChangeRequestExecution' :: Maybe POSIX
scheduledTime = Maybe POSIX
a} :: StartChangeRequestExecution) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | Optional metadata that you assign to a resource. You can specify a
-- maximum of five tags for a change request. Tags enable you to categorize
-- a resource in different ways, such as by purpose, owner, or environment.
-- For example, you might want to tag a change request to identify an
-- environment or target Amazon Web Services Region. In this case, you
-- could specify the following key-value pairs:
--
-- -   @Key=Environment,Value=Production@
--
-- -   @Key=Region,Value=us-east-2@
startChangeRequestExecution_tags :: Lens.Lens' StartChangeRequestExecution (Prelude.Maybe [Tag])
startChangeRequestExecution_tags :: Lens' StartChangeRequestExecution (Maybe [Tag])
startChangeRequestExecution_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Maybe [Tag]
a -> StartChangeRequestExecution
s {$sel:tags:StartChangeRequestExecution' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: StartChangeRequestExecution) 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 name of the change template document to run during the runbook
-- workflow.
startChangeRequestExecution_documentName :: Lens.Lens' StartChangeRequestExecution Prelude.Text
startChangeRequestExecution_documentName :: Lens' StartChangeRequestExecution Text
startChangeRequestExecution_documentName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {Text
documentName :: Text
$sel:documentName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Text
documentName} -> Text
documentName) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} Text
a -> StartChangeRequestExecution
s {$sel:documentName:StartChangeRequestExecution' :: Text
documentName = Text
a} :: StartChangeRequestExecution)

-- | Information about the Automation runbooks that are run during the
-- runbook workflow.
--
-- The Automation runbooks specified for the runbook workflow can\'t run
-- until all required approvals for the change request have been received.
startChangeRequestExecution_runbooks :: Lens.Lens' StartChangeRequestExecution (Prelude.NonEmpty Runbook)
startChangeRequestExecution_runbooks :: Lens' StartChangeRequestExecution (NonEmpty Runbook)
startChangeRequestExecution_runbooks = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecution' {NonEmpty Runbook
runbooks :: NonEmpty Runbook
$sel:runbooks:StartChangeRequestExecution' :: StartChangeRequestExecution -> NonEmpty Runbook
runbooks} -> NonEmpty Runbook
runbooks) (\s :: StartChangeRequestExecution
s@StartChangeRequestExecution' {} NonEmpty Runbook
a -> StartChangeRequestExecution
s {$sel:runbooks:StartChangeRequestExecution' :: NonEmpty Runbook
runbooks = NonEmpty Runbook
a} :: StartChangeRequestExecution) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest StartChangeRequestExecution where
  type
    AWSResponse StartChangeRequestExecution =
      StartChangeRequestExecutionResponse
  request :: (Service -> Service)
-> StartChangeRequestExecution
-> Request StartChangeRequestExecution
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy StartChangeRequestExecution
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse StartChangeRequestExecution)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text -> Int -> StartChangeRequestExecutionResponse
StartChangeRequestExecutionResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"AutomationExecutionId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable StartChangeRequestExecution where
  hashWithSalt :: Int -> StartChangeRequestExecution -> Int
hashWithSalt Int
_salt StartChangeRequestExecution' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe (HashMap Text [Text])
Maybe POSIX
NonEmpty Runbook
Text
runbooks :: NonEmpty Runbook
documentName :: Text
tags :: Maybe [Tag]
scheduledTime :: Maybe POSIX
scheduledEndTime :: Maybe POSIX
parameters :: Maybe (HashMap Text [Text])
documentVersion :: Maybe Text
clientToken :: Maybe Text
changeRequestName :: Maybe Text
changeDetails :: Maybe Text
autoApprove :: Maybe Bool
$sel:runbooks:StartChangeRequestExecution' :: StartChangeRequestExecution -> NonEmpty Runbook
$sel:documentName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Text
$sel:tags:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe [Tag]
$sel:scheduledTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
$sel:scheduledEndTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
$sel:parameters:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe (HashMap Text [Text])
$sel:documentVersion:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:clientToken:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:changeRequestName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:changeDetails:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:autoApprove:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
autoApprove
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
changeDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
changeRequestName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
documentVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text [Text])
parameters
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
scheduledEndTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
scheduledTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
documentName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty Runbook
runbooks

instance Prelude.NFData StartChangeRequestExecution where
  rnf :: StartChangeRequestExecution -> ()
rnf StartChangeRequestExecution' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe (HashMap Text [Text])
Maybe POSIX
NonEmpty Runbook
Text
runbooks :: NonEmpty Runbook
documentName :: Text
tags :: Maybe [Tag]
scheduledTime :: Maybe POSIX
scheduledEndTime :: Maybe POSIX
parameters :: Maybe (HashMap Text [Text])
documentVersion :: Maybe Text
clientToken :: Maybe Text
changeRequestName :: Maybe Text
changeDetails :: Maybe Text
autoApprove :: Maybe Bool
$sel:runbooks:StartChangeRequestExecution' :: StartChangeRequestExecution -> NonEmpty Runbook
$sel:documentName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Text
$sel:tags:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe [Tag]
$sel:scheduledTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
$sel:scheduledEndTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
$sel:parameters:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe (HashMap Text [Text])
$sel:documentVersion:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:clientToken:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:changeRequestName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:changeDetails:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:autoApprove:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
autoApprove
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
changeDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
changeRequestName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
documentVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text [Text])
parameters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
scheduledEndTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
scheduledTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
documentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf NonEmpty Runbook
runbooks

instance Data.ToHeaders StartChangeRequestExecution where
  toHeaders :: StartChangeRequestExecution -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"AmazonSSM.StartChangeRequestExecution" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON StartChangeRequestExecution where
  toJSON :: StartChangeRequestExecution -> Value
toJSON StartChangeRequestExecution' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe (HashMap Text [Text])
Maybe POSIX
NonEmpty Runbook
Text
runbooks :: NonEmpty Runbook
documentName :: Text
tags :: Maybe [Tag]
scheduledTime :: Maybe POSIX
scheduledEndTime :: Maybe POSIX
parameters :: Maybe (HashMap Text [Text])
documentVersion :: Maybe Text
clientToken :: Maybe Text
changeRequestName :: Maybe Text
changeDetails :: Maybe Text
autoApprove :: Maybe Bool
$sel:runbooks:StartChangeRequestExecution' :: StartChangeRequestExecution -> NonEmpty Runbook
$sel:documentName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Text
$sel:tags:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe [Tag]
$sel:scheduledTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
$sel:scheduledEndTime:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe POSIX
$sel:parameters:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe (HashMap Text [Text])
$sel:documentVersion:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:clientToken:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:changeRequestName:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:changeDetails:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Text
$sel:autoApprove:StartChangeRequestExecution' :: StartChangeRequestExecution -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AutoApprove" 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
autoApprove,
            (Key
"ChangeDetails" 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
changeDetails,
            (Key
"ChangeRequestName" 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
changeRequestName,
            (Key
"ClientToken" 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
clientToken,
            (Key
"DocumentVersion" 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
documentVersion,
            (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 [Text])
parameters,
            (Key
"ScheduledEndTime" 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 POSIX
scheduledEndTime,
            (Key
"ScheduledTime" 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 POSIX
scheduledTime,
            (Key
"Tags" 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 [Tag]
tags,
            forall a. a -> Maybe a
Prelude.Just (Key
"DocumentName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
documentName),
            forall a. a -> Maybe a
Prelude.Just (Key
"Runbooks" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty Runbook
runbooks)
          ]
      )

instance Data.ToPath StartChangeRequestExecution where
  toPath :: StartChangeRequestExecution -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery StartChangeRequestExecution where
  toQuery :: StartChangeRequestExecution -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newStartChangeRequestExecutionResponse' smart constructor.
data StartChangeRequestExecutionResponse = StartChangeRequestExecutionResponse'
  { -- | The unique ID of a runbook workflow operation. (A runbook workflow is a
    -- type of Automation operation.)
    StartChangeRequestExecutionResponse -> Maybe Text
automationExecutionId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    StartChangeRequestExecutionResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (StartChangeRequestExecutionResponse
-> StartChangeRequestExecutionResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartChangeRequestExecutionResponse
-> StartChangeRequestExecutionResponse -> Bool
$c/= :: StartChangeRequestExecutionResponse
-> StartChangeRequestExecutionResponse -> Bool
== :: StartChangeRequestExecutionResponse
-> StartChangeRequestExecutionResponse -> Bool
$c== :: StartChangeRequestExecutionResponse
-> StartChangeRequestExecutionResponse -> Bool
Prelude.Eq, ReadPrec [StartChangeRequestExecutionResponse]
ReadPrec StartChangeRequestExecutionResponse
Int -> ReadS StartChangeRequestExecutionResponse
ReadS [StartChangeRequestExecutionResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartChangeRequestExecutionResponse]
$creadListPrec :: ReadPrec [StartChangeRequestExecutionResponse]
readPrec :: ReadPrec StartChangeRequestExecutionResponse
$creadPrec :: ReadPrec StartChangeRequestExecutionResponse
readList :: ReadS [StartChangeRequestExecutionResponse]
$creadList :: ReadS [StartChangeRequestExecutionResponse]
readsPrec :: Int -> ReadS StartChangeRequestExecutionResponse
$creadsPrec :: Int -> ReadS StartChangeRequestExecutionResponse
Prelude.Read, Int -> StartChangeRequestExecutionResponse -> ShowS
[StartChangeRequestExecutionResponse] -> ShowS
StartChangeRequestExecutionResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartChangeRequestExecutionResponse] -> ShowS
$cshowList :: [StartChangeRequestExecutionResponse] -> ShowS
show :: StartChangeRequestExecutionResponse -> String
$cshow :: StartChangeRequestExecutionResponse -> String
showsPrec :: Int -> StartChangeRequestExecutionResponse -> ShowS
$cshowsPrec :: Int -> StartChangeRequestExecutionResponse -> ShowS
Prelude.Show, forall x.
Rep StartChangeRequestExecutionResponse x
-> StartChangeRequestExecutionResponse
forall x.
StartChangeRequestExecutionResponse
-> Rep StartChangeRequestExecutionResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep StartChangeRequestExecutionResponse x
-> StartChangeRequestExecutionResponse
$cfrom :: forall x.
StartChangeRequestExecutionResponse
-> Rep StartChangeRequestExecutionResponse x
Prelude.Generic)

-- |
-- Create a value of 'StartChangeRequestExecutionResponse' 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:
--
-- 'automationExecutionId', 'startChangeRequestExecutionResponse_automationExecutionId' - The unique ID of a runbook workflow operation. (A runbook workflow is a
-- type of Automation operation.)
--
-- 'httpStatus', 'startChangeRequestExecutionResponse_httpStatus' - The response's http status code.
newStartChangeRequestExecutionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  StartChangeRequestExecutionResponse
newStartChangeRequestExecutionResponse :: Int -> StartChangeRequestExecutionResponse
newStartChangeRequestExecutionResponse Int
pHttpStatus_ =
  StartChangeRequestExecutionResponse'
    { $sel:automationExecutionId:StartChangeRequestExecutionResponse' :: Maybe Text
automationExecutionId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:StartChangeRequestExecutionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The unique ID of a runbook workflow operation. (A runbook workflow is a
-- type of Automation operation.)
startChangeRequestExecutionResponse_automationExecutionId :: Lens.Lens' StartChangeRequestExecutionResponse (Prelude.Maybe Prelude.Text)
startChangeRequestExecutionResponse_automationExecutionId :: Lens' StartChangeRequestExecutionResponse (Maybe Text)
startChangeRequestExecutionResponse_automationExecutionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecutionResponse' {Maybe Text
automationExecutionId :: Maybe Text
$sel:automationExecutionId:StartChangeRequestExecutionResponse' :: StartChangeRequestExecutionResponse -> Maybe Text
automationExecutionId} -> Maybe Text
automationExecutionId) (\s :: StartChangeRequestExecutionResponse
s@StartChangeRequestExecutionResponse' {} Maybe Text
a -> StartChangeRequestExecutionResponse
s {$sel:automationExecutionId:StartChangeRequestExecutionResponse' :: Maybe Text
automationExecutionId = Maybe Text
a} :: StartChangeRequestExecutionResponse)

-- | The response's http status code.
startChangeRequestExecutionResponse_httpStatus :: Lens.Lens' StartChangeRequestExecutionResponse Prelude.Int
startChangeRequestExecutionResponse_httpStatus :: Lens' StartChangeRequestExecutionResponse Int
startChangeRequestExecutionResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartChangeRequestExecutionResponse' {Int
httpStatus :: Int
$sel:httpStatus:StartChangeRequestExecutionResponse' :: StartChangeRequestExecutionResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: StartChangeRequestExecutionResponse
s@StartChangeRequestExecutionResponse' {} Int
a -> StartChangeRequestExecutionResponse
s {$sel:httpStatus:StartChangeRequestExecutionResponse' :: Int
httpStatus = Int
a} :: StartChangeRequestExecutionResponse)

instance
  Prelude.NFData
    StartChangeRequestExecutionResponse
  where
  rnf :: StartChangeRequestExecutionResponse -> ()
rnf StartChangeRequestExecutionResponse' {Int
Maybe Text
httpStatus :: Int
automationExecutionId :: Maybe Text
$sel:httpStatus:StartChangeRequestExecutionResponse' :: StartChangeRequestExecutionResponse -> Int
$sel:automationExecutionId:StartChangeRequestExecutionResponse' :: StartChangeRequestExecutionResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
automationExecutionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus