#
# Regions
#

AF_SOUTH_1 = "af-south-1"
AP_EAST_1 = "ap-east-1"
AP_NORTHEAST_1 = "ap-northeast-1"
AP_NORTHEAST_2 = "ap-northeast-2"
AP_NORTHEAST_3 = "ap-northeast-3"
AP_SOUTHEAST_1 = "ap-southeast-1"
AP_SOUTHEAST_2 = "ap-southeast-2"
AP_SOUTH_1 = "ap-south-1"
CA_CENTRAL_1 = "ca-central-1"
CN_NORTH_1 = "cn-north-1"
CN_NORTHWEST_1 = "cn-northwest-1"
EU_WEST_1 = "eu-west-1"
EU_WEST_2 = "eu-west-2"
EU_WEST_3 = "eu-west-3"
EU_CENTRAL_1 = "eu-central-1"
EU_NORTH_1 = "eu-north-1"
EU_SOUTH_1 = "eu-south-1"
ME_SOUTH_1 = "me-south-1"
SA_EAST_1 = "sa-east-1"
US_EAST_1 = "us-east-1"
US_EAST_2 = "us-east-2"
US_GOV_EAST_1 = "us-gov-east-1"
US_GOV_WEST_1 = "us-gov-west-1"
US_WEST_1 = "us-west-1"
US_WEST_2 = "us-west-2"

#
# Availability Zones
#

AF_SOUTH_1A = "af-south-1a"
AF_SOUTH_1B = "af-south-1b"
AF_SOUTH_1C = "af-south-1c"

AP_EAST_1A = "ap-east-1a"
AP_EAST_1B = "ap-east-1b"
AP_EAST_1C = "ap-east-1c"

AP_NORTHEAST_1A = "ap-northeast-1a"
AP_NORTHEAST_1B = "ap-northeast-1b"
AP_NORTHEAST_1C = "ap-northeast-1c"
AP_NORTHEAST_1D = "ap-northeast-1d"

AP_NORTHEAST_2A = "ap-northeast-2a"
AP_NORTHEAST_2B = "ap-northeast-2b"
AP_NORTHEAST_2C = "ap-northeast-2c"
AP_NORTHEAST_2D = "ap-northeast-2d"

AP_NORTHEAST_3A = "ap-northeast-3a"

AP_SOUTHEAST_1A = "ap-southeast-1a"
AP_SOUTHEAST_1B = "ap-southeast-1b"
AP_SOUTHEAST_1C = "ap-southeast-1c"

AP_SOUTHEAST_2A = "ap-southeast-2a"
AP_SOUTHEAST_2B = "ap-southeast-2b"
AP_SOUTHEAST_2C = "ap-southeast-2c"

AP_SOUTH_1A = "ap-south-1a"
AP_SOUTH_1B = "ap-south-1b"
AP_SOUTH_1C = "ap-south-1c"

CA_CENTRAL_1A = "ca-central-1a"
CA_CENTRAL_1B = "ca-central-1b"
CA_CENTRAL_1D = "ca-central-1d"

CN_NORTH_1A = "cn-north-1a"
CN_NORTH_1B = "cn-north-1b"

CN_NORTHWEST_1A = "cn-northwest-1a"
CN_NORTHWEST_1B = "cn-northwest-1b"
CN_NORTHWEST_1C = "cn-northwest-1c"

EU_WEST_1A = "eu-west-1a"
EU_WEST_1B = "eu-west-1b"
EU_WEST_1C = "eu-west-1c"

EU_WEST_2A = "eu-west-2a"
EU_WEST_2B = "eu-west-2b"
EU_WEST_2C = "eu-west-2c"

EU_WEST_3A = "eu-west-3a"
EU_WEST_3B = "eu-west-3b"
EU_WEST_3C = "eu-west-3c"

EU_CENTRAL_1A = "eu-central-1a"
EU_CENTRAL_1B = "eu-central-1b"
EU_CENTRAL_1C = "eu-central-1c"

EU_NORTH_1A = "eu-north-1a"
EU_NORTH_1B = "eu-north-1b"
EU_NORTH_1C = "eu-north-1c"

EU_SOUTH_1A = "eu-south-1a"
EU_SOUTH_1B = "eu-south-1b"
EU_SOUTH_1C = "eu-south-1c"

ME_SOUTH_1A = "me-south-1a"
ME_SOUTH_1B = "me-south-1b"
ME_SOUTH_1C = "me-south-1c"

SA_EAST_1A = "sa-east-1a"
SA_EAST_1B = "sa-east-1b"
SA_EAST_1C = "sa-east-1c"

US_EAST_1A = "us-east-1a"
US_EAST_1B = "us-east-1b"
US_EAST_1C = "us-east-1c"
US_EAST_1D = "us-east-1d"
US_EAST_1E = "us-east-1e"
US_EAST_1F = "us-east-1f"

US_EAST_2A = "us-east-2a"
US_EAST_2B = "us-east-2b"
US_EAST_2C = "us-east-2c"

US_WEST_1A = "us-west-1a"
US_WEST_1B = "us-west-1b"
US_WEST_1C = "us-west-1c"

US_GOV_EAST_1A = "us-gov-east-1a"
US_GOV_EAST_1B = "us-gov-east-1b"
US_GOV_EAST_1C = "us-gov-east-1c"

