@@ -5,25 +5,13 @@
5module Network.Docker where
5module Network.Docker where
7import Control.Applicative ((<$>), (<*>))
7import Control.Applicative ((<$>), (<*>))
9import Control.Monad.Free
8import Control.Monad.Free
10import Data.Aeson (FromJSON, ToJSON, Value, decode,
9import Data.Aeson (FromJSON, ToJSON, Value, decode,
11 eitherDecode, toJSON)
10 eitherDecode, toJSON)
12import Data.Aeson.Lens (key, _String)
11import Data.Aeson.Lens (key, _String)
14import qualified Data.ByteString.Lazy as L
12import qualified Data.ByteString.Lazy as L
15import Data.Char
13import Data.Char
16import qualified Data.Text as T
14import qualified Data.Text as T
17−import qualified Data.Text as T
18−import Network.Docker.Options
21−-- import qualified Pipes.ByteString as PB
22−-- import qualified Pipes.HTTP as PH
25−import Network.Docker.Internal
26−import Network.Docker.Types
27import Network.HTTP.Client.OpenSSL
15import Network.HTTP.Client.OpenSSL
28import Network.Wreq
16import Network.Wreq
29import OpenSSL (withOpenSSL)
17import OpenSSL (withOpenSSL)
@@ -34,6 +22,10 @@ import qualified Pipes.ByteString as PB
34import qualified Pipes.HTTP as PH
22import qualified Pipes.HTTP as PH
35import Text.Printf (printf)
23import Text.Printf (printf)
25+import Network.Docker.Internal
26+import Network.Docker.Options
27+import Network.Docker.Types
37emptyPost = "" :: String
29emptyPost = "" :: String
39defaultClientOpts :: DockerClientOpts
31defaultClientOpts :: DockerClientOpts
@@ -98,38 +90,47 @@ _dockerEmptyPostQuery clientOpts@DockerClientOpts{ssl = NoSSL} endpoint = Free (
98_dockerEmptyPostQuery clientOpts@DockerClientOpts{ssl = SSL sslOpts} endpoint = Free (PostSSL sslOpts (fullUrl clientOpts endpoint) (toJSON emptyPost))
90_dockerEmptyPostQuery clientOpts@DockerClientOpts{ssl = SSL sslOpts} endpoint = Free (PostSSL sslOpts (fullUrl clientOpts endpoint) (toJSON emptyPost))
93+_dockerEmptyDeleteQuery endpoint clientOpts = delete (fullUrl clientOpts endpoint)
101_dockerEmptyDeleteQuery endpoint clientOpts = delete (fullUrl clientOpts endpoint)
95_dockerEmptyDeleteQuery endpoint clientOpts = delete (fullUrl clientOpts endpoint)
103getDockerVersion :: DockerClientOpts -> IO (Maybe DockerVersion)
97getDockerVersion :: DockerClientOpts -> IO (Maybe DockerVersion)
104−getDockerVersion clientOpts = decodeResponse <$> run (getDockerVersionM clientOpts SVersionEndpoint)
98+getDockerVersion clientOpts = decodeResponse <$> runDocker (getDockerVersionM clientOpts SVersionEndpoint)
106listContainers :: DockerClientOpts -> IO (Maybe [DockerContainer])
100listContainers :: DockerClientOpts -> IO (Maybe [DockerContainer])
107−listContainers clientOpts = decodeResponse <$> run (listContainersM clientOpts SListContainersEndpoint)
101+listContainers clientOpts = decodeResponse <$> runDocker (listContainersM clientOpts SListContainersEndpoint)
109listImages :: DockerClientOpts -> IO (Maybe [DockerImage])
103listImages :: DockerClientOpts -> IO (Maybe [DockerImage])
110−listImages clientOpts = decodeResponse <$> run (listImagesM clientOpts SListImagesEndpoint)
104+listImages clientOpts = decodeResponse <$> runDocker (listImagesM clientOpts SListImagesEndpoint)
112createContainer :: DockerClientOpts -> CreateContainerOpts -> IO(Maybe T.Text)
106createContainer :: DockerClientOpts -> CreateContainerOpts -> IO(Maybe T.Text)
113−createContainer clientOpts createOpts = getElemFromResponse "Id" <$> run (createContainerM clientOpts (SCreateContainerEndpoint) createOpts)
107+createContainer clientOpts createOpts = getElemFromResponse "Id" <$> runDocker (createContainerM clientOpts (SCreateContainerEndpoint) createOpts)
115startContainer :: DockerClientOpts -> String -> StartContainerOpts -> IO(Status)
109startContainer :: DockerClientOpts -> String -> StartContainerOpts -> IO(Status)
116−startContainer clientOpts cid startOpts = (^. responseStatus) <$> run (startContainerM clientOpts (SStartContainerEndpoint cid) startOpts)
110+startContainer clientOpts cid startOpts = (^. responseStatus) <$> runDocker (startContainerM clientOpts (SStartContainerEndpoint cid) startOpts)
118stopContainer :: DockerClientOpts -> String -> IO (Status)
112stopContainer :: DockerClientOpts -> String -> IO (Status)
119−stopContainer clientOpts cid = (^. responseStatus) <$> run (stopContainerM clientOpts (SStopContainerEndpoint cid))
113+stopContainer clientOpts cid = (^. responseStatus) <$> runDocker (stopContainerM clientOpts (SStopContainerEndpoint cid))
121killContainer :: DockerClientOpts -> String -> IO (Status)
115killContainer :: DockerClientOpts -> String -> IO (Status)
122−killContainer clientOpts cid = (^. responseStatus) <$> run (killContainerM clientOpts (SKillContainerEndpoint cid))
116+killContainer clientOpts cid = (^. responseStatus) <$> runDocker (killContainerM clientOpts (SKillContainerEndpoint cid))
124restartContainer :: DockerClientOpts -> String -> IO (Status)
118restartContainer :: DockerClientOpts -> String -> IO (Status)
125−restartContainer clientOpts cid = (^. responseStatus) <$> run (restartContainerM clientOpts (SRestartContainerEndpoint cid))
119+restartContainer clientOpts cid = (^. responseStatus) <$> runDocker (restartContainerM clientOpts (SRestartContainerEndpoint cid))
127pauseContainer :: DockerClientOpts -> String -> IO (Status)
121pauseContainer :: DockerClientOpts -> String -> IO (Status)
128−pauseContainer clientOpts cid = (^. responseStatus) <$> run (pauseContainerM clientOpts (SPauseContainerEndpoint cid))
122+pauseContainer clientOpts cid = (^. responseStatus) <$> runDocker (pauseContainerM clientOpts (SPauseContainerEndpoint cid))
130unpauseContainer :: DockerClientOpts -> String -> IO (Status)
124unpauseContainer :: DockerClientOpts -> String -> IO (Status)
131−unpauseContainer clientOpts cid = (^. responseStatus) <$> run (unpauseContainerM clientOpts (SUnpauseContainerEndpoint cid))
125+unpauseContainer clientOpts cid = (^. responseStatus) <$> runDocker (unpauseContainerM clientOpts (SUnpauseContainerEndpoint cid))
128+-- deleteContainer :: DockerClientOpts -> String -> IO (Status)
129+-- deleteContainer = deleteContainerWithOpts defaultDeleteOpts
131+-- deleteContainerWithOpts :: DeleteOpts -> DockerClientOpts -> String -> IO (Status)
132+-- deleteContainerWithOpts (DeleteOpts removeVolumes force) clientOpts containerId = (^. responseStatus) <$> _dockerEmptyDeleteQuery req clientOpts
133+-- where req = printf "/containers/%s?v=%s;force=%s" containerId (show removeVolumes) (show force)
134-- getContainerLogsStream :: DockerClientOpts -> String -> IO ()
135-- getContainerLogsStream :: DockerClientOpts -> String -> IO ()
135-- getContainerLogsStream clientOpts containerId = do
136-- getContainerLogsStream clientOpts containerId = do
@@ -138,7 +139,14 @@ unpauseContainer clientOpts cid = (^. responseStatus) <$> run (unpauseContainerM
138-- PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
139-- PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
139-- where url = (printf "/containers/%s/logs?stdout=1&stderr=1&follow=1" containerId)
140-- where url = (printf "/containers/%s/logs?stdout=1&stderr=1&follow=1" containerId)
141−-- getContainerLogs :: DockerClientOpts -> String -> IO (L.ByteString)
142+-- getContainerLogs :: DockerClientOpts -> String -> Bool -> IO (L.ByteString)
142−-- getContainerLogs clientOpts containerId = (^. responseBody) <$> _dockerGetQuery url clientOpts
143+-- getContainerLogs clientOpts cid follow = (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid) follow)
143−-- where url = (printf "/containers/%s/logs?stdout=1&stderr=1" containerId)
144+
146+ -- False -> (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid "0"))
147+ -- True -> error "dinamo"
148+ -- req <- PH.parseUrl (SContainerLogsEndpoint cid "1")
149+ -- let req' = req {PH.method = "GET"}
150+ -- PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout