terra_boi 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b689d6ea388ce96a4aede4fdca787cd7b2abe815e7f1042d4ebad31f917cf3f9
4
- data.tar.gz: 6567ebf4cada6bc2e93571dd79d953e5a374e69080431e707e6eb45c510fc125
3
+ metadata.gz: be617b630819e0ab12e6919c081e8ee3209d971a10c2547934f2b41aa2af1528
4
+ data.tar.gz: a8feea80b693a85bc0c134e491c1b8a2a3fa5abe91f48cb478d12f1c83140202
5
5
  SHA512:
6
- metadata.gz: d1e157407c6df1044e1316b4b5674509a780af8666a5725e474823304998a5dc2b6ddfcdcda7dffcdcd7f74c4e063a17be89cfa54f515eb917cddfd6a37476d8
7
- data.tar.gz: 5be2321fde58aeffe1e7fb4f8f4edf95a7b40b3a16cf9f29e0b0ba0d9a6f09aa4eaa67c1119468c0c1377fac322fcbf7755bb097359293f0be4c5e6348e61477
6
+ metadata.gz: e608ceb793a1577ee4f0a033c14f16d203e8443664489e150beacf54dfb3e47f67329e59f62b96e0b6e3055abec48188e8d1c5b2d27ef7b5050bcada8f4823d1
7
+ data.tar.gz: 0e14eb474e5bb988b5a7658333e8892f8595c4fc8e5707d3f7dca0b353c4ad4a6a3a813793a05c072bff414785e37d35064af27a78fc38d79ec7fa7b12342841
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # TerraBoi
2
2
 
