{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeApplications #-}
module Test.Sandwich.Contexts.Kubernetes (
Kind.introduceKindClusterViaNix
, Kind.introduceKindClusterViaEnvironment
, Kind.introduceKindCluster'
, Kind.defaultKindClusterOptions
, Kind.KindClusterOptions(..)
, Minikube.introduceMinikubeClusterViaNix
, Minikube.introduceMinikubeClusterViaEnvironment
, Minikube.introduceMinikubeCluster'
, Minikube.defaultMinikubeClusterOptions
, Minikube.MinikubeClusterOptions(..)
, waitForPodsToExist
, waitForPodsToBeReady
, waitForServiceEndpointsToExist
, askKubectlArgs
, askKubectlEnvironment
, getKubectlEnvironment
, withForwardKubernetesService
, withForwardKubernetesService'
, module Test.Sandwich.Contexts.Kubernetes.KubectlLogs
, module Test.Sandwich.Contexts.Kubernetes.KubectlPortForward
, kubernetesCluster
, KubernetesClusterContext(..)
, KubernetesClusterType(..)
, HasKubernetesClusterContext
, KubernetesBasic
, KubernetesClusterBasic
, KubectlBasic
, NixContextBasic
, KubernetesBasicWithoutReader
, KubernetesClusterBasicWithoutReader
, KubectlBasicWithoutReader
) where
import Control.Monad.IO.Unlift
import Control.Monad.Logger
import Network.URI
import Relude
import Test.Sandwich
import Test.Sandwich.Contexts.Files
import Test.Sandwich.Contexts.Kubernetes.Kubectl
import Test.Sandwich.Contexts.Kubernetes.KubectlLogs
import Test.Sandwich.Contexts.Kubernetes.KubectlPortForward
import Test.Sandwich.Contexts.Kubernetes.Types
import Test.Sandwich.Contexts.Kubernetes.Waits
import qualified Test.Sandwich.Contexts.Kubernetes.KindCluster as Kind
import qualified Test.Sandwich.Contexts.Kubernetes.KindCluster.ServiceForwardPortForward as Kind
import qualified Test.Sandwich.Contexts.Kubernetes.MinikubeCluster as Minikube
import qualified Test.Sandwich.Contexts.Kubernetes.MinikubeCluster.Forwards as Minikube
withForwardKubernetesService :: (
KubectlBasic context m
)
=> Text
-> Text
-> (URI -> m a)
-> m a
withForwardKubernetesService :: forall context (m :: * -> *) a.
KubectlBasic context m =>
Text -> Text -> (URI -> m a) -> m a
withForwardKubernetesService Text
namespace Text
serviceName URI -> m a
action = do
kcc <- Label "kubernetesCluster" KubernetesClusterContext
-> m KubernetesClusterContext
forall context (l :: Symbol) a (m :: * -> *).
(HasLabel context l a, MonadReader context m) =>
Label l a -> m a
getContext Label "kubernetesCluster" KubernetesClusterContext
kubernetesCluster
kubectlBinary <- askFile @"kubectl"
withForwardKubernetesService' kcc kubectlBinary namespace serviceName action
withForwardKubernetesService' :: (
MonadLoggerIO m, MonadUnliftIO m
, HasBaseContextMonad context m
)
=> KubernetesClusterContext
-> FilePath
-> Text
-> Text
-> (URI -> m a)
-> m a
withForwardKubernetesService' :: forall (m :: * -> *) context a.
(MonadLoggerIO m, MonadUnliftIO m,
HasBaseContextMonad context m) =>
KubernetesClusterContext
-> FilePath -> Text -> Text -> (URI -> m a) -> m a
withForwardKubernetesService' kcc :: KubernetesClusterContext
kcc@(KubernetesClusterContext {kubernetesClusterType :: KubernetesClusterContext -> KubernetesClusterType
kubernetesClusterType=(KubernetesClusterMinikube {FilePath
[Text]
Text
kubernetesClusterTypeMinikubeBinary :: FilePath
kubernetesClusterTypeMinikubeProfileName :: Text
kubernetesClusterTypeMinikubeFlags :: [Text]
kubernetesClusterTypeMinikubeFlags :: KubernetesClusterType -> [Text]
kubernetesClusterTypeMinikubeProfileName :: KubernetesClusterType -> Text
kubernetesClusterTypeMinikubeBinary :: KubernetesClusterType -> FilePath
..})}) FilePath
_kubectlBinary =
KubernetesClusterContext
-> Text -> Text -> Text -> (URI -> m a) -> m a
forall (m :: * -> *) a.
(HasCallStack, MonadLoggerIO m, MonadUnliftIO m) =>
KubernetesClusterContext
-> Text -> Text -> Text -> (URI -> m a) -> m a
Minikube.withForwardKubernetesService' KubernetesClusterContext
kcc Text
kubernetesClusterTypeMinikubeProfileName
withForwardKubernetesService' kcc :: KubernetesClusterContext
kcc@(KubernetesClusterContext {kubernetesClusterType :: KubernetesClusterContext -> KubernetesClusterType
kubernetesClusterType=(KubernetesClusterKind {})}) FilePath
kubectlBinary =
KubernetesClusterContext
-> FilePath -> Text -> Text -> (URI -> m a) -> m a
forall (m :: * -> *) context a.
(MonadUnliftIO m, MonadLoggerIO m,
HasBaseContextMonad context m) =>
KubernetesClusterContext
-> FilePath -> Text -> Text -> (URI -> m a) -> m a
Kind.withForwardKubernetesService' KubernetesClusterContext
kcc FilePath
kubectlBinary