-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A Digital Ocean client in Haskell
--
-- HDO is a client to Digital Ocean API. It can either be used as
-- a library embedded in other tools or as a command-line client
-- (docean).
@package hdo
@version 0.2
-- | Generate random names shamelessly stolen from
-- https://raw.githubusercontent.com/docker/docker/master/pkg/namesgenerator/names-generator.go
module Network.DO.Names
generateName :: IO String
-- | Functor and low-level mechanism to interact with a server using Wreq
-- and JSON values.
module Network.REST
data REST a
Get :: URI -> (Value -> a) -> REST a
Post :: URI -> Value -> (Maybe Value -> a) -> REST a
WaitFor :: Int -> String -> a -> REST a
GetWith :: Options -> URI -> (Value -> a) -> REST a
PostWith :: Options -> URI -> Value -> (Either String Value -> a) -> REST a
DeleteWith :: Options -> URI -> a -> REST a
type RESTT = FreeT REST
getJSON :: (Monad m) => URI -> RESTT m Value
getJSONWith :: (Monad m) => Options -> URI -> RESTT m Value
postJSON :: (Monad m) => URI -> Value -> RESTT m (Maybe Value)
postJSONWith :: (Monad m) => Options -> URI -> Value -> RESTT m (Either String Value)
deleteJSONWith :: (Monad m) => Options -> URI -> RESTT m ()
waitFor :: (Monad m) => Int -> String -> RESTT m ()
-- | An implementation of Net functor based on wreq and
-- IO
runWreq :: RESTT IO r -> IO r
ssh :: (MonadIO m, Exception e) => [String] -> m (Either e ())
-- | Contains Haskell representation of most data types used for
-- interacting with DigitalOcean's API v2
--
-- See https://developers.digitalocean.com/documentation/v2/
module Network.DO.Types
type AuthToken = String
type Slug = String
type URI = String
newtype Error
Error :: String -> Error
[msg] :: Error -> String
type Result a = Either Error a
error :: String -> Result a
data ToolConfiguration
Tool :: Maybe URI -> Maybe AuthToken -> Bool -> ToolConfiguration
[slackUri] :: ToolConfiguration -> Maybe URI
[authToken] :: ToolConfiguration -> Maybe AuthToken
[quiet] :: ToolConfiguration -> Bool
-- | A type for describing Region A region can be assigned an
-- empty object when it is undefined, or be referenced simply by its
-- slug
-- https://developers.digitalocean.com/documentation/v2/#regions
data Region
Region :: String -> Slug -> [SizeSlug] -> Bool -> Region
[regionName] :: Region -> String
[regionSlug] :: Region -> Slug
[regionSizes] :: Region -> [SizeSlug]
[regionAvailable] :: Region -> Bool
RegionSlug :: Slug -> Region
NoRegion :: Region
-- | String representation of size slugs This maps to corresponding
-- expected JSON string value.
sizeSlugs :: [String]
-- | Enumeration of all possible size slugs
data SizeSlug
M512 :: SizeSlug
G1 :: SizeSlug
G2 :: SizeSlug
G4 :: SizeSlug
G8 :: SizeSlug
G16 :: SizeSlug
G32 :: SizeSlug
G48 :: SizeSlug
G64 :: SizeSlug
G96 :: SizeSlug
type ImageSlug = String
type KeyId = Int
defaultImage :: ImageSlug
data BoxConfiguration
BoxConfiguration :: String -> Region -> SizeSlug -> ImageSlug -> [KeyId] -> Bool -> BoxConfiguration
[configName] :: BoxConfiguration -> String
[boxRegion] :: BoxConfiguration -> Region
[size] :: BoxConfiguration -> SizeSlug
[configImageSlug] :: BoxConfiguration -> ImageSlug
[keys] :: BoxConfiguration -> [KeyId]
[backgroundCreate] :: BoxConfiguration -> Bool
type Id = Integer
data Mega
data Giga
-- | A type for various sizes Type parameter is used to define number's
-- magnitude
newtype Bytes a
Bytes :: Int -> Bytes a
[bytesSize] :: Bytes a -> Int
jsonBytes :: Int -> Parser (Bytes a)
newtype Date
Date :: UTCTime -> Date
[theDate] :: Date -> UTCTime
data Status
New :: Status
Active :: Status
Off :: Status
Archive :: Status
data NetType
Public :: NetType
Private :: NetType
-- | Type of a single Network definition
--
-- This type is parameterized with a phantom type which lifts the network
-- address type at the type level (could use DataKinds extension...).
-- This allows distinguishing types of of networks while using same
-- parsing.
data Network a
NetworkV4 :: IP -> IP -> IP -> NetType -> Network a
[ip_address] :: Network a -> IP
[netmask] :: Network a -> IP
[gateway] :: Network a -> IP
[netType] :: Network a -> NetType
NetworkV6 :: IP -> Int -> IP -> NetType -> Network a
[ip_address] :: Network a -> IP
[netmask_v6] :: Network a -> Int
[gateway] :: Network a -> IP
[netType] :: Network a -> NetType
data V4
data V6
jsonNetwork :: (FromJSON a3, FromJSON a2, FromJSON a1, FromJSON a) => (a3 -> a2 -> a1 -> a -> b) -> Object -> Parser b
-- | Type of Networks configured for a Droplet
--
-- A network is either a list of IPv4 and IPv6 NICs definitions, or no
-- network. We need this because a droplet can contain an
-- 'empty' networks JSON Object entry, instead of
-- null.
data Networks
Networks :: [Network V4] -> [Network V6] -> Networks
[v4] :: Networks -> [Network V4]
[v6] :: Networks -> [Network V6]
NoNetworks :: Networks
-- | (Partial) Type of Droplets
--
-- https://developers.digitalocean.com/documentation/v2/#droplets
data Droplet
Droplet :: Id -> String -> Bytes Mega -> Int -> Bytes Giga -> Bool -> Date -> Status -> [Id] -> [Id] -> Region -> SizeSlug -> Networks -> Droplet
[dropletId] :: Droplet -> Id
[name] :: Droplet -> String
[memory] :: Droplet -> Bytes Mega
[vcpus] :: Droplet -> Int
[disk] :: Droplet -> Bytes Giga
[locked] :: Droplet -> Bool
[created_at] :: Droplet -> Date
[status] :: Droplet -> Status
[backup_ids] :: Droplet -> [Id]
[snapshot_ids] :: Droplet -> [Id]
[region] :: Droplet -> Region
[size_slug] :: Droplet -> SizeSlug
[networks] :: Droplet -> Networks
data ImageType
Snapshot :: ImageType
Temporary :: ImageType
Backup :: ImageType
-- | Type of droplet images
--
-- https://developers.digitalocean.com/documentation/v2/#images
data Image
Image :: Id -> String -> String -> Maybe Slug -> Bool -> [Region] -> Bytes Giga -> Date -> ImageType -> Image
[imageId] :: Image -> Id
[imageName] :: Image -> String
[distribution] :: Image -> String
[imageSlug] :: Image -> Maybe Slug
[publicImage] :: Image -> Bool
[imageRegions] :: Image -> [Region]
[min_disk_size] :: Image -> Bytes Giga
[image_created_at] :: Image -> Date
[imageType] :: Image -> ImageType
-- | Type of SSH Keys
--
-- https://developers.digitalocean.com/documentation/v2/#ssh-keys
data Key
Key :: Id -> String -> String -> String -> Key
[keyId] :: Key -> Id
[keyFingerprint] :: Key -> String
[publicKey] :: Key -> String
[keyName] :: Key -> String
type TransferRate = Double
type Price = Double
-- | Type of Size objects
--
-- https://developers.digitalocean.com/documentation/v2/#sizes
data Size
Size :: SizeSlug -> Bytes Mega -> Int -> Bytes Giga -> TransferRate -> Price -> Price -> [Region] -> Bool -> Size
[szSlug] :: Size -> SizeSlug
[szMemory] :: Size -> Bytes Mega
[szVcpus] :: Size -> Int
[szDisk] :: Size -> Bytes Giga
[szTransfer] :: Size -> TransferRate
[szPrice_Monthly] :: Size -> Price
[szPrice_Hourly] :: Size -> Price
[szRegions] :: Size -> [Region]
[szAvailable] :: Size -> Bool
-- | Type of action status This is returned when action is initiated or
-- when status of some action is requested
data ActionResult
ActionResult :: Id -> ActionStatus -> ActionType -> Maybe Date -> Maybe Date -> Id -> String -> Region -> ActionResult
[actionId] :: ActionResult -> Id
[actionStatus] :: ActionResult -> ActionStatus
[actionType] :: ActionResult -> ActionType
[actionStartedAt] :: ActionResult -> Maybe Date
[actionCompletedAt] :: ActionResult -> Maybe Date
[actionResourceId] :: ActionResult -> Id
[actionResourceType] :: ActionResult -> String
[actionRegionSlug] :: ActionResult -> Region
data ActionStatus
InProgress :: ActionStatus
Completed :: ActionStatus
Errored :: ActionStatus
data ActionType
PowerOff :: ActionType
PowerOn :: ActionType
MakeSnapshot :: ActionType
data Action
DoPowerOff :: Action
DoPowerOn :: Action
CreateSnapshot :: String -> Action
-- | Type of Domain zones
--
-- https://developers.digitalocean.com/documentation/v2/#domains
data Domain
Domain :: String -> Int -> String -> Domain
[domainName] :: Domain -> String
[domainTTL] :: Domain -> Int
[zone_file] :: Domain -> String
-- | Enumeration of possible DNS records types
data DNSType
A :: DNSType
CNAME :: DNSType
TXT :: DNSType
PTR :: DNSType
SRV :: DNSType
NS :: DNSType
AAAA :: DNSType
MX :: DNSType
-- | Type of Domain zone file entries
--
--
-- https://developers.digitalocean.com/documentation/v2/#domain-records
data DomainRecord
DomainRecord :: Id -> DNSType -> String -> String -> Maybe Double -> Maybe Int -> Maybe Double -> DomainRecord
[recordId] :: DomainRecord -> Id
[recordType] :: DomainRecord -> DNSType
[recordName] :: DomainRecord -> String
[recordData] :: DomainRecord -> String
[recordPriority] :: DomainRecord -> Maybe Double
[recordPort] :: DomainRecord -> Maybe Int
[recordWeight] :: DomainRecord -> Maybe Double
failParse :: (Show a1, Monad m) => a1 -> m a
instance GHC.Show.Show Network.DO.Types.DomainRecord
instance GHC.Generics.Generic Network.DO.Types.DNSType
instance GHC.Read.Read Network.DO.Types.DNSType
instance GHC.Show.Show Network.DO.Types.DNSType
instance GHC.Show.Show Network.DO.Types.Domain
instance GHC.Show.Show Network.DO.Types.Action
instance GHC.Show.Show Network.DO.Types.ActionResult
instance GHC.Show.Show Network.DO.Types.ActionType
instance GHC.Show.Show Network.DO.Types.ActionStatus
instance GHC.Show.Show Network.DO.Types.Size
instance GHC.Show.Show Network.DO.Types.Key
instance GHC.Show.Show Network.DO.Types.Image
instance GHC.Show.Show Network.DO.Types.ImageType
instance GHC.Show.Show Network.DO.Types.Droplet
instance GHC.Show.Show Network.DO.Types.Networks
instance GHC.Generics.Generic Network.DO.Types.Networks
instance GHC.Show.Show (Network.DO.Types.Network a)
instance GHC.Classes.Eq Network.DO.Types.NetType
instance GHC.Show.Show Network.DO.Types.NetType
instance GHC.Show.Show Network.DO.Types.Status
instance GHC.Classes.Eq Network.DO.Types.Status
instance GHC.Show.Show Network.DO.Types.Date
instance GHC.Show.Show (Network.DO.Types.Bytes a)
instance GHC.Show.Show Network.DO.Types.BoxConfiguration
instance GHC.Classes.Eq Network.DO.Types.SizeSlug
instance GHC.Classes.Ord Network.DO.Types.SizeSlug
instance GHC.Enum.Enum Network.DO.Types.SizeSlug
instance GHC.Read.Read Network.DO.Types.ToolConfiguration
instance GHC.Show.Show Network.DO.Types.ToolConfiguration
instance GHC.Read.Read Network.DO.Types.Error
instance GHC.Show.Show Network.DO.Types.Error
instance GHC.Classes.Eq Network.DO.Types.Error
instance Data.Default.Class.Default Network.DO.Types.ToolConfiguration
instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.Region
instance GHC.Show.Show Network.DO.Types.Region
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Region
instance GHC.Show.Show Network.DO.Types.SizeSlug
instance GHC.Read.Read Network.DO.Types.SizeSlug
instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.SizeSlug
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.SizeSlug
instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.BoxConfiguration
instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Bytes Network.DO.Types.Mega)
instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Bytes Network.DO.Types.Giga)
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Date
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Status
instance Data.Aeson.Types.FromJSON.FromJSON Data.IP.Addr.IP
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.NetType
instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Network Network.DO.Types.V4)
instance Data.Aeson.Types.FromJSON.FromJSON (Network.DO.Types.Network Network.DO.Types.V6)
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Networks
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Droplet
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ImageType
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Image
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Key
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Size
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ActionResult
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ActionStatus
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.ActionType
instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.ActionType
instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.Action
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.Domain
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.DNSType
instance Data.Aeson.Types.ToJSON.ToJSON Network.DO.Types.DNSType
instance Data.Aeson.Types.FromJSON.FromJSON Network.DO.Types.DomainRecord
module Network.DO.Net.Common
rootURI :: String
apiVersion :: String
(>) :: String -> String -> String
toURI :: String -> URI
toList :: (FromJSON a) => Text -> Value -> [a]
authorisation :: String -> Options
class Listable a
listEndpoint :: Listable a => Proxy a -> String
listField :: Listable a => Proxy a -> Text
queryList :: (ComonadEnv ToolConfiguration w, Monad m, Listable b, FromJSON b) => Proxy b -> w a -> (RESTT m [b], w a)
module Network.DO.Droplets.Utils
-- | Lookup (first) public IP for given Droplet, if any.
publicIP :: Droplet -> Maybe IP
-- | Find the first droplet that matches given Id or name
findByIdOrName :: String -> [Droplet] -> [Droplet]
module Network.DO.Pretty
class (Show a) => Pretty a where pretty = text . show
pretty :: Pretty a => a -> Doc
outputResult :: (Pretty a, MonadIO m) => a -> m ()
instance Network.DO.Pretty.Pretty ()
instance (Network.DO.Pretty.Pretty a, Network.DO.Pretty.Pretty b) => Network.DO.Pretty.Pretty (Data.Either.Either a b)
instance Network.DO.Pretty.Pretty a => Network.DO.Pretty.Pretty (GHC.Base.Maybe a)
instance Network.DO.Pretty.Pretty GHC.Types.Char
instance Network.DO.Pretty.Pretty Network.DO.Types.Error
instance Network.DO.Pretty.Pretty Network.DO.Types.Date
instance Network.DO.Pretty.Pretty Network.DO.Types.Droplet
instance Network.DO.Pretty.Pretty Network.DO.Types.Status
instance Network.DO.Pretty.Pretty Network.DO.Types.NetType
instance Network.DO.Pretty.Pretty Data.IP.Addr.IP
instance Network.DO.Pretty.Pretty Network.DO.Types.Region
instance Network.DO.Pretty.Pretty Network.DO.Types.Networks
instance Network.DO.Pretty.Pretty (Network.DO.Types.Network a)
instance Network.DO.Pretty.Pretty (Network.DO.Types.Bytes Network.DO.Types.Giga)
instance Network.DO.Pretty.Pretty (Network.DO.Types.Bytes Network.DO.Types.Mega)
instance Network.DO.Pretty.Pretty a => Network.DO.Pretty.Pretty [a]
instance Network.DO.Pretty.Pretty Network.DO.Types.Key
instance Network.DO.Pretty.Pretty Network.DO.Types.Image
instance Network.DO.Pretty.Pretty Network.DO.Types.TransferRate
instance Network.DO.Pretty.Pretty Network.DO.Types.SizeSlug
instance Network.DO.Pretty.Pretty Network.DO.Types.Size
instance Network.DO.Pretty.Pretty Network.DO.Types.ActionResult
module Network.DO.Pairing
class (Functor f, Functor g) => Pairing f g
pair :: Pairing f g => (a -> b -> r) -> f a -> g b -> r
class (Functor f, Functor g, Monad m) => PairingM f g m
pairM :: PairingM f g m => (a -> b -> m r) -> f a -> g b -> m r
pairEffect :: (Pairing f g, Comonad w, Monad m) => (a -> b -> r) -> CofreeT f w a -> FreeT g m b -> m r
pairEffectM :: (PairingM f g m, Comonad w) => (a -> b -> m r) -> CofreeT f w (m a) -> FreeT g m b -> m r
pairEffect' :: (Pairing f g, Comonad w, Monad m) => (a -> b -> m r) -> CofreeT f w a -> FreeT g m b -> m r
injr :: (Monad m, Functor f, Functor g) => g a -> FreeT (Sum f g) m a
injl :: (Monad m, Functor f, Functor g) => f a -> FreeT (Sum f g) m a
instance Network.DO.Pairing.Pairing Data.Functor.Identity.Identity Data.Functor.Identity.Identity
instance Network.DO.Pairing.Pairing ((->) a) ((,) a)
instance Network.DO.Pairing.Pairing ((,) a) ((->) a)
instance GHC.Base.Monad m => Network.DO.Pairing.PairingM ((,) (m a)) ((->) a) m
instance (GHC.Base.Monad m, Network.DO.Pairing.PairingM f h m, Network.DO.Pairing.PairingM g k m) => Network.DO.Pairing.PairingM (Data.Functor.Sum.Sum f g) (Data.Functor.Product.Product h k) m
instance (GHC.Base.Monad m, Network.DO.Pairing.PairingM h f m, Network.DO.Pairing.PairingM k g m) => Network.DO.Pairing.PairingM (Data.Functor.Product.Product h k) (Data.Functor.Sum.Sum f g) m
module Network.DO.Droplets.Commands
-- | Available commands for droplets
data DropletCommands a
type DropletCommandsT = FreeT DropletCommands
type CoDropletCommandsT m = CofreeT (CoDropletCommands m)
-- | Comonadic interpreter for DropletCommands
data CoDropletCommands m k
CoDropletCommands :: (m [Droplet], k) -> (BoxConfiguration -> (m (Result Droplet), k)) -> (Id -> (m (Maybe String), k)) -> (Id -> Action -> (m (Result ActionResult), k)) -> (Id -> Id -> (m (Result ActionResult), k)) -> (Id -> (m [Image], k)) -> (Droplet -> (m (Result ()), k)) -> (Id -> (m (Result Droplet), k)) -> CoDropletCommands m k
[listDropletsH] :: CoDropletCommands m k -> (m [Droplet], k)
[createDropletH] :: CoDropletCommands m k -> BoxConfiguration -> (m (Result Droplet), k)
[destroyDropletH] :: CoDropletCommands m k -> Id -> (m (Maybe String), k)
[actionDropletH] :: CoDropletCommands m k -> Id -> Action -> (m (Result ActionResult), k)
[getActionH] :: CoDropletCommands m k -> Id -> Id -> (m (Result ActionResult), k)
[listSnapshotsH] :: CoDropletCommands m k -> Id -> (m [Image], k)
[consoleH] :: CoDropletCommands m k -> Droplet -> (m (Result ()), k)
[showDropletH] :: CoDropletCommands m k -> Id -> (m (Result Droplet), k)
listDroplets :: DropletCommands [Droplet]
createDroplet :: BoxConfiguration -> DropletCommands (Result Droplet)
destroyDroplet :: Id -> DropletCommands (Maybe String)
dropletAction :: Id -> Action -> DropletCommands (Result ActionResult)
showDroplet :: Id -> DropletCommands (Result Droplet)
getAction :: Id -> Id -> DropletCommands (Result ActionResult)
listDropletSnapshots :: Id -> DropletCommands [Image]
dropletConsole :: Droplet -> DropletCommands (Result ())
instance GHC.Base.Functor (Network.DO.Droplets.Commands.CoDropletCommands m)
instance GHC.Base.Functor Network.DO.Droplets.Commands.DropletCommands
instance GHC.Base.Monad m => Network.DO.Pairing.PairingM (Network.DO.Droplets.Commands.CoDropletCommands m) Network.DO.Droplets.Commands.DropletCommands m
-- | Network interpreter for Droplets specific API
module Network.DO.Droplets.Net
dropletCommandsInterpreter :: (MonadIO m, ComonadEnv ToolConfiguration w) => w a -> CoDropletCommands (RESTT m) (w a)
instance Network.DO.Net.Common.Listable Network.DO.Types.Droplet
module Network.DO.Commands
data DO a
ListKeys :: ([Key] -> a) -> DO a
ListSizes :: ([Size] -> a) -> DO a
ListImages :: ([Image] -> a) -> DO a
ListRegions :: ([Region] -> a) -> DO a
type DOT = FreeT DO
listKeys :: DO [Key]
listSizes :: DO [Size]
listImages :: DO [Image]
listRegions :: DO [Region]
data CoDO m k
CoDO :: (m [Key], k) -> (m [Size], k) -> (m [Image], k) -> (m [Region], k) -> CoDO m k
[listKeysH] :: CoDO m k -> (m [Key], k)
[listSizesH] :: CoDO m k -> (m [Size], k)
[listImagesH] :: CoDO m k -> (m [Image], k)
[listRegionsH] :: CoDO m k -> (m [Region], k)
type CoDOT m = CofreeT (CoDO m)
instance GHC.Base.Functor (Network.DO.Commands.CoDO m)
instance GHC.Base.Functor Network.DO.Commands.DO
instance GHC.Base.Monad m => Network.DO.Pairing.PairingM (Network.DO.Commands.CoDO m) Network.DO.Commands.DO m
-- | Interpreter for accessing DO API through the web using [wreq
-- http://www.serpentine.com/wreq].
module Network.DO.Net
mkDOClient :: (MonadIO m) => ToolConfiguration -> CofreeT (Product (CoDO (RESTT m)) (CoDropletCommands (RESTT m))) (Env ToolConfiguration) (RESTT m ())
instance Network.DO.Net.Common.Listable Network.DO.Types.Key
instance Network.DO.Net.Common.Listable Network.DO.Types.Size
instance Network.DO.Net.Common.Listable Network.DO.Types.Image
instance Network.DO.Net.Common.Listable Network.DO.Types.Region