3
- This ruby gem was created by [Charlie Reese](https://charliereese.ca/about) to get rails applications deployed into production as quickly and easily as possible.
3
+ This ruby gem was created by [Charlie Reese](https://charliereese.ca/about) at [Clientelify](https://clientelify.com) to get rails applications deployed into production as quickly and easily as possible.
4
4
 
5
5
  **Raison d'etre**: creating basic infrastructure to house production SaaS applications on AWS is tedious and boring. It's often a similar process every time, and every time it sucks.
6
6
 
@@ -15,7 +15,7 @@ module TerraBoi
15
15
  "terraform/#{env}/#{args[:file_path]}",
16
16
  {
17
17
  env: env,
18
- domain_name: class_options[:domain_name]
18
+ domain_name: (class_options && class_options[:domain_name]) || generate_application_name + '.com'
19
19
  }
20
20
  )
21
21
  end
@@ -31,6 +31,7 @@ module TerraBoi
31
31
  generate "terra_boi:db_config"
32
32
  generate "terra_boi:data_config"
33
33
  generate "terra_boi:packer"
34
+ generate "terra_boi:master_worker"
34
35
  end
35
36
 
36
37
  end
@@ -0,0 +1,47 @@
1
+ require "generators/extensions"
2
+
3
+ module TerraBoi
4
+ class MasterWorkerGenerator < 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 master worker server files
11
+
12
+ To execute, run rails generate terra_boi:master_worker
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
+ end
22
+
23
+ def create_main_terraform_file
24
+ generate_terraform_files({
25
+ template: 'master_worker_main.erb',
26
+ file_path: 'master_worker/main.tf',
27
+ env: ['staging', 'prod']
28
+ })
29
+ end
30
+
31
+ def create_output_terraform_file
32
+ generate_terraform_files({
33
+ template: 'master_worker_output.erb',
34
+ file_path: 'master_worker/output.tf',
35
+ env: ['staging', 'prod']
36
+ })
37
+ end
38
+
39
+ def create_user_data_terraform_file
40
+ generate_terraform_files({
41
+ template: 'master_worker_user_data.erb',
42
+ file_path: 'master_worker/user-data.sh',
43
+ env: ['staging', 'prod']
44
+ })
45
+ end
46
+ end
47
+ end
@@ -3,7 +3,7 @@ FROM ruby:<%= class_options[:ruby_version] %>
3
3
  # replace shell with bash so we can source files
4
4
  RUN rm /bin/sh && ln -s /bin/bash /bin/sh
5
5
 
6
- RUN apt-get update -qq && apt-get install -y build-essential
6
+ RUN apt-get update -qq && apt-get install -y build-essential && apt-get install -y cron
7
7
 
8
8
  # # for postgres
9
9
  # RUN apt-get install -y libpq-dev
@@ -20,7 +20,7 @@ variable "db_username" {}
20
20
  variable "db_password" {}
21
21
 
22
22
  module "db_and_s3" {
23
- source = "github.com/charliereese/terraform_modules//data?ref=v0.0.21"
23
+ source = "github.com/charliereese/terraform_modules//data?ref=v0.0.23"
24
24
 
25
25
  env = "<%= config[:env] %>"
26
26
  app_name = "<%= application_name %>"
@@ -0,0 +1,26 @@
1
+ # -------------------------------------------------------------------
2
+ # 1. STATE
3
+ # -------------------------------------------------------------------
4
+
5
+ terraform {
6
+ backend "s3" {
7
+ bucket = "<%= application_name %>-terraform-state-storage"
8
+ key = "terraform/<%= config[:env] %>-state/master-worker"
9
+ region = "us-east-2"
10
+ dynamodb_table = "<%= application_name %>-terraform-state-lock"
11
+ encrypt = true
12
+ }
13
+ }
14
+
15
+ # -------------------------------------------------------------------
16
+ # 2. MASTER WORKER MODULE
17
+ # -------------------------------------------------------------------
18
+
19
+ module "master_worker_cluster" {
20
+ source = "github.com/charliereese/terraform_modules//master_worker?ref=v0.0.23"
21
+
22
+ instance_type = "t2.micro"
23
+ env = "<%= config[:env] %>"
24
+ app_name = "<%= application_name %>"
25
+ id_rsa_pub = "<%= id_rsa_pub %>"
26
+ }
@@ -0,0 +1,14 @@
1
+ output "master_worker_ip_address" {
2
+ value = module.master_worker_cluster.master_worker_ip_address
3
+ description = "The domain name of the application load balancer"
4
+ }
5
+
6
+ output "master_worker_id" {
7
+ value = module.master_worker_cluster.master_worker_id
8
+ description = "The ID of the master worker"
9
+ }
10
+
11
+ output "master_worker_arn" {
12
+ value = module.master_worker_cluster.master_worker_arn
13
+ description = "The ARN of the master worker"
14
+ }
@@ -0,0 +1,31 @@
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
+ --entrypoint 'whenever --update-crontab' \
18
+ -e DB_HOST=$DB_HOST \
19
+ -e DB_USERNAME=$DB_USERNAME \
20
+ -e DB_PASSWORD=$DB_PASSWORD \
21
+ -e RAILS_ENV=$RAILS_ENV \
22
+ -e INFRASTRUCTURE_ENV=$INFRASTRUCTURE_ENV \
23
+ -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
24
+ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
25
+ -e RAILS_MASTER_KEY=$RAILS_MASTER_KEY \
26
+ -e RAILS_SERVE_STATIC_FILES=true \
27
+ $DOCKERHUB_USERNAME/$APPLICATION_NAME:latest
28
+
29
+ # Run outstanding DB migrations
30
+ docker container exec $APPLICATION_NAME rake db:migrate
31
+ docker container exec $APPLICATION_NAME RAILS_ENV=production bin/delayed_job start
@@ -3,7 +3,7 @@
3
3
  # ---------------------------------------------------------------------------------------------------------------------
4
4
 
5
5
  module "remote_state_locking" {
6
- source = "github.com/charliereese/terraform_modules//state?ref=v0.0.21"
6
+ source = "github.com/charliereese/terraform_modules//state?ref=v0.0.23"
7
7
 
8
8
  app_name = "<%= application_name %>"
9
9
  region = "us-east-2"
@@ -17,7 +17,7 @@ terraform {
17
17
  # ---------------------------------------------------------------------------------------------------------------------
18
18
 
19
19
  module "webserver_cluster" {
20
- source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.21"
20
+ source = "github.com/charliereese/terraform_modules//web_servers?ref=v0.0.23"
21
21
 
22
22
  instance_type = "t2.micro"
23
23
  env = "<%= config[:env] %>"
@@ -1,3 +1,3 @@
1
1
  module TerraBoi
2
- VERSION = '0.0.8'
2
+ VERSION = '0.0.9'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terra_boi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charlie Reese
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-02 00:00:00.000000000 Z
11
+ date: 2019-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -53,6 +53,7 @@ files:
53
53
  - lib/generators/terra_boi/db_config_generator.rb
54
54
  - lib/generators/terra_boi/dockerfile_generator.rb
55
55
  - lib/generators/terra_boi/host_initializer_generator.rb
56
+ - lib/generators/terra_boi/master_worker_generator.rb
56
57
  - lib/generators/terra_boi/packer_generator.rb
57
58
  - lib/generators/terra_boi/state_generator.rb
58
59
  - lib/generators/terra_boi/templates/Dockerfile.erb
@@ -61,6 +62,9 @@ files:
61
62
  - lib/generators/terra_boi/templates/data_storage_config.erb
62
63
  - lib/generators/terra_boi/templates/db_config.erb
63
64
  - lib/generators/terra_boi/templates/host_initializer.erb
65
+ - lib/generators/terra_boi/templates/master_worker_main.erb
66
+ - lib/generators/terra_boi/templates/master_worker_output.erb
67
+ - lib/generators/terra_boi/templates/master_worker_user_data.erb
64
68
  - lib/generators/terra_boi/templates/packer_ami_build.erb
65
69
  - lib/generators/terra_boi/templates/packer_application.erb
66
70
  - lib/generators/terra_boi/templates/state_main.erb