do_snapshot 0.6.4 → 1.0.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -2
  3. data/bin/do_snapshot +1 -0
  4. data/lib/do_snapshot.rb +1 -0
  5. data/lib/do_snapshot/adapter.rb +10 -7
  6. data/lib/do_snapshot/adapter/abstract.rb +2 -1
  7. data/lib/do_snapshot/adapter/{digitalocean_v2.rb → droplet_kit.rb} +50 -33
  8. data/lib/do_snapshot/cli.rb +1 -0
  9. data/lib/do_snapshot/command.rb +1 -0
  10. data/lib/do_snapshot/configuration.rb +1 -0
  11. data/lib/do_snapshot/core_ext/hash.rb +1 -0
  12. data/lib/do_snapshot/distribution.rb +1 -0
  13. data/lib/do_snapshot/gem_ext/resource_kit.rb +30 -0
  14. data/lib/do_snapshot/helpers.rb +1 -0
  15. data/lib/do_snapshot/log.rb +1 -0
  16. data/lib/do_snapshot/mail.rb +1 -0
  17. data/lib/do_snapshot/rspec.rb +12 -0
  18. data/lib/do_snapshot/rspec/adapter.rb +265 -0
  19. data/lib/do_snapshot/rspec/api_helpers.rb +45 -0
  20. data/lib/do_snapshot/rspec/api_v2_helpers.rb +157 -0
  21. data/lib/do_snapshot/rspec/environment.rb +120 -0
  22. data/lib/do_snapshot/rspec/uri_helpers.rb +17 -0
  23. data/lib/do_snapshot/runner.rb +1 -0
  24. data/lib/do_snapshot/version.rb +2 -1
  25. data/spec/do_snapshot/adapter/abstract_spec.rb +2 -1
  26. data/spec/do_snapshot/adapter/droplet_kit_spec.rb +9 -0
  27. data/spec/do_snapshot/adapter_spec.rb +3 -2
  28. data/spec/do_snapshot/cli_spec.rb +4 -3
  29. data/spec/do_snapshot/command_spec.rb +4 -3
  30. data/spec/do_snapshot/configuration_spec.rb +1 -0
  31. data/spec/do_snapshot/log_spec.rb +2 -1
  32. data/spec/do_snapshot/mail_spec.rb +2 -1
  33. data/spec/do_snapshot/runner_spec.rb +3 -2
  34. data/spec/do_snapshot_spec.rb +2 -1
  35. data/spec/spec_helper.rb +2 -4
  36. data/spec/support/aruba.rb +1 -0
  37. data/spec/support/matchers.rb +1 -0
  38. metadata +47 -20
  39. data/spec/do_snapshot/adapter/digitalocean_v2_spec.rb +0 -264
  40. data/spec/shared/api_helpers.rb +0 -41
  41. data/spec/shared/api_v2_helpers.rb +0 -153
  42. data/spec/shared/environment.rb +0 -116
  43. data/spec/shared/uri_helpers.rb +0 -13
@@ -1,8 +1,9 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe DoSnapshot::Log do
5
- include_context 'environment'
6
+ include DoSnapshot::RSpec::Environment
6
7
 
7
8
  subject(:log) { described_class }
8
9
 
@@ -1,8 +1,9 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe DoSnapshot::Mail do
5
- include_context 'environment'
6
+ include DoSnapshot::RSpec::Environment
6
7
 
7
8
  subject(:mail) { described_class }
8
9
 
@@ -1,8 +1,9 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe DoSnapshot::Runner, type: :aruba do
5
- include_context 'environment'
6
+ include DoSnapshot::RSpec::Environment
6
7
 
7
8
  context 'commands' do
8
9
  context '.snap' do
@@ -203,7 +204,7 @@ RSpec.describe DoSnapshot::Runner, type: :aruba do
203
204
  end
204
205
 
205
206
  context 'API V2' do
