{-# 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.EKS.UpdateNodegroupVersion
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the Kubernetes version or AMI version of an Amazon EKS managed
-- node group.
--
-- You can update a node group using a launch template only if the node
-- group was originally deployed with a launch template. If you need to
-- update a custom AMI in a node group that was deployed with a launch
-- template, then update your custom AMI, specify the new ID in a new
-- version of the launch template, and then update the node group to the
-- new version of the launch template.
--
-- If you update without a launch template, then you can update to the
-- latest available AMI version of a node group\'s current Kubernetes
-- version by not specifying a Kubernetes version in the request. You can
-- update to the latest AMI version of your cluster\'s current Kubernetes
-- version by specifying your cluster\'s Kubernetes version in the request.
-- For information about Linux versions, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
-- in the /Amazon EKS User Guide/. For information about Windows versions,
-- see
-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
-- in the /Amazon EKS User Guide/.
--
-- You cannot roll back a node group to an earlier Kubernetes version or
-- AMI version.
--
-- When a node in a managed node group is terminated due to a scaling
-- action or update, the pods in that node are drained first. Amazon EKS
-- attempts to drain the nodes gracefully and will fail if it is unable to
-- do so. You can @force@ the update if Amazon EKS is unable to drain the
-- nodes as a result of a pod disruption budget issue.
module Amazonka.EKS.UpdateNodegroupVersion
  ( -- * Creating a Request
    UpdateNodegroupVersion (..),
    newUpdateNodegroupVersion,

    -- * Request Lenses
    updateNodegroupVersion_clientRequestToken,
    updateNodegroupVersion_force,
    updateNodegroupVersion_launchTemplate,
    updateNodegroupVersion_releaseVersion,
    updateNodegroupVersion_version,
    updateNodegroupVersion_clusterName,
    updateNodegroupVersion_nodegroupName,

    -- * Destructuring the Response
    UpdateNodegroupVersionResponse (..),
    newUpdateNodegroupVersionResponse,

    -- * Response Lenses
    updateNodegroupVersionResponse_update,
    updateNodegroupVersionResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateNodegroupVersion' smart constructor.
data UpdateNodegroupVersion = UpdateNodegroupVersion'
  { -- | Unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request.
    UpdateNodegroupVersion -> Maybe Text
clientRequestToken :: Prelude.Maybe Prelude.Text,
    -- | Force the update if the existing node group\'s pods are unable to be
    -- drained due to a pod disruption budget issue. If an update fails because
    -- pods could not be drained, you can force the update after it fails to
    -- terminate the old node whether or not any pods are running on the node.
    UpdateNodegroupVersion -> Maybe Bool
force :: Prelude.Maybe Prelude.Bool,
    -- | An object representing a node group\'s launch template specification.
    -- You can only update a node group using a launch template if the node
    -- group was originally deployed with a launch template.
    UpdateNodegroupVersion -> Maybe LaunchTemplateSpecification
launchTemplate :: Prelude.Maybe LaunchTemplateSpecification,
    -- | The AMI version of the Amazon EKS optimized AMI to use for the update.
    -- By default, the latest available AMI version for the node group\'s
    -- Kubernetes version is used. For information about Linux versions, see
    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
    -- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
    -- the November 2022 and later releases of the Windows AMIs. For
    -- information about Windows versions, see
    -- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
    -- in the /Amazon EKS User Guide/.
    --
    -- If you specify @launchTemplate@, and your launch template uses a custom
    -- AMI, then don\'t specify @releaseVersion@, or the node group update will
    -- fail. For more information about using launch templates with Amazon EKS,
    -- see
    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
    -- in the /Amazon EKS User Guide/.
    UpdateNodegroupVersion -> Maybe Text
releaseVersion :: Prelude.Maybe Prelude.Text,
    -- | The Kubernetes version to update to. If no version is specified, then
    -- the Kubernetes version of the node group does not change. You can
    -- specify the Kubernetes version of the cluster to update the node group
    -- to the latest AMI version of the cluster\'s Kubernetes version. If you
    -- specify @launchTemplate@, and your launch template uses a custom AMI,
    -- then don\'t specify @version@, or the node group update will fail. For
    -- more information about using launch templates with Amazon EKS, see
    -- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
    -- in the /Amazon EKS User Guide/.
    UpdateNodegroupVersion -> Maybe Text
version :: Prelude.Maybe Prelude.Text,
    -- | The name of the Amazon EKS cluster that is associated with the managed
    -- node group to update.
    UpdateNodegroupVersion -> Text
clusterName :: Prelude.Text,
    -- | The name of the managed node group to update.
    UpdateNodegroupVersion -> Text
nodegroupName :: Prelude.Text
  }
  deriving (UpdateNodegroupVersion -> UpdateNodegroupVersion -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateNodegroupVersion -> UpdateNodegroupVersion -> Bool
$c/= :: UpdateNodegroupVersion -> UpdateNodegroupVersion -> Bool
== :: UpdateNodegroupVersion -> UpdateNodegroupVersion -> Bool
$c== :: UpdateNodegroupVersion -> UpdateNodegroupVersion -> Bool
Prelude.Eq, ReadPrec [UpdateNodegroupVersion]
ReadPrec UpdateNodegroupVersion
Int -> ReadS UpdateNodegroupVersion
ReadS [UpdateNodegroupVersion]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateNodegroupVersion]
$creadListPrec :: ReadPrec [UpdateNodegroupVersion]
readPrec :: ReadPrec UpdateNodegroupVersion
$creadPrec :: ReadPrec UpdateNodegroupVersion
readList :: ReadS [UpdateNodegroupVersion]
$creadList :: ReadS [UpdateNodegroupVersion]
readsPrec :: Int -> ReadS UpdateNodegroupVersion
$creadsPrec :: Int -> ReadS UpdateNodegroupVersion
Prelude.Read, Int -> UpdateNodegroupVersion -> ShowS
[UpdateNodegroupVersion] -> ShowS
UpdateNodegroupVersion -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateNodegroupVersion] -> ShowS
$cshowList :: [UpdateNodegroupVersion] -> ShowS
show :: UpdateNodegroupVersion -> String
$cshow :: UpdateNodegroupVersion -> String
showsPrec :: Int -> UpdateNodegroupVersion -> ShowS
$cshowsPrec :: Int -> UpdateNodegroupVersion -> ShowS
Prelude.Show, forall x. Rep UpdateNodegroupVersion x -> UpdateNodegroupVersion
forall x. UpdateNodegroupVersion -> Rep UpdateNodegroupVersion x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateNodegroupVersion x -> UpdateNodegroupVersion
$cfrom :: forall x. UpdateNodegroupVersion -> Rep UpdateNodegroupVersion x
Prelude.Generic)

