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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +86 -157
  3. data/lib/generators/extensions.rb +5 -5
  4. data/lib/generators/terra_boi/boilerplate_generator.rb +39 -32
  5. data/lib/generators/terra_boi/dockerfile_generator.rb +19 -18
  6. data/lib/generators/terra_boi/host_initializer_generator.rb +18 -18
  7. data/lib/generators/terra_boi/templates/Dockerfile.erb +4 -23
  8. data/lib/generators/terra_boi/templates/cert/main.tf.erb +32 -0
  9. data/lib/generators/terra_boi/templates/cert/var.tf.erb +15 -0
  10. data/lib/generators/terra_boi/templates/data_storage_config.erb +7 -7
  11. data/lib/generators/terra_boi/templates/ecr/ecs_role.tf.erb +41 -0
  12. data/lib/generators/terra_boi/templates/ecr/main.tf.erb +26 -0
  13. data/lib/generators/terra_boi/templates/ecr/output.tf.erb +11 -0
  14. data/lib/generators/terra_boi/templates/ecr/var.tf.erb +15 -0
  15. data/lib/generators/terra_boi/templates/{data_main.erb → env/data/main.tf.erb} +2 -2
  16. data/lib/generators/terra_boi/templates/{data_output.erb → env/data/output.tf.erb} +1 -1
  17. data/lib/generators/terra_boi/templates/env/ecs_cluster/ecs_cluster.tf.erb +24 -0
  18. data/lib/generators/terra_boi/templates/env/head_worker/ecs.tf.erb +55 -0
  19. data/lib/generators/terra_boi/templates/env/web_app/ecs.tf.erb +59 -0
  20. data/lib/generators/terra_boi/templates/lib/scripts/push_to_ecr.sh.erb +21 -0
  21. data/lib/generators/terra_boi/templates/lib/scripts/update_service_pull_from_ecr.sh.erb +18 -0
  22. data/lib/generators/terra_boi/templates/lib/task_templates/head_worker.json.erb +61 -0
  23. data/lib/generators/terra_boi/templates/lib/task_templates/web_app.json.erb +58 -0
  24. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_cluster/main.tf.erb +12 -0
  25. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_cluster/var.tf.erb +20 -0
  26. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/ecs_role.tf.erb +7 -0
  27. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/load_balancer.tf.erb +92 -0
  28. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/main.tf.erb +134 -0
  29. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/output.tf.erb +11 -0
  30. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_web_app/var.tf.erb +63 -0
  31. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/ecs_role.tf.erb +7 -0
  32. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/main.tf.erb +120 -0
  33. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/output.tf.erb +7 -0
  34. data/lib/generators/terra_boi/templates/lib/terraform_modules/ecs_worker/var.tf.erb +57 -0
  35. data/lib/generators/terra_boi/templates/state_main.erb +1 -1
  36. data/lib/generators/terra_boi/tf_cert_generator.rb +28 -0
  37. data/lib/generators/terra_boi/tf_ecr_generator.rb +28 -0
  38. data/lib/generators/terra_boi/tf_env_generator.rb +54 -0
  39. data/lib/generators/terra_boi/tf_lib_generator.rb +57 -0
  40. data/lib/generators/terra_boi/tf_state_generator.rb +24 -0
  41. data/lib/tasks/terra_boi_tasks.rake +280 -4
  42. data/lib/terra_boi/railtie.rb +5 -2
  43. data/lib/terra_boi/version.rb +1 -1
  44. metadata +60 -31
  45. data/lib/generators/terra_boi/data_generator.rb +0 -38
  46. data/lib/generators/terra_boi/master_worker_generator.rb +0 -47
  47. data/lib/generators/terra_boi/packer_generator.rb +0 -26
  48. data/lib/generators/terra_boi/state_generator.rb +0 -25
  49. data/lib/generators/terra_boi/templates/master_worker_main.erb +0 -26
  50. data/lib/generators/terra_boi/templates/master_worker_output.erb +0 -14
  51. data/lib/generators/terra_boi/templates/master_worker_user_data.erb +0 -33
  52. data/lib/generators/terra_boi/templates/packer_ami_build.erb +0 -27
  53. data/lib/generators/terra_boi/templates/packer_application.erb +0 -49
  54. data/lib/generators/terra_boi/templates/web_servers_main.erb +0 -31
  55. data/lib/generators/terra_boi/templates/web_servers_output.erb +0 -14
  56. data/lib/generators/terra_boi/templates/web_servers_user_data.erb +0 -29
  57. 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