US_GOV_WEST_1A = "us-gov-west-1a"
US_GOV_WEST_1B = "us-gov-west-1b"
US_GOV_WEST_1C = "us-gov-west-1c"

US_WEST_2A = "us-west-2a"
US_WEST_2B = "us-west-2b"
US_WEST_2C = "us-west-2c"
US_WEST_2D = "us-west-2d"

#
# Networking
#

QUAD_ZERO = "0.0.0.0/0"
VPC_CIDR_16 = "10.0.0.0/16"

SSH_PORT = 22
MONGODB_PORT = 27017
NTP_PORT = 123
SMTP_PORT_25 = 25
SMTP_PORT_587 = 587
HTTP_PORT = 80
HTTPS_PORT = 443
REDIS_PORT = 6379
MEMCACHED_PORT = 11211
POSTGRESQL_PORT = 5432

TCP_PROTOCOL = 6
UDP_PROTOCOL = 17
ICMP_PROTOCOL = 1
ALL_PROTOCOL = -1

#
# EC2 instance types
#

T2_NANO = "t2.nano"
T2_MICRO = "t2.micro"
T2_SMALL = "t2.small"
T2_MEDIUM = "t2.medium"
T2_LARGE = "t2.large"
T2_XLARGE = "t2.xlarge"
T2_2XLARGE = "t2.2xlarge"

T3_NANO = "t3.nano"
T3_MICRO = "t3.micro"
T3_SMALL = "t3.small"
T3_MEDIUM = "t3.medium"
T3_LARGE = "t3.large"
T3_XLARGE = "t3.xlarge"
T3_2XLARGE = "t3.2xlarge"

T3A_NANO = "t3a.nano"
T3A_MICRO = "t3a.micro"
T3A_SMALL = "t3a.small"
T3A_MEDIUM = "t3a.medium"
T3A_LARGE = "t3a.large"
T3A_XLARGE = "t3a.xlarge"
T3A_2XLARGE = "t3a.2xlarge"

T4G_NANO = "t4g.nano"
T4G_MICRO = "t4g.micro"
T4G_SMALL = "t4g.small"
T4G_MEDIUM = "t4g.medium"
T4G_LARGE = "t4g.large"
T4G_XLARGE = "t4g.xlarge"
T4G_2XLARGE = "t4g.2xlarge"

M6G_MEDIUM = "m6g.medium"
M6G_LARGE = "m6g.large"
M6G_XLARGE = "m6g.xlarge"
M6G_2XLARGE = "m6g.2xlarge"
M6G_4XLARGE = "m6g.4xlarge"
M6G_8XLARGE = "m6g.8xlarge"
M6G_12XLARGE = "m6g.12xlarge"
M6G_16XLARGE = "m6g.16xlarge"
M6G_METAL = "m6g.metal"

M6GD_MEDIUM = "m6gd.medium"
M6GD_LARGE = "m6gd.large"
M6GD_XLARGE = "m6gd.xlarge"
M6GD_2XLARGE = "m6gd.2xlarge"
M6GD_4XLARGE = "m6gd.4xlarge"
M6GD_8XLARGE = "m6gd.8xlarge"
M6GD_12XLARGE = "m6gd.12xlarge"
M6GD_16XLARGE = "m6gd.16xlarge"
M6GD_METAL = "m6gd.metal"

M5_LARGE = "m5.large"
M5_XLARGE = "m5.xlarge"
M5_2XLARGE = "m5.2xlarge"
M5_4XLARGE = "m5.4xlarge"
M5_12XLARGE = "m5.12xlarge"
M5_24XLARGE = "m5.24xlarge"
M5_METAL = "m5.metal"

M5D_LARGE = "m5d.large"
M5D_XLARGE = "m5d.xlarge"
M5D_2XLARGE = "m5d.2xlarge"
M5D_4XLARGE = "m5d.4xlarge"
M5D_12XLARGE = "m5d.12xlarge"
M5D_24XLARGE = "m5d.24xlarge"
M5D_METAL = "m5d.metal"

M5A_LARGE = "m5a.large"
M5A_XLARGE = "m5a.xlarge"
M5A_2XLARGE = "m5a.2xlarge"
M5A_4XLARGE = "m5a.4xlarge"
M5A_12XLARGE = "m5a.12xlarge"
M5A_24XLARGE = "m5a.24xlarge"

M5AD_LARGE = "m5ad.large"
M5AD_XLARGE = "m5ad.xlarge"
M5AD_2XLARGE = "m5ad.2xlarge"
M5AD_4XLARGE = "m5ad.4xlarge"
M5AD_12XLARGE = "m5ad.12xlarge"
M5AD_24XLARGE = "m5ad.24xlarge"

M5N_LARGE = "m5n.large"
M5N_XLARGE = "m5n.xlarge"
M5N_2XLARGE = "m5n.2xlarge"
M5N_4XLARGE = "m5n.4xlarge"
M5N_8XLARGE = "m5n.8xlarge"
M5N_12XLARGE = "m5n.12xlarge"
M5N_16XLARGE = "m5n.16xlarge"
M5N_24XLARGE = "m5n.24xlarge"
M5DN_LARGE = "m5dn.large"
M5DN_XLARGE = "m5dn.xlarge"
M5DN_2XLARGE = "m5dn.2xlarge"
M5DN_4XLARGE = "m5dn.4xlarge"
M5DN_8XLARGE = "m5dn.8xlarge"
M5DN_12XLARGE = "m5dn.12xlarge"
M5DN_16XLARGE = "m5dn.16xlarge"
M5DN_24XLARGE = "m5dn.24xlarge"