-- |
-- Create a value of 'UpdateNodegroupVersion' 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:
--
-- 'clientRequestToken', 'updateNodegroupVersion_clientRequestToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request.
--
-- 'force', 'updateNodegroupVersion_force' - Force the update if the existing node group\'s pods are unable to be
-- drained due to a pod disruption budget issue. If an update fails because
-- pods could not be drained, you can force the update after it fails to
-- terminate the old node whether or not any pods are running on the node.
--
-- 'launchTemplate', 'updateNodegroupVersion_launchTemplate' - An object representing a node group\'s launch template specification.
-- You can only update a node group using a launch template if the node
-- group was originally deployed with a launch template.
--
-- 'releaseVersion', 'updateNodegroupVersion_releaseVersion' - The AMI version of the Amazon EKS optimized AMI to use for the update.
-- By default, the latest available AMI version for the node group\'s
-- Kubernetes version is used. For information about Linux versions, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
-- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
-- the November 2022 and later releases of the Windows AMIs. For
-- information about Windows versions, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
-- in the /Amazon EKS User Guide/.
--
-- If you specify @launchTemplate@, and your launch template uses a custom
-- AMI, then don\'t specify @releaseVersion@, or the node group update will
-- fail. For more information about using launch templates with Amazon EKS,
-- see
-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
-- in the /Amazon EKS User Guide/.
--
-- 'version', 'updateNodegroupVersion_version' - The Kubernetes version to update to. If no version is specified, then
-- the Kubernetes version of the node group does not change. You can
-- specify the Kubernetes version of the cluster to update the node group
-- to the latest AMI version of the cluster\'s Kubernetes version. If you
-- specify @launchTemplate@, and your launch template uses a custom AMI,
-- then don\'t specify @version@, or the node group update will fail. For
-- more information about using launch templates with Amazon EKS, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
-- in the /Amazon EKS User Guide/.
--
-- 'clusterName', 'updateNodegroupVersion_clusterName' - The name of the Amazon EKS cluster that is associated with the managed
-- node group to update.
--
-- 'nodegroupName', 'updateNodegroupVersion_nodegroupName' - The name of the managed node group to update.
newUpdateNodegroupVersion ::
  -- | 'clusterName'
  Prelude.Text ->
  -- | 'nodegroupName'
  Prelude.Text ->
  UpdateNodegroupVersion
