{-# 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.DescribeNodegroup
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns descriptive information about an Amazon EKS node group.
module Amazonka.EKS.DescribeNodegroup
  ( -- * Creating a Request
    DescribeNodegroup (..),
    newDescribeNodegroup,

    -- * Request Lenses
    describeNodegroup_clusterName,
    describeNodegroup_nodegroupName,

    -- * Destructuring the Response
    DescribeNodegroupResponse (..),
    newDescribeNodegroupResponse,

    -- * Response Lenses
    describeNodegroupResponse_nodegroup,
    describeNodegroupResponse_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:/ 'newDescribeNodegroup' smart constructor.
data DescribeNodegroup = DescribeNodegroup'
  { -- | The name of the Amazon EKS cluster associated with the node group.
    DescribeNodegroup -> Text
clusterName :: Prelude.Text,
    -- | The name of the node group to describe.
    DescribeNodegroup -> Text
nodegroupName :: Prelude.Text
  }
  deriving (DescribeNodegroup -> DescribeNodegroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeNodegroup -> DescribeNodegroup -> Bool
$c/= :: DescribeNodegroup -> DescribeNodegroup -> Bool
== :: DescribeNodegroup -> DescribeNodegroup -> Bool
$c== :: DescribeNodegroup -> DescribeNodegroup -> Bool
Prelude.Eq, ReadPrec [DescribeNodegroup]
ReadPrec DescribeNodegroup
Int -> ReadS DescribeNodegroup
ReadS [DescribeNodegroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeNodegroup]
$creadListPrec :: ReadPrec [DescribeNodegroup]
readPrec :: ReadPrec DescribeNodegroup
$creadPrec :: ReadPrec DescribeNodegroup
readList :: ReadS [DescribeNodegroup]
$creadList :: ReadS [DescribeNodegroup]
readsPrec :: Int -> ReadS DescribeNodegroup
$creadsPrec :: Int -> ReadS DescribeNodegroup
Prelude.Read, Int -> DescribeNodegroup -> ShowS
[DescribeNodegroup] -> ShowS
DescribeNodegroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeNodegroup] -> ShowS
$cshowList :: [DescribeNodegroup] -> ShowS
show :: DescribeNodegroup -> String
$cshow :: DescribeNodegroup -> String
showsPrec :: Int -> DescribeNodegroup -> ShowS
$cshowsPrec :: Int -> DescribeNodegroup -> ShowS
Prelude.Show, forall x. Rep DescribeNodegroup x -> DescribeNodegroup
forall x. DescribeNodegroup -> Rep DescribeNodegroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeNodegroup x -> DescribeNodegroup
$cfrom :: forall x. DescribeNodegroup -> Rep DescribeNodegroup x
Prelude.Generic)

-- |
-- Create a value of 'DescribeNodegroup' 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:
--
-- 'clusterName', 'describeNodegroup_clusterName' - The name of the Amazon EKS cluster associated with the node group.
--
-- 'nodegroupName', 'describeNodegroup_nodegroupName' - The name of the node group to describe.
newDescribeNodegroup ::
  -- | 'clusterName'
  Prelude.Text ->
  -- | 'nodegroupName'
  Prelude.Text ->
  DescribeNodegroup
newDescribeNodegroup :: Text -> Text -> DescribeNodegroup
newDescribeNodegroup Text
pClusterName_ Text
pNodegroupName_ =
  DescribeNodegroup'
    { $sel:clusterName:DescribeNodegroup' :: Text
clusterName = Text
pClusterName_,
      $sel:nodegroupName:DescribeNodegroup' :: Text
nodegroupName = Text
pNodegroupName_
    }

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

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

instance Core.AWSRequest DescribeNodegroup where
  type
    AWSResponse DescribeNodegroup =
      DescribeNodegroupResponse
  request :: (Service -> Service)
-> DescribeNodegroup -> Request DescribeNodegroup
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeNodegroup
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeNodegroup)))
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 Nodegroup -> Int -> DescribeNodegroupResponse
DescribeNodegroupResponse'
            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
"nodegroup")
            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 DescribeNodegroup where
  hashWithSalt :: Int -> DescribeNodegroup -> Int
hashWithSalt Int
_salt DescribeNodegroup' {Text
nodegroupName :: Text
clusterName :: Text
$sel:nodegroupName:DescribeNodegroup' :: DescribeNodegroup -> Text
$sel:clusterName:DescribeNodegroup' :: DescribeNodegroup -> Text
..} =
    Int
_salt
      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 DescribeNodegroup where
  rnf :: DescribeNodegroup -> ()
rnf DescribeNodegroup' {Text
nodegroupName :: Text
clusterName :: Text
$sel:nodegroupName:DescribeNodegroup' :: DescribeNodegroup -> Text
$sel:clusterName:DescribeNodegroup' :: DescribeNodegroup -> Text
..} =
    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 DescribeNodegroup where
  toHeaders :: DescribeNodegroup -> 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.ToPath DescribeNodegroup where
  toPath :: DescribeNodegroup -> ByteString
toPath DescribeNodegroup' {Text
nodegroupName :: Text
clusterName :: Text
$sel:nodegroupName:DescribeNodegroup' :: DescribeNodegroup -> Text
$sel:clusterName:DescribeNodegroup' :: DescribeNodegroup -> 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
      ]

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

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

-- |
-- Create a value of 'DescribeNodegroupResponse' 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:
--
-- 'nodegroup', 'describeNodegroupResponse_nodegroup' - The full description of your node group.
--
-- 'httpStatus', 'describeNodegroupResponse_httpStatus' - The response's http status code.
newDescribeNodegroupResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeNodegroupResponse
newDescribeNodegroupResponse :: Int -> DescribeNodegroupResponse
newDescribeNodegroupResponse Int
pHttpStatus_ =
  DescribeNodegroupResponse'
    { $sel:nodegroup:DescribeNodegroupResponse' :: Maybe Nodegroup
nodegroup =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeNodegroupResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The full description of your node group.
describeNodegroupResponse_nodegroup :: Lens.Lens' DescribeNodegroupResponse (Prelude.Maybe Nodegroup)
describeNodegroupResponse_nodegroup :: Lens' DescribeNodegroupResponse (Maybe Nodegroup)
describeNodegroupResponse_nodegroup = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeNodegroupResponse' {Maybe Nodegroup
nodegroup :: Maybe Nodegroup
$sel:nodegroup:DescribeNodegroupResponse' :: DescribeNodegroupResponse -> Maybe Nodegroup
nodegroup} -> Maybe Nodegroup
nodegroup) (\s :: DescribeNodegroupResponse
s@DescribeNodegroupResponse' {} Maybe Nodegroup
a -> DescribeNodegroupResponse
s {$sel:nodegroup:DescribeNodegroupResponse' :: Maybe Nodegroup
nodegroup = Maybe Nodegroup
a} :: DescribeNodegroupResponse)

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

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