shelly 0.3.1 → 0.3.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.
- checksums.yaml +8 -8
- data/CHANGELOG.md +4 -0
- data/lib/shelly/app.rb +16 -27
- data/lib/shelly/cli/backup.rb +1 -1
- data/lib/shelly/cli/database.rb +2 -0
- data/lib/shelly/cli/file.rb +4 -4
- data/lib/shelly/client/apps.rb +0 -4
- data/lib/shelly/version.rb +1 -1
- data/spec/shelly/app_spec.rb +3 -4
- data/spec/shelly/cli/backup_spec.rb +7 -4
- data/spec/shelly/cli/file_spec.rb +24 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWM1NDEyYjYzZTUyNGQ0NDVhMzg0NjdmM2QzNWM4MGQ3NTA0NDJmYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjllMDk5Nzk2NjY5OWM4OTUxMTZiZmMzMDdlZWMxZDU3OGM4YzRiNw==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDEzZTBmOTQ5YzA1NWY1YTEyNzQ3Njc5ZDAyOGEyNDZjMDJmM2YyZTZkOWQw
|
10
|
+
MGUxZmY5ODY4Y2NlZTNjZjgxYzQxMmNkNDMzMWE3NDdmNzhjMjM3ODFkYmVl
|
11
|
+
N2U2OGRiMTRkMTk2NmFkOGFiZWJiMWE1ZTJkMmRiNWI4MjFlY2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDk3OTg5NjVlYmVhYWI4NTVhY2U1MjUwZWZjYjUyMjFjZDc1YzgzYTA5YzM5
|
14
|
+
NWM3YmRhYzIxMWE1NDVlNTFkNzAzOTkxNTM5NjYyZWZlMDNiMDdjMzZlYjg2
|
15
|
+
OGIwZGIwMDdlOWU4ZjA1NTE0ODgzY2E0Y2RjMTI4NGQyYTU1OTc=
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.3.2 / 2013-06-28
|
2
|
+
|
3
|
+
* [improvement] API changes to handle user virtual server interactions
|
4
|
+
|
1
5
|
## 0.3.1 / 2013-06-28
|
2
6
|
|
3
7
|
* [feature] `shelly database reset` reset PostgreSQL or MongoDB database, also possible to use with `shelly backup import DB_KIND dump --reset` option
|
data/lib/shelly/app.rb
CHANGED
@@ -129,12 +129,12 @@ module Shelly
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def import_database(kind, filename, server)
|
132
|
-
|
133
|
-
:server => server
|
132
|
+
ssh_with_db_server(:command => "import_database #{kind.downcase} #{filename}",
|
133
|
+
:server => server)
|
134
134
|
end
|
135
135
|
|
136
136
|
def reset_database(kind)
|
137
|
-
|
137
|
+
ssh_with_db_server(:command => "reset_database #{kind.downcase}")
|
138
138
|
end
|
139
139
|
|
140
140
|
def request_backup(kinds)
|
@@ -201,7 +201,7 @@ module Shelly
|
|
201
201
|
end
|
202
202
|
|
203
203
|
def dbconsole
|
204
|
-
|
204
|
+
ssh_with_db_server(:command => "dbconsole")
|
205
205
|
end
|
206
206
|
|
207
207
|
def attributes
|
@@ -257,23 +257,23 @@ module Shelly
|
|
257
257
|
end
|
258
258
|
|
259
259
|
def list_files(path)
|
260
|
-
ssh(:command => "ls -l #{persistent_disk}/#{path}"
|
260
|
+
ssh(:command => "ls -l #{persistent_disk}/#{path}")
|
261
261
|
end
|
262
262
|
|
263
263
|
def upload(source)
|
264
|
-
|
264
|
+
console_connection.tap do |conn|
|
265
265
|
rsync(source, "#{conn['host']}:#{persistent_disk}", conn)
|
266
266
|
end
|
267
267
|
end
|
268
268
|
|
269
269
|
def upload_database(source)
|
270
|
-
|
270
|
+
configured_db_server_connection.tap do |conn|
|
271
271
|
rsync(source, "#{conn['host']}:#{persistent_disk}", conn)
|
272
272
|
end
|
273
273
|
end
|
274
274
|
|
275
275
|
def download(relative_source, destination)
|
276
|
-
|
276
|
+
console_connection.tap do |conn|
|
277
277
|
source = File.join("#{conn['host']}:#{persistent_disk}", relative_source)
|
278
278
|
rsync(source, destination, conn)
|
279
279
|
end
|
@@ -365,34 +365,23 @@ module Shelly
|
|
365
365
|
content["servers"].any? {|_, settings| settings.has_key?(option)}
|
366
366
|
end
|
367
367
|
|
368
|
+
# Returns first at least configured virtual server
|
368
369
|
def console_connection(server = nil)
|
369
370
|
shelly.console(code_name, server)
|
370
371
|
end
|
371
372
|
|
372
|
-
# Returns first configured virtual server
|
373
|
-
def
|
374
|
-
shelly.configured_server(code_name)
|
375
|
-
end
|
376
|
-
|
377
|
-
# Returns first configured virtual server with database
|
378
|
-
def db_server_connection(server = nil)
|
373
|
+
# Returns first at least configured virtual server if databases are configured
|
374
|
+
def configured_db_server_connection(server = nil)
|
379
375
|
shelly.configured_db_server(code_name, server)
|
380
376
|
end
|
381
377
|
|
382
|
-
def
|
383
|
-
|
384
|
-
|
385
|
-
console_connection(options[:server])
|
386
|
-
when :server
|
387
|
-
server_connection
|
388
|
-
when :db_server
|
389
|
-
db_server_connection(options[:server])
|
390
|
-
end
|
378
|
+
def ssh(options = {})
|
379
|
+
conn = console_connection(options[:server])
|
380
|
+
system "ssh #{ssh_options(conn)} -t #{conn['host']} #{options[:command]}"
|
391
381
|
end
|
392
382
|
|
393
|
-
def
|
394
|
-
|
395
|
-
conn = connection(options)
|
383
|
+
def ssh_with_db_server(options = {})
|
384
|
+
conn = configured_db_server_connection(options[:server])
|
396
385
|
system "ssh #{ssh_options(conn)} -t #{conn['host']} #{options[:command]}"
|
397
386
|
end
|
398
387
|
|
data/lib/shelly/cli/backup.rb
CHANGED
@@ -132,7 +132,7 @@ module Shelly
|
|
132
132
|
app.import_database(kind, archive, connection["server"])
|
133
133
|
say "Database imported successfully", :green
|
134
134
|
rescue Client::ConflictException => e
|
135
|
-
say_error
|
135
|
+
say_error "Cloud #{app} wasn't deployed properly. Cannot import database."
|
136
136
|
end
|
137
137
|
|
138
138
|
no_tasks do
|
data/lib/shelly/cli/database.rb
CHANGED
data/lib/shelly/cli/file.rb
CHANGED
@@ -15,7 +15,7 @@ module Shelly
|
|
15
15
|
app = multiple_clouds(options[:cloud], "file list #{path}")
|
16
16
|
app.list_files(path)
|
17
17
|
rescue Client::ConflictException
|
18
|
-
say_error "Cloud #{app}
|
18
|
+
say_error "Cloud #{app} wasn't deployed properly. Cannot list files."
|
19
19
|
end
|
20
20
|
|
21
21
|
desc "upload PATH", "Upload files to persistent data storage"
|
@@ -23,7 +23,7 @@ module Shelly
|
|
23
23
|
app = multiple_clouds(options[:cloud], "file upload #{path}")
|
24
24
|
app.upload(path)
|
25
25
|
rescue Client::ConflictException
|
26
|
-
say_error "Cloud #{app}
|
26
|
+
say_error "Cloud #{app} wasn't deployed properly. Cannot upload files."
|
27
27
|
end
|
28
28
|
|
29
29
|
desc "download [SOURCE_PATH] [DEST_PATH]", "Download files from persistent data storage"
|
@@ -36,7 +36,7 @@ module Shelly
|
|
36
36
|
app = multiple_clouds(options[:cloud], "file download #{relative_source} #{destination}")
|
37
37
|
app.download(relative_source, destination)
|
38
38
|
rescue Client::ConflictException
|
39
|
-
say_error "Cloud #{app}
|
39
|
+
say_error "Cloud #{app} wasn't deployed properly. Cannot download files."
|
40
40
|
end
|
41
41
|
|
42
42
|
method_option :force, :type => :boolean, :aliases => "-f",
|
@@ -52,7 +52,7 @@ module Shelly
|
|
52
52
|
|
53
53
|
app.delete_file(path)
|
54
54
|
rescue Client::ConflictException
|
55
|
-
say_error "Cloud #{app}
|
55
|
+
say_error "Cloud #{app} wasn't deployed properly. Cannot delete files."
|
56
56
|
end
|
57
57
|
|
58
58
|
no_tasks do
|
data/lib/shelly/client/apps.rb
CHANGED
@@ -38,10 +38,6 @@ class Shelly::Client
|
|
38
38
|
get("/apps/#{code_name}/console", {:server => server})
|
39
39
|
end
|
40
40
|
|
41
|
-
def configured_server(code_name)
|
42
|
-
get("/apps/#{code_name}/configured_server")
|
43
|
-
end
|
44
|
-
|
45
41
|
def configured_db_server(code_name, server = nil)
|
46
42
|
get("/apps/#{code_name}/configured_db_server", {:server => server})
|
47
43
|
end
|
data/lib/shelly/version.rb
CHANGED
data/spec/shelly/app_spec.rb
CHANGED
@@ -348,15 +348,14 @@ describe Shelly::App do
|
|
348
348
|
|
349
349
|
describe "#list_files" do
|
350
350
|
it "should list files for given subpath in disk" do
|
351
|
-
@app.should_receive(:ssh).with(:command => "ls -l /home/foo-staging/disk/foo"
|
352
|
-
:type => :server)
|
351
|
+
@app.should_receive(:ssh).with(:command => "ls -l /home/foo-staging/disk/foo")
|
353
352
|
@app.list_files("foo")
|
354
353
|
end
|
355
354
|
end
|
356
355
|
|
357
356
|
describe "#upload" do
|
358
357
|
it "should run rsync with proper parameters" do
|
359
|
-
@client.stub(:
|
358
|
+
@client.stub(:console).and_return(
|
360
359
|
{"host" => "console.example.com", "port" => "40010", "user" => "foo"})
|
361
360
|
@app.should_receive(:system).with("rsync -avz -e 'ssh -o StrictHostKeyChecking=no -p 40010 -l foo' --progress /path console.example.com:/home/foo-staging/disk")
|
362
361
|
@app.upload("/path")
|
@@ -365,7 +364,7 @@ describe Shelly::App do
|
|
365
364
|
|
366
365
|
describe "#download" do
|
367
366
|
it "should run rsync with proper parameters" do
|
368
|
-
@client.stub(:
|
367
|
+
@client.stub(:console).and_return(
|
369
368
|
{"host" => "console.example.com", "port" => "40010", "user" => "foo"})
|
370
369
|
@app.should_receive(:system).with("rsync -avz -e 'ssh -o StrictHostKeyChecking=no -p 40010 -l foo' --progress console.example.com:/home/foo-staging/disk/. /tmp")
|
371
370
|
@app.download(".", "/tmp")
|
@@ -265,6 +265,7 @@ describe Shelly::CLI::Backup do
|
|
265
265
|
before do
|
266
266
|
FileUtils.touch("dump.sql")
|
267
267
|
@app.stub(:upload_database => {"server" => "app1"}, :ssh => nil)
|
268
|
+
@app.stub(:import_database)
|
268
269
|
@backup.stub(:system)
|
269
270
|
$stdout.stub(:puts)
|
270
271
|
$stdout.stub(:print)
|
@@ -292,8 +293,9 @@ describe Shelly::CLI::Backup do
|
|
292
293
|
end
|
293
294
|
|
294
295
|
it "should import given database from uploaded file" do
|
295
|
-
@app.
|
296
|
-
|
296
|
+
@app.unstub(:import_database)
|
297
|
+
@app.should_receive(:ssh_with_db_server).with(:command => "import_database postgresql dump.sql-1370879705.tar.bz2",
|
298
|
+
:server => "app1")
|
297
299
|
$stdout.should_receive(:puts).with(green "Importing database")
|
298
300
|
fake_stdin(["yes"]) do
|
299
301
|
invoke(@backup, :import, "PostgreSQL", "dump.sql")
|
@@ -327,10 +329,11 @@ describe Shelly::CLI::Backup do
|
|
327
329
|
|
328
330
|
context "with --reset option" do
|
329
331
|
it "should reset database first" do
|
332
|
+
@app.unstub(:import_database)
|
330
333
|
@backup.options = {:cloud => "foo-staging", :reset => true}
|
331
334
|
@app.should_receive(:reset_database).with("postgresql")
|
332
|
-
@app.should_receive(:
|
333
|
-
:server => "app1"
|
335
|
+
@app.should_receive(:ssh_with_db_server).with(:command => "import_database postgresql dump.sql-1370879705.tar.bz2",
|
336
|
+
:server => "app1")
|
334
337
|
$stdout.should_receive(:puts).with(green "Importing database")
|
335
338
|
fake_stdin(["yes"]) do
|
336
339
|
invoke(@backup, :import, "postgresql", "dump.sql")
|
@@ -28,8 +28,8 @@ describe Shelly::CLI::File do
|
|
28
28
|
|
29
29
|
context "cloud is not running" do
|
30
30
|
it "should display error" do
|
31
|
-
@client.stub(:
|
32
|
-
$stdout.should_receive(:puts).with(red "Cloud foo-production
|
31
|
+
@client.stub(:console).and_raise(Shelly::Client::ConflictException)
|
32
|
+
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot list files.")
|
33
33
|
lambda {
|
34
34
|
invoke(@cli_files, :list, "some/path")
|
35
35
|
}.should raise_error(SystemExit)
|
@@ -59,8 +59,8 @@ describe Shelly::CLI::File do
|
|
59
59
|
|
60
60
|
context "cloud is not running" do
|
61
61
|
it "should display error" do
|
62
|
-
@client.stub(:
|
63
|
-
$stdout.should_receive(:puts).with(red "Cloud foo-production
|
62
|
+
@client.stub(:console).and_raise(Shelly::Client::ConflictException)
|
63
|
+
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot upload files.")
|
64
64
|
lambda {
|
65
65
|
invoke(@cli_files, :upload, "some/path")
|
66
66
|
}.should raise_error(SystemExit)
|
@@ -85,6 +85,16 @@ describe Shelly::CLI::File do
|
|
85
85
|
@app.should_receive(:download).with("some/path", "/destination")
|
86
86
|
invoke(@cli_files, :download, "some/path", "/destination")
|
87
87
|
end
|
88
|
+
|
89
|
+
context "cloud is not running" do
|
90
|
+
it "should display error" do
|
91
|
+
@client.stub(:console).and_raise(Shelly::Client::ConflictException)
|
92
|
+
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot download files.")
|
93
|
+
lambda {
|
94
|
+
invoke(@cli_files, :download, "some/path")
|
95
|
+
}.should raise_error(SystemExit)
|
96
|
+
end
|
97
|
+
end
|
88
98
|
end
|
89
99
|
|
90
100
|
describe "#delete" do
|
@@ -130,5 +140,15 @@ describe Shelly::CLI::File do
|
|
130
140
|
}.should raise_error(SystemExit)
|
131
141
|
end
|
132
142
|
end
|
143
|
+
|
144
|
+
context "cloud is not running" do
|
145
|
+
it "should display error" do
|
146
|
+
@app.stub(:delete_file).and_raise(Shelly::Client::ConflictException)
|
147
|
+
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot delete files.")
|
148
|
+
lambda {
|
149
|
+
fake_stdin(["yes"]) { invoke(@cli_files, :delete, "some/path") }
|
150
|
+
}.should raise_error(SystemExit)
|
151
|
+
end
|
152
|
+
end
|
133
153
|
end
|
134
154
|
end
|