{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Concurrent.STM (atomically, newTVar)
import Data.Function ((&))
import Kubernetes.Client (KubeConfigSource (..), defaultTLSClientParams,
disableServerCertValidation,
disableServerNameValidation,
disableValidateAuthMethods, mkKubeClientConfig,
loadPEMCerts, newManager, setCAStore,
setClientCert, setMasterURI, setTokenAuth)
import Kubernetes.OpenAPI (Accept (..), MimeJSON (..), dispatchMime,
newConfig)
import Network.TLS (credentialLoadX509)
import qualified Data.Map as Map
import qualified Kubernetes.OpenAPI.API.CoreV1 as CoreV1
example :: IO ()
example = do
-- We need to first create a Kubernetes.Core.KubernetesConfig and a Network.HTTP.Client.Manager.
-- Currently we need to construct these objects manually. Work is underway to construct these
-- objects automatically from a kubeconfig file. See https://github.com/kubernetes-client/haskell/issues/2.
kcfg <-
newConfig
& fmap (setMasterURI "https://mycluster.example.com") -- fill in master URI
& fmap (setTokenAuth "mytoken") -- if using token auth
& fmap disableValidateAuthMethods -- if using client cert auth
myCAStore <- loadPEMCerts "/path/to/ca.crt" -- if using custom CA certs
myCert <- -- if using client cert
credentialLoadX509 "/path/to/client.crt" "/path/to/client.key"
>>= either error return
tlsParams <-
defaultTLSClientParams
& fmap disableServerNameValidation -- if master address is specified as an IP address
& fmap disableServerCertValidation -- if you don't want to validate the server cert at all (insecure)
& fmap (setCAStore myCAStore) -- if using custom CA certs
& fmap (setClientCert myCert) -- if using client cert
manager <- newManager tlsParams
dispatchMime
manager
kcfg
(CoreV1.listPodForAllNamespaces (Accept MimeJSON))
>>= print
exampleWithKubeConfig :: IO ()
exampleWithKubeConfig = do
oidcCache <- atomically $ newTVar $ Map.fromList []
(mgr, kcfg) <- mkKubeClientConfig oidcCache $ KubeConfigFile "/path/to/kubeconfig"
dispatchMime
mgr
kcfg
(CoreV1.listPodForAllNamespaces (Accept MimeJSON))
>>= print
exampleWithInClusterConfig :: IO ()
exampleWithInClusterConfig = do
oidcCache <- atomically $ newTVar $ Map.fromList []
(mgr, kcfg) <- mkKubeClientConfig oidcCache KubeConfigCluster
dispatchMime
mgr
kcfg
(CoreV1.listPodForAllNamespaces (Accept MimeJSON))
>>= print
main :: IO ()
main = return ()