aws_stack_builder 0.1.0
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 +7 -0
- data/.gitignore +9 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +20 -0
- data/LICENSE.txt +21 -0
- data/README.md +107 -0
- data/Rakefile +2 -0
- data/aws_stack_builder.gemspec +29 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/aws_stack_builder.rb +5 -0
- data/lib/aws_stack_builder/version.rb +3 -0
- data/lib/generators/aws_stack_builder/USAGE +25 -0
- data/lib/generators/aws_stack_builder/aws_stack_builder_generator.rb +47 -0
- data/lib/generators/aws_stack_builder/templates/aws/doc/README.md +69 -0
- data/lib/generators/aws_stack_builder/templates/aws/doc/app-cf-designer.png +0 -0
- data/lib/generators/aws_stack_builder/templates/aws/geradores/ami-userdata.sh.template +54 -0
- data/lib/generators/aws_stack_builder/templates/aws/geradores/build_templates.sh.template +6 -0
- data/lib/generators/aws_stack_builder/templates/aws/geradores/cf-base-instance.py.template +96 -0
- data/lib/generators/aws_stack_builder/templates/aws/geradores/cf-stack-generator.py.template +456 -0
- data/lib/generators/aws_stack_builder/templates/aws/scripts/app_deploy.sh.template +32 -0
- data/lib/generators/aws_stack_builder/templates/aws/scripts/app_pack.sh +36 -0
- data/lib/generators/aws_stack_builder/templates/aws/scripts/app_stop_instances_by_role.sh.template +35 -0
- data/lib/generators/aws_stack_builder/templates/aws/scripts/app_update.sh.template +77 -0
- data/lib/generators/aws_stack_builder/templates/aws/scripts/run_delayed_job.sh +25 -0
- metadata +102 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
USAGE="Uso: app_deploy.sh <RAILS_ENV>"
|
4
|
+
|
5
|
+
SCRIPT_DIR=$(dirname "$0")
|
6
|
+
cd $SCRIPT_DIR
|
7
|
+
|
8
|
+
RAILS_ENV=$1
|
9
|
+
|
10
|
+
if [ -z $RAILS_ENV ]; then
|
11
|
+
echo "Argumento RAILS_ENV é obrigatório."
|
12
|
+
echo $USAGE
|
13
|
+
exit
|
14
|
+
fi
|
15
|
+
|
16
|
+
if [ $RAILS_ENV != 'staging' ] && [ $RAILS_ENV != 'production' ]; then
|
17
|
+
echo "Valores permitidos para o argumento RAILS_ENV são: staging, production."
|
18
|
+
echo $USAGE
|
19
|
+
exit
|
20
|
+
fi
|
21
|
+
|
22
|
+
echo "Preparing application for deployment..."
|
23
|
+
app_pack.sh $RAILS_ENV
|
24
|
+
echo "Done."
|
25
|
+
|
26
|
+
echo "Rebooting AWS instances to deploy new version."
|
27
|
+
app_stop_instances_by_role.sh $RAILS_ENV web
|
28
|
+
<%- @roles.each do |role| %>
|
29
|
+
app_stop_instances_by_role.sh $RAILS_ENV <%= role %>
|
30
|
+
<% end %>
|
31
|
+
echo "Done."
|
32
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
SCRIPT_DIR=$(dirname "$0")
|
4
|
+
cd $SCRIPT_DIR/../..
|
5
|
+
|
6
|
+
mkdir -p dist
|
7
|
+
RAILS_ENV=$1
|
8
|
+
APP_NAME=taxrules
|
9
|
+
|
10
|
+
# get current branch
|
11
|
+
BRANCH=`git branch | grep "*" | awk '{print $2}'`
|
12
|
+
|
13
|
+
# if RAILS_ENV was not set on the call, define it based on the current branch
|
14
|
+
if [ -z "$RAILS_ENV" ]; then
|
15
|
+
if [ $BRANCH = 'master' ]; then
|
16
|
+
RAILS_ENV="production"
|
17
|
+
else
|
18
|
+
RAILS_ENV="staging"
|
19
|
+
fi
|
20
|
+
fi
|
21
|
+
|
22
|
+
# define the filename
|
23
|
+
if [ $RAILS_ENV = 'staging' ]; then
|
24
|
+
FILENAME=source-hml.zip
|
25
|
+
else
|
26
|
+
FILENAME=source.zip
|
27
|
+
fi
|
28
|
+
|
29
|
+
echo Packing branch $BRANCH to $FILENAME
|
30
|
+
git archive -o dist/$FILENAME $BRANCH
|
31
|
+
git show $BRANCH:aws/scripts/app_update.sh > dist/app_update.sh
|
32
|
+
|
33
|
+
s3cmd sync dist/app_update.sh s3://taxweb-deploy/$APP_NAME/app_update.sh
|
34
|
+
s3cmd sync dist/$FILENAME s3://taxweb-deploy/$APP_NAME/$FILENAME
|
35
|
+
s3cmd setacl s3://taxweb-deploy/$APP_NAME/$FILENAME --acl-public
|
36
|
+
s3cmd setacl s3://taxweb-deploy/$APP_NAME/app_update.sh --acl-public
|
data/lib/generators/aws_stack_builder/templates/aws/scripts/app_stop_instances_by_role.sh.template
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
USAGE="Uso: app_stop_instances_by_role.sh <RAILS_ENV> <ROLE>"
|
4
|
+
|
5
|
+
RAILS_ENV=$1
|
6
|
+
ROLE=$2
|
7
|
+
|
8
|
+
if [ -z $RAILS_ENV ] || [ -z $ROLE ]; then
|
9
|
+
echo "Argumentos RAILS_ENV e ROLE são obrigatórios."
|
10
|
+
echo $USAGE
|
11
|
+
exit
|
12
|
+
fi
|
13
|
+
|
14
|
+
if [ $RAILS_ENV != 'staging' ] && [ $RAILS_ENV != 'production' ]; then
|
15
|
+
echo "Valores permitidos para o argumento RAILS_ENV são: staging, production."
|
16
|
+
echo $USAGE
|
17
|
+
exit
|
18
|
+
fi
|
19
|
+
|
20
|
+
if [ $RAILS_ENV = 'production' ]; then
|
21
|
+
REGION="us-east-1"
|
22
|
+
else
|
23
|
+
REGION="us-west-2"
|
24
|
+
fi
|
25
|
+
|
26
|
+
# get instance ids
|
27
|
+
instance_ids=$(aws ec2 describe-instances --region $REGION --output text --filter "Name=tag:Name,Values=<%= @app_name %>*" "Name=tag:Env,Values=$RAILS_ENV" "Name=tag:Role,Values=$ROLE" "Name=instance-state-name,Values=running" | grep INSTANCES | awk '{if ($18 == "ebs") print $9}')
|
28
|
+
|
29
|
+
# stop instances
|
30
|
+
if [ -n "$instance_ids" ]
|
31
|
+
then
|
32
|
+
aws ec2 stop-instances --region $REGION --instance-ids $instance_ids
|
33
|
+
else
|
34
|
+
echo "Nenhuma instância do ROLE '$ROLE' encontrada no ambiente '$RAILS_ENV'."
|
35
|
+
fi
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/bin/bash --login
|
2
|
+
|
3
|
+
app_path="/home/deploy/app/current"
|
4
|
+
shared_path="/home/deploy/app/shared"
|
5
|
+
|
6
|
+
# Log output of this script to file in /tmp
|
7
|
+
set -x
|
8
|
+
exec > /tmp/app_update.log 2>&1
|
9
|
+
|
10
|
+
RAILS_ENV=$1
|
11
|
+
ROLE=$2
|
12
|
+
BUCKET_NAME=$3
|
13
|
+
|
14
|
+
if [ -z $RAILS_ENV ]; then
|
15
|
+
echo Environment must be informed
|
16
|
+
exit 1
|
17
|
+
fi
|
18
|
+
|
19
|
+
if [ -z ROLE ]; then
|
20
|
+
echo Role must be informed
|
21
|
+
exit 1
|
22
|
+
fi
|
23
|
+
|
24
|
+
if [ $RAILS_ENV = 'production' ]; then
|
25
|
+
FILENAME=source.zip
|
26
|
+
else
|
27
|
+
FILENAME=source-hml.zip
|
28
|
+
fi
|
29
|
+
|
30
|
+
if [ -z $ROLE ]; then
|
31
|
+
ROLE="web"
|
32
|
+
fi
|
33
|
+
|
34
|
+
|
35
|
+
echo Updating Role: $ROLE
|
36
|
+
|
37
|
+
echo Deleting old files
|
38
|
+
rm -rf ./*
|
39
|
+
rm -rf ./.*
|
40
|
+
echo done.
|
41
|
+
|
42
|
+
echo Downloading source code from S3 : $FILENAME
|
43
|
+
wget http://taxweb-deploy.s3.amazonaws.com/$BUCKET_NAME/$FILENAME -O $FILENAME >/dev/null 2>&1
|
44
|
+
echo done.
|
45
|
+
|
46
|
+
echo Extracting source code
|
47
|
+
|
48
|
+
unzip -o -q $FILENAME
|
49
|
+
echo done.
|
50
|
+
|
51
|
+
echo Installing new gems...
|
52
|
+
cd /tmp
|
53
|
+
cd $app_path
|
54
|
+
bundle config git.allow_insecure true && bundle install --without development test
|
55
|
+
echo done.
|
56
|
+
|
57
|
+
export RAILS_ENV=$RAILS_ENV
|
58
|
+
|
59
|
+
if [ $ROLE = "web" ]; then
|
60
|
+
echo Compiling Assets...
|
61
|
+
rake assets:precompile
|
62
|
+
echo Restarting Passenger
|
63
|
+
sudo touch tmp/restart.txt
|
64
|
+
fi
|
65
|
+
|
66
|
+
<%- @roles.each do |role| %>
|
67
|
+
if [ $ROLE = "<%= role %>" ]; then
|
68
|
+
cd $app_path && mkdir -p log
|
69
|
+
echo Restarting Workers <%= role %>...
|
70
|
+
chmod 755 $app_path/aws/scripts/run_delayed_job.sh
|
71
|
+
$app_path/aws/scripts/run_delayed_job.sh stop $ROLE
|
72
|
+
pkill -9 -f delayed
|
73
|
+
$app_path/aws/scripts/run_delayed_job.sh start $ROLE
|
74
|
+
fi
|
75
|
+
<% end %>
|
76
|
+
|
77
|
+
echo done Role: $ROLE
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
app_path="/home/deploy/app/current"
|
4
|
+
ACTION=$1
|
5
|
+
ROLE=$2
|
6
|
+
|
7
|
+
mkdir -p $app_path/log
|
8
|
+
|
9
|
+
case $ACTION in
|
10
|
+
start)
|
11
|
+
echo -n "Starting delayed_job: "
|
12
|
+
sudo su - deploy -c "cd $app_path && ./bin/delayed_job --pool=$ROLE:2 start >> $app_path/log/delayed_job.log";
|
13
|
+
echo "done."
|
14
|
+
;;
|
15
|
+
stop)
|
16
|
+
echo -n "Stopping delayed_job: "
|
17
|
+
sudo su - deploy -c "cd $app_path && ./bin/delayed_job stop >> $app_path/log/delayed_job.log";
|
18
|
+
echo "done."
|
19
|
+
;;
|
20
|
+
*)
|
21
|
+
echo "Usage: $N {start|stop}" >&2
|
22
|
+
exit 1
|
23
|
+
;;
|
24
|
+
esac
|
25
|
+
exit 0
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aws_stack_builder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Neto
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-10-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: Gem to create the cloud formation files do create the ROR app stack on
|
42
|
+
AWS
|
43
|
+
email:
|
44
|
+
- jose.lopes.santos.neto@gmail.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- ".gitignore"
|
50
|
+
- ".idea/inspectionProfiles/Project_Default.xml"
|
51
|
+
- ".idea/vcs.xml"
|
52
|
+
- ".ruby-gemset"
|
53
|
+
- ".ruby-version"
|
54
|
+
- CODE_OF_CONDUCT.md
|
55
|
+
- Gemfile
|
56
|
+
- Gemfile.lock
|
57
|
+
- LICENSE.txt
|
58
|
+
- README.md
|
59
|
+
- Rakefile
|
60
|
+
- aws_stack_builder.gemspec
|
61
|
+
- bin/console
|
62
|
+
- bin/setup
|
63
|
+
- lib/aws_stack_builder.rb
|
64
|
+
- lib/aws_stack_builder/version.rb
|
65
|
+
- lib/generators/aws_stack_builder/USAGE
|
66
|
+
- lib/generators/aws_stack_builder/aws_stack_builder_generator.rb
|
67
|
+
- lib/generators/aws_stack_builder/templates/aws/doc/README.md
|
68
|
+
- lib/generators/aws_stack_builder/templates/aws/doc/app-cf-designer.png
|
69
|
+
- lib/generators/aws_stack_builder/templates/aws/geradores/ami-userdata.sh.template
|
70
|
+
- lib/generators/aws_stack_builder/templates/aws/geradores/build_templates.sh.template
|
71
|
+
- lib/generators/aws_stack_builder/templates/aws/geradores/cf-base-instance.py.template
|
72
|
+
- lib/generators/aws_stack_builder/templates/aws/geradores/cf-stack-generator.py.template
|
73
|
+
- lib/generators/aws_stack_builder/templates/aws/scripts/app_deploy.sh.template
|
74
|
+
- lib/generators/aws_stack_builder/templates/aws/scripts/app_pack.sh
|
75
|
+
- lib/generators/aws_stack_builder/templates/aws/scripts/app_stop_instances_by_role.sh.template
|
76
|
+
- lib/generators/aws_stack_builder/templates/aws/scripts/app_update.sh.template
|
77
|
+
- lib/generators/aws_stack_builder/templates/aws/scripts/run_delayed_job.sh
|
78
|
+
homepage: http://www.mcfox.com.br
|
79
|
+
licenses:
|
80
|
+
- MIT
|
81
|
+
metadata: {}
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 2.7.7
|
99
|
+
signing_key:
|
100
|
+
specification_version: 4
|
101
|
+
summary: Gem to create the cloud formation files do create the ROR app stack on AWS
|
102
|
+
test_files: []
|