part 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|