vultr 0.4.3 → 2.0.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/.github/workflows/ci.yml +38 -0
- data/.standard.yml +1 -0
- data/Appraisals +8 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +6 -10
- data/README.md +307 -137
- data/Rakefile +10 -6
- data/bin/console +21 -0
- data/bin/setup +8 -0
- data/bin/test +6 -0
- data/gemfiles/faraday_1.gemfile +12 -0
- data/gemfiles/faraday_1.gemfile.lock +102 -0
- data/gemfiles/faraday_2.gemfile +11 -0
- data/gemfiles/faraday_2.gemfile.lock +82 -0
- data/lib/vultr/client.rb +111 -0
- data/lib/vultr/collection.rb +22 -0
- data/lib/vultr/error.rb +4 -0
- data/lib/vultr/middleware.rb +32 -0
- data/lib/vultr/object.rb +19 -0
- data/lib/vultr/objects/account.rb +4 -0
- data/lib/vultr/objects/application.rb +4 -0
- data/lib/vultr/objects/backup.rb +4 -0
- data/lib/vultr/objects/bare_metal.rb +4 -0
- data/lib/vultr/objects/block_storage.rb +4 -0
- data/lib/vultr/objects/domain.rb +4 -0
- data/lib/vultr/objects/firewall_group.rb +4 -0
- data/lib/vultr/objects/instance.rb +4 -0
- data/lib/vultr/objects/iso.rb +4 -0
- data/lib/vultr/objects/kubernetes_cluster.rb +4 -0
- data/lib/vultr/objects/load_balancer.rb +4 -0
- data/lib/vultr/objects/object_storage.rb +4 -0
- data/lib/vultr/objects/operating_system.rb +4 -0
- data/lib/vultr/objects/plan.rb +4 -0
- data/lib/vultr/objects/private_network.rb +4 -0
- data/lib/vultr/objects/region.rb +4 -0
- data/lib/vultr/objects/reserved_ip.rb +4 -0
- data/lib/vultr/objects/snapshot.rb +4 -0
- data/lib/vultr/objects/ssh_key.rb +4 -0
- data/lib/vultr/objects/startup_script.rb +4 -0
- data/lib/vultr/objects/user.rb +4 -0
- data/lib/vultr/resource.rb +52 -0
- data/lib/vultr/resources/account.rb +7 -0
- data/lib/vultr/resources/applications.rb +8 -0
- data/lib/vultr/resources/backups.rb +12 -0
- data/lib/vultr/resources/bare_metal.rb +79 -0
- data/lib/vultr/resources/block_storage.rb +32 -0
- data/lib/vultr/resources/dns.rb +58 -0
- data/lib/vultr/resources/firewall.rb +42 -0
- data/lib/vultr/resources/instances.rb +145 -0
- data/lib/vultr/resources/iso.rb +25 -0
- data/lib/vultr/resources/kubernetes.rb +61 -0
- data/lib/vultr/resources/load_balancers.rb +50 -0
- data/lib/vultr/resources/object_storage.rb +33 -0
- data/lib/vultr/resources/operating_systems.rb +8 -0
- data/lib/vultr/resources/plans.rb +13 -0
- data/lib/vultr/resources/private_networks.rb +24 -0
- data/lib/vultr/resources/regions.rb +12 -0
- data/lib/vultr/resources/reserved_ips.rb +32 -0
- data/lib/vultr/resources/snapshots.rb +28 -0
- data/lib/vultr/resources/ssh_keys.rb +24 -0
- data/lib/vultr/resources/startup_scripts.rb +24 -0
- data/lib/vultr/resources/users.rb +24 -0
- data/lib/vultr/version.rb +1 -8
- data/lib/vultr.rb +58 -887
- data/test/fixtures/account/info.json +11 -0
- data/test/fixtures/applications/list.json +29 -0
- data/test/fixtures/backups/list.json +18 -0
- data/test/fixtures/backups/retrieve.json +9 -0
- data/test/fixtures/bare_metals/bandwidth.json +12 -0
- data/test/fixtures/bare_metals/create.json +26 -0
- data/test/fixtures/bare_metals/list.json +36 -0
- data/test/fixtures/bare_metals/list_ipv4.json +18 -0
- data/test/fixtures/bare_metals/list_ipv6.json +17 -0
- data/test/fixtures/bare_metals/reinstall.json +25 -0
- data/test/fixtures/bare_metals/retrieve.json +26 -0
- data/test/fixtures/bare_metals/update.json +26 -0
- data/test/fixtures/bare_metals/upgrades.json +47 -0
- data/test/fixtures/bare_metals/user_data.json +5 -0
- data/test/fixtures/bare_metals/vnc.json +5 -0
- data/test/fixtures/block_storage/attach.json +4 -0
- data/test/fixtures/block_storage/create.json +13 -0
- data/test/fixtures/block_storage/detach.json +4 -0
- data/test/fixtures/block_storage/list.json +22 -0
- data/test/fixtures/block_storage/retrieve.json +13 -0
- data/test/fixtures/domains/create.json +6 -0
- data/test/fixtures/domains/dnssec.json +7 -0
- data/test/fixtures/domains/list.json +15 -0
- data/test/fixtures/domains/record.json +10 -0
- data/test/fixtures/domains/records.json +19 -0
- data/test/fixtures/domains/retrieve.json +6 -0
- data/test/fixtures/domains/soa.json +6 -0
- data/test/fixtures/firewall/create.json +11 -0
- data/test/fixtures/firewall/create_rule.json +9 -0
- data/test/fixtures/firewall/delete.json +1 -0
- data/test/fixtures/firewall/delete_rule.json +1 -0
- data/test/fixtures/firewall/list.json +20 -0
- data/test/fixtures/firewall/list_rules.json +22 -0
- data/test/fixtures/firewall/retrieve.json +11 -0
- data/test/fixtures/firewall/retrieve_rule.json +13 -0
- data/test/fixtures/firewall/update.json +1 -0
- data/test/fixtures/instances/attach_iso.json +6 -0
- data/test/fixtures/instances/attach_private_network.json +1 -0
- data/test/fixtures/instances/backup_schedule.json +10 -0
- data/test/fixtures/instances/bandwidth.json +12 -0
- data/test/fixtures/instances/create.json +36 -0
- data/test/fixtures/instances/create_ipv4_reverse.json +1 -0
- data/test/fixtures/instances/create_ipv6_reverse.json +1 -0
- data/test/fixtures/instances/delete.json +1 -0
- data/test/fixtures/instances/delete_ipv4.json +1 -0
- data/test/fixtures/instances/delete_ipv6.json +1 -0
- data/test/fixtures/instances/detach_iso.json +5 -0
- data/test/fixtures/instances/detach_private_network.json +1 -0
- data/test/fixtures/instances/halt.json +1 -0
- data/test/fixtures/instances/halt_instances.json +1 -0
- data/test/fixtures/instances/ipv4.json +9 -0
- data/test/fixtures/instances/ipv6_reverse.json +15 -0
- data/test/fixtures/instances/iso.json +6 -0
- data/test/fixtures/instances/list.json +44 -0
- data/test/fixtures/instances/list_ipv4.json +32 -0
- data/test/fixtures/instances/list_ipv6.json +17 -0
- data/test/fixtures/instances/list_private_networks.json +16 -0
- data/test/fixtures/instances/neighbors.json +6 -0
- data/test/fixtures/instances/reboot.json +1 -0
- data/test/fixtures/instances/reboot_instances.json +1 -0
- data/test/fixtures/instances/reinstall.json +35 -0
- data/test/fixtures/instances/restore.json +7 -0
- data/test/fixtures/instances/retrieve.json +35 -0
- data/test/fixtures/instances/set_backup_schedule.json +1 -0
- data/test/fixtures/instances/set_default_reverse_dns_entry.json +1 -0
- data/test/fixtures/instances/start.json +1 -0
- data/test/fixtures/instances/start_instances.json +1 -0
- data/test/fixtures/instances/update.json +1 -0
- data/test/fixtures/instances/upgrades.json +55 -0
- data/test/fixtures/instances/user_data.json +5 -0
- data/test/fixtures/isos/create.json +8 -0
- data/test/fixtures/isos/list.json +20 -0
- data/test/fixtures/isos/list_public.json +17 -0
- data/test/fixtures/isos/retrieve.json +11 -0
- data/test/fixtures/kubernetes/config.json +3 -0
- data/test/fixtures/kubernetes/create.json +39 -0
- data/test/fixtures/kubernetes/create_node_pool.json +25 -0
- data/test/fixtures/kubernetes/list.json +85 -0
- data/test/fixtures/kubernetes/list_node_pools.json +56 -0
- data/test/fixtures/kubernetes/list_resources.json +26 -0
- data/test/fixtures/kubernetes/retrieve.json +39 -0
- data/test/fixtures/kubernetes/retrieve_node_pool.json +25 -0
- data/test/fixtures/kubernetes/update_node_pool.json +19 -0
- data/test/fixtures/load_balancers/create.json +48 -0
- data/test/fixtures/load_balancers/create_forwarding_rule.json +1 -0
- data/test/fixtures/load_balancers/delete.json +1 -0
- data/test/fixtures/load_balancers/delete_forwarding_rule.json +1 -0
- data/test/fixtures/load_balancers/list.json +57 -0
- data/test/fixtures/load_balancers/list_firewall_rules.json +17 -0
- data/test/fixtures/load_balancers/list_forwarding_rules.json +18 -0
- data/test/fixtures/load_balancers/retrieve.json +48 -0
- data/test/fixtures/load_balancers/retrieve_firewall_rule.json +8 -0
- data/test/fixtures/load_balancers/retrieve_forwarding_rule.json +9 -0
- data/test/fixtures/load_balancers/update.json +1 -0
- data/test/fixtures/object_storage/create.json +14 -0
- data/test/fixtures/object_storage/delete.json +1 -0
- data/test/fixtures/object_storage/list.json +22 -0
- data/test/fixtures/object_storage/list_clusters.json +17 -0
- data/test/fixtures/object_storage/regenerate_keys.json +7 -0
- data/test/fixtures/object_storage/retrieve.json +13 -0
- data/test/fixtures/object_storage/update.json +1 -0
- data/test/fixtures/operating_systems/list.json +17 -0
- data/test/fixtures/plans/list.json +22 -0
- data/test/fixtures/plans/list_metal.json +24 -0
- data/test/fixtures/private_networks/create.json +10 -0
- data/test/fixtures/private_networks/delete.json +1 -0
- data/test/fixtures/private_networks/list.json +19 -0
- data/test/fixtures/private_networks/retrieve.json +10 -0
- data/test/fixtures/private_networks/update.json +1 -0
- data/test/fixtures/regions/list.json +20 -0
- data/test/fixtures/regions/list_availability.json +24 -0
- data/test/fixtures/reserved_ips/attach.json +1 -0
- data/test/fixtures/reserved_ips/convert.json +11 -0
- data/test/fixtures/reserved_ips/create.json +11 -0
- data/test/fixtures/reserved_ips/delete.json +1 -0
- data/test/fixtures/reserved_ips/detach.json +1 -0
- data/test/fixtures/reserved_ips/list.json +29 -0
- data/test/fixtures/reserved_ips/retrieve.json +11 -0
- data/test/fixtures/snapshots/create.json +11 -0
- data/test/fixtures/snapshots/create_from_url.json +11 -0
- data/test/fixtures/snapshots/delete.json +1 -0
- data/test/fixtures/snapshots/list.json +20 -0
- data/test/fixtures/snapshots/retrieve.json +11 -0
- data/test/fixtures/snapshots/update.json +1 -0
- data/test/fixtures/ssh_keys/create.json +8 -0
- data/test/fixtures/ssh_keys/delete.json +1 -0
- data/test/fixtures/ssh_keys/list.json +17 -0
- data/test/fixtures/ssh_keys/retrieve.json +8 -0
- data/test/fixtures/ssh_keys/update.json +1 -0
- data/test/fixtures/startup_scripts/create.json +10 -0
- data/test/fixtures/startup_scripts/delete.json +1 -0
- data/test/fixtures/startup_scripts/list.json +18 -0
- data/test/fixtures/startup_scripts/retrieve.json +10 -0
- data/test/fixtures/startup_scripts/update.json +1 -0
- data/test/fixtures/users/create.json +9 -0
- data/test/fixtures/users/delete.json +1 -0
- data/test/fixtures/users/list.json +29 -0
- data/test/fixtures/users/retrieve.json +20 -0
- data/test/fixtures/users/update.json +1 -0
- data/test/test_helper.rb +18 -5
- data/test/vultr/client_test.rb +8 -0
- data/test/vultr/object_test.rb +21 -0
- data/test/vultr/resources/account_test.rb +12 -0
- data/test/vultr/resources/applications_test.rb +15 -0
- data/test/vultr/resources/backups_test.rb +24 -0
- data/test/vultr/resources/bare_metal_test.rb +267 -0
- data/test/vultr/resources/block_storage_test.rb +85 -0
- data/test/vultr/resources/dns_test.rb +134 -0
- data/test/vultr/resources/firewall_test.rb +88 -0
- data/test/vultr/resources/instances_test.rb +325 -0
- data/test/vultr/resources/iso_test.rb +58 -0
- data/test/vultr/resources/kubernetes_test.rb +185 -0
- data/test/vultr/resources/load_balancers_test.rb +110 -0
- data/test/vultr/resources/object_storage_test.rb +71 -0
- data/test/vultr/resources/operating_systems_test.rb +15 -0
- data/test/vultr/resources/plans_test.rb +25 -0
- data/test/vultr/resources/private_networks_test.rb +50 -0
- data/test/vultr/resources/regions_test.rb +26 -0
- data/test/vultr/resources/reserved_ips_test.rb +67 -0
- data/test/vultr/resources/snapshots_test.rb +60 -0
- data/test/vultr/resources/ssh_keys_test.rb +50 -0
- data/test/vultr/resources/startup_scripts_test.rb +50 -0
- data/test/vultr/resources/users_test.rb +50 -0
- data/vultr.gemspec +15 -17
- metadata +237 -54
- data/.travis.yml +0 -26
- data/test/vultr/vultr_account_test.rb +0 -29
- data/test/vultr/vultr_app_test.rb +0 -26
- data/test/vultr/vultr_backup_test.rb +0 -22
- data/test/vultr/vultr_iso_test.rb +0 -27
- data/test/vultr/vultr_os_test.rb +0 -21
- data/test/vultr/vultr_plan_test.rb +0 -22
- data/test/vultr/vultr_region_test.rb +0 -33
- data/test/vultr/vultr_snapshot_test.rb +0 -30
- data/test/vultr/vultr_sshkey_test.rb +0 -50
- data/test/vultr/vultr_startupscript_test.rb +0 -53
@@ -0,0 +1,102 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
vultr (2.0.0)
|
5
|
+
faraday (>= 1.0, < 3.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
appraisal (2.5.0)
|
11
|
+
bundler
|
12
|
+
rake
|
13
|
+
thor (>= 0.14.0)
|
14
|
+
ast (2.4.2)
|
15
|
+
base64 (0.2.0)
|
16
|
+
faraday (1.10.3)
|
17
|
+
faraday-em_http (~> 1.0)
|
18
|
+
faraday-em_synchrony (~> 1.0)
|
19
|
+
faraday-excon (~> 1.1)
|
20
|
+
faraday-httpclient (~> 1.0)
|
21
|
+
faraday-multipart (~> 1.0)
|
22
|
+
faraday-net_http (~> 1.0)
|
23
|
+
faraday-net_http_persistent (~> 1.0)
|
24
|
+
faraday-patron (~> 1.0)
|
25
|
+
faraday-rack (~> 1.0)
|
26
|
+
faraday-retry (~> 1.0)
|
27
|
+
ruby2_keywords (>= 0.0.4)
|
28
|
+
faraday-em_http (1.0.0)
|
29
|
+
faraday-em_synchrony (1.0.0)
|
30
|
+
faraday-excon (1.1.0)
|
31
|
+
faraday-httpclient (1.0.1)
|
32
|
+
faraday-multipart (1.0.4)
|
33
|
+
multipart-post (~> 2)
|
34
|
+
faraday-net_http (1.0.1)
|
35
|
+
faraday-net_http_persistent (1.2.0)
|
36
|
+
faraday-patron (1.0.0)
|
37
|
+
faraday-rack (1.0.0)
|
38
|
+
faraday-retry (1.0.3)
|
39
|
+
json (2.7.2)
|
40
|
+
language_server-protocol (3.17.0.3)
|
41
|
+
lint_roller (1.1.0)
|
42
|
+
minitest (5.23.1)
|
43
|
+
multipart-post (2.4.1)
|
44
|
+
parallel (1.24.0)
|
45
|
+
parser (3.3.2.0)
|
46
|
+
ast (~> 2.4.1)
|
47
|
+
racc
|
48
|
+
racc (1.8.0)
|
49
|
+
rainbow (3.1.1)
|
50
|
+
rake (13.2.1)
|
51
|
+
regexp_parser (2.9.2)
|
52
|
+
rexml (3.2.8)
|
53
|
+
strscan (>= 3.0.9)
|
54
|
+
rubocop (1.63.5)
|
55
|
+
json (~> 2.3)
|
56
|
+
language_server-protocol (>= 3.17.0)
|
57
|
+
parallel (~> 1.10)
|
58
|
+
parser (>= 3.3.0.2)
|
59
|
+
rainbow (>= 2.2.2, < 4.0)
|
60
|
+
regexp_parser (>= 1.8, < 3.0)
|
61
|
+
rexml (>= 3.2.5, < 4.0)
|
62
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
63
|
+
ruby-progressbar (~> 1.7)
|
64
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
65
|
+
rubocop-ast (1.31.3)
|
66
|
+
parser (>= 3.3.1.0)
|
67
|
+
rubocop-performance (1.21.0)
|
68
|
+
rubocop (>= 1.48.1, < 2.0)
|
69
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
70
|
+
ruby-progressbar (1.13.0)
|
71
|
+
ruby2_keywords (0.0.5)
|
72
|
+
standard (1.36.0)
|
73
|
+
language_server-protocol (~> 3.17.0.2)
|
74
|
+
lint_roller (~> 1.0)
|
75
|
+
rubocop (~> 1.63.0)
|
76
|
+
standard-custom (~> 1.0.0)
|
77
|
+
standard-performance (~> 1.4)
|
78
|
+
standard-custom (1.0.2)
|
79
|
+
lint_roller (~> 1.0)
|
80
|
+
rubocop (~> 1.50)
|
81
|
+
standard-performance (1.4.0)
|
82
|
+
lint_roller (~> 1.1)
|
83
|
+
rubocop-performance (~> 1.21.0)
|
84
|
+
strscan (3.1.0)
|
85
|
+
thor (1.3.1)
|
86
|
+
unicode-display_width (2.5.0)
|
87
|
+
|
88
|
+
PLATFORMS
|
89
|
+
ruby
|
90
|
+
x86_64-darwin-23
|
91
|
+
|
92
|
+
DEPENDENCIES
|
93
|
+
appraisal
|
94
|
+
base64 (~> 0.2.0)
|
95
|
+
faraday (~> 1.10)
|
96
|
+
minitest (>= 5.0.5)
|
97
|
+
rake
|
98
|
+
standard
|
99
|
+
vultr!
|
100
|
+
|
101
|
+
BUNDLED WITH
|
102
|
+
2.5.10
|
@@ -0,0 +1,82 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
vultr (2.0.0)
|
5
|
+
faraday (>= 1.0, < 3.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
appraisal (2.5.0)
|
11
|
+
bundler
|
12
|
+
rake
|
13
|
+
thor (>= 0.14.0)
|
14
|
+
ast (2.4.2)
|
15
|
+
faraday (2.9.0)
|
16
|
+
faraday-net_http (>= 2.0, < 3.2)
|
17
|
+
faraday-net_http (3.1.0)
|
18
|
+
net-http
|
19
|
+
json (2.7.2)
|
20
|
+
language_server-protocol (3.17.0.3)
|
21
|
+
lint_roller (1.1.0)
|
22
|
+
minitest (5.23.1)
|
23
|
+
net-http (0.4.1)
|
24
|
+
uri
|
25
|
+
parallel (1.24.0)
|
26
|
+
parser (3.3.2.0)
|
27
|
+
ast (~> 2.4.1)
|
28
|
+
racc
|
29
|
+
racc (1.8.0)
|
30
|
+
rainbow (3.1.1)
|
31
|
+
rake (13.2.1)
|
32
|
+
regexp_parser (2.9.2)
|
33
|
+
rexml (3.2.8)
|
34
|
+
strscan (>= 3.0.9)
|
35
|
+
rubocop (1.63.5)
|
36
|
+
json (~> 2.3)
|
37
|
+
language_server-protocol (>= 3.17.0)
|
38
|
+
parallel (~> 1.10)
|
39
|
+
parser (>= 3.3.0.2)
|
40
|
+
rainbow (>= 2.2.2, < 4.0)
|
41
|
+
regexp_parser (>= 1.8, < 3.0)
|
42
|
+
rexml (>= 3.2.5, < 4.0)
|
43
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
44
|
+
ruby-progressbar (~> 1.7)
|
45
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
46
|
+
rubocop-ast (1.31.3)
|
47
|
+
parser (>= 3.3.1.0)
|
48
|
+
rubocop-performance (1.21.0)
|
49
|
+
rubocop (>= 1.48.1, < 2.0)
|
50
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
51
|
+
ruby-progressbar (1.13.0)
|
52
|
+
standard (1.36.0)
|
53
|
+
language_server-protocol (~> 3.17.0.2)
|
54
|
+
lint_roller (~> 1.0)
|
55
|
+
rubocop (~> 1.63.0)
|
56
|
+
standard-custom (~> 1.0.0)
|
57
|
+
standard-performance (~> 1.4)
|
58
|
+
standard-custom (1.0.2)
|
59
|
+
lint_roller (~> 1.0)
|
60
|
+
rubocop (~> 1.50)
|
61
|
+
standard-performance (1.4.0)
|
62
|
+
lint_roller (~> 1.1)
|
63
|
+
rubocop-performance (~> 1.21.0)
|
64
|
+
strscan (3.1.0)
|
65
|
+
thor (1.3.1)
|
66
|
+
unicode-display_width (2.5.0)
|
67
|
+
uri (0.13.0)
|
68
|
+
|
69
|
+
PLATFORMS
|
70
|
+
ruby
|
71
|
+
x86_64-darwin-23
|
72
|
+
|
73
|
+
DEPENDENCIES
|
74
|
+
appraisal
|
75
|
+
faraday (~> 2.0)
|
76
|
+
minitest (>= 5.0.5)
|
77
|
+
rake
|
78
|
+
standard
|
79
|
+
vultr!
|
80
|
+
|
81
|
+
BUNDLED WITH
|
82
|
+
2.5.10
|
data/lib/vultr/client.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
module Vultr
|
2
|
+
class Client
|
3
|
+
BASE_URL = "https://api.vultr.com/v2"
|
4
|
+
|
5
|
+
attr_reader :api_key, :adapter
|
6
|
+
|
7
|
+
def initialize(api_key:, adapter: Faraday.default_adapter, stubs: nil)
|
8
|
+
@api_key = api_key
|
9
|
+
@adapter = adapter
|
10
|
+
|
11
|
+
# Test stubs for requests
|
12
|
+
@stubs = stubs
|
13
|
+
end
|
14
|
+
|
15
|
+
def account
|
16
|
+
AccountResource.new(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def applications
|
20
|
+
ApplicationsResource.new(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def backups
|
24
|
+
BackupsResource.new(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
def bare_metal
|
28
|
+
BareMetalResource.new(self)
|
29
|
+
end
|
30
|
+
|
31
|
+
def block_storage
|
32
|
+
BlockStorageResource.new(self)
|
33
|
+
end
|
34
|
+
|
35
|
+
def dns
|
36
|
+
DnsResource.new(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
def firewall
|
40
|
+
FirewallResource.new(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def instances
|
44
|
+
InstancesResource.new(self)
|
45
|
+
end
|
46
|
+
|
47
|
+
def iso
|
48
|
+
IsoResource.new(self)
|
49
|
+
end
|
50
|
+
|
51
|
+
def kubernetes
|
52
|
+
KubernetesResource.new(self)
|
53
|
+
end
|
54
|
+
|
55
|
+
def load_balancers
|
56
|
+
LoadBalancersResource.new(self)
|
57
|
+
end
|
58
|
+
|
59
|
+
def object_storage
|
60
|
+
ObjectStorageResource.new(self)
|
61
|
+
end
|
62
|
+
|
63
|
+
def operating_systems
|
64
|
+
OperatingSystemsResource.new(self)
|
65
|
+
end
|
66
|
+
|
67
|
+
def plans
|
68
|
+
PlansResource.new(self)
|
69
|
+
end
|
70
|
+
|
71
|
+
def private_networks
|
72
|
+
PrivateNetworksResource.new(self)
|
73
|
+
end
|
74
|
+
|
75
|
+
def reserved_ips
|
76
|
+
ReservedIpsResource.new(self)
|
77
|
+
end
|
78
|
+
|
79
|
+
def regions
|
80
|
+
RegionsResource.new(self)
|
81
|
+
end
|
82
|
+
|
83
|
+
def snapshots
|
84
|
+
SnapshotsResource.new(self)
|
85
|
+
end
|
86
|
+
|
87
|
+
def ssh_keys
|
88
|
+
SshKeysResource.new(self)
|
89
|
+
end
|
90
|
+
|
91
|
+
def startup_scripts
|
92
|
+
StartupScriptsResource.new(self)
|
93
|
+
end
|
94
|
+
|
95
|
+
def users
|
96
|
+
UserResource.new(self)
|
97
|
+
end
|
98
|
+
|
99
|
+
def connection
|
100
|
+
@connection ||= Faraday.new(BASE_URL) do |conn|
|
101
|
+
conn.request :authorization, :Bearer, api_key
|
102
|
+
conn.request :json
|
103
|
+
|
104
|
+
conn.response :vultr
|
105
|
+
conn.response :json, content_type: "application/json"
|
106
|
+
|
107
|
+
conn.adapter adapter, @stubs
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Vultr
|
2
|
+
class Collection
|
3
|
+
attr_reader :data, :total, :next_cursor, :prev_cursor
|
4
|
+
|
5
|
+
def self.from_response(response, key:, type:)
|
6
|
+
body = response.body
|
7
|
+
new(
|
8
|
+
data: body[key].map { |attrs| type.new(attrs) },
|
9
|
+
total: body.dig("meta", "total"),
|
10
|
+
next_cursor: body.dig("meta", "links", "next"),
|
11
|
+
prev_cursor: body.dig("meta", "links", "prev")
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(data:, total:, next_cursor:, prev_cursor:)
|
16
|
+
@data = data
|
17
|
+
@total = total
|
18
|
+
@next_cursor = next_cursor.empty? ? nil : next_cursor
|
19
|
+
@prev_cursor = prev_cursor.empty? ? nil : prev_cursor
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/vultr/error.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "time"
|
2
|
+
|
3
|
+
module Vultr
|
4
|
+
class Middleware < Faraday::Middleware
|
5
|
+
ISO_DATE_FORMAT = /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|((\+|-)\d{2}:?\d{2}))\Z/xm
|
6
|
+
|
7
|
+
# This method will be called when the response is being processed.
|
8
|
+
# You can alter it as you like, accessing things like response_body, response_headers, and more.
|
9
|
+
# Refer to Faraday::Env for a list of accessible fields:
|
10
|
+
# https://github.com/lostisland/faraday/blob/main/lib/faraday/options/env.rb
|
11
|
+
#
|
12
|
+
# @param env [Faraday::Env] the environment of the response being processed.
|
13
|
+
def on_complete(env)
|
14
|
+
parse_dates! env[:body]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse_dates!(value)
|
20
|
+
case value
|
21
|
+
when Hash
|
22
|
+
value.each { |key, element| value[key] = parse_dates!(element) }
|
23
|
+
when Array
|
24
|
+
value.each_with_index { |element, index| value[index] = parse_dates!(element) }
|
25
|
+
when ISO_DATE_FORMAT
|
26
|
+
Time.parse(value)
|
27
|
+
else
|
28
|
+
value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/vultr/object.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "ostruct"
|
2
|
+
|
3
|
+
module Vultr
|
4
|
+
class Object < OpenStruct
|
5
|
+
def initialize(attributes)
|
6
|
+
super(to_ostruct(attributes))
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_ostruct(obj)
|
10
|
+
if obj.is_a?(Hash)
|
11
|
+
OpenStruct.new(obj.map { |key, val| [key, to_ostruct(val)] }.to_h)
|
12
|
+
elsif obj.is_a?(Array)
|
13
|
+
obj.map { |o| to_ostruct(o) }
|
14
|
+
else # Assumed to be a primitive value
|
15
|
+
obj
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Vultr
|
2
|
+
class Resource
|
3
|
+
attr_reader :client
|
4
|
+
|
5
|
+
def initialize(client)
|
6
|
+
@client = client
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def get_request(url, params: {}, headers: {})
|
12
|
+
handle_response client.connection.get(url, params, headers)
|
13
|
+
end
|
14
|
+
|
15
|
+
def post_request(url, body:, headers: {})
|
16
|
+
handle_response client.connection.post(url, body, headers)
|
17
|
+
end
|
18
|
+
|
19
|
+
def patch_request(url, body:, headers: {})
|
20
|
+
handle_response client.connection.patch(url, body, headers)
|
21
|
+
end
|
22
|
+
|
23
|
+
def put_request(url, body:, headers: {})
|
24
|
+
handle_response client.connection.put(url, body, headers)
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_request(url, params: {}, headers: {})
|
28
|
+
handle_response client.connection.delete(url, params, headers)
|
29
|
+
end
|
30
|
+
|
31
|
+
def handle_response(response)
|
32
|
+
case response.status
|
33
|
+
when 400
|
34
|
+
raise Error, "Your request was malformed. #{response.body["error"]}"
|
35
|
+
when 401
|
36
|
+
raise Error, "You did not supply valid authentication credentials. #{response.body["error"]}"
|
37
|
+
when 403
|
38
|
+
raise Error, "You are not allowed to perform that action. #{response.body["error"]}"
|
39
|
+
when 404
|
40
|
+
raise Error, "No results were found for your request. #{response.body["error"]}"
|
41
|
+
when 429
|
42
|
+
raise Error, "Your request exceeded the API rate limit. #{response.body["error"]}"
|
43
|
+
when 500
|
44
|
+
raise Error, "We were unable to perform the request due to server-side problems. #{response.body["error"]}"
|
45
|
+
when 503
|
46
|
+
raise Error, "You have been rate limited for sending more than 20 requests per second. #{response.body["error"]}"
|
47
|
+
end
|
48
|
+
|
49
|
+
response
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Vultr
|
2
|
+
class BackupsResource < Resource
|
3
|
+
def list(**params)
|
4
|
+
response = get_request("backups", params: params)
|
5
|
+
Collection.from_response(response, key: "backups", type: Backup)
|
6
|
+
end
|
7
|
+
|
8
|
+
def retrieve(backup_id:)
|
9
|
+
Backup.new get_request("backups/#{backup_id}").body.dig("backup")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Vultr
|
2
|
+
class BareMetalResource < Resource
|
3
|
+
def list(**params)
|
4
|
+
response = get_request("bare-metals", params: params)
|
5
|
+
Collection.from_response(response, key: "bare_metals", type: BareMetal)
|
6
|
+
end
|
7
|
+
|
8
|
+
def create(**attributes)
|
9
|
+
BareMetal.new post_request("bare-metals", body: attributes).body.dig("bare_metal")
|
10
|
+
end
|
11
|
+
|
12
|
+
def retrieve(baremetal_id:)
|
13
|
+
BareMetal.new get_request("bare-metals/#{baremetal_id}").body.dig("bare_metal")
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(baremetal_id:, **attributes)
|
17
|
+
BareMetal.new patch_request("bare-metals/#{baremetal_id}", body: attributes).body.dig("bare_metal")
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(baremetal_id:)
|
21
|
+
delete_request("bare-metals/#{baremetal_id}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def start(baremetal_id:)
|
25
|
+
post_request("bare-metals/#{baremetal_id}/start", body: {})
|
26
|
+
end
|
27
|
+
|
28
|
+
def reboot(baremetal_id:)
|
29
|
+
post_request("bare-metals/#{baremetal_id}/reboot", body: {})
|
30
|
+
end
|
31
|
+
|
32
|
+
def reinstall(baremetal_id:)
|
33
|
+
BareMetal.new post_request("bare-metals/#{baremetal_id}/reinstall", body: {}).body.dig("bare_metal")
|
34
|
+
end
|
35
|
+
|
36
|
+
def halt(baremetal_id:)
|
37
|
+
post_request("bare-metals/#{baremetal_id}/halt", body: {})
|
38
|
+
end
|
39
|
+
|
40
|
+
def bandwidth(baremetal_id:)
|
41
|
+
Object.new get_request("bare-metals/#{baremetal_id}/bandwidth").body.dig("bandwidth")
|
42
|
+
end
|
43
|
+
|
44
|
+
def user_data(baremetal_id:)
|
45
|
+
Object.new get_request("bare-metals/#{baremetal_id}/user-data").body.dig("user_data")
|
46
|
+
end
|
47
|
+
|
48
|
+
def upgrades(baremetal_id:, **params)
|
49
|
+
Object.new get_request("bare-metals/#{baremetal_id}/upgrades", params: params).body.dig("upgrades")
|
50
|
+
end
|
51
|
+
|
52
|
+
def vnc(baremetal_id:)
|
53
|
+
Object.new get_request("bare-metals/#{baremetal_id}/vnc").body.dig("vnc")
|
54
|
+
end
|
55
|
+
|
56
|
+
def list_ipv4(baremetal_id:)
|
57
|
+
response = get_request("bare-metals/#{baremetal_id}/ipv4")
|
58
|
+
Collection.from_response(response, key: "ipv4s", type: Object)
|
59
|
+
end
|
60
|
+
|
61
|
+
def list_ipv6(baremetal_id:)
|
62
|
+
response = get_request("bare-metals/#{baremetal_id}/ipv6")
|
63
|
+
Collection.from_response(response, key: "ipv6s", type: Object)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Bulk operations
|
67
|
+
def halt_instances(baremetal_ids:)
|
68
|
+
post_request("bare-metals/halt", body: {baremetal_ids: Array(baremetal_ids)})
|
69
|
+
end
|
70
|
+
|
71
|
+
def reboot_instances(baremetal_ids:)
|
72
|
+
post_request("bare-metals/reboot", body: {baremetal_ids: Array(baremetal_ids)})
|
73
|
+
end
|
74
|
+
|
75
|
+
def start_instances(baremetal_ids:)
|
76
|
+
post_request("bare-metals/start", body: {baremetal_ids: Array(baremetal_ids)})
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|