taperole 1.0.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 +5 -0
- data/.tape/ansible.cfg +4 -0
- data/CONTRIBUTING.md +22 -0
- data/README.md +100 -0
- data/Vagrantfile +26 -0
- data/ansible.cfg +2 -0
- data/bin/tape +81 -0
- data/id_rsa_sb_basebox +27 -0
- data/lib/tape/ansible_runner.rb +84 -0
- data/lib/tape/installer.rb +154 -0
- data/lib/tape/qemu_provisioner.rb +167 -0
- data/lib/tape/vagrant_provisioner.rb +42 -0
- data/lib/tape.rb +76 -0
- data/requirements.yml +16 -0
- data/roles/after_deploy/tasks/main.yml +1 -0
- data/roles/backend_checkout/tasks/main.yml +21 -0
- data/roles/backend_config/defaults/main.yml +1 -0
- data/roles/backend_config/tasks/main.yml +49 -0
- data/roles/backend_config/templates/database.yml.j2 +8 -0
- data/roles/backend_config/templates/env_config.yml.j2 +2 -0
- data/roles/backend_install_essentials/meta/main.yml +5 -0
- data/roles/backend_install_essentials/tasks/main.yml +24 -0
- data/roles/backend_install_essentials/templates/memcached.j2 +7 -0
- data/roles/database_load/defaults/main.yml +3 -0
- data/roles/database_load/meta/main.yml +3 -0
- data/roles/database_load/tasks/db_reset.yml +14 -0
- data/roles/database_load/tasks/main.yml +21 -0
- data/roles/delayed_job/defaults/main.yml +2 -0
- data/roles/delayed_job/library/sudo_upstart +101 -0
- data/roles/delayed_job/tasks/main.yml +35 -0
- data/roles/delayed_job/templates/dj_runner_upstart.j2 +17 -0
- data/roles/deployer_user/files/id_rsa_digital_ocean.pub +1 -0
- data/roles/deployer_user/tasks/keys.yml +19 -0
- data/roles/deployer_user/tasks/main.yml +18 -0
- data/roles/frontend_deploy/handlers/main.yml +2 -0
- data/roles/frontend_deploy/tasks/main.yml +8 -0
- data/roles/general/meta/main.yml +3 -0
- data/roles/general/tasks/basic_packages.yml +3 -0
- data/roles/general/tasks/main.yml +6 -0
- data/roles/general/tasks/swapfile.yml +21 -0
- data/roles/monit_activate/tasks/main.yml +2 -0
- data/roles/monit_install/tasks/main.yml +19 -0
- data/roles/monit_install/templates/web_interface.j2 +2 -0
- data/roles/nginx/handlers/main.yml +2 -0
- data/roles/nginx/tasks/main.yml +30 -0
- data/roles/nginx/templates/nginx_monit.j2 +3 -0
- data/roles/nginx/templates/nginx_unicorn.j2 +55 -0
- data/roles/postgres/meta/main.yml +15 -0
- data/roles/redis/tasks/main.yml +15 -0
- data/roles/redis/templates/redis.j2 +10 -0
- data/roles/sidekiq/defaults/main.yml +2 -0
- data/roles/sidekiq/meta/main.yml +3 -0
- data/roles/sidekiq/tasks/main.yml +19 -0
- data/roles/sidekiq/templates/sidekiq.j2 +4 -0
- data/roles/unicorn_activate/defaults/main.yml +3 -0
- data/roles/unicorn_activate/tasks/main.yml +25 -0
- data/roles/unicorn_install/tasks/main.yml +24 -0
- data/roles/unicorn_install/templates/unicorn.rb.j2 +47 -0
- data/roles/unicorn_install/templates/unicorn_init.j2 +70 -0
- data/roles/unicorn_install/templates/unicorn_monit.j2 +5 -0
- data/taperole.gemspec +11 -0
- data/templates/base/deploy.example.yml +17 -0
- data/templates/base/hosts.example +7 -0
- data/templates/base/omnibox.example.yml +25 -0
- data/templates/base/tape_vars.example.yml +13 -0
- data/templates/static_html/deploy.example.yml +12 -0
- data/templates/static_html/omnibox.example.yml +15 -0
- data/templates/static_html/tape_vars.example.yml +7 -0
- data/vars/defaults.yml +31 -0
- metadata +117 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
{% if be_app_repo is defined %}
|
2
|
+
upstream unicorn {
|
3
|
+
server unix:{{unicorn_sockfile}} fail_timeout=0;
|
4
|
+
}
|
5
|
+
{% endif %}
|
6
|
+
|
7
|
+
server {
|
8
|
+
listen 80 default deferred;
|
9
|
+
|
10
|
+
# server_name example.com;
|
11
|
+
|
12
|
+
{% if fe_app_local_path is defined%}
|
13
|
+
root {{ fe_app_path }};
|
14
|
+
{% else %}
|
15
|
+
root {{ be_app_path }}/public;
|
16
|
+
{% endif %}
|
17
|
+
|
18
|
+
if (-f $document_root/system/maintenance.html) {
|
19
|
+
return 503;
|
20
|
+
}
|
21
|
+
error_page 503 @maintenance;
|
22
|
+
location @maintenance {
|
23
|
+
rewrite ^(.*)$ /system/maintenance.html last;
|
24
|
+
break;
|
25
|
+
}
|
26
|
+
|
27
|
+
location ^~ /assets/ {
|
28
|
+
gzip_static on;
|
29
|
+
expires max;
|
30
|
+
add_header Cache-Control public;
|
31
|
+
}
|
32
|
+
|
33
|
+
{% if be_app_repo is defined %}
|
34
|
+
try_files $uri/index.html $uri @unicorn;
|
35
|
+
location @unicorn {
|
36
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
37
|
+
proxy_set_header Host $http_host;
|
38
|
+
proxy_redirect off;
|
39
|
+
proxy_pass http://unicorn;
|
40
|
+
}
|
41
|
+
{% endif %}
|
42
|
+
|
43
|
+
error_page 500 502 503 504 /500.html;
|
44
|
+
client_max_body_size 4G;
|
45
|
+
keepalive_timeout 10;
|
46
|
+
|
47
|
+
if (-f $document_root/system/maintenance.html) {
|
48
|
+
return 503;
|
49
|
+
}
|
50
|
+
error_page 503 @maintenance;
|
51
|
+
location @maintenance {
|
52
|
+
rewrite ^(.*)$ /system/maintenance.html last;
|
53
|
+
break;
|
54
|
+
}
|
55
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
dependencies:
|
3
|
+
- role: lxhunter.apt
|
4
|
+
- role: ANXS.postgresql
|
5
|
+
postgresql_databases:
|
6
|
+
- name: "{{ app_name }}_{{ be_app_env }}"
|
7
|
+
postgresql_users:
|
8
|
+
- name: deployer
|
9
|
+
pass: "{{ database_password }}"
|
10
|
+
encrypted: yes
|
11
|
+
postgresql_user_privileges:
|
12
|
+
- name: deployer
|
13
|
+
db: "{{ app_name }}_{{ be_app_env }}"
|
14
|
+
role_attr_flags: CREATEDB,LOGIN,REPLICATION,SUPERUSER
|
15
|
+
postgresql_ext_install_dev_headers: yes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- name: Get PPA for latest Redis
|
2
|
+
apt_repository: repo='ppa:rwky/redis' state=present
|
3
|
+
|
4
|
+
- name: Install Redis
|
5
|
+
apt: name=redis-server state=latest
|
6
|
+
|
7
|
+
- name: Register with monit
|
8
|
+
template: src=redis.j2
|
9
|
+
dest=/etc/monit/conf.d/redis
|
10
|
+
mode=u=rw,g=r,o=r
|
11
|
+
register: redis_monit_config
|
12
|
+
|
13
|
+
- name: Reload Monit
|
14
|
+
command: bash -lc "monit reload"
|
15
|
+
when: redis_monit_config.changed
|
@@ -0,0 +1,10 @@
|
|
1
|
+
check process redis-server
|
2
|
+
with pidfile "/var/run/redis/redis.pid"
|
3
|
+
start program = "/etc/init.d/redis-server start"
|
4
|
+
stop program = "/etc/init.d/redis-server stop"
|
5
|
+
if 2 restarts within 3 cycles then timeout
|
6
|
+
if totalmem > 100 Mb then alert
|
7
|
+
if children > 255 for 5 cycles then stop
|
8
|
+
if cpu usage > 95% for 3 cycles then restart
|
9
|
+
if failed host 127.0.0.1 port 6379 then restart
|
10
|
+
if 5 restarts within 5 cycles then timeout
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- name: Register with monit
|
2
|
+
template: src=sidekiq.j2
|
3
|
+
dest=/etc/monit/conf.d/sidekiq
|
4
|
+
mode=u=rw,g=r,o=r
|
5
|
+
register: sidekiq_monit_config
|
6
|
+
|
7
|
+
- name: Reload Monit
|
8
|
+
command: bash -lc "monit reload"
|
9
|
+
when: sidekiq_monit_config.changed
|
10
|
+
|
11
|
+
- name: Stop sidekiq
|
12
|
+
remote_user: "{{deployer_user.name}}"
|
13
|
+
command: bash -lc "sudo monit stop sidekiq"
|
14
|
+
tags: [be_deploy, unicorn_stop]
|
15
|
+
|
16
|
+
- name: Start sidekiq
|
17
|
+
remote_user: "{{deployer_user.name}}"
|
18
|
+
command: bash -lc "sudo monit start sidekiq"
|
19
|
+
tags: [be_deploy, unicorn_start]
|
@@ -0,0 +1,25 @@
|
|
1
|
+
- name: Ensure tmp dir present for unicorn pids
|
2
|
+
file: state=directory path={{be_app_path}}/tmp/unicorn owner={{ deployer_user.name }}
|
3
|
+
tags: [be_deploy]
|
4
|
+
|
5
|
+
- name: Ensure unicorn is running
|
6
|
+
remote_user: "{{ deployer_user.name }}"
|
7
|
+
command: bash -lc "sudo monit start unicorn"
|
8
|
+
tags: [be_deploy,unicorn_start]
|
9
|
+
|
10
|
+
- name: Restart Unicorn
|
11
|
+
remote_user: "{{ deployer_user.name }}"
|
12
|
+
command: bash -lc "sudo monit restart unicorn"
|
13
|
+
tags: [unicorn_restart,be_deploy]
|
14
|
+
|
15
|
+
- name: Ensure unicorn is stopped
|
16
|
+
remote_user: "{{ deployer_user.name }}"
|
17
|
+
command: bash -lc "sudo monit restart unicorn"
|
18
|
+
when: kill_unicorn
|
19
|
+
tags: [unicorn_stop]
|
20
|
+
|
21
|
+
- name: Force stop unicorn
|
22
|
+
remote_user: "{{ deployer_user.name }}"
|
23
|
+
command: bash -lc "service unicorn_{{ app_name }} stop"
|
24
|
+
when: kill_unicorn
|
25
|
+
tags: [unicorn_force_stop]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
- name: Install unicorn init.d script
|
2
|
+
template: src=unicorn_init.j2
|
3
|
+
dest=/etc/init.d/unicorn_{{app_name}}
|
4
|
+
mode=u=rw,g=rx,o=rx
|
5
|
+
|
6
|
+
- name: register unicorn init.d script
|
7
|
+
command: initctl reload-configuration
|
8
|
+
|
9
|
+
- name: Set up unicorn log dir
|
10
|
+
file: path={{be_app_path}}/log state=directory owner=deployer
|
11
|
+
|
12
|
+
- name: Install unicorn config
|
13
|
+
template: src=unicorn.rb.j2
|
14
|
+
dest={{be_app_path}}/config/unicorn.rb
|
15
|
+
|
16
|
+
- name: Register monit config files
|
17
|
+
template: src=unicorn_monit.j2
|
18
|
+
dest=/etc/monit/conf.d/unicorn
|
19
|
+
mode=u=rw,g=r,o=r
|
20
|
+
register: unicorn_monit_config
|
21
|
+
|
22
|
+
- name: Reload Monit
|
23
|
+
command: bash -lc "monit reload"
|
24
|
+
when: unicorn_monit_config.changed
|
@@ -0,0 +1,47 @@
|
|
1
|
+
worker_processes {{ unicorn_workers }}
|
2
|
+
working_directory "{{ be_app_path }}"
|
3
|
+
pid "{{ be_app_path }}/tmp/unicorn.pid"
|
4
|
+
stderr_path "{{ be_app_path }}/log/unicorn.log"
|
5
|
+
stdout_path "{{ be_app_path }}/log/unicorn.log"
|
6
|
+
|
7
|
+
# Please read this and understand the risk you take by enabling preload_app
|
8
|
+
# http://unicorn.bogomips.org/Unicorn/Configurator.html#method-i-preload_app
|
9
|
+
preload_app false
|
10
|
+
|
11
|
+
timeout 30
|
12
|
+
|
13
|
+
listen "{{ unicorn_sockfile }}"
|
14
|
+
|
15
|
+
before_exec do |server|
|
16
|
+
ENV["BUNDLE_GEMFILE"] = "#{Rails.root}/Gemfile"
|
17
|
+
end
|
18
|
+
|
19
|
+
GC.respond_to?(:copy_on_write_friendly=) and
|
20
|
+
GC.copy_on_write_friendly = true
|
21
|
+
|
22
|
+
check_client_connection false
|
23
|
+
|
24
|
+
before_fork do |server, worker|
|
25
|
+
defined?(ActiveRecord::Base) and
|
26
|
+
ActiveRecord::Base.connection.disconnect!
|
27
|
+
|
28
|
+
old_pid = "#{server.config[:pid]}.oldbin"
|
29
|
+
if old_pid != server.pid
|
30
|
+
begin
|
31
|
+
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
|
32
|
+
Process.kill(sig, File.read(old_pid).to_i)
|
33
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Throttle the master from forking too quickly by sleeping. Due
|
38
|
+
# to the implementation of standard Unix signal handlers, this
|
39
|
+
# helps (but does not completely) prevent identical, repeated signals
|
40
|
+
# from being lost when the receiving process is busy.
|
41
|
+
sleep 1
|
42
|
+
end
|
43
|
+
|
44
|
+
after_fork do |server, worker|
|
45
|
+
defined?(ActiveRecord::Base) and
|
46
|
+
ActiveRecord::Base.establish_connection
|
47
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
set -u
|
4
|
+
|
5
|
+
TIMEOUT=${TIMEOUT-60}
|
6
|
+
RBENV_ROOT="{{ rbenv_root }}"
|
7
|
+
PATH="$RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH"
|
8
|
+
APP_ROOT="{{be_app_path}}"
|
9
|
+
APP_USER="{{ deployer_user.name }}"
|
10
|
+
PID="$APP_ROOT/tmp/unicorn.pid"
|
11
|
+
CMD="$APP_ROOT/bin/unicorn -E {{be_app_env}} -D -c $APP_ROOT/config/unicorn.rb"
|
12
|
+
|
13
|
+
action="$1"
|
14
|
+
old_pid="$PID.oldbin"
|
15
|
+
|
16
|
+
cd $APP_ROOT || exit 1
|
17
|
+
|
18
|
+
sig () {
|
19
|
+
test -s "$PID" && kill -$1 `cat $PID`
|
20
|
+
}
|
21
|
+
|
22
|
+
oldsig () {
|
23
|
+
test -s $old_pid && kill -$1 `cat $old_pid`
|
24
|
+
}
|
25
|
+
|
26
|
+
case $action in
|
27
|
+
start)
|
28
|
+
sig 0 && echo >&2 "Already running" && exit 0
|
29
|
+
rm -f $PID && $CMD
|
30
|
+
;;
|
31
|
+
stop)
|
32
|
+
sig QUIT && echo "Stopping" && exit 0
|
33
|
+
echo >&2 "Unicorn master process with ID `cat $PID` not found (see: $PID)"
|
34
|
+
;;
|
35
|
+
force-stop)
|
36
|
+
pkill -9 -f "unicorn master" && echo "Forcing a stop\n" && rm -f $PID && echo "Cleaning up pid" && exit 0
|
37
|
+
;;
|
38
|
+
restart|reload)
|
39
|
+
sig HUP && echo reloaded OK && exit 0
|
40
|
+
echo >&2 "Couldn't reload, starting '$CMD' instead"
|
41
|
+
$CMD
|
42
|
+
;;
|
43
|
+
upgrade)
|
44
|
+
if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
|
45
|
+
then
|
46
|
+
n=$TIMEOUT
|
47
|
+
while test -s $old_pid && test $n -ge 0
|
48
|
+
do
|
49
|
+
printf '.' && sleep 1 && n=$(( $n - 1 ))
|
50
|
+
done
|
51
|
+
echo
|
52
|
+
|
53
|
+
if test $n -lt 0 && test -s $old_pid
|
54
|
+
then
|
55
|
+
echo >&2 "$old_pid still exists after $TIMEOUT seconds"
|
56
|
+
exit 1
|
57
|
+
fi
|
58
|
+
exit 0
|
59
|
+
fi
|
60
|
+
echo >&2 "Couldn't upgrade, starting '$CMD' instead"
|
61
|
+
$CMD
|
62
|
+
;;
|
63
|
+
reopen-logs)
|
64
|
+
sig USR1
|
65
|
+
;;
|
66
|
+
*)
|
67
|
+
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
|
68
|
+
exit 1
|
69
|
+
;;
|
70
|
+
esac
|
@@ -0,0 +1,5 @@
|
|
1
|
+
check process unicorn with pidfile {{ be_app_path }}/tmp/unicorn.pid
|
2
|
+
start program "/etc/init.d/unicorn_{{ app_name }} start" as uid deployer and gid deployer with timeout 90 seconds
|
3
|
+
restart program "/etc/init.d/unicorn_{{ app_name }} restart" as uid deployer and gid deployer with timeout 90 seconds
|
4
|
+
stop program "/etc/init.d/unicorn_{{ app_name }} stop" as uid deployer and gid deployer with timeout 90 seconds
|
5
|
+
if 5 restarts within 5 cycles then timeout
|
data/taperole.gemspec
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = "taperole"
|
3
|
+
spec.version = '1.0.0'
|
4
|
+
spec.authors = ['Jack Forrest', 'Smashing Boxes', 'Brandon Mathis']
|
5
|
+
spec.email = ['jack@smashingboxes.com', 'brandon@sbox.es']
|
6
|
+
spec.summary = 'A tool for provisioning and deploying boxes for hosting Rails apps'
|
7
|
+
spec.license = 'MIT'
|
8
|
+
|
9
|
+
spec.files = `git ls-files`.split("\n")
|
10
|
+
spec.executables = 'tape'
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#TODO Make sure that secrets is ignored
|
2
|
+
---
|
3
|
+
- hosts: omnibox
|
4
|
+
|
5
|
+
vars_files:
|
6
|
+
- "{{tape_dir}}/vars/defaults.yml"
|
7
|
+
- tape_vars.yml
|
8
|
+
|
9
|
+
user: "{{ deployer_user.name }}"
|
10
|
+
|
11
|
+
roles:
|
12
|
+
- backend_checkout
|
13
|
+
- backend_config
|
14
|
+
- database_load
|
15
|
+
- unicorn_activate
|
16
|
+
- frontend_deploy
|
17
|
+
- delayed_job
|
@@ -0,0 +1,25 @@
|
|
1
|
+
---
|
2
|
+
- hosts: omnibox
|
3
|
+
user: root
|
4
|
+
|
5
|
+
vars_files:
|
6
|
+
- "{{tape_dir}}/vars/defaults.yml"
|
7
|
+
- tape_vars.yml
|
8
|
+
|
9
|
+
roles:
|
10
|
+
- general
|
11
|
+
- monit_install
|
12
|
+
- postgres
|
13
|
+
- nginx
|
14
|
+
- backend_install_essentials
|
15
|
+
- deployer_user
|
16
|
+
- backend_checkout
|
17
|
+
- unicorn_install
|
18
|
+
- backend_config
|
19
|
+
- database_load
|
20
|
+
- unicorn_activate
|
21
|
+
- frontend_deploy
|
22
|
+
# - delayed_job
|
23
|
+
# - sidekiq
|
24
|
+
# - redis
|
25
|
+
- monit_activate # Run Last
|
@@ -0,0 +1,13 @@
|
|
1
|
+
app_name:
|
2
|
+
|
3
|
+
# Rails App Configs
|
4
|
+
be_app_repo:
|
5
|
+
be_app_env: production
|
6
|
+
be_app_branch: master
|
7
|
+
|
8
|
+
# HTML/JS App Configs
|
9
|
+
# Uncomment if you want to deploy a JS/HTML App
|
10
|
+
# fe_app_local_path: /path/to/built/js/app/
|
11
|
+
|
12
|
+
dev_key_files:
|
13
|
+
- dev_keys/key.pub
|
data/vars/defaults.yml
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
be_app_path: "/home/{{ deployer_user.name }}/{{ app_name }}"
|
2
|
+
|
3
|
+
fe_app_name: "{{ app_name }}_fe"
|
4
|
+
fe_app_path: "/home/{{ deployer_user.name }}/{{ fe_app_name }}"
|
5
|
+
|
6
|
+
deployer_user:
|
7
|
+
name: deployer
|
8
|
+
groups:
|
9
|
+
- deployer
|
10
|
+
- staff
|
11
|
+
|
12
|
+
# Path where this playbook is being run from
|
13
|
+
local_dir: "{{lookup('env', 'PWD')}}"
|
14
|
+
|
15
|
+
unicorn_workers: "{{ansible_processor_cores * 2}}"
|
16
|
+
unicorn_sockfile: /tmp/unicorn_{{ app_name }}.sock
|
17
|
+
|
18
|
+
swap_file:
|
19
|
+
path: /swp
|
20
|
+
size_kb: "{{ 1024 * 1024 }}"
|
21
|
+
|
22
|
+
# echo 'password' | md5
|
23
|
+
database_password: 286755fad04869ca523320acce0dc6a4
|
24
|
+
|
25
|
+
enabled_delayed_job: false
|
26
|
+
|
27
|
+
precompile_assets: true
|
28
|
+
|
29
|
+
# Sets server_name in the nginx sites-enabled file
|
30
|
+
app_url: false
|
31
|
+
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: taperole
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jack Forrest
|
8
|
+
- Smashing Boxes
|
9
|
+
- Brandon Mathis
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2015-03-14 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
15
|
+
description:
|
16
|
+
email:
|
17
|
+
- jack@smashingboxes.com
|
18
|
+
- brandon@sbox.es
|
19
|
+
executables:
|
20
|
+
- tape
|
21
|
+
extensions: []
|
22
|
+
extra_rdoc_files: []
|
23
|
+
files:
|
24
|
+
- ".gitignore"
|
25
|
+
- ".tape/ansible.cfg"
|
26
|
+
- CONTRIBUTING.md
|
27
|
+
- README.md
|
28
|
+
- Vagrantfile
|
29
|
+
- ansible.cfg
|
30
|
+
- bin/tape
|
31
|
+
- id_rsa_sb_basebox
|
32
|
+
- lib/tape.rb
|
33
|
+
- lib/tape/ansible_runner.rb
|
34
|
+
- lib/tape/installer.rb
|
35
|
+
- lib/tape/qemu_provisioner.rb
|
36
|
+
- lib/tape/vagrant_provisioner.rb
|
37
|
+
- requirements.yml
|
38
|
+
- roles/after_deploy/tasks/main.yml
|
39
|
+
- roles/backend_checkout/tasks/main.yml
|
40
|
+
- roles/backend_config/defaults/main.yml
|
41
|
+
- roles/backend_config/tasks/main.yml
|
42
|
+
- roles/backend_config/templates/database.yml.j2
|
43
|
+
- roles/backend_config/templates/env_config.yml.j2
|
44
|
+
- roles/backend_install_essentials/meta/main.yml
|
45
|
+
- roles/backend_install_essentials/tasks/main.yml
|
46
|
+
- roles/backend_install_essentials/templates/memcached.j2
|
47
|
+
- roles/database_load/defaults/main.yml
|
48
|
+
- roles/database_load/meta/main.yml
|
49
|
+
- roles/database_load/tasks/db_reset.yml
|
50
|
+
- roles/database_load/tasks/main.yml
|
51
|
+
- roles/delayed_job/defaults/main.yml
|
52
|
+
- roles/delayed_job/library/sudo_upstart
|
53
|
+
- roles/delayed_job/tasks/main.yml
|
54
|
+
- roles/delayed_job/templates/dj_runner_upstart.j2
|
55
|
+
- roles/deployer_user/files/id_rsa_digital_ocean.pub
|
56
|
+
- roles/deployer_user/tasks/keys.yml
|
57
|
+
- roles/deployer_user/tasks/main.yml
|
58
|
+
- roles/frontend_deploy/handlers/main.yml
|
59
|
+
- roles/frontend_deploy/tasks/main.yml
|
60
|
+
- roles/general/meta/main.yml
|
61
|
+
- roles/general/tasks/basic_packages.yml
|
62
|
+
- roles/general/tasks/main.yml
|
63
|
+
- roles/general/tasks/swapfile.yml
|
64
|
+
- roles/monit_activate/tasks/main.yml
|
65
|
+
- roles/monit_install/tasks/main.yml
|
66
|
+
- roles/monit_install/templates/web_interface.j2
|
67
|
+
- roles/nginx/handlers/main.yml
|
68
|
+
- roles/nginx/tasks/main.yml
|
69
|
+
- roles/nginx/templates/nginx_monit.j2
|
70
|
+
- roles/nginx/templates/nginx_unicorn.j2
|
71
|
+
- roles/postgres/meta/main.yml
|
72
|
+
- roles/redis/tasks/main.yml
|
73
|
+
- roles/redis/templates/redis.j2
|
74
|
+
- roles/sidekiq/defaults/main.yml
|
75
|
+
- roles/sidekiq/meta/main.yml
|
76
|
+
- roles/sidekiq/tasks/main.yml
|
77
|
+
- roles/sidekiq/templates/sidekiq.j2
|
78
|
+
- roles/unicorn_activate/defaults/main.yml
|
79
|
+
- roles/unicorn_activate/tasks/main.yml
|
80
|
+
- roles/unicorn_install/tasks/main.yml
|
81
|
+
- roles/unicorn_install/templates/unicorn.rb.j2
|
82
|
+
- roles/unicorn_install/templates/unicorn_init.j2
|
83
|
+
- roles/unicorn_install/templates/unicorn_monit.j2
|
84
|
+
- taperole.gemspec
|
85
|
+
- templates/base/deploy.example.yml
|
86
|
+
- templates/base/hosts.example
|
87
|
+
- templates/base/omnibox.example.yml
|
88
|
+
- templates/base/tape_vars.example.yml
|
89
|
+
- templates/static_html/deploy.example.yml
|
90
|
+
- templates/static_html/omnibox.example.yml
|
91
|
+
- templates/static_html/tape_vars.example.yml
|
92
|
+
- vars/defaults.yml
|
93
|
+
homepage:
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.2.2
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: A tool for provisioning and deploying boxes for hosting Rails apps
|
117
|
+
test_files: []
|