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.
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: []