206
- include_context 'api_v2_helpers'
207
+ include DoSnapshot::RSpec::ApiV2Helpers
207
208
  it_behaves_like '.snap methods'
208
209
 
209
210
  context 'when no credentials' do
@@ -1,8 +1,9 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe DoSnapshot do
5
- include_context 'environment'
6
+ include DoSnapshot::RSpec::Environment
6
7
 
7
8
  describe DoSnapshot::DropletFindError do
8
9
  subject(:error) { described_class }
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  require 'coveralls'
3
4
  Coveralls.wear! do
4
5
  add_filter '/spec/*'
@@ -10,10 +11,7 @@ Bundler.setup
10
11
  require 'do_snapshot/cli'
11
12
  require 'webmock/rspec'
12
13
  require 'fileutils'
13
- require_relative 'shared/api_helpers'
14
- require_relative 'shared/api_v2_helpers'
15
- require_relative 'shared/uri_helpers'
16
- require_relative 'shared/environment'
14
+ require 'do_snapshot/rspec'
17
15
  require 'do_snapshot/core_ext/hash'
18
16
 
19
17
  WebMock.disable_net_connect!(allow_localhost: true)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'aruba/rspec'
2
3
  require 'do_snapshot/runner'
3
4
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  RSpec::Matchers.define :be_found_n_times do |str, times|
2
3
  match do |output|
3
4
  matches = output.scan(str)
metadata CHANGED
@@ -1,43 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: do_snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Merkulov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-23 00:00:00.000000000 Z
11
+ date: 2017-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: barge
14
+ name: droplet_kit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.11'
19
+ version: 2.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.11'
26
+ version: 2.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "<"
39
+ - !ruby/object:Gem::Version
40
+ version: '5'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.19.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.19.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: hashie
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: '0.19'
61
+ version: 3.5.6
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '0.19'
68
+ version: 3.5.6
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: pony
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,20 +94,27 @@ files:
66
94
  - lib/do_snapshot.rb
67
95
  - lib/do_snapshot/adapter.rb
68
96
  - lib/do_snapshot/adapter/abstract.rb
69
- - lib/do_snapshot/adapter/digitalocean_v2.rb
97
+ - lib/do_snapshot/adapter/droplet_kit.rb
70
98
  - lib/do_snapshot/cli.rb
71
99
  - lib/do_snapshot/command.rb
72
100
  - lib/do_snapshot/configuration.rb
73
101
  - lib/do_snapshot/core_ext/hash.rb
74
102
  - lib/do_snapshot/distribution.rb
103
+ - lib/do_snapshot/gem_ext/resource_kit.rb
75
104
  - lib/do_snapshot/helpers.rb
76
105
  - lib/do_snapshot/log.rb
77
106
  - lib/do_snapshot/mail.rb
107
+ - lib/do_snapshot/rspec.rb
108
+ - lib/do_snapshot/rspec/adapter.rb
109
+ - lib/do_snapshot/rspec/api_helpers.rb
110
+ - lib/do_snapshot/rspec/api_v2_helpers.rb
111
+ - lib/do_snapshot/rspec/environment.rb
112
+ - lib/do_snapshot/rspec/uri_helpers.rb
78
113
  - lib/do_snapshot/runner.rb
79
114
  - lib/do_snapshot/version.rb
80
115
  - spec/.keep
81
116
  - spec/do_snapshot/adapter/abstract_spec.rb
82
- - spec/do_snapshot/adapter/digitalocean_v2_spec.rb
117
+ - spec/do_snapshot/adapter/droplet_kit_spec.rb
83
118
  - spec/do_snapshot/adapter_spec.rb
84
119
  - spec/do_snapshot/cli_spec.rb
85
120
  - spec/do_snapshot/command_spec.rb
@@ -101,10 +136,6 @@ files:
101
136
  - spec/fixtures/digitalocean/v2/show_event_power_on_done.json
