tugboat 1.3.1 → 2.0.0.RC1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +12 -8
- data/lib/tugboat/cli.rb +8 -7
- data/lib/tugboat/config.rb +8 -12
- data/lib/tugboat/middleware/add_key.rb +9 -6
- data/lib/tugboat/middleware/ask_for_credentials.rb +7 -8
- data/lib/tugboat/middleware/check_configuration.rb +1 -1
- data/lib/tugboat/middleware/check_credentials.rb +4 -2
- data/lib/tugboat/middleware/config.rb +3 -4
- data/lib/tugboat/middleware/create_droplet.rb +32 -26
- data/lib/tugboat/middleware/destroy_droplet.rb +6 -6
- data/lib/tugboat/middleware/destroy_image.rb +6 -6
- data/lib/tugboat/middleware/find_droplet.rb +20 -16
- data/lib/tugboat/middleware/find_image.rb +17 -10
- data/lib/tugboat/middleware/halt_droplet.rb +8 -8
- data/lib/tugboat/middleware/info_droplet.rb +38 -25
- data/lib/tugboat/middleware/info_image.rb +5 -5
- data/lib/tugboat/middleware/inject_client.rb +3 -9
- data/lib/tugboat/middleware/list_droplets.rb +6 -4
- data/lib/tugboat/middleware/list_images.rb +28 -23
- data/lib/tugboat/middleware/list_regions.rb +3 -3
- data/lib/tugboat/middleware/list_sizes.rb +3 -3
- data/lib/tugboat/middleware/list_ssh_keys.rb +5 -4
- data/lib/tugboat/middleware/password_reset.rb +7 -7
- data/lib/tugboat/middleware/rebuild_droplet.rb +8 -8
- data/lib/tugboat/middleware/resize_droplet.rb +7 -7
- data/lib/tugboat/middleware/restart_droplet.rb +8 -8
- data/lib/tugboat/middleware/snapshot_droplet.rb +6 -6
- data/lib/tugboat/middleware/ssh_droplet.rb +3 -1
- data/lib/tugboat/middleware/start_droplet.rb +6 -6
- data/lib/tugboat/middleware/wait_for_state.rb +6 -6
- data/lib/tugboat/version.rb +1 -1
- data/spec/cli/add_key_spec.rb +16 -9
- data/spec/cli/authorize_cli_spec.rb +24 -29
- data/spec/cli/config_cli_spec.rb +57 -0
- data/spec/cli/create_cli_spec.rb +18 -28
- data/spec/cli/debug_cli_spec.rb +8 -14
- data/spec/cli/destroy_cli_spec.rb +39 -50
- data/spec/cli/destroy_image_cli_spec.rb +33 -39
- data/spec/cli/droplets_cli_spec.rb +15 -12
- data/spec/cli/halt_cli_spec.rb +50 -46
- data/spec/cli/images_cli_spec.rb +134 -58
- data/spec/cli/info_cli_spec.rb +139 -139
- data/spec/cli/info_image_cli_spec.rb +113 -26
- data/spec/cli/keys_cli_spec.rb +7 -5
- data/spec/cli/password_reset_cli_spec.rb +46 -44
- data/spec/cli/rebuild_cli_spec.rb +187 -101
- data/spec/cli/regions_cli_spec.rb +13 -6
- data/spec/cli/resize_cli_spec.rb +51 -48
- data/spec/cli/restart_cli_spec.rb +41 -39
- data/spec/cli/sizes_cli_spec.rb +13 -8
- data/spec/cli/snapshot_cli_spec.rb +36 -37
- data/spec/cli/ssh_cli_spec.rb +7 -15
- data/spec/cli/start_cli_spec.rb +39 -35
- data/spec/cli/verify_cli_spec.rb +20 -12
- data/spec/cli/wait_cli_spec.rb +43 -27
- data/spec/config_spec.rb +19 -25
- data/spec/fixtures/create_droplet.json +44 -0
- data/spec/fixtures/create_ssh_key.json +4 -4
- data/spec/fixtures/create_ssh_key_from_file.json +8 -0
- data/spec/fixtures/droplet_start_response.json +13 -0
- data/spec/fixtures/not_found.json +4 -0
- data/spec/fixtures/password_reset_response.json +13 -0
- data/spec/fixtures/power_cycle_response.json +13 -0
- data/spec/fixtures/resize_droplet.json +13 -0
- data/spec/fixtures/restart_response.json +13 -0
- data/spec/fixtures/show_coreos_image.json +23 -0
- data/spec/fixtures/show_droplet.json +90 -11
- data/spec/fixtures/show_droplet_inactive.json +90 -11
- data/spec/fixtures/show_droplets.json +249 -30
- data/spec/fixtures/show_droplets_empty.json +5 -2
- data/spec/fixtures/show_image.json +14 -7
- data/spec/fixtures/show_images.json +1075 -13
- data/spec/fixtures/show_images_global.json +25 -16
- data/spec/fixtures/show_keys.json +15 -7
- data/spec/fixtures/show_redmine_image.json +24 -0
- data/spec/fixtures/show_regions.json +181 -12
- data/spec/fixtures/show_sizes.json +178 -9
- data/spec/fixtures/shutdown_response.json +13 -0
- data/spec/fixtures/snapshot_response.json +13 -0
- data/spec/fixtures/ubuntu_image_9801951.json +24 -0
- data/spec/middleware/check_credentials_spec.rb +4 -3
- data/spec/middleware/inject_client_spec.rb +2 -2
- data/spec/shared/environment.rb +6 -7
- data/spec/spec_helper.rb +1 -1
- data/tugboat.gemspec +39 -19
- metadata +50 -14
- data/spec/fixtures/show_droplet_fuzzy.json +0 -13
- data/spec/fixtures/show_droplets_fuzzy.json +0 -35
- data/spec/fixtures/show_droplets_inactive.json +0 -37
@@ -5,19 +5,26 @@ describe Tugboat::CLI do
|
|
5
5
|
|
6
6
|
describe "regions" do
|
7
7
|
it "shows a list" do
|
8
|
-
stub_request(:get, "https://api.digitalocean.com/regions?
|
9
|
-
|
8
|
+
stub_request(:get, "https://api.digitalocean.com/v2/regions?per_page=200").
|
9
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
10
|
+
to_return(:status => 200, :body => fixture("show_regions"), :headers => {'Content-Type' => 'application/json'},)
|
10
11
|
|
11
12
|
@cli.regions
|
12
13
|
|
13
14
|
expect($stdout.string).to eq <<-eos
|
14
15
|
Regions:
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
Amsterdam 1 (slug: ams1)
|
17
|
+
Amsterdam 2 (slug: ams2)
|
18
|
+
Amsterdam 3 (slug: ams3)
|
19
|
+
London 1 (slug: lon1)
|
20
|
+
New York 1 (slug: nyc1)
|
21
|
+
New York 2 (slug: nyc2)
|
22
|
+
New York 3 (slug: nyc3)
|
23
|
+
San Francisco 1 (slug: sfo1)
|
24
|
+
Singapore 1 (slug: sgp1)
|
18
25
|
eos
|
19
26
|
|
20
|
-
expect(a_request(:get, "https://api.digitalocean.com/regions?
|
27
|
+
expect(a_request(:get, "https://api.digitalocean.com/v2/regions?per_page=200")).
|
21
28
|
to have_been_made
|
22
29
|
end
|
23
30
|
end
|
data/spec/cli/resize_cli_spec.rb
CHANGED
@@ -5,78 +5,81 @@ describe Tugboat::CLI do
|
|
5
5
|
|
6
6
|
describe "resize" do
|
7
7
|
it "resizes a droplet with a fuzzy name" do
|
8
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
9
|
-
|
10
|
-
|
11
|
-
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK","event_id":456}')
|
8
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
9
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
10
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
12
11
|
|
13
|
-
|
14
|
-
|
12
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
13
|
+
with(:body => "{\"type\":\"resize\",\"size\":\"1gb\"}",
|
14
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
15
|
+
to_return(:status => 200, :body => fixture('resize_droplet'), :headers => {})
|
16
|
+
|
17
|
+
@cli.options = @cli.options.merge(:size => '1gb')
|
18
|
+
@cli.resize("example.com")
|
15
19
|
|
16
20
|
expect($stdout.string).to eq <<-eos
|
17
|
-
Droplet fuzzy name provided. Finding droplet ID...done\e[0m,
|
18
|
-
Queuing resize for
|
21
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
22
|
+
Queuing resize for 6918990 (example.com)...Resize complete!
|
19
23
|
eos
|
20
|
-
|
21
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).
|
22
|
-
to have_been_made
|
23
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823/resize?api_key=#{api_key}&client_id=#{client_key}&size_id=123")).
|
24
|
-
to have_been_made
|
25
24
|
end
|
26
25
|
|
27
26
|
it "resizes a droplet with an id" do
|
28
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
28
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
29
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
30
|
+
|
31
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
32
|
+
with(:body => "{\"type\":\"resize\",\"size\":\"1gb\"}",
|
33
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
34
|
+
to_return(:status => 200, :body => fixture('resize_droplet'), :headers => {})
|
32
35
|
|
33
|
-
@cli.options = @cli.options.merge(:size =>
|
36
|
+
@cli.options = @cli.options.merge(:size => '1gb', :id => 6918990)
|
34
37
|
@cli.resize
|
35
38
|
|
36
39
|
expect($stdout.string).to eq <<-eos
|
37
|
-
Droplet id provided. Finding Droplet...done\e[0m,
|
38
|
-
Queuing resize for
|
40
|
+
Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)
|
41
|
+
Queuing resize for 6918990 (example.com)...Resize complete!
|
39
42
|
eos
|
40
|
-
|
41
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).
|
42
|
-
to have_been_made
|
43
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823/resize?api_key=#{api_key}&client_id=#{client_key}&size_id=123")).
|
44
|
-
to have_been_made
|
45
43
|
end
|
46
44
|
|
47
45
|
it "resizes a droplet with a name" do
|
48
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
49
|
-
|
50
|
-
|
51
|
-
|
46
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
47
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
48
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
49
|
+
|
50
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
51
|
+
with(:body => "{\"type\":\"resize\",\"size\":\"1gb\"}",
|
52
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
53
|
+
to_return(:status => 200, :body => fixture('resize_droplet'), :headers => {})
|
52
54
|
|
53
|
-
@cli.options = @cli.options.merge(:size =>
|
55
|
+
@cli.options = @cli.options.merge(:size => '1gb', :name => "example.com")
|
54
56
|
@cli.resize
|
55
57
|
|
56
58
|
expect($stdout.string).to eq <<-eos
|
57
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
58
|
-
Queuing resize for
|
59
|
+
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
60
|
+
Queuing resize for 6918990 (example.com)...Resize complete!
|
59
61
|
eos
|
60
62
|
|
61
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).
|
62
|
-
to have_been_made
|
63
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823/resize?api_key=#{api_key}&client_id=#{client_key}&size_id=123")).
|
64
|
-
to have_been_made
|
65
63
|
end
|
66
64
|
|
67
65
|
it "raises SystemExit when a request fails" do
|
68
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
expect(
|
79
|
-
|
66
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
67
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
68
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
69
|
+
|
70
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
71
|
+
with(:body => "{\"type\":\"resize\",\"size\":\"1gb\"}",
|
72
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
73
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 500, :body => '{"status":"ERROR","message":"Some error"}')
|
74
|
+
|
75
|
+
@cli.options = @cli.options.merge(:size => '1gb')
|
76
|
+
expect { @cli.resize("example.com") }.to raise_error(SystemExit)
|
77
|
+
|
78
|
+
expect($stdout.string).to eq <<-eos
|
79
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
80
|
+
Queuing resize for 6918990 (example.com)...Failed to resize Droplet: Some error
|
81
|
+
eos
|
82
|
+
|
80
83
|
end
|
81
84
|
end
|
82
85
|
end
|
@@ -5,78 +5,80 @@ describe Tugboat::CLI do
|
|
5
5
|
|
6
6
|
describe "restarts a droplet" do
|
7
7
|
it "with a fuzzy name" do
|
8
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
9
|
-
|
8
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
9
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
10
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
10
11
|
|
11
|
-
stub_request(:
|
12
|
-
|
12
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
13
|
+
with(:body => "{\"type\":\"reboot\"}",
|
14
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
15
|
+
to_return(:status => 200, :body => fixture('restart_response'), :headers => {})
|
13
16
|
|
14
|
-
@cli.restart("
|
17
|
+
@cli.restart("example.com")
|
15
18
|
|
16
19
|
expect($stdout.string).to eq <<-eos
|
17
|
-
Droplet fuzzy name provided. Finding droplet ID...done\e[0m,
|
18
|
-
Queuing restart for
|
20
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
21
|
+
Queuing restart for 6918990 (example.com)...Restart complete!
|
19
22
|
eos
|
20
23
|
|
21
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
22
|
-
expect(a_request(:put, "https://api.digitalocean.com/droplets/100823/reboot?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
23
24
|
end
|
24
25
|
|
25
26
|
it "restarts a droplet hard when the hard option is used" do
|
26
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
28
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
29
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
30
|
+
|
31
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
32
|
+
with(:body => "{\"type\":\"power_cycle\"}",
|
33
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
34
|
+
to_return(:status => 200, :body => "", :headers => {})
|
30
35
|
|
31
36
|
@cli.options = @cli.options.merge(:hard => true)
|
32
|
-
@cli.restart("
|
37
|
+
@cli.restart("example.com")
|
33
38
|
|
34
39
|
expect($stdout.string).to eq <<-eos
|
35
|
-
Droplet fuzzy name provided. Finding droplet ID...done\e[0m,
|
36
|
-
Queuing hard restart for
|
40
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
41
|
+
Queuing hard restart for 6918990 (example.com)...Restart complete!
|
37
42
|
eos
|
38
|
-
|
39
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
40
|
-
expect(a_request(:put, "https://api.digitalocean.com/droplets/100823/power_cycle?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
41
43
|
end
|
42
44
|
|
43
45
|
it "with an id" do
|
44
|
-
stub_request(:get, "https://api.digitalocean.com/droplets
|
45
|
-
|
46
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
47
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
48
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
46
49
|
|
47
|
-
stub_request(:
|
48
|
-
|
50
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
51
|
+
with(:body => "{\"type\":\"reboot\"}",
|
52
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
53
|
+
to_return(:status => 200, :body => fixture('restart_response'), :headers => {})
|
49
54
|
|
50
|
-
@cli.options = @cli.options.merge(:id =>
|
55
|
+
@cli.options = @cli.options.merge(:id => '6918990')
|
51
56
|
@cli.restart
|
52
57
|
|
53
58
|
expect($stdout.string).to eq <<-eos
|
54
|
-
Droplet id provided. Finding Droplet...done\e[0m,
|
55
|
-
Queuing restart for
|
59
|
+
Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)
|
60
|
+
Queuing restart for 6918990 (example.com)...Restart complete!
|
56
61
|
eos
|
57
|
-
|
58
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
59
|
-
expect(a_request(:put, "https://api.digitalocean.com/droplets/100823/reboot?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
60
62
|
end
|
61
63
|
|
62
64
|
|
63
65
|
it "with a name" do
|
64
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
65
|
-
|
66
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
67
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
68
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
66
69
|
|
67
|
-
stub_request(:
|
68
|
-
|
70
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/6918990/actions").
|
71
|
+
with(:body => "{\"type\":\"reboot\"}",
|
72
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
73
|
+
to_return(:status => 200, :body => fixture('restart_response'), :headers => {})
|
69
74
|
|
70
|
-
@cli.options = @cli.options.merge(:name =>
|
75
|
+
@cli.options = @cli.options.merge(:name => 'example.com')
|
71
76
|
@cli.restart
|
72
77
|
|
73
78
|
expect($stdout.string).to eq <<-eos
|
74
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
75
|
-
Queuing restart for
|
79
|
+
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
80
|
+
Queuing restart for 6918990 (example.com)...Restart complete!
|
76
81
|
eos
|
77
|
-
|
78
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
79
|
-
expect(a_request(:put, "https://api.digitalocean.com/droplets/100823/reboot?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
80
82
|
end
|
81
83
|
|
82
84
|
end
|
data/spec/cli/sizes_cli_spec.rb
CHANGED
@@ -5,20 +5,25 @@ describe Tugboat::CLI do
|
|
5
5
|
|
6
6
|
describe "sizes" do
|
7
7
|
it "shows a list" do
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
stub_request(:get, "https://api.digitalocean.com/v2/sizes?per_page=200").
|
10
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
11
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_sizes"))
|
10
12
|
|
11
13
|
@cli.sizes
|
12
14
|
|
13
15
|
expect($stdout.string).to eq <<-eos
|
14
16
|
Sizes:
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
Disk: 20GB, Memory: 512MB (slug: 512mb)
|
18
|
+
Disk: 30GB, Memory: 1024MB (slug: 1gb)
|
19
|
+
Disk: 40GB, Memory: 2048MB (slug: 2gb)
|
20
|
+
Disk: 60GB, Memory: 4096MB (slug: 4gb)
|
21
|
+
Disk: 80GB, Memory: 8192MB (slug: 8gb)
|
22
|
+
Disk: 160GB, Memory: 16384MB (slug: 16gb)
|
23
|
+
Disk: 320GB, Memory: 32768MB (slug: 32gb)
|
24
|
+
Disk: 480GB, Memory: 49152MB (slug: 48gb)
|
25
|
+
Disk: 640GB, Memory: 65536MB (slug: 64gb)
|
18
26
|
eos
|
19
|
-
|
20
|
-
expect(a_request(:get, "https://api.digitalocean.com/sizes?api_key=#{api_key}&client_id=#{client_key}")).
|
21
|
-
to have_been_made
|
22
27
|
end
|
23
28
|
end
|
24
29
|
end
|
@@ -7,78 +7,77 @@ describe Tugboat::CLI do
|
|
7
7
|
|
8
8
|
describe "snapshots a droplet" do
|
9
9
|
it "with a fuzzy name" do
|
10
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
11
|
-
|
10
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
11
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
12
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
12
13
|
|
13
|
-
stub_request(:
|
14
|
-
|
14
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/3164444/actions").
|
15
|
+
with(:body => "{\"type\":\"snapshot\",\"name\":\"foo-snapshot\"}",
|
16
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
17
|
+
to_return(:status => 200, :body => fixture('snapshot_response'), :headers => {})
|
15
18
|
|
16
|
-
@cli.snapshot(snapshot_name,
|
19
|
+
@cli.snapshot(snapshot_name, 'example3.com')
|
17
20
|
|
18
21
|
expect($stdout.string).to eq <<-eos
|
19
|
-
Droplet fuzzy name provided. Finding droplet ID...done\e[0m,
|
22
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
20
23
|
Warning: Droplet must be in a powered off state for snapshot to be successful
|
21
|
-
Queuing snapshot 'foo-snapshot' for
|
24
|
+
Queuing snapshot 'foo-snapshot' for 3164444 (example3.com)...Snapshot successful!
|
22
25
|
eos
|
23
|
-
|
24
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
25
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823/snapshot?api_key=#{api_key}&client_id=#{client_key}&name=#{snapshot_name}")).to have_been_made
|
26
26
|
end
|
27
27
|
|
28
28
|
it "with an id" do
|
29
|
-
stub_request(:get, "https://api.digitalocean.com/droplets
|
30
|
-
|
29
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/3164444?per_page=200").
|
30
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
31
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet_inactive"))
|
31
32
|
|
32
|
-
stub_request(:
|
33
|
-
|
33
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/3164494/actions").
|
34
|
+
with(:body => "{\"type\":\"snapshot\",\"name\":\"foo-snapshot\"}",
|
35
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
36
|
+
to_return(:status => 200, :body => fixture('snapshot_response'), :headers => {})
|
34
37
|
|
35
|
-
@cli.options = @cli.options.merge(:id =>
|
38
|
+
@cli.options = @cli.options.merge(:id => '3164444')
|
36
39
|
@cli.snapshot(snapshot_name)
|
37
40
|
|
38
41
|
expect($stdout.string).to eq <<-eos
|
39
|
-
Droplet id provided. Finding Droplet...done\e[0m,
|
42
|
+
Droplet id provided. Finding Droplet...done\e[0m, 3164494 (example.com)
|
40
43
|
Warning: Droplet must be in a powered off state for snapshot to be successful
|
41
|
-
Queuing snapshot 'foo-snapshot' for
|
44
|
+
Queuing snapshot 'foo-snapshot' for 3164494 (example.com)...Snapshot successful!
|
42
45
|
eos
|
43
|
-
|
44
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
45
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823/snapshot?api_key=#{api_key}&client_id=#{client_key}&name=#{snapshot_name}")).to have_been_made
|
46
46
|
end
|
47
47
|
|
48
48
|
|
49
49
|
it "with a name" do
|
50
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
51
|
-
|
50
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
51
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
52
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
52
53
|
|
53
|
-
stub_request(:
|
54
|
-
|
54
|
+
stub_request(:post, "https://api.digitalocean.com/v2/droplets/3164444/actions").
|
55
|
+
with(:body => "{\"type\":\"snapshot\",\"name\":\"foo-snapshot\"}",
|
56
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
57
|
+
to_return(:status => 200, :body => fixture('snapshot_response'), :headers => {})
|
55
58
|
|
56
|
-
@cli.options = @cli.options.merge(:name =>
|
59
|
+
@cli.options = @cli.options.merge(:name => 'example3.com')
|
57
60
|
@cli.snapshot(snapshot_name)
|
58
61
|
|
59
62
|
expect($stdout.string).to eq <<-eos
|
60
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
63
|
+
Droplet name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
61
64
|
Warning: Droplet must be in a powered off state for snapshot to be successful
|
62
|
-
Queuing snapshot 'foo-snapshot' for
|
65
|
+
Queuing snapshot 'foo-snapshot' for 3164444 (example3.com)...Snapshot successful!
|
63
66
|
eos
|
64
|
-
|
65
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
66
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823/snapshot?api_key=#{api_key}&client_id=#{client_key}&name=#{snapshot_name}")).to have_been_made
|
67
67
|
end
|
68
68
|
|
69
|
-
it "does not
|
70
|
-
|
71
|
-
|
69
|
+
it "does not snapshot a droplet that is active" do
|
70
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
71
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
72
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
72
73
|
|
73
|
-
@cli.options = @cli.options.merge(:name =>
|
74
|
+
@cli.options = @cli.options.merge(:name => 'example.com')
|
74
75
|
expect {@cli.snapshot(snapshot_name)}.to raise_error(SystemExit)
|
75
76
|
|
76
77
|
expect($stdout.string).to eq <<-eos
|
77
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
78
|
+
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
78
79
|
Droplet must be off for this operation to be successful.
|
79
80
|
eos
|
80
|
-
|
81
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
82
81
|
end
|
83
82
|
|
84
83
|
end
|
data/spec/cli/ssh_cli_spec.rb
CHANGED
@@ -5,32 +5,24 @@ describe Tugboat::CLI do
|
|
5
5
|
|
6
6
|
describe "ssh" do
|
7
7
|
it "tries to fetch the droplet's IP from the API" do
|
8
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
8
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
9
9
|
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
10
|
-
allow(Kernel).to receive(:exec)
|
11
|
-
|
12
|
-
@cli.ssh("test222")
|
10
|
+
allow(Kernel).to receive(:exec).with('ssh', anything(), anything(),anything(), anything(),anything(), anything(),anything(), anything(),anything(), anything(),anything(), anything(),anything())
|
13
11
|
|
14
|
-
|
15
|
-
to have_been_made
|
12
|
+
@cli.ssh("example.com")
|
16
13
|
end
|
17
14
|
|
18
15
|
it "does not allow ssh into a droplet that is inactive" do
|
19
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
20
|
-
|
21
|
-
|
16
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
17
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
22
18
|
allow(Kernel).to receive(:exec)
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
expect {@cli.ssh("test222")}.to raise_error(SystemExit)
|
20
|
+
expect {@cli.ssh("example3.com")}.to raise_error(SystemExit)
|
27
21
|
|
28
22
|
expect($stdout.string).to eq <<-eos
|
29
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
23
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
30
24
|
Droplet must be on for this operation to be successful.
|
31
25
|
eos
|
32
|
-
|
33
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
34
26
|
end
|
35
27
|
|
36
28
|
end
|