do 0.1.4 → 0.2.0.a
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/CHANGES.md +6 -0
- data/lib/do/commands.rb +46 -14
- data/lib/do/server.rb +25 -8
- data/lib/do/tasks.rb +4 -3
- data/lib/do/version.rb +1 -1
- metadata +13 -10
data/CHANGES.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.1.5 (Not yet released)
|
2
|
+
|
3
|
+
* Append now add \n at the end of line if not present
|
4
|
+
* Added options :recursive to download and upload methods
|
5
|
+
* Added a new method for execute local task inside a remote server
|
6
|
+
|
1
7
|
## 0.1.4 - August 31, 2011
|
2
8
|
|
3
9
|
* Added support to auto completion
|
data/lib/do/commands.rb
CHANGED
@@ -12,10 +12,19 @@ module DO
|
|
12
12
|
@_servers ||= []
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def all_remotes
|
16
16
|
servers.map(&:name)
|
17
17
|
end
|
18
18
|
|
19
|
+
def remotes
|
20
|
+
@_remotes ||= begin
|
21
|
+
name = ARGV[0]
|
22
|
+
servers.select { |s| s.name.to_s == name } + servers.select { |s| s.role.to_s == name }
|
23
|
+
end
|
24
|
+
@_remotes.map(&:name)
|
25
|
+
end
|
26
|
+
alias :remote :remotes
|
27
|
+
|
19
28
|
##
|
20
29
|
# Returns the current server
|
21
30
|
#
|
@@ -23,11 +32,21 @@ module DO
|
|
23
32
|
@_current_server
|
24
33
|
end
|
25
34
|
|
35
|
+
##
|
36
|
+
# Run a specific(s) command(s) outside the server
|
37
|
+
#
|
38
|
+
def locally(&block)
|
39
|
+
server_was, @_current_server = @_current_server, nil
|
40
|
+
block.call
|
41
|
+
ensure
|
42
|
+
@_current_server = server_was
|
43
|
+
end
|
44
|
+
|
26
45
|
##
|
27
46
|
# Set an option to the given value
|
28
47
|
#
|
29
|
-
def set(
|
30
|
-
|
48
|
+
def set(name, value)
|
49
|
+
(class << self; self; end).send(:define_method, name) { value }
|
31
50
|
end
|
32
51
|
|
33
52
|
##
|
@@ -52,11 +71,27 @@ module DO
|
|
52
71
|
recipes.each { |f| load_recipe(f) }
|
53
72
|
end
|
54
73
|
|
74
|
+
def load_common
|
75
|
+
load File.expand_path('../common.rb', __FILE__)
|
76
|
+
end
|
77
|
+
|
55
78
|
def load_recipe(path)
|
56
79
|
instance_eval(File.read(path), __FILE__, __LINE__)
|
57
80
|
end
|
58
81
|
alias :load :load_recipe
|
59
82
|
|
83
|
+
def role(name)
|
84
|
+
servers_was = servers.dup
|
85
|
+
yield self
|
86
|
+
(servers-servers_was).each do |s|
|
87
|
+
s.instance_variable_set(:'@role', name)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def roles
|
92
|
+
servers.map(&:role).compact.uniq
|
93
|
+
end
|
94
|
+
|
60
95
|
##
|
61
96
|
# This method define our servers
|
62
97
|
#
|
@@ -69,18 +104,15 @@ module DO
|
|
69
104
|
#
|
70
105
|
def server(name, host, user, options={})
|
71
106
|
servers.push(DO::Server.new(name, host, user, options))
|
107
|
+
current = servers[-1]
|
108
|
+
set current.name, current
|
109
|
+
set current.role, servers.select { |s| s.role == current.role } if current.role
|
72
110
|
task name do |opts, b|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
@_current_server = servers.find { |s| s.name == name }
|
79
|
-
begin
|
80
|
-
b.arity == 1 ? b.call(opts) : b.call
|
81
|
-
ensure
|
82
|
-
@_current_server = nil
|
83
|
-
end
|
111
|
+
@_current_server = servers.find { |s| s.name == current.name }
|
112
|
+
begin
|
113
|
+
b.arity == 1 ? b.call(opts) : b.call
|
114
|
+
ensure
|
115
|
+
@_current_server = nil
|
84
116
|
end
|
85
117
|
end
|
86
118
|
end
|
data/lib/do/server.rb
CHANGED
@@ -5,7 +5,7 @@ module DO
|
|
5
5
|
class Server
|
6
6
|
include DO::Utils
|
7
7
|
|
8
|
-
attr_reader :name, :host, :user, :options
|
8
|
+
attr_reader :name, :host, :user, :role, :options
|
9
9
|
|
10
10
|
##
|
11
11
|
# Initialize a new DO Server
|
@@ -19,7 +19,7 @@ module DO
|
|
19
19
|
# srv1 = DO::Server.new(:srv1, 'srv1.lipsiasoft.biz', 'root', :keys => %w[/path/to/key.pem]
|
20
20
|
#
|
21
21
|
def initialize(name, host, user, options={})
|
22
|
-
|
22
|
+
@name, @host, @user, @role, @options = name, host, user, options.delete(:role), options
|
23
23
|
end
|
24
24
|
|
25
25
|
##
|
@@ -72,9 +72,9 @@ module DO
|
|
72
72
|
cmd = args.join(" ")
|
73
73
|
if options[:as]
|
74
74
|
if options[:as] == 'root'
|
75
|
-
cmd = "sudo #{cmd
|
75
|
+
cmd = "sudo #{cmd}"
|
76
76
|
else
|
77
|
-
cmd = "su #{options[:as]} -c '#{cmd.gsub(
|
77
|
+
cmd = "su #{options[:as]} -c '#{cmd.gsub("'", "'\\\\''")}'"
|
78
78
|
end
|
79
79
|
end
|
80
80
|
log cmd
|
@@ -126,8 +126,16 @@ module DO
|
|
126
126
|
# up(/my/dir, /tmp, :recursive => true)
|
127
127
|
#
|
128
128
|
def upload(from, to, options={})
|
129
|
-
|
130
|
-
|
129
|
+
sftp.upload!(from, to, options) do |event, uploader, *args|
|
130
|
+
case event
|
131
|
+
when :put
|
132
|
+
DO_LOGGER.print("\r" << DO_LOGGER_FORMAT % [user, name, "writing: #{to} (#{args[1] * 100 / args[0].size}%)"]); DO_LOGGER.flush
|
133
|
+
when :finish
|
134
|
+
DO_LOGGER.puts("\r" << DO_LOGGER_FORMAT % [user, name, "writing: #{to} (100%)"]); DO_LOGGER.flush
|
135
|
+
when :mkdir
|
136
|
+
log "creating directory #{args[0]}"
|
137
|
+
end
|
138
|
+
end
|
131
139
|
end
|
132
140
|
alias :up :upload
|
133
141
|
|
@@ -142,8 +150,16 @@ module DO
|
|
142
150
|
# get(/tmp/dir, /my, :recursive => true)
|
143
151
|
#
|
144
152
|
def download(from, to, options={})
|
145
|
-
|
146
|
-
|
153
|
+
sftp.download!(from, to, options) do |event, downloader, *args|
|
154
|
+
case event
|
155
|
+
when :get
|
156
|
+
DO_LOGGER.print("\r" << DO_LOGGER_FORMAT % [user, name, "sending: #{from} (#{args[1] * 100 / args[0].size}%)"]); DO_LOGGER.flush
|
157
|
+
when :finish
|
158
|
+
DO_LOGGER.puts("\r" << DO_LOGGER_FORMAT % [user, name, "sending: #{from} (100%)"]); DO_LOGGER.flush
|
159
|
+
when :mkdir
|
160
|
+
log "creating directory #{args[0]}"
|
161
|
+
end
|
162
|
+
end
|
147
163
|
end
|
148
164
|
alias :get :download
|
149
165
|
|
@@ -205,6 +221,7 @@ module DO
|
|
205
221
|
log "'%s' already match your pattern" % file
|
206
222
|
return false
|
207
223
|
else
|
224
|
+
pattern += "\n" unless pattern[-1] == ?\n
|
208
225
|
replacement = case where
|
209
226
|
when :top, :start then pattern+was
|
210
227
|
when :bottom, :end then was+pattern
|
data/lib/do/tasks.rb
CHANGED
@@ -52,8 +52,9 @@ module DO
|
|
52
52
|
if task[:in].empty?
|
53
53
|
task[:block].arity == 1 ? task[:block].call(opts) : task[:block].call if task[:block]
|
54
54
|
else
|
55
|
-
task[:in] = send(task[:in][0]) if task[:in].size == 1 && method_defined?(task[:in][0])
|
56
|
-
task[:in].
|
55
|
+
task[:in] = send(task[:in][0]) if task[:in].size == 1 && (class << self; self; end).method_defined?(task[:in][0])
|
56
|
+
task[:in] = task[:in].name if task[:in].is_a?(DO::Server)
|
57
|
+
Array(task[:in]).each do |d|
|
57
58
|
parent = task_find(d)
|
58
59
|
case parent[:block].arity
|
59
60
|
when 1 then parent[:block].call(task[:block])
|
@@ -63,7 +64,7 @@ module DO
|
|
63
64
|
end
|
64
65
|
end
|
65
66
|
rescue NotFound => e
|
66
|
-
method_defined?(args_was[0]) ? send(args_was.shift) : raise(e)
|
67
|
+
(class << self; self; end).method_defined?(args_was[0]) ? send(args_was.shift) : raise(e)
|
67
68
|
end
|
68
69
|
alias :run_task :task_run
|
69
70
|
|
data/lib/do/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: do
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 58
|
5
|
+
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
- a
|
11
|
+
version: 0.2.0.a
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Davide D'Agostino
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2011-
|
19
|
+
date: 2011-11-28 00:00:00 +01:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -109,12 +110,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
111
|
none: false
|
111
112
|
requirements:
|
112
|
-
- - "
|
113
|
+
- - ">"
|
113
114
|
- !ruby/object:Gem::Version
|
114
|
-
hash:
|
115
|
+
hash: 25
|
115
116
|
segments:
|
116
|
-
-
|
117
|
-
|
117
|
+
- 1
|
118
|
+
- 3
|
119
|
+
- 1
|
120
|
+
version: 1.3.1
|
118
121
|
requirements: []
|
119
122
|
|
120
123
|
rubyforge_project:
|