@@ -76,16 +76,6 @@ module Docker.Client.Types (
76 , HostConfig(..)
76 , HostConfig(..)
77 , defaultHostConfig
77 , defaultHostConfig
78 , NetworkingConfig(..)
78 , NetworkingConfig(..)
84− , NetworkContainer(..)
89 , EndpointConfig(..)
79 , EndpointConfig(..)
90 , Ulimit(..)
80 , Ulimit(..)
91 , ContainerResources(..)
81 , ContainerResources(..)
@@ -124,7 +114,6 @@ import qualified Data.Text as T
124import Data.Time.Clock (UTCTime)
114import Data.Time.Clock (UTCTime)
125import qualified Data.Vector as V
115import qualified Data.Vector as V
126import GHC.Generics (Generic)
116import GHC.Generics (Generic)
127−import Numeric (readDec)
128import Prelude hiding (all, tail)
117import Prelude hiding (all, tail)
129import Text.Read (readMaybe)
118import Text.Read (readMaybe)
@@ -150,8 +139,6 @@ data Endpoint =
150 | DeleteImageEndpoint ImageDeleteOpts ImageID
139 | DeleteImageEndpoint ImageDeleteOpts ImageID
151 | CreateNetworkEndpoint CreateNetworkOpts
140 | CreateNetworkEndpoint CreateNetworkOpts
152 | RemoveNetworkEndpoint NetworkID
141 | RemoveNetworkEndpoint NetworkID
153− | ListNetworksEndpoint [NetworkFilter]
154− | InspectNetworkEndpoint NetworkID
155 deriving (Eq, Show)
142 deriving (Eq, Show)
157-- | We should newtype this
144-- | We should newtype this
@@ -871,154 +858,6 @@ instance ToJSON CreateNetworkOpts where
871 , "EnableIPv6" .= createNetworkEnableIPv6 opts
858 , "EnableIPv6" .= createNetworkEnableIPv6 opts
874−data NetworkScope = LocalScope | GlobalScope | SwarmScope deriving (Eq, Show)
876−fromNetworkScope :: NetworkScope -> Text
877−fromNetworkScope LocalScope = "local"
878−fromNetworkScope GlobalScope = "global"
879−fromNetworkScope SwarmScope = "swarm"
881−instance ToJSON NetworkScope where
882− toJSON = JSON.String . fromNetworkScope
884−instance FromJSON NetworkScope where
885− parseJSON "local" = return LocalScope
886− parseJSON "global" = return GlobalScope
887− parseJSON "swarm" = return SwarmScope
888− parseJSON _ = fail "Failed to parse NetworkScope"
890−data CIDR = CIDR Text Int deriving (Eq, Show)
892−instance FromJSON CIDR where
893− parseJSON (JSON.String t) = case T.splitOn "/" t of
894− [a,p] -> CIDR a <$> parsePrefixLen p
895− _ -> fail "Failed to parse CIDR"
897− parsePrefixLen p = case readDec (T.unpack p) of
898− (n,""):_ -> return n
899− _ -> fail "Failed to parse CIDR prefix length"
900− parseJSON _ = fail "Failed to parse CIDR"
902−data IPAMDriver = DefaultIPAMDriver | NamedIPAMDriver Text deriving (Eq, Show)
904−instance FromJSON IPAMDriver where
905− parseJSON (JSON.String "default") = return DefaultIPAMDriver
906− parseJSON (JSON.String t) = return $ NamedIPAMDriver t
907− parseJSON _ = fail "IPAMDriver is not a string"
909−data IPAMConfig = IPAMConfig
910− { ipamConfigSubnet :: CIDR
911− , ipamConfigIPRange :: Maybe CIDR
912− , ipamSubnetGateway :: Maybe Text
913− , ipamConfigAuxAddress :: Maybe Text
914− } deriving (Eq, Show)
916−instance FromJSON IPAMConfig where
917− parseJSON (JSON.Object o) = IPAMConfig
921− <*> o .:? "AuxAddress"
922− parseJSON _ = fail "IPAMConfig is not an object"
925− { ipamDriver :: IPAMDriver
926− , ipamConfig :: [IPAMConfig]
927− , ipamOptions :: HM.HashMap Text Text
928− } deriving (Eq, Show)
930−instance FromJSON IPAM where
931− parseJSON (JSON.Object o) = IPAM
932− <$> o .:? "Driver" .!= DefaultIPAMDriver
933− <*> o .:? "Config" .!= []
934− <*> o .:? "Options" .!= HM.empty
935− parseJSON _ = fail "IPAM is not an object"
937−data NetworkContainer = NetworkContainer
938− { networkContainerName :: ContainerName
939− , networkContainerEndpointID :: Text
940− , networkContainerMacAddress :: Text
941− , networkContainerIPv4Address :: Text
942− , networkContainerIPv6Address :: Text
943− } deriving (Eq, Show)
945−instance FromJSON NetworkContainer where
946− parseJSON (JSON.Object o) = NetworkContainer
948− <*> o .: "EndpointID"
949− <*> o .: "MacAddress"
950− <*> o .: "IPv4Address"
951− <*> o .: "IPv6Address"
952− parseJSON _ = fail "NetworkContainer is not an object"
954−data NetworkDetails = NetworkDetails
955− { networkDetailsName :: Text
956− , networkDetailsID :: NetworkID
957− , networkDetailsCreated :: UTCTime
958− , networkDetailsScope :: NetworkScope
959− , networkDetailsDriver :: NetworkMode
960− , networkDetailsEnableIPv6 :: Bool
961− , networkDetailsInternal :: Bool
962− , networkDetailsAttachable :: Bool
963− , networkDetailsIngress :: Bool
964− , networkDetailsIPAM :: IPAM
965− , networkDetailsOptions :: HM.HashMap Text Text
966− , networkDetailsLabels :: HM.HashMap Text Text
967− , networkDetailsContainers :: HM.HashMap Text NetworkContainer
968− } deriving (Eq, Show)
970−instance FromJSON NetworkDetails where
971− parseJSON v@(JSON.Object o) = NetworkDetails
977− <*> o .: "EnableIPv6"
979− <*> o .: "Attachable"
982− <*> o .:? "Options" .!= HM.empty
983− <*> o .:? "Labels" .!= HM.empty
984− <*> o .:? "Containers" .!= HM.empty
985− parseJSON _ = fail "NetworkDetails is not an object"
987−data NetworkType = BuiltinNetwork | CustomNetwork deriving (Eq, Show)
989−fromNetworkType :: NetworkType -> Text
990−fromNetworkType BuiltinNetwork = "builtin"
991−fromNetworkType CustomNetwork = "custom"
993−type NetworkName = Text
995−instance ToJSON NetworkType where
996− toJSON = JSON.String . fromNetworkType
998−instance FromJSON NetworkType where
999− parseJSON (JSON.String "builtin") = return BuiltinNetwork
1000− parseJSON (JSON.String "custom") = return CustomNetwork
1001− parseJSON _ = fail "Failed to parse NetworkType"
1004− = NetworkFilterName Text
1005− | NetworkFilterID NetworkID
1006− | NetworkFilterLabel Text
1007− | NetworkFilterDriver NetworkMode
1008− | NetworkFilterScope NetworkScope
1009− | NetworkFilterType NetworkType
1010− deriving (Eq, Show)
1012−instance {-# OVERLAPPING #-} ToJSON [NetworkFilter] where
1013− toJSON = object . fmap toKV
1015− toKV (NetworkFilterName n) = "name" .= [n]
1016− toKV (NetworkFilterID i) = "id" .= [fromNetworkID i]
1017− toKV (NetworkFilterLabel l) = "label" .= [l]
1018− toKV (NetworkFilterDriver d) = "driver" .= [fromNetworkMode d]
1019− toKV (NetworkFilterScope s) = "scope" .= [fromNetworkScope s]
1020− toKV (NetworkFilterType t) = "type" .= [fromNetworkType t]
1022-- TOOD: Add support for SELinux Volume labels (eg. "ro,z" or "ro/Z")
861-- TOOD: Add support for SELinux Volume labels (eg. "ro,z" or "ro/Z")
1023-- | Set permissions on volumes that you mount in the container.
862-- | Set permissions on volumes that you mount in the container.
1024data VolumePermission = ReadWrite | ReadOnly deriving (Eq, Show, Generic)
863data VolumePermission = ReadWrite | ReadOnly deriving (Eq, Show, Generic)
@@ -1188,14 +1027,11 @@ instance FromJSON NetworkMode where
1188 parseJSON (JSON.String n) = return $ NetworkNamed n
1027 parseJSON (JSON.String n) = return $ NetworkNamed n
1189 parseJSON _ = fail "Unknown NetworkMode"
1028 parseJSON _ = fail "Unknown NetworkMode"
1191−fromNetworkMode :: NetworkMode -> Text
1192−fromNetworkMode NetworkBridge = "bridge"
1193−fromNetworkMode NetworkHost = "host"
1194−fromNetworkMode NetworkDisabled = "none"
1195−fromNetworkMode (NetworkNamed n) = n
1197instance ToJSON NetworkMode where
1030instance ToJSON NetworkMode where
1198− toJSON = JSON.String . fromNetworkMode
1031+ toJSON NetworkBridge = JSON.String "bridge"
1032+ toJSON NetworkHost = JSON.String "host"
1033+ toJSON NetworkDisabled = JSON.String "none"
1034+ toJSON (NetworkNamed n) = JSON.String n
1200newtype NetworkID = NetworkID Text
1036newtype NetworkID = NetworkID Text
1201 deriving (Eq, Show)
1037 deriving (Eq, Show)
@@ -1728,7 +1564,11 @@ instance FromJSON ContainerConfig where
1728 macAddress labels stopSignal
1564 macAddress labels stopSignal
1729 parseJSON _ = fail "NetworkSettings is not an object."
1565 parseJSON _ = fail "NetworkSettings is not an object."
1567+#if MIN_VERSION_base(4,13,0)
1568+parseIntegerText :: (MonadFail m) => Text -> m Integer
1731parseIntegerText :: (Monad m) => Text -> m Integer
1570parseIntegerText :: (Monad m) => Text -> m Integer
1732parseIntegerText t = case readMaybe $ T.unpack t of
1572parseIntegerText t = case readMaybe $ T.unpack t of
1733 Nothing ->
1573 Nothing ->
1734 fail "Could not parse Integer"
1574 fail "Could not parse Integer"