M4_LARGE = "m4.large"
M4_XLARGE = "m4.xlarge"
M4_2XLARGE = "m4.2xlarge"
M4_4XLARGE = "m4.4xlarge"
M4_10XLARGE = "m4.10xlarge"
M4_16XLARGE = "m4.16xlarge"

M3_MEDIUM = "m3.medium"
M3_LARGE = "m3.large"
M3_XLARGE = "m3.xlarge"
M3_2XLARGE = "m3.2xlarge"

A1_MEDIUM = "a1.medium"
A1_LARGE = "a1.large"
A1_XLARGE = "a1.xlarge"
A1_2XLARGE = "a1.2xlarge"
A1_4XLARGE = "a1.4xlarge"
A1_METAL = "a1.metal"

C3_LARGE = "c3.large"
C3_XLARGE = "c3.xlarge"
C3_2XLARGE = "c3.2xlarge"
C3_4XLARGE = "c3.4xlarge"
C3_8XLARGE = "c3.8xlarge"

C4_LARGE = "c4.large"
C4_XLARGE = "c4.xlarge"
C4_2XLARGE = "c4.2xlarge"
C4_4XLARGE = "c4.4xlarge"
C4_8XLARGE = "c4.8xlarge"

C5_LARGE = "c5.large"
C5_XLARGE = "c5.xlarge"
C5_2XLARGE = "c5.2xlarge"
C5_4XLARGE = "c5.4xlarge"
C5_9XLARGE = "c5.9xlarge"
C5_18XLARGE = "c5.18xlarge"
C5_METAL = "c5.metal"

C5A_LARGE = "c5a.large"
C5A_XLARGE = "c5a.xlarge"
C5A_2XLARGE = "c5a.2xlarge"
C5A_4XLARGE = "c5a.4xlarge"
C5A_8XLARGE = "c5a.8xlarge"
C5A_12XLARGE = "c5a.12xlarge"
C5A_16XLARGE = "c5a.16xlarge"
C5A_24XLARGE = "c5a.24xlarge"

C5D_LARGE = "c5d.large"
C5D_XLARGE = "c5d.xlarge"
C5D_2XLARGE = "c5d.2xlarge"
C5D_4XLARGE = "c5d.4xlarge"
C5D_9XLARGE = "c5d.9xlarge"
C5D_18XLARGE = "c5d.18xlarge"
C5D_METAL = "c5d.metal"

C5N_LARGE = "c5n.large"
C5N_XLARGE = "c5n.xlarge"
C5N_2XLARGE = "c5n.2xlarge"
C5N_4XLARGE = "c5n.4xlarge"
C5N_9XLARGE = "c5n.9xlarge"
C5N_18XLARGE = "c5n.18xlarge"
C5N_METAL = "c5n.metal"

C6G_MEDIUM = "c6g.medium"
C6G_LARGE = "c6g.large"
C6G_XLARGE = "c6g.xlarge"
C6G_2XLARGE = "c6g.2xlarge"
C6G_4XLARGE = "c6g.4xlarge"
C6G_8XLARGE = "c6g.8xlarge"
C6G_12XLARGE = "c6g.12xlarge"
C6G_16XLARGE = "c6g.16xlarge"
C6G_METAL = "c6g.metal"

C6GD_MEDIUM = "c6gd.medium"
C6GD_LARGE = "c6gd.large"
C6GD_XLARGE = "c6gd.xlarge"
C6GD_2XLARGE = "c6gd.2xlarge"
C6GD_4XLARGE = "c6gd.4xlarge"
C6GD_8XLARGE = "c6gd.8xlarge"
C6GD_12XLARGE = "c6gd.12xlarge"
C6GD_16XLARGE = "c6gd.16xlarge"
C6GD_METAL = "c6gd.metal"

C6GN_MEDIUM = "c6gn.medium"
C6GN_LARGE = "c6gn.large"
C6GN_XLARGE = "c6gn.xlarge"
C6GN_2XLARGE = "c6gn.2xlarge"
C6GN_4XLARGE = "c6gn.4xlarge"
C6GN_8XLARGE = "c6gn.8xlarge"
C6GN_12XLARGE = "c6gn.12xlarge"
C6GN_16XLARGE = "c6gn.16xlarge"

R3_LARGE = "r3.large"
R3_XLARGE = "r3.xlarge"
R3_2XLARGE = "r3.2xlarge"
R3_4XLARGE = "r3.4xlarge"
R3_8XLARGE = "r3.8xlarge"

G2_2XLARGE = "g2.2xlarge"
G2_8XLARGE = "g2.8xlarge"

G3S_XLARGE = "g3s.xlarge"
G3_4XLARGE = "g3.4xlarge"
G3_8XLARGE = "g3.8xlarge"
G3_16XLARGE = "g3.16xlarge"

G4AD_4XLARGE = "g4ad.4xlarge"
G4AD_8XLARGE = "g4ad.8xlarge"
G4AD_16XLARGE = "g4ad.16xlarge"