newUpdateNodegroupVersion :: Text -> Text -> UpdateNodegroupVersion
newUpdateNodegroupVersion
  Text
pClusterName_
  Text
pNodegroupName_ =
    UpdateNodegroupVersion'
      { $sel:clientRequestToken:UpdateNodegroupVersion' :: Maybe Text
clientRequestToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:force:UpdateNodegroupVersion' :: Maybe Bool
force = forall a. Maybe a
Prelude.Nothing,
        $sel:launchTemplate:UpdateNodegroupVersion' :: Maybe LaunchTemplateSpecification
launchTemplate = forall a. Maybe a
Prelude.Nothing,
        $sel:releaseVersion:UpdateNodegroupVersion' :: Maybe Text
releaseVersion = forall a. Maybe a
Prelude.Nothing,
        $sel:version:UpdateNodegroupVersion' :: Maybe Text
version = forall a. Maybe a
Prelude.Nothing,
        $sel:clusterName:UpdateNodegroupVersion' :: Text
clusterName = Text
pClusterName_,
        $sel:nodegroupName:UpdateNodegroupVersion' :: Text
nodegroupName = Text
pNodegroupName_
      }

-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request.
updateNodegroupVersion_clientRequestToken :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Text)
updateNodegroupVersion_clientRequestToken :: Lens' UpdateNodegroupVersion (Maybe Text)
updateNodegroupVersion_clientRequestToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Maybe Text
clientRequestToken :: Maybe Text
$sel:clientRequestToken:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
clientRequestToken} -> Maybe Text
clientRequestToken) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Maybe Text
a -> UpdateNodegroupVersion
s {$sel:clientRequestToken:UpdateNodegroupVersion' :: Maybe Text
clientRequestToken = Maybe Text
a} :: UpdateNodegroupVersion)

-- | Force the update if the existing node group\'s pods are unable to be
-- drained due to a pod disruption budget issue. If an update fails because
-- pods could not be drained, you can force the update after it fails to
-- terminate the old node whether or not any pods are running on the node.
updateNodegroupVersion_force :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Bool)
updateNodegroupVersion_force :: Lens' UpdateNodegroupVersion (Maybe Bool)
updateNodegroupVersion_force = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Maybe Bool
force :: Maybe Bool
$sel:force:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Bool
force} -> Maybe Bool
force) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Maybe Bool
a -> UpdateNodegroupVersion
s {$sel:force:UpdateNodegroupVersion' :: Maybe Bool
force = Maybe Bool
a} :: UpdateNodegroupVersion)

-- | An object representing a node group\'s launch template specification.
-- You can only update a node group using a launch template if the node
-- group was originally deployed with a launch template.
updateNodegroupVersion_launchTemplate :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe LaunchTemplateSpecification)
updateNodegroupVersion_launchTemplate :: Lens' UpdateNodegroupVersion (Maybe LaunchTemplateSpecification)
updateNodegroupVersion_launchTemplate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Maybe LaunchTemplateSpecification
launchTemplate :: Maybe LaunchTemplateSpecification
$sel:launchTemplate:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe LaunchTemplateSpecification
launchTemplate} -> Maybe LaunchTemplateSpecification
launchTemplate) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Maybe LaunchTemplateSpecification
a -> UpdateNodegroupVersion
s {$sel:launchTemplate:UpdateNodegroupVersion' :: Maybe LaunchTemplateSpecification
launchTemplate = Maybe LaunchTemplateSpecification
a} :: UpdateNodegroupVersion)

