-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | CLI tool to easily spin up and control compute instances in various cloud environments -- -- CLI tool to easily spin up and control compute instances in various -- cloud environments @package cloudy @version 0.1.0.1 module Cloudy.Cli.Aws data AwsCliOpts AwsCreate :: AwsCreateCliOpts -> AwsCliOpts AwsListInstanceTypes :: AwsListInstanceTypesCliOpts -> AwsCliOpts data AwsCreateCliOpts AwsCreateCliOpts :: AwsCreateCliOpts data AwsListInstanceTypesCliOpts AwsListInstanceTypesCliOpts :: AwsListInstanceTypesCliOpts awsCliOptsParser :: Parser AwsCliOpts awsCreateCliOptsParser :: Parser AwsCreateCliOpts awsListInstanceTypesCliOptsParser :: Parser AwsListInstanceTypesCliOpts instance GHC.Show.Show Cloudy.Cli.Aws.AwsCreateCliOpts instance GHC.Show.Show Cloudy.Cli.Aws.AwsListInstanceTypesCliOpts instance GHC.Show.Show Cloudy.Cli.Aws.AwsCliOpts module Cloudy.Cli.Utils -- | This lifts a option Parser to a Parser of Maybe, -- allowing you to specify a default value. -- -- Given a call like: -- --
--   maybeOpt "Which foobar to use" "bazqux" strOption (short 'f' <> metavar "FOOBAR") :: Parser (Maybe Text)
--   
-- -- this returns Nothing if the user doesn't specify the -- -f option, and Just if the user does. It also shows -- that the default values is "bazqux". -- -- Using maybeOpt is different than just using the value -- Mod in order to set a default value, since maybeOpt -- returns Nothing if the option was not given on the command line -- (but it still shows the default value in the --help output. maybeOpt :: Show a => String -> a -> (Mod f a -> Parser a) -> Mod f a -> Parser (Maybe a) module Cloudy.InstanceSetup.Types data InstanceSetup InstanceSetup :: Text -> InstanceSetupData -> Text -> InstanceSetup [$sel:name:InstanceSetup] :: InstanceSetup -> Text [$sel:instanceSetupData:InstanceSetup] :: InstanceSetup -> InstanceSetupData [$sel:rawInstanceSetupData:InstanceSetup] :: InstanceSetup -> Text data InstanceSetupData InstanceSetupData :: Text -> Text -> InstanceSetupData [$sel:shortDescription:InstanceSetupData] :: InstanceSetupData -> Text [$sel:cloudInitUserData:InstanceSetupData] :: InstanceSetupData -> Text instance Control.DeepSeq.NFData Cloudy.InstanceSetup.Types.InstanceSetupData instance GHC.Show.Show Cloudy.InstanceSetup.Types.InstanceSetupData instance GHC.Generics.Generic Cloudy.InstanceSetup.Types.InstanceSetupData instance GHC.Classes.Eq Cloudy.InstanceSetup.Types.InstanceSetupData instance Control.DeepSeq.NFData Cloudy.InstanceSetup.Types.InstanceSetup instance GHC.Show.Show Cloudy.InstanceSetup.Types.InstanceSetup instance GHC.Generics.Generic Cloudy.InstanceSetup.Types.InstanceSetup instance GHC.Classes.Eq Cloudy.InstanceSetup.Types.InstanceSetup instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.InstanceSetup.Types.InstanceSetup instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.InstanceSetup.Types.InstanceSetup instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.InstanceSetup.Types.InstanceSetupData instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.InstanceSetup.Types.InstanceSetupData module Cloudy.NameGen nameWords :: [Text] randomName :: IO Text instanceNameGen :: IO Text module Cloudy.Path getCloudyConfDir :: IO FilePath getCloudyConfFilePath :: IO FilePath getCloudyInstanceSetupsDir :: IO FilePath getCloudyDbPath :: IO FilePath module Cloudy.LocalConfFile data LocalConfFileScalewayOpts LocalConfFileScalewayOpts :: Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> LocalConfFileScalewayOpts [$sel:accessKey:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text [$sel:secretKey:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text [$sel:defaultOrganizationId:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text [$sel:defaultProjectId:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text [$sel:defaultZone:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text [$sel:defaultInstanceType:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text [$sel:defaultImageId:LocalConfFileScalewayOpts] :: LocalConfFileScalewayOpts -> Maybe Text data LocalConfFileOpts LocalConfFileOpts :: Maybe LocalConfFileScalewayOpts -> LocalConfFileOpts [$sel:scaleway:LocalConfFileOpts] :: LocalConfFileOpts -> Maybe LocalConfFileScalewayOpts defaultLocalConfFileOpts :: LocalConfFileOpts readLocalConfFile :: IO LocalConfFileOpts instance GHC.Show.Show Cloudy.LocalConfFile.LocalConfFileScalewayOpts instance GHC.Show.Show Cloudy.LocalConfFile.LocalConfFileOpts instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.LocalConfFile.LocalConfFileOpts instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.LocalConfFile.LocalConfFileScalewayOpts module Cloudy.InstanceSetup rawBuiltInInstanceSetups :: [(FilePath, ByteString)] builtInInstanceSetups :: [InstanceSetup] parseInstanceSetup :: FilePath -> ByteString -> Either ParseException InstanceSetup getUserInstanceSetups :: IO [InstanceSetup] yamlFileToInstanceSetup :: FilePath -> IO InstanceSetup -- | Find an InstanceSetup from within the built-in and user-defined -- instance setups. findInstanceSetup :: Text -> IO (Maybe InstanceSetup) module Cloudy.Db createLocalDatabase :: Connection -> IO () withCloudyDb :: (Connection -> IO a) -> IO a withSqliteConn :: FilePath -> (Connection -> IO a) -> IO a data QuerySingleErr QuerySingleErr :: Query -> String -> QuerySingleErr querySingleErr_ :: FromRow r => Connection -> Query -> IO r data OnlyOne r OnlyOne :: r -> OnlyOne r MultipleExist :: OnlyOne r NoneExist :: OnlyOne r querySingle_ :: FromRow r => Connection -> Query -> IO (OnlyOne r) -- | Query on a column with a UNIQUE constraint. Throws an exception if -- multiple values are returned. queryUnique :: (ToRow a, FromRow r) => Connection -> Query -> a -> IO (Maybe r) newtype CloudyInstanceId CloudyInstanceId :: Int64 -> CloudyInstanceId [$sel:unCloudyInstanceId:CloudyInstanceId] :: CloudyInstanceId -> Int64 data CloudyInstance CloudyInstance :: CloudyInstanceId -> Text -> Maybe UTCTime -> Maybe UTCTime -> Maybe InstanceSetup -> CloudyInstance [$sel:id:CloudyInstance] :: CloudyInstance -> CloudyInstanceId [$sel:name:CloudyInstance] :: CloudyInstance -> Text [$sel:createdAt:CloudyInstance] :: CloudyInstance -> Maybe UTCTime [$sel:deletedAt:CloudyInstance] :: CloudyInstance -> Maybe UTCTime [$sel:instanceSetup:CloudyInstance] :: CloudyInstance -> Maybe InstanceSetup -- | newtype to hold the FromField instance for -- InstanceSetup, for use in the FromRow instance for -- CloudyInstance. -- -- The instance_setup column in the cloudy_instance -- table holds a JSON-encoded InstanceSetup value. newtype DbInstanceSetup DbInstanceSetup :: InstanceSetup -> DbInstanceSetup [$sel:unDbInstanceSetup:DbInstanceSetup] :: DbInstanceSetup -> InstanceSetup data ScalewayInstance ScalewayInstance :: CloudyInstanceId -> Text -> Text -> Text -> Text -> ScalewayInstance [$sel:cloudyInstanceId:ScalewayInstance] :: ScalewayInstance -> CloudyInstanceId [$sel:scalewayZone:ScalewayInstance] :: ScalewayInstance -> Text [$sel:scalewayInstanceId:ScalewayInstance] :: ScalewayInstance -> Text [$sel:scalewayIpId:ScalewayInstance] :: ScalewayInstance -> Text [$sel:scalewayIpAddress:ScalewayInstance] :: ScalewayInstance -> Text data InstanceInfo CloudyScalewayInstance :: CloudyInstance -> ScalewayInstance -> InstanceInfo CloudyAwsInstance :: CloudyInstance -> Void -> InstanceInfo cloudyInstanceFromInstanceInfo :: InstanceInfo -> CloudyInstance newCloudyInstance :: Connection -> IO (CloudyInstanceId, Text) -- | Return a cloudy instance matching the given name. This will return an -- instance even if it has already been deleted. findCloudyInstanceByNameWithDeleted :: Connection -> Text -> IO (Maybe CloudyInstance) findCloudyInstanceIdByName :: Connection -> Text -> IO (Maybe CloudyInstanceId) findCloudyInstanceById :: Connection -> CloudyInstanceId -> IO (Maybe CloudyInstance) findAllCloudyInstances :: Connection -> IO [CloudyInstance] setCloudyInstanceDeleted :: Connection -> CloudyInstanceId -> IO () newScalewayInstance :: Connection -> UTCTime -> CloudyInstanceId -> Maybe InstanceSetup -> Text -> Text -> Text -> Text -> IO () findScalewayInstanceByCloudyInstanceId :: Connection -> CloudyInstanceId -> IO (Maybe ScalewayInstance) findAllScalewayInstances :: Connection -> IO [ScalewayInstance] -- | Return a single CloudyInstanceId if there is exactly one in the -- database that is not already deleted. findOnlyOneInstanceId :: Connection -> IO (OnlyOne CloudyInstanceId) utcTimeToSqliteInt :: UTCTime -> Int64 utcTimeFromSqliteInt :: Int64 -> UTCTime instanceInfoForId :: Connection -> CloudyInstanceId -> IO (Maybe InstanceInfo) findAllInstanceInfos :: Connection -> IO [InstanceInfo] data DbInvariantErr CloudyInstanceHasNoProviderInstance :: CloudyInstanceId -> DbInvariantErr CloudyInstanceHasMultipleProviderInstances :: CloudyInstanceId -> DbInvariantErr CloudyInstanceHasNullCreatedAt :: CloudyInstanceId -> DbInvariantErr assertDbInvariants :: Connection -> IO () -- | There needs to be EXACTLY ONE corresponding cloud provider instance -- for each cloudy instance. invariantEveryCloudyInstHasExactlyOneProviderInst :: Connection -> IO [DbInvariantErr] -- | Cloudy instances should always have a created_at value that -- is non-null. -- -- The only time a Cloudy instance can have a created_at value -- that is null is within the Create CLI command. Although this invariant -- should hold both before and after the Create CLI command. invariantCloudyInstCorectDates :: Connection -> IO [DbInvariantErr] instance GHC.Exception.Type.Exception Cloudy.Db.QuerySingleErr instance GHC.Show.Show Cloudy.Db.QuerySingleErr instance GHC.Classes.Eq Cloudy.Db.QuerySingleErr instance GHC.Show.Show r => GHC.Show.Show (Cloudy.Db.OnlyOne r) instance GHC.Base.Functor Cloudy.Db.OnlyOne instance Database.SQLite.Simple.ToField.ToField Cloudy.Db.CloudyInstanceId instance Database.SQLite.Simple.FromField.FromField Cloudy.Db.CloudyInstanceId instance GHC.Show.Show Cloudy.Db.CloudyInstanceId instance GHC.Classes.Ord Cloudy.Db.CloudyInstanceId instance GHC.Classes.Eq Cloudy.Db.CloudyInstanceId instance GHC.Show.Show Cloudy.Db.CloudyInstance instance GHC.Classes.Eq Cloudy.Db.CloudyInstance instance GHC.Show.Show Cloudy.Db.ScalewayInstance instance GHC.Classes.Eq Cloudy.Db.ScalewayInstance instance GHC.Show.Show Cloudy.Db.InstanceInfo instance GHC.Show.Show Cloudy.Db.DbInvariantErr instance Database.SQLite.Simple.FromRow.FromRow Cloudy.Db.ScalewayInstance instance Database.SQLite.Simple.ToRow.ToRow Cloudy.Db.ScalewayInstance instance Database.SQLite.Simple.FromField.FromField Cloudy.Db.DbInstanceSetup instance Database.SQLite.Simple.ToField.ToField Cloudy.Db.DbInstanceSetup instance Database.SQLite.Simple.FromRow.FromRow Cloudy.Db.CloudyInstance module Cloudy.Cmd.Utils data SelectInstBy SelectInstByName :: Text -> SelectInstBy SelectInstById :: CloudyInstanceId -> SelectInstBy SelectInstOnlyOne :: SelectInstBy mkSelectInstBy :: Maybe CloudyInstanceId -> Maybe Text -> IO SelectInstBy findCloudyInstanceIdForSelectInstBy :: Connection -> SelectInstBy -> IO CloudyInstanceId findInstanceInfoForSelectInstBy :: Connection -> SelectInstBy -> IO InstanceInfo instance GHC.Show.Show Cloudy.Cmd.Utils.SelectInstBy module Cloudy.Scaleway data PlainTextNoUTF8 newtype PerPage PerPage :: Int -> PerPage [$sel:unPerPage:PerPage] :: PerPage -> Int newtype PageNum PageNum :: Int -> PageNum [$sel:unPageNum:PageNum] :: PageNum -> Int type family Paged verb ct resp data Zone NL1 :: Zone NL2 :: Zone NL3 :: Zone allScalewayZones :: [Zone] zoneToText :: Zone -> Text zoneFromText :: Text -> Maybe Zone newtype ImageId ImageId :: Text -> ImageId [$sel:unImageId:ImageId] :: ImageId -> Text newtype IpId IpId :: Text -> IpId [$sel:unIpId:IpId] :: IpId -> Text newtype OrganizationId OrganizationId :: Text -> OrganizationId [$sel:unOrganizationId:OrganizationId] :: OrganizationId -> Text newtype ProjectId ProjectId :: Text -> ProjectId [$sel:unProjectId:ProjectId] :: ProjectId -> Text newtype ServerId ServerId :: Text -> ServerId [$sel:unServerId:ServerId] :: ServerId -> Text newtype VolumeId VolumeId :: Text -> VolumeId [$sel:unVolumeId:VolumeId] :: VolumeId -> Text newtype UserDataKey UserDataKey :: Text -> UserDataKey [$sel:unUserDataKey:UserDataKey] :: UserDataKey -> Text newtype UserData UserData :: Text -> UserData [$sel:unUserData:UserData] :: UserData -> Text data ServersReqVolume ServersReqVolume :: Int -> Text -> ServersReqVolume [$sel:size:ServersReqVolume] :: ServersReqVolume -> Int [$sel:volumeType:ServersReqVolume] :: ServersReqVolume -> Text data ServersRespVolume ServersRespVolume :: VolumeId -> Text -> Int -> Text -> ServersRespVolume [$sel:id:ServersRespVolume] :: ServersRespVolume -> VolumeId [$sel:name:ServersRespVolume] :: ServersRespVolume -> Text [$sel:size:ServersRespVolume] :: ServersRespVolume -> Int [$sel:volumeType:ServersRespVolume] :: ServersRespVolume -> Text data IpsReq IpsReq :: Text -> ProjectId -> IpsReq [$sel:type_:IpsReq] :: IpsReq -> Text [$sel:project:IpsReq] :: IpsReq -> ProjectId data IpsResp IpsResp :: IpId -> Text -> OrganizationId -> ProjectId -> Zone -> IpsResp [$sel:id:IpsResp] :: IpsResp -> IpId [$sel:address:IpsResp] :: IpsResp -> Text [$sel:organization:IpsResp] :: IpsResp -> OrganizationId [$sel:project:IpsResp] :: IpsResp -> ProjectId [$sel:zone:IpsResp] :: IpsResp -> Zone data ServersReq ServersReq :: Text -> Text -> ImageId -> Text -> [IpId] -> [Text] -> Map Text ServersReqVolume -> ProjectId -> ServersReq [$sel:bootType:ServersReq] :: ServersReq -> Text [$sel:commercialType:ServersReq] :: ServersReq -> Text [$sel:image:ServersReq] :: ServersReq -> ImageId [$sel:name:ServersReq] :: ServersReq -> Text [$sel:publicIps:ServersReq] :: ServersReq -> [IpId] [$sel:tags:ServersReq] :: ServersReq -> [Text] [$sel:volumes:ServersReq] :: ServersReq -> Map Text ServersReqVolume [$sel:project:ServersReq] :: ServersReq -> ProjectId data ServersResp ServersResp :: ServerId -> Text -> Map Text ServersRespVolume -> Text -> ServersResp [$sel:id:ServersResp] :: ServersResp -> ServerId [$sel:name:ServersResp] :: ServersResp -> Text [$sel:volumes:ServersResp] :: ServersResp -> Map Text ServersRespVolume [$sel:state:ServersResp] :: ServersResp -> Text data ServersActionReq ServersActionReq :: Text -> ServersActionReq [$sel:action:ServersActionReq] :: ServersActionReq -> Text data VolumesReq VolumesReq :: Text -> VolumesReq [$sel:name:VolumesReq] :: VolumesReq -> Text data TaskResp TaskResp :: Text -> Text -> Text -> TaskResp [$sel:id:TaskResp] :: TaskResp -> Text [$sel:description:TaskResp] :: TaskResp -> Text [$sel:status:TaskResp] :: TaskResp -> Text data VolumeConstraint VolumeConstraint :: Int -> Int -> VolumeConstraint [$sel:minSize:VolumeConstraint] :: VolumeConstraint -> Int [$sel:maxSize:VolumeConstraint] :: VolumeConstraint -> Int newtype ProductServersResp ProductServersResp :: Map Text ProductServer -> ProductServersResp [$sel:unProductServersResp:ProductServersResp] :: ProductServersResp -> Map Text ProductServer data ProductServer ProductServer :: Float -> Int -> Int -> Text -> Int -> [Text] -> VolumeConstraint -> ProductServer [$sel:monthlyPrice:ProductServer] :: ProductServer -> Float [$sel:ncpus:ProductServer] :: ProductServer -> Int [$sel:ram:ProductServer] :: ProductServer -> Int [$sel:arch:ProductServer] :: ProductServer -> Text [$sel:sumInternetBandwidth:ProductServer] :: ProductServer -> Int [$sel:altNames:ProductServer] :: ProductServer -> [Text] [$sel:volumesConstraint:ProductServer] :: ProductServer -> VolumeConstraint newtype ProductServersAvailabilityResp ProductServersAvailabilityResp :: Map Text Text -> ProductServersAvailabilityResp [$sel:unProductServersAvailabilityResp:ProductServersAvailabilityResp] :: ProductServersAvailabilityResp -> Map Text Text newtype ImagesResp ImagesResp :: [Image] -> ImagesResp [$sel:unImagesResp:ImagesResp] :: ImagesResp -> [Image] data Image Image :: Text -> Text -> Text -> UTCTime -> UTCTime -> Text -> Text -> Text -> Text -> Int -> Image [$sel:id:Image] :: Image -> Text [$sel:name:Image] :: Image -> Text [$sel:arch:Image] :: Image -> Text [$sel:creationDate:Image] :: Image -> UTCTime [$sel:modificationDate:Image] :: Image -> UTCTime [$sel:state:Image] :: Image -> Text [$sel:rootVolId:Image] :: Image -> Text [$sel:rootVolName:Image] :: Image -> Text [$sel:rootVolType:Image] :: Image -> Text [$sel:rootVolSize:Image] :: Image -> Int type InstanceIpsPostApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "ips" :> ReqBody '[JSON] IpsReq :> PostCreated '[JSON] IpsResp type InstanceIpsDeleteApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "ips" :> Capture "ip_id" IpId :> DeleteNoContent type InstanceServersPostApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "servers" :> ReqBody '[JSON] ServersReq :> PostCreated '[JSON] ServersResp type InstanceServersGetApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "servers" :> Capture "server_id" ServerId :> Get '[JSON] ServersResp type InstanceServersActionPostApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "servers" :> Capture "server_id" ServerId :> "action" :> ReqBody '[JSON] ServersActionReq :> PostAccepted '[JSON] TaskResp type InstanceServersUserDataGetApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "servers" :> Capture "server_id" ServerId :> "user_data" :> Capture "key" UserDataKey :> Get '[PlainTextNoUTF8] UserData type InstanceServersUserDataPatchApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "servers" :> Capture "server_id" ServerId :> "user_data" :> Capture "key" UserDataKey :> ReqBody '[PlainTextNoUTF8] UserData :> PatchNoContent type InstanceVolumesPatchApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "volumes" :> Capture "volume_id" VolumeId :> ReqBody '[JSON] VolumesReq :> Patch '[JSON] Value type InstanceProductsServersGetApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "products" :> "servers" :> QueryParam "per_page" PerPage :> Get '[JSON] ProductServersResp type InstanceProductsServersAvailabilityGetApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "products" :> "servers" :> "availability" :> QueryParam "per_page" PerPage :> Get '[JSON] ProductServersAvailabilityResp type InstanceImagesGetApi = AuthProtect "auth-token" :> "instance" :> "v1" :> "zones" :> Capture "zone" Zone :> "images" :> QueryParam "arch" Text :> Paged Get '[JSON] ImagesResp type ScalewayApi = InstanceIpsPostApi :<|> InstanceIpsDeleteApi :<|> InstanceServersPostApi :<|> InstanceServersGetApi :<|> InstanceServersActionPostApi :<|> InstanceServersUserDataGetApi :<|> InstanceServersUserDataPatchApi :<|> InstanceVolumesPatchApi :<|> InstanceProductsServersGetApi :<|> InstanceProductsServersAvailabilityGetApi :<|> InstanceImagesGetApi scalewayApi :: Proxy ScalewayApi ipsPostApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> IpsReq -> ClientM IpsResp ipsDeleteApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> IpId -> ClientM NoContent serversPostApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> ServersReq -> ClientM ServersResp serversGetApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> ServerId -> ClientM ServersResp serversActionPostApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> ServerId -> ServersActionReq -> ClientM TaskResp serversUserDataGetApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> ServerId -> UserDataKey -> ClientM UserData serversUserDataPatchApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> ServerId -> UserDataKey -> UserData -> ClientM NoContent volumesPatchApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> VolumeId -> VolumesReq -> ClientM Value productsServersGetApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> Maybe PerPage -> ClientM ProductServersResp productsServersAvailabilityGetApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> Maybe PerPage -> ClientM ProductServersAvailabilityResp imagesGetApi :: AuthenticatedRequest (AuthProtect "auth-token") -> Zone -> Maybe Text -> Maybe PerPage -> Maybe PageNum -> ClientM (Headers '[Header "x-total-count" Int] ImagesResp) instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.PerPage instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.PerPage instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.PerPage instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.PerPage instance GHC.Show.Show Cloudy.Scaleway.PerPage instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.PageNum instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.PageNum instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.PageNum instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.PageNum instance GHC.Show.Show Cloudy.Scaleway.PageNum instance GHC.Show.Show Cloudy.Scaleway.Zone instance GHC.Classes.Eq Cloudy.Scaleway.Zone instance GHC.Enum.Enum Cloudy.Scaleway.Zone instance GHC.Enum.Bounded Cloudy.Scaleway.Zone instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.ImageId instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.ImageId instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ImageId instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.ImageId instance GHC.Show.Show Cloudy.Scaleway.ImageId instance GHC.Classes.Eq Cloudy.Scaleway.ImageId instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.IpId instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.IpId instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.IpId instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.IpId instance GHC.Show.Show Cloudy.Scaleway.IpId instance GHC.Classes.Eq Cloudy.Scaleway.IpId instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.OrganizationId instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.OrganizationId instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.OrganizationId instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.OrganizationId instance GHC.Show.Show Cloudy.Scaleway.OrganizationId instance GHC.Classes.Eq Cloudy.Scaleway.OrganizationId instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.ProjectId instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.ProjectId instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ProjectId instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.ProjectId instance GHC.Show.Show Cloudy.Scaleway.ProjectId instance GHC.Classes.Eq Cloudy.Scaleway.ProjectId instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.ServerId instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.ServerId instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ServerId instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.ServerId instance GHC.Show.Show Cloudy.Scaleway.ServerId instance GHC.Classes.Eq Cloudy.Scaleway.ServerId instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.VolumeId instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.VolumeId instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.VolumeId instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.VolumeId instance GHC.Show.Show Cloudy.Scaleway.VolumeId instance GHC.Classes.Eq Cloudy.Scaleway.VolumeId instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.UserDataKey instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.UserDataKey instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.UserDataKey instance Web.Internal.HttpApiData.FromHttpApiData Cloudy.Scaleway.UserDataKey instance GHC.Show.Show Cloudy.Scaleway.UserDataKey instance GHC.Classes.Eq Cloudy.Scaleway.UserDataKey instance Servant.API.ContentTypes.MimeUnrender Cloudy.Scaleway.PlainTextNoUTF8 Cloudy.Scaleway.UserData instance Servant.API.ContentTypes.MimeRender Cloudy.Scaleway.PlainTextNoUTF8 Cloudy.Scaleway.UserData instance GHC.Show.Show Cloudy.Scaleway.UserData instance GHC.Classes.Eq Cloudy.Scaleway.UserData instance GHC.Show.Show Cloudy.Scaleway.ServersReqVolume instance GHC.Show.Show Cloudy.Scaleway.ServersRespVolume instance GHC.Show.Show Cloudy.Scaleway.IpsReq instance GHC.Show.Show Cloudy.Scaleway.IpsResp instance GHC.Show.Show Cloudy.Scaleway.ServersReq instance GHC.Show.Show Cloudy.Scaleway.ServersResp instance GHC.Show.Show Cloudy.Scaleway.ServersActionReq instance GHC.Show.Show Cloudy.Scaleway.VolumesReq instance GHC.Show.Show Cloudy.Scaleway.TaskResp instance GHC.Show.Show Cloudy.Scaleway.VolumeConstraint instance GHC.Show.Show Cloudy.Scaleway.ProductServer instance GHC.Show.Show Cloudy.Scaleway.ProductServersResp instance GHC.Show.Show Cloudy.Scaleway.ProductServersAvailabilityResp instance GHC.Show.Show Cloudy.Scaleway.Image instance GHC.Show.Show Cloudy.Scaleway.ImagesResp instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ImagesResp instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.Image instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ProductServersAvailabilityResp instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ProductServersResp instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ProductServer instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.VolumeConstraint instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.TaskResp instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.VolumesReq instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.ServersActionReq instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ServersResp instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.ServersReq instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.IpsResp instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.IpsReq instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.ServersRespVolume instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.ServersReqVolume instance Data.Aeson.Types.ToJSON.ToJSON Cloudy.Scaleway.Zone instance Data.Aeson.Types.FromJSON.FromJSON Cloudy.Scaleway.Zone instance Web.Internal.HttpApiData.ToHttpApiData Cloudy.Scaleway.Zone instance Servant.API.ContentTypes.Accept Cloudy.Scaleway.PlainTextNoUTF8 instance Servant.API.ContentTypes.MimeRender Cloudy.Scaleway.PlainTextNoUTF8 Data.Text.Internal.Text instance Servant.API.ContentTypes.MimeUnrender Cloudy.Scaleway.PlainTextNoUTF8 Data.Text.Internal.Text module Cloudy.Cmd.Scaleway.Utils createAuthReq :: Text -> AuthenticatedRequest (AuthProtect "auth-token") createAuthTokenHeader :: Text -> Request -> Request scalewayBaseUrl :: BaseUrl runScalewayClientM :: (forall x. ClientError -> IO x) -> ClientM a -> IO a defaultZone :: Zone getZone :: Maybe Text -> Maybe Text -> IO Zone getMaybeOrDefault :: Foldable t => a -> t (Maybe a) -> a defaultInstanceType :: Text getInstanceType :: Maybe Text -> Maybe Text -> Text defaultImageId :: Text getImageId :: Maybe Text -> Maybe Text -> Text fetchPagedApi :: Monad m => (Maybe PageNum -> m (Headers '[Header "x-total-count" Int] a)) -> (a -> a -> a) -> (a -> Int) -> m a unfoldM :: Monad m => (s -> m (Maybe (a, s))) -> s -> m [a] module Cloudy.Cli.Scaleway data ScalewayCliOpts ScalewayCreate :: ScalewayCreateCliOpts -> ScalewayCliOpts ScalewayListInstanceTypes :: ScalewayListInstanceTypesCliOpts -> ScalewayCliOpts ScalewayListImages :: ScalewayListImagesCliOpts -> ScalewayCliOpts data ScalewayCreateCliOpts ScalewayCreateCliOpts :: Maybe Text -> Maybe Text -> Int -> Maybe Text -> Maybe Text -> ScalewayCreateCliOpts [$sel:zone:ScalewayCreateCliOpts] :: ScalewayCreateCliOpts -> Maybe Text [$sel:instanceType:ScalewayCreateCliOpts] :: ScalewayCreateCliOpts -> Maybe Text [$sel:volumeSizeGb:ScalewayCreateCliOpts] :: ScalewayCreateCliOpts -> Int [$sel:imageId:ScalewayCreateCliOpts] :: ScalewayCreateCliOpts -> Maybe Text [$sel:instanceSetup:ScalewayCreateCliOpts] :: ScalewayCreateCliOpts -> Maybe Text data ScalewayListInstanceTypesCliOpts ScalewayListInstanceTypesCliOpts :: Maybe Text -> ScalewayListInstanceTypesCliOpts [$sel:zone:ScalewayListInstanceTypesCliOpts] :: ScalewayListInstanceTypesCliOpts -> Maybe Text data ScalewayListImagesCliOpts ScalewayListImagesCliOpts :: Maybe Text -> Text -> Maybe Text -> Bool -> ScalewayListImagesCliOpts [$sel:zone:ScalewayListImagesCliOpts] :: ScalewayListImagesCliOpts -> Maybe Text [$sel:arch:ScalewayListImagesCliOpts] :: ScalewayListImagesCliOpts -> Text [$sel:nameFilter:ScalewayListImagesCliOpts] :: ScalewayListImagesCliOpts -> Maybe Text [$sel:allVersions:ScalewayListImagesCliOpts] :: ScalewayListImagesCliOpts -> Bool scalewayCliOptsParser :: [InstanceSetup] -> Parser ScalewayCliOpts instanceSetupToDoc :: InstanceSetup -> Doc scalewayCreateCliOptsParser :: [InstanceSetup] -> Parser ScalewayCreateCliOpts scalewayListInstanceTypesCliOptsParser :: Parser ScalewayListInstanceTypesCliOpts scalewayListImagesCliOptsParser :: Parser ScalewayListImagesCliOpts zoneParser :: Parser (Maybe Text) instanceTypeParser :: Parser (Maybe Text) archParser :: Parser Text nameFilterParser :: Parser (Maybe Text) allVersionsParser :: Parser Bool volumeSizeGbParser :: Parser Int imageIdParser :: Parser (Maybe Text) instanceSetupParser :: [InstanceSetup] -> Parser (Maybe Text) instance GHC.Show.Show Cloudy.Cli.Scaleway.ScalewayCreateCliOpts instance GHC.Show.Show Cloudy.Cli.Scaleway.ScalewayListInstanceTypesCliOpts instance GHC.Show.Show Cloudy.Cli.Scaleway.ScalewayListImagesCliOpts instance GHC.Show.Show Cloudy.Cli.Scaleway.ScalewayCliOpts module Cloudy.Cmd.Scaleway.Create data ScalewayCreateSettings ScalewayCreateSettings :: Text -> ProjectId -> Zone -> Text -> Int -> Text -> Maybe InstanceSetup -> ScalewayCreateSettings [$sel:secretKey:ScalewayCreateSettings] :: ScalewayCreateSettings -> Text [$sel:projectId:ScalewayCreateSettings] :: ScalewayCreateSettings -> ProjectId [$sel:zone:ScalewayCreateSettings] :: ScalewayCreateSettings -> Zone [$sel:instanceType:ScalewayCreateSettings] :: ScalewayCreateSettings -> Text [$sel:volumeSizeGb:ScalewayCreateSettings] :: ScalewayCreateSettings -> Int [$sel:imageId:ScalewayCreateSettings] :: ScalewayCreateSettings -> Text [$sel:instanceSetup:ScalewayCreateSettings] :: ScalewayCreateSettings -> Maybe InstanceSetup mkSettings :: LocalConfFileOpts -> ScalewayCreateCliOpts -> IO ScalewayCreateSettings runCreate :: LocalConfFileOpts -> ScalewayCreateCliOpts -> IO () createScalewayServer :: ScalewayCreateSettings -> Text -> ClientM (ServerId, IpId, Text) oneGb :: Int waitForScalewayServer :: ScalewayCreateSettings -> ServerId -> ClientM () -- | Wait for port 22 to be available on the remote machine. waitForSshPort :: Text -> IO () getSshKeyFingerprints :: ScalewayCreateSettings -> ServerId -> ClientM Text updateSshHostKeys :: Text -> Text -> IO () -- | This datatype represents a line from an SSH fingerprint file, normally -- as output by ssh-keygen -l. -- -- Here's an example line: -- --
--   3072 SHA256:dRJ/XiNOlh9UGnnN5/a2N+EMSP+OkqyHy8WTzHlUt5U root@cloudy-complete-knife (RSA)
--   
data Fingerprint Fingerprint :: Word64 -> Text -> Text -> Text -> Fingerprint -- | Size of the key. Example: 3072 [$sel:size:Fingerprint] :: Fingerprint -> Word64 -- | The fingerprint of the key. Example: -- "SHA256:n6fLRD4O2Me3bRXhzHyCca1vWdQ2utxuPZVsIDUm6o0" [$sel:fingerprint:Fingerprint] :: Fingerprint -> Text -- | User and hostname. Example: "root@cloudy-complete-knife" [$sel:server:Fingerprint] :: Fingerprint -> Text -- | Type of key. Example: RSA [$sel:keyType:Fingerprint] :: Fingerprint -> Text type Parser = Parsec Text () parseFingerprints :: Text -> Text -> Either ParseError (NonEmpty Fingerprint) fingerprintsParser :: Parser (NonEmpty Fingerprint) -- | Parse a single Fingerprint. -- --
--   >>> let finger = "3072 SHA256:dRJ/XiNOlh9UGnnN5/a2N+EMSP+OkqyHy8WTzHlUt5U root@cloudy-complete-knife (RSA)"
--   
--   >>> parseTest fingerprintParser finger
--   Fingerprint {size = 3072, fingerprint = "SHA256:dRJ/XiNOlh9UGnnN5/a2N+EMSP+OkqyHy8WTzHlUt5U", server = "root@cloudy-complete-knife", keyType = "RSA"}
--   
fingerprintParser :: Parser Fingerprint -- | Returns the SSH host keys for the given host. -- -- This effectively just runs ssh-keyscan on the given host. -- -- This returns an output that looks like the following: -- --
--   123.100.200.3 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCiRtLMhK1Dh72tpJIXF+NjLAPPyXbq/tYC0ztDTMBFfQEj2jixURcugtGM7WjcqDCHHgnPDcSHrlkl9dMOV0MvjA2WxNupDU1bPQ31h10rIiiSjL+IB+c9e1wEgJylt72pDPzxDjdNfuAS3gspOjYNuy2vRBlV8rQ9GDlSoSvqMGbQ7W9bdCLnANsUkI+FCXFZCzIL3MU26ddqrBdCgiTvFUVxHjfFJMxwsKwLa18P6dc586mYXocmQGwjyXfJCiOw5kajvH4a9BzRr21nQT23GI2e4RlJ2Rkum9lazBNaVaQBYIUgLVVFMSfxbEt2GGBv82UKbQTbk6KHrrKE8ABYmkE81lgE+8zlnh6lxlaEQ9if6/KvtwP97g0md3hxc9b2MvGnQLEX9jjHJ/B9bHW7jJzqWRQAnCQZzenbyTht5lNK480Q9qGTu0h8FNteapzos/JnQ3B8taGQI5fpxosRLyhX3wzdQrmaAiBnILgYV2sPWZT3th0M6gsLDi4ao40=
--   123.100.200.3 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJKYO35BsIkFjiAXACgkWzTC+tA2sH5RSqoYoGq8Lv+
--   123.100.200.3 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKR0UH9ZSmUyYUJfE/4mUT4SLZ9wskvsCXkVL8QNIprmFt7Zz7eRerQVyqoOm4/Zhu2OWlleqfIWOmuyPDGkImo=
--   
getSshHostKeys :: Text -> IO Text -- | Return the fingerprints for a set of raw host keys. -- -- This effectively just runs ssh-keygen -l on a set of raw host -- keys. -- -- See the docs for Fingerprint for an example of what this -- function outputs. fingerprintsFromHostKeys :: Text -> IO Text -- | Results of comparing whether two sets of fingerprints match. data FingerprintsMatch FingerprintsMatch :: FingerprintsMatch FingerprintsNoMatch :: FingerprintsMatch -- | There was some error when comparing the two sets of fingerprints. FingerprintsMatchErr :: Text -> FingerprintsMatch doFingerprintsMatch :: NonEmpty Fingerprint -> NonEmpty Fingerprint -> FingerprintsMatch -- | Remove old, out-of-date host keys from the user's -- ~.sshknown_hosts file. -- -- This effectively just runs ssh-keygen -R on the passed-in IP -- address. removeOldHostKeysFromKnownHosts :: Text -> IO () -- | Add a set of new SSH host keys to the ~.sshknown_hosts -- file. -- -- This effectively just appends the passed-in host keys to the file. addNewHostKeysToKnownHosts :: Text -> IO () instance GHC.Show.Show Cloudy.Cmd.Scaleway.Create.Fingerprint instance GHC.Show.Show Cloudy.Cmd.Scaleway.Create.FingerprintsMatch instance GHC.Classes.Eq Cloudy.Cmd.Scaleway.Create.Fingerprint instance GHC.Classes.Ord Cloudy.Cmd.Scaleway.Create.Fingerprint module Cloudy.Table data Align LeftJustified :: Align Centered :: Align RightJustified :: Align data Table Table :: NonEmpty (Align, Text) -> NonEmpty (NonEmpty Text) -> Table [$sel:tableHeaders:Table] :: Table -> NonEmpty (Align, Text) [$sel:tableBodyRows:Table] :: Table -> NonEmpty (NonEmpty Text) printTable :: Table -> IO () assertRowsSameLengths :: NonEmpty a -> NonEmpty (NonEmpty b) -> IO () renderTable :: NonEmpty (Align, Text) -> NonEmpty (NonEmpty Text) -> Text renderDiv :: Bool -> NonEmpty Int -> Text -> Text renderHeaders :: NonEmpty Int -> NonEmpty Text -> Text zipThreeNE :: NonEmpty a -> NonEmpty b -> NonEmpty c -> NonEmpty (a, b, c) zipThree :: [a] -> [b] -> [c] -> [(a, b, c)] renderBody :: NonEmpty (Align, Int) -> NonEmpty (NonEmpty Text) -> Text zipOneMore :: NonEmpty (a, b) -> NonEmpty c -> NonEmpty (a, b, c) renderRow :: NonEmpty (Align, Int, Text) -> Text renderColumn :: (Align, Int, Text) -> Text getMaxWidths :: NonEmpty (NonEmpty Text) -> NonEmpty Int module Cloudy.Cmd.Scaleway.ListInstanceTypes data ScalewayListInstanceTypesSettings ScalewayListInstanceTypesSettings :: Text -> Zone -> ScalewayListInstanceTypesSettings [$sel:secretKey:ScalewayListInstanceTypesSettings] :: ScalewayListInstanceTypesSettings -> Text [$sel:zone:ScalewayListInstanceTypesSettings] :: ScalewayListInstanceTypesSettings -> Zone mkSettings :: LocalConfFileOpts -> ScalewayListInstanceTypesCliOpts -> IO ScalewayListInstanceTypesSettings runListInstanceTypes :: LocalConfFileOpts -> ScalewayListInstanceTypesCliOpts -> IO () fetchInstanceTypes :: ScalewayListInstanceTypesSettings -> ClientM (Map Text (ProductServer, Text)) displayInstanceTypes :: Map Text (ProductServer, Text) -> IO () mkTable :: NonEmpty (Text, (ProductServer, Text)) -> Table mkRow :: (Text, (ProductServer, Text)) -> NonEmpty Text formatVolumesConstraint :: VolumeConstraint -> Text oneGib :: Num a => a oneGb :: Num a => a module Cloudy.Cmd.Scaleway.ListImages data ScalewayListImagesSettings ScalewayListImagesSettings :: Text -> Zone -> Text -> Maybe Text -> Bool -> ScalewayListImagesSettings [$sel:secretKey:ScalewayListImagesSettings] :: ScalewayListImagesSettings -> Text [$sel:zone:ScalewayListImagesSettings] :: ScalewayListImagesSettings -> Zone [$sel:arch:ScalewayListImagesSettings] :: ScalewayListImagesSettings -> Text [$sel:nameFilter:ScalewayListImagesSettings] :: ScalewayListImagesSettings -> Maybe Text [$sel:showAllVersions:ScalewayListImagesSettings] :: ScalewayListImagesSettings -> Bool mkSettings :: LocalConfFileOpts -> ScalewayListImagesCliOpts -> IO ScalewayListImagesSettings runListImages :: LocalConfFileOpts -> ScalewayListImagesCliOpts -> IO () fetchImages :: ScalewayListImagesSettings -> ClientM [Image] displayImages :: ScalewayListImagesSettings -> [Image] -> IO () nubByNameArch :: [Image] -> [Image] mkTable :: NonEmpty Image -> Table mkRow :: Image -> NonEmpty Text module Cloudy.Cli parseCliOpts :: IO CliCmd data CliCmd Aws :: AwsCliOpts -> CliCmd List :: ListCliOpts -> CliCmd Scaleway :: ScalewayCliOpts -> CliCmd Ssh :: SshCliOpts -> CliCmd CopyFile :: CopyFileCliOpts -> CliCmd Destroy :: DestroyCliOpts -> CliCmd data ScalewayCliOpts ScalewayCreate :: ScalewayCreateCliOpts -> ScalewayCliOpts ScalewayListInstanceTypes :: ScalewayListInstanceTypesCliOpts -> ScalewayCliOpts ScalewayListImages :: ScalewayListImagesCliOpts -> ScalewayCliOpts data AwsCliOpts AwsCreate :: AwsCreateCliOpts -> AwsCliOpts AwsListInstanceTypes :: AwsListInstanceTypesCliOpts -> AwsCliOpts data ListCliOpts ListCliOpts :: ListCliOpts data SshCliOpts SshCliOpts :: Maybe CloudyInstanceId -> Maybe Text -> [Text] -> SshCliOpts [$sel:id:SshCliOpts] :: SshCliOpts -> Maybe CloudyInstanceId [$sel:name:SshCliOpts] :: SshCliOpts -> Maybe Text [$sel:passthru:SshCliOpts] :: SshCliOpts -> [Text] data CopyFileCliOpts CopyFileCliOpts :: Maybe CloudyInstanceId -> Maybe Text -> CopyFileDirection -> Recursive -> [Text] -> CopyFileCliOpts [$sel:id:CopyFileCliOpts] :: CopyFileCliOpts -> Maybe CloudyInstanceId [$sel:name:CopyFileCliOpts] :: CopyFileCliOpts -> Maybe Text [$sel:direction:CopyFileCliOpts] :: CopyFileCliOpts -> CopyFileDirection [$sel:recursive:CopyFileCliOpts] :: CopyFileCliOpts -> Recursive [$sel:filesToCopyArgs:CopyFileCliOpts] :: CopyFileCliOpts -> [Text] data DestroyCliOpts DestroyCliOpts :: Maybe CloudyInstanceId -> Maybe Text -> DestroyCliOpts [$sel:id:DestroyCliOpts] :: DestroyCliOpts -> Maybe CloudyInstanceId [$sel:name:DestroyCliOpts] :: DestroyCliOpts -> Maybe Text -- | Which direction to copy files in the copy-file command data CopyFileDirection FromInstanceToLocal :: CopyFileDirection ToInstanceFromLocal :: CopyFileDirection -- | Whether or not to recursively copy files from directories in the -- copy-file command. data Recursive Recursive :: Recursive NoRecursive :: Recursive instance GHC.Show.Show Cloudy.Cli.ListCliOpts instance GHC.Show.Show Cloudy.Cli.SshCliOpts instance GHC.Show.Show Cloudy.Cli.DestroyCliOpts instance GHC.Show.Show Cloudy.Cli.CopyFileDirection instance GHC.Show.Show Cloudy.Cli.Recursive instance GHC.Show.Show Cloudy.Cli.CopyFileCliOpts instance GHC.Show.Show Cloudy.Cli.CliCmd module Cloudy.Cmd.Ssh data SshSettings SshSettings :: SelectInstBy -> [Text] -> SshSettings [$sel:selectInstBy:SshSettings] :: SshSettings -> SelectInstBy [$sel:sshPassthruArgs:SshSettings] :: SshSettings -> [Text] mkSettings :: LocalConfFileOpts -> SshCliOpts -> IO SshSettings runSsh :: LocalConfFileOpts -> SshCliOpts -> IO () instance GHC.Show.Show Cloudy.Cmd.Ssh.SshSettings module Cloudy.Cmd.Scaleway runScaleway :: LocalConfFileOpts -> ScalewayCliOpts -> IO () module Cloudy.Cmd.List runList :: LocalConfFileOpts -> ListCliOpts -> IO () displayInstanceInfos :: [InstanceInfo] -> IO () mkTable :: TimeZone -> NonEmpty InstanceInfo -> Table mkRow :: TimeZone -> InstanceInfo -> NonEmpty Text module Cloudy.Cmd.Destroy data DestroySettings DestroySettings :: SelectInstBy -> DestroySettings [$sel:selectInstBy:DestroySettings] :: DestroySettings -> SelectInstBy data ScalewayDestroySettings ScalewayDestroySettings :: Text -> ScalewayDestroySettings [$sel:secretKey:ScalewayDestroySettings] :: ScalewayDestroySettings -> Text mkSettings :: LocalConfFileOpts -> DestroyCliOpts -> IO DestroySettings mkScalewaySettings :: LocalConfFileOpts -> IO ScalewayDestroySettings runDestroy :: LocalConfFileOpts -> DestroyCliOpts -> IO () destroyScalewayServer :: DestroySettings -> ScalewayDestroySettings -> ScalewayInstance -> ClientM () instance GHC.Show.Show Cloudy.Cmd.Destroy.DestroySettings instance GHC.Show.Show Cloudy.Cmd.Destroy.ScalewayDestroySettings module Cloudy.Cmd.CopyFile data CopyFileSettings CopyFileSettings :: SelectInstBy -> CopyFileDirection -> Recursive -> [Text] -> CopyFileSettings [$sel:selectInstBy:CopyFileSettings] :: CopyFileSettings -> SelectInstBy [$sel:direction:CopyFileSettings] :: CopyFileSettings -> CopyFileDirection [$sel:recursive:CopyFileSettings] :: CopyFileSettings -> Recursive [$sel:filesToCopyArgs:CopyFileSettings] :: CopyFileSettings -> [Text] mkSettings :: LocalConfFileOpts -> CopyFileCliOpts -> IO CopyFileSettings runCopyFile :: LocalConfFileOpts -> CopyFileCliOpts -> IO () unsnoc :: [a] -> Maybe ([a], a) instance GHC.Show.Show Cloudy.Cmd.CopyFile.CopyFileSettings module Cloudy.Cmd.Aws runAws :: LocalConfFileOpts -> AwsCliOpts -> IO () runAwsCreate :: LocalConfFileOpts -> AwsCreateCliOpts -> IO () runAwsListInstanceTypes :: LocalConfFileOpts -> AwsListInstanceTypesCliOpts -> IO () module Cloudy.Cmd runCmd :: LocalConfFileOpts -> CliCmd -> IO () module Cloudy defaultMain :: IO ()