G4DN_XLARGE = "g4dn.xlarge"
G4DN_2XLARGE = "g4dn.2xlarge"
G4DN_4XLARGE = "g4dn.4xlarge"
G4DN_8XLARGE = "g4dn.8xlarge"
G4DN_12XLARGE = "g4dn.12xlarge"
G4DN_16XLARGE = "g4dn.16xlarge"
G4DN_METAL = "g4dn.metal"

I2_XLARGE = "i2.xlarge"
I2_2XLARGE = "i2.2xlarge"
I2_4XLARGE = "i2.4xlarge"
I2_8XLARGE = "i2.8xlarge"

H1_2XLARGE = "h1.2xlarge"
H1_4XLARGE = "h1.4xlarge"
H1_8XLARGE = "h1.8xlarge"
H1_16XLARGE = "h1.16xlarge"

I3_LARGE = "i3.large"
I3_XLARGE = "i3.xlarge"
I3_2XLARGE = "i3.2xlarge"
I3_4XLARGE = "i3.4xlarge"
I3_8XLARGE = "i3.8xlarge"
I3_16XLARGE = "i3.16xlarge"
I3_METAL = "i3.metal"

I3EN_LARGE = "i3en.large"
I3EN_XLARGE = "i3en.xlarge"
I3EN_2XLARGE = "i3en.2xlarge"
I3EN_3XLARGE = "i3en.3xlarge"
I3EN_6XLARGE = "i3en.6xlarge"
I3EN_12XLARGE = "i3en.12xlarge"
I3EN_24XLARGE = "i3en.24xlarge"
I3EN_METAL = "i3en.metal"

D2_XLARGE = "d2.xlarge"
D2_2XLARGE = "d2.2xlarge"
D2_4XLARGE = "d2.4xlarge"
D2_8XLARGE = "d2.8xlarge"

D3_XLARGE = "d3.xlarge"
D3_2XLARGE = "d3.2xlarge"
D3_4XLARGE = "d3.4xlarge"
D3_8XLARGE = "d3.8xlarge"

D3EN_XLARGE = "d3en.xlarge"
D3EN_2XLARGE = "d3en.2xlarge"
D3EN_4XLARGE = "d3en.4xlarge"
D3EN_6XLARGE = "d3en.6xlarge"
D3EN_8XLARGE = "d3en.8xlarge"
D3EN_12XLARGE = "d3en.12xlarge"

HS1_8XLARGE = "hs1.8xlarge"

M1_SMALL = "m1.small"
M1_MEDIUM = "m1.medium"
M1_LARGE = "m1.large"
M1_XLARGE = "m1.xlarge"

C1_MEDIUM = "c1.medium"
C1_XLARGE = "c1.xlarge"
CC2_8XLARGE = "cc2.8xlarge"

CG1_4XLARGE = "cg1.4xlarge"

M2_XLARGE = "m2.xlarge"
M2_2XLARGE = "m2.2xlarge"
M2_4XLARGE = "m2.4xlarge"
CR1_8XLARGE = "cr1.8xlarge"

HI1_4XLARGE = "hi1.4xlarge"

T1_MICRO = "t1.micro"

X1_32XLARGE = "x1.32xlarge"
X1_16XLARGE = "x1.16xlarge"

X1E_XLARGE = "x1e.xlarge"
X1E_2XLARGE = "x1e.2xlarge"
X1E_4XLARGE = "x1e.4xlarge"
X1E_8XLARGE = "x1e.8xlarge"
X1E_16XLARGE = "x1e.16xlarge"
X1E_32XLARGE = "x1e.32xlarge"

U_6TB1_METAL = "u-6tb1.metal"
U_9TB1_METAL = "u-9tb1.metal"
U_12TB1_METAL = "u-12tb1.metal"
U_18TB1_METAL = "u-18tb1.metal"
U_24TB1_METAL = "u-24tb1.metal"

Z1D_LARGE = "z1d.large"
Z1D_XLARGE = "z1d.xlarge"
Z1D_2XLARGE = "z1d.2xlarge"
Z1D_3XLARGE = "z1d.3xlarge"
Z1D_6XLARGE = "z1d.6xlarge"
Z1D_12XLARGE = "z1d.12xlarge"
Z1D_METAL = "z1d.metal"

R4_LARGE = "r4.large"
R4_XLARGE = "r4.xlarge"
R4_2XLARGE = "r4.2xlarge"
R4_4XLARGE = "r4.4xlarge"
R4_8XLARGE = "r4.8xlarge"
R4_16XLARGE = "r4.16xlarge"

R5_LARGE = "r5.large"
R5_XLARGE = "r5.xlarge"
R5_2XLARGE = "r5.2xlarge"
R5_4XLARGE = "r5.4xlarge"
R5_12XLARGE = "r5.12xlarge"
R5_24XLARGE = "r5.24xlarge"
R5_METAL = "r5.metal"

R5D_LARGE = "r5d.large"
R5D_XLARGE = "r5d.xlarge"
R5D_2XLARGE = "r5d.2xlarge"
R5D_4XLARGE = "r5d.4xlarge"
R5D_12XLARGE = "r5d.12xlarge"
R5D_24XLARGE = "r5d.24xlarge"
R5D_METAL = "r5d.metal"

