doo 0.5.0 → 0.6.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.
- data/Rakefile +0 -18
- data/lib/doo/base.rb +2 -2
- data/lib/doo/stock/common.rb +41 -5
- data/lib/doo/stock/prereqs.rb +3 -3
- data/lib/doo/stock/run_locally.rb +4 -10
- data/lib/doo/stock/run_on_server.rb +24 -28
- metadata +21 -4
- data/VERSION +0 -1
data/Rakefile
CHANGED
@@ -1,21 +1,3 @@
|
|
1
|
-
begin
|
2
|
-
require 'jeweler'
|
3
|
-
Jeweler::Tasks.new do |gem|
|
4
|
-
gem.version
|
5
|
-
gem.name = "doo"
|
6
|
-
gem.summary = %Q{Doo - a stacked-context approach to deployment scripting }
|
7
|
-
gem.description = %Q{Doo is a deployment scripting tool in the vein of capistrano and sprinkle that uses stacked contexts and a aspect-ish data model}
|
8
|
-
gem.homepage = "http://github.com/mtrudel/doo"
|
9
|
-
gem.authors = [ "Mat Trudel" ]
|
10
|
-
gem.email = [ "mat@geeky.net" ]
|
11
|
-
gem.executables = %W(doo)
|
12
|
-
gem.files = FileList["[A-Z]*", "{bin,examples,lib,spec}/**/*", 'lib/jeweler/templates/.gitignore']
|
13
|
-
gem.add_dependency "highline"
|
14
|
-
end
|
15
|
-
rescue LoadError
|
16
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
17
|
-
end
|
18
|
-
|
19
1
|
require 'rspec/core/rake_task'
|
20
2
|
desc "Run all tests"
|
21
3
|
RSpec::Core::RakeTask.new('spec') do |t|
|
data/lib/doo/base.rb
CHANGED
data/lib/doo/stock/common.rb
CHANGED
@@ -1,12 +1,48 @@
|
|
1
|
+
require 'highline'
|
2
|
+
require 'colorize'
|
3
|
+
|
1
4
|
Doo::Base.class_eval do
|
2
5
|
SEPARATORS = %w( / @ : | _ - # ^ ? )
|
3
|
-
|
4
|
-
def replace(file, src, replace,
|
6
|
+
|
7
|
+
def replace(file, src, replace, opts = {})
|
5
8
|
sep = SEPARATORS.detect { |x| !src.include?(x) && !replace.include?(x) }
|
6
|
-
|
9
|
+
run "sed -i -e 's#{sep}#{src}#{sep}#{replace}#{sep}g' #{file}", opts
|
10
|
+
end
|
11
|
+
|
12
|
+
def append(file, text, opts = {})
|
13
|
+
run "grep '#{text}' #{file} || echo '#{text}' >> #{file}", opts
|
14
|
+
end
|
15
|
+
|
16
|
+
def sudo(cmd, opts = {})
|
17
|
+
run(cmd, opts.merge(:sudo => true))
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def sudoize(cmd)
|
22
|
+
"sudo sh -c \"#{cmd.gsub(/\"/, "\\\"")}\""
|
7
23
|
end
|
8
24
|
|
9
|
-
def
|
10
|
-
|
25
|
+
def run!(cmd, opts = {})
|
26
|
+
with_clone(opts) do
|
27
|
+
if confirm
|
28
|
+
return false unless HighLine.new.agree("Run \"#{cmd}\"? ")
|
29
|
+
elsif verbose
|
30
|
+
puts "Running \"#{cmd}\"".green
|
31
|
+
end
|
32
|
+
unless dry_run
|
33
|
+
if defined?(capture) && capture
|
34
|
+
return `#{cmd}`
|
35
|
+
else
|
36
|
+
system cmd
|
37
|
+
if $? != 0 && (!defined? just_return_failure || !just_return_failure)
|
38
|
+
puts "Error code #{$?} running #{cmd}".red
|
39
|
+
raise
|
40
|
+
end
|
41
|
+
return $?.exitstatus
|
42
|
+
end
|
43
|
+
else
|
44
|
+
true
|
45
|
+
end
|
46
|
+
end
|
11
47
|
end
|
12
48
|
end
|
data/lib/doo/stock/prereqs.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Doo::Base.class_eval do
|
2
2
|
def if_passes(test, &block)
|
3
|
-
yield
|
3
|
+
yield unless run "#{test}", :just_return_failure => true
|
4
4
|
end
|
5
5
|
|
6
6
|
def if_fails(test, &block)
|
7
|
-
yield
|
8
|
-
end
|
7
|
+
yield if run "#{test}", :just_return_failure => true
|
8
|
+
end
|
9
9
|
end
|
@@ -1,17 +1,11 @@
|
|
1
|
-
require 'highline'
|
2
|
-
|
3
1
|
Doo::Base.class_eval do
|
4
2
|
def run_locally(variables = {}, &block)
|
5
3
|
with_clone(variables) do
|
6
|
-
def run(cmd)
|
7
|
-
if
|
8
|
-
|
9
|
-
elsif verbose
|
10
|
-
puts "Running \"#{cmd}\""
|
11
|
-
end
|
12
|
-
system cmd unless dry_run
|
13
|
-
$?
|
4
|
+
def run(cmd, opts = {})
|
5
|
+
cmd = sudoize(cmd) if opts[:sudo]
|
6
|
+
run! cmd, opts
|
14
7
|
end
|
8
|
+
|
15
9
|
instance_eval &block if block_given?
|
16
10
|
end
|
17
11
|
end
|
@@ -1,51 +1,47 @@
|
|
1
|
-
require 'highline'
|
2
|
-
|
3
1
|
Doo::Base.class_eval do
|
4
2
|
def run_on_server(servers, variables = {}, &block)
|
5
3
|
servers.each do |host, params|
|
6
4
|
with_clone(variables.merge({:host => host}).merge(params || {})) do
|
7
|
-
def run(remote_cmd,
|
5
|
+
def run(remote_cmd, opts = {})
|
8
6
|
cmdopts = ["-S \"~/.ssh/master-%l-%r@%h:%p\""]
|
9
|
-
cmdopts << "-t" if !
|
7
|
+
cmdopts << "-t" if !opts.include? :pty || opts[:pty]
|
10
8
|
cmdopts << "-p#{ssh_port}" if defined? ssh_port
|
11
|
-
|
12
|
-
|
13
|
-
return false unless HighLine.new.agree("Run \"#{cmd}\"? ")
|
14
|
-
elsif verbose
|
15
|
-
puts "Running \"#{cmd}\""
|
16
|
-
end
|
17
|
-
system(cmd) || raise("SSH Error") unless dry_run
|
18
|
-
$?
|
9
|
+
remote_cmd = sudoize(remote_cmd) if opts[:sudo]
|
10
|
+
run! "ssh #{cmdopts.join(' ')} #{user}@#{host} \"#{remote_cmd.gsub(/\"/, "\\\"")}\"", opts
|
19
11
|
end
|
20
12
|
|
21
|
-
def put(local, remote,
|
13
|
+
def put(local, remote, opts = {})
|
14
|
+
if defined?(opts[:sudo]) && opts[:sudo]
|
15
|
+
tmp_loc = run("mktemp -d -t dooXXXXX", :capture => true).chomp
|
16
|
+
real_remote = remote
|
17
|
+
remote = File.join(tmp_loc, remote)
|
18
|
+
run "mkdir -p #{File.dirname(remote)}"
|
19
|
+
end
|
22
20
|
cmdopts = ["-r"]
|
23
21
|
cmdopts << "-oProxyCommand=\"ssh #{gateway} exec nc %h %p\"" if defined?(gateway) && gateway
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
cmdopts << "-P#{ssh_port}" if defined? ssh_port
|
23
|
+
result = run! "scp #{cmdopts.join(' ')} #{local} #{user}@#{host}:#{remote}"
|
24
|
+
run "chmod #{opts[:mode]} #{remote}" if defined?(opts[:mode]) && opts[:mode]
|
25
|
+
sudo "chown -R #{opts[:owner]} #{remote}" if defined?(opts[:owner]) && opts[:owner]
|
26
|
+
sudo "chgrp -R #{opts[:group]} #{remote}" if defined?(opts[:group]) && opts[:group]
|
27
|
+
if defined?(opts[:sudo]) && opts[:sudo]
|
28
|
+
sudo "mv #{remote} #{real_remote}"
|
29
|
+
run "rm -rf #{tmp_loc}"
|
29
30
|
end
|
30
|
-
system(cmd) || raise("Scp Error") unless dry_run
|
31
|
-
result = $?
|
32
|
-
run("chmod #{opt[:mode]} #{remote}") if defined? opt[:mode]
|
33
31
|
result
|
34
32
|
end
|
35
33
|
|
36
34
|
begin
|
37
35
|
cmdopts = ["-MNf -S \"~/.ssh/master-%l-%r@%h:%p\""]
|
38
36
|
cmdopts << "-oProxyCommand=\"ssh #{gateway} exec nc %h %p\"" if defined?(gateway) && gateway
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
cmdopts << "-p#{ssh_port}" if defined? ssh_port
|
38
|
+
run! "ssh #{cmdopts.join(' ')} #{user}@#{host}"
|
39
|
+
|
40
|
+
# Now run the actual commands
|
43
41
|
instance_eval &block if block_given?
|
44
42
|
ensure
|
45
43
|
cmdopts = ["-Oexit -S \"~/.ssh/master-%l-%r@%h:%p\""]
|
46
|
-
|
47
|
-
puts "Running #{command}" if verbose
|
48
|
-
system(command) || raise("SSH Error") unless dry_run
|
44
|
+
run! "ssh #{cmdopts.join(' ')} #{user}@#{host}"
|
49
45
|
end
|
50
46
|
end
|
51
47
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: doo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 7
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
+
- 6
|
8
9
|
- 0
|
9
|
-
version: 0.
|
10
|
+
version: 0.6.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Mat Trudel
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-16 00:00:00 -05:00
|
18
19
|
default_executable: doo
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,11 +26,26 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
version: "0"
|
31
33
|
type: :runtime
|
32
34
|
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: colorize
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
33
49
|
description: Doo is a deployment scripting tool in the vein of capistrano and sprinkle that uses stacked contexts and a aspect-ish data model
|
34
50
|
email:
|
35
51
|
- mat@geeky.net
|
@@ -42,7 +58,6 @@ extra_rdoc_files:
|
|
42
58
|
files:
|
43
59
|
- README.md
|
44
60
|
- Rakefile
|
45
|
-
- VERSION
|
46
61
|
- bin/doo
|
47
62
|
- examples/sample.rb
|
48
63
|
- lib/doo.rb
|
@@ -69,6 +84,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
84
|
requirements:
|
70
85
|
- - ">="
|
71
86
|
- !ruby/object:Gem::Version
|
87
|
+
hash: 3
|
72
88
|
segments:
|
73
89
|
- 0
|
74
90
|
version: "0"
|
@@ -77,6 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
93
|
requirements:
|
78
94
|
- - ">="
|
79
95
|
- !ruby/object:Gem::Version
|
96
|
+
hash: 3
|
80
97
|
segments:
|
81
98
|
- 0
|
82
99
|
version: "0"
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.5.0
|