{-# 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 ()