-- | The AMI version of the Amazon EKS optimized AMI to use for the update.
-- By default, the latest available AMI version for the node group\'s
-- Kubernetes version is used. For information about Linux versions, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html Amazon EKS optimized Amazon Linux AMI versions>
-- in the /Amazon EKS User Guide/. Amazon EKS managed node groups support
-- the November 2022 and later releases of the Windows AMIs. For
-- information about Windows versions, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html Amazon EKS optimized Windows AMI versions>
-- in the /Amazon EKS User Guide/.
--
-- If you specify @launchTemplate@, and your launch template uses a custom
-- AMI, then don\'t specify @releaseVersion@, or the node group update will
-- fail. For more information about using launch templates with Amazon EKS,
-- see
-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
-- in the /Amazon EKS User Guide/.
updateNodegroupVersion_releaseVersion :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Text)
updateNodegroupVersion_releaseVersion :: Lens' UpdateNodegroupVersion (Maybe Text)
updateNodegroupVersion_releaseVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Maybe Text
releaseVersion :: Maybe Text
$sel:releaseVersion:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
releaseVersion} -> Maybe Text
releaseVersion) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Maybe Text
a -> UpdateNodegroupVersion
s {$sel:releaseVersion:UpdateNodegroupVersion' :: Maybe Text
releaseVersion = Maybe Text
a} :: UpdateNodegroupVersion)

-- | The Kubernetes version to update to. If no version is specified, then
-- the Kubernetes version of the node group does not change. You can
-- specify the Kubernetes version of the cluster to update the node group
-- to the latest AMI version of the cluster\'s Kubernetes version. If you
-- specify @launchTemplate@, and your launch template uses a custom AMI,
-- then don\'t specify @version@, or the node group update will fail. For
-- more information about using launch templates with Amazon EKS, see
-- <https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html Launch template support>
-- in the /Amazon EKS User Guide/.
updateNodegroupVersion_version :: Lens.Lens' UpdateNodegroupVersion (Prelude.Maybe Prelude.Text)
updateNodegroupVersion_version :: Lens' UpdateNodegroupVersion (Maybe Text)
updateNodegroupVersion_version = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Maybe Text
version :: Maybe Text
$sel:version:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
version} -> Maybe Text
version) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Maybe Text
a -> UpdateNodegroupVersion
s {$sel:version:UpdateNodegroupVersion' :: Maybe Text
version = Maybe Text
a} :: UpdateNodegroupVersion)

-- | The name of the Amazon EKS cluster that is associated with the managed
-- node group to update.
updateNodegroupVersion_clusterName :: Lens.Lens' UpdateNodegroupVersion Prelude.Text
updateNodegroupVersion_clusterName :: Lens' UpdateNodegroupVersion Text
updateNodegroupVersion_clusterName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Text
clusterName :: Text
$sel:clusterName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
clusterName} -> Text
clusterName) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Text
a -> UpdateNodegroupVersion
s {$sel:clusterName:UpdateNodegroupVersion' :: Text
clusterName = Text
a} :: UpdateNodegroupVersion)

-- | The name of the managed node group to update.
updateNodegroupVersion_nodegroupName :: Lens.Lens' UpdateNodegroupVersion Prelude.Text
updateNodegroupVersion_nodegroupName :: Lens' UpdateNodegroupVersion Text
updateNodegroupVersion_nodegroupName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersion' {Text
nodegroupName :: Text
$sel:nodegroupName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
nodegroupName} -> Text
nodegroupName) (\s :: UpdateNodegroupVersion
s@UpdateNodegroupVersion' {} Text
a -> UpdateNodegroupVersion
s {$sel:nodegroupName:UpdateNodegroupVersion' :: Text
nodegroupName = Text
a} :: UpdateNodegroupVersion)

instance Core.AWSRequest UpdateNodegroupVersion where
  type
    AWSResponse UpdateNodegroupVersion =
      UpdateNodegroupVersionResponse
  request :: (Service -> Service)
-> UpdateNodegroupVersion -> Request UpdateNodegroupVersion
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 UpdateNodegroupVersion
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateNodegroupVersion)))
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 Update -> Int -> UpdateNodegroupVersionResponse
UpdateNodegroupVersionResponse'
            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
"update")
            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 UpdateNodegroupVersion where
  hashWithSalt :: Int -> UpdateNodegroupVersion -> Int
hashWithSalt Int
_salt UpdateNodegroupVersion' {Maybe Bool
Maybe Text
Maybe LaunchTemplateSpecification
Text
nodegroupName :: Text
clusterName :: Text
version :: Maybe Text
releaseVersion :: Maybe Text
launchTemplate :: Maybe LaunchTemplateSpecification
force :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:nodegroupName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:clusterName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:version:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:releaseVersion:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:launchTemplate:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe LaunchTemplateSpecification
$sel:force:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Bool
$sel:clientRequestToken:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientRequestToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
force
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LaunchTemplateSpecification
launchTemplate
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
releaseVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
version
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
clusterName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
nodegroupName

