screwcap 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +2 -0
- data/Rakefile +1 -1
- data/bin/screwcap +10 -0
- data/lib/screwcap/deployer.rb +2 -1
- data/lib/screwcap/runner.rb +25 -9
- data/lib/screwcap/task.rb +1 -1
- data/lib/screwcap.rb +1 -1
- data/recipes/setup_rails.rb +32 -0
- data/screwcap.gemspec +1 -1
- data/spec/task_spec.rb +6 -1
- data/test/config/local_task.rb +3 -0
- metadata +5 -3
data/Manifest.txt
CHANGED
@@ -15,6 +15,7 @@ lib/screwcap/sequence.rb
|
|
15
15
|
lib/screwcap/server.rb
|
16
16
|
lib/screwcap/task.rb
|
17
17
|
lib/trollop.rb
|
18
|
+
recipes/setup_rails.rb
|
18
19
|
screwcap.gemspec
|
19
20
|
spec/command_set_spec.rb
|
20
21
|
spec/deployer_spec.rb
|
@@ -27,6 +28,7 @@ tasks/rspec.rake
|
|
27
28
|
test/config/command_sets.rb
|
28
29
|
test/config/expect.rb
|
29
30
|
test/config/gateway.rb
|
31
|
+
test/config/local_task.rb
|
30
32
|
test/config/no_server.rb
|
31
33
|
test/config/rails_tasks.rb
|
32
34
|
test/config/simple_recipe.rb
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ Hoe.plugin :newgem
|
|
11
11
|
# Generate all the Rake tasks
|
12
12
|
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
13
13
|
$hoe = Hoe.spec 'screwcap' do
|
14
|
-
self.version = '0.3.
|
14
|
+
self.version = '0.3.5'
|
15
15
|
self.developer 'Grant Ammons', 'grant@pipelinedeals.com'
|
16
16
|
self.rubyforge_name = self.name # TODO this is default value
|
17
17
|
self.extra_deps = [['net-ssh','>= 2.0.23'],['net-ssh-gateway','>=1.0.1'], ['net-scp','>=1.0.4']]
|
data/bin/screwcap
CHANGED
@@ -11,6 +11,7 @@ p = Trollop::Parser.new do
|
|
11
11
|
opt :debug, "Turn on debugger. Will print full stacktrace if an exeception was raised"
|
12
12
|
opt :help, "Show this message"
|
13
13
|
opt :tasks, "Display available tasks in recipe file"
|
14
|
+
opt :setup_rails, "Setup a rails app to use screwcap"
|
14
15
|
version <<-EOF
|
15
16
|
Screwcap #{Screwcap::VERSION} by Grant Ammons (grant@pipelinedeals.com)
|
16
17
|
More info at http://gammons.github.com/screwcap
|
@@ -38,6 +39,15 @@ opts = Trollop::with_standard_exception_handling p do
|
|
38
39
|
exit
|
39
40
|
end
|
40
41
|
|
42
|
+
if opts[:setup_rails] == true
|
43
|
+
Deployer.new(:recipe_file => File.expand_path(File.dirname(__FILE__) + "/../recipes/setup_rails.rb")).run! :setup_rails
|
44
|
+
$stdout << "\nYour rails app now has a sample recipe, ready for the editing, in config/screwcap/recipe.rb\n"
|
45
|
+
$stdout << "Your recipes will be automatically available in rake. Screwcap uses the :remote namespace.\n"
|
46
|
+
$stdout << "To see what recipes you can run, type 'rake -T remote'.\n"
|
47
|
+
$stdout << "Please visit http://gammons.github.com/screwcap for help.\n"
|
48
|
+
exit
|
49
|
+
end
|
50
|
+
|
41
51
|
raise Trollop::HelpNeeded if ARGV.size < 2
|
42
52
|
recipe_file = ARGV.shift
|
43
53
|
begin
|
data/lib/screwcap/deployer.rb
CHANGED
@@ -88,12 +88,13 @@ class Deployer < Screwcap::Base
|
|
88
88
|
#
|
89
89
|
# ====Any command sets that are nested within another command set will inerit all the variables from the parent command set.
|
90
90
|
#
|
91
|
-
def
|
91
|
+
def task name, options = {}, &block
|
92
92
|
t = Task.new(options.merge(:name => name, :nocolor => self.__options[:nocolor], :silent => self.__options[:silent], :deployment_servers => self.__servers, :command_sets => self.__command_sets), &block)
|
93
93
|
clone_table_for(t)
|
94
94
|
t.instance_eval(&block)
|
95
95
|
self.__tasks << t
|
96
96
|
end
|
97
|
+
alias :task_for :task
|
97
98
|
|
98
99
|
# ====A *command set* is like a generic set of tasks that you intend to use in multiple tasks.
|
99
100
|
#
|
data/lib/screwcap/runner.rb
CHANGED
@@ -4,12 +4,28 @@ class Runner
|
|
4
4
|
def self.execute! task, options
|
5
5
|
@task = task; @options = options
|
6
6
|
threads = []
|
7
|
-
@task.
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
if @task.__options[:local] == true
|
8
|
+
log "\n*** BEGIN executing local task #{@task.__name}\n", :color => :blue
|
9
|
+
@task.__commands.each do |command|
|
10
|
+
ret = `#{command[:command]}`
|
11
|
+
if $?.to_i == 0
|
12
|
+
log " I: (local): #{command[:command]}\n", :color => :blue
|
13
|
+
log(" O: (local): #{ret}\n", :color => :blue) unless ret.nil? or ret == ""
|
11
14
|
else
|
12
|
-
|
15
|
+
log " I: (local): #{command[:command]}\n", :color => :blue
|
16
|
+
errorlog(" O: (local): #{ret}\n", :color => :red) unless ret.nil? or ret == ""
|
17
|
+
errorlog(" E: (local): #{command[:command]} return exit code: #{$?}\n", :color => :red) if $? != 0
|
18
|
+
end
|
19
|
+
end
|
20
|
+
log "\n*** END executing local task #{@task.__name}\n", :color => :blue
|
21
|
+
else
|
22
|
+
@task.__servers.each do |_server|
|
23
|
+
_server.__addresses.each do |_address|
|
24
|
+
if task.__options[:parallel] == false
|
25
|
+
execute_on(_server, _address)
|
26
|
+
else
|
27
|
+
threads << Thread.new(_server, _address) { |server, address| execute_on(server, address) }
|
28
|
+
end
|
13
29
|
end
|
14
30
|
end
|
15
31
|
end
|
@@ -38,10 +54,10 @@ class Runner
|
|
38
54
|
end
|
39
55
|
rescue Net::SSH::AuthenticationFailed => e
|
40
56
|
raise Net::SSH::AuthenticationFailed, "Authentication failed for server named #{server.name}. Please check your authentication credentials."
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
57
|
+
rescue Exception => e
|
58
|
+
errorlog " F: (#{address}): #{e}", :color => :red
|
59
|
+
ensure
|
60
|
+
log "*** END executing task #{@task.__name} on #{server.name} with address #{address}\n\n", :color => :blue
|
45
61
|
end
|
46
62
|
end
|
47
63
|
|
data/lib/screwcap/task.rb
CHANGED
@@ -17,7 +17,7 @@ class Task < Screwcap::Base
|
|
17
17
|
self.__server_names = opts[:servers]
|
18
18
|
end
|
19
19
|
|
20
|
-
validate(opts[:deployment_servers]) unless opts[:validate] == false
|
20
|
+
validate(opts[:deployment_servers]) unless opts[:validate] == false or opts[:local] == true
|
21
21
|
end
|
22
22
|
|
23
23
|
# Run a command. This can either be a string, or a symbol that is the name of a command set to run.
|
data/lib/screwcap.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
server :local, :address => "127.0.0.1", :user => "root", :password => "none"
|
2
|
+
task :setup_rails, :local => true do
|
3
|
+
local "mkdir -p config/screwcap"
|
4
|
+
local "mkdir -p lib/tasks"
|
5
|
+
|
6
|
+
local <<-EOF
|
7
|
+
if [ -f config/screwcap/rails_tasks.rb ]
|
8
|
+
then
|
9
|
+
echo "config/screwcap/rails_tasks.rb already exists!"; exit 1
|
10
|
+
else
|
11
|
+
curl -s http://github.com/gammons/screwcap_recipes/raw/master/rails/rails_tasks.rb > config/screwcap/rails_tasks.rb
|
12
|
+
fi
|
13
|
+
EOF
|
14
|
+
|
15
|
+
local <<-EOF
|
16
|
+
if [ -f lib/tasks/screwcap.rake ]
|
17
|
+
then
|
18
|
+
echo "lib/tasks/screwcap.rake already exists!"; exit 1
|
19
|
+
else
|
20
|
+
curl -s http://github.com/gammons/screwcap_recipes/raw/master/rails/screwcap.rake > lib/tasks/screwcap.rake
|
21
|
+
fi
|
22
|
+
EOF
|
23
|
+
|
24
|
+
local <<-EOF
|
25
|
+
if [ -f config/screwcap/recipe.rb ]
|
26
|
+
then
|
27
|
+
echo "config/screwcap/recipe.rb already exists!"; exit 1
|
28
|
+
else
|
29
|
+
curl -s http://github.com/gammons/screwcap_recipes/raw/master/rails/recipe.rb > config/screwcap/recipe.rb
|
30
|
+
fi
|
31
|
+
EOF
|
32
|
+
end
|
data/screwcap.gemspec
CHANGED
data/spec/task_spec.rb
CHANGED
@@ -29,7 +29,7 @@ describe "Tasks" do
|
|
29
29
|
task = @deployer.__tasks.find {|t| t.name == :task1 }
|
30
30
|
Runner.execute! task, @deployer.__options
|
31
31
|
@stderr.size.should == 0
|
32
|
-
@stdout.size.should ==
|
32
|
+
@stdout.size.should == 28
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should be able to use variables in the run statement" do
|
@@ -79,4 +79,9 @@ describe "Tasks" do
|
|
79
79
|
Runner.execute! t, deployer.__options
|
80
80
|
t.__commands.map {|c| [c[:command], c[:from]] }.first.should == ["echo 'we failed'", :failover]
|
81
81
|
end
|
82
|
+
|
83
|
+
it "should be able to create local tasks" do
|
84
|
+
# TODO better testing on this
|
85
|
+
lambda { Deployer.new(:recipe_file => "./test/config/local_task.rb", :silent => true).run! :local }.should_not raise_error
|
86
|
+
end
|
82
87
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: screwcap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 5
|
10
|
+
version: 0.3.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Grant Ammons
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- lib/screwcap/server.rb
|
127
127
|
- lib/screwcap/task.rb
|
128
128
|
- lib/trollop.rb
|
129
|
+
- recipes/setup_rails.rb
|
129
130
|
- screwcap.gemspec
|
130
131
|
- spec/command_set_spec.rb
|
131
132
|
- spec/deployer_spec.rb
|
@@ -138,6 +139,7 @@ files:
|
|
138
139
|
- test/config/command_sets.rb
|
139
140
|
- test/config/expect.rb
|
140
141
|
- test/config/gateway.rb
|
142
|
+
- test/config/local_task.rb
|
141
143
|
- test/config/no_server.rb
|
142
144
|
- test/config/rails_tasks.rb
|
143
145
|
- test/config/simple_recipe.rb
|