{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.KubernetesNetworkConfigResponse
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EKS.Types.KubernetesNetworkConfigResponse 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.IpFamily
import qualified Amazonka.Prelude as Prelude

-- | The Kubernetes network configuration for the cluster. The response
-- contains a value for __serviceIpv6Cidr__ or __serviceIpv4Cidr__, but not
-- both.
--
-- /See:/ 'newKubernetesNetworkConfigResponse' smart constructor.
data KubernetesNetworkConfigResponse = KubernetesNetworkConfigResponse'
  { -- | The IP family used to assign Kubernetes pod and service IP addresses.
    -- The IP family is always @ipv4@, unless you have a @1.21@ or later
    -- cluster running version 1.10.1 or later of the Amazon VPC CNI add-on and
    -- specified @ipv6@ when you created the cluster.
    KubernetesNetworkConfigResponse -> Maybe IpFamily
ipFamily :: Prelude.Maybe IpFamily,
    -- | The CIDR block that Kubernetes pod and service IP addresses are assigned
    -- from. Kubernetes assigns addresses from an IPv4 CIDR block assigned to a
    -- subnet that the node is in. If you didn\'t specify a CIDR block when you
    -- created the cluster, then Kubernetes assigns addresses from either the
    -- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. If this was specified,
    -- then it was specified when the cluster was created and it can\'t be
    -- changed.
    KubernetesNetworkConfigResponse -> Maybe Text
serviceIpv4Cidr :: Prelude.Maybe Prelude.Text,
    -- | The CIDR block that Kubernetes pod and service IP addresses are assigned
    -- from if you created a 1.21 or later cluster with version 1.10.1 or later
    -- of the Amazon VPC CNI add-on and specified @ipv6@ for __ipFamily__ when
    -- you created the cluster. Kubernetes assigns service addresses from the
    -- unique local address range (@fc00::\/7@) because you can\'t specify a
    -- custom IPv6 CIDR block when you create the cluster.
    KubernetesNetworkConfigResponse -> Maybe Text
serviceIpv6Cidr :: Prelude.Maybe Prelude.Text
  }
  deriving (KubernetesNetworkConfigResponse
-> KubernetesNetworkConfigResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KubernetesNetworkConfigResponse
-> KubernetesNetworkConfigResponse -> Bool
$c/= :: KubernetesNetworkConfigResponse
-> KubernetesNetworkConfigResponse -> Bool
== :: KubernetesNetworkConfigResponse
-> KubernetesNetworkConfigResponse -> Bool
$c== :: KubernetesNetworkConfigResponse
-> KubernetesNetworkConfigResponse -> Bool
Prelude.Eq, ReadPrec [KubernetesNetworkConfigResponse]
ReadPrec KubernetesNetworkConfigResponse
Int -> ReadS KubernetesNetworkConfigResponse
ReadS [KubernetesNetworkConfigResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [KubernetesNetworkConfigResponse]
$creadListPrec :: ReadPrec [KubernetesNetworkConfigResponse]
readPrec :: ReadPrec KubernetesNetworkConfigResponse
$creadPrec :: ReadPrec KubernetesNetworkConfigResponse
readList :: ReadS [KubernetesNetworkConfigResponse]
$creadList :: ReadS [KubernetesNetworkConfigResponse]
readsPrec :: Int -> ReadS KubernetesNetworkConfigResponse
$creadsPrec :: Int -> ReadS KubernetesNetworkConfigResponse
Prelude.Read, Int -> KubernetesNetworkConfigResponse -> ShowS
[KubernetesNetworkConfigResponse] -> ShowS
KubernetesNetworkConfigResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KubernetesNetworkConfigResponse] -> ShowS
$cshowList :: [KubernetesNetworkConfigResponse] -> ShowS
show :: KubernetesNetworkConfigResponse -> String
$cshow :: KubernetesNetworkConfigResponse -> String
showsPrec :: Int -> KubernetesNetworkConfigResponse -> ShowS
$cshowsPrec :: Int -> KubernetesNetworkConfigResponse -> ShowS
Prelude.Show, forall x.
Rep KubernetesNetworkConfigResponse x
-> KubernetesNetworkConfigResponse
forall x.
KubernetesNetworkConfigResponse
-> Rep KubernetesNetworkConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep KubernetesNetworkConfigResponse x
-> KubernetesNetworkConfigResponse
$cfrom :: forall x.
KubernetesNetworkConfigResponse
-> Rep KubernetesNetworkConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'KubernetesNetworkConfigResponse' 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:
--
-- 'ipFamily', 'kubernetesNetworkConfigResponse_ipFamily' - The IP family used to assign Kubernetes pod and service IP addresses.
-- The IP family is always @ipv4@, unless you have a @1.21@ or later
-- cluster running version 1.10.1 or later of the Amazon VPC CNI add-on and
-- specified @ipv6@ when you created the cluster.
--
-- 'serviceIpv4Cidr', 'kubernetesNetworkConfigResponse_serviceIpv4Cidr' - The CIDR block that Kubernetes pod and service IP addresses are assigned
-- from. Kubernetes assigns addresses from an IPv4 CIDR block assigned to a
-- subnet that the node is in. If you didn\'t specify a CIDR block when you
-- created the cluster, then Kubernetes assigns addresses from either the
-- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. If this was specified,
-- then it was specified when the cluster was created and it can\'t be
-- changed.
--
-- 'serviceIpv6Cidr', 'kubernetesNetworkConfigResponse_serviceIpv6Cidr' - The CIDR block that Kubernetes pod and service IP addresses are assigned
-- from if you created a 1.21 or later cluster with version 1.10.1 or later
-- of the Amazon VPC CNI add-on and specified @ipv6@ for __ipFamily__ when
-- you created the cluster. Kubernetes assigns service addresses from the
-- unique local address range (@fc00::\/7@) because you can\'t specify a
-- custom IPv6 CIDR block when you create the cluster.
newKubernetesNetworkConfigResponse ::
  KubernetesNetworkConfigResponse
newKubernetesNetworkConfigResponse :: KubernetesNetworkConfigResponse
newKubernetesNetworkConfigResponse =
  KubernetesNetworkConfigResponse'
    { $sel:ipFamily:KubernetesNetworkConfigResponse' :: Maybe IpFamily
ipFamily =
        forall a. Maybe a
Prelude.Nothing,
      $sel:serviceIpv4Cidr:KubernetesNetworkConfigResponse' :: Maybe Text
serviceIpv4Cidr = forall a. Maybe a
Prelude.Nothing,
      $sel:serviceIpv6Cidr:KubernetesNetworkConfigResponse' :: Maybe Text
serviceIpv6Cidr = forall a. Maybe a
Prelude.Nothing
    }

-- | The IP family used to assign Kubernetes pod and service IP addresses.
-- The IP family is always @ipv4@, unless you have a @1.21@ or later
-- cluster running version 1.10.1 or later of the Amazon VPC CNI add-on and
-- specified @ipv6@ when you created the cluster.
kubernetesNetworkConfigResponse_ipFamily :: Lens.Lens' KubernetesNetworkConfigResponse (Prelude.Maybe IpFamily)
kubernetesNetworkConfigResponse_ipFamily :: Lens' KubernetesNetworkConfigResponse (Maybe IpFamily)
kubernetesNetworkConfigResponse_ipFamily = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KubernetesNetworkConfigResponse' {Maybe IpFamily
ipFamily :: Maybe IpFamily
$sel:ipFamily:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe IpFamily
ipFamily} -> Maybe IpFamily
ipFamily) (\s :: KubernetesNetworkConfigResponse
s@KubernetesNetworkConfigResponse' {} Maybe IpFamily
a -> KubernetesNetworkConfigResponse
s {$sel:ipFamily:KubernetesNetworkConfigResponse' :: Maybe IpFamily
ipFamily = Maybe IpFamily
a} :: KubernetesNetworkConfigResponse)

