packages feed

DigitalOcean 0.1.0.0 → 0.1.1.0

raw patch · 5 files changed

+58/−10 lines, 5 filesdep −randomdep ~mtlPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: random

Dependency ranges changed: mtl

API changes (from Hackage documentation)

+ Net.DigitalOcean.Images: instance FromJSON (Maybe Image)
+ Net.DigitalOcean.Regions: instance FromJSON (Maybe Region)
- Net.DigitalOcean.Droplets: drpImage :: Lens' Droplet Image
+ Net.DigitalOcean.Droplets: drpImage :: Lens' Droplet (Maybe Image)
- Net.DigitalOcean.Droplets: drpRegion :: Lens' Droplet Region
+ Net.DigitalOcean.Droplets: drpRegion :: Lens' Droplet (Maybe Region)
- Net.DigitalOcean.Droplets: krnId :: Lens' Kernel Text
+ Net.DigitalOcean.Droplets: krnId :: Lens' Kernel Int
- Net.DigitalOcean.Regions: Region :: !Text -> !Text -> ![Text] -> ![Text] -> !Bool -> Region
+ Net.DigitalOcean.Regions: Region :: !Text -> !Text -> ![Text] -> ![Text] -> Maybe Bool -> Region
- Net.DigitalOcean.Regions: _rgnAvailable :: Region -> !Bool
+ Net.DigitalOcean.Regions: _rgnAvailable :: Region -> Maybe Bool
- Net.DigitalOcean.Regions: rgnAvailable :: Lens' Region Bool
+ Net.DigitalOcean.Regions: rgnAvailable :: Lens' Region (Maybe Bool)

Files

DigitalOcean.cabal view
@@ -1,5 +1,5 @@ name:                DigitalOcean-version:             0.1.0.0+version:             0.1.1.0 synopsis:            A client library for the DigitalOcean API license:             AGPL-3 license-file:        LICENSE@@ -9,7 +9,8 @@ build-type:          Simple cabal-version:       >=1.10 extra-source-files:  README.md,-                     examples/SSHKeyInfo.hs+                     examples/SSHKeyInfo.hs,+                     examples/CreateDroplet.hs  library   exposed-modules:     Net.DigitalOcean,@@ -25,10 +26,8 @@   ghc-options:         -Wall   build-depends:       base >=4.7 && <4.8,                        text >= 1.2.0.3 && < 1.3,-                       -- Require Control.Monad.Except-                       mtl >= 2.2.1,                        -- Transative dependencies I don't want to constrain-                       lens, wreq, aeson, containers, random,+                       lens, wreq, aeson, containers, mtl,                        bytestring, unordered-containers, vector,                        transformers, exceptions   hs-source-dirs:      src
+ examples/CreateDroplet.hs view
@@ -0,0 +1,32 @@+module Main where++import qualified Data.Text as T+import qualified Net.DigitalOcean as DO+import System.Environment (getArgs)+import Text.Printf (printf)+import Control.Lens++main :: IO ()+main = do+  auth <- fmap head getArgs++  putStrLn . show . getSSHKey . DO.Config . T.pack $ auth++getSSHKey :: T.Text -> DO.Config -> IO DO.SSHKey+getSSHKey keyName c =+  DO.getSSHKeys c >>= \keys ->+  case find (\k -> k ^. DO.keyName == keyName) keys of+    Just k -> return k+    Nothing -> error "No key found"++createDroplet c =+  let region = "nyc3"+      sshKeyName = "Milo"+      image = "ubuntu-14-04-x64"+      size = "512mb"+      dropletName = "test"++  sshKey <- getSSHKey sshKeyName c+  let dco = (DO.defaultDCO dropletName region size image)+            & DO.dcoSSHKeys ?~ [sshKey ^. DO.keyFingerprint]+  DO.createDroplet dco c
src/Net/DigitalOcean/Droplets.hs view
@@ -114,7 +114,7 @@   parseJSON _ = error "network must be object"  data Kernel = Kernel-              { _krnId :: !T.Text+              { _krnId :: !Int               , _krnName :: !T.Text               , _krnVersion :: !T.Text               } deriving (Show, Eq)@@ -139,8 +139,8 @@                , _drpBackupIds :: ![T.Text]                , _drpSnapshotIds :: ![T.Text]                , _drpFeatures :: ![T.Text]-               , _drpRegion :: Region-               , _drpImage :: Image+               , _drpRegion :: Maybe Region+               , _drpImage :: Maybe Image                , _drpNetworks :: [Network]                , _drpKernel :: Kernel                } deriving (Show, Eq)
src/Net/DigitalOcean/Images.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleInstances #-} module Net.DigitalOcean.Images (   Image(..)   , getImages@@ -14,6 +15,7 @@   ) where import qualified Data.Text as T import qualified Data.Map as M+import qualified Data.HashMap.Strict as HM import qualified Network.Wreq as W import Data.Aeson(FromJSON(..), Value(..), (.:)) import Control.Applicative@@ -50,6 +52,13 @@                          x .: "created_at" <*>                          x .: "min_disk_size"   parseJSON _ = fail "image must be object"+++instance FromJSON (Maybe Image) where+  parseJSON xs@(Object x)+    | HM.null x = return Nothing+    | otherwise = fmap Just . parseJSON $ xs+  parseJSON _ = return Nothing  imagesEndpoint :: String imagesEndpoint = "/v2/images/"
src/Net/DigitalOcean/Regions.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleInstances #-} module Net.DigitalOcean.Regions (   Region(..)   , getRegions@@ -6,7 +7,8 @@   , rgnName, rgnSlug, rgnSizes, rgnFeatures, rgnAvailable   ) where import qualified Data.Text as T-import Data.Aeson(FromJSON(..), Value(..), (.:))+import qualified Data.HashMap.Strict as HM+import Data.Aeson(FromJSON(..), Value(..), (.:), fromJSON) import Control.Applicative import Control.Lens hiding (Action) @@ -22,7 +24,7 @@               , _rgnSlug :: !T.Text               , _rgnSizes :: ![T.Text]               , _rgnFeatures :: ![T.Text]-              , _rgnAvailable :: !Bool+              , _rgnAvailable :: Maybe Bool               } deriving (Show, Eq) makeLenses ''Region @@ -34,6 +36,12 @@                          x .: "features" <*>                          x .: "available"   parseJSON _ = fail "region must be object"++instance FromJSON (Maybe Region) where+  parseJSON xs@(Object x)+    | HM.null x = return Nothing+    | otherwise = fmap Just . parseJSON $ xs+  parseJSON _ = return Nothing  -- | Returns a list of all the visible Digital Ocean regions --