terra_boi 0.0.12 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +86 -157
- data/lib/generators/extensions.rb +5 -5
- data/lib/generators/terra_boi/boilerplate_generator.rb +39 -32
- data/lib/generators/terra_boi/dockerfile_generator.rb +19 -18
- data/lib/generators/terra_boi/host_initializer_generator.rb +18 -18
- data/lib/generators/terra_boi/templates/Dockerfile.erb +4 -23
- data/lib/generators/terra_boi/templates/cert/main.tf.erb +32 -0
- data/lib/generators/terra_boi/templates/cert/var.tf.erb +15 -0
- data/lib/generators/terra_boi/templates/data_storage_config.erb +7 -7
- data/lib/generators/terra_boi/templates/ecr/ecs_role.tf.erb +41 -0
- data/lib/generators/terra_boi/templates/ecr/main.tf.erb +26 -0
- data/lib/generators/terra_boi/templates/ecr/output.tf.erb +11 -0
- data/lib/generators/terra_boi/templates/ecr/var.tf.erb +15 -0
- data/lib/generators/terra_boi/templates/{data_main.erb → env/data/main.tf.erb} +2 -2
- data/lib/generators/terra_boi/templates/{data_output.erb → env/data/output.tf.erb} +1 -1
- data/lib/generators/terra_boi/templates/env/ecs_cluster/ecs_cluster.tf.erb +24 -0
- data/lib/generators/terra_boi/templates/env/head_worker/ecs.tf.erb +55 -0
- data/lib/generators/terra_boi/templates/env/web_app/ecs.tf.erb +59 -0
- data/lib/generators/terra_boi/templates/lib/scripts/push_to_ecr.sh.erb +21 -0
- data/lib/generators/terra_boi/templates/lib/scripts/update_service_pull_from_ecr.sh.erb +18 -0
- data/lib/generators/terra_boi/templates/lib/task_templates/head_worker.json.erb +61 -0
- data/lib/generators/terra_boi/templates/lib/task_templates/web_app.json.erb +58 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_cluster/main.tf.erb +12 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_cluster/var.tf.erb +20 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/ecs_role.tf.erb +7 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/load_balancer.tf.erb +92 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/main.tf.erb +134 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/output.tf.erb +11 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/var.tf.erb +63 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/ecs_role.tf.erb +7 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/main.tf.erb +120 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/output.tf.erb +7 -0
- data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/var.tf.erb +57 -0
- data/lib/generators/terra_boi/templates/state_main.erb +1 -1
- data/lib/generators/terra_boi/tf_cert_generator.rb +28 -0
- data/lib/generators/terra_boi/tf_ecr_generator.rb +28 -0
- data/lib/generators/terra_boi/tf_env_generator.rb +54 -0
- data/lib/generators/terra_boi/tf_lib_generator.rb +57 -0
- data/lib/generators/terra_boi/tf_state_generator.rb +24 -0
- data/lib/tasks/terra_boi_tasks.rake +280 -4
- data/lib/terra_boi/railtie.rb +5 -2
- data/lib/terra_boi/version.rb +1 -1
- metadata +60 -31
- data/lib/generators/terra_boi/data_generator.rb +0 -38
- data/lib/generators/terra_boi/master_worker_generator.rb +0 -47
- data/lib/generators/terra_boi/packer_generator.rb +0 -26
- data/lib/generators/terra_boi/state_generator.rb +0 -25
- data/lib/generators/terra_boi/templates/master_worker_main.erb +0 -26
- data/lib/generators/terra_boi/templates/master_worker_output.erb +0 -14
- data/lib/generators/terra_boi/templates/master_worker_user_data.erb +0 -33
- data/lib/generators/terra_boi/templates/packer_ami_build.erb +0 -27
- data/lib/generators/terra_boi/templates/packer_application.erb +0 -49
- data/lib/generators/terra_boi/templates/web_servers_main.erb +0 -31
- data/lib/generators/terra_boi/templates/web_servers_output.erb +0 -14
- data/lib/generators/terra_boi/templates/web_servers_user_data.erb +0 -29
- data/lib/generators/terra_boi/web_servers_generator.rb +0 -48
@@ -1,31 +0,0 @@
|
|
1
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
2
|
-
# 1. STATE
|
3
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
4
|
-
|
5
|
-
terraform {
|
6
|
-
backend "s3" {
|
7
|
-
bucket = "<%= application_name %>-terraform-state-storage"
|
8
|
-
key = "terraform/<%= config[:env] %>-state/web-servers"
|
9
|
-
region = "us-east-2"
|
10
|
-
dynamodb_table = "<%= application_name %>-terraform-state-lock"
|
11
|
-
encrypt = true
|
12
|
-
}
|
13
|
-
}
|
14
|
-
|
15
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
16
|
-
# 2. WEB SERVERS MODULE
|
17
|
-
# ---------------------------------------------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
module "webserver_cluster" {
|
20
|
-
source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.24"
|
21
|
-
|
22
|
-
instance_type = "t2.micro"
|
23
|
-
env = "<%= config[:env] %>"
|
24
|
-
app_name = "<%= application_name %>"
|
25
|
-
domain_name = "<%= config[:domain_name] %>"
|
26
|
-
id_rsa_pub = "<%= id_rsa_pub %>"
|
27
|
-
min_size = 1
|
28
|
-
max_size = 1
|
29
|
-
business_hours_size = 1
|
30
|
-
night_hours_size = 1
|
31
|
-
}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
output "alb_dns_name" {
|
2
|
-
value = module.webserver_cluster.alb_dns_name
|
3
|
-
description = "The domain name of the application load balancer"
|
4
|
-
}
|
5
|
-
|
6
|
-
output "asg_name" {
|
7
|
-
value = module.webserver_cluster.asg_name
|
8
|
-
description = "autoscaling group name"
|
9
|
-
}
|
10
|
-
|
11
|
-
output "alb_security_group_id" {
|
12
|
-
value = module.webserver_cluster.alb_security_group_id
|
13
|
-
description = "ID of Security Group attached to ALB"
|
14
|
-
}
|
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
sleep 5
|
3
|
-
|
4
|
-
# Set ENV vars from terraform
|
5
|
-
echo "APPLICATION_NAME=${application_name}" >> /etc/environment
|
6
|
-
echo "DB_HOST=${db_address}" >> /etc/environment
|
7
|
-
echo "DB_USERNAME=${db_username}" >> /etc/environment
|
8
|
-
echo "RAILS_ENV=production" >> /etc/environment
|
9
|
-
echo "INFRASTRUCTURE_ENV=${env}" >> /etc/environment
|
10
|
-
|
11
|
-
# Load ENV vars in current session
|
12
|
-
for line in $( cat /etc/environment ); do export $line; done
|
13
|
-
|
14
|
-
# Set DB environment variables in docker container and
|
15
|
-
# start rails container
|
16
|
-
docker container run -p 3000:3000 --name $APPLICATION_NAME --restart always -d \
|
17
|
-
-e DB_HOST=$DB_HOST \
|
18
|
-
-e DB_USERNAME=$DB_USERNAME \
|
19
|
-
-e DB_PASSWORD=$DB_PASSWORD \
|
20
|
-
-e RAILS_ENV=$RAILS_ENV \
|
21
|
-
-e INFRASTRUCTURE_ENV=$INFRASTRUCTURE_ENV \
|
22
|
-
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
|
23
|
-
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
|
24
|
-
-e RAILS_MASTER_KEY=$RAILS_MASTER_KEY \
|
25
|
-
-e RAILS_SERVE_STATIC_FILES=true \
|
26
|
-
$DOCKERHUB_USERNAME/$APPLICATION_NAME:latest
|
27
|
-
|
28
|
-
# Run outstanding DB migrations
|
29
|
-
docker container exec $APPLICATION_NAME rake db:migrate
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require "generators/extensions"
|
2
|
-
|
3
|
-
module TerraBoi
|
4
|
-
class WebServersGenerator < Rails::Generators::Base
|
5
|
-
attr_accessor :application_name, :id_rsa_pub, :class_options
|
6
|
-
class_option :domain_name, type: :string
|
7
|
-
source_root File.expand_path('templates', __dir__)
|
8
|
-
|
9
|
-
desc (<<-EOF
|
10
|
-
Generate staging and production terraform web server files
|
11
|
-
|
12
|
-
To execute, run rails generate terra_boi:web_servers --domain_name example.com
|
13
|
-
EOF
|
14
|
-
.gsub(/\t/, '')
|
15
|
-
)
|
16
|
-
|
17
|
-
def init
|
18
|
-
# defined in lib/generators/extensions
|
19
|
-
self.application_name = generate_application_name
|
20
|
-
self.id_rsa_pub = open(ENV['HOME'] + "/.ssh/id_rsa.pub").read.chomp
|
21
|
-
self.class_options = options
|
22
|
-
end
|
23
|
-
|
24
|
-
def create_main_terraform_file
|
25
|
-
generate_terraform_files({
|
26
|
-
template: 'web_servers_main.erb',
|
27
|
-
file_path: 'web_servers/main.tf',
|
28
|
-
env: ['staging', 'prod']
|
29
|
-
})
|
30
|
-
end
|
31
|
-
|
32
|
-
def create_output_terraform_file
|
33
|
-
generate_terraform_files({
|
34
|
-
template: 'web_servers_output.erb',
|
35
|
-
file_path: 'web_servers/output.tf',
|
36
|
-
env: ['staging', 'prod']
|
37
|
-
})
|
38
|
-
end
|
39
|
-
|
40
|
-
def create_user_data_terraform_file
|
41
|
-
generate_terraform_files({
|
42
|
-
template: 'web_servers_user_data.erb',
|
43
|
-
file_path: 'web_servers/user-data.sh',
|
44
|
-
env: ['staging', 'prod']
|
45
|
-
})
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|