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.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.tape/ansible.cfg +4 -0
  4. data/CONTRIBUTING.md +22 -0
  5. data/README.md +100 -0
  6. data/Vagrantfile +26 -0
  7. data/ansible.cfg +2 -0
  8. data/bin/tape +81 -0
  9. data/id_rsa_sb_basebox +27 -0
  10. data/lib/tape/ansible_runner.rb +84 -0
  11. data/lib/tape/installer.rb +154 -0
  12. data/lib/tape/qemu_provisioner.rb +167 -0
  13. data/lib/tape/vagrant_provisioner.rb +42 -0
  14. data/lib/tape.rb +76 -0
  15. data/requirements.yml +16 -0
  16. data/roles/after_deploy/tasks/main.yml +1 -0
  17. data/roles/backend_checkout/tasks/main.yml +21 -0
  18. data/roles/backend_config/defaults/main.yml +1 -0
  19. data/roles/backend_config/tasks/main.yml +49 -0
  20. data/roles/backend_config/templates/database.yml.j2 +8 -0
  21. data/roles/backend_config/templates/env_config.yml.j2 +2 -0
  22. data/roles/backend_install_essentials/meta/main.yml +5 -0
  23. data/roles/backend_install_essentials/tasks/main.yml +24 -0
  24. data/roles/backend_install_essentials/templates/memcached.j2 +7 -0
  25. data/roles/database_load/defaults/main.yml +3 -0
  26. data/roles/database_load/meta/main.yml +3 -0
  27. data/roles/database_load/tasks/db_reset.yml +14 -0
  28. data/roles/database_load/tasks/main.yml +21 -0
  29. data/roles/delayed_job/defaults/main.yml +2 -0
  30. data/roles/delayed_job/library/sudo_upstart +101 -0
  31. data/roles/delayed_job/tasks/main.yml +35 -0
  32. data/roles/delayed_job/templates/dj_runner_upstart.j2 +17 -0
  33. data/roles/deployer_user/files/id_rsa_digital_ocean.pub +1 -0
  34. data/roles/deployer_user/tasks/keys.yml +19 -0
  35. data/roles/deployer_user/tasks/main.yml +18 -0
  36. data/roles/frontend_deploy/handlers/main.yml +2 -0
  37. data/roles/frontend_deploy/tasks/main.yml +8 -0
  38. data/roles/general/meta/main.yml +3 -0
  39. data/roles/general/tasks/basic_packages.yml +3 -0
  40. data/roles/general/tasks/main.yml +6 -0
  41. data/roles/general/tasks/swapfile.yml +21 -0
  42. data/roles/monit_activate/tasks/main.yml +2 -0
  43. data/roles/monit_install/tasks/main.yml +19 -0
  44. data/roles/monit_install/templates/web_interface.j2 +2 -0
  45. data/roles/nginx/handlers/main.yml +2 -0
  46. data/roles/nginx/tasks/main.yml +30 -0
  47. data/roles/nginx/templates/nginx_monit.j2 +3 -0
  48. data/roles/nginx/templates/nginx_unicorn.j2 +55 -0
  49. data/roles/postgres/meta/main.yml +15 -0
  50. data/roles/redis/tasks/main.yml +15 -0
  51. data/roles/redis/templates/redis.j2 +10 -0
  52. data/roles/sidekiq/defaults/main.yml +2 -0
  53. data/roles/sidekiq/meta/main.yml +3 -0
  54. data/roles/sidekiq/tasks/main.yml +19 -0
  55. data/roles/sidekiq/templates/sidekiq.j2 +4 -0
  56. data/roles/unicorn_activate/defaults/main.yml +3 -0
  57. data/roles/unicorn_activate/tasks/main.yml +25 -0
  58. data/roles/unicorn_install/tasks/main.yml +24 -0
  59. data/roles/unicorn_install/templates/unicorn.rb.j2 +47 -0
  60. data/roles/unicorn_install/templates/unicorn_init.j2 +70 -0
  61. data/roles/unicorn_install/templates/unicorn_monit.j2 +5 -0
  62. data/taperole.gemspec +11 -0
  63. data/templates/base/deploy.example.yml +17 -0
  64. data/templates/base/hosts.example +7 -0
  65. data/templates/base/omnibox.example.yml +25 -0
  66. data/templates/base/tape_vars.example.yml +13 -0
  67. data/templates/static_html/deploy.example.yml +12 -0
  68. data/templates/static_html/omnibox.example.yml +15 -0
  69. data/templates/static_html/tape_vars.example.yml +7 -0
  70. data/vars/defaults.yml +31 -0
  71. 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,2 @@
1
+ start_sidekiq_cmd: "/bin/bash -lc 'cd {{ be_app_path }} && bundle exec sidekiq -d -L log/sidekiq.log -e {{ be_app_env }} -P tmp/sidekiq.pid'"
2
+ stop_sidekiq_cmd: "/bin/bash -lc 'cd {{ be_app_path }} && bundle exec sidekiqctl stop tmp/sidekiq.pid'"
@@ -0,0 +1,3 @@
1
+ ---
2
+ dependencies:
3
+ - role: redis
@@ -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,4 @@
1
+ check process sidekiq
2
+ with pidfile {{ be_app_path }}/tmp/sidekiq.pid
3
+ start program = "{{ start_sidekiq_cmd }}" as uid deployer and gid deployer with timeout 90 seconds
4
+ stop program = "{{ stop_sidekiq_cmd }}" as uid deployer and gid deployer with timeout 90 seconds
@@ -0,0 +1,3 @@
1
+ force_unicorn_restart: false
2
+ force_unicorn_reload: false
3
+ kill_unicorn: false
@@ -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,7 @@
1
+ # Base Example
2
+ [omnibox]
3
+ 0.0.0.0 be_app_env=SOME_ENV be_app_branch=SOME_BRANCH
4
+
5
+ # Vagrant Example
6
+ # [omnibox]
7
+ # localhost:2222 ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
@@ -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
@@ -0,0 +1,12 @@
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
+ - frontend_deploy
@@ -0,0 +1,15 @@
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
+ - nginx
13
+ - deployer_user
14
+ - frontend_deploy
15
+ - monit_activate # Run Last
@@ -0,0 +1,7 @@
1
+ app_name:
2
+
3
+ # App Configs
4
+ fe_app_local_path: /path/to/built/js/app
5
+
6
+ dev_key_files:
7
+ - 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: []