module AWS.EC2.Convert
where
import Data.Text (Text)
import AWS.Util
import AWS.Lib.Convert
import AWS.EC2.Types
mkConvertFunc "imageState" ''ImageState ["available", "pending", "failed"]
mkConvertFunc "productCodeType" ''ProductCodeType ["devpay", "marketplace"]
mkConvertFunc "imageType" ''ImageType ["machine", "kernel", "ramdisk"]
platform :: Maybe Text -> Platform
platform Nothing = Other
platform (Just t)
| t == "windows" = Windows
| otherwise = Other
mkConvertFunc "rootDeviceType" ''RootDeviceType ["ebs", "instance-store"]
volumeType :: Text -> Maybe Int -> VolumeType
volumeType t Nothing | t == "standard" = Standard
volumeType t (Just i) | t == "io1" = IO1 i
volumeType t _ = err "volume type" t
mkConvertFunc "virtualizationType" ''VirtualizationType ["paravirtual", "hvm"]
mkConvertFunc "hypervisor" ''Hypervisor ["ovm", "xen"]
mkConvertFunc "instanceStatusEventCode"
''InstanceStatusEventCode
["instance-reboot", "instance-stop", "system-reboot", "instance-retirement"]
mkConvertFunc "instanceStatusTypeStatus"
''InstanceStatusTypeStatus
["ok", "impaired", "insufficient-data", "not-applicable"]
instanceStateCodes :: [(Int, InstanceState)]
instanceStateCodes =
[ (0, Pending)
, (16, Running)
, (32, ShuttingDown)
, (48, Terminated)
, (64, Stopping)
, (80, Stopped)
]
codeToState :: Int -> InstanceState
codeToState code = case lookup code instanceStateCodes of
Nothing -> UnknownState code
Just st -> st
mkConvertFunc "instanceMonitoringState" ''InstanceMonitoringState ["disabled", "enabled", "pending"]
mkConvertFunc "architecture" ''Architecture ["i386", "x86_64"]
addressDomain :: Maybe Text -> AddressDomain
addressDomain Nothing = AddressDomainStandard
addressDomain (Just t)
| t == "standard" = AddressDomainStandard
| t == "vpc" = AddressDomainVPC
| otherwise = err "address domain" t
ec2Return :: Text -> EC2Return
ec2Return t
| t == "true" = EC2Success
| otherwise = EC2Error t
mkConvertFunc "snapshotStatus" ''SnapshotStatus ["pending", "completed", "error"]
mkConvertFunc "volumeStatus"
''VolumeState
["creating", "available", "in-use", "deleting", "deleted", "error"]
mkConvertFunc "attachmentSetItemResponseStatus"
''AttachmentSetItemResponseStatus
["attaching", "attached", "detaching", "detached"]
mkConvertFunc "shutdownBehavior" ''ShutdownBehavior ["stop", "terminate"]
mkConvertFunc "vpnConnectionState" ''VpnConnectionState ["pending", "available", "deleting", "deleted"]
mkConvertFunc "vpnTunnelTelemetryStatus" ''VpnTunnelTelemetryStatus ["UP", "DOWN"]
mkConvertFunc "vpnStaticRouteSource" ''VpnStaticRouteSource ["Static"]
mkConvertFunc "vpnStaticRouteState" ''VpnStaticRouteState ["pending", "available", "deleting", "deleted"]
instanceLifecycle :: Maybe Text -> InstanceLifecycle
instanceLifecycle Nothing = LifecycleNone
instanceLifecycle (Just t)
| t == "spot" = LifecycleSpot
| otherwise = err "lifecycle" t
mkConvertFunc "subnetState" ''SubnetState ["pending", "available"]
mkConvertFunc "volumeStatusInfoStatus" ''VolumeStatusInfoStatus ["ok", "impaired", "insufficient-data"]
mkConvertFunc "networkAclRuleAction" ''NetworkAclRuleAction ["allow", "deny"]
mkConvertFunc "routeState" ''RouteState ["active", "blackhole"]
mkConvertFunc "routeOrigin" ''RouteOrigin ["CreateRouteTable", "CreateRoute", "EnableVgwRoutePropagation"]
mkConvertFunc "vpcState'" ''VpcState ["pending", "available"]
mkConvertFunc "vpnGatewayState'" ''VpnGatewayState ["pending", "available", "deleting", "deleted"]
mkConvertFunc "attachmentState'" ''AttachmentState ["attaching", "attached", "detaching", "detached"]
mkConvertFunc "customerGatewayState'" ''CustomerGatewayState ["pending", "available", "deleting", "deleted"]
mkConvertFunc "internetGatewayAttachmentState'" ''InternetGatewayAttachmentState ["attaching", "attached", "detaching", "detached", "available"]