{-# 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.ECS.UpdateTaskSet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies a task set. This is used when a service uses the @EXTERNAL@
-- deployment controller type. For more information, see
-- <https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-types.html Amazon ECS Deployment Types>
-- in the /Amazon Elastic Container Service Developer Guide/.
module Amazonka.ECS.UpdateTaskSet
  ( -- * Creating a Request
    UpdateTaskSet (..),
    newUpdateTaskSet,

    -- * Request Lenses
    updateTaskSet_cluster,
    updateTaskSet_service,
    updateTaskSet_taskSet,
    updateTaskSet_scale,

    -- * Destructuring the Response
    UpdateTaskSetResponse (..),
    newUpdateTaskSetResponse,

    -- * Response Lenses
    updateTaskSetResponse_taskSet,
    updateTaskSetResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateTaskSet' smart constructor.
data UpdateTaskSet = UpdateTaskSet'
  { -- | The short name or full Amazon Resource Name (ARN) of the cluster that
    -- hosts the service that the task set is found in.
    UpdateTaskSet -> Text
cluster :: Prelude.Text,
    -- | The short name or full Amazon Resource Name (ARN) of the service that
    -- the task set is found in.
    UpdateTaskSet -> Text
service :: Prelude.Text,
    -- | The short name or full Amazon Resource Name (ARN) of the task set to
    -- update.
    UpdateTaskSet -> Text
taskSet :: Prelude.Text,
    -- | A floating-point percentage of the desired number of tasks to place and
    -- keep running in the task set.
    UpdateTaskSet -> Scale
scale :: Scale
  }
  deriving (UpdateTaskSet -> UpdateTaskSet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateTaskSet -> UpdateTaskSet -> Bool
$c/= :: UpdateTaskSet -> UpdateTaskSet -> Bool
== :: UpdateTaskSet -> UpdateTaskSet -> Bool
$c== :: UpdateTaskSet -> UpdateTaskSet -> Bool
Prelude.Eq, ReadPrec [UpdateTaskSet]
ReadPrec UpdateTaskSet
Int -> ReadS UpdateTaskSet
ReadS [UpdateTaskSet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateTaskSet]
$creadListPrec :: ReadPrec [UpdateTaskSet]
readPrec :: ReadPrec UpdateTaskSet
$creadPrec :: ReadPrec UpdateTaskSet
readList :: ReadS [UpdateTaskSet]
$creadList :: ReadS [UpdateTaskSet]
readsPrec :: Int -> ReadS UpdateTaskSet
$creadsPrec :: Int -> ReadS UpdateTaskSet
Prelude.Read, Int -> UpdateTaskSet -> ShowS
[UpdateTaskSet] -> ShowS
UpdateTaskSet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateTaskSet] -> ShowS
$cshowList :: [UpdateTaskSet] -> ShowS
show :: UpdateTaskSet -> String
$cshow :: UpdateTaskSet -> String
showsPrec :: Int -> UpdateTaskSet -> ShowS
$cshowsPrec :: Int -> UpdateTaskSet -> ShowS
Prelude.Show, forall x. Rep UpdateTaskSet x -> UpdateTaskSet
forall x. UpdateTaskSet -> Rep UpdateTaskSet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateTaskSet x -> UpdateTaskSet
$cfrom :: forall x. UpdateTaskSet -> Rep UpdateTaskSet x
Prelude.Generic)

-- |
-- Create a value of 'UpdateTaskSet' 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:
--
-- 'cluster', 'updateTaskSet_cluster' - The short name or full Amazon Resource Name (ARN) of the cluster that
-- hosts the service that the task set is found in.
--
-- 'service', 'updateTaskSet_service' - The short name or full Amazon Resource Name (ARN) of the service that
-- the task set is found in.
--
-- 'taskSet', 'updateTaskSet_taskSet' - The short name or full Amazon Resource Name (ARN) of the task set to
-- update.
--
-- 'scale', 'updateTaskSet_scale' - A floating-point percentage of the desired number of tasks to place and
-- keep running in the task set.
newUpdateTaskSet ::
  -- | 'cluster'
  Prelude.Text ->
  -- | 'service'
  Prelude.Text ->
  -- | 'taskSet'
  Prelude.Text ->
  -- | 'scale'
  Scale ->
  UpdateTaskSet
newUpdateTaskSet :: Text -> Text -> Text -> Scale -> UpdateTaskSet
newUpdateTaskSet
  Text
pCluster_
  Text
pService_
  Text
pTaskSet_
  Scale
pScale_ =
    UpdateTaskSet'
      { $sel:cluster:UpdateTaskSet' :: Text
cluster = Text
pCluster_,
        $sel:service:UpdateTaskSet' :: Text
service = Text
pService_,
        $sel:taskSet:UpdateTaskSet' :: Text
taskSet = Text
pTaskSet_,
        $sel:scale:UpdateTaskSet' :: Scale
scale = Scale
pScale_
      }

-- | The short name or full Amazon Resource Name (ARN) of the cluster that
-- hosts the service that the task set is found in.
updateTaskSet_cluster :: Lens.Lens' UpdateTaskSet Prelude.Text
updateTaskSet_cluster :: Lens' UpdateTaskSet Text
updateTaskSet_cluster = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTaskSet' {Text
cluster :: Text
$sel:cluster:UpdateTaskSet' :: UpdateTaskSet -> Text
cluster} -> Text
cluster) (\s :: UpdateTaskSet
s@UpdateTaskSet' {} Text
a -> UpdateTaskSet
s {$sel:cluster:UpdateTaskSet' :: Text
cluster = Text
a} :: UpdateTaskSet)

