{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Docker.Client.Api (
listContainers
, createContainer
, startContainer
, stopContainer
, waitContainer
, killContainer
, restartContainer
, pauseContainer
, unpauseContainer
, deleteContainer
, inspectContainer
, getContainerLogs
, getContainerLogsStream
, listImages
, deleteImage
, buildImageFromDockerfile
, pullImage
, createNetwork
, removeNetwork
, getDockerVersion
) where
import Control.Monad.Catch (MonadMask (..))
import Control.Monad.IO.Class
import Control.Monad.Reader (ask, lift)
import Data.Aeson (FromJSON, eitherDecode')
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.Conduit (Sink)
import qualified Data.Conduit.Binary as Conduit
import qualified Data.Text as T
import qualified Data.Text as Text
import Network.HTTP.Client (responseStatus)
import Network.HTTP.Types (StdMethod (..))
import System.Exit (ExitCode (..))
import Docker.Client.Http
import Docker.Client.Types
import Docker.Client.Utils
requestUnit :: (MonadIO m, MonadMask m) => HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit :: HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
verb Endpoint
endpoint = (ByteString -> ())
-> Either DockerError ByteString -> Either DockerError ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (() -> ByteString -> ()
forall a b. a -> b -> a
const ()) (Either DockerError ByteString -> Either DockerError ())
-> DockerT m (Either DockerError ByteString)
-> DockerT m (Either DockerError ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
verb Endpoint
endpoint
requestHelper :: (MonadIO m, MonadMask m) => HttpVerb -> Endpoint -> DockerT m (Either DockerError BSL.ByteString)
requestHelper :: HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
verb Endpoint
endpoint = HttpVerb
-> Endpoint
-> Sink ByteString m ByteString
-> DockerT m (Either DockerError ByteString)
forall (m :: * -> *) a.
(MonadIO m, MonadMask m) =>
HttpVerb
-> Endpoint
-> Sink ByteString m a
-> DockerT m (Either DockerError a)
requestHelper' HttpVerb
verb Endpoint
endpoint Sink ByteString m ByteString
forall (m :: * -> *) o.
Monad m =>
ConduitT ByteString o m ByteString
Conduit.sinkLbs
requestHelper' :: (MonadIO m, MonadMask m) => HttpVerb -> Endpoint -> Sink BS.ByteString m a -> DockerT m (Either DockerError a)
requestHelper' :: HttpVerb
-> Endpoint
-> Sink ByteString m a
-> DockerT m (Either DockerError a)
requestHelper' HttpVerb
verb Endpoint
endpoint Sink ByteString m a
sink = do
(DockerClientOpts
opts, HttpHandler forall a.
Request
-> (Response () -> Sink ByteString m (Either DockerError a))
-> m (Either DockerError a)
httpHandler) <- DockerT m (DockerClientOpts, HttpHandler m)
forall r (m :: * -> *). MonadReader r m => m r
ask
case HttpVerb -> Endpoint -> DockerClientOpts -> Maybe Request
mkHttpRequest HttpVerb
verb Endpoint
endpoint DockerClientOpts
opts of
Maybe Request
Nothing ->
Either DockerError a -> DockerT m (Either DockerError a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either DockerError a -> DockerT m (Either DockerError a))
-> Either DockerError a -> DockerT m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ DockerError -> Either DockerError a
forall a b. a -> Either a b
Left (DockerError -> Either DockerError a)
-> DockerError -> Either DockerError a
forall a b. (a -> b) -> a -> b
$ Endpoint -> DockerError
DockerInvalidRequest Endpoint
endpoint
Just Request
request -> do
m (Either DockerError a) -> DockerT m (Either DockerError a)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m (Either DockerError a) -> DockerT m (Either DockerError a))
-> m (Either DockerError a) -> DockerT m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ Request
-> (Response () -> Sink ByteString m (Either DockerError a))
-> m (Either DockerError a)
forall a.
Request
-> (Response () -> Sink ByteString m (Either DockerError a))
-> m (Either DockerError a)
httpHandler Request
request ((Response () -> Sink ByteString m (Either DockerError a))
-> m (Either DockerError a))
-> (Response () -> Sink ByteString m (Either DockerError a))
-> m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ \Response ()
response ->
let status :: Status
status = Response () -> Status
forall body. Response body -> Status
responseStatus Response ()
response in
case Endpoint -> Status -> Maybe DockerError
statusCodeToError Endpoint
endpoint Status
status of
Just DockerError
err ->
Either DockerError a -> Sink ByteString m (Either DockerError a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either DockerError a -> Sink ByteString m (Either DockerError a))
-> Either DockerError a -> Sink ByteString m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ DockerError -> Either DockerError a
forall a b. a -> Either a b
Left DockerError
err
Maybe DockerError
Nothing ->
(a -> Either DockerError a)
-> Sink ByteString m a -> Sink ByteString m (Either DockerError a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> Either DockerError a
forall a b. b -> Either a b
Right Sink ByteString m a
sink
parseResponse :: (FromJSON a, Monad m) => Either DockerError BSL.ByteString -> DockerT m (Either DockerError a)
parseResponse :: Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse (Left DockerError
err) =
Either DockerError a -> DockerT m (Either DockerError a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either DockerError a -> DockerT m (Either DockerError a))
-> Either DockerError a -> DockerT m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ DockerError -> Either DockerError a
forall a b. a -> Either a b
Left DockerError
err
parseResponse (Right ByteString
response) =
case ByteString -> Either String a
forall a. FromJSON a => ByteString -> Either String a
eitherDecode' ByteString
response of
Left String
err ->
Either DockerError a -> DockerT m (Either DockerError a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either DockerError a -> DockerT m (Either DockerError a))
-> Either DockerError a -> DockerT m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ DockerError -> Either DockerError a
forall a b. a -> Either a b
Left (DockerError -> Either DockerError a)
-> DockerError -> Either DockerError a
forall a b. (a -> b) -> a -> b
$ Text -> DockerError
DockerClientDecodeError (Text -> DockerError) -> Text -> DockerError
forall a b. (a -> b) -> a -> b
$ String -> Text
Text.pack String
err
Right a
r ->
Either DockerError a -> DockerT m (Either DockerError a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either DockerError a -> DockerT m (Either DockerError a))
-> Either DockerError a -> DockerT m (Either DockerError a)
forall a b. (a -> b) -> a -> b
$ a -> Either DockerError a
forall a b. b -> Either a b
Right a
r
getDockerVersion :: forall m. (MonadIO m, MonadMask m) => DockerT m (Either DockerError DockerVersion)
getDockerVersion :: DockerT m (Either DockerError DockerVersion)
getDockerVersion = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
GET Endpoint
VersionEndpoint DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError DockerVersion))
-> DockerT m (Either DockerError DockerVersion)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError DockerVersion)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse
listContainers :: forall m. (MonadIO m, MonadMask m) => ListOpts -> DockerT m (Either DockerError [Container])
listContainers :: ListOpts -> DockerT m (Either DockerError [Container])
listContainers ListOpts
opts = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
GET (ListOpts -> Endpoint
ListContainersEndpoint ListOpts
opts) DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError [Container]))
-> DockerT m (Either DockerError [Container])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError [Container])
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse
listImages :: forall m. (MonadIO m, MonadMask m) => ListOpts -> DockerT m (Either DockerError [Image])
listImages :: ListOpts -> DockerT m (Either DockerError [Image])
listImages ListOpts
opts = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
GET (ListOpts -> Endpoint
ListImagesEndpoint ListOpts
opts) DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError [Image]))
-> DockerT m (Either DockerError [Image])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError [Image])
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse
deleteImage :: forall m. (MonadIO m, MonadMask m) => ImageDeleteOpts -> ImageID -> DockerT m (Either DockerError ())
deleteImage :: ImageDeleteOpts -> ImageID -> DockerT m (Either DockerError ())
deleteImage ImageDeleteOpts
dopts ImageID
iid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
DELETE (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ ImageDeleteOpts -> ImageID -> Endpoint
DeleteImageEndpoint ImageDeleteOpts
dopts ImageID
iid
createContainer :: forall m. (MonadIO m, MonadMask m) => CreateOpts -> Maybe ContainerName -> DockerT m (Either DockerError ContainerID)
createContainer :: CreateOpts
-> Maybe Text -> DockerT m (Either DockerError ContainerID)
createContainer CreateOpts
opts Maybe Text
cn = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
POST (CreateOpts -> Maybe Text -> Endpoint
CreateContainerEndpoint CreateOpts
opts Maybe Text
cn) DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError ContainerID))
-> DockerT m (Either DockerError ContainerID)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError ContainerID)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse
startContainer :: forall m. (MonadIO m, MonadMask m) => StartOpts -> ContainerID -> DockerT m (Either DockerError ())
startContainer :: StartOpts -> ContainerID -> DockerT m (Either DockerError ())
startContainer StartOpts
sopts ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
POST (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ StartOpts -> ContainerID -> Endpoint
StartContainerEndpoint StartOpts
sopts ContainerID
cid
stopContainer :: forall m. (MonadIO m, MonadMask m) => Timeout -> ContainerID -> DockerT m (Either DockerError ())
stopContainer :: Timeout -> ContainerID -> DockerT m (Either DockerError ())
stopContainer Timeout
t ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
POST (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ Timeout -> ContainerID -> Endpoint
StopContainerEndpoint Timeout
t ContainerID
cid
waitContainer :: forall m. (MonadIO m, MonadMask m) => ContainerID -> DockerT m (Either DockerError ExitCode)
waitContainer :: ContainerID -> DockerT m (Either DockerError ExitCode)
waitContainer ContainerID
cid = (Either DockerError StatusCode -> Either DockerError ExitCode)
-> DockerT m (Either DockerError StatusCode)
-> DockerT m (Either DockerError ExitCode)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((StatusCode -> ExitCode)
-> Either DockerError StatusCode -> Either DockerError ExitCode
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap StatusCode -> ExitCode
statusCodeToExitCode) (HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
POST (ContainerID -> Endpoint
WaitContainerEndpoint ContainerID
cid) DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError StatusCode))
-> DockerT m (Either DockerError StatusCode)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError StatusCode)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse)
where
statusCodeToExitCode :: StatusCode -> ExitCode
statusCodeToExitCode (StatusCode Int
0) = ExitCode
ExitSuccess
statusCodeToExitCode (StatusCode Int
x) = Int -> ExitCode
ExitFailure Int
x
killContainer :: forall m. (MonadIO m, MonadMask m) => Signal -> ContainerID -> DockerT m (Either DockerError ())
killContainer :: Signal -> ContainerID -> DockerT m (Either DockerError ())
killContainer Signal
s ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
POST (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ Signal -> ContainerID -> Endpoint
KillContainerEndpoint Signal
s ContainerID
cid
restartContainer :: forall m. (MonadIO m, MonadMask m) => Timeout -> ContainerID -> DockerT m (Either DockerError ())
restartContainer :: Timeout -> ContainerID -> DockerT m (Either DockerError ())
restartContainer Timeout
t ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
POST (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ Timeout -> ContainerID -> Endpoint
RestartContainerEndpoint Timeout
t ContainerID
cid
pauseContainer :: forall m. (MonadIO m, MonadMask m) => ContainerID -> DockerT m (Either DockerError ())
pauseContainer :: ContainerID -> DockerT m (Either DockerError ())
pauseContainer ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
POST (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ ContainerID -> Endpoint
PauseContainerEndpoint ContainerID
cid
unpauseContainer :: forall m. (MonadIO m, MonadMask m) => ContainerID -> DockerT m (Either DockerError ())
unpauseContainer :: ContainerID -> DockerT m (Either DockerError ())
unpauseContainer ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
GET (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ ContainerID -> Endpoint
UnpauseContainerEndpoint ContainerID
cid
deleteContainer :: forall m. (MonadIO m, MonadMask m) => ContainerDeleteOpts -> ContainerID -> DockerT m (Either DockerError ())
deleteContainer :: ContainerDeleteOpts
-> ContainerID -> DockerT m (Either DockerError ())
deleteContainer ContainerDeleteOpts
dopts ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
DELETE (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ ContainerDeleteOpts -> ContainerID -> Endpoint
DeleteContainerEndpoint ContainerDeleteOpts
dopts ContainerID
cid
inspectContainer :: forall m . (MonadIO m, MonadMask m) => ContainerID -> DockerT m (Either DockerError ContainerDetails)
inspectContainer :: ContainerID -> DockerT m (Either DockerError ContainerDetails)
inspectContainer ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
GET (ContainerID -> Endpoint
InspectContainerEndpoint ContainerID
cid) DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError ContainerDetails))
-> DockerT m (Either DockerError ContainerDetails)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError ContainerDetails)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse
getContainerLogs :: forall m. (MonadIO m, MonadMask m) => LogOpts -> ContainerID -> DockerT m (Either DockerError BSL.ByteString)
getContainerLogs :: LogOpts -> ContainerID -> DockerT m (Either DockerError ByteString)
getContainerLogs LogOpts
logopts ContainerID
cid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
GET (LogOpts -> Bool -> ContainerID -> Endpoint
ContainerLogsEndpoint LogOpts
logopts Bool
False ContainerID
cid)
getContainerLogsStream :: forall m b . (MonadIO m, MonadMask m) => LogOpts -> ContainerID -> Sink BS.ByteString m b -> DockerT m (Either DockerError b)
getContainerLogsStream :: LogOpts
-> ContainerID
-> Sink ByteString m b
-> DockerT m (Either DockerError b)
getContainerLogsStream LogOpts
logopts ContainerID
cid = HttpVerb
-> Endpoint
-> Sink ByteString m b
-> DockerT m (Either DockerError b)
forall (m :: * -> *) a.
(MonadIO m, MonadMask m) =>
HttpVerb
-> Endpoint
-> Sink ByteString m a
-> DockerT m (Either DockerError a)
requestHelper' HttpVerb
GET (LogOpts -> Bool -> ContainerID -> Endpoint
ContainerLogsEndpoint LogOpts
logopts Bool
True ContainerID
cid)
buildImageFromDockerfile :: forall m. (MonadIO m, MonadMask m) => BuildOpts -> FilePath -> DockerT m (Either DockerError ())
buildImageFromDockerfile :: BuildOpts -> String -> DockerT m (Either DockerError ())
buildImageFromDockerfile BuildOpts
opts String
base = do
Either DockerError String
ctx <- BuildContextRootDir -> DockerT m (Either DockerError String)
forall (m :: * -> *).
MonadIO m =>
BuildContextRootDir -> m (Either DockerError String)
makeBuildContext (BuildContextRootDir -> DockerT m (Either DockerError String))
-> BuildContextRootDir -> DockerT m (Either DockerError String)
forall a b. (a -> b) -> a -> b
$ String -> BuildContextRootDir
BuildContextRootDir String
base
case Either DockerError String
ctx of
Left DockerError
e -> Either DockerError () -> DockerT m (Either DockerError ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Either DockerError () -> DockerT m (Either DockerError ()))
-> Either DockerError () -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ DockerError -> Either DockerError ()
forall a b. a -> Either a b
Left DockerError
e
Right String
c -> HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
POST (BuildOpts -> String -> Endpoint
BuildImageEndpoint BuildOpts
opts String
c)
pullImage :: forall m b . (MonadIO m, MonadMask m) => T.Text -> Tag -> Sink BS.ByteString m b -> DockerT m (Either DockerError b)
pullImage :: Text
-> Text -> Sink ByteString m b -> DockerT m (Either DockerError b)
pullImage Text
name Text
tag = HttpVerb
-> Endpoint
-> Sink ByteString m b
-> DockerT m (Either DockerError b)
forall (m :: * -> *) a.
(MonadIO m, MonadMask m) =>
HttpVerb
-> Endpoint
-> Sink ByteString m a
-> DockerT m (Either DockerError a)
requestHelper' HttpVerb
POST (Text -> Text -> Maybe Text -> Endpoint
CreateImageEndpoint Text
name Text
tag Maybe Text
forall a. Maybe a
Nothing)
createNetwork :: forall m. (MonadIO m, MonadMask m) => CreateNetworkOpts -> DockerT m (Either DockerError NetworkID)
createNetwork :: CreateNetworkOpts -> DockerT m (Either DockerError NetworkID)
createNetwork CreateNetworkOpts
opts = HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ByteString)
requestHelper HttpVerb
POST (CreateNetworkOpts -> Endpoint
CreateNetworkEndpoint CreateNetworkOpts
opts) DockerT m (Either DockerError ByteString)
-> (Either DockerError ByteString
-> DockerT m (Either DockerError NetworkID))
-> DockerT m (Either DockerError NetworkID)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Either DockerError ByteString
-> DockerT m (Either DockerError NetworkID)
forall a (m :: * -> *).
(FromJSON a, Monad m) =>
Either DockerError ByteString -> DockerT m (Either DockerError a)
parseResponse
removeNetwork :: forall m. (MonadIO m, MonadMask m) => NetworkID -> DockerT m (Either DockerError ())
removeNetwork :: NetworkID -> DockerT m (Either DockerError ())
removeNetwork NetworkID
nid = HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
forall (m :: * -> *).
(MonadIO m, MonadMask m) =>
HttpVerb -> Endpoint -> DockerT m (Either DockerError ())
requestUnit HttpVerb
DELETE (Endpoint -> DockerT m (Either DockerError ()))
-> Endpoint -> DockerT m (Either DockerError ())
forall a b. (a -> b) -> a -> b
$ NetworkID -> Endpoint
RemoveNetworkEndpoint NetworkID
nid