@@ -1,4 +1,5 @@
1{-# LANGUAGE DataKinds #-}
1{-# LANGUAGE DataKinds #-}
2+{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE TypeFamilies #-}
4{-# LANGUAGE TypeFamilies #-}
@@ -7,6 +8,7 @@ module Network.Docker where
7import Control.Applicative ((<$>), (<*>))
8import Control.Applicative ((<$>), (<*>))
8import Control.Lens
9import Control.Lens
9import Control.Monad.Free
10import Control.Monad.Free
11+import Control.Monad.Reader (ask)
10import Data.Aeson (FromJSON, ToJSON, Value, decode,
12import Data.Aeson (FromJSON, ToJSON, Value, decode,
11 eitherDecode, toJSON)
13 eitherDecode, toJSON)
12import Data.Aeson.Lens (key, _String)
14import Data.Aeson.Lens (key, _String)
@@ -23,65 +25,81 @@ import Text.Printf (printf)
23import Network.Docker.Internal
25import Network.Docker.Internal
24import Network.Docker.Types
26import Network.Docker.Types
26−getDockerVersion :: DockerClientOpts -> IO (Maybe DockerVersion)
28+getDockerVersion :: DockerM IO (Maybe DockerVersion)
27−getDockerVersion clientOpts = decodeResponse <$>
29+getDockerVersion = do
28− runDocker (getDockerVersionM clientOpts SVersionEndpoint)
31+ decodeResponse <$> runDocker (getDockerVersionM clientOpts SVersionEndpoint)
30−listContainers :: DockerClientOpts -> IO (Maybe [DockerContainer])
33+listContainers :: DockerM IO (Maybe [DockerContainer])
31−listContainers clientOpts = decodeResponse <$>
34+listContainers = do
32− runDocker (listContainersM clientOpts SListContainersEndpoint)
36+ decodeResponse <$> runDocker (listContainersM clientOpts SListContainersEndpoint)
34−listImages :: DockerClientOpts -> IO (Maybe [DockerImage])
38+listImages :: DockerM IO (Maybe [DockerImage])
35−listImages clientOpts = decodeResponse <$>
39+listImages = do
36− runDocker (listImagesM clientOpts SListImagesEndpoint)
41+ decodeResponse <$> runDocker (listImagesM clientOpts SListImagesEndpoint)
38−createContainer :: DockerClientOpts -> CreateContainerOpts -> IO(Maybe T.Text)
43+createContainer :: CreateContainerOpts -> DockerM IO (Maybe T.Text)
39−createContainer clientOpts createOpts = getElemFromResponse "Id" <$>
44+createContainer createOpts = do
40− runDocker (createContainerM clientOpts (SCreateContainerEndpoint) createOpts)
46+ getElemFromResponse "Id" <$> runDocker (createContainerM clientOpts (SCreateContainerEndpoint) createOpts)
42−startContainer :: DockerClientOpts -> String -> StartContainerOpts -> IO(Status)
48+startContainer :: String -> StartContainerOpts -> DockerM IO (Status)
43−startContainer clientOpts cid startOpts = (^. responseStatus) <$>
49+startContainer cid startOpts = do
44− runDocker (startContainerM clientOpts (SStartContainerEndpoint cid) startOpts)
51+ (^. responseStatus) <$> runDocker (startContainerM clientOpts (SStartContainerEndpoint cid) startOpts)
46−stopContainer :: DockerClientOpts -> String -> IO (Status)
53+stopContainer :: String -> DockerM IO (Status)
47−stopContainer clientOpts cid = (^. responseStatus) <$>
54+stopContainer cid = do
48− runDocker (stopContainerM clientOpts (SStopContainerEndpoint cid))
56+ (^. responseStatus) <$> runDocker (stopContainerM clientOpts (SStopContainerEndpoint cid))
50−killContainer :: DockerClientOpts -> String -> IO (Status)
58+killContainer :: String -> DockerM IO (Status)
51−killContainer clientOpts cid = (^. responseStatus) <$>
59+killContainer cid = do
52− runDocker (killContainerM clientOpts (SKillContainerEndpoint cid))
61+ (^. responseStatus) <$> runDocker (killContainerM clientOpts (SKillContainerEndpoint cid))
54−restartContainer :: DockerClientOpts -> String -> IO (Status)
63+restartContainer :: String -> DockerM IO (Status)
55−restartContainer clientOpts cid = (^. responseStatus) <$>
64+restartContainer cid = do
56− runDocker (restartContainerM clientOpts (SRestartContainerEndpoint cid))
66+ (^. responseStatus) <$> runDocker (restartContainerM clientOpts (SRestartContainerEndpoint cid))
58−pauseContainer :: DockerClientOpts -> String -> IO (Status)
68+pauseContainer :: String -> DockerM IO (Status)
59−pauseContainer clientOpts cid = (^. responseStatus) <$>
69+pauseContainer cid = do
60− runDocker (pauseContainerM clientOpts (SPauseContainerEndpoint cid))
71+ (^. responseStatus) <$> runDocker (pauseContainerM clientOpts (SPauseContainerEndpoint cid))
62−unpauseContainer :: DockerClientOpts -> String -> IO (Status)
73+unpauseContainer :: String -> DockerM IO (Status)
63−unpauseContainer clientOpts cid = (^. responseStatus) <$>
74+unpauseContainer cid = do
64− runDocker (unpauseContainerM clientOpts (SUnpauseContainerEndpoint cid))
76+ (^. responseStatus) <$> runDocker (unpauseContainerM clientOpts (SUnpauseContainerEndpoint cid))
66−deleteContainer :: DockerClientOpts -> String -> IO (Status)
78+deleteContainer :: String -> DockerM IO (Status)
79+deleteContainer cid = do
67−deleteContainer c cid = deleteContainerWithOpts c defaultDeleteOpts cid
81+ deleteContainerWithOpts defaultDeleteOpts cid
69−deleteContainerWithOpts :: DockerClientOpts -> DeleteOpts -> String -> IO (Status)
83+deleteContainerWithOpts :: DeleteOpts -> String -> DockerM IO (Status)
70−deleteContainerWithOpts clientOpts deleteOpts cid = (^. responseStatus) <$>
84+deleteContainerWithOpts deleteOpts cid = do
71− runDocker (deleteContainerM clientOpts (SDeleteContainerEndpoint cid deleteOpts))
86+ (^. responseStatus) <$> runDocker (deleteContainerM clientOpts (SDeleteContainerEndpoint cid deleteOpts))
73−getContainerLogsWithOpts :: DockerClientOpts -> LogOpts -> String -> IO (L.ByteString)
88+getContainerLogsWithOpts :: LogOpts -> String -> DockerM IO (L.ByteString)
74−getContainerLogsWithOpts clientOpts l cid = (^. responseBody) <$>
89+getContainerLogsWithOpts l cid = do
75− runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid l))
91+ (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid l))
77−getContainerLogs :: DockerClientOpts -> String -> IO (L.ByteString)
93+getContainerLogs :: String -> DockerM IO (L.ByteString)
78−getContainerLogs clientOpts cid = (^. responseBody) <$>
94+getContainerLogs cid = do
79− runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid defaultLogOpts))
96+ (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid defaultLogOpts))
81−getContainerLogsStream :: DockerClientOpts -> String -> IO ()
98+getContainerLogsStream :: String -> DockerM IO ()
82−getContainerLogsStream clientOpts cid = do
99+getContainerLogsStream cid = do
83− req <- PH.parseUrl (fullUrl clientOpts url)
101+ req <- PH.parseUrl (fullUrl clientOpts url)
84− let req' = req {PH.method = "GET"}
102+ let req' = req {PH.method = "GET"}
85− PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
103+ liftIO $ PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
86− where url = SContainerLogsEndpoint cid defaultLogOpts{follow=True}
104+ where url = SContainerLogsEndpoint cid defaultLogOpts{follow=True}