102
137
  - spec/fixtures/digitalocean/v2/show_event_power_on_start.json
103
138
  - spec/fixtures/digitalocean/v2/show_event_start.json
104
- - spec/shared/api_helpers.rb
105
- - spec/shared/api_v2_helpers.rb
106
- - spec/shared/environment.rb
107
- - spec/shared/uri_helpers.rb
108
139
  - spec/spec_helper.rb
109
140
  - spec/support/aruba.rb
110
141
  - spec/support/matchers.rb
@@ -120,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
151
  requirements:
121
152
  - - ">="
122
153
  - !ruby/object:Gem::Version
123
- version: 1.9.3
154
+ version: 2.0.0
124
155
  required_rubygems_version: !ruby/object:Gem::Requirement
125
156
  requirements:
126
157
  - - ">="
@@ -128,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
159
  version: '0'
129
160
  requirements: []
130
161
  rubyforge_project:
131
- rubygems_version: 2.6.10
162
+ rubygems_version: 2.6.11
132
163
  signing_key:
133
164
  specification_version: 4
134
165
  summary: A command-line snapshot maker for your DigitalOcean droplets. Fully Automated.
@@ -136,7 +167,7 @@ summary: A command-line snapshot maker for your DigitalOcean droplets. Fully Aut
136
167
  test_files:
137
168
  - spec/.keep
138
169
  - spec/do_snapshot/adapter/abstract_spec.rb
139
- - spec/do_snapshot/adapter/digitalocean_v2_spec.rb
170
+ - spec/do_snapshot/adapter/droplet_kit_spec.rb
140
171
  - spec/do_snapshot/adapter_spec.rb
141
172
  - spec/do_snapshot/cli_spec.rb
142
173
  - spec/do_snapshot/command_spec.rb
@@ -158,10 +189,6 @@ test_files:
158
189
  - spec/fixtures/digitalocean/v2/show_event_power_on_done.json
159
190
  - spec/fixtures/digitalocean/v2/show_event_power_on_start.json
160
191
  - spec/fixtures/digitalocean/v2/show_event_start.json
161
- - spec/shared/api_helpers.rb
162
- - spec/shared/api_v2_helpers.rb
163
- - spec/shared/environment.rb
164
- - spec/shared/uri_helpers.rb
165
192
  - spec/spec_helper.rb
166
193
  - spec/support/aruba.rb
167
194
  - spec/support/matchers.rb
