knife-digital_ocean 2.5.0 → 2.6.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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -3
- data/CHANGELOG.md +1 -1
- data/README.md +10 -1
- data/lib/chef/knife/digital_ocean_droplet_create.rb +9 -1
- data/lib/chef/knife/digital_ocean_droplet_shutdown.rb +50 -0
- data/lib/knife-digital_ocean/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/droplet_shutdown.yml +66 -0
- data/spec/lib/chef/knife/digital_ocean_droplet_shutdown_spec.rb +38 -0
- data/spec/spec_helper.rb +1 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66a8cd4ff5cf4cda89f98ec8dcb19c1badfc5518
|
4
|
+
data.tar.gz: 02ca754f6d1a49a14bd187fd0823dc6a021527e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a82f90a38e6979ff97bfd9b4a9b38ef9235abb06a17471c70c4c757541191f983979134ca13df47c4ef90acd41feb872268863130ab0637acedbb3ffec42d44e
|
7
|
+
data.tar.gz: dc88dccf3c4decac124bf5e66a06c74a01ac7a045efda63a8b0b842a82012baeabb84b2678f9b90699125dcb40c96993f0fc218fff567bf7ce94e720ae803668
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -43,7 +43,7 @@ This plugin provides the following sub-commands:
|
|
43
43
|
* knife digital_ocean droplet list (options)
|
44
44
|
**Lists currently running virtual machines**
|
45
45
|
|
46
|
-
* knife digital_ocean droplet power (options)
|
46
|
+
* knife digital_ocean droplet power (options)
|
47
47
|
**Turn a droplet On/Off**
|
48
48
|
|
49
49
|
* knife digital_ocean droplet powercycle (options)
|
@@ -52,6 +52,9 @@ This plugin provides the following sub-commands:
|
|
52
52
|
* knife digital_ocean droplet reboot (options)
|
53
53
|
**Reboot a Droplet**
|
54
54
|
|
55
|
+
* knife digital_ocean droplet shutdown (options)
|
56
|
+
**Shutdown a droplet**
|
57
|
+
|
55
58
|
* knife digital_ocean droplet snapshot (options)
|
56
59
|
**Take a snapshot of a Droplet**
|
57
60
|
|
@@ -309,6 +312,12 @@ OK
|
|
309
312
|
OK
|
310
313
|
```
|
311
314
|
|
315
|
+
#### Shutdown a droplet
|
316
|
+
```shell
|
317
|
+
➜ knife digital_ocean shutdown -I 1824315
|
318
|
+
OK
|
319
|
+
```
|
320
|
+
|
312
321
|
#### Create a droplet from a Snapshot
|
313
322
|
```shell
|
314
323
|
➜ knife digital_ocean snapshot -I 1824315 -N 'my-super-awesome-snapshot'
|
@@ -166,6 +166,13 @@ class Chef
|
|
166
166
|
description: 'Enables ipv6 for the created droplet',
|
167
167
|
default: false
|
168
168
|
|
169
|
+
option :user_data,
|
170
|
+
short: '-u USER_DATA_FILE',
|
171
|
+
long: '--user-data USER_DATA_FILE',
|
172
|
+
description: 'A file containing the user_data, this usually contains a cloud-config/cloud-init config',
|
173
|
+
proc: proc { |u| Chef::Config[:knife][:user_data] = File.read(u) },
|
174
|
+
default: ''
|
175
|
+
|
169
176
|
def run
|
170
177
|
$stdout.sync = true
|
171
178
|
|
@@ -221,7 +228,8 @@ class Chef
|
|
221
228
|
ssh_keys: locate_config_value(:ssh_key_ids),
|
222
229
|
private_networking: locate_config_value(:private_networking),
|
223
230
|
backups: locate_config_value(:backups),
|
224
|
-
ipv6: locate_config_value(:ipv6)
|
231
|
+
ipv6: locate_config_value(:ipv6),
|
232
|
+
user_data: locate_config_value(:user_data)
|
225
233
|
)
|
226
234
|
|
227
235
|
server = client.droplets.create(droplet)
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
2
|
+
# you may not use this file except in compliance with the License.
|
3
|
+
# You may obtain a copy of the License at
|
4
|
+
#
|
5
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
#
|
7
|
+
# Unless required by applicable law or agreed to in writing, software
|
8
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
9
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and
|
11
|
+
# limitations under the License.
|
12
|
+
#
|
13
|
+
require 'chef/knife/digital_ocean_base'
|
14
|
+
|
15
|
+
class Chef
|
16
|
+
class Knife
|
17
|
+
class DigitalOceanDropletShutdown < Knife
|
18
|
+
include Knife::DigitalOceanBase
|
19
|
+
|
20
|
+
banner 'knife digital_ocean droplet shutdown (options)'
|
21
|
+
|
22
|
+
option :id,
|
23
|
+
short: '-I ID',
|
24
|
+
long: '--droplet-id ID',
|
25
|
+
description: 'Droplet ID'
|
26
|
+
|
27
|
+
def run
|
28
|
+
$stdout.sync = true
|
29
|
+
|
30
|
+
validate!
|
31
|
+
|
32
|
+
unless locate_config_value(:id)
|
33
|
+
ui.error('ID cannot be empty. => -I <id>')
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
|
37
|
+
ui.info "Shutdown droplet with id: #{locate_config_value(:id)}"
|
38
|
+
|
39
|
+
result = client.droplet_actions.shutdown(droplet_id: locate_config_value(:id))
|
40
|
+
|
41
|
+
unless result.class == DropletKit::Action
|
42
|
+
ui.error JSON.parse(result)['message']
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
|
46
|
+
wait_for_status(result, status: 'off')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.digitalocean.com/v2/droplets/4829346/actions
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"type":"shutdown"}'
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/json
|
12
|
+
Authorization:
|
13
|
+
- Bearer FAKE_ACCESS_TOKEN
|
14
|
+
User-Agent:
|
15
|
+
- Faraday v0.9.1
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 201
|
23
|
+
message: Created
|
24
|
+
headers:
|
25
|
+
Server:
|
26
|
+
- cloudflare-nginx
|
27
|
+
Date:
|
28
|
+
- Sat, 11 Apr 2015 23:27:14 GMT
|
29
|
+
Content-Type:
|
30
|
+
- application/json; charset=utf-8
|
31
|
+
Transfer-Encoding:
|
32
|
+
- chunked
|
33
|
+
Connection:
|
34
|
+
- keep-alive
|
35
|
+
Set-Cookie: _COOKIE_ID_
|
36
|
+
Status:
|
37
|
+
- 201 Created
|
38
|
+
X-Frame-Options:
|
39
|
+
- SAMEORIGIN
|
40
|
+
X-Xss-Protection:
|
41
|
+
- 1; mode=block
|
42
|
+
X-Content-Type-Options:
|
43
|
+
- nosniff
|
44
|
+
Ratelimit-Limit:
|
45
|
+
- '5000'
|
46
|
+
Ratelimit-Remaining:
|
47
|
+
- '4997'
|
48
|
+
Ratelimit-Reset:
|
49
|
+
- '1428797844'
|
50
|
+
Etag:
|
51
|
+
- '"8add870987c9c4e49d74ba6b653690a3"'
|
52
|
+
Cache-Control:
|
53
|
+
- max-age=0, private, must-revalidate
|
54
|
+
X-Request-Id:
|
55
|
+
- e2cac9ba-7bc9-444f-939c-02c57920221c
|
56
|
+
X-Runtime:
|
57
|
+
- '0.166743'
|
58
|
+
Cf-Ray:
|
59
|
+
- 1d5a76021bd31834-EWR
|
60
|
+
body:
|
61
|
+
encoding: UTF-8
|
62
|
+
string: '{"action":{"id":47949289,"status":"in-progress","type":"shutdown","started_at":"2015-04-11T23:27:14Z","completed_at":null,"resource_id":4829346,"resource_type":"droplet","region":{"name":"New
|
63
|
+
York 3","slug":"nyc3","sizes":["512mb","1gb","2gb","4gb","8gb","16gb","32gb","48gb","64gb"],"features":["virtio","private_networking","backups","ipv6","metadata"],"available":true},"region_slug":"nyc3"}}'
|
64
|
+
http_version:
|
65
|
+
recorded_at: Sat, 11 Apr 2015 23:27:14 GMT
|
66
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Chef::Knife::DigitalOceanDropletShutdown do
|
4
|
+
subject { Chef::Knife::DigitalOceanDropletShutdown.new }
|
5
|
+
|
6
|
+
let(:access_token) { ENV['DIGITALOCEAN_ACCESS_TOKEN'] }
|
7
|
+
|
8
|
+
before :each do
|
9
|
+
Chef::Knife::DigitalOceanDropletShutdown.load_deps
|
10
|
+
Chef::Config['knife']['digital_ocean_access_token'] = access_token
|
11
|
+
allow(subject).to receive(:puts)
|
12
|
+
allow(subject).to receive(:wait_for_status).and_return('OK')
|
13
|
+
subject.config[:id] = '4829346'
|
14
|
+
subject.config[:action] = 'off'
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#run' do
|
18
|
+
it 'should validate the Digital Ocean config keys exist' do
|
19
|
+
VCR.use_cassette('droplet_shutdown') do
|
20
|
+
expect(subject).to receive(:validate!)
|
21
|
+
subject.run
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should power the droplet and exit with 0' do
|
26
|
+
VCR.use_cassette('droplet_shutdown') do
|
27
|
+
allow(subject.client).to receive_message_chain(:droplet_actions, :shutdown)
|
28
|
+
expect { subject.run }.not_to raise_error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should return OK' do
|
33
|
+
VCR.use_cassette('droplet_shutdown') do
|
34
|
+
expect(subject.run).to eq 'OK'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -15,6 +15,7 @@ require 'chef/knife/digital_ocean_droplet_reboot'
|
|
15
15
|
require 'chef/knife/digital_ocean_droplet_power'
|
16
16
|
require 'chef/knife/digital_ocean_droplet_powercycle'
|
17
17
|
require 'chef/knife/digital_ocean_droplet_rename'
|
18
|
+
require 'chef/knife/digital_ocean_droplet_shutdown'
|
18
19
|
require 'chef/knife/digital_ocean_droplet_snapshot'
|
19
20
|
require 'chef/knife/digital_ocean_droplet_rebuild'
|
20
21
|
require 'chef/knife/digital_ocean_droplet_resize'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-digital_ocean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roland Moriz
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-05-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -259,6 +259,7 @@ files:
|
|
259
259
|
- lib/chef/knife/digital_ocean_droplet_rebuild.rb
|
260
260
|
- lib/chef/knife/digital_ocean_droplet_rename.rb
|
261
261
|
- lib/chef/knife/digital_ocean_droplet_resize.rb
|
262
|
+
- lib/chef/knife/digital_ocean_droplet_shutdown.rb
|
262
263
|
- lib/chef/knife/digital_ocean_droplet_snapshot.rb
|
263
264
|
- lib/chef/knife/digital_ocean_image_destroy.rb
|
264
265
|
- lib/chef/knife/digital_ocean_image_list.rb
|
@@ -283,6 +284,7 @@ files:
|
|
283
284
|
- spec/fixtures/vcr_cassettes/droplet_rebuild.yml
|
284
285
|
- spec/fixtures/vcr_cassettes/droplet_rename.yml
|
285
286
|
- spec/fixtures/vcr_cassettes/droplet_resize.yml
|
287
|
+
- spec/fixtures/vcr_cassettes/droplet_shutdown.yml
|
286
288
|
- spec/fixtures/vcr_cassettes/droplet_snapshot.yml
|
287
289
|
- spec/fixtures/vcr_cassettes/image.yml
|
288
290
|
- spec/fixtures/vcr_cassettes/public_images.yml
|
@@ -306,6 +308,7 @@ files:
|
|
306
308
|
- spec/lib/chef/knife/digital_ocean_droplet_rebuild_spec.rb
|
307
309
|
- spec/lib/chef/knife/digital_ocean_droplet_rename_spec.rb
|
308
310
|
- spec/lib/chef/knife/digital_ocean_droplet_resize_spec.rb
|
311
|
+
- spec/lib/chef/knife/digital_ocean_droplet_shutdown_spec.rb
|
309
312
|
- spec/lib/chef/knife/digital_ocean_droplet_snapshot_spec.rb
|
310
313
|
- spec/lib/chef/knife/digital_ocean_image_list_spec.rb
|
311
314
|
- spec/lib/chef/knife/digital_ocean_region_list_spec.rb
|
@@ -335,7 +338,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
335
338
|
version: '0'
|
336
339
|
requirements: []
|
337
340
|
rubyforge_project:
|
338
|
-
rubygems_version: 2.
|
341
|
+
rubygems_version: 2.6.11
|
339
342
|
signing_key:
|
340
343
|
specification_version: 4
|
341
344
|
summary: A plugin for chef's knife to manage instances of DigitalOcean servers
|
@@ -353,6 +356,7 @@ test_files:
|
|
353
356
|
- spec/fixtures/vcr_cassettes/droplet_rebuild.yml
|
354
357
|
- spec/fixtures/vcr_cassettes/droplet_rename.yml
|
355
358
|
- spec/fixtures/vcr_cassettes/droplet_resize.yml
|
359
|
+
- spec/fixtures/vcr_cassettes/droplet_shutdown.yml
|
356
360
|
- spec/fixtures/vcr_cassettes/droplet_snapshot.yml
|
357
361
|
- spec/fixtures/vcr_cassettes/image.yml
|
358
362
|
- spec/fixtures/vcr_cassettes/public_images.yml
|
@@ -376,6 +380,7 @@ test_files:
|
|
376
380
|
- spec/lib/chef/knife/digital_ocean_droplet_rebuild_spec.rb
|
377
381
|
- spec/lib/chef/knife/digital_ocean_droplet_rename_spec.rb
|
378
382
|
- spec/lib/chef/knife/digital_ocean_droplet_resize_spec.rb
|
383
|
+
- spec/lib/chef/knife/digital_ocean_droplet_shutdown_spec.rb
|
379
384
|
- spec/lib/chef/knife/digital_ocean_droplet_snapshot_spec.rb
|
380
385
|
- spec/lib/chef/knife/digital_ocean_image_list_spec.rb
|
381
386
|
- spec/lib/chef/knife/digital_ocean_region_list_spec.rb
|