instance Prelude.NFData UpdateNodegroupVersion where
  rnf :: UpdateNodegroupVersion -> ()
rnf UpdateNodegroupVersion' {Maybe Bool
Maybe Text
Maybe LaunchTemplateSpecification
Text
nodegroupName :: Text
clusterName :: Text
version :: Maybe Text
releaseVersion :: Maybe Text
launchTemplate :: Maybe LaunchTemplateSpecification
force :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:nodegroupName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:clusterName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:version:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:releaseVersion:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:launchTemplate:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe LaunchTemplateSpecification
$sel:force:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Bool
$sel:clientRequestToken:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientRequestToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
force
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LaunchTemplateSpecification
launchTemplate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
releaseVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
version
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
clusterName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
nodegroupName

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

instance Data.ToJSON UpdateNodegroupVersion where
  toJSON :: UpdateNodegroupVersion -> Value
toJSON UpdateNodegroupVersion' {Maybe Bool
Maybe Text
Maybe LaunchTemplateSpecification
Text
nodegroupName :: Text
clusterName :: Text
version :: Maybe Text
releaseVersion :: Maybe Text
launchTemplate :: Maybe LaunchTemplateSpecification
force :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:nodegroupName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:clusterName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:version:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:releaseVersion:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:launchTemplate:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe LaunchTemplateSpecification
$sel:force:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Bool
$sel:clientRequestToken:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"clientRequestToken" 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
clientRequestToken,
            (Key
"force" 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
force,
            (Key
"launchTemplate" 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 LaunchTemplateSpecification
launchTemplate,
            (Key
"releaseVersion" 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
releaseVersion,
            (Key
"version" 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
version
          ]
      )

instance Data.ToPath UpdateNodegroupVersion where
  toPath :: UpdateNodegroupVersion -> ByteString
toPath UpdateNodegroupVersion' {Maybe Bool
Maybe Text
Maybe LaunchTemplateSpecification
Text
nodegroupName :: Text
clusterName :: Text
version :: Maybe Text
releaseVersion :: Maybe Text
launchTemplate :: Maybe LaunchTemplateSpecification
force :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:nodegroupName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:clusterName:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Text
$sel:version:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:releaseVersion:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
$sel:launchTemplate:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe LaunchTemplateSpecification
$sel:force:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Bool
$sel:clientRequestToken:UpdateNodegroupVersion' :: UpdateNodegroupVersion -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/clusters/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
clusterName,
        ByteString
"/node-groups/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
nodegroupName,
        ByteString
"/update-version"
      ]

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

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

-- |
-- Create a value of 'UpdateNodegroupVersionResponse' 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:
--
-- 'update', 'updateNodegroupVersionResponse_update' - Undocumented member.
--
-- 'httpStatus', 'updateNodegroupVersionResponse_httpStatus' - The response's http status code.
newUpdateNodegroupVersionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateNodegroupVersionResponse
newUpdateNodegroupVersionResponse :: Int -> UpdateNodegroupVersionResponse
newUpdateNodegroupVersionResponse Int
pHttpStatus_ =
  UpdateNodegroupVersionResponse'
    { $sel:update:UpdateNodegroupVersionResponse' :: Maybe Update
update =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateNodegroupVersionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Undocumented member.
updateNodegroupVersionResponse_update :: Lens.Lens' UpdateNodegroupVersionResponse (Prelude.Maybe Update)
updateNodegroupVersionResponse_update :: Lens' UpdateNodegroupVersionResponse (Maybe Update)
updateNodegroupVersionResponse_update = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateNodegroupVersionResponse' {Maybe Update
update :: Maybe Update
$sel:update:UpdateNodegroupVersionResponse' :: UpdateNodegroupVersionResponse -> Maybe Update
update} -> Maybe Update
update) (\s :: UpdateNodegroupVersionResponse
s@UpdateNodegroupVersionResponse' {} Maybe Update
a -> UpdateNodegroupVersionResponse
s {$sel:update:UpdateNodegroupVersionResponse' :: Maybe Update
update = Maybe Update
a} :: UpdateNodegroupVersionResponse)

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

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