on master help sign in
Add inspectNetwork endpoint
78e5ae2Ben Hamlin
src/Docker/Client/Api.hs+6−1
@@ -25,6 +25,7 @@ module Docker.Client.Api (
25 , createNetwork
25 , createNetwork
26 , removeNetwork
26 , removeNetwork
27 , listNetworks
27 , listNetworks
28+ , inspectNetwork
28 -- * Other
29 -- * Other
29 , getDockerVersion
30 , getDockerVersion
30 ) where
31 ) where
@@ -226,6 +227,10 @@ createNetwork opts = requestHelper POST (CreateNetworkEndpoint opts) >>= parseR
226removeNetwork :: forall m. (MonadIO m, MonadMask m) => NetworkID -> DockerT m (Either DockerError ())
227removeNetwork :: forall m. (MonadIO m, MonadMask m) => NetworkID -> DockerT m (Either DockerError ())
227removeNetwork nid = requestUnit DELETE $ RemoveNetworkEndpoint nid
228removeNetwork nid = requestUnit DELETE $ RemoveNetworkEndpoint nid
228
229
229−-- | Lists networks optionally matching a list of 'Filter's
230+-- | Lists networks optionally matching a list of 'NetworkFilter's.
230listNetworks :: forall m . (MonadIO m, MonadMask m) => [NetworkFilter] -> DockerT m (Either DockerError [NetworkDetails])
231listNetworks :: forall m . (MonadIO m, MonadMask m) => [NetworkFilter] -> DockerT m (Either DockerError [NetworkDetails])
231listNetworks nfs = requestHelper GET (ListNetworksEndpoint nfs) >>= parseResponse
232listNetworks nfs = requestHelper GET (ListNetworksEndpoint nfs) >>= parseResponse
233+
234+-- | Gets 'NetworkDetails' for a network, given its name or id.
235+inspectNetwork :: forall m . (MonadIO m, MonadMask m) => NetworkID -> DockerT m (Either DockerError NetworkDetails)
236+inspectNetwork nid = requestHelper GET (InspectNetworkEndpoint nid) >>= parseResponse
src/Docker/Client/Http.hs+5
@@ -293,3 +293,8 @@ statusCodeToError (ListNetworksEndpoint _) st =
293 Nothing
293 Nothing
294 else
294 else
295 Just $ DockerInvalidStatusCode st
295 Just $ DockerInvalidStatusCode st
296+statusCodeToError (InspectNetworkEndpoint _) st =
297+ if st == status200 then
298+ Nothing
299+ else
300+ Just $ DockerInvalidStatusCode st
src/Docker/Client/Internal.hs+2
@@ -80,6 +80,7 @@ getEndpoint v (DeleteImageEndpoint _ cid) = encodeURL [v, "images", fromImageID
80getEndpoint v (CreateNetworkEndpoint _) = encodeURL [v, "networks", "create"]
80getEndpoint v (CreateNetworkEndpoint _) = encodeURL [v, "networks", "create"]
81getEndpoint v (RemoveNetworkEndpoint nid) = encodeURL [v, "networks", fromNetworkID nid]
81getEndpoint v (RemoveNetworkEndpoint nid) = encodeURL [v, "networks", fromNetworkID nid]
82getEndpoint v (ListNetworksEndpoint nfs) = encodeURLWithQuery [v, "networks"] [("filters", Just . BSLC.toStrict $ JSON.encode nfs)]
82getEndpoint v (ListNetworksEndpoint nfs) = encodeURLWithQuery [v, "networks"] [("filters", Just . BSLC.toStrict $ JSON.encode nfs)]
83+getEndpoint v (InspectNetworkEndpoint nid) = encodeURL [v, "networks", fromNetworkID nid]
83
84
84getEndpointRequestBody :: Endpoint -> Maybe HTTP.RequestBody
85getEndpointRequestBody :: Endpoint -> Maybe HTTP.RequestBody
85getEndpointRequestBody VersionEndpoint = Nothing
86getEndpointRequestBody VersionEndpoint = Nothing
@@ -104,6 +105,7 @@ getEndpointRequestBody (DeleteImageEndpoint _ _) = Nothing
104getEndpointRequestBody (CreateNetworkEndpoint opts) = Just $ HTTP.RequestBodyLBS (JSON.encode opts)
105getEndpointRequestBody (CreateNetworkEndpoint opts) = Just $ HTTP.RequestBodyLBS (JSON.encode opts)
105getEndpointRequestBody (RemoveNetworkEndpoint _) = Nothing
106getEndpointRequestBody (RemoveNetworkEndpoint _) = Nothing
106getEndpointRequestBody (ListNetworksEndpoint _) = Nothing
107getEndpointRequestBody (ListNetworksEndpoint _) = Nothing
108+getEndpointRequestBody (InspectNetworkEndpoint _) = Nothing
107
109
108getEndpointContentType :: Endpoint -> BSC.ByteString
110getEndpointContentType :: Endpoint -> BSC.ByteString
109getEndpointContentType (BuildImageEndpoint _ _) = BSC.pack "application/tar"
111getEndpointContentType (BuildImageEndpoint _ _) = BSC.pack "application/tar"
src/Docker/Client/Types.hs+5−2
@@ -84,6 +84,7 @@ module Docker.Client.Types (
84 , NetworkContainer(..)
84 , NetworkContainer(..)
85 , NetworkDetails(..)
85 , NetworkDetails(..)
86 , NetworkType(..)
86 , NetworkType(..)
87+ , NetworkName
87 , NetworkFilter(..)
88 , NetworkFilter(..)
88 , EndpointConfig(..)
89 , EndpointConfig(..)
89 , Ulimit(..)
90 , Ulimit(..)
@@ -150,6 +151,7 @@ data Endpoint =
150 | CreateNetworkEndpoint CreateNetworkOpts
151 | CreateNetworkEndpoint CreateNetworkOpts
151 | RemoveNetworkEndpoint NetworkID
152 | RemoveNetworkEndpoint NetworkID
152 | ListNetworksEndpoint [NetworkFilter]
153 | ListNetworksEndpoint [NetworkFilter]
154+ | InspectNetworkEndpoint NetworkID
153 deriving (Eq, Show)
155 deriving (Eq, Show)
154
156
155-- | We should newtype this
157-- | We should newtype this
@@ -933,7 +935,7 @@ instance FromJSON IPAM where
933 parseJSON _ = fail "IPAM is not an object"
935 parseJSON _ = fail "IPAM is not an object"
934
936
935data NetworkContainer = NetworkContainer
937data NetworkContainer = NetworkContainer
936− { networkContainerName :: Text
938+ { networkContainerName :: ContainerName
937 , networkContainerEndpointID :: Text
939 , networkContainerEndpointID :: Text
938 , networkContainerMacAddress :: Text
940 , networkContainerMacAddress :: Text
939 , networkContainerIPv4Address :: Text
941 , networkContainerIPv4Address :: Text
@@ -988,6 +990,8 @@ fromNetworkType :: NetworkType -> Text
988fromNetworkType BuiltinNetwork = "builtin"
990fromNetworkType BuiltinNetwork = "builtin"
989fromNetworkType CustomNetwork = "custom"
991fromNetworkType CustomNetwork = "custom"
990
992
993+type NetworkName = Text
994+
991instance ToJSON NetworkType where
995instance ToJSON NetworkType where
992 toJSON = JSON.String . fromNetworkType
996 toJSON = JSON.String . fromNetworkType
993
997
@@ -1005,7 +1009,6 @@ data NetworkFilter
1005 | NetworkFilterType NetworkType
1009 | NetworkFilterType NetworkType
1006 deriving (Eq, Show)
1010 deriving (Eq, Show)
1007
1011
1008−
1009instance {-# OVERLAPPING #-} ToJSON [NetworkFilter] where
1012instance {-# OVERLAPPING #-} ToJSON [NetworkFilter] where
1010 toJSON = object . fmap toKV
1013 toJSON = object . fmap toKV
1011 where
1014 where
tests/tests.hs+9−2
@@ -149,8 +149,15 @@ testListNetworks =
149 runDocker $ do
149 runDocker $ do
150 res <- listNetworks [NetworkFilterName "bridge"]
150 res <- listNetworks [NetworkFilterName "bridge"]
151 lift $ case res of
151 lift $ case res of
152− Left _ -> assertFailure $ "listing networks, unexpected status: " ++ show res
152+ Left _ -> assertFailure $ "listing networks, unexpected status: " ++ show res
153− Right ns -> assertBool "listing networks, bridge network missing" $ length ns == 1
153+ Right (d:_) -> assertBool "listing networks, bridge network missing" $ networkDetailsName d == "bridge"
154+
155+testInspectNetwork :: IO ()
156+testInspectNetwork =
157+ runDocker $ do
158+ res <- inspectNetwork . fromJust $ toNetworkID "bridge"
159+ lift $ assertBool ("inspecting networks, unewxpected status: " ++ show res) $ isRight res
160+
154
161
155testLogDriverOptionsJson :: TestTree
162testLogDriverOptionsJson :: TestTree
156testLogDriverOptionsJson = testGroup "Testing LogDriverOptions JSON" [test1, test2, test3]
163testLogDriverOptionsJson = testGroup "Testing LogDriverOptions JSON" [test1, test2, test3]