Class: Part

Inherits:
Object
  • Object
show all
Defined in:
lib/part.rb

Instance Method Summary collapse

Constructor Details

#initialize(token, version = "v2") ⇒ Part

Returns a new instance of Part.



5
6
7
8
# File 'lib/part.rb', line 5

def initialize(token, version="v2")
  @token = token
  @api_base = "https://api.digitalocean.com/" + version + "/"
end

Instance Method Details

#api_baseObject



10
11
12
# File 'lib/part.rb', line 10

def api_base
  @api_base
end

#api_base=(base_api_url) ⇒ Object



14
15
16
# File 'lib/part.rb', line 14

def api_base=(base_api_url)
  @api_base = base_api_url
end

#change_droplet_kernel(droplet_id, kernel_id) ⇒ Object

Not tested



158
159
160
161
162
# File 'lib/part.rb', line 158

def change_droplet_kernel(droplet_id, kernel_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "change_kernel", :kernel => kernel_id }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#create_domain(domain_name, ip_address) ⇒ Object

Not yet tested



71
72
73
74
75
# File 'lib/part.rb', line 71

def create_domain(domain_name, ip_address)
  api_request_url = @api_base + "domains"
  api_request_palyload = { :name => domain_name, :ip_address => ip_address }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#create_domain_record(domain_name) ⇒ Object

Raises:

  • (NotImplementedError)


41
42
43
44
45
# File 'lib/part.rb', line 41

def create_domain_record(domain_name)
  api_request_url = @api_base + "domains/" + domain_name + "/records"
  # response = make_api_request(api_request_url, :POST)
  raise NotImplementedError, "create_domain_record not yet implemented."
end

#create_droplet(droplet_name, droplet_region, droplet_image, droplet_size = "512mb", ssh_keys = nil, backups = nil, ipv6 = nil, private_networking = nil) ⇒ Object



226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/part.rb', line 226

def create_droplet(droplet_name, droplet_region, droplet_image, droplet_size="512mb", ssh_keys=nil, backups=nil, ipv6=nil, private_networking=nil)
  api_request_url = @api_base + "droplets"
  api_request_payload = {
    :name => droplet_name,
    :region => droplet_region,
    :size => droplet_size,
    :image => droplet_image
  }
  api_request_payload[:ssh_keys] = ssh_keys unless ssh_keys.nil?
  api_request_payload[:backups] = ssh_keys unless backups.nil?
  api_request_payload[:ipv6] = ssh_keys unless ipv6.nil?
  api_request_payload[:private_networking] = ssh_keys unless private_networking.nil?

  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#create_key(key_name, public_key) ⇒ Object



304
305
306
307
308
# File 'lib/part.rb', line 304

def create_key(key_name, public_key)
  api_request_url = @api_base + "account/keys"
  api_request_payload = { :name => key_name, :public_key => public_key }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#delete_domain(domain_name) ⇒ Object

Raises:

  • (NotImplementedError)


84
85
86
87
# File 'lib/part.rb', line 84

def delete_domain(domain_name)
  api_request_url = @api_base + "domains/" + domain_name.to_s
  raise NotImplementedError, "delete_domain not yet implemented."
end

#delete_domain_record(domain_name, record_id) ⇒ Object

Raises:

  • (NotImplementedError)


52
53
54
55
# File 'lib/part.rb', line 52

def delete_domain_record(domain_name, record_id)
  api_request_url = @api_base + "domains/" + domain_name + "/records/" + record_id.to_s
  raise NotImplementedError, "delete_domain_record not yet implemented."
end

#delete_droplet(droplet_id) ⇒ Object



247
248
249
250
# File 'lib/part.rb', line 247

def delete_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s
  response = make_api_request(api_request_url, :DELETE)
end

#delete_image(image_id) ⇒ Object

Not tested



283
284
285
286
# File 'lib/part.rb', line 283

def delete_image(image_id)
  api_request_url = @api_base + "images/" + image_id_or_slug.to_s
  response = make_api_request(api_request_url, :DELETE)
end

#delete_key(key_id_or_fingerprint) ⇒ Object



321
322
323
324
# File 'lib/part.rb', line 321

def delete_key(key_id_or_fingerprint)
  api_request_url = @api_base + "account/keys/" + key_id_or_fingerprint.to_s
  response = make_api_request(api_request_url, :DELETE)
end

#disable_backups(droplet_id) ⇒ Object

Not tested



172
173
174
175
176
# File 'lib/part.rb', line 172

