packages feed

amazonka-emr-2.0: gen/Amazonka/EMR/PutAutoTerminationPolicy.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.EMR.PutAutoTerminationPolicy
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Auto-termination is supported in Amazon EMR versions 5.30.0 and 6.1.0
-- and later. For more information, see
-- <https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-auto-termination-policy.html Using an auto-termination policy>.
--
-- Creates or updates an auto-termination policy for an Amazon EMR cluster.
-- An auto-termination policy defines the amount of idle time in seconds
-- after which a cluster automatically terminates. For alternative cluster
-- termination options, see
-- <https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-termination.html Control cluster termination>.
module Amazonka.EMR.PutAutoTerminationPolicy
  ( -- * Creating a Request
    PutAutoTerminationPolicy (..),
    newPutAutoTerminationPolicy,

    -- * Request Lenses
    putAutoTerminationPolicy_autoTerminationPolicy,
    putAutoTerminationPolicy_clusterId,

    -- * Destructuring the Response
    PutAutoTerminationPolicyResponse (..),
    newPutAutoTerminationPolicyResponse,

    -- * Response Lenses
    putAutoTerminationPolicyResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EMR.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newPutAutoTerminationPolicy' smart constructor.
data PutAutoTerminationPolicy = PutAutoTerminationPolicy'
  { -- | Specifies the auto-termination policy to attach to the cluster.
    autoTerminationPolicy :: Prelude.Maybe AutoTerminationPolicy,
    -- | Specifies the ID of the Amazon EMR cluster to which the auto-termination
    -- policy will be attached.
    clusterId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutAutoTerminationPolicy' 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:
--
-- 'autoTerminationPolicy', 'putAutoTerminationPolicy_autoTerminationPolicy' - Specifies the auto-termination policy to attach to the cluster.
--
-- 'clusterId', 'putAutoTerminationPolicy_clusterId' - Specifies the ID of the Amazon EMR cluster to which the auto-termination
-- policy will be attached.
newPutAutoTerminationPolicy ::
  -- | 'clusterId'
  Prelude.Text ->
  PutAutoTerminationPolicy
newPutAutoTerminationPolicy pClusterId_ =
  PutAutoTerminationPolicy'
    { autoTerminationPolicy =
        Prelude.Nothing,
      clusterId = pClusterId_
    }

-- | Specifies the auto-termination policy to attach to the cluster.
putAutoTerminationPolicy_autoTerminationPolicy :: Lens.Lens' PutAutoTerminationPolicy (Prelude.Maybe AutoTerminationPolicy)
putAutoTerminationPolicy_autoTerminationPolicy = Lens.lens (\PutAutoTerminationPolicy' {autoTerminationPolicy} -> autoTerminationPolicy) (\s@PutAutoTerminationPolicy' {} a -> s {autoTerminationPolicy = a} :: PutAutoTerminationPolicy)

-- | Specifies the ID of the Amazon EMR cluster to which the auto-termination
-- policy will be attached.
putAutoTerminationPolicy_clusterId :: Lens.Lens' PutAutoTerminationPolicy Prelude.Text
putAutoTerminationPolicy_clusterId = Lens.lens (\PutAutoTerminationPolicy' {clusterId} -> clusterId) (\s@PutAutoTerminationPolicy' {} a -> s {clusterId = a} :: PutAutoTerminationPolicy)

instance Core.AWSRequest PutAutoTerminationPolicy where
  type
    AWSResponse PutAutoTerminationPolicy =
      PutAutoTerminationPolicyResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveEmpty
      ( \s h x ->
          PutAutoTerminationPolicyResponse'
            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable PutAutoTerminationPolicy where
  hashWithSalt _salt PutAutoTerminationPolicy' {..} =
    _salt
      `Prelude.hashWithSalt` autoTerminationPolicy
      `Prelude.hashWithSalt` clusterId

instance Prelude.NFData PutAutoTerminationPolicy where
  rnf PutAutoTerminationPolicy' {..} =
    Prelude.rnf autoTerminationPolicy
      `Prelude.seq` Prelude.rnf clusterId

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

instance Data.ToJSON PutAutoTerminationPolicy where
  toJSON PutAutoTerminationPolicy' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("AutoTerminationPolicy" Data..=)
              Prelude.<$> autoTerminationPolicy,
            Prelude.Just ("ClusterId" Data..= clusterId)
          ]
      )

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

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

-- | /See:/ 'newPutAutoTerminationPolicyResponse' smart constructor.
data PutAutoTerminationPolicyResponse = PutAutoTerminationPolicyResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutAutoTerminationPolicyResponse' 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', 'putAutoTerminationPolicyResponse_httpStatus' - The response's http status code.
newPutAutoTerminationPolicyResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PutAutoTerminationPolicyResponse
newPutAutoTerminationPolicyResponse pHttpStatus_ =
  PutAutoTerminationPolicyResponse'
    { httpStatus =
        pHttpStatus_
    }

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

instance
  Prelude.NFData
    PutAutoTerminationPolicyResponse
  where
  rnf PutAutoTerminationPolicyResponse' {..} =
    Prelude.rnf httpStatus