@@ -1,264 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'spec_helper'
3
-
4
- RSpec.describe DoSnapshot::Adapter::DigitaloceanV2 do
5
- include_context 'environment'
6
- include_context 'api_v2_helpers'
7
-
8
- subject(:api) { described_class }
9
- subject(:log) { DoSnapshot::Log }
10
-
11
- describe '.initialize' do
12
- describe '#delay' do
13
- let(:delay) { 5 }
14
- let(:instance) { api.new(delay: delay) }
15
- it('with custom delay') { expect(instance.delay).to eq delay }
16
- end
17
-
18
- describe '#timeout' do
19
- let(:timeout) { 5 }
20
- let(:instance) { api.new(timeout: timeout) }
21
- it('with custom timeout') { expect(instance.timeout).to eq timeout }
22
- end
23
- end
24
-
25
- describe 'droplets' do
26
- let(:instance) { api.new(delay: delay, timeout: timeout) }
27
- include_context 'uri_helpers'
28
-
29
- describe '.droplet' do
30
- it 'with droplet' do
31
- stub_droplet(droplet_id)
32
-
33
- instance.droplet(droplet_id)
34
-
35
- expect(a_request(:get, droplet_url))
36
- .to have_been_made
37
- end
38
-
39
- it 'with error' do
40
- stub_droplet_fail(droplet_id)
41
-
42
- expect { instance.droplet(droplet_id) }
43
- .to raise_error(DoSnapshot::DropletFindError)
44
- expect(DoSnapshot.logger.buffer)
45
- .to include "Droplet id: #{droplet_id} Not Found"
46
-
47
- expect(a_request(:get, droplet_url))
48
- .to have_been_made
49
- end
50
- end
51
-
52
- describe '.droplets' do
53
- it 'with droplets' do
54
- stub_droplets
55
-
56
- instance.droplets
57
-
58
- expect(a_request(:get, droplets_uri))
59
- .to have_been_made
60
- end
61
-
62
- it 'with error' do
63
- stub_droplets_fail
64
-
65
- expect { instance.droplets }.to raise_error(DoSnapshot::DropletListError)
66
- expect(DoSnapshot.logger.buffer)
67
- .to include 'Droplet Listing is failed to retrieve'
68
-
69
- expect(a_request(:get, droplets_uri))
70
- .to have_been_made
71
- end
72
- end
73
-
74
- describe '.start_droplet' do
75
- it 'with event' do
76
- stub_droplet_inactive(droplet_id)
77
- stub_droplet_start(droplet_id)
78
-
79
- instance.start_droplet(droplet_id)
80
- expect(DoSnapshot.logger.buffer).to include "Droplet id: #{droplet_id} is requested for Power On."
81
-
82
- expect(a_request(:post, droplet_start_url))
83
- .to have_been_made
84
- expect(a_request(:get, droplet_url))
85
- .to have_been_made
86
- end
87
-
88
- it 'with warning message' do
89
- stub_droplet(droplet_id)
90
-
91
- expect { instance.start_droplet(droplet_id) }
92
- .not_to raise_error
93
- expect(DoSnapshot.logger.buffer)
94
- .to include "Droplet #{droplet_id} is still running. Skipping."
95
-
96
- expect(a_request(:get, droplet_url))
97
- .to have_been_made
98
- end
99
-
100
- it 'with error' do
101
- stub_droplet_fail(droplet_id)
102
-
103
- expect { instance.start_droplet(droplet_id) }
104
- .to raise_error(DoSnapshot::DropletFindError)
105
-
106
- expect(a_request(:get, droplet_url))
107
- .to have_been_made
108
- end
109
- end
110
-
111
- describe '.stop_droplet by power status' do
112
- let(:instance) { api.new(delay: delay, timeout: timeout, stop_by: :power_status) }
113
-
114
- it 'with success' do
115
- stub_event_done(event_id)
116
- stub_droplet_stop(droplet_id)
117
- stub_droplet_inactive(droplet_id)
118
-
119
- instance.stop_droplet(droplet_id)
120
-
121
- expect(a_request(:post, droplet_stop_url))
122
- .to have_been_made
123
- expect(a_request(:get, droplet_url))
124
- .to have_been_made
125
- end
126
-
127
- it 'with error' do
128
- stub_droplet_stop_fail(droplet_id)
129
- stub_droplet(droplet_id)
130
- instance.timeout = 1
131
- expect { instance.stop_droplet(droplet_id) }
132
- .to raise_error(DoSnapshot::DropletShutdownError)
133
- instance.timeout = timeout
134
- expect(DoSnapshot.logger.buffer)
135
- .to include 'Droplet id: 100823 is Failed to Power Off.'
136
-
137
- expect(a_request(:post, droplet_stop_url))
138
- .to have_been_made
139
- end
140
- end
141
-
142
- describe '.stop_droplet by event' do
143
- it 'with success' do
144
- stub_event_done(event_id)
145
- stub_droplet_stop(droplet_id)
146
-
147
- instance.stop_droplet(droplet_id)
148
-
149
- expect(a_request(:post, droplet_stop_url))
150
- .to have_been_made
151
- expect(a_request(:get, action_find_url))
152
- .to have_been_made
153
- end
154
-
155
- it 'with error' do
156
- stub_droplet_stop_fail(droplet_id)
157
-
158
- expect { instance.stop_droplet(droplet_id) }
159
- .to raise_error(DoSnapshot::DropletShutdownError)
160
- expect(DoSnapshot.logger.buffer)
161
- .to include 'Droplet id: 100823 is Failed to Power Off.'
162
-
163
- expect(a_request(:post, droplet_stop_url))
164
- .to have_been_made
165
- end
166
- end
167
-
168
- describe '.create_snapshot' do
169
- it 'with success' do
170
- stub_event_done(event_id)
171
- stub_droplet_snapshot(droplet_id, snapshot_name)
172
-
173
- expect { instance.create_snapshot(droplet_id, snapshot_name) }
174
- .not_to raise_error
175
-
176
- expect(a_request(:post, droplet_snapshot_url))
177
- .to have_been_made
178
- expect(a_request(:get, action_find_url))
179
- .to have_been_made
180
- end
181
-
182
- it 'with error' do
183
- stub_droplet_snapshot_fail(droplet_id, snapshot_name)
184
-
185
- expect { instance.create_snapshot(droplet_id, snapshot_name) }
186
- .to raise_error(DoSnapshot::SnapshotCreateError)
187
-
188
- expect(a_request(:post, droplet_snapshot_url))
189
- .to have_been_made
190
- end
191
-
192
- it 'with event error' do
193
- stub_droplet_snapshot(droplet_id, snapshot_name)
194
- stub_event_fail(event_id)
195
-
196
- expect { instance.create_snapshot(droplet_id, snapshot_name) }
197
- .not_to raise_error
198
- expect(DoSnapshot.logger.buffer)
199
- .to include "Event id: #{event_id} is failed!"
200
-
201
- expect(a_request(:post, droplet_snapshot_url))
202
- .to have_been_made
203
- expect(a_request(:get, action_find_url))
204
- .to have_been_made
205
- end
206
- end
207
-
208
- describe '.inactive?' do
209
- it 'when inactive' do
210
- stub_droplet_inactive(droplet_id)
211
-
212
- expect(instance.inactive?(droplet_id))
213
- .to be_truthy
214
- end
215
-
216
- it 'when active' do
217
- stub_droplet(droplet_id)
218
-
219
- expect(instance.inactive?(droplet_id))
220
- .to be_falsey
221
- end
222
- end
223
-
224
- describe '.cleanup_snapshots' do
225
- it 'with success' do
226
- stub_droplet(droplet_id)
227
- stub_image_destroy(image_id)
228
- stub_image_destroy(image_id2)
229
-
230
- droplet = instance.droplet(droplet_id)
231
- expect { instance.cleanup_snapshots(droplet, 1) }
232
- .not_to raise_error
233
- expect(DoSnapshot.logger.buffer)
234
- .to include 'Snapshot: 5019770 delete requested.'
235
-
236
- expect(a_request(:get, droplet_url))
237
- .to have_been_made
238
- expect(a_request(:delete, image_destroy_url))
239
- .to have_been_made
240
- expect(a_request(:delete, image_destroy2_url))
241
- .to have_been_made
242
- end
243
-
244
- it 'with warning message' do
245
- stub_droplet(droplet_id)
246
- stub_image_destroy_fail(image_id)
247
- stub_image_destroy_fail(image_id2)
248
-
249
- droplet = instance.droplet(droplet_id)
250
- expect { instance.cleanup_snapshots(droplet, 1) }
251
- .not_to raise_error
252
- expect(DoSnapshot.logger.buffer)
253
- .to include 'Destroy of snapshot 5019903 for droplet id: 100823 name: example.com is failed.'
254
-
255
- expect(a_request(:get, droplet_url))
256
- .to have_been_made
257
- expect(a_request(:delete, image_destroy_url))
258
- .to have_been_made
259
- expect(a_request(:delete, image_destroy2_url))
260
- .to have_been_made
261
- end
262
- end
263
- end
264
- end