-- | The CIDR block that Kubernetes pod and service IP addresses are assigned
-- from. Kubernetes assigns addresses from an IPv4 CIDR block assigned to a
-- subnet that the node is in. If you didn\'t specify a CIDR block when you
-- created the cluster, then Kubernetes assigns addresses from either the
-- @10.100.0.0\/16@ or @172.20.0.0\/16@ CIDR blocks. If this was specified,
-- then it was specified when the cluster was created and it can\'t be
-- changed.
kubernetesNetworkConfigResponse_serviceIpv4Cidr :: Lens.Lens' KubernetesNetworkConfigResponse (Prelude.Maybe Prelude.Text)
kubernetesNetworkConfigResponse_serviceIpv4Cidr :: Lens' KubernetesNetworkConfigResponse (Maybe Text)
kubernetesNetworkConfigResponse_serviceIpv4Cidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KubernetesNetworkConfigResponse' {Maybe Text
serviceIpv4Cidr :: Maybe Text
$sel:serviceIpv4Cidr:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe Text
serviceIpv4Cidr} -> Maybe Text
serviceIpv4Cidr) (\s :: KubernetesNetworkConfigResponse
s@KubernetesNetworkConfigResponse' {} Maybe Text
a -> KubernetesNetworkConfigResponse
s {$sel:serviceIpv4Cidr:KubernetesNetworkConfigResponse' :: Maybe Text
serviceIpv4Cidr = Maybe Text
a} :: KubernetesNetworkConfigResponse)