R5A_LARGE = "r5a.large"
R5A_XLARGE = "r5a.xlarge"
R5A_2XLARGE = "r5a.2xlarge"
R5A_4XLARGE = "r5a.4xlarge"
R5A_12XLARGE = "r5a.12xlarge"
R5A_24XLARGE = "r5a.24xlarge"

R5AD_LARGE = "r5ad.large"
R5AD_XLARGE = "r5ad.xlarge"
R5AD_2XLARGE = "r5ad.2xlarge"
R5AD_4XLARGE = "r5ad.4xlarge"
R5AD_12XLARGE = "r5ad.12xlarge"
R5AD_24XLARGE = "r5ad.24xlarge"

R5N_LARGE = "r5n.large"
R5N_XLARGE = "r5n.xlarge"
R5N_2XLARGE = "r5n.2xlarge"
R5N_4XLARGE = "r5n.4xlarge"
R5N_8XLARGE = "r5n.8xlarge"
R5N_12XLARGE = "r5n.12xlarge"
R5N_16XLARGE = "r5n.16xlarge"
R5N_24XLARGE = "r5n.24xlarge"
R5DN_LARGE = "r5dn.large"
R5DN_XLARGE = "r5dn.xlarge"
R5DN_2XLARGE = "r5dn.2xlarge"
R5DN_4XLARGE = "r5dn.4xlarge"
R5DN_8XLARGE = "r5dn.8xlarge"
R5DN_12XLARGE = "r5dn.12xlarge"
R5DN_16XLARGE = "r5dn.16xlarge"
R5DN_24XLARGE = "r5dn.24xlarge"

R6G_MEDIUM = "r6g.medium"
R6G_LARGE = "r6g.large"
R6G_XLARGE = "r6g.xlarge"
R6G_2XLARGE = "r6g.2xlarge"
R6G_4XLARGE = "r6g.4xlarge"
R6G_8XLARGE = "r6g.8xlarge"
R6G_12XLARGE = "r6g.12xlarge"
R6G_16XLARGE = "r6g.16xlarge"
R6G_METAL = "r6g.metal"

R6GD_MEDIUM = "r6gd.medium"
R6GD_LARGE = "r6gd.large"
R6GD_XLARGE = "r6gd.xlarge"
R6GD_2XLARGE = "r6gd.2xlarge"
R6GD_4XLARGE = "r6gd.4xlarge"
R6GD_8XLARGE = "r6gd.8xlarge"
R6GD_12XLARGE = "r6gd.12xlarge"
R6GD_16XLARGE = "r6gd.16xlarge"
R6GD_METAL = "r6gd.metal"

P2_XLARGE = "p2.xlarge"
P2_8XLARGE = "p2.8xlarge"
P2_16XLARGE = "p2.16xlarge"

P3_2XLARGE = "p3.2xlarge"
P3_8XLARGE = "p3.8xlarge"
P3_16XLARGE = "p3.16xlarge"
P3DN_24XLARGE = "p3dn.24xlarge"

F1_2XLARGE = "f1.2xlarge"
F1_4XLARGE = "f1.4xlarge"
F1_16XLARGE = "f1.16xlarge"

INF1_XLARGE = "inf1.xlarge"
INF1_2XLARGE = "inf1.2xlarge"
INF1_6XLARGE = "inf1.6xlarge"
INF1_24XLARGE = "inf1.24xlarge"

#
# RDS DB instance classes
#

DB_T1_MICRO = "db.t1.micro"

DB_T2_MICRO = "db.t2.micro"
DB_T2_SMALL = "db.t2.small"
DB_T2_MEDIUM = "db.t2.medium"
DB_T2_LARGE = "db.t2.large"
DB_T2_XLARGE = "db.t2.xlarge"
DB_T2_2XLARGE = "db.t2.2xlarge"

DB_T3_MICRO = "db.t3.micro"
DB_T3_SMALL = "db.t3.small"
DB_T3_MEDIUM = "db.t3.medium"
DB_T3_LARGE = "db.t3.large"
DB_T3_XLARGE = "db.t3.xlarge"
DB_T3_2XLARGE = "db.t3.2xlarge"

DB_M1_SMALL = "db.m1.small"
DB_M1_MEDIUM = "db.m1.medium"
DB_M1_LARGE = "db.m1.large"
DB_M1_XLARGE = "db.m1.xlarge"

DB_M2_XLARGE = "db.m2.xlarge"
DB_M2_2XLARGE = "db.m2.2xlarge"
DB_M2_4XLARGE = "db.m2.4xlarge"

DB_M3_MEDIUM = "db.m3.medium"
DB_M3_LARGE = "db.m3.large"
DB_M3_XLARGE = "db.m3.xlarge"
DB_M3_2XLARGE = "db.m3.2xlarge"

DB_M4_LARGE = "db.m4.large"
DB_M4_XLARGE = "db.m4.xlarge"
DB_M4_2XLARGE = "db.m4.2xlarge"
DB_M4_4XLARGE = "db.m4.4xlarge"
DB_M4_10XLARGE = "db.m4.10xlarge"
DB_M4_16XLARGE = "db.m4.16xlarge"

