License | BSD3 |
---|---|
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
This package contains some helpers to create and configure Linode instances. They all require an API key, which can be created on the Linode website.
Usage example. We want to create one Linode instance in Atlanta with 1GB of RAM:
import Network.Linode import Data.List (find) import qualified System.Process as P import Data.Foldable (traverse_) import Data.Monoid ((<>)) main :: IO() main = do apiKey <- fmap (head . words) (readFile "apiKey") sshPublicKey <- readFile "id_rsa.pub" let options = defaultLinodeCreationOptions { datacenterSelect = find ((=="atlanta") . datacenterName), planSelect = find ((=="Linode 1024") . planName), sshKey = Just sshPublicKey } c <- createLinode apiKey True options case c of Left err -> print err Right linode -> do traverse_ (\a -> waitForSSH a >> setup a) (publicAddress linode) print linode setup address = P.callCommand $ "scp yourfile root@" <> ip address <> ":/root"
You should see something like this:
Creating empty linode (Linode 1024 at atlanta) Creating disk (24448 MB) .............. Creating swap (128 MB) ........ Creating config Booting ...................................... Booted linode 1481198
And get something like that:
Linode { linodeId = LinodeId {unLinodeId = 1481198}, linodeConfigId = ConfigId {unConfigId = 2251152}, linodeDatacenterName = "atlanta", linodePassword = "We4kP4ssw0rd", linodeAddresses = [Address {ip = "45.79.194.121", rdnsName = "li1293-121.members.linode.com"}]}
- createLinode :: ApiKey -> Bool -> LinodeCreationOptions -> IO (Either LinodeError Linode)
- createCluster :: ApiKey -> LinodeCreationOptions -> Int -> Bool -> IO (Either [LinodeError] [Linode])
- defaultLinodeCreationOptions :: LinodeCreationOptions
- waitForSSH :: Address -> IO ()
- deleteInstance :: ApiKey -> LinodeId -> IO (Either LinodeError DeletedLinode)
- deleteCluster :: ApiKey -> [LinodeId] -> IO ([LinodeError], [DeletedLinode])
- getAccountInfo :: ApiKey -> ExceptT LinodeError IO AccountInfo
- getDatacenters :: ApiKey -> ExceptT LinodeError IO [Datacenter]
- getDistributions :: ApiKey -> ExceptT LinodeError IO [Distribution]
- getInstances :: ApiKey -> ExceptT LinodeError IO [Instance]
- getKernels :: ApiKey -> ExceptT LinodeError IO [Kernel]
- getPlans :: ApiKey -> ExceptT LinodeError IO [Plan]
- getIpList :: ApiKey -> LinodeId -> ExceptT LinodeError IO [Address]
- createConfig :: ApiKey -> LinodeId -> KernelId -> String -> [DiskId] -> ExceptT LinodeError IO CreatedConfig
- createDiskFromDistribution :: ApiKey -> LinodeId -> DistributionId -> String -> Int -> String -> Maybe String -> ExceptT LinodeError IO CreatedDisk
- createDisklessLinode :: ApiKey -> DatacenterId -> PlanId -> PaymentTerm -> ExceptT LinodeError IO CreatedLinode
- createSwapDisk :: ApiKey -> LinodeId -> String -> Int -> ExceptT LinodeError IO CreatedDisk
- createDisk :: ApiKey -> LinodeId -> String -> DiskType -> Int -> ExceptT LinodeError IO CreatedDisk
- boot :: ApiKey -> LinodeId -> ConfigId -> ExceptT LinodeError IO BootedInstance
- jobList :: ApiKey -> LinodeId -> ExceptT LinodeError IO [WaitingJob]
- waitUntilCompletion :: ApiKey -> LinodeId -> Bool -> IO ()
- select :: ApiKey -> LinodeCreationOptions -> ExceptT LinodeError IO (Datacenter, Distribution, Plan, Kernel)
- publicAddress :: Linode -> Maybe Address
- exampleCreateOneLinode :: IO (Maybe Linode)
- exampleCreateTwoLinodes :: IO (Maybe [Linode])
- module Network.Linode.Types
Most common operations
createLinode :: ApiKey -> Bool -> LinodeCreationOptions -> IO (Either LinodeError Linode) Source
Create a Linode instance and boot it.
createCluster :: ApiKey -> LinodeCreationOptions -> Int -> Bool -> IO (Either [LinodeError] [Linode]) Source
Create a Linode cluster.
defaultLinodeCreationOptions :: LinodeCreationOptions Source
Default options to create an instance. Please customize the security options.
waitForSSH :: Address -> IO () Source
Wait until an ssh connexion is possible, then add the Linode's ip in known_hosts.
A newly created Linode is unreachable during a few seconds.
deleteInstance :: ApiKey -> LinodeId -> IO (Either LinodeError DeletedLinode) Source
Delete a Linode instance.
deleteCluster :: ApiKey -> [LinodeId] -> IO ([LinodeError], [DeletedLinode]) Source
Delete a list of Linode instances.
Lower level API calls
getAccountInfo :: ApiKey -> ExceptT LinodeError IO AccountInfo Source
Read your global account information: network usage, billing state and billing method.
getDatacenters :: ApiKey -> ExceptT LinodeError IO [Datacenter] Source
Read all Linode datacenters: dallas, fremont, atlanta, newark, london, tokyo, singapore, frankfurt
getDistributions :: ApiKey -> ExceptT LinodeError IO [Distribution] Source
Read all available Linux distributions. For example, Debian 8.1 has id 140.
getInstances :: ApiKey -> ExceptT LinodeError IO [Instance] Source
Read detailed information about all your instances.
getKernels :: ApiKey -> ExceptT LinodeError IO [Kernel] Source
Read all available Linux kernels.
getPlans :: ApiKey -> ExceptT LinodeError IO [Plan] Source
Read all plans offered by Linode. A plan specifies the available CPU, RAM, network usage and pricing of an instance. The smallest plan is Linode 1024.
getIpList :: ApiKey -> LinodeId -> ExceptT LinodeError IO [Address] Source
Read all IP addresses of an instance.
createConfig :: ApiKey -> LinodeId -> KernelId -> String -> [DiskId] -> ExceptT LinodeError IO CreatedConfig Source
Create a Linode Config (a bag of instance options).
createDiskFromDistribution :: ApiKey -> LinodeId -> DistributionId -> String -> Int -> String -> Maybe String -> ExceptT LinodeError IO CreatedDisk Source
Create a disk from a supported Linux distribution. Size in MB.
createDisklessLinode :: ApiKey -> DatacenterId -> PlanId -> PaymentTerm -> ExceptT LinodeError IO CreatedLinode Source
Create a Linode instance with no disk and no configuration. You probably want createLinode instead.
createSwapDisk :: ApiKey -> LinodeId -> String -> Int -> ExceptT LinodeError IO CreatedDisk Source
Create a swap partition.
createDisk :: ApiKey -> LinodeId -> String -> DiskType -> Int -> ExceptT LinodeError IO CreatedDisk Source
Create a partition.
boot :: ApiKey -> LinodeId -> ConfigId -> ExceptT LinodeError IO BootedInstance Source
Boot a Linode instance.
jobList :: ApiKey -> LinodeId -> ExceptT LinodeError IO [WaitingJob] Source
List of pending jobs for this Linode instance.
Helpers
waitUntilCompletion :: ApiKey -> LinodeId -> Bool -> IO () Source
Wait until all operations on one instance are done.
select :: ApiKey -> LinodeCreationOptions -> ExceptT LinodeError IO (Datacenter, Distribution, Plan, Kernel) Source
Select a Datacenter, a Plan, a Linux distribution and kernel from all Linode offering.
publicAddress :: Linode -> Maybe Address Source
Pick one public address of the Linode Instance
Examples
exampleCreateOneLinode :: IO (Maybe Linode) Source
Example of Linode creation. It expects the apiKey and id_rsa.pub files in the current directory.
exampleCreateTwoLinodes :: IO (Maybe [Linode]) Source
Example of Linodes creation. It expects the apiKey and id_rsa.pub files in the current directory.
module Network.Linode.Types