part 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/part.rb +372 -0
  3. 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: []