DB_M5_LARGE = "db.m5.large"
DB_M5_XLARGE = "db.m5.xlarge"
DB_M5_2XLARGE = "db.m5.2xlarge"
DB_M5_4XLARGE = "db.m5.4xlarge"
DB_M5_8XLARGE = "db.m5.8xlarge"
DB_M5_12XLARGE = "db.m5.12xlarge"
DB_M5_16XLARGE = "db.m5.16xlarge"
DB_M5_24XLARGE = "db.m5.24xlarge"

DB_M5D_LARGE = "db.m5d.large"
DB_M5D_XLARGE = "db.m5d.xlarge"
DB_M5D_2XLARGE = "db.m5d.2xlarge"
DB_M5D_4XLARGE = "db.m5d.4xlarge"
DB_M5D_8XLARGE = "db.m5d.8xlarge"
DB_M5D_12XLARGE = "db.m5d.12xlarge"
DB_M5D_16XLARGE = "db.m5d.16xlarge"
DB_M5D_24XLARGE = "db.m5d.24xlarge"

DB_M6G_LARGE = "db.m6g.large"
DB_M6G_XLARGE = "db.m6g.xlarge"
DB_M6G_2XLARGE = "db.m6g.2xlarge"
DB_M6G_4XLARGE = "db.m6g.4xlarge"
DB_M6G_8XLARGE = "db.m6g.8xlarge"
DB_M6G_12XLARGE = "db.m6g.12xlarge"
DB_M6G_16XLARGE = "db.m6g.16xlarge"

DB_R3_LARGE = "db.r3.large"
DB_R3_XLARGE = "db.r3.xlarge"
DB_R3_2XLARGE = "db.r3.2xlarge"
DB_R3_4XLARGE = "db.r3.4xlarge"
DB_R3_8XLARGE = "db.r3.8xlarge"

DB_R4_LARGE = "db.r4.large"
DB_R4_XLARGE = "db.r4.xlarge"
DB_R4_2XLARGE = "db.r4.2xlarge"
DB_R4_4XLARGE = "db.r4.4xlarge"
DB_R4_8XLARGE = "db.r4.8xlarge"
DB_R4_16XLARGE = "db.r4.16xlarge"

DB_R5_LARGE = "db.r5.large"
DB_R5_XLARGE = "db.r5.xlarge"
DB_R5_2XLARGE = "db.r5.2xlarge"
DB_R5_4XLARGE = "db.r5.4xlarge"
DB_R5_8XLARGE = "db.r5.8xlarge"
DB_R5_12XLARGE = "db.r5.12xlarge"
DB_R5_16XLARGE = "db.r5.16xlarge"
DB_R5_24XLARGE = "db.r5.24xlarge"

DB_R6G_LARGE = "db.r6g.large"
DB_R6G_XLARGE = "db.r6g.xlarge"
DB_R6G_2XLARGE = "db.r6g.2xlarge"
DB_R6G_4XLARGE = "db.r6g.4xlarge"
DB_R6G_8XLARGE = "db.r6g.8xlarge"
DB_R6G_12XLARGE = "db.r6g.12xlarge"
DB_R6G_16XLARGE = "db.r6g.16xlarge"

DB_X1_16XLARGE = "db.x1.16xlarge"
DB_X1_32XLARGE = "db.x1.32xlarge"

DB_X1E_XLARGE = "db.x1e.xlarge"
DB_X1E_2XLARGE = "db.x1e.2xlarge"
DB_X1E_4XLARGE = "db.x1e.4xlarge"
DB_X1E_8XLARGE = "db.x1e.8xlarge"
DB_X1E_16XLARGE = "db.x1e.16xlarge"
DB_X1E_32XLARGE = "db.x1e.32xlarge"

DB_CR1_8XLARGE = "db.cr1.8xlarge"

#
# ElastiCache node types
#

CACHE_T2_MICRO = "cache.t2.micro"
CACHE_T2_SMALL = "cache.t2.small"
CACHE_T2_MEDIUM = "cache.t2.medium"

CACHE_M3_MEDIUM = "cache.m3.medium"
CACHE_M3_LARGE = "cache.m3.large"
CACHE_M3_XLARGE = "cache.m3.xlarge"
CACHE_M3_2XLARGE = "cache.m3.2xlarge"

CACHE_R3_LARGE = "cache.r3.large"
CACHE_R3_XLARGE = "cache.r3.xlarge"
CACHE_R3_2XLARGE = "cache.r3.2xlarge"
CACHE_R3_4XLARGE = "cache.r3.4xlarge"
CACHE_R3_8XLARGE = "cache.r3.8xlarge"

CACHE_M1_SMALL = "cache.m1.small"
CACHE_M1_MEDIUM = "cache.m1.medium"
CACHE_M1_LARGE = "cache.m1.large"
CACHE_M1_XLARGE = "cache.m1.xlarge"

CACHE_M2_XLARGE = "cache.m2.xlarge"
CACHE_M2_2XLARGE = "cache.m2.2xlarge"
CACHE_M2_4XLARGE = "cache.m2.4xlarge"

CACHE_C1_XLARGE = "cache.c1.xlarge"

CACHE_T1_MICRO = "cache.t1.micro"

#
# Elasticsearch instance types
#