def disable_backups(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "disable_backups" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#enable_ipv6(droplet_id) ⇒ Object

Not tested



165
166
167
168
169
# File 'lib/part.rb', line 165

def enable_ipv6(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "enable_ipv6" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#enable_private_networking(droplet_id) ⇒ Object

Not tested



179
180
181
182
183
# File 'lib/part.rb', line 179

def enable_private_networking(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "enable_private_networking" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#get_action(action_id) ⇒ Object



26
27
28
29
# File 'lib/part.rb', line 26

def get_action(action_id)
  api_request_url = @api_base + "actions/" + action_id.to_s
  response = make_api_request(api_request_url)
end

#get_backups(droplet_id) ⇒ Object



216
217
218
219
# File 'lib/part.rb', line 216

def get_backups(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/backups"
  response = make_api_request(api_request_url)
end

#get_domain(domain_name) ⇒ Object

Example: get_domain(“google.com”)



79
80
81
82
# File 'lib/part.rb', line 79

def get_domain(domain_name)
  api_request_url = @api_base + "domains/" + domain_name.to_s
  response = make_api_request(api_request_url)
end

#get_domain_record(domain_name, record_id) ⇒ Object



47
48
49
50
# File 'lib/part.rb', line 47

def get_domain_record(domain_name, record_id)
  api_request_url = @api_base + "domains/" + domain_name + "/records/" + record_id.to_s
  response = make_api_request(api_request_url)
end

#get_droplet(droplet_id) ⇒ Object



242
243
244
245
# File 'lib/part.rb', line 242

def get_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s
  response = make_api_request(api_request_url)
end

#get_droplet_action(droplet_id, action_id) ⇒ Object



192
193
194
195
# File 'lib/part.rb', line 192

def get_droplet_action(droplet_id, action_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions/" + action_id.to_s
  response = make_api_request(api_request_url)
end

#get_droplet_actions(droplet_id) ⇒ Object



221
222
223
224
# File 'lib/part.rb', line 221

def get_droplet_actions(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  response = make_api_request(api_request_url)
end

#get_image(image_id_or_slug) ⇒ Object

Not tested



277
278
279
280
# File 'lib/part.rb', line 277

def get_image(image_id_or_slug)
  api_request_url = @api_base + "images/" + image_id_or_slug.to_s
  make_api_request(api_request_url)
end

#get_image_action(image_id, action_id) ⇒ Object

Not tested



263
264
265
266
# File 'lib/part.rb', line 263

def get_image_action(image_id, action_id)
  api_request_url = @api_base + "images/" + image_id.to_s + "/actions/" + action_id.to_s
  make_api_request(api_request_url)
end

#get_key(key_id_or_fingerprint) ⇒ Object



310
311
312
313
# File 'lib/part.rb', line 310

def get_key(key_id_or_fingerprint)
  api_request_url = @api_base + "account/keys/" + key_id_or_fingerprint.to_s
  response = make_api_request(api_request_url)
end

#get_snapshots(droplet_id) ⇒ Object



211
212
213
214
# File 'lib/part.rb', line 211

def get_snapshots(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/snapshots"
  response = make_api_request(api_request_url)
end

#list_actionsObject



21
22
23
24
# File 'lib/part.rb', line 21

def list_actions
  api_request_url = @api_base + "actions"
  response = make_api_request(api_request_url)
end

#list_domain_records(domain_name) ⇒ Object

Domain Records developers.digitalocean.com/#domain-records

Example: list_domain_records(“google.com”)



36
37
38
39
# File 'lib/part.rb', line 36

def list_domain_records(domain_name)
  api_request_url = @api_base + "domains/" + domain_name + "/records"
  response = make_api_request(api_request_url)
end

#list_domainsObject



65
66
67
68
# File 'lib/part.rb', line 65

def list_domains
  api_request_url = @api_base + "domains"
  response = make_api_request(api_request_url)
end

#list_dropletsObject



200
201
202
203
204
# File 'lib/part.rb', line 200

def list_droplets
  api_request_url = @api_base + "droplets"
  response = make_api_request(api_request_url)
  # JSON.parse(response)["droplets"]
end

#list_imagesObject



271
272
273
274
# File 'lib/part.rb', line 271

def list_images
  api_request_url = @api_base + "images"
  response = make_api_request(api_request_url)
end

#list_kernels(droplet_id) ⇒ Object



206
207
208
209
# File 'lib/part.rb', line 206

def list_kernels(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/kernels"
  response = make_api_request(api_request_url)
end

#list_keysObject



299
300
301
302
# File 'lib/part.rb', line 299

def list_keys
  api_request_url = @api_base + "account/keys"
  response = make_api_request(api_request_url)
end

#list_regionsObject



329
330
331
332
# File 'lib/part.rb', line 329

def list_regions
  api_request_url = @api_base + "regions"
  response = make_api_request(api_request_url)
end

#list_sizesObject



337
338
339
340
# File 'lib/part.rb', line 337

def list_sizes
  api_request_url = @api_base + "sizes"
  response = make_api_request(api_request_url)
end

#make_api_request(api_url, request_method = :GET, api_request_payload = {}, api_request_headers = {}) ⇒ Object

Standardize API calls using this helper method



354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
# File 'lib/part.rb', line 354

def make_api_request(api_url, request_method=:GET, api_request_payload={}, api_request_headers={})
  api_request_headers = set_authorization_header(api_request_headers)

  case request_method
  when :GET
    response = RestClient.get api_url, api_request_headers
  when :POST
    response = RestClient.post api_url, api_request_payload, api_request_headers
  when :PUT
    response = RestClient.put api_url, api_request_payload, api_request_headers
  when :DELETE
    response = RestClient.delete api_url, api_request_headers
  else
    raise ArgumentError, "Invalid HTTP method used for this request."
  end
end

#password_reset_droplet(droplet_id) ⇒ Object

Not tested



124
125
126
127
128
# File 'lib/part.rb', line 124

def password_reset_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "password_reset" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#power_cycle_droplet(droplet_id) ⇒ Object



98
99
100
101
102
# File 'lib/part.rb', line 98

def power_cycle_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "power_cycle" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#power_off_droplet(droplet_id) ⇒ Object

Not tested



111
112
113
114
115
# File 'lib/part.rb', line 111

def power_off_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "power_off" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#power_on_droplet(droplet_id) ⇒ Object



117
118
119
120
121
# File 'lib/part.rb', line 117

def power_on_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "power_on" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#reboot_droplet(droplet_id) ⇒ Object



92
93
94
95
96
# File 'lib/part.rb', line 92

def reboot_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "reboot" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#rebuild_droplet(droplet_id, image_id_or_slug) ⇒ Object

Not tested



145
146
147
148
149
# File 'lib/part.rb', line 145

def rebuild_droplet(droplet_id, image_id_or_slug)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "rebuild", :image => image_id_or_slug }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#rename_droplet(droplet_id, new_name) ⇒ Object



151
152
153
154
155
# File 'lib/part.rb', line 151

def rename_droplet(droplet_id, new_name)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "rename", :name => new_name }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#resize_droplet(droplet_id, new_size) ⇒ Object

Not tested



131
132
133
134
135
# File 'lib/part.rb', line 131

def resize_droplet(droplet_id, new_size)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "resize", :size => new_size }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#restore_droplet(droplet_id, image_id) ⇒ Object

Not tested



138
139
140
141
142
# File 'lib/part.rb', line 138

def restore_droplet(droplet_id, image_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "restore", :image => image_id }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#set_authorization_header(request_headers) ⇒ Object

Standardize the setting of the Authorization header with this helper method



374
375
376
# File 'lib/part.rb', line 374

def set_authorization_header(request_headers)
  request_headers.merge({:Authorization => "Bearer #{self.token}"})
end

#shutdown_droplet(droplet_id) ⇒ Object



104
105
106
107
108
# File 'lib/part.rb', line 104

def shutdown_droplet(droplet_id)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "shutdown" }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#snapshot(droplet_id, snapshot_name) ⇒ Object

Not tested



186
187
188
189
190
# File 'lib/part.rb', line 186

def snapshot(droplet_id, snapshot_name)
  api_request_url = @api_base + "droplets/" + droplet_id.to_s + "/actions"
  api_request_payload = { :type => "snapshot", :name => snapshot_name }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#tokenObject



348
349
350
# File 'lib/part.rb', line 348

def token
  @token
end

#token=(token) ⇒ Object

Helper Methods



344
345
346
# File 'lib/part.rb', line 344

def token=(token)
  @token = token
end

#transfer_image(image_id, destination_region) ⇒ Object



256
257
258
259
260
# File 'lib/part.rb', line 256

def transfer_image(image_id, destination_region)
  api_request_url = @api_base + "images/" + image_id.to_s + "/actions"
  api_request_payload = { :type => "transfer", :region => destination_region }
  response = make_api_request(api_request_url, :POST, api_request_payload)
end

#update_domain_record(domain_name, record_id) ⇒ Object

Raises:

  • (NotImplementedError)


57
58
59
60
# File 'lib/part.rb', line 57

def update_domain_record(domain_name, record_id)
  api_request_url = @api_base + "domains/" + domain_name + "/records/" + record_id.to_s
  raise NotImplementedError, "update_domain_record not yet implemented."
end

#update_image(image_id, new_name) ⇒ Object

Not tested

Raises:

  • (NotImplementedError)


289
290
291
292
293
294
# File 'lib/part.rb', line 289

def update_image(image_id, new_name)
  api_request_url = @api_base + "images/" + image_id_or_slug.to_s
  api_request_payload = { :name => new_name }
  # response = make_api_request(api_request_url, :PUT, api_request_payload)
  raise NotImplementedError, "update_image not yet implemented."
end

#update_key(key_id_or_fingerprint, new_name) ⇒ Object



315
316
317
318
319
# File 'lib/part.rb', line 315

def update_key(key_id_or_fingerprint, new_name)
  api_request_url = @api_base + "account/keys/" + key_id_or_fingerprint.to_s
  api_request_payload = { :name => new_name }
  response = make_api_request(api_request_url, :PUT, api_request_payload)
end