-- | The short name or full Amazon Resource Name (ARN) of the service that
-- the task set is found in.
updateTaskSet_service :: Lens.Lens' UpdateTaskSet Prelude.Text
updateTaskSet_service :: Lens' UpdateTaskSet Text
updateTaskSet_service = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTaskSet' {Text
service :: Text
$sel:service:UpdateTaskSet' :: UpdateTaskSet -> Text
service} -> Text
service) (\s :: UpdateTaskSet
s@UpdateTaskSet' {} Text
a -> UpdateTaskSet
s {$sel:service:UpdateTaskSet' :: Text
service = Text
a} :: UpdateTaskSet)

-- | The short name or full Amazon Resource Name (ARN) of the task set to
-- update.
updateTaskSet_taskSet :: Lens.Lens' UpdateTaskSet Prelude.Text
updateTaskSet_taskSet :: Lens' UpdateTaskSet Text
updateTaskSet_taskSet = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTaskSet' {Text
taskSet :: Text
$sel:taskSet:UpdateTaskSet' :: UpdateTaskSet -> Text
taskSet} -> Text
taskSet) (\s :: UpdateTaskSet
s@UpdateTaskSet' {} Text
a -> UpdateTaskSet
s {$sel:taskSet:UpdateTaskSet' :: Text
taskSet = Text
a} :: UpdateTaskSet)

-- | A floating-point percentage of the desired number of tasks to place and
-- keep running in the task set.
updateTaskSet_scale :: Lens.Lens' UpdateTaskSet Scale
updateTaskSet_scale :: Lens' UpdateTaskSet Scale
updateTaskSet_scale = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTaskSet' {Scale
scale :: Scale
$sel:scale:UpdateTaskSet' :: UpdateTaskSet -> Scale
scale} -> Scale
scale) (\s :: UpdateTaskSet
s@UpdateTaskSet' {} Scale
a -> UpdateTaskSet
s {$sel:scale:UpdateTaskSet' :: Scale
scale = Scale
a} :: UpdateTaskSet)

instance Core.AWSRequest UpdateTaskSet where
  type
    AWSResponse UpdateTaskSet =
      UpdateTaskSetResponse
  request :: (Service -> Service) -> UpdateTaskSet -> Request UpdateTaskSet
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 UpdateTaskSet
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse UpdateTaskSet)))
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 TaskSet -> Int -> UpdateTaskSetResponse
UpdateTaskSetResponse'
            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
"taskSet")
            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 UpdateTaskSet where
  hashWithSalt :: Int -> UpdateTaskSet -> Int
hashWithSalt Int
_salt UpdateTaskSet' {Text
Scale
scale :: Scale
taskSet :: Text
service :: Text
cluster :: Text
$sel:scale:UpdateTaskSet' :: UpdateTaskSet -> Scale
$sel:taskSet:UpdateTaskSet' :: UpdateTaskSet -> Text
$sel:service:UpdateTaskSet' :: UpdateTaskSet -> Text
$sel:cluster:UpdateTaskSet' :: UpdateTaskSet -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
cluster
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
service
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
taskSet
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Scale
scale

instance Prelude.NFData UpdateTaskSet where
  rnf :: UpdateTaskSet -> ()
rnf UpdateTaskSet' {Text
Scale
scale :: Scale
taskSet :: Text
service :: Text
cluster :: Text
$sel:scale:UpdateTaskSet' :: UpdateTaskSet -> Scale
$sel:taskSet:UpdateTaskSet' :: UpdateTaskSet -> Text
$sel:service:UpdateTaskSet' :: UpdateTaskSet -> Text
$sel:cluster:UpdateTaskSet' :: UpdateTaskSet -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
cluster
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
service
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
taskSet
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Scale
scale

instance Data.ToHeaders UpdateTaskSet where
  toHeaders :: UpdateTaskSet -> 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
"AmazonEC2ContainerServiceV20141113.UpdateTaskSet" ::
                          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 UpdateTaskSet where
  toJSON :: UpdateTaskSet -> Value