# Note: t2.micro.elasticsearch is deprecated.
ELASTICSEARCH_T2_MICRO = "t2.micro.elasticsearch"
ELASTICSEARCH_T2_SMALL = "t2.small.elasticsearch"
ELASTICSEARCH_T2_MEDIUM = "t2.medium.elasticsearch"

ELASTICSEARCH_T3_SMALL = "t3.small.elasticsearch"
ELASTICSEARCH_T3_MEDIUM = "t3.medium.elasticsearch"

ELASTICSEARCH_M3_MEDIUM = "m3.medium.elasticsearch"
ELASTICSEARCH_M3_LARGE = "m3.large.elasticsearch"
ELASTICSEARCH_M3_XLARGE = "m3.xlarge.elasticsearch"
ELASTICSEARCH_M3_2XLARGE = "m3.2xlarge.elasticsearch"

ELASTICSEARCH_M4_LARGE = "m4.large.elasticsearch"
ELASTICSEARCH_M4_XLARGE = "m4.xlarge.elasticsearch"
ELASTICSEARCH_M4_2XLARGE = "m4.2xlarge.elasticsearch"
ELASTICSEARCH_M4_4XLARGE = "m4.4xlarge.elasticsearch"
ELASTICSEARCH_M4_10XLARGE = "m4.10xlarge.elasticsearch"

ELASTICSEARCH_M5_LARGE = "m5.large.elasticsearch"
ELASTICSEARCH_M5_XLARGE = "m5.xlarge.elasticsearch"
ELASTICSEARCH_M5_2XLARGE = "m5.2xlarge.elasticsearch"
ELASTICSEARCH_M5_4XLARGE = "m5.4xlarge.elasticsearch"
ELASTICSEARCH_M5_12XLARGE = "m5.12xlarge.elasticsearch"

ELASTICSEARCH_M6G_LARGE = "m6g.large.elasticsearch"
ELASTICSEARCH_M6G_XLARGE = "m6g.xlarge.elasticsearch"
ELASTICSEARCH_M6G_2XLARGE = "m6g.2xlarge.elasticsearch"
ELASTICSEARCH_M6G_4XLARGE = "m6g.4xlarge.elasticsearch"
ELASTICSEARCH_M6G_8XLARGE = "m6g.8xlarge.elasticsearch"
ELASTICSEARCH_M6G_12XLARGE = "m6g.12xlarge.elasticsearch"

ELASTICSEARCH_C4_LARGE = "c4.large.elasticsearch"
ELASTICSEARCH_C4_XLARGE = "c4.xlarge.elasticsearch"
ELASTICSEARCH_C4_2XLARGE = "c4.2xlarge.elasticsearch"
ELASTICSEARCH_C4_4XLARGE = "c4.4xlarge.elasticsearch"
ELASTICSEARCH_C4_8XLARGE = "c4.8xlarge.elasticsearch"

ELASTICSEARCH_C5_LARGE = "c5.large.elasticsearch"
ELASTICSEARCH_C5_XLARGE = "c5.xlarge.elasticsearch"
ELASTICSEARCH_C5_2XLARGE = "c5.2xlarge.elasticsearch"
ELASTICSEARCH_C5_4XLARGE = "c5.4xlarge.elasticsearch"
ELASTICSEARCH_C5_9XLARGE = "c5.9xlarge.elasticsearch"
ELASTICSEARCH_C5_18XLARGE = "c5.18xlarge.elasticsearch"

ELASTICSEARCH_C6G_LARGE = "c6g.large.elasticsearch"
ELASTICSEARCH_C6G_XLARGE = "c6g.xlarge.elasticsearch"
ELASTICSEARCH_C6G_2XLARGE = "c6g.2xlarge.elasticsearch"
ELASTICSEARCH_C6G_4XLARGE = "c6g.4xlarge.elasticsearch"
ELASTICSEARCH_C6G_8XLARGE = "c6g.8xlarge.elasticsearch"
ELASTICSEARCH_C6G_12XLARGE = "c6g.12xlarge.elasticsearch"

ELASTICSEARCH_R3_LARGE = "r3.large.elasticsearch"
ELASTICSEARCH_R3_XLARGE = "r3.xlarge.elasticsearch"
ELASTICSEARCH_R3_2XLARGE = "r3.2xlarge.elasticsearch"
ELASTICSEARCH_R3_4XLARGE = "r3.4xlarge.elasticsearch"
ELASTICSEARCH_R3_8XLARGE = "r3.8xlarge.elasticsearch"

ELASTICSEARCH_R4_LARGE = "r4.large.elasticsearch"
ELASTICSEARCH_R4_XLARGE = "r4.xlarge.elasticsearch"
ELASTICSEARCH_R4_2XLARGE = "r4.2xlarge.elasticsearch"
ELASTICSEARCH_R4_4XLARGE = "r4.4xlarge.elasticsearch"
ELASTICSEARCH_R4_8XLARGE = "r4.8xlarge.elasticsearch"
ELASTICSEARCH_R4_16XLARGE = "r4.16xlarge.elasticsearch"

ELASTICSEARCH_R5_LARGE = "r5.large.elasticsearch"
ELASTICSEARCH_R5_XLARGE = "r5.xlarge.elasticsearch"
ELASTICSEARCH_R5_2XLARGE = "r5.2xlarge.elasticsearch"
ELASTICSEARCH_R5_4XLARGE = "r5.4xlarge.elasticsearch"
ELASTICSEARCH_R5_12XLARGE = "r5.12xlarge.elasticsearch"

