hetzner 0.3.0.0 → 0.4.0.0
raw patch · 4 files changed
+93/−6 lines, 4 filesdep +blaze-htmldep +directorydep ~basenew-component:exe:hetzner-docsPVP ok
version bump matches the API change (PVP)
Dependencies added: blaze-html, directory
Dependency ranges changed: base
API changes (from Hackage documentation)
- Hetzner.Cloud: getServerTypes :: Token -> IO [ServerType]
+ Hetzner.Cloud: getServerTypes :: Token -> Maybe Int -> IO (WithMeta "server_types" [ServerType])
Files
- apps/Docs.hs +68/−0
- changelog.md +11/−2
- hetzner.cabal +9/−1
- src/Hetzner/Cloud.hs +5/−3
+ apps/Docs.hs view
@@ -0,0 +1,68 @@++module Main (main) where++-- base+import Data.Foldable (forM_)+import Data.List (sortOn)+-- hetzner+import Hetzner.Cloud qualified as Hetzner+-- bytestring+import qualified Data.ByteString.Lazy as ByteString+-- directory+import System.Directory (createDirectoryIfMissing)+-- blaze-html+import Text.Blaze.Html (toHtml, preEscapedToHtml, (!))+import Text.Blaze.Html.Renderer.Utf8 (renderHtml)+import Text.Blaze.Html5 qualified as H+import Text.Blaze.Html5.Attributes qualified as A+-- time+import Data.Time.Clock.POSIX (getPOSIXTime)++main :: IO ()+main = do+ mtoken <- Hetzner.getTokenFromEnv+ token <- maybe (fail "HETZNER_API_TOKEN is not set") pure mtoken+ now <- round <$> getPOSIXTime :: IO Int+ -- Server types+ let dir = "public/server-types"+ createDirectoryIfMissing True dir+ serverTypes0 <- Hetzner.streamToList $ Hetzner.streamPages $ Hetzner.getServerTypes token+ let maxPrice = maximum . (:) 0+ . fmap (Hetzner.grossPrice . Hetzner.monthlyPrice)+ . Hetzner.serverPricing+ let serverTypes = sortOn maxPrice $ filter (not . Hetzner.serverDeprecated) serverTypes0+ ByteString.writeFile (dir ++ "/index.html") $ renderHtml $ H.docTypeHtml $ do+ H.head $ do+ H.title "Hetzner Server Type List"+ H.link ! A.rel "stylesheet" ! A.href "https://use.typekit.net/yxf7kgr.css"+ H.link ! A.rel "stylesheet" ! A.href "../common.css"+ H.body $ do+ H.h1 "Hetzner Server Type List"+ H.hr+ H.table $ do+ H.tr ! A.class_ "hrow" $ do+ H.th "Server ID"+ H.th "Name"+ H.th "Architecture"+ H.th "Cores"+ H.th "Memory"+ H.th "Disk"+ H.th "CPU Type"+ H.th "Max Monthly Price"+ forM_ serverTypes $ \serverType -> H.tr $ do+ H.td $ (\(Hetzner.ServerTypeID i) -> toHtml i) $ Hetzner.serverTypeID serverType+ H.td $ toHtml $ Hetzner.serverTypeName serverType+ H.td $ toHtml $ show $ Hetzner.serverArchitecture serverType+ H.td $ toHtml $ Hetzner.serverCores serverType+ H.td $ toHtml $ show (Hetzner.serverMemory serverType) ++ " GB"+ H.td $ toHtml $ show (Hetzner.serverDisk serverType) ++ " GB"+ H.td $ toHtml $ case Hetzner.serverCPUType serverType of+ Hetzner.SharedCPU -> "Shared" :: String+ Hetzner.DedicatedCPU -> "Dedicated"+ H.td $ toHtml $ show (maxPrice serverType) ++ " €"+ H.p $ H.em $ do+ "Updated "+ H.script $ preEscapedToHtml $+ "const date = new Date(" ++ show (now * 1000) ++ "); "+ ++ "document.write(date.toLocaleString());"+ "."
changelog.md view
@@ -1,7 +1,16 @@+## 0.4.0.0+* Fix `getServerTypes`. It wasn't returning them all.+ Unfortunately, the type signature had to change.+* Add `hetzner-docs` executable.+ ## 0.3.0.0 * Added support for the following server actions:- `setServerReverseDNS`, `powerOnServer`, `powerOffServer`, `shutdownServer`,- `rebootServer`, `changeServerType`.+ - `setServerReverseDNS`+ - `powerOnServer`+ - `powerOffServer`+ - `shutdownServer`+ - `rebootServer`+ - `changeServerType` * Removed `getActions`, as it has been discontinued by Hetzner. ## 0.2.1.1
hetzner.cabal view
@@ -2,7 +2,7 @@ category: Cloud synopsis: Hetzner Cloud and DNS library. description: Hetzner Cloud and DNS library. Check the readme and documentation for more details.-version: 0.3.0.0+version: 0.4.0.0 cabal-version: 1.18 build-type: Simple author: Daniel Casanueva (daniel.casanueva `at` proton.me)@@ -43,3 +43,11 @@ ghc-options: -Wall -Wunused-packages default-extensions: ImportQualifiedPost, OverloadedStrings build-depends: base, hetzner++executable hetzner-docs+ default-language: Haskell2010+ hs-source-dirs: apps+ main-is: Docs.hs+ ghc-options: -Wall -Wunused-packages+ default-extensions: ImportQualifiedPost, OverloadedStrings+ build-depends: base, bytestring, directory, blaze-html, hetzner, time
src/Hetzner/Cloud.hs view
@@ -1512,9 +1512,11 @@ <*> o .: "storage_type" -- | Get all server types.-getServerTypes :: Token -> IO [ServerType]-getServerTypes token = withoutKey @"server_types" <$>- cloudQuery "GET" "/server_types" noBody token Nothing+--+-- A regularly updated list of server types can be browsed+-- [here](https://daniel-casanueva.gitlab.io/hetzner/server-types).+getServerTypes :: Token -> Maybe Int -> IO (WithMeta "server_types" [ServerType])+getServerTypes = cloudQuery "GET" "/server_types" noBody ---------------------------------------------------------------------------------------------------- -- SSH Keys