terra_boi 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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