ELASTICSEARCH_R6G_LARGE = "r6g.large.elasticsearch"
ELASTICSEARCH_R6G_XLARGE = "r6g.xlarge.elasticsearch"
ELASTICSEARCH_R6G_2XLARGE = "r6g.2xlarge.elasticsearch"
ELASTICSEARCH_R6G_4XLARGE = "r6g.4xlarge.elasticsearch"
ELASTICSEARCH_R6G_8XLARGE = "r6g.8xlarge.elasticsearch"
ELASTICSEARCH_R6G_12XLARGE = "r6g.12xlarge.elasticsearch"

ELASTICSEARCH_R6GD_LARGE = "r6gd.large.elasticsearch"
ELASTICSEARCH_R6GD_XLARGE = "r6gd.xlarge.elasticsearch"
ELASTICSEARCH_R6GD_2XLARGE = "r6gd.2xlarge.elasticsearch"
ELASTICSEARCH_R6GD_4XLARGE = "r6gd.4xlarge.elasticsearch"
ELASTICSEARCH_R6GD_8XLARGE = "r6gd.8xlarge.elasticsearch"
ELASTICSEARCH_R6GD_12XLARGE = "r6gd.12xlarge.elasticsearch"
ELASTICSEARCH_R6GD_16XLARGE = "r6gd.16xlarge.elasticsearch"

ELASTICSEARCH_I2_XLARGE = "i2.xlarge.elasticsearch"
ELASTICSEARCH_I2_2XLARGE = "i2.2xlarge.elasticsearch"

ELASTICSEARCH_I3_LARGE = "i3.large.elasticsearch"
ELASTICSEARCH_I3_XLARGE = "i3.xlarge.elasticsearch"
ELASTICSEARCH_I3_2XLARGE = "i3.2xlarge.elasticsearch"
ELASTICSEARCH_I3_4XLARGE = "i3.4xlarge.elasticsearch"
ELASTICSEARCH_I3_8XLARGE = "i3.8xlarge.elasticsearch"
ELASTICSEARCH_I3_16XLARGE = "i3.16xlarge.elasticsearch"

ELASTICSEARCH_ULTRAWARM1_MEDIUM = "ultrawarm1.medium.elasticsearch"
ELASTICSEARCH_ULTRAWARM1_LARGE = "ultrawarm1.large.elasticsearch"

#
# Kafka brokers instance types
#

KAFKA_M5_LARGE = "kafka.m5.large"
KAFKA_M5_XLARGE = "kafka.m5.xlarge"
KAFKA_M5_2XLARGE = "kafka.m5.2xlarge"
KAFKA_M5_4XLARGE = "kafka.m5.4xlarge"
KAFKA_M5_12XLARGE = "kafka.m5.12xlarge"
KAFKA_M5_24XLARGE = "kafka.m5.24xlarge"

#
# Parameter types
#

STRING = "String"
NUMBER = "Number"
LIST_OF_NUMBERS = "List<Number>"
COMMA_DELIMITED_LIST = "CommaDelimitedList"

AVAILABILITY_ZONE_NAME = "AWS::EC2::AvailabilityZone::Name"
IMAGE_ID = "AWS::EC2::Image::Id"
INSTANCE_ID = "AWS::EC2::Instance::Id"
KEY_PAIR_NAME = "AWS::EC2::KeyPair::KeyName"
SECURITY_GROUP_NAME = "AWS::EC2::SecurityGroup::GroupName"
SECURITY_GROUP_ID = "AWS::EC2::SecurityGroup::Id"
SUBNET_ID = "AWS::EC2::Subnet::Id"
VOLUME_ID = "AWS::EC2::Volume::Id"
VPC_ID = "AWS::EC2::VPC::Id"
HOSTED_ZONE_ID = "AWS::Route53::HostedZone::Id"

LIST_OF_AVAILABILITY_ZONE_NAMES = "List<AWS::EC2::AvailabilityZone::Name>"
LIST_OF_IMAGE_ID = "List<AWS::EC2::Image::Id>"
LIST_OF_INSTANCE_IDS = "List<AWS::EC2::Instance::Id>"
LIST_OF_SECURITY_GROUP_NAMES = "List<AWS::EC2::SecurityGroup::GroupName>"
LIST_OF_SECURITY_GROUP_IDS = "List<AWS::EC2::SecurityGroup::Id>"
LIST_OF_SUBNET_IDS = "List<AWS::EC2::Subnet::Id>"
LIST_OF_VOLUME_IDS = "List<AWS::EC2::Volume::Id>"
LIST_OF_VPC_IDS = "List<AWS::EC2::VPC::Id>"
LIST_OF_HOSTED_ZONE_IDS = "List<AWS::Route53::HostedZone::Id>"

#
# Logs
#
LOGS_ALLOWED_RETENTION_DAYS = [
    1,
    3,
    5,
    7,
    14,
    30,
    60,
    90,
    120,
    150,
    180,
    365,
    400,
    545,
    731,
    1827,
    3653,
]

#
# Route53
#

CLOUDFRONT_HOSTEDZONEID = "Z2FDTNDATAQYW2"
