capistrano-hostmenu 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/Gemfile +1 -0
- data/Gemfile.lock +32 -0
- data/README.md +45 -0
- data/Rakefile +21 -0
- data/lib/capistrano/hostmenu.rb +100 -0
- data/lib/capistrano/tasks/hostmenu.rake +40 -0
- metadata +95 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d795ea1362f08f1483ed9bc56e9e8370df5c0b1c
|
4
|
+
data.tar.gz: 27471bb378fb5a8eb14972c98785df573164e91a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6712121f3e1dd486dd87ee1372d785f0bca0a64786eea8a78f6833a433b740a4dc0e328e41e01e4baf7178ab4b5cc35fd661b8b8b076e035c68b4379b4cf0153
|
7
|
+
data.tar.gz: 8d35b3e09c4e23d975adeb9d5a8887d4193e86f04bd9a59a219681979f20fc8077aed871d0c50fc25debc72c1f14f60232a8600a85b9c56d81f7c9f57f71d765
|
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gemspec
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
capistrano-hostmenu (0.1.0)
|
5
|
+
capistrano (>= 3.0.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
specs:
|
9
|
+
capistrano (3.3.5)
|
10
|
+
capistrano-stats (~> 1.1.0)
|
11
|
+
i18n
|
12
|
+
rake (>= 10.0.0)
|
13
|
+
sshkit (~> 1.3)
|
14
|
+
capistrano-stats (1.1.1)
|
15
|
+
colorize (0.7.5)
|
16
|
+
i18n (0.7.0)
|
17
|
+
net-scp (1.2.1)
|
18
|
+
net-ssh (>= 2.6.5)
|
19
|
+
net-ssh (2.9.2)
|
20
|
+
rake (10.4.2)
|
21
|
+
sshkit (1.6.1)
|
22
|
+
colorize (>= 0.7.0)
|
23
|
+
net-scp (>= 1.1.2)
|
24
|
+
net-ssh (>= 2.8.0)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
bundler
|
31
|
+
capistrano-hostmenu!
|
32
|
+
rake
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# capistrano-hostmenu
|
2
|
+
A capistrano plugin which allows you to choose deploy host via a text menu.
|
3
|
+
|
4
|
+
Here's an example:
|
5
|
+
|
6
|
+
~~~sh
|
7
|
+
Please choose which server(s) to deploy:
|
8
|
+
[1] example1.com
|
9
|
+
[2] example2.com
|
10
|
+
[3] all (default)
|
11
|
+
Please enter host_numbers (3):
|
12
|
+
~~~
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
~~~sh
|
17
|
+
gem install capistrano-hostmenu
|
18
|
+
~~~
|
19
|
+
|
20
|
+
or put this in your `Gemfile` then run `bundle install`:
|
21
|
+
|
22
|
+
~~~ruby
|
23
|
+
gem 'capistrano-hostmenu'
|
24
|
+
~~~
|
25
|
+
|
26
|
+
After the gem is installed, put this in your `Capfile`:
|
27
|
+
|
28
|
+
~~~ruby
|
29
|
+
require 'capistrano/hostmenu'
|
30
|
+
~~~
|
31
|
+
|
32
|
+
Then you will see host selecting menu any time before deploying.
|
33
|
+
|
34
|
+
## Configurations
|
35
|
+
|
36
|
+
set these variables in your deploy config (commonly `deploy.rb`)
|
37
|
+
|
38
|
+
~~~ruby
|
39
|
+
set :host_menu_prompt_msg, 'Please choose which server(s) to deploy:'.blue
|
40
|
+
set :host_menu_default_selection, :all # or :first, 1
|
41
|
+
set :host_menu_caption_of_all, 'all'
|
42
|
+
set :host_menu_caption_of_default, '(default)'
|
43
|
+
set :host_menu_invalid_range_msg, 'Please provide a number in (1..%d)'.red
|
44
|
+
set :host_menu_invalid_multi_choose_msg, 'Do you mean to choose all servers?'.red
|
45
|
+
~~~
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'yard'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
|
10
|
+
# Generate documentation
|
11
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
12
|
+
#t.files = %w{lib/hsf.rb}
|
13
|
+
end
|
14
|
+
|
15
|
+
## Developping tasks
|
16
|
+
require "rake/extensiontask"
|
17
|
+
|
18
|
+
# `rake compile` to compile
|
19
|
+
Rake::ExtensionTask.new "hsf" do |ext|
|
20
|
+
ext.name = "hsf_cpp"
|
21
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Capistrano
|
2
|
+
|
3
|
+
class Hostmenu
|
4
|
+
|
5
|
+
include ::Capistrano::DSL
|
6
|
+
|
7
|
+
def self.set_default_config
|
8
|
+
set :host_menu_prompt_msg, 'Please choose which server(s) to deploy:'.blue
|
9
|
+
set :host_menu_default_selection, :all # or :first, 1
|
10
|
+
set :host_menu_caption_of_all, 'all'
|
11
|
+
set :host_menu_caption_of_default, '(default)'
|
12
|
+
set :host_menu_invalid_range_msg, 'Please provide a number in (1..%d)'.red
|
13
|
+
set :host_menu_invalid_multi_choose_msg, 'Do you mean to choose all servers?'.red
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
if deploy_hosts.size > 1
|
18
|
+
prompt_menu default: fetch(:host_menu_default_selection)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def prompt_menu default: :all
|
23
|
+
puts fetch(:host_menu_prompt_msg)
|
24
|
+
|
25
|
+
default = input_for(default)
|
26
|
+
default_cap = fetch(:host_menu_caption_of_default)
|
27
|
+
|
28
|
+
(deploy_hosts + [fetch(:host_menu_caption_of_all)]).each_with_index do |host, i|
|
29
|
+
cap = if i == default - 1
|
30
|
+
"[%d] %s %s" % [i+1, host, default_cap]
|
31
|
+
else
|
32
|
+
"[%d] %s" % [i+1, host]
|
33
|
+
end
|
34
|
+
puts " " << cap.green
|
35
|
+
end
|
36
|
+
|
37
|
+
ask :host_numbers, default.to_s
|
38
|
+
set_hosts
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def input_for selection
|
44
|
+
case selection
|
45
|
+
when :all
|
46
|
+
max_selection
|
47
|
+
when 0
|
48
|
+
1
|
49
|
+
when Fixnum
|
50
|
+
selection
|
51
|
+
else
|
52
|
+
1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def max_selection
|
57
|
+
deploy_hosts.size + 1
|
58
|
+
end
|
59
|
+
|
60
|
+
def deploy_hosts
|
61
|
+
release_roles(:all)
|
62
|
+
end
|
63
|
+
|
64
|
+
def selection_for_all
|
65
|
+
max_selection
|
66
|
+
end
|
67
|
+
|
68
|
+
def set_hosts
|
69
|
+
ids = fetch(:host_numbers).split(/\s*,\s*/).map(&:to_i).uniq
|
70
|
+
unless ids.all? {|i| (1..max_selection).include? i}
|
71
|
+
puts fetch(:host_menu_invalid_range_msg) % max_selection
|
72
|
+
exit 1
|
73
|
+
end
|
74
|
+
|
75
|
+
if ids.size > 1 && ids.include?(selection_for_all)
|
76
|
+
puts fetch(:host_menu_invalid_multi_choose_msg)
|
77
|
+
exit 1
|
78
|
+
end
|
79
|
+
|
80
|
+
unless ids.include?(selection_for_all)
|
81
|
+
set_host_filter ids.map {|i| deploy_hosts[i-1].hostname}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def set_host_filter hosts
|
86
|
+
if defined? Capistrano::Configuration::Servers::HostFilter
|
87
|
+
set :filter, hosts: hosts
|
88
|
+
else
|
89
|
+
# hack for Capistrano v3.3+
|
90
|
+
Capistrano::Configuration.env.send(:servers).send(:servers).select! do |srv|
|
91
|
+
hosts.include?(srv.hostname)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
load File.expand_path('../tasks/hostmenu.rake', __FILE__)
|
100
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
|
3
|
+
desc 'print environment variables'
|
4
|
+
task :info do
|
5
|
+
puts "--" * 50
|
6
|
+
puts "About to deploy, check your seatbelt~"
|
7
|
+
puts "env: #{fetch(:rails_env).bold.blue}"
|
8
|
+
puts "branch: #{fetch(:branch).bold.green}"
|
9
|
+
puts "server: #{roles(:all).map(&:hostname).join("\n ").red}"
|
10
|
+
puts "--" * 50
|
11
|
+
end
|
12
|
+
|
13
|
+
desc <<-DESC
|
14
|
+
Prompt a text based list menu for user to select. \
|
15
|
+
Following changes will only be applied on selected servers.
|
16
|
+
|
17
|
+
User will see menu like this:
|
18
|
+
|
19
|
+
~~~
|
20
|
+
Please select target host(s):
|
21
|
+
[1] my.example1.com
|
22
|
+
[2] my.example2.com
|
23
|
+
[3] all (default)
|
24
|
+
Please enter host_numbers (3):
|
25
|
+
~~~
|
26
|
+
DESC
|
27
|
+
task :host_menu do
|
28
|
+
next if fetch(:show_host_menu) == false
|
29
|
+
|
30
|
+
Capistrano::Hostmenu.new
|
31
|
+
invoke 'deploy:info' unless fetch(:host_menu_show_info_after_select) == false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
Capistrano::Hostmenu.set_default_config
|
37
|
+
|
38
|
+
Capistrano::DSL.stages.each do |stage|
|
39
|
+
after stage, 'deploy:host_menu'
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capistrano-hostmenu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- qhwa
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capistrano
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description:
|
56
|
+
email: qhwa@163.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files:
|
60
|
+
- README.md
|
61
|
+
files:
|
62
|
+
- Gemfile
|
63
|
+
- Gemfile.lock
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- lib/capistrano/hostmenu.rb
|
67
|
+
- lib/capistrano/tasks/hostmenu.rake
|
68
|
+
homepage: https://github.com/qhwa/capistrano-hostmenu
|
69
|
+
licenses: []
|
70
|
+
metadata: {}
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options:
|
73
|
+
- "--main"
|
74
|
+
- README.md
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.4.5
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Capistrano plugin that prompt a text menu to choose target host.
|
94
|
+
test_files: []
|
95
|
+
has_rdoc: false
|