part 0.0.1
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 +7 -0
- data/lib/part.rb +372 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7299b73a5c197bc039b5fa99d3109247d785e66c
|
4
|
+
data.tar.gz: 2fbbdeb8054e1a39e71367329e7aaf8d6f920308
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c7b97e6d4264181dc5c067ee1a5483162e2b03c789babf03790aa44ee18fb12d04e2b7a1b9170407b3c29fa90f39582c9a4fc6f500848dafd5d006fbf55fe1fb
|
7
|
+
data.tar.gz: a227e51726515796a9fd6708e4148d4238bb7278e65425c8951a3291cb9975db1db53304cf9f81bf9ca4b83df26e8e38b074a7054a723ecbc956ef3b4925789e
|
data/lib/part.rb
ADDED
@@ -0,0 +1,372 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
|
3
|
+
class Part
|
4
|
+
|
5
|
+
def initialize(token, version="v2")
|
6
|
+
@token = token
|
7
|
+
@api_base = "https://api.digitalocean.com/" + version + "/"
|
8
|
+
end
|
9
|
+
|
10
|
+
# Actions
|
11
|
+
# https://developers.digitalocean.com/#actions
|
12
|
+
#
|
13
|
+
def list_actions
|
14
|
+
api_request_url = @api_base + "actions"
|
15
|
+
response = make_api_request(api_request_url)
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_action(action_id)
|
19
|
+
api_request_url = @api_base + "actions/" + action_id.to_s
|
20
|
+
response = make_api_request(api_request_url)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Domain Records
|
24
|
+
# https://developers.digitalocean.com/#domain-records
|
25
|
+
#
|
26
|
+
# Example: list_domain_records("google.com")
|
27
|
+
#
|
28
|
+
def list_domain_records(domain_name)
|
29
|
+
api_request_url = @api_base + "domains/" + domain_name + "/records"
|
30
|
+
response = make_api_request(api_request_url)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_domain_record(domain_name)
|
34
|
+
api_request_url = @api_base + "domains/" + domain_name + "/records"
|
35
|
+
# response = make_api_request(api_request_url, :POST)
|
36
|
+
puts "Error: create_domain_record not yet implemented."
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_domain_record(domain_name, record_id)
|
40
|
+
api_request_url = @api_base + "domains/" + domain_name + "/records/" + record_id.to_s
|
41
|
+
response = make_api_request(api_request_url)
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete_domain_record(domain_name, record_id)
|
45
|
+
api_request_url = @api_base + "domains/" + domain_name + "/records/" + record_id.to_s
|
46
|
+
puts "Error: delete_domain_record not yet implemented."
|
47
|
+
end
|
48
|
+
|
49
|
+
def update_domain_record(domain_name, record_id)
|
50
|
+
api_request_url = @api_base + "domains/" + domain_name + "/records/" + record_id.to_s
|
51
|
+
puts "Error: update_domain_record not yet implemented."
|
52
|
+
end
|
53
|
+
|
54
|
+
# Domains
|
55
|
+
# https://developers.digitalocean.com/#domains
|
56
|
+
#
|
57
|
+
def list_domains
|
58
|
+
api_request_url = @api_base + "domains"
|
59
|
+
response = make_api_request(api_request_url)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Not yet tested
|
63
|
+
def create_domain(domain_name, ip_address)
|
64
|
+
api_request_url = @api_base + "domains"
|
65
|
+
api_request_palyload = { :name => domain_name, :ip_address => ip_address }
|
66
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Example: get_domain("google.com")
|
70
|
+
#
|
71
|
+
def get_domain(domain_name)
|
72
|
+
api_request_url = @api_base + "domains/" + domain_name.to_s
|
73
|
+
response = make_api_request(api_request_url)
|
74
|
+
end
|
75
|
+
|
76
|
+
def delete_domain(domain_name)
|
77
|
+
api_request_url = @api_base + "domains/" + domain_name.to_s
|
78
|
+
puts "Error: delete_domain not yet implemented."
|
79
|
+
end
|
80
|
+
|
81
|
+
# Droplet Actions
|
82
|
+
# https://developers.digitalocean.com/#droplet-actions
|
83
|
+
#
|
84
|
+
def reboot_droplet(droplet_id)
|
85
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
86
|
+
api_request_payload = { :type => "reboot" }
|
87
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
88
|
+
end
|
89
|
+
|
90
|
+
def power_cycle_droplet(droplet_id)
|
91
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
92
|
+
api_request_payload = { :type => "power_cycle" }
|
93
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
94
|
+
end
|
95
|
+
|
96
|
+
def shutdown_droplet(droplet_id)
|
97
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
98
|
+
api_request_payload = { :type => "shutdown" }
|
99
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Not tested
|
103
|
+
def power_off_droplet(droplet_id)
|
104
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
105
|
+
api_request_payload = { :type => "power_off" }
|
106
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
107
|
+
end
|
108
|
+
|
109
|
+
def power_on_droplet(droplet_id)
|
110
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
111
|
+
api_request_payload = { :type => "power_on" }
|
112
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Not tested
|
116
|
+
def password_reset_droplet(droplet_id)
|
117
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
118
|
+
api_request_payload = { :type => "password_reset" }
|
119
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Not tested
|
123
|
+
def resize_droplet(droplet_id, new_size)
|
124
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
125
|
+
api_request_payload = { :type => "resize", :size => new_size }
|
126
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
127
|
+
end
|
128
|
+
|
129
|
+
# Not tested
|
130
|
+
def restore_droplet(droplet_id, image_id)
|
131
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
132
|
+
api_request_payload = { :type => "restore", :image => image_id }
|
133
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
134
|
+
end
|
135
|
+
|
136
|
+
# Not tested
|
137
|
+
def rebuild_droplet(droplet_id, image_id_or_slug)
|
138
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
139
|
+
api_request_payload = { :type => "rebuild", :image => image_id_or_slug }
|
140
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
141
|
+
end
|
142
|
+
|
143
|
+
def rename_droplet(droplet_id, new_name)
|
144
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
145
|
+
api_request_payload = { :type => "rename", :name => new_name }
|
146
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
147
|
+
end
|
148
|
+
|
149
|
+
# Not tested
|
150
|
+
def change_droplet_kernel(droplet_id, kernel_id)
|
151
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
152
|
+
api_request_payload = { :type => "change_kernel", :kernel => kernel_id }
|
153
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
154
|
+
end
|
155
|
+
|
156
|
+
# Not tested
|
157
|
+
def enable_ipv6(droplet_id)
|
158
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
159
|
+
api_request_payload = { :type => "enable_ipv6" }
|
160
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Not tested
|
164
|
+
def disable_backups(droplet_id)
|
165
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
166
|
+
api_request_payload = { :type => "disable_backups" }
|
167
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
168
|
+
end
|
169
|
+
|
170
|
+
# Not tested
|
171
|
+
def enable_private_networking(droplet_id)
|
172
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
173
|
+
api_request_payload = { :type => "enable_private_networking" }
|
174
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
175
|
+
end
|
176
|
+
|
177
|
+
# Not tested
|
178
|
+
def snapshot(droplet_id, snapshot_name)
|
179
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
180
|
+
api_request_payload = { :type => "snapshot", :name => snapshot_name }
|
181
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
182
|
+
end
|
183
|
+
|
184
|
+
def get_droplet_action(droplet_id, action_id)
|
185
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions/" + action_id.to_s
|
186
|
+
response = make_api_request(api_request_url)
|
187
|
+
end
|
188
|
+
|
189
|
+
# Droplets
|
190
|
+
# https://developers.digitalocean.com/#droplets
|
191
|
+
#
|
192
|
+
def list_droplets
|
193
|
+
api_request_url = @api_base + "droplets"
|
194
|
+
response = make_api_request(api_request_url)
|
195
|
+
# JSON.parse(response)["droplets"]
|
196
|
+
end
|
197
|
+
|
198
|
+
def list_kernels(droplet_id)
|
199
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/kernels"
|
200
|
+
response = make_api_request(api_request_url)
|
201
|
+
end
|
202
|
+
|
203
|
+
def get_snapshots(droplet_id)
|
204
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/snapshots"
|
205
|
+
response = make_api_request(api_request_url)
|
206
|
+
end
|
207
|
+
|
208
|
+
def get_backups(droplet_id)
|
209
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/backups"
|
210
|
+
response = make_api_request(api_request_url)
|
211
|
+
end
|
212
|
+
|
213
|
+
def get_droplet_actions(droplet_id)
|
214
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
|
215
|
+
response = make_api_request(api_request_url)
|
216
|
+
end
|
217
|
+
|
218
|
+
def create_droplet(droplet_name, droplet_region, droplet_image, droplet_size="512mb", ssh_keys=nil, backups=nil, ipv6=nil, private_networking=nil)
|
219
|
+
api_request_url = @api_base + "droplets"
|
220
|
+
api_request_payload = {
|
221
|
+
:name => droplet_name,
|
222
|
+
:region => droplet_region,
|
223
|
+
:size => droplet_size,
|
224
|
+
:image => droplet_image
|
225
|
+
}
|
226
|
+
api_request_payload[:ssh_keys] = ssh_keys unless ssh_keys.nil?
|
227
|
+
api_request_payload[:backups] = ssh_keys unless backups.nil?
|
228
|
+
api_request_payload[:ipv6] = ssh_keys unless ipv6.nil?
|
229
|
+
api_request_payload[:private_networking] = ssh_keys unless private_networking.nil?
|
230
|
+
|
231
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
232
|
+
end
|
233
|
+
|
234
|
+
def get_droplet(droplet_id)
|
235
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s
|
236
|
+
response = make_api_request(api_request_url)
|
237
|
+
end
|
238
|
+
|
239
|
+
def delete_droplet(droplet_id)
|
240
|
+
api_request_url = @api_base + "droplets/" + droplet_id.to_s
|
241
|
+
response = make_api_request(api_request_url, :DELETE)
|
242
|
+
end
|
243
|
+
|
244
|
+
# Image Actions
|
245
|
+
# https://developers.digitalocean.com/#image-actions
|
246
|
+
#
|
247
|
+
# Not tested
|
248
|
+
def transfer_image(image_id, destination_region)
|
249
|
+
api_request_url = @api_base + "images/" + image_id.to_s + "/actions"
|
250
|
+
api_request_payload = { :type => "transfer", :region => destination_region }
|
251
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
252
|
+
end
|
253
|
+
|
254
|
+
# Not tested
|
255
|
+
def get_image_action(image_id, action_id)
|
256
|
+
api_request_url = @api_base + "images/" + image_id.to_s + "/actions/" + action_id.to_s
|
257
|
+
make_api_request(api_request_url)
|
258
|
+
end
|
259
|
+
|
260
|
+
# Images
|
261
|
+
# https://developers.digitalocean.com/#images
|
262
|
+
#
|
263
|
+
def list_images
|
264
|
+
api_request_url = @api_base + "images"
|
265
|
+
response = make_api_request(api_request_url)
|
266
|
+
end
|
267
|
+
|
268
|
+
# Not tested
|
269
|
+
def get_image(image_id_or_slug)
|
270
|
+
api_request_url = @api_base + "images/" + image_id_or_slug.to_s
|
271
|
+
make_api_request(api_request_url)
|
272
|
+
end
|
273
|
+
|
274
|
+
# Not tested
|
275
|
+
def delete_image(image_id)
|
276
|
+
api_request_url = @api_base + "images/" + image_id_or_slug.to_s
|
277
|
+
response = make_api_request(api_request_url, :DELETE)
|
278
|
+
end
|
279
|
+
|
280
|
+
# Not tested
|
281
|
+
def update_image(image_id, new_name)
|
282
|
+
api_request_url = @api_base + "images/" + image_id_or_slug.to_s
|
283
|
+
api_request_payload = { :name => new_name }
|
284
|
+
puts "Error: update_image not yet implemented"
|
285
|
+
response = make_api_request(api_request_url, :PUT, api_request_payload)
|
286
|
+
end
|
287
|
+
|
288
|
+
# Keys
|
289
|
+
# https://developers.digitalocean.com/#keys
|
290
|
+
#
|
291
|
+
def list_keys
|
292
|
+
api_request_url = @api_base + "account/keys"
|
293
|
+
response = make_api_request(api_request_url)
|
294
|
+
end
|
295
|
+
|
296
|
+
def create_key(key_name, public_key)
|
297
|
+
api_request_url = @api_base + "account/keys"
|
298
|
+
api_request_payload = { :name => key_name, :public_key => public_key }
|
299
|
+
response = make_api_request(api_request_url, :POST, api_request_payload)
|
300
|
+
end
|
301
|
+
|
302
|
+
def get_key(key_id_or_fingerprint)
|
303
|
+
api_request_url = @api_base + "account/keys/" + key_id_or_fingerprint.to_s
|
304
|
+
response = make_api_request(api_request_url)
|
305
|
+
end
|
306
|
+
|
307
|
+
def update_key(key_id_or_fingerprint, new_name)
|
308
|
+
api_request_url = @api_base + "account/keys/" + key_id_or_fingerprint.to_s
|
309
|
+
api_request_payload = { :name => new_name }
|
310
|
+
response = make_api_request(api_request_url, :PUT, api_request_payload)
|
311
|
+
end
|
312
|
+
|
313
|
+
def delete_key(key_id_or_fingerprint)
|
314
|
+
api_request_url = @api_base + "account/keys/" + key_id_or_fingerprint.to_s
|
315
|
+
response = make_api_request(api_request_url, :DELETE)
|
316
|
+
end
|
317
|
+
|
318
|
+
# Regions
|
319
|
+
# https://developers.digitalocean.com/#regions
|
320
|
+
#
|
321
|
+
def list_regions
|
322
|
+
api_request_url = @api_base + "regions"
|
323
|
+
response = make_api_request(api_request_url)
|
324
|
+
end
|
325
|
+
|
326
|
+
# Sizes
|
327
|
+
# https://developers.digitalocean.com/#sizes
|
328
|
+
#
|
329
|
+
def list_sizes
|
330
|
+
api_request_url = @api_base + "sizes"
|
331
|
+
response = make_api_request(api_request_url)
|
332
|
+
end
|
333
|
+
|
334
|
+
# Helper Methods
|
335
|
+
#
|
336
|
+
def token=(token)
|
337
|
+
@token = token
|
338
|
+
end
|
339
|
+
|
340
|
+
def token
|
341
|
+
@token
|
342
|
+
end
|
343
|
+
|
344
|
+
# Standardize API calls using this helper method
|
345
|
+
#
|
346
|
+
def make_api_request(api_url, request_method=:GET, api_request_payload={}, api_request_headers={})
|
347
|
+
api_request_headers = set_authorization_header(api_request_headers)
|
348
|
+
|
349
|
+
case request_method
|
350
|
+
when :GET
|
351
|
+
response = RestClient.get api_url, api_request_headers
|
352
|
+
when :POST
|
353
|
+
response = RestClient.post api_url, api_request_payload, api_request_headers
|
354
|
+
when :PUT
|
355
|
+
response = RestClient.put api_url, api_request_payload, api_request_headers
|
356
|
+
when :DELETE
|
357
|
+
response = RestClient.delete api_url, api_request_headers
|
358
|
+
else
|
359
|
+
puts "Error: Invalid HTTP method used for this request."
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
# Standardize the setting of the Authorization header with this
|
364
|
+
# helper method
|
365
|
+
#
|
366
|
+
def set_authorization_header(request_headers)
|
367
|
+
request_headers.merge({:Authorization => "Bearer #{self.token}"})
|
368
|
+
end
|
369
|
+
|
370
|
+
end
|
371
|
+
|
372
|
+
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: part
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Josh Campoverde
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-05 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: An easy to use client for v2 of the Digital Ocean API
|
14
|
+
email: joshcampoverde@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/part.rb
|
20
|
+
homepage: http://rubygems.org/gems/part
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.4.1
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Parting the Digital Ocean
|
44
|
+
test_files: []
|