knife-digital_ocean 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|