toJSON UpdateTaskSet' {Text
Scale
scale :: Scale
taskSet :: Text
service :: Text
cluster :: Text
$sel:scale:UpdateTaskSet' :: UpdateTaskSet -> Scale
$sel:taskSet:UpdateTaskSet' :: UpdateTaskSet -> Text
$sel:service:UpdateTaskSet' :: UpdateTaskSet -> Text
$sel:cluster:UpdateTaskSet' :: UpdateTaskSet -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"cluster" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
cluster),
            forall a. a -> Maybe a
Prelude.Just (Key
"service" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
service),
            forall a. a -> Maybe a
Prelude.Just (Key
"taskSet" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
taskSet),
            forall a. a -> Maybe a
Prelude.Just (Key
"scale" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Scale
scale)
          ]
      )

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

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

-- | /See:/ 'newUpdateTaskSetResponse' smart constructor.
data UpdateTaskSetResponse = UpdateTaskSetResponse'
  { -- | Details about the task set.
    UpdateTaskSetResponse -> Maybe TaskSet
taskSet :: Prelude.Maybe TaskSet,
    -- | The response's http status code.
    UpdateTaskSetResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateTaskSetResponse -> UpdateTaskSetResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateTaskSetResponse -> UpdateTaskSetResponse -> Bool
$c/= :: UpdateTaskSetResponse -> UpdateTaskSetResponse -> Bool
== :: UpdateTaskSetResponse -> UpdateTaskSetResponse -> Bool
$c== :: UpdateTaskSetResponse -> UpdateTaskSetResponse -> Bool
Prelude.Eq, ReadPrec [UpdateTaskSetResponse]
ReadPrec UpdateTaskSetResponse
Int -> ReadS UpdateTaskSetResponse
ReadS [UpdateTaskSetResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateTaskSetResponse]
$creadListPrec :: ReadPrec [UpdateTaskSetResponse]
readPrec :: ReadPrec UpdateTaskSetResponse
$creadPrec :: ReadPrec UpdateTaskSetResponse
readList :: ReadS [UpdateTaskSetResponse]
$creadList :: ReadS [UpdateTaskSetResponse]
readsPrec :: Int -> ReadS UpdateTaskSetResponse
$creadsPrec :: Int -> ReadS UpdateTaskSetResponse
Prelude.Read, Int -> UpdateTaskSetResponse -> ShowS
[UpdateTaskSetResponse] -> ShowS
UpdateTaskSetResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateTaskSetResponse] -> ShowS
$cshowList :: [UpdateTaskSetResponse] -> ShowS
show :: UpdateTaskSetResponse -> String
$cshow :: UpdateTaskSetResponse -> String
showsPrec :: Int -> UpdateTaskSetResponse -> ShowS
$cshowsPrec :: Int -> UpdateTaskSetResponse -> ShowS
Prelude.Show, forall x. Rep UpdateTaskSetResponse x -> UpdateTaskSetResponse
forall x. UpdateTaskSetResponse -> Rep UpdateTaskSetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateTaskSetResponse x -> UpdateTaskSetResponse
$cfrom :: forall x. UpdateTaskSetResponse -> Rep UpdateTaskSetResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateTaskSetResponse' 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:
--
-- 'taskSet', 'updateTaskSetResponse_taskSet' - Details about the task set.
--
-- 'httpStatus', 'updateTaskSetResponse_httpStatus' - The response's http status code.
newUpdateTaskSetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateTaskSetResponse
newUpdateTaskSetResponse :: Int -> UpdateTaskSetResponse
newUpdateTaskSetResponse Int
pHttpStatus_ =
  UpdateTaskSetResponse'
    { $sel:taskSet:UpdateTaskSetResponse' :: Maybe TaskSet
taskSet = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateTaskSetResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Details about the task set.
updateTaskSetResponse_taskSet :: Lens.Lens' UpdateTaskSetResponse (Prelude.Maybe TaskSet)
updateTaskSetResponse_taskSet :: Lens' UpdateTaskSetResponse (Maybe TaskSet)
updateTaskSetResponse_taskSet = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTaskSetResponse' {Maybe TaskSet
taskSet :: Maybe TaskSet
$sel:taskSet:UpdateTaskSetResponse' :: UpdateTaskSetResponse -> Maybe TaskSet
taskSet} -> Maybe TaskSet
taskSet) (\s :: UpdateTaskSetResponse
s@UpdateTaskSetResponse' {} Maybe TaskSet
a -> UpdateTaskSetResponse
s {$sel:taskSet:UpdateTaskSetResponse' :: Maybe TaskSet
taskSet = Maybe TaskSet
a} :: UpdateTaskSetResponse)

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

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