-- | The CIDR block that Kubernetes pod and service IP addresses are assigned
-- from if you created a 1.21 or later cluster with version 1.10.1 or later
-- of the Amazon VPC CNI add-on and specified @ipv6@ for __ipFamily__ when
-- you created the cluster. Kubernetes assigns service addresses from the
-- unique local address range (@fc00::\/7@) because you can\'t specify a
-- custom IPv6 CIDR block when you create the cluster.
kubernetesNetworkConfigResponse_serviceIpv6Cidr :: Lens.Lens' KubernetesNetworkConfigResponse (Prelude.Maybe Prelude.Text)
kubernetesNetworkConfigResponse_serviceIpv6Cidr :: Lens' KubernetesNetworkConfigResponse (Maybe Text)
kubernetesNetworkConfigResponse_serviceIpv6Cidr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KubernetesNetworkConfigResponse' {Maybe Text
serviceIpv6Cidr :: Maybe Text
$sel:serviceIpv6Cidr:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe Text
serviceIpv6Cidr} -> Maybe Text
serviceIpv6Cidr) (\s :: KubernetesNetworkConfigResponse
s@KubernetesNetworkConfigResponse' {} Maybe Text
a -> KubernetesNetworkConfigResponse
s {$sel:serviceIpv6Cidr:KubernetesNetworkConfigResponse' :: Maybe Text
serviceIpv6Cidr = Maybe Text
a} :: KubernetesNetworkConfigResponse)

instance
  Data.FromJSON
    KubernetesNetworkConfigResponse
  where
  parseJSON :: Value -> Parser KubernetesNetworkConfigResponse
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"KubernetesNetworkConfigResponse"
      ( \Object
x ->
          Maybe IpFamily
-> Maybe Text -> Maybe Text -> KubernetesNetworkConfigResponse
KubernetesNetworkConfigResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ipFamily")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"serviceIpv4Cidr")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"serviceIpv6Cidr")
      )

instance
  Prelude.Hashable
    KubernetesNetworkConfigResponse
  where
  hashWithSalt :: Int -> KubernetesNetworkConfigResponse -> Int
hashWithSalt
    Int
_salt
    KubernetesNetworkConfigResponse' {Maybe Text
Maybe IpFamily
serviceIpv6Cidr :: Maybe Text
serviceIpv4Cidr :: Maybe Text
ipFamily :: Maybe IpFamily
$sel:serviceIpv6Cidr:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe Text
$sel:serviceIpv4Cidr:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe Text
$sel:ipFamily:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe IpFamily
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe IpFamily
ipFamily
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serviceIpv4Cidr
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serviceIpv6Cidr

instance
  Prelude.NFData
    KubernetesNetworkConfigResponse
  where
  rnf :: KubernetesNetworkConfigResponse -> ()
rnf KubernetesNetworkConfigResponse' {Maybe Text
Maybe IpFamily
serviceIpv6Cidr :: Maybe Text
serviceIpv4Cidr :: Maybe Text
ipFamily :: Maybe IpFamily
$sel:serviceIpv6Cidr:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe Text
$sel:serviceIpv4Cidr:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe Text
$sel:ipFamily:KubernetesNetworkConfigResponse' :: KubernetesNetworkConfigResponse -> Maybe IpFamily
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe IpFamily
ipFamily
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serviceIpv4Cidr
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serviceIpv6Cidr