mascherano 1.0.0 → 1.0.2
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.
- data/README.md +50 -5
- data/lib/capistrano/noscm.rb +1 -0
- data/lib/capistrano/tasks/noscm.cap +8 -0
- data/lib/mascherano/go.rb +1 -0
- data/lib/mascherano/passenger.rb +1 -0
- data/lib/mascherano/tasks/env.cap +6 -4
- data/lib/mascherano/tasks/figaro.cap +17 -14
- data/lib/mascherano/tasks/foreman.cap +6 -1
- data/lib/mascherano/tasks/go.cap +46 -0
- data/lib/mascherano/tasks/passenger.cap +42 -0
- data/lib/mascherano/tasks/token.cap +33 -0
- data/lib/mascherano/tasks/upstart.cap +12 -10
- data/lib/mascherano/token.rb +1 -0
- data/lib/mascherano/version.rb +1 -1
- metadata +16 -3
data/README.md
CHANGED
@@ -2,25 +2,70 @@
|
|
2
2
|
|
3
3
|
# Mascherano
|
4
4
|
|
5
|
-
|
5
|
+
Capistrano 3.x recipes
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
|
-
|
11
|
+
```ruby
|
12
|
+
gem 'mascherano'
|
13
|
+
```
|
12
14
|
|
13
15
|
And then execute:
|
14
16
|
|
15
|
-
|
17
|
+
```bash
|
18
|
+
$ bundle
|
19
|
+
```
|
16
20
|
|
17
21
|
Or install it yourself as:
|
18
22
|
|
19
|
-
|
23
|
+
```bash
|
24
|
+
$ gem install mascherano
|
25
|
+
```
|
20
26
|
|
27
|
+
## Recipes
|
28
|
+
|
29
|
+
Mascherano currently have several recipes:
|
30
|
+
|
31
|
+
| recipe | description |
|
32
|
+
|----------------|-------------------------------------------------------------------------------------------------------|
|
33
|
+
| __env__ | Manage application configuration on `.env` file |
|
34
|
+
| __foreman__ | Manage Procfile application for [Foreman](http://ddollar.github.io/foreman) |
|
35
|
+
| __figaro__ | Manage configuration, usually `application.yml` for [Figaro](https://github.com/laserlemon/figaro) |
|
36
|
+
| __go__ | Manage and ability to deploy go application |
|
37
|
+
| __upstart__ | Manage application management using Upstart |
|
38
|
+
| __token__ | Manage and generate random secret token |
|
39
|
+
| __passenger__ | Manage Pushion Passenger based application |
|
40
|
+
| _more to come_ | _pull request are welcome ;)_ |
|
41
|
+
|
42
|
+
This package also provides a `noscm` recipe for when you don't need source code on your deployment box (usually application already compiled).
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
# deploy.rb
|
46
|
+
set :application, 'mascherano'
|
47
|
+
set :scm, :noscm
|
48
|
+
```
|
21
49
|
## Usage
|
22
50
|
|
23
|
-
|
51
|
+
Make sure you have `Capfile` in the root of your project, so you can add these lines (choose which one you're using):
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
require 'mascherano/env'
|
55
|
+
require 'mascherano/figaro'
|
56
|
+
require 'mascherano/foreman'
|
57
|
+
require 'mascherano/go'
|
58
|
+
require 'mascherano/upstart'
|
59
|
+
```
|
60
|
+
|
61
|
+
Then on `config/deploy/{env}.rb` you can customize the options:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
set :env_file, '.staging.env'
|
65
|
+
set :foreman_procfile, -> { release_path.join('procfiles', 'staging') }
|
66
|
+
```
|
67
|
+
|
68
|
+
See the `lib/mascherano/task/*.cap` for more options.
|
24
69
|
|
25
70
|
## Contributing
|
26
71
|
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path('../tasks/noscm.cap', __FILE__)
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path('../tasks/go.cap', __FILE__)
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path('../tasks/passenger.cap', __FILE__)
|
@@ -5,11 +5,12 @@ namespace :env do
|
|
5
5
|
You can override any of these defaults by setting the variables shown below.
|
6
6
|
|
7
7
|
set :env_file, ".env"
|
8
|
+
set :env_roles, :all
|
8
9
|
set :target_file, -> { shared_path.join('.env') }
|
9
10
|
DESC
|
10
11
|
task :upload do
|
11
|
-
on roles(:
|
12
|
-
upload! fetch(:env_file), fetch(:env_target)
|
12
|
+
on roles(fetch(:env_roles)) do
|
13
|
+
upload! fetch(:env_file), fetch(:env_target)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
@@ -17,8 +18,8 @@ namespace :env do
|
|
17
18
|
Symlink the .env file to the release_path
|
18
19
|
DESC
|
19
20
|
task :symlink do
|
20
|
-
on roles(:
|
21
|
-
execute :ln,
|
21
|
+
on roles(fetch(:env_roles)) do
|
22
|
+
execute :ln, '-sf', fetch(:env_target), release_path.join('.env')
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
@@ -26,6 +27,7 @@ end
|
|
26
27
|
namespace :load do
|
27
28
|
task :defaults do
|
28
29
|
set :env_file, ".env"
|
30
|
+
set :env_roles, :all
|
29
31
|
set :env_target, -> { shared_path.join('.env') }
|
30
32
|
end
|
31
33
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
1
3
|
namespace :figaro do
|
2
4
|
desc <<-DESC
|
3
5
|
Upload application config to the server
|
@@ -9,24 +11,24 @@ namespace :figaro do
|
|
9
11
|
set :figaro_to_env, false
|
10
12
|
DESC
|
11
13
|
task :upload do
|
12
|
-
|
14
|
+
figaro_data = nil
|
15
|
+
|
16
|
+
run_locally do
|
13
17
|
figaro_stage = fetch(:stage)
|
14
18
|
figaro_tmp = "figaro-#{figaro_stage}"
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
figaro_cmd = %Q(Figaro.env("#{figaro_stage}").to_yaml)
|
21
|
-
end
|
22
|
-
|
23
|
-
execute :bundle, "exec rails runner 'puts #{figaro_cmd}' > #{figaro_tmp}"
|
20
|
+
if fetch(:figaro_to_env)
|
21
|
+
figaro_cmd = %Q(Figaro.vars("#{figaro_stage}").split)
|
22
|
+
else
|
23
|
+
figaro_cmd = %Q(Figaro.env("#{figaro_stage}").to_yaml)
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
figaro_data = execute(:rails, "runner 'puts #{figaro_cmd}'").stdout
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
if figaro_data
|
30
|
+
on roles(fetch(:figaro_roles)) do
|
31
|
+
upload! StringIO.new(figaro_data), fetch(:figaro_target)
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
@@ -35,8 +37,8 @@ namespace :figaro do
|
|
35
37
|
Symlink the application config to the release_path
|
36
38
|
DESC
|
37
39
|
task :symlink do
|
38
|
-
on roles(:
|
39
|
-
execute :ln,
|
40
|
+
on roles(fetch(:figaro_roles)) do
|
41
|
+
execute :ln, '-sf', fetch(:figaro_target), fetch(:figaro_config)
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
@@ -46,6 +48,7 @@ namespace :load do
|
|
46
48
|
set :figaro_target, -> { shared_path.join('application.yml') }
|
47
49
|
set :figaro_config, -> { release_path.join('config', 'application.yml') }
|
48
50
|
set :figaro_to_env, false
|
51
|
+
set :figaro_roles, :app
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
@@ -12,12 +12,14 @@ namespace :foreman do
|
|
12
12
|
set :foreman_app, -> { fetch(:application) }
|
13
13
|
set :foreman_user, -> { fetch(:user) }
|
14
14
|
set :foreman_log, -> { shared_path.join('log') }
|
15
|
+
set :foreman_pids, -> { shared_path.join('pids') }
|
15
16
|
set :foreman_concurrency, false
|
16
17
|
set :foreman_sudo, false
|
18
|
+
set :foreman_roles, :all
|
17
19
|
DESC
|
18
20
|
|
19
21
|
task :export do
|
20
|
-
on roles(:
|
22
|
+
on roles(fetch(:foreman_roles)) do
|
21
23
|
within release_path do
|
22
24
|
concurrency = fetch(:foreman_concurrency)
|
23
25
|
sudo = fetch(:foreman_sudo)
|
@@ -29,6 +31,7 @@ namespace :foreman do
|
|
29
31
|
args << %Q(-a #{fetch(:foreman_app)})
|
30
32
|
args << %Q(-u #{fetch(:foreman_user)})
|
31
33
|
args << %Q(-l #{fetch(:foreman_log)})
|
34
|
+
args << %Q(-r #{fetch(:foreman_pids)})
|
32
35
|
args << %Q(-c #{concurrency}) if concurrency
|
33
36
|
|
34
37
|
cmd = "foreman export #{args.join(' ')}"
|
@@ -53,8 +56,10 @@ namespace :load do
|
|
53
56
|
set :foreman_app, -> { fetch(:application) }
|
54
57
|
set :foreman_user, -> { fetch(:user) }
|
55
58
|
set :foreman_log, -> { shared_path.join('log') }
|
59
|
+
set :foreman_pids, -> { shared_path.join('pids') }
|
56
60
|
set :foreman_concurrency, false
|
57
61
|
set :foreman_sudo, false
|
62
|
+
set :foreman_roles, :all
|
58
63
|
end
|
59
64
|
end
|
60
65
|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
namespace :go do
|
2
|
+
desc <<-DESC
|
3
|
+
Compile the go application locally
|
4
|
+
|
5
|
+
You can override any of these defaults by setting the variables shown below.
|
6
|
+
|
7
|
+
set :go_input, 'api.go'
|
8
|
+
set :go_output, 'api'
|
9
|
+
set :go_os, 'linux'
|
10
|
+
set :go_arch, 'amd64'
|
11
|
+
set :go_roles, :app
|
12
|
+
set :go_target, -> { release_path.join(fetch(:go_output)) }
|
13
|
+
DESC
|
14
|
+
task :build do
|
15
|
+
on roles(fetch(:go_roles)) do
|
16
|
+
run_locally do
|
17
|
+
go_flags = {
|
18
|
+
'GOOS' => fetch(:go_os),
|
19
|
+
'GOARCH' => fetch(:go_arch)
|
20
|
+
}
|
21
|
+
|
22
|
+
with(go_flags) do
|
23
|
+
execute :go, 'build', '-o', fetch(:go_output), fetch(:go_input)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Upload compiled application to the server'
|
30
|
+
task :upload do
|
31
|
+
on roles(fetch(:go_roles)) do
|
32
|
+
upload! fetch(:go_output), fetch(:go_target)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
namespace :load do
|
38
|
+
task :defaults do
|
39
|
+
set :go_input, 'api.go'
|
40
|
+
set :go_output, 'api'
|
41
|
+
set :go_os, 'linux'
|
42
|
+
set :go_arch, 'amd64'
|
43
|
+
set :go_roles, :app
|
44
|
+
set :go_target, -> { release_path.join(fetch(:go_output)) }
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
namespace :passenger do
|
2
|
+
desc 'Start passenger'
|
3
|
+
task :start do
|
4
|
+
on roles(fetch(:passenger_roles)) do
|
5
|
+
within current_path do
|
6
|
+
execute fetch(:passenger_cmd), 'start', '-e', fetch(:passenger_env), '-p', fetch(:passenger_port), '-d'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Stop passenger'
|
12
|
+
task :stop do
|
13
|
+
on roles(fetch(:passenger_roles)) do
|
14
|
+
within current_path do
|
15
|
+
execute fetch(:passenger_cmd), 'stop', '-p', fetch(:passenger_port)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Restart passenger'
|
21
|
+
task :restart do
|
22
|
+
on roles(fetch(:passenger_roles)) do
|
23
|
+
within current_path do
|
24
|
+
if test " [ -f tmp/pids/passenger.#{fetch(:passenger_port)}.pid ] "
|
25
|
+
invoke 'passenger:stop'
|
26
|
+
end
|
27
|
+
|
28
|
+
invoke 'passenger:start'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
namespace :load do
|
35
|
+
task :defaults do
|
36
|
+
set :passenger_cmd, 'bundle exec passenger'
|
37
|
+
set :passenger_env, -> { fetch(:stage) }
|
38
|
+
set :passenger_port, 9292
|
39
|
+
set :passenger_roles, :app
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
def generate_token(n)
|
5
|
+
SecureRandom.hex(n)
|
6
|
+
end
|
7
|
+
|
8
|
+
namespace :token do
|
9
|
+
desc 'Generate random token'
|
10
|
+
task :generate do
|
11
|
+
on roles(fetch(:token_roles)) do
|
12
|
+
info generate_token(fetch(:token_length))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Upload random token as a file on remote server'
|
17
|
+
task :upload do
|
18
|
+
on roles(fetch(:token_roles)) do
|
19
|
+
token = generate_token(fetch(:token_length))
|
20
|
+
io = StringIO.new(token)
|
21
|
+
upload! io, fetch(:token_target)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
namespace :load do
|
27
|
+
task :defaults do
|
28
|
+
set :token_length, 64
|
29
|
+
set :token_target, -> { shared_path.join('.token') }
|
30
|
+
set :token_roles, :app
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -1,29 +1,30 @@
|
|
1
|
-
def
|
2
|
-
|
3
|
-
"
|
1
|
+
def build_cmd(service_name, action, sudo = false)
|
2
|
+
cmd = "service #{service_name} #{action}"
|
3
|
+
cmd = "sudo " + cmd if sudo
|
4
|
+
cmd
|
4
5
|
end
|
5
6
|
|
6
7
|
namespace :upstart do
|
7
8
|
desc "Start the application services"
|
8
9
|
task :start do
|
9
|
-
on roles(:
|
10
|
-
execute
|
10
|
+
on roles(fetch(:upstart_roles)) do
|
11
|
+
execute build_cmd(fetch(:upstart_service), 'start', fetch(:upstart_sudo))
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
15
|
desc "Stop the application services"
|
15
16
|
task :stop do
|
16
|
-
on roles(:
|
17
|
-
execute
|
17
|
+
on roles(fetch(:upstart_roles)) do
|
18
|
+
execute build_cmd(fetch(:upstart_service), 'stop', fetch(:upstart_sudo))
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
22
|
desc "Restart the application services"
|
22
23
|
task :restart do
|
23
|
-
on roles(:
|
24
|
-
cmd_sq =
|
24
|
+
on roles(fetch(:upstart_roles)) do
|
25
|
+
cmd_sq = build_cmd(fetch(:upstart_service), 'start', fetch(:upstart_sudo))
|
25
26
|
cmd_sq += ' || '
|
26
|
-
cmd_sq +=
|
27
|
+
cmd_sq += build_cmd(fetch(:upstart_service), 'restart', fetch(:upstart_sudo))
|
27
28
|
|
28
29
|
execute cmd_sq
|
29
30
|
end
|
@@ -34,6 +35,7 @@ namespace :load do
|
|
34
35
|
task :defaults do
|
35
36
|
set :upstart_service, -> { fetch(:application) }
|
36
37
|
set :upstart_sudo, false
|
38
|
+
set :upstart_roles, :app
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path('../tasks/token.cap', __FILE__)
|
data/lib/mascherano/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mascherano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|
@@ -72,14 +72,22 @@ files:
|
|
72
72
|
- README.md
|
73
73
|
- Rakefile
|
74
74
|
- img/mascherano-logo.png
|
75
|
+
- lib/capistrano/noscm.rb
|
76
|
+
- lib/capistrano/tasks/noscm.cap
|
75
77
|
- lib/mascherano.rb
|
76
78
|
- lib/mascherano/env.rb
|
77
79
|
- lib/mascherano/figaro.rb
|
78
80
|
- lib/mascherano/foreman.rb
|
81
|
+
- lib/mascherano/go.rb
|
82
|
+
- lib/mascherano/passenger.rb
|
79
83
|
- lib/mascherano/tasks/env.cap
|
80
84
|
- lib/mascherano/tasks/figaro.cap
|
81
85
|
- lib/mascherano/tasks/foreman.cap
|
86
|
+
- lib/mascherano/tasks/go.cap
|
87
|
+
- lib/mascherano/tasks/passenger.cap
|
88
|
+
- lib/mascherano/tasks/token.cap
|
82
89
|
- lib/mascherano/tasks/upstart.cap
|
90
|
+
- lib/mascherano/token.rb
|
83
91
|
- lib/mascherano/upstart.rb
|
84
92
|
- lib/mascherano/version.rb
|
85
93
|
- mascherano.gemspec
|
@@ -96,12 +104,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
104
|
- - ! '>='
|
97
105
|
- !ruby/object:Gem::Version
|
98
106
|
version: '0'
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
hash: -3389475692804839278
|
99
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
111
|
none: false
|
101
112
|
requirements:
|
102
113
|
- - ! '>='
|
103
114
|
- !ruby/object:Gem::Version
|
104
115
|
version: '0'
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
hash: -3389475692804839278
|
105
119
|
requirements: []
|
106
120
|
rubyforge_project:
|
107
121
|
rubygems_version: 1.8.23
|
@@ -109,4 +123,3 @@ signing_key:
|
|
109
123
|
specification_version: 3
|
110
124
|
summary: Capistrano 3.x recipes
|
111
125
|
test_files: []
|
112
|
-
has_rdoc:
|