upcloud_api 2.0.0 → 2.1.0
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 +4 -4
- data/lib/upcloud_api/version.rb +1 -1
- data/lib/upcloud_api.rb +425 -71
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b54b7fb711a64b56613be72b899acdc0305e9d0
|
4
|
+
data.tar.gz: b88391e2f5aff4f02b5f16f1849f215038081303
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 993b7e0461cd0bd75e700a8099a25ee50aa67facb21034201c01417c796d86d339b5790c6ad87a0c95a73cc6221b0d2f33ef47ade05eaaf6d419a216884914a7
|
7
|
+
data.tar.gz: f5f091a10d094926a09e1357d832524ef76643b5fd730e51c854e64201d1f1e1d2a87ea9984d749c15dc4b484f3e3797c830a61f61c0c94b9277616dcb9581f5
|
data/lib/upcloud_api/version.rb
CHANGED
data/lib/upcloud_api.rb
CHANGED
@@ -19,7 +19,7 @@ class UpcloudApi
|
|
19
19
|
#
|
20
20
|
# Calls GET /1.2/server
|
21
21
|
#
|
22
|
-
#
|
22
|
+
# @return true in success, false if not.
|
23
23
|
def login
|
24
24
|
response = get "server"
|
25
25
|
response.code == 200
|
@@ -29,7 +29,9 @@ class UpcloudApi
|
|
29
29
|
#
|
30
30
|
# Calls GET /1.2/server_size.
|
31
31
|
#
|
32
|
-
#
|
32
|
+
# @return array of server size hashes
|
33
|
+
#
|
34
|
+
# @example Return hash
|
33
35
|
# {
|
34
36
|
# "core_number": "1",
|
35
37
|
# "memory_amount": "512"
|
@@ -43,7 +45,7 @@ class UpcloudApi
|
|
43
45
|
#
|
44
46
|
# Calls GET /1.2/acccount
|
45
47
|
#
|
46
|
-
#
|
48
|
+
# @return available credits in the account as a string.
|
47
49
|
def account_information
|
48
50
|
response = get "account"
|
49
51
|
data = JSON.parse response.body
|
@@ -54,14 +56,16 @@ class UpcloudApi
|
|
54
56
|
#
|
55
57
|
# Calls GET /1.2/server.
|
56
58
|
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
59
|
+
# @return array of servers with following values or empty array if no servers found.
|
60
|
+
#
|
61
|
+
# @example Return values
|
62
|
+
# - zone
|
63
|
+
# - core_number
|
64
|
+
# - title
|
65
|
+
# - hostname
|
66
|
+
# - memory_amount
|
67
|
+
# - uuid
|
68
|
+
# - state
|
65
69
|
def servers
|
66
70
|
response = get "server"
|
67
71
|
data = JSON.parse response.body
|
@@ -74,7 +78,9 @@ class UpcloudApi
|
|
74
78
|
#
|
75
79
|
# @param uuid from UpcloudApi#servers
|
76
80
|
#
|
77
|
-
#
|
81
|
+
# @return hash of server details or nil
|
82
|
+
#
|
83
|
+
# @example Return values
|
78
84
|
# {
|
79
85
|
# "boot_order" => "cdrom,disk",
|
80
86
|
# "core_number" => "3",
|
@@ -137,8 +143,7 @@ class UpcloudApi
|
|
137
143
|
#
|
138
144
|
# Calls POST /1.2/server.
|
139
145
|
#
|
140
|
-
# Storage devices should be array of hashes containing following data
|
141
|
-
#
|
146
|
+
# @example Storage devices should be array of hashes containing following data
|
142
147
|
# {
|
143
148
|
# "action" => "clone" # Can be "create", "clone" or "attach"
|
144
149
|
# "storage" => template_uuid, # Should be passed only for "clone" or "attach"
|
@@ -149,7 +154,7 @@ class UpcloudApi
|
|
149
154
|
# @param plan [String] Preconfigured plan for the server. If nil, a custom plan will be created from input data, otherwise this overrides custom configuration.
|
150
155
|
# Predefined plans can be fetched with {#plans}.
|
151
156
|
#
|
152
|
-
# login_user should be following hash or nil
|
157
|
+
# @example login_user should be following hash or nil
|
153
158
|
# {
|
154
159
|
# "username": "upclouduser",
|
155
160
|
# "ssh_keys": {
|
@@ -160,12 +165,12 @@ class UpcloudApi
|
|
160
165
|
# }
|
161
166
|
# }
|
162
167
|
#
|
163
|
-
# ip_addresses should be an array containing :public, :private and/or :ipv6. It defaults to
|
168
|
+
# @param ip_addresses should be an array containing :public, :private and/or :ipv6. It defaults to
|
164
169
|
# :all, which means the server will get public IPv4, private IPv4 and public IPv6 addresses.
|
165
170
|
#
|
166
171
|
# @param other [Hash] Other optional arguments create_server API call takes. See Upcloud’s documentation for possible values.
|
167
172
|
#
|
168
|
-
#
|
173
|
+
# @return HTTParty response object.
|
169
174
|
def create_server(zone: "fi-hel1", title:, hostname:, core_number: 1,
|
170
175
|
memory_amount: 1024, storage_devices:, ip_addresses: :all,
|
171
176
|
plan: nil, login_user: nil, other: nil)
|
@@ -212,12 +217,12 @@ class UpcloudApi
|
|
212
217
|
#
|
213
218
|
# In order to modify a server, the server must be stopped first.
|
214
219
|
#
|
215
|
-
# Calls PUT /1.2/server/
|
220
|
+
# Calls PUT /1.2/server/_server_uuid_.
|
216
221
|
#
|
217
222
|
# @param server_uuid [String] UUID of the server that will be modified.
|
218
223
|
# @param params [Hash] Hash of params that will be passed to be changed.
|
219
224
|
#
|
220
|
-
#
|
225
|
+
# @return HTTParty response object.
|
221
226
|
def modify_server(server_uuid, params)
|
222
227
|
data = { "server" => params }
|
223
228
|
json = JSON.generate data
|
@@ -230,9 +235,9 @@ class UpcloudApi
|
|
230
235
|
#
|
231
236
|
# In order to delete a server, the server must be stopped first.
|
232
237
|
#
|
233
|
-
# Calls DELETE /1.2/server/
|
238
|
+
# Calls DELETE /1.2/server/_server_uuid_.
|
234
239
|
#
|
235
|
-
#
|
240
|
+
# @return HTTParty response object.
|
236
241
|
def delete_server(server_uuid)
|
237
242
|
response = delete "server/#{server_uuid}"
|
238
243
|
|
@@ -241,11 +246,11 @@ class UpcloudApi
|
|
241
246
|
|
242
247
|
# Starts server that is shut down.
|
243
248
|
#
|
244
|
-
# Calls POST /1.2/server/
|
249
|
+
# Calls POST /1.2/server/_server_uuid_/start.
|
245
250
|
#
|
246
251
|
# @param server_uuid UUID of the server.
|
247
252
|
#
|
248
|
-
#
|
253
|
+
# @return HTTParty response object.
|
249
254
|
def start_server(server_uuid)
|
250
255
|
response = post "server/#{server_uuid}/start"
|
251
256
|
|
@@ -264,16 +269,16 @@ class UpcloudApi
|
|
264
269
|
#
|
265
270
|
# @param server_uuid UUID of the server
|
266
271
|
# @param type Type of the shutdown. Available types are :hard and :soft.
|
267
|
-
#
|
272
|
+
# Defaults to :soft.
|
268
273
|
# @param timeout Time after server will be hard stopped if it did not
|
269
|
-
#
|
274
|
+
# close cleanly. Only affects :soft type.
|
270
275
|
# @param asynchronous If false, this call will wait until the server
|
271
|
-
#
|
276
|
+
# has really stopped.
|
272
277
|
#
|
273
|
-
#
|
274
|
-
#
|
278
|
+
# @raise Timeout::Error in case server does not shut down in 300
|
279
|
+
# seconds in non-asynchronous mode.
|
275
280
|
#
|
276
|
-
#
|
281
|
+
# @return HTTParty response object if server was removed successfully or request is asynchronous and nil otherwise
|
277
282
|
def stop_server(server_uuid, type: :soft, timeout: nil, asynchronous: false)
|
278
283
|
data = {
|
279
284
|
"stop_server" => {
|
@@ -311,14 +316,14 @@ class UpcloudApi
|
|
311
316
|
#
|
312
317
|
# @param server_uuid UUID of the server
|
313
318
|
# @param type Type of the shutdown. Available types are :hard and :soft.
|
314
|
-
#
|
319
|
+
# Defaults to :soft.
|
315
320
|
# @param timeout Time after server will be hard stopped if it did not
|
316
|
-
#
|
321
|
+
# close cleanly. Only affects :soft type.
|
317
322
|
# @param timeout_action What will happen when timeout happens.
|
318
|
-
#
|
319
|
-
#
|
323
|
+
# :destroy hard stops the server and :ignore stops the operation
|
324
|
+
# if timeout happens. Default is :ignore.
|
320
325
|
#
|
321
|
-
#
|
326
|
+
# @return HTTParty response object.
|
322
327
|
def restart_server(server_uuid, type: :soft, timeout: nil, timeout_action: :ignore)
|
323
328
|
data = {
|
324
329
|
"restart_server" => {
|
@@ -339,18 +344,18 @@ class UpcloudApi
|
|
339
344
|
#
|
340
345
|
# Calls GET /1.2/storage or /1.2/storage/_type_.
|
341
346
|
#
|
342
|
-
# Available types
|
343
|
-
#
|
344
|
-
#
|
345
|
-
#
|
346
|
-
#
|
347
|
-
#
|
348
|
-
#
|
349
|
-
#
|
347
|
+
# @example Available types
|
348
|
+
# - public
|
349
|
+
# - private
|
350
|
+
# - normal
|
351
|
+
# - backup
|
352
|
+
# - cdrom
|
353
|
+
# - template
|
354
|
+
# - favorite
|
350
355
|
#
|
351
356
|
# @param type Type of the storages to be returned on nil.
|
352
357
|
#
|
353
|
-
#
|
358
|
+
# @return array of storages, inside "storage" key in the API or empty array if none found.
|
354
359
|
def storages(type: nil)
|
355
360
|
response = get(type && "storage/#{type}" || "storage")
|
356
361
|
data = JSON.parse response.body
|
@@ -363,7 +368,8 @@ class UpcloudApi
|
|
363
368
|
#
|
364
369
|
# @param storage_uuid UUID of the storage.
|
365
370
|
#
|
366
|
-
#
|
371
|
+
# @return hash of following storage details or nil
|
372
|
+
# @example Return values
|
367
373
|
# {
|
368
374
|
# "access" => "public",
|
369
375
|
# "license" => 0,
|
@@ -389,21 +395,21 @@ class UpcloudApi
|
|
389
395
|
#
|
390
396
|
# Calls POST /1.2/storage.
|
391
397
|
#
|
392
|
-
# backup_rule should be hash with following attributes
|
393
|
-
#
|
394
|
-
#
|
395
|
-
#
|
398
|
+
# @example backup_rule should be hash with following attributes
|
399
|
+
# - interval # allowed values: daily / mon / tue / wed / thu / fri / sat / sun
|
400
|
+
# - time # allowed values: 0000-2359
|
401
|
+
# - retention # How many days backup will be kept. Allowed values: 1-1095
|
396
402
|
#
|
397
403
|
# @param size Size of the storage in gigabytes
|
398
404
|
# @param tier Type of the disk. maxiops is SSD powered disk, other
|
399
|
-
#
|
405
|
+
# allowed value is "hdd"
|
400
406
|
# @param title Name of the disk
|
401
407
|
# @param zone Where the disk will reside. Needs to be within same zone
|
402
|
-
#
|
408
|
+
# with the server
|
403
409
|
# @param backup_rule Hash of backup information. If not given, no
|
404
|
-
#
|
410
|
+
# backups will be automatically created.
|
405
411
|
#
|
406
|
-
#
|
412
|
+
# @return HTTParty response object.
|
407
413
|
def create_storage(size:, tier: "maxiops", title:, zone: "fi-hel1",
|
408
414
|
backup_rule: nil)
|
409
415
|
data = {
|
@@ -426,18 +432,18 @@ class UpcloudApi
|
|
426
432
|
#
|
427
433
|
# Calls PUT /1.2/storage/_uuid_.
|
428
434
|
#
|
429
|
-
# backup_rule should be hash with following attributes
|
430
|
-
#
|
431
|
-
#
|
432
|
-
#
|
435
|
+
# @example backup_rule should be hash with following attributes
|
436
|
+
# - interval # allowed values: daily / mon / tue / wed / thu / fri / sat / sun
|
437
|
+
# - time # allowed values: 0000-2359
|
438
|
+
# - retention # How many days backup will be kept. Allowed values: 1-1095
|
433
439
|
#
|
434
440
|
# @param storage_uuid UUID of the storage that will be modified
|
435
441
|
# @param size Size of the storage in gigabytes
|
436
442
|
# @param title Name of the disk
|
437
443
|
# @param backup_rule Hash of backup information. If not given, no
|
438
|
-
#
|
444
|
+
# backups will be automatically created.
|
439
445
|
#
|
440
|
-
#
|
446
|
+
# @return HTTParty response object.
|
441
447
|
def modify_storage(storage_uuid, size:, title:, backup_rule: nil)
|
442
448
|
data = {
|
443
449
|
"storage" => {
|
@@ -462,12 +468,12 @@ class UpcloudApi
|
|
462
468
|
#
|
463
469
|
# @param storage_uuid UUID of the storage that will be modified
|
464
470
|
# @param tier Type of the disk. maxiops is SSD powered disk, other
|
465
|
-
#
|
471
|
+
# allowed value is "hdd"
|
466
472
|
# @param title Name of the disk
|
467
473
|
# @param zone Where the disk will reside. Needs to be within same zone
|
468
|
-
#
|
474
|
+
# with the server
|
469
475
|
#
|
470
|
-
#
|
476
|
+
# @return HTTParty response object.
|
471
477
|
def clone_storage(storage_uuid, zone: "fi-hel1", title:, tier: "maxiops")
|
472
478
|
data = {
|
473
479
|
"storage" => {
|
@@ -493,7 +499,7 @@ class UpcloudApi
|
|
493
499
|
# @param storage_uuid UUID of the storage that will be templatized
|
494
500
|
# @param title Name of the template storage
|
495
501
|
#
|
496
|
-
#
|
502
|
+
# @return HTTParty response object.
|
497
503
|
def templatize_storage(storage_uuid, title:)
|
498
504
|
data = {
|
499
505
|
"storage" => {
|
@@ -519,9 +525,9 @@ class UpcloudApi
|
|
519
525
|
# @param storage_uuid UUID of the storage that will be attached.
|
520
526
|
# @param type Type of the disk. Valid values are "disk" and "cdrom".
|
521
527
|
# @param address Address where the disk will be attached to. Defaults
|
522
|
-
#
|
528
|
+
# to next available address.
|
523
529
|
#
|
524
|
-
#
|
530
|
+
# @return HTTParty response object.
|
525
531
|
def attach_storage(server_uuid, storage_uuid:, type: "disk", address: nil)
|
526
532
|
data = {
|
527
533
|
"storage_device" => {
|
@@ -546,7 +552,7 @@ class UpcloudApi
|
|
546
552
|
# @param server_uuid UUID of the server from which to detach the storage.
|
547
553
|
# @param address Address where the storage that will be detached resides.
|
548
554
|
#
|
549
|
-
#
|
555
|
+
# @return HTTParty response object.
|
550
556
|
def detach_storage(server_uuid, address:)
|
551
557
|
data = {
|
552
558
|
"storage_device" => {
|
@@ -570,7 +576,7 @@ class UpcloudApi
|
|
570
576
|
# @param storage_uuid UUID of the storage to be backed-up
|
571
577
|
# @param title Name of the backup
|
572
578
|
#
|
573
|
-
#
|
579
|
+
# @return HTTParty response object.
|
574
580
|
def create_backup(storage_uuid, title:)
|
575
581
|
data = {
|
576
582
|
"storage" => {
|
@@ -593,7 +599,7 @@ class UpcloudApi
|
|
593
599
|
#
|
594
600
|
# @param backup_uuid UUID of the backup
|
595
601
|
#
|
596
|
-
#
|
602
|
+
# @return HTTParty response object.
|
597
603
|
def restore_backup(backup_uuid)
|
598
604
|
response = post "storage/#{backup_uuid}/restore"
|
599
605
|
|
@@ -606,7 +612,7 @@ class UpcloudApi
|
|
606
612
|
#
|
607
613
|
# @param storage_uuid UUID of the storage to be included in favorites
|
608
614
|
#
|
609
|
-
#
|
615
|
+
# @return HTTParty response object.
|
610
616
|
def favorite_storage(storage_uuid)
|
611
617
|
response = post "storage/#{storage_uuid}/favorite"
|
612
618
|
|
@@ -619,7 +625,7 @@ class UpcloudApi
|
|
619
625
|
#
|
620
626
|
# @param storage_uuid UUID of the storage to be removed from favorites
|
621
627
|
#
|
622
|
-
#
|
628
|
+
# @return HTTParty response object.
|
623
629
|
def defavorite_storage(storage_uuid)
|
624
630
|
response = delete "storage/#{storage_uuid}/favorite"
|
625
631
|
|
@@ -634,7 +640,7 @@ class UpcloudApi
|
|
634
640
|
#
|
635
641
|
# @param storage_uuid UUID of the storage that will be deleted.
|
636
642
|
#
|
637
|
-
#
|
643
|
+
# @return HTTParty response object.
|
638
644
|
def delete_storage(storage_uuid)
|
639
645
|
response = delete "storage/#{storage_uuid}"
|
640
646
|
|
@@ -643,7 +649,8 @@ class UpcloudApi
|
|
643
649
|
|
644
650
|
# Lists available predefined plans that can be used to create a server.
|
645
651
|
#
|
646
|
-
#
|
652
|
+
# @return Array of plan hashes
|
653
|
+
# @example Return values
|
647
654
|
# [
|
648
655
|
# {
|
649
656
|
# "core_number" : 1,
|
@@ -661,6 +668,353 @@ class UpcloudApi
|
|
661
668
|
data["plans"]["plan"]
|
662
669
|
end
|
663
670
|
|
671
|
+
# Lists firewall rules of a server.
|
672
|
+
#
|
673
|
+
# Calls POST /1.2/server/_uuid_/firewall_rule.
|
674
|
+
#
|
675
|
+
# @param server_uuid [String] UUID of server
|
676
|
+
#
|
677
|
+
# @return Array of firewall rules
|
678
|
+
# @example Return values
|
679
|
+
# [
|
680
|
+
# {
|
681
|
+
# "action": "accept",
|
682
|
+
# "destination_address_end": "",
|
683
|
+
# "destination_address_start": "",
|
684
|
+
# "destination_port_end": "80",
|
685
|
+
# "destination_port_start": "80",
|
686
|
+
# "direction": "in",
|
687
|
+
# "family": "IPv4",
|
688
|
+
# "icmp_type": "",
|
689
|
+
# "position": "1",
|
690
|
+
# "protocol": "",
|
691
|
+
# "source_address_end": "",
|
692
|
+
# "source_address_start": "",
|
693
|
+
# "source_port_end": "",
|
694
|
+
# "source_port_start": ""
|
695
|
+
# }
|
696
|
+
# ]
|
697
|
+
def firewall_rules server_uuid
|
698
|
+
response = get "server/#{server_uuid}/firewall_rule"
|
699
|
+
|
700
|
+
data = JSON.parse response.body
|
701
|
+
data["firewall_rules"]["firewall_rule"]
|
702
|
+
end
|
703
|
+
|
704
|
+
|
705
|
+
# Creates new firewall rule to a server specified by _server_uuid_.
|
706
|
+
#
|
707
|
+
# Calls POST /1.2/server/_server_uuid_/firewall_rule.
|
708
|
+
#
|
709
|
+
# _params_ should contain data as documented in Upcloud’s API:
|
710
|
+
# https://www.upcloud.com/api/1.2.3/11-firewall/#create-firewall-rule .
|
711
|
+
# It should not contain "firewall_rule" wrapper hash, but only the values inside a hash.
|
712
|
+
#
|
713
|
+
# @example _params_ contents
|
714
|
+
# {
|
715
|
+
# "position": "1",
|
716
|
+
# "direction": "in",
|
717
|
+
# "family": "IPv4",
|
718
|
+
# "protocol": "tcp",
|
719
|
+
# "source_address_start": "192.168.1.1",
|
720
|
+
# "source_address_end": "192.168.1.255",
|
721
|
+
# "source_port_end": "",
|
722
|
+
# "source_port_start": "",
|
723
|
+
# "destination_address_start": "",
|
724
|
+
# "destination_address_end": "",
|
725
|
+
# "destination_port_start": "22",
|
726
|
+
# "destination_port_end": "22",
|
727
|
+
# "icmp_type": "",
|
728
|
+
# "action": "accept"
|
729
|
+
# }
|
730
|
+
#
|
731
|
+
# @param server_uuid [String] UUID of server
|
732
|
+
# @param params [Hash] Parameters for the firewall rule.
|
733
|
+
#
|
734
|
+
# @return HTTParty response object.
|
735
|
+
def create_firewall_rule server_uuid, params
|
736
|
+
data = {
|
737
|
+
"firewall_rule" => params
|
738
|
+
}
|
739
|
+
|
740
|
+
json = JSON.generate data
|
741
|
+
|
742
|
+
response = post "server/#{server_uuid}/firewall_rule", json
|
743
|
+
|
744
|
+
response
|
745
|
+
end
|
746
|
+
|
747
|
+
# Removes a firewall rule at position _position_.
|
748
|
+
#
|
749
|
+
# Calls DELETE /1.2/server/_server_uuid_/firewall_rule/_position_.
|
750
|
+
#
|
751
|
+
# A position of a rule can be seen with firewall_rules().
|
752
|
+
#
|
753
|
+
# @param server_uuid [String] UUID of server
|
754
|
+
# @param position [Integer] position of the rule in rule list that will be removed
|
755
|
+
#
|
756
|
+
# @return HTTParty response object.
|
757
|
+
def remove_firewall_rule server_uuid, position
|
758
|
+
response = delete "server/#{server_uuid}/firewall_rule/#{position}"
|
759
|
+
|
760
|
+
response
|
761
|
+
end
|
762
|
+
|
763
|
+
# Lists all tags with UUIDs of servers they are attached to.
|
764
|
+
#
|
765
|
+
# Calls GET /1.2/tags.
|
766
|
+
#
|
767
|
+
# @return Array of tag hashes
|
768
|
+
# @example Return values
|
769
|
+
# [
|
770
|
+
# {
|
771
|
+
# "description": "Development servers",
|
772
|
+
# "name": "DEV",
|
773
|
+
# "servers": {
|
774
|
+
# "server": [
|
775
|
+
# "0077fa3d-32db-4b09-9f5f-30d9e9afb565"
|
776
|
+
# ]
|
777
|
+
# }
|
778
|
+
# }
|
779
|
+
# ]
|
780
|
+
def tags
|
781
|
+
response = get "tags"
|
782
|
+
|
783
|
+
data = JSON.parse response.body
|
784
|
+
data["tags"]["tag"]
|
785
|
+
end
|
786
|
+
|
787
|
+
# Creates new tag.
|
788
|
+
#
|
789
|
+
# Calls POST /1.2/tag.
|
790
|
+
#
|
791
|
+
# _params_ should contain following data
|
792
|
+
# name *required*
|
793
|
+
# description
|
794
|
+
# servers *required*
|
795
|
+
#
|
796
|
+
# @example _params_ hash’s contents
|
797
|
+
# {
|
798
|
+
# "name": "DEV", # required
|
799
|
+
# "description": "Development servers",
|
800
|
+
# "servers": [
|
801
|
+
# "0077fa3d-32db-4b09-9f5f-30d9e9afb565",
|
802
|
+
# ".."
|
803
|
+
# ]
|
804
|
+
# }
|
805
|
+
#
|
806
|
+
# @example Response body
|
807
|
+
# {
|
808
|
+
# "name": "DEV",
|
809
|
+
# "description": "Development servers",
|
810
|
+
# "servers": {
|
811
|
+
# "server": [
|
812
|
+
# "0077fa3d-32db-4b09-9f5f-30d9e9afb565"
|
813
|
+
# ]
|
814
|
+
# }
|
815
|
+
# }
|
816
|
+
#
|
817
|
+
# @param server_uuid [String] UUID of server
|
818
|
+
# @param params [Hash] Parameters for the firewall rule.
|
819
|
+
#
|
820
|
+
# @return Tag parameters as Hash or HTTParty response object in case of error.
|
821
|
+
def create_tag server_uuid, params
|
822
|
+
data = {
|
823
|
+
"tag" => params
|
824
|
+
}
|
825
|
+
temp = data["servers"]
|
826
|
+
data["servers"] = { "server" => temp }
|
827
|
+
|
828
|
+
json = JSON.generate data
|
829
|
+
|
830
|
+
response = post "tag", json
|
831
|
+
return response unless response.code == 201
|
832
|
+
|
833
|
+
body = JSON.parse response.body
|
834
|
+
body["tag"]
|
835
|
+
end
|
836
|
+
|
837
|
+
# Modifies existing tag.
|
838
|
+
#
|
839
|
+
# Calls PUT /1.2/tag/_tag_.
|
840
|
+
#
|
841
|
+
# @note Attributes are same as with create_tag().
|
842
|
+
#
|
843
|
+
# @return Tag parameters as Hash or HTTParty response object in case of error.
|
844
|
+
def modify_tag tag
|
845
|
+
data = {
|
846
|
+
"tag" => params
|
847
|
+
}
|
848
|
+
temp = data["servers"]
|
849
|
+
data["servers"] = { "server" => temp }
|
850
|
+
|
851
|
+
json = JSON.generate data
|
852
|
+
|
853
|
+
response = put "tag/#{tag}", json
|
854
|
+
return response unless response.code == 200
|
855
|
+
|
856
|
+
body = JSON.parse response.body
|
857
|
+
body["tag"]
|
858
|
+
end
|
859
|
+
|
860
|
+
# Deletes existing tag.
|
861
|
+
#
|
862
|
+
# Calls DELETE /1.2/tag/_tag_.
|
863
|
+
#
|
864
|
+
# @return HTTParty response object.
|
865
|
+
def delete_tag tag
|
866
|
+
delete "tag/#{tag}"
|
867
|
+
end
|
868
|
+
|
869
|
+
# Attaches one or more tags to a server.
|
870
|
+
#
|
871
|
+
# Calls POST /1.2/server/_uuid_/tag/_tags_.
|
872
|
+
#
|
873
|
+
# @param server_uuid [String] UUID of the server
|
874
|
+
# @param tags [Array, String] Tags that will be attached to the server
|
875
|
+
#
|
876
|
+
# @return HTTParty response object.
|
877
|
+
def add_tag_to_server server_uuid, tags
|
878
|
+
tag = (tags.respond_to? :join && tags.join(",") || tags)
|
879
|
+
|
880
|
+
post "server/#{server_uuid}/tag/#{tag}"
|
881
|
+
end
|
882
|
+
|
883
|
+
# Removes one or more tags to a server.
|
884
|
+
#
|
885
|
+
# Calls POST /1.2/server/_uuid_/untag/_tags_.
|
886
|
+
#
|
887
|
+
# @param server_uuid [String] UUID of the server
|
888
|
+
# @param tags [Array, String] Tags that will be removed from the server
|
889
|
+
#
|
890
|
+
# @return HTTParty response object.
|
891
|
+
def remove_tag_from_server server_uuid, tags
|
892
|
+
tag = (tags.respond_to? :join && tags.join(",") || tags)
|
893
|
+
|
894
|
+
post "server/#{server_uuid}/untag/#{tag}"
|
895
|
+
end
|
896
|
+
|
897
|
+
# Lists all IP addresses visible to user specified in contructor along with
|
898
|
+
# their information and UUIDs of the servers they are bound to.
|
899
|
+
#
|
900
|
+
# Calls GET /1.2/ip_address.
|
901
|
+
#
|
902
|
+
# @return [Hash] details of IP addresses
|
903
|
+
# @example Return hash
|
904
|
+
# [
|
905
|
+
# {
|
906
|
+
# "access": "private",
|
907
|
+
# "address": "10.0.0.0",
|
908
|
+
# "family": "IPv4",
|
909
|
+
# "ptr_record": "",
|
910
|
+
# "server": "0053cd80-5945-4105-9081-11192806a8f7"
|
911
|
+
# }
|
912
|
+
# ]
|
913
|
+
def ip_addresses
|
914
|
+
response = get "ip_address"
|
915
|
+
body = JSON.parse response.body
|
916
|
+
body["ip_addresses"]["ip_address"]
|
917
|
+
end
|
918
|
+
|
919
|
+
# Gives details of specific IP address.
|
920
|
+
#
|
921
|
+
# Calls GET /1.2/ip_address/_ip_address_.
|
922
|
+
#
|
923
|
+
# @param ip_address [String] IP address to get details for.
|
924
|
+
#
|
925
|
+
# @return [Hash] details of an IP address
|
926
|
+
# @example Return hash
|
927
|
+
# {
|
928
|
+
# "access": "public",
|
929
|
+
# "address": "0.0.0.0"
|
930
|
+
# "family": "IPv4",
|
931
|
+
# "part_of_plan": "yes",
|
932
|
+
# "ptr_record": "test.example.com",
|
933
|
+
# "server": "009d64ef-31d1-4684-a26b-c86c955cbf46",
|
934
|
+
# }
|
935
|
+
def ip_address_details ip_address
|
936
|
+
response = get "ip_address/#{ip_address}"
|
937
|
+
body = JSON.parse response.body
|
938
|
+
body["ip_address"]
|
939
|
+
end
|
940
|
+
|
941
|
+
# Adds new IP address to given server.
|
942
|
+
#
|
943
|
+
# Calls POST /1.2/ip_address.
|
944
|
+
#
|
945
|
+
# @note To add a new IP address, the server must be stopped.
|
946
|
+
# @note Only public IP addresses can be added. There is always exactly one private IP address per server.
|
947
|
+
# @note There is a maximum of five public IP addresses per server.
|
948
|
+
#
|
949
|
+
# @param server_uuid [String] UUID of the server
|
950
|
+
# @param family ["IPv4", "IPv6"] Type of the IP address.
|
951
|
+
#
|
952
|
+
# @see https://www.upcloud.com/api/1.2.3/10-ip-addresses/#assign-ip-address Upcloud’s API
|
953
|
+
#
|
954
|
+
# @return HTTParty response object.
|
955
|
+
def new_ip_address_to_server server_uuid, family: "IPv4"
|
956
|
+
data = {
|
957
|
+
"ip_address" => {
|
958
|
+
"family" => family,
|
959
|
+
"server" => server_uuid
|
960
|
+
}
|
961
|
+
}
|
962
|
+
json = JSON.generate data
|
963
|
+
|
964
|
+
post "ip_address", json
|
965
|
+
end
|
966
|
+
|
967
|
+
# Changes given IP address’s PTR record.
|
968
|
+
#
|
969
|
+
# Calls PUT /1.2/ip_address.
|
970
|
+
#
|
971
|
+
# @note Can only be set to public IP addresses.
|
972
|
+
#
|
973
|
+
# @return HTTParty response object.
|
974
|
+
def change_ip_address_ptr ip_address, ptr_record
|
975
|
+
data = {
|
976
|
+
"ip_address" => {
|
977
|
+
"ptr_record" => ptr_record
|
978
|
+
}
|
979
|
+
}
|
980
|
+
json = JSON.generate data
|
981
|
+
|
982
|
+
put "ip_address/#{ip_address}", json
|
983
|
+
end
|
984
|
+
|
985
|
+
# Removes IP address (from a server).
|
986
|
+
#
|
987
|
+
# Calls DELETE /1.2/_ip_address_.
|
988
|
+
#
|
989
|
+
# @todo I’m fairly sure the API call is wrong, but this is what their documentation says. Please tell me if you test if this one works.
|
990
|
+
#
|
991
|
+
# @return HTTParty response object.
|
992
|
+
def remove_ip_address ip_address
|
993
|
+
delete "#{ip_address}"
|
994
|
+
end
|
995
|
+
|
996
|
+
# Lists prices for specific components that can be tied to a server.
|
997
|
+
#
|
998
|
+
# @see https://www.upcloud.com/api/1.2.3/4-pricing/ Upcloud’s documentation for more details.
|
999
|
+
#
|
1000
|
+
# @return [Array] list of prices per component
|
1001
|
+
def prices
|
1002
|
+
response = get "price"
|
1003
|
+
body = JSON.parse response.body
|
1004
|
+
body["prices"]["zone"]
|
1005
|
+
end
|
1006
|
+
|
1007
|
+
# Lists available zones and their details.
|
1008
|
+
#
|
1009
|
+
# @see https://www.upcloud.com/api/1.2.3/5-zones/ Upcloud’s zone documentation for more details
|
1010
|
+
#
|
1011
|
+
# @return [Array] list of zones
|
1012
|
+
def zones
|
1013
|
+
response = get "zone"
|
1014
|
+
body = JSON.parse response.body
|
1015
|
+
body["zones"]["zone"]
|
1016
|
+
end
|
1017
|
+
|
664
1018
|
private
|
665
1019
|
|
666
1020
|
def get(action)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: upcloud_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samu Voutilainen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
54
|
version: '0'
|
55
55
|
requirements: []
|
56
56
|
rubyforge_project:
|
57
|
-
rubygems_version: 2.5.
|
57
|
+
rubygems_version: 2.5.2
|
58
58
|
signing_key:
|
59
59
|
specification_version: 4
|
60
60
|
summary: Implementation of Upcloud API for VPS management
|