do 0.0.1 → 0.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/CHANGES.md +6 -0
- data/README.md +77 -33
- data/Rakefile +6 -3
- data/bin/doit +1 -1
- data/do.gemspec +4 -0
- data/lib/do/commands.rb +6 -16
- data/lib/do/common.rb +56 -0
- data/lib/do/server.rb +1 -1
- data/lib/do/version.rb +1 -1
- metadata +9 -5
- data/recipes/.servorc +0 -14
data/CHANGES.md
ADDED
data/README.md
CHANGED
@@ -2,35 +2,37 @@
|
|
2
2
|
|
3
3
|
DO is a thin framework useful to manage remote servers through ssh.
|
4
4
|
|
5
|
-
There are many other
|
5
|
+
There are many other alternatives, once of them is
|
6
|
+
[capistrano](https://github.com/capistrano/capistrano).
|
6
7
|
|
7
8
|
So why another one? Basically I need:
|
8
9
|
|
9
10
|
* easy creation of my recipes
|
10
11
|
* see perfectly what's happening on my remote servers
|
11
12
|
* highly focus on smart actions, upload, download, sudo, replace.
|
12
|
-
* manage more than one server
|
13
|
-
* use same
|
13
|
+
* manage easily more than one server at same time
|
14
|
+
* use same syntax to manage local tasks
|
14
15
|
|
15
|
-
## Installation
|
16
|
+
## DO - Installation and Setup
|
16
17
|
|
17
18
|
```sh
|
18
19
|
$ sudo gem install do
|
19
|
-
$ doit
|
20
|
+
$ doit setup # setup DO directory
|
21
|
+
$ doit -T # show DO tasks
|
20
22
|
```
|
21
23
|
|
22
|
-
Now
|
24
|
+
Now you can edit your `~/.do/dorc` adding your **servers** or **plugins**.
|
23
25
|
|
24
|
-
## Files
|
26
|
+
## DO - Files
|
25
27
|
|
26
28
|
There are some way to generate **DO** tasks, you can:
|
27
29
|
|
28
|
-
* Create a file called `Do` in your project directory
|
29
|
-
* Create
|
30
|
-
* Create
|
31
|
-
* Create a file called `dorc` in `~/.do` directory
|
30
|
+
* Create a file called `Do` or `Dofile` in your project directory (_project wide_)
|
31
|
+
* Create `*.rake` files in `~/.do` directory (_system wide_)
|
32
|
+
* Create a file called `dorc` in `~/.do` directory (_system wide_)
|
32
33
|
|
33
|
-
You can change
|
34
|
+
You can change the *DO* home directory (default: `~/.do`) with these
|
35
|
+
commands:
|
34
36
|
|
35
37
|
```
|
36
38
|
DO_PATH='/my/new/.do/path'
|
@@ -38,7 +40,9 @@ ENV['DO_PATH']='/my/new/.do/path'
|
|
38
40
|
export DO_PATH='/my/new/.do/path'
|
39
41
|
```
|
40
42
|
|
41
|
-
|
43
|
+
In this guide we assume that your `DO_PATH` is `~/.do`.
|
44
|
+
|
45
|
+
## DO - Features
|
42
46
|
|
43
47
|
* Easily server logging
|
44
48
|
* SSH connections
|
@@ -59,7 +63,7 @@ server.run 'uname', '-a'
|
|
59
63
|
# root@srv1 ~ # uname -a
|
60
64
|
# Linux srv1.lipsiasoft.net 2.6.18-194.32.1.el5 x86_64 x86_64 x86_64 GNU/Linux
|
61
65
|
|
62
|
-
server.run 'mysqladmin -u root -p password
|
66
|
+
server.run 'mysqladmin -u root -p password "oldone"', 'newpassword'
|
63
67
|
# root@srv1 ~ # mysqladmin -u root -p password 'oldone'
|
64
68
|
# Enter password: oldone
|
65
69
|
# mysqladmin: connect to server at 'localhost' failed
|
@@ -119,29 +123,67 @@ server.wait
|
|
119
123
|
# Press ENTER to continue...
|
120
124
|
```
|
121
125
|
|
126
|
+
## DO - Plugins
|
127
|
+
|
128
|
+
DO, support plugins, you can manually add new one in your `~/.do/dorc`
|
129
|
+
with a simple line:
|
130
|
+
|
131
|
+
```rb
|
132
|
+
plugin :vim, 'https://raw.github.com/DAddYE/.do/master/vim.rake'
|
133
|
+
```
|
134
|
+
|
135
|
+
However we have a `doit` command for that:
|
136
|
+
|
137
|
+
```sh
|
138
|
+
$ doit download[https://raw.github.com/DAddYE/.do/master/l.rake]
|
139
|
+
```
|
140
|
+
|
141
|
+
This command add for you a new line in your `~/.do/dorc` and perform:
|
142
|
+
|
143
|
+
```sh
|
144
|
+
$ doit plugin:vim
|
145
|
+
```
|
146
|
+
|
147
|
+
which download and install in your `~/.do/dorc` directory a new rake
|
148
|
+
file.
|
149
|
+
|
150
|
+
Once this happen you are be able to see new tasks:
|
151
|
+
|
152
|
+
```sh
|
153
|
+
$ doit -T
|
154
|
+
|
155
|
+
************************************************************
|
156
|
+
* DO - IT! *
|
157
|
+
************************************************************
|
158
|
+
|
159
|
+
doit plugin:vim # install vim plugin
|
160
|
+
doit setup # setup a working home directory
|
161
|
+
doit vim:configure # configure with a janus custom template
|
162
|
+
doit vim:install # install vim with python and ruby support
|
163
|
+
```
|
164
|
+
|
122
165
|
## Scenario and examples
|
123
166
|
|
124
|
-
I'm porting my custom recipes to
|
125
|
-
[here](https://github.com/daddye/.do)
|
167
|
+
I'm porting my custom recipes to *DO*, you can find my dot files
|
168
|
+
[here](https://github.com/daddye/.do).
|
126
169
|
|
127
|
-
|
170
|
+
Here servers definitions:
|
128
171
|
|
129
172
|
```rb
|
173
|
+
# ~/.do/dorc
|
130
174
|
keys = %w(/keys/master.pem /keys/instances.pem /keys/stage.pem)
|
131
175
|
server :sho0, 'sho0.lipsiasoft.biz', 'root', :keys => keys
|
132
176
|
server :srv0, 'srv0.lipsiasoft.biz', 'root', :keys => keys
|
133
177
|
server :srv1, 'srv1.lipsiasoft.biz', 'root', :keys => keys
|
134
178
|
server :srv2, 'srv2.lipsiasoft.biz', 'root', :keys => keys
|
135
|
-
|
136
|
-
plugin "configure-server", "https://raw.github.com/gist/112..."
|
137
179
|
```
|
138
180
|
|
139
|
-
|
181
|
+
I've also some recipes in my `~/.do` path:
|
140
182
|
|
141
183
|
```rb
|
142
|
-
# ~/.do/configure.
|
184
|
+
# ~/.do/configure.rake
|
143
185
|
namespace :configure
|
144
|
-
desc "upgrade rubygems and install
|
186
|
+
desc "upgrade rubygems and install useful gems"
|
145
187
|
task :gems => :ree do
|
146
188
|
run "gem update --system" if yes?("Do you want to update rubygems?")
|
147
189
|
run "gem install rake"
|
@@ -174,7 +216,7 @@ namespace :configure
|
|
174
216
|
...
|
175
217
|
```
|
176
218
|
|
177
|
-
I call
|
219
|
+
I call these task with:
|
178
220
|
|
179
221
|
```sh
|
180
222
|
$ doit configure:gems
|
@@ -182,8 +224,8 @@ $ doit configure:motd
|
|
182
224
|
$ doit configure:mysql
|
183
225
|
```
|
184
226
|
|
185
|
-
**NOTE**
|
186
|
-
any task,
|
227
|
+
**NOTE** like rake tasks you are be able to add prerequisites to
|
228
|
+
any task, ex:
|
187
229
|
|
188
230
|
```rb
|
189
231
|
task :mysql => :yum do; ...; end
|
@@ -220,31 +262,33 @@ namespace :l do
|
|
220
262
|
end
|
221
263
|
```
|
222
264
|
|
223
|
-
When I need to setup a new project
|
265
|
+
When I need to setup a new project:
|
224
266
|
|
225
267
|
``` sh
|
226
268
|
$ doit l:setup
|
227
269
|
$ doit l:commit # to make a fast commit and push
|
228
270
|
```
|
229
271
|
|
230
|
-
As you can see define remote and local task is simple like making
|
231
|
-
rake tasks
|
272
|
+
As you can see, define remote and local task, is simple like making
|
273
|
+
standard rake tasks. *DO* extend `Rake`.
|
232
274
|
|
233
|
-
## Filtering
|
275
|
+
## DO - Filtering
|
234
276
|
|
235
|
-
Sometimes you want to perform a task only on
|
277
|
+
Sometimes you want to perform a task only on some servers:
|
236
278
|
|
237
279
|
```sh
|
238
280
|
$ doit configure:new --only-srv1 --only-srv2
|
239
281
|
$ doit configure:new --except-srv1
|
240
282
|
```
|
241
283
|
|
242
|
-
## Awesome
|
284
|
+
## DO - Output (Awesome...)
|
243
285
|
|
244
|
-
What I really
|
286
|
+
What I really wanted was a great understandable, colored output that clarify
|
245
287
|
me what's happen on my remote servers.
|
246
288
|
|
247
|
-
|
289
|
+
Here a example output of my tasks:
|
290
|
+
|
291
|
+
```sh
|
248
292
|
root@sho0 ~ # touch /root/.bashrc
|
249
293
|
root@sho0 ~ # replace all in '/root/.bashrc'
|
250
294
|
root@sho0 ~ # replace all in '/etc/motd'
|
data/Rakefile
CHANGED
@@ -11,9 +11,12 @@ end
|
|
11
11
|
|
12
12
|
desc "Bump version on github"
|
13
13
|
task :bump do
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
if `git status -s`.chomp == ""
|
15
|
+
puts "\e[31mNothing to commit (working directory clean)\e[0m"
|
16
|
+
else
|
17
|
+
version = Bundler.load_gemspec(Dir[File.expand_path('../*.gemspec', __FILE__)].first).version
|
18
|
+
sh "git add .; git commit -a -m \"Bump to version #{version}\""
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
task :release => :bump
|
data/bin/doit
CHANGED
data/do.gemspec
CHANGED
@@ -18,4 +18,8 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.add_dependency "net-ssh", "~>2.1.4"
|
19
19
|
gem.add_dependency "net-sftp", "~>2.0.5"
|
20
20
|
gem.add_development_dependency "rspec"
|
21
|
+
|
22
|
+
gem.post_install_message = "\e[32m" + ("*" * 60) + "\n"
|
23
|
+
gem.post_install_message += "*" + "DO - IT! $ doit setup".center(58) + "*" + "\n"
|
24
|
+
gem.post_install_message += ("*" * 60) + "\n\e[0m"
|
21
25
|
end
|
data/lib/do/commands.rb
CHANGED
@@ -51,10 +51,11 @@ module DO
|
|
51
51
|
# plugin "configuration", "https://gist.github.com/raw/xys.rake"
|
52
52
|
#
|
53
53
|
def plugin(name, repo)
|
54
|
-
desc "
|
55
|
-
local("plugin:#{name}" =>
|
54
|
+
desc "install #{name} plugin"
|
55
|
+
local("plugin:#{name}" => :setup) do
|
56
|
+
log "\e[36m## Installing plugin %s\e[0m" % name
|
56
57
|
Dir.mkdir(DO_PATH) unless File.exist?(DO_PATH)
|
57
|
-
sh "curl --location --progress-bar #{repo} > #{File.join(DO_PATH,
|
58
|
+
sh "curl --location --progress-bar #{repo} > #{File.join(DO_PATH, '%s.rake' % name)}"
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
@@ -129,7 +130,7 @@ module DO
|
|
129
130
|
##
|
130
131
|
# Log text under current_server if available
|
131
132
|
#
|
132
|
-
def log(text, new_line=true)
|
133
|
+
def log(text="", new_line=true)
|
133
134
|
if current_server
|
134
135
|
current_server.log(text, new_line)
|
135
136
|
else
|
@@ -142,15 +143,4 @@ end # DO
|
|
142
143
|
|
143
144
|
self.extend DO::Commands
|
144
145
|
|
145
|
-
|
146
|
-
servers_selected.replace(servers)
|
147
|
-
end
|
148
|
-
|
149
|
-
namespace :do do
|
150
|
-
desc "setup a working home directory"
|
151
|
-
local :setup do
|
152
|
-
File.mkdir(DO_PATH) unless File.exist?(DO_PATH)
|
153
|
-
sh 'touch %s' % File.join(DO_PATH, 'dorc')
|
154
|
-
sh 'ln -s %s %s' % [File.join(DO_PATH, 'dorc'), File.expand_path("~/.dorc")]
|
155
|
-
end
|
156
|
-
end
|
146
|
+
load(File.expand_path('../common.rb', __FILE__))
|
data/lib/do/common.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
##
|
2
|
+
# Common tasks performed by doit
|
3
|
+
#
|
4
|
+
|
5
|
+
local :servers do
|
6
|
+
servers_selected.replace(servers)
|
7
|
+
end
|
8
|
+
|
9
|
+
local :download, [:recipe] => :setup do |t, options|
|
10
|
+
if options[:recipe]
|
11
|
+
name = File.basename(options[:recipe], '.rake')
|
12
|
+
rc = File.join(DO_PATH, 'dorc')
|
13
|
+
buf = File.read(rc)
|
14
|
+
|
15
|
+
if buf.include?(options[:recipe])
|
16
|
+
log "\e[31mYour '\e[1m%s\e[31m' already has the plugin '\e[1m%s\e[0m'" % [rc, options[:recipe]]
|
17
|
+
log "Please run: $ doit plugin:%s" % name
|
18
|
+
exit
|
19
|
+
else
|
20
|
+
plugin = "plugin :%s, '%s'\n" % [name, options[:recipe]]
|
21
|
+
File.open(rc, 'a') { |f| f.write plugin }
|
22
|
+
load(rc)
|
23
|
+
Rake::Task['plugin:%s' % name].invoke
|
24
|
+
end
|
25
|
+
else
|
26
|
+
log "\e[31mYou must provide a recipe path ex:\e[0m"
|
27
|
+
log
|
28
|
+
log " $ doit download[https://raw.github.com/DAddYE/.do/master/l.rake]"
|
29
|
+
log
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "setup a working home directory"
|
34
|
+
local :setup do
|
35
|
+
File.mkdir(DO_PATH) unless File.exist?(DO_PATH)
|
36
|
+
hrc = File.expand_path("~/.dorc")
|
37
|
+
orc = File.join(DO_PATH, 'dorc')
|
38
|
+
unless File.exist?(orc)
|
39
|
+
template = <<-RUBY.gsub(/^ {6}/, '')
|
40
|
+
##
|
41
|
+
# Server definitions
|
42
|
+
#
|
43
|
+
# keys = %w(/path/to/key1.pem /path/to/key2.pem)
|
44
|
+
# server :srv1, 'srv1.domain.local', 'root', :keys => keys
|
45
|
+
# server :srv2, 'srv2.domain.local', 'root', :keys => keys
|
46
|
+
#
|
47
|
+
|
48
|
+
##
|
49
|
+
# Here my plugins
|
50
|
+
#
|
51
|
+
RUBY
|
52
|
+
File.open(orc, 'w') { |f| f.write template }
|
53
|
+
log "\e[36mGenerated template, now you can add your config to: '%s'\e[0m" % orc
|
54
|
+
end
|
55
|
+
sh 'ln -s %s %s' % [orc, hrc] unless File.exist?(hrc)
|
56
|
+
end
|
data/lib/do/server.rb
CHANGED
data/lib/do/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: do
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Davide D'Agostino
|
@@ -91,6 +91,7 @@ extra_rdoc_files: []
|
|
91
91
|
|
92
92
|
files:
|
93
93
|
- .gitignore
|
94
|
+
- CHANGES.md
|
94
95
|
- Gemfile
|
95
96
|
- README.md
|
96
97
|
- Rakefile
|
@@ -98,10 +99,10 @@ files:
|
|
98
99
|
- do.gemspec
|
99
100
|
- lib/do.rb
|
100
101
|
- lib/do/commands.rb
|
102
|
+
- lib/do/common.rb
|
101
103
|
- lib/do/server.rb
|
102
104
|
- lib/do/utils.rb
|
103
105
|
- lib/do/version.rb
|
104
|
-
- recipes/.servorc
|
105
106
|
- spec/fixtures/sample
|
106
107
|
- spec/server_spec.rb
|
107
108
|
- spec/spec_helper.rb
|
@@ -109,7 +110,10 @@ has_rdoc: true
|
|
109
110
|
homepage: https://github.com/daddye/do
|
110
111
|
licenses: []
|
111
112
|
|
112
|
-
post_install_message:
|
113
|
+
post_install_message: "\e[32m************************************************************\n\
|
114
|
+
* DO - IT! $ doit setup *\n\
|
115
|
+
************************************************************\n\
|
116
|
+
\e[0m"
|
113
117
|
rdoc_options: []
|
114
118
|
|
115
119
|
require_paths:
|
data/recipes/.servorc
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
keys = %w(/Developer/src/LipsiaSoft/lipsiahosting/lib/lipsiarec/recipes/servers/resources/keys/Lipsiasoft.pem)
|
2
|
-
server :srv1, 'srv1.lipsiasoft.biz', 'root', :keys => keys
|
3
|
-
server :srv2, 'srv2.lipsiasoft.biz', 'root', :keys => keys
|
4
|
-
|
5
|
-
plugin "configure-server", "https://raw.github.com/gist/112..."
|
6
|
-
|
7
|
-
namespace :status do
|
8
|
-
|
9
|
-
desc "Show processes"
|
10
|
-
task :ps do
|
11
|
-
run "ps aux --sort -rss"
|
12
|
-
wait
|
13
|
-
end
|
14
|
-
end
|