on master help sign in
Add inspectNetwork endpoint
commit78e5ae268645c130bf0b1d93f8d59d1a2eb18b1d authorBen Hamlin <protob3n@gmail.com> dateTue 2 Jul 2019, 21:39 (7 years ago) parent5406510
5 files changed+27−5
src/Docker/Client/Api.hs+6−1 src/Docker/Client/Http.hs+5 src/Docker/Client/Internal.hs+2 src/Docker/Client/Types.hs+5−2 tests/tests.hs+9−2
src/Docker/Client/Api.hs+6−1
@@ -25,6 +25,7 @@ module Docker.Client.Api (
2525 , createNetwork
2626 , removeNetwork
2727 , listNetworks
28+ , inspectNetwork
2829 -- * Other
2930 , getDockerVersion
3031 ) where
@@ -226,6 +227,10 @@ createNetwork opts = requestHelper POST (CreateNetworkEndpoint opts) >>= parseR
226227removeNetwork :: forall m. (MonadIO m, MonadMask m) => NetworkID -> DockerT m (Either DockerError ())
227228removeNetwork nid = requestUnit DELETE $ RemoveNetworkEndpoint nid
228229
229−-- | Lists networks optionally matching a list of 'Filter's
230+-- | Lists networks optionally matching a list of 'NetworkFilter's.
230231listNetworks :: forall m . (MonadIO m, MonadMask m) => [NetworkFilter] -> DockerT m (Either DockerError [NetworkDetails])
231232listNetworks 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 =
293293 Nothing
294294 else
295295 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
8080getEndpoint v (CreateNetworkEndpoint _) = encodeURL [v, "networks", "create"]
8181getEndpoint v (RemoveNetworkEndpoint nid) = encodeURL [v, "networks", fromNetworkID nid]
8282getEndpoint v (ListNetworksEndpoint nfs) = encodeURLWithQuery [v, "networks"] [("filters", Just . BSLC.toStrict $ JSON.encode nfs)]
83+getEndpoint v (InspectNetworkEndpoint nid) = encodeURL [v, "networks", fromNetworkID nid]
8384
8485getEndpointRequestBody :: Endpoint -> Maybe HTTP.RequestBody
8586getEndpointRequestBody VersionEndpoint = Nothing
@@ -104,6 +105,7 @@ getEndpointRequestBody (DeleteImageEndpoint _ _) = Nothing
104105getEndpointRequestBody (CreateNetworkEndpoint opts) = Just $ HTTP.RequestBodyLBS (JSON.encode opts)
105106getEndpointRequestBody (RemoveNetworkEndpoint _) = Nothing
106107getEndpointRequestBody (ListNetworksEndpoint _) = Nothing
108+getEndpointRequestBody (InspectNetworkEndpoint _) = Nothing
107109
108110getEndpointContentType :: Endpoint -> BSC.ByteString
109111getEndpointContentType (BuildImageEndpoint _ _) = BSC.pack "application/tar"
src/Docker/Client/Types.hs+5−2
@@ -84,6 +84,7 @@ module Docker.Client.Types (
8484 , NetworkContainer(..)
8585 , NetworkDetails(..)
8686 , NetworkType(..)
87+ , NetworkName
8788 , NetworkFilter(..)
8889 , EndpointConfig(..)
8990 , Ulimit(..)
@@ -150,6 +151,7 @@ data Endpoint =
150151 | CreateNetworkEndpoint CreateNetworkOpts
151152 | RemoveNetworkEndpoint NetworkID
152153 | ListNetworksEndpoint [NetworkFilter]
154+ | InspectNetworkEndpoint NetworkID
153155 deriving (Eq, Show)
154156
155157-- | We should newtype this
@@ -933,7 +935,7 @@ instance FromJSON IPAM where
933935 parseJSON _ = fail "IPAM is not an object"
934936
935937data NetworkContainer = NetworkContainer
936− { networkContainerName :: Text
938+ { networkContainerName :: ContainerName
937939 , networkContainerEndpointID :: Text
938940 , networkContainerMacAddress :: Text
939941 , networkContainerIPv4Address :: Text
@@ -988,6 +990,8 @@ fromNetworkType :: NetworkType -> Text
988990fromNetworkType BuiltinNetwork = "builtin"
989991fromNetworkType CustomNetwork = "custom"
990992
993+type NetworkName = Text
994+
991995instance ToJSON NetworkType where
992996 toJSON = JSON.String . fromNetworkType
993997
@@ -1005,7 +1009,6 @@ data NetworkFilter
10051009 | NetworkFilterType NetworkType
10061010 deriving (Eq, Show)
10071011
1008−
10091012instance {-# OVERLAPPING #-} ToJSON [NetworkFilter] where
10101013 toJSON = object . fmap toKV
10111014 where
tests/tests.hs+9−2
@@ -149,8 +149,15 @@ testListNetworks =
149149 runDocker $ do
150150 res <- listNetworks [NetworkFilterName "bridge"]
151151 lift $ case res of
152− Left _ -> assertFailure $ "listing networks, unexpected status: " ++ show res
153− Right ns -> assertBool "listing networks, bridge network missing" $ length ns == 1
152+ Left _ -> assertFailure $ "listing networks, unexpected status: " ++ show res
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+
154161
155162testLogDriverOptionsJson :: TestTree
156163testLogDriverOptionsJson = testGroup "Testing LogDriverOptions JSON" [test1, test2, test3]