on master help sign in
More fleshing out
ab4a597Deni Bertovic
src/Docker.hs+28
@@ -10,3 +10,31 @@ listContainers = undefined
10
10
11listImages :: Monad m => ListOpts -> DockerT m ([Image])
11listImages :: Monad m => ListOpts -> DockerT m ([Image])
12listImages = undefined
12listImages = undefined
13+
14+createContainer :: Monad m => CreateOpts -> DockerT m (ContainerID)
15+createContainer = undefined
16+
17+startContainer :: Monad m => StartOpts -> DockerT m (ContainerID)
18+startContainer = undefined
19+
20+stopContainer :: Monad m => Timeout -> DockerT m ()
21+stopContainer = undefined
22+
23+killContainer :: Monad m => Signal -> DockerT m ()
24+killContainer = undefined
25+
26+restartContainer :: Monad m => Timeout -> DockerT m ()
27+restartContainer = undefined
28+
29+pauseContainer :: Monad m => DockerT m ()
30+pauseContainer = undefined
31+
32+unpauseContainer :: Monad m => DockerT m ()
33+unpauseContainer = undefined
34+
35+deleteContainer :: Monad m => DeleteOpts -> DockerT m ()
36+deleteContainer = undefined
37+
38+getContainerLogs :: Monad m => LogOpts -> DockerT m ()
39+getContainerLogs = undefined
40+
src/Docker/Types.hs+32−13
@@ -2,8 +2,9 @@ module Docker.Types where
2
2
3import Control.Monad.Except (ExceptT, runExceptT)
3import Control.Monad.Except (ExceptT, runExceptT)
4import Control.Monad.Reader (ReaderT, runReaderT)
4import Control.Monad.Reader (ReaderT, runReaderT)
5−import Data.Aeson (FromJSON, ToJSON, genericParseJSON,
5+import Data.Aeson (FromJSON, ToJSON, encode,
6+ genericParseJSON, genericToJSON,
6− genericToJSON, parseJSON, toJSON)
7+ parseJSON, toJSON)
7import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
8import Data.Aeson.Types (defaultOptions, fieldLabelModifier)
8import qualified Data.ByteString.Lazy as BL
9import qualified Data.ByteString.Lazy as BL
9import Data.Char (toUpper)
10import Data.Char (toUpper)
@@ -15,10 +16,15 @@ import qualified Network.HTTP.Client as HTTP
15type Endpoint = Text
16type Endpoint = Text
16type URL = Text
17type URL = Text
17type ApiVersion = Text
18type ApiVersion = Text
19+type ContainerID = Text
20+type ImageID = Text
21+type Timeout = Integer
18
22
19type Request = HTTP.Request
23type Request = HTTP.Request
20type Response = HTTP.Response BL.ByteString
24type Response = HTTP.Response BL.ByteString
21
25
26+data Signal = SIGINT | SIGKILL deriving (Eq, Show)
27+
22data DockerClientOpts m = DockerClientOpts {
28data DockerClientOpts m = DockerClientOpts {
23 http :: Request -> m Response
29 http :: Request -> m Response
24 , apiVersion :: ApiVersion
30 , apiVersion :: ApiVersion
@@ -31,22 +37,17 @@ runDockerT :: (Monad m) => DockerClientOpts m -> DockerT m a -> m (Either String
31runDockerT opts a = runExceptT $ runReaderT a opts
37runDockerT opts a = runExceptT $ runReaderT a opts
32-- runDockerT opts a = (runExceptT .) . flip runReaderT opts a
38-- runDockerT opts a = (runExceptT .) . flip runReaderT opts a
33
39
34−data ListOpts = ListOpts
40+data ListOpts = ListOpts { all :: Bool } deriving (Eq, Show)
35− { all :: Bool
36− } deriving (Eq, Show, Generic)
37−
38−instance ToJSON ListOpts
39−instance FromJSON ListOpts
40
41
41defaultClientOpts :: DockerClientOpts IO
42defaultClientOpts :: DockerClientOpts IO
42−defaultClientOpts = DockerClientOpts
43+defaultClientOpts = DockerClientOpts {
43− { http = undefined
44+ http = undefined
44 , apiVersion = "v1.22"
45 , apiVersion = "v1.22"
45 , baseUrl = "http://127.0.0.1:2375/"
46 , baseUrl = "http://127.0.0.1:2375/"
46 }
47 }
47
48
48−data DockerVersion = DockerVersion
49+data DockerVersion = DockerVersion {
49− { version :: Text
50+ version :: Text
50 , gitCommit :: Text
51 , gitCommit :: Text
51 , goVersion :: Text
52 , goVersion :: Text
52 , arch :: Text
53 , arch :: Text
@@ -67,4 +68,22 @@ data Container = Container
67
68
68data Image = Image
69data Image = Image
69
70
70−
71+data CreateOpts = CreateOpts
72+data StartOpts = StartOpts
73+
74+data DeleteOpts = DeleteOpts {
75+ v :: Bool
76+ , force :: Bool
77+ } deriving (Eq, Show)
78+
79+type Timestamp = Integer
80+data Tail = Integer | All deriving (Eq, Show)
81+
82+data LogOpts = LogOpts {
83+ follow :: Bool
84+ , stdout :: Bool
85+ , stderr :: Bool
86+ , since :: Timestamp
87+ , timestamps :: Bool
88+ , tail :: Tail
89+ } deriving (Eq, Show)