@@ -5,25 +5,13 @@
55module Network.Docker where
66
77import Control.Applicative ((<$>), (<*>))
8−import Control.Lens
98import Control.Monad.Free
109import Data.Aeson (FromJSON, ToJSON, Value, decode,
1110 eitherDecode, toJSON)
1211import Data.Aeson.Lens (key, _String)
13−import Data.Aeson.TH
1412import qualified Data.ByteString.Lazy as L
1513import Data.Char
1614import qualified Data.Text as T
17−import qualified Data.Text as T
18−import Network.Docker.Options
19−import Network.Wreq
20−-- import Pipes
21−-- import qualified Pipes.ByteString as PB
22−-- import qualified Pipes.HTTP as PH
23−
24−
25−import Network.Docker.Internal
26−import Network.Docker.Types
2715import Network.HTTP.Client.OpenSSL
2816import Network.Wreq
2917import OpenSSL (withOpenSSL)
@@ -34,6 +22,10 @@ import qualified Pipes.ByteString as PB
3422import qualified Pipes.HTTP as PH
3523import Text.Printf (printf)
3624
25+import Network.Docker.Internal
26+import Network.Docker.Options
27+import Network.Docker.Types
28+
3729emptyPost = "" :: String
3830
3931defaultClientOpts :: DockerClientOpts
@@ -98,38 +90,47 @@ _dockerEmptyPostQuery clientOpts@DockerClientOpts{ssl = NoSSL} endpoint = Free (
9890_dockerEmptyPostQuery clientOpts@DockerClientOpts{ssl = SSL sslOpts} endpoint = Free (PostSSL sslOpts (fullUrl clientOpts endpoint) (toJSON emptyPost))
9991
10092
93+_dockerEmptyDeleteQuery endpoint clientOpts = delete (fullUrl clientOpts endpoint)
94+
10195_dockerEmptyDeleteQuery endpoint clientOpts = delete (fullUrl clientOpts endpoint)
10296
10397getDockerVersion :: DockerClientOpts -> IO (Maybe DockerVersion)
104−getDockerVersion clientOpts = decodeResponse <$> run (getDockerVersionM clientOpts SVersionEndpoint)
98+getDockerVersion clientOpts = decodeResponse <$> runDocker (getDockerVersionM clientOpts SVersionEndpoint)
10599
106100listContainers :: DockerClientOpts -> IO (Maybe [DockerContainer])
107−listContainers clientOpts = decodeResponse <$> run (listContainersM clientOpts SListContainersEndpoint)
101+listContainers clientOpts = decodeResponse <$> runDocker (listContainersM clientOpts SListContainersEndpoint)
108102
109103listImages :: DockerClientOpts -> IO (Maybe [DockerImage])
110−listImages clientOpts = decodeResponse <$> run (listImagesM clientOpts SListImagesEndpoint)
104+listImages clientOpts = decodeResponse <$> runDocker (listImagesM clientOpts SListImagesEndpoint)
111105
112106createContainer :: 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)
114108
115109startContainer :: 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)
117111
118112stopContainer :: DockerClientOpts -> String -> IO (Status)
119−stopContainer clientOpts cid = (^. responseStatus) <$> run (stopContainerM clientOpts (SStopContainerEndpoint cid))
113+stopContainer clientOpts cid = (^. responseStatus) <$> runDocker (stopContainerM clientOpts (SStopContainerEndpoint cid))
120114
121115killContainer :: DockerClientOpts -> String -> IO (Status)
122−killContainer clientOpts cid = (^. responseStatus) <$> run (killContainerM clientOpts (SKillContainerEndpoint cid))
116+killContainer clientOpts cid = (^. responseStatus) <$> runDocker (killContainerM clientOpts (SKillContainerEndpoint cid))
123117
124118restartContainer :: DockerClientOpts -> String -> IO (Status)
125−restartContainer clientOpts cid = (^. responseStatus) <$> run (restartContainerM clientOpts (SRestartContainerEndpoint cid))
119+restartContainer clientOpts cid = (^. responseStatus) <$> runDocker (restartContainerM clientOpts (SRestartContainerEndpoint cid))
126120
127121pauseContainer :: DockerClientOpts -> String -> IO (Status)
128−pauseContainer clientOpts cid = (^. responseStatus) <$> run (pauseContainerM clientOpts (SPauseContainerEndpoint cid))
122+pauseContainer clientOpts cid = (^. responseStatus) <$> runDocker (pauseContainerM clientOpts (SPauseContainerEndpoint cid))
129123
130124unpauseContainer :: DockerClientOpts -> String -> IO (Status)
131−unpauseContainer clientOpts cid = (^. responseStatus) <$> run (unpauseContainerM clientOpts (SUnpauseContainerEndpoint cid))
125+unpauseContainer clientOpts cid = (^. responseStatus) <$> runDocker (unpauseContainerM clientOpts (SUnpauseContainerEndpoint cid))
126+
132127
128+-- deleteContainer :: DockerClientOpts -> String -> IO (Status)
129+-- deleteContainer = deleteContainerWithOpts defaultDeleteOpts
130+
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)
133134
134135-- getContainerLogsStream :: DockerClientOpts -> String -> IO ()
135136-- getContainerLogsStream clientOpts containerId = do
@@ -138,7 +139,14 @@ unpauseContainer clientOpts cid = (^. responseStatus) <$> run (unpauseContainerM
138139-- PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
139140-- where url = (printf "/containers/%s/logs?stdout=1&stderr=1&follow=1" containerId)
140141
141−-- getContainerLogs :: DockerClientOpts -> String -> IO (L.ByteString)
142−-- getContainerLogs clientOpts containerId = (^. responseBody) <$> _dockerGetQuery url clientOpts
143−-- where url = (printf "/containers/%s/logs?stdout=1&stderr=1" containerId)
142+-- getContainerLogs :: DockerClientOpts -> String -> Bool -> IO (L.ByteString)
143+-- getContainerLogs clientOpts cid follow = (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid) follow)
144+
145+
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
151+
144152