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.
Files changed (241) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +38 -0
  3. data/.standard.yml +1 -0
  4. data/Appraisals +8 -0
  5. data/CHANGELOG.md +9 -0
  6. data/Gemfile +6 -10
  7. data/README.md +307 -137
  8. data/Rakefile +10 -6
  9. data/bin/console +21 -0
  10. data/bin/setup +8 -0
  11. data/bin/test +6 -0
  12. data/gemfiles/faraday_1.gemfile +12 -0
  13. data/gemfiles/faraday_1.gemfile.lock +102 -0
  14. data/gemfiles/faraday_2.gemfile +11 -0
  15. data/gemfiles/faraday_2.gemfile.lock +82 -0
  16. data/lib/vultr/client.rb +111 -0
  17. data/lib/vultr/collection.rb +22 -0
  18. data/lib/vultr/error.rb +4 -0
  19. data/lib/vultr/middleware.rb +32 -0
  20. data/lib/vultr/object.rb +19 -0
  21. data/lib/vultr/objects/account.rb +4 -0
  22. data/lib/vultr/objects/application.rb +4 -0
  23. data/lib/vultr/objects/backup.rb +4 -0
  24. data/lib/vultr/objects/bare_metal.rb +4 -0
  25. data/lib/vultr/objects/block_storage.rb +4 -0
  26. data/lib/vultr/objects/domain.rb +4 -0
  27. data/lib/vultr/objects/firewall_group.rb +4 -0
  28. data/lib/vultr/objects/instance.rb +4 -0
  29. data/lib/vultr/objects/iso.rb +4 -0
  30. data/lib/vultr/objects/kubernetes_cluster.rb +4 -0
  31. data/lib/vultr/objects/load_balancer.rb +4 -0
  32. data/lib/vultr/objects/object_storage.rb +4 -0
  33. data/lib/vultr/objects/operating_system.rb +4 -0
  34. data/lib/vultr/objects/plan.rb +4 -0
  35. data/lib/vultr/objects/private_network.rb +4 -0
  36. data/lib/vultr/objects/region.rb +4 -0
  37. data/lib/vultr/objects/reserved_ip.rb +4 -0
  38. data/lib/vultr/objects/snapshot.rb +4 -0
  39. data/lib/vultr/objects/ssh_key.rb +4 -0
  40. data/lib/vultr/objects/startup_script.rb +4 -0
  41. data/lib/vultr/objects/user.rb +4 -0
  42. data/lib/vultr/resource.rb +52 -0
  43. data/lib/vultr/resources/account.rb +7 -0
  44. data/lib/vultr/resources/applications.rb +8 -0
  45. data/lib/vultr/resources/backups.rb +12 -0
  46. data/lib/vultr/resources/bare_metal.rb +79 -0
  47. data/lib/vultr/resources/block_storage.rb +32 -0
  48. data/lib/vultr/resources/dns.rb +58 -0
  49. data/lib/vultr/resources/firewall.rb +42 -0
  50. data/lib/vultr/resources/instances.rb +145 -0
  51. data/lib/vultr/resources/iso.rb +25 -0
  52. data/lib/vultr/resources/kubernetes.rb +61 -0
  53. data/lib/vultr/resources/load_balancers.rb +50 -0
  54. data/lib/vultr/resources/object_storage.rb +33 -0
  55. data/lib/vultr/resources/operating_systems.rb +8 -0
  56. data/lib/vultr/resources/plans.rb +13 -0
  57. data/lib/vultr/resources/private_networks.rb +24 -0
  58. data/lib/vultr/resources/regions.rb +12 -0
  59. data/lib/vultr/resources/reserved_ips.rb +32 -0
  60. data/lib/vultr/resources/snapshots.rb +28 -0
  61. data/lib/vultr/resources/ssh_keys.rb +24 -0
  62. data/lib/vultr/resources/startup_scripts.rb +24 -0
  63. data/lib/vultr/resources/users.rb +24 -0
  64. data/lib/vultr/version.rb +1 -8
  65. data/lib/vultr.rb +58 -887
  66. data/test/fixtures/account/info.json +11 -0
  67. data/test/fixtures/applications/list.json +29 -0
  68. data/test/fixtures/backups/list.json +18 -0
  69. data/test/fixtures/backups/retrieve.json +9 -0
  70. data/test/fixtures/bare_metals/bandwidth.json +12 -0
  71. data/test/fixtures/bare_metals/create.json +26 -0
  72. data/test/fixtures/bare_metals/list.json +36 -0
  73. data/test/fixtures/bare_metals/list_ipv4.json +18 -0
  74. data/test/fixtures/bare_metals/list_ipv6.json +17 -0
  75. data/test/fixtures/bare_metals/reinstall.json +25 -0
  76. data/test/fixtures/bare_metals/retrieve.json +26 -0
  77. data/test/fixtures/bare_metals/update.json +26 -0
  78. data/test/fixtures/bare_metals/upgrades.json +47 -0
  79. data/test/fixtures/bare_metals/user_data.json +5 -0
  80. data/test/fixtures/bare_metals/vnc.json +5 -0
  81. data/test/fixtures/block_storage/attach.json +4 -0
  82. data/test/fixtures/block_storage/create.json +13 -0
  83. data/test/fixtures/block_storage/detach.json +4 -0
  84. data/test/fixtures/block_storage/list.json +22 -0
  85. data/test/fixtures/block_storage/retrieve.json +13 -0
  86. data/test/fixtures/domains/create.json +6 -0
  87. data/test/fixtures/domains/dnssec.json +7 -0
  88. data/test/fixtures/domains/list.json +15 -0
  89. data/test/fixtures/domains/record.json +10 -0
  90. data/test/fixtures/domains/records.json +19 -0
  91. data/test/fixtures/domains/retrieve.json +6 -0
  92. data/test/fixtures/domains/soa.json +6 -0
  93. data/test/fixtures/firewall/create.json +11 -0
  94. data/test/fixtures/firewall/create_rule.json +9 -0
  95. data/test/fixtures/firewall/delete.json +1 -0
  96. data/test/fixtures/firewall/delete_rule.json +1 -0
  97. data/test/fixtures/firewall/list.json +20 -0
  98. data/test/fixtures/firewall/list_rules.json +22 -0
  99. data/test/fixtures/firewall/retrieve.json +11 -0
  100. data/test/fixtures/firewall/retrieve_rule.json +13 -0
  101. data/test/fixtures/firewall/update.json +1 -0
  102. data/test/fixtures/instances/attach_iso.json +6 -0
  103. data/test/fixtures/instances/attach_private_network.json +1 -0
  104. data/test/fixtures/instances/backup_schedule.json +10 -0
  105. data/test/fixtures/instances/bandwidth.json +12 -0
  106. data/test/fixtures/instances/create.json +36 -0
  107. data/test/fixtures/instances/create_ipv4_reverse.json +1 -0
  108. data/test/fixtures/instances/create_ipv6_reverse.json +1 -0
  109. data/test/fixtures/instances/delete.json +1 -0
  110. data/test/fixtures/instances/delete_ipv4.json +1 -0
  111. data/test/fixtures/instances/delete_ipv6.json +1 -0
  112. data/test/fixtures/instances/detach_iso.json +5 -0
  113. data/test/fixtures/instances/detach_private_network.json +1 -0
  114. data/test/fixtures/instances/halt.json +1 -0
  115. data/test/fixtures/instances/halt_instances.json +1 -0
  116. data/test/fixtures/instances/ipv4.json +9 -0
  117. data/test/fixtures/instances/ipv6_reverse.json +15 -0
  118. data/test/fixtures/instances/iso.json +6 -0
  119. data/test/fixtures/instances/list.json +44 -0
  120. data/test/fixtures/instances/list_ipv4.json +32 -0
  121. data/test/fixtures/instances/list_ipv6.json +17 -0
  122. data/test/fixtures/instances/list_private_networks.json +16 -0
  123. data/test/fixtures/instances/neighbors.json +6 -0
  124. data/test/fixtures/instances/reboot.json +1 -0
  125. data/test/fixtures/instances/reboot_instances.json +1 -0
  126. data/test/fixtures/instances/reinstall.json +35 -0
  127. data/test/fixtures/instances/restore.json +7 -0
  128. data/test/fixtures/instances/retrieve.json +35 -0
  129. data/test/fixtures/instances/set_backup_schedule.json +1 -0
  130. data/test/fixtures/instances/set_default_reverse_dns_entry.json +1 -0
  131. data/test/fixtures/instances/start.json +1 -0
  132. data/test/fixtures/instances/start_instances.json +1 -0
  133. data/test/fixtures/instances/update.json +1 -0
  134. data/test/fixtures/instances/upgrades.json +55 -0
  135. data/test/fixtures/instances/user_data.json +5 -0
  136. data/test/fixtures/isos/create.json +8 -0
  137. data/test/fixtures/isos/list.json +20 -0
  138. data/test/fixtures/isos/list_public.json +17 -0
  139. data/test/fixtures/isos/retrieve.json +11 -0
  140. data/test/fixtures/kubernetes/config.json +3 -0
  141. data/test/fixtures/kubernetes/create.json +39 -0
  142. data/test/fixtures/kubernetes/create_node_pool.json +25 -0
  143. data/test/fixtures/kubernetes/list.json +85 -0
  144. data/test/fixtures/kubernetes/list_node_pools.json +56 -0
  145. data/test/fixtures/kubernetes/list_resources.json +26 -0
  146. data/test/fixtures/kubernetes/retrieve.json +39 -0
  147. data/test/fixtures/kubernetes/retrieve_node_pool.json +25 -0
  148. data/test/fixtures/kubernetes/update_node_pool.json +19 -0
  149. data/test/fixtures/load_balancers/create.json +48 -0
  150. data/test/fixtures/load_balancers/create_forwarding_rule.json +1 -0
  151. data/test/fixtures/load_balancers/delete.json +1 -0
  152. data/test/fixtures/load_balancers/delete_forwarding_rule.json +1 -0
  153. data/test/fixtures/load_balancers/list.json +57 -0
  154. data/test/fixtures/load_balancers/list_firewall_rules.json +17 -0
  155. data/test/fixtures/load_balancers/list_forwarding_rules.json +18 -0
  156. data/test/fixtures/load_balancers/retrieve.json +48 -0
  157. data/test/fixtures/load_balancers/retrieve_firewall_rule.json +8 -0
  158. data/test/fixtures/load_balancers/retrieve_forwarding_rule.json +9 -0
  159. data/test/fixtures/load_balancers/update.json +1 -0
  160. data/test/fixtures/object_storage/create.json +14 -0
  161. data/test/fixtures/object_storage/delete.json +1 -0
  162. data/test/fixtures/object_storage/list.json +22 -0
  163. data/test/fixtures/object_storage/list_clusters.json +17 -0
  164. data/test/fixtures/object_storage/regenerate_keys.json +7 -0
  165. data/test/fixtures/object_storage/retrieve.json +13 -0
  166. data/test/fixtures/object_storage/update.json +1 -0
  167. data/test/fixtures/operating_systems/list.json +17 -0
  168. data/test/fixtures/plans/list.json +22 -0
  169. data/test/fixtures/plans/list_metal.json +24 -0
  170. data/test/fixtures/private_networks/create.json +10 -0
  171. data/test/fixtures/private_networks/delete.json +1 -0
  172. data/test/fixtures/private_networks/list.json +19 -0
  173. data/test/fixtures/private_networks/retrieve.json +10 -0
  174. data/test/fixtures/private_networks/update.json +1 -0
  175. data/test/fixtures/regions/list.json +20 -0
  176. data/test/fixtures/regions/list_availability.json +24 -0
  177. data/test/fixtures/reserved_ips/attach.json +1 -0
  178. data/test/fixtures/reserved_ips/convert.json +11 -0
  179. data/test/fixtures/reserved_ips/create.json +11 -0
  180. data/test/fixtures/reserved_ips/delete.json +1 -0
  181. data/test/fixtures/reserved_ips/detach.json +1 -0
  182. data/test/fixtures/reserved_ips/list.json +29 -0
  183. data/test/fixtures/reserved_ips/retrieve.json +11 -0
  184. data/test/fixtures/snapshots/create.json +11 -0
  185. data/test/fixtures/snapshots/create_from_url.json +11 -0
  186. data/test/fixtures/snapshots/delete.json +1 -0
  187. data/test/fixtures/snapshots/list.json +20 -0
  188. data/test/fixtures/snapshots/retrieve.json +11 -0
  189. data/test/fixtures/snapshots/update.json +1 -0
  190. data/test/fixtures/ssh_keys/create.json +8 -0
  191. data/test/fixtures/ssh_keys/delete.json +1 -0
  192. data/test/fixtures/ssh_keys/list.json +17 -0
  193. data/test/fixtures/ssh_keys/retrieve.json +8 -0
  194. data/test/fixtures/ssh_keys/update.json +1 -0
  195. data/test/fixtures/startup_scripts/create.json +10 -0
  196. data/test/fixtures/startup_scripts/delete.json +1 -0
  197. data/test/fixtures/startup_scripts/list.json +18 -0
  198. data/test/fixtures/startup_scripts/retrieve.json +10 -0
  199. data/test/fixtures/startup_scripts/update.json +1 -0
  200. data/test/fixtures/users/create.json +9 -0
  201. data/test/fixtures/users/delete.json +1 -0
  202. data/test/fixtures/users/list.json +29 -0
  203. data/test/fixtures/users/retrieve.json +20 -0
  204. data/test/fixtures/users/update.json +1 -0
  205. data/test/test_helper.rb +18 -5
  206. data/test/vultr/client_test.rb +8 -0
  207. data/test/vultr/object_test.rb +21 -0
  208. data/test/vultr/resources/account_test.rb +12 -0
  209. data/test/vultr/resources/applications_test.rb +15 -0
  210. data/test/vultr/resources/backups_test.rb +24 -0
  211. data/test/vultr/resources/bare_metal_test.rb +267 -0
  212. data/test/vultr/resources/block_storage_test.rb +85 -0
  213. data/test/vultr/resources/dns_test.rb +134 -0
  214. data/test/vultr/resources/firewall_test.rb +88 -0
  215. data/test/vultr/resources/instances_test.rb +325 -0
  216. data/test/vultr/resources/iso_test.rb +58 -0
  217. data/test/vultr/resources/kubernetes_test.rb +185 -0
  218. data/test/vultr/resources/load_balancers_test.rb +110 -0
  219. data/test/vultr/resources/object_storage_test.rb +71 -0
  220. data/test/vultr/resources/operating_systems_test.rb +15 -0
  221. data/test/vultr/resources/plans_test.rb +25 -0
  222. data/test/vultr/resources/private_networks_test.rb +50 -0
  223. data/test/vultr/resources/regions_test.rb +26 -0
  224. data/test/vultr/resources/reserved_ips_test.rb +67 -0
  225. data/test/vultr/resources/snapshots_test.rb +60 -0
  226. data/test/vultr/resources/ssh_keys_test.rb +50 -0
  227. data/test/vultr/resources/startup_scripts_test.rb +50 -0
  228. data/test/vultr/resources/users_test.rb +50 -0
  229. data/vultr.gemspec +15 -17
  230. metadata +237 -54
  231. data/.travis.yml +0 -26
  232. data/test/vultr/vultr_account_test.rb +0 -29
  233. data/test/vultr/vultr_app_test.rb +0 -26
  234. data/test/vultr/vultr_backup_test.rb +0 -22
  235. data/test/vultr/vultr_iso_test.rb +0 -27
  236. data/test/vultr/vultr_os_test.rb +0 -21
  237. data/test/vultr/vultr_plan_test.rb +0 -22
  238. data/test/vultr/vultr_region_test.rb +0 -33
  239. data/test/vultr/vultr_snapshot_test.rb +0 -30
  240. data/test/vultr/vultr_sshkey_test.rb +0 -50
  241. data/test/vultr/vultr_startupscript_test.rb +0 -53
@@ -0,0 +1,32 @@
1
+ module Vultr
2
+ class BlockStorageResource < Resource
3
+ def list(**params)
4
+ response = get_request("blocks", params: params)
5
+ Collection.from_response(response, key: "blocks", type: BlockStorage)
6
+ end
7
+
8
+ def create(**attributes)
9
+ BlockStorage.new post_request("blocks", body: attributes).body.dig("block")
10
+ end
11
+
12
+ def retrieve(block_id:)
13
+ BlockStorage.new get_request("blocks/#{block_id}").body.dig("block")
14
+ end
15
+
16
+ def update(block_id:, **attributes)
17
+ patch_request("blocks/#{block_id}", body: attributes)
18
+ end
19
+
20
+ def delete(block_id:)
21
+ delete_request("blocks/#{block_id}")
22
+ end
23
+
24
+ def attach(block_id:)
25
+ post_request("blocks/#{block_id}/attach", body: {})
26
+ end
27
+
28
+ def detach(block_id:)
29
+ post_request("blocks/#{block_id}/detach", body: {})
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,58 @@
1
+ module Vultr
2
+ class DnsResource < Resource
3
+ def list(**params)
4
+ response = get_request("domains", params: params)
5
+ Collection.from_response(response, key: "domains", type: Domain)
6
+ end
7
+
8
+ def create(**attributes)
9
+ Domain.new post_request("domains", body: attributes).body.dig("domain")
10
+ end
11
+
12
+ def retrieve(dns_domain:)
13
+ Domain.new get_request("domains/#{dns_domain}").body.dig("domain")
14
+ end
15
+
16
+ def update(dns_domain:, **attributes)
17
+ put_request("domains/#{dns_domain}", body: attributes)
18
+ end
19
+
20
+ def delete(dns_domain:)
21
+ delete_request("domains/#{dns_domain}")
22
+ end
23
+
24
+ def soa(dns_domain:)
25
+ Object.new get_request("domains/#{dns_domain}/soa").body.dig("dns_soa")
26
+ end
27
+
28
+ def update_soa(dns_domain:, **attributes)
29
+ patch_request("domains/#{dns_domain}/soa", body: attributes)
30
+ end
31
+
32
+ # Returns an Array of strings
33
+ def dnssec(dns_domain:)
34
+ get_request("domains/#{dns_domain}/dnssec").body.dig("dns_sec")
35
+ end
36
+
37
+ def list_records(dns_domain:, **params)
38
+ response = get_request("domains/#{dns_domain}/records", params: params)
39
+ Collection.from_response(response, key: "records", type: Object)
40
+ end
41
+
42
+ def create_record(dns_domain:, **attributes)
43
+ Object.new post_request("domains/#{dns_domain}/records", body: attributes).body.dig("record")
44
+ end
45
+
46
+ def retrieve_record(dns_domain:, record_id:)
47
+ Object.new get_request("domains/#{dns_domain}/records/#{record_id}").body.dig("record")
48
+ end
49
+
50
+ def update_record(dns_domain:, record_id:, **attributes)
51
+ patch_request("domains/#{dns_domain}/records/#{record_id}", body: attributes)
52
+ end
53
+
54
+ def delete_record(dns_domain:, record_id:)
55
+ delete_request("domains/#{dns_domain}/records/#{record_id}")
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ module Vultr
2
+ class FirewallResource < Resource
3
+ def list(**params)
4
+ response = get_request("firewalls", params: params)
5
+ Collection.from_response(response, key: "firewall_groups", type: FirewallGroup)
6
+ end
7
+
8
+ def create(**attributes)
9
+ FirewallGroup.new post_request("firewalls", body: attributes).body.dig("firewall_group")
10
+ end
11
+
12
+ def retrieve(firewall_group_id:)
13
+ FirewallGroup.new get_request("firewalls/#{firewall_group_id}").body.dig("firewall_group")
14
+ end
15
+
16
+ def update(firewall_group_id:, **attributes)
17
+ put_request("firewalls/#{firewall_group_id}", body: attributes)
18
+ end
19
+
20
+ def delete(firewall_group_id:)
21
+ delete_request("firewalls/#{firewall_group_id}")
22
+ end
23
+
24
+ # Firewall Rules
25
+ def list_rules(firewall_group_id:, **params)
26
+ response = get_request("firewalls/#{firewall_group_id}/rules", params: params)
27
+ Collection.from_response(response, key: "firewall_rules", type: Object)
28
+ end
29
+
30
+ def create_rule(firewall_group_id:, **attributes)
31
+ Object.new post_request("firewalls/#{firewall_group_id}/rules", body: attributes).body.dig("firewall_rule")
32
+ end
33
+
34
+ def retrieve_rule(firewall_group_id:, firewall_rule_id:)
35
+ Object.new get_request("firewalls/#{firewall_group_id}/rules/#{firewall_rule_id}").body.dig("firewall_rule")
36
+ end
37
+
38
+ def delete_rule(firewall_group_id:, firewall_rule_id:)
39
+ delete_request("firewalls/#{firewall_group_id}/rules/#{firewall_rule_id}")
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,145 @@
1
+ module Vultr
2
+ class InstancesResource < Resource
3
+ def list(**params)
4
+ response = get_request("instances", params: params)
5
+ Collection.from_response(response, key: "instances", type: Instance)
6
+ end
7
+
8
+ def create(**attributes)
9
+ Instance.new post_request("instances", body: attributes).body.dig("instance")
10
+ end
11
+
12
+ def retrieve(instance_id:)
13
+ Instance.new get_request("instances/#{instance_id}").body.dig("instance")
14
+ end
15
+
16
+ def update(instance_id:, **attributes)
17
+ patch_request("instances/#{instance_id}", body: attributes)
18
+ end
19
+
20
+ def delete(instance_id:)
21
+ delete_request("instances/#{instance_id}")
22
+ end
23
+
24
+ def start(instance_id:, **attributes)
25
+ post_request("instances/#{instance_id}/start", body: attributes)
26
+ end
27
+
28
+ def reboot(instance_id:, **attributes)
29
+ post_request("instances/#{instance_id}/reboot", body: attributes)
30
+ end
31
+
32
+ def reinstall(instance_id:, **attributes)
33
+ Instance.new post_request("instances/#{instance_id}/reinstall", body: attributes).body.dig("instance")
34
+ end
35
+
36
+ def restore(instance_id:, **attributes)
37
+ Object.new post_request("instances/#{instance_id}/restore", body: attributes).body.dig("status")
38
+ end
39
+
40
+ def halt(instance_id:, **attributes)
41
+ post_request("instances/#{instance_id}/halt", body: attributes)
42
+ end
43
+
44
+ def bandwidth(instance_id:)
45
+ Object.new get_request("instances/#{instance_id}/bandwidth").body.dig("bandwidth")
46
+ end
47
+
48
+ def neighbors(instance_id:)
49
+ get_request("instances/#{instance_id}/neighbors").body.dig("neighbors")
50
+ end
51
+
52
+ def user_data(instance_id:)
53
+ Object.new get_request("instances/#{instance_id}/user-data").body.dig("user_data")
54
+ end
55
+
56
+ def upgrades(instance_id:, **params)
57
+ Object.new get_request("instances/#{instance_id}/upgrades", params: params).body.dig("upgrades")
58
+ end
59
+
60
+ def list_ipv4(instance_id:, **params)
61
+ response = get_request("instances/#{instance_id}/ipv4", params: params)
62
+ Collection.from_response(response, key: "ipv4s", type: Object)
63
+ end
64
+
65
+ def create_ipv4(instance_id:, **params)
66
+ Object.new post_request("instances/#{instance_id}/ipv4", body: params).body.dig("ipv4")
67
+ end
68
+
69
+ def delete_ipv4(instance_id:, ipv4:)
70
+ delete_request("instances/#{instance_id}/ipv4/#{ipv4}")
71
+ end
72
+
73
+ def create_ipv4_reverse(instance_id:, **params)
74
+ post_request("instances/#{instance_id}/ipv4/reverse", body: params)
75
+ end
76
+
77
+ def set_default_reverse_dns_entry(instance_id:, **params)
78
+ post_request("instances/#{instance_id}/ipv4/reverse/default", body: params)
79
+ end
80
+
81
+ def list_ipv6(instance_id:, **params)
82
+ response = get_request("instances/#{instance_id}/ipv6", params: params)
83
+ Collection.from_response(response, key: "ipv6s", type: Object)
84
+ end
85
+
86
+ def ipv6_reverse(instance_id:)
87
+ response = get_request("instances/#{instance_id}/ipv6/reverse")
88
+ Collection.from_response(response, key: "reverse_ipv6s", type: Object)
89
+ end
90
+
91
+ def create_ipv6_reverse(instance_id:, **params)
92
+ post_request("instances/#{instance_id}/ipv6/reverse", body: params)
93
+ end
94
+
95
+ def delete_ipv6_reverse(instance_id:, ipv6:)
96
+ delete_request("instances/#{instance_id}/ipv6/reverse/#{ipv6}")
97
+ end
98
+
99
+ def list_private_networks(instance_id:, **params)
100
+ response = get_request("instances/#{instance_id}/private-networks", params: params)
101
+ Collection.from_response(response, key: "private_networks", type: PrivateNetwork)
102
+ end
103
+
104
+ def attach_private_network(instance_id:, network_id:)
105
+ post_request("instances/#{instance_id}/private-networks/attach", body: {network_id: network_id})
106
+ end
107
+
108
+ def detach_private_network(instance_id:, network_id:)
109
+ post_request("instances/#{instance_id}/private-networks/detach", body: {network_id: network_id})
110
+ end
111
+
112
+ def iso(instance_id:)
113
+ Object.new get_request("instances/#{instance_id}/iso").body.dig("iso_status")
114
+ end
115
+
116
+ def attach_iso(instance_id:, iso_id:)
117
+ Object.new post_request("instances/#{instance_id}/iso/attach", body: {iso_id: iso_id}).body.dig("iso_status")
118
+ end
119
+
120
+ def detach_iso(instance_id:, iso_id:)
121
+ Object.new post_request("instances/#{instance_id}/iso/detach", body: {iso_id: iso_id}).body.dig("iso_status")
122
+ end
123
+
124
+ def backup_schedule(instance_id:)
125
+ Object.new get_request("instances/#{instance_id}/backup-schedule").body.dig("backup_schedule")
126
+ end
127
+
128
+ def set_backup_schedule(instance_id:, **attributes)
129
+ post_request("instances/#{instance_id}/backup-schedule", body: attributes)
130
+ end
131
+
132
+ # Bulk operations
133
+ def halt_instances(instance_ids:)
134
+ post_request("instances/halt", body: {instance_ids: Array(instance_ids)})
135
+ end
136
+
137
+ def reboot_instances(instance_ids:)
138
+ post_request("instances/reboot", body: {instance_ids: Array(instance_ids)})
139
+ end
140
+
141
+ def start_instances(instance_ids:)
142
+ post_request("instances/start", body: {instance_ids: Array(instance_ids)})
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,25 @@
1
+ module Vultr
2
+ class IsoResource < Resource
3
+ def list(**params)
4
+ response = get_request("iso", params: params)
5
+ Collection.from_response(response, key: "isos", type: Iso)
6
+ end
7
+
8
+ def create(**attributes)
9
+ Iso.new post_request("iso", body: attributes).body.dig("iso")
10
+ end
11
+
12
+ def retrieve(iso_id:)
13
+ Iso.new get_request("iso/#{iso_id}").body.dig("iso")
14
+ end
15
+
16
+ def delete(iso_id:)
17
+ delete_request("iso/#{iso_id}")
18
+ end
19
+
20
+ def list_public(**params)
21
+ response = get_request("iso-public", params: params)
22
+ Collection.from_response(response, key: "public_isos", type: Iso)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,61 @@
1
+ module Vultr
2
+ class KubernetesResource < Resource
3
+ def list(**params)
4
+ response = get_request("kubernetes/clusters", params: params)
5
+ Collection.from_response(response, key: "vke_clusters", type: KubernetesCluster)
6
+ end
7
+
8
+ def create(**attributes)
9
+ KubernetesCluster.new post_request("kubernetes/clusters", body: attributes).body.dig("vke_cluster")
10
+ end
11
+
12
+ def retrieve(vke_id:)
13
+ KubernetesCluster.new get_request("kubernetes/clusters/#{vke_id}").body.dig("vke_cluster")
14
+ end
15
+
16
+ def update(vke_id:, **attributes)
17
+ put_request("kubernetes/clusters/#{vke_id}", body: attributes)
18
+ end
19
+
20
+ def delete(vke_id:)
21
+ delete_request("kubernetes/clusters/#{vke_id}")
22
+ end
23
+
24
+ def config(vke_id:)
25
+ Object.new get_request("kubernetes/clusters/#{vke_id}/config").body
26
+ end
27
+
28
+ def list_resources(vke_id:)
29
+ Object.new get_request("kubernetes/clusters/#{vke_id}/resources").body.dig("resources")
30
+ end
31
+
32
+ def list_node_pools(vke_id:, **params)
33
+ response = get_request("kubernetes/clusters/#{vke_id}/node-pools", params: params)
34
+ Collection.from_response(response, key: "node_pools", type: Object)
35
+ end
36
+
37
+ def retrieve_node_pool(vke_id:, nodepool_id:)
38
+ Object.new get_request("kubernetes/clusters/#{vke_id}/node-pools/#{nodepool_id}").body.dig("node_pool")
39
+ end
40
+
41
+ def create_node_pool(vke_id:, **attributes)
42
+ Object.new post_request("kubernetes/clusters/#{vke_id}/node-pools", body: attributes).body.dig("node_pool")
43
+ end
44
+
45
+ def update_node_pool(vke_id:, nodepool_id:, **attributes)
46
+ Object.new patch_request("kubernetes/clusters/#{vke_id}/node-pools/#{nodepool_id}", body: attributes).body.dig("node_pool")
47
+ end
48
+
49
+ def delete_node_pool(vke_id:, nodepool_id:)
50
+ delete_request("kubernetes/clusters/#{vke_id}/node-pools/#{nodepool_id}")
51
+ end
52
+
53
+ def delete_node_pool_instance(vke_id:, nodepool_id:, node_id:)
54
+ delete_request("kubernetes/clusters/#{vke_id}/node-pools/#{nodepool_id}/nodes/#{node_id}")
55
+ end
56
+
57
+ def recycle_node_pool_instance(vke_id:, nodepool_id:, node_id:)
58
+ post_request("kubernetes/clusters/#{vke_id}/node-pools/#{nodepool_id}/nodes/#{node_id}/recycle", body: {})
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,50 @@
1
+ module Vultr
2
+ class LoadBalancersResource < Resource
3
+ def list(**params)
4
+ response = get_request("load-balancers", params: params)
5
+ Collection.from_response(response, key: "load_balancers", type: LoadBalancer)
6
+ end
7
+
8
+ def create(**attributes)
9
+ LoadBalancer.new post_request("load-balancers", body: attributes).body.dig("load_balancer")
10
+ end
11
+
12
+ def retrieve(load_balancer_id:)
13
+ LoadBalancer.new get_request("load-balancers/#{load_balancer_id}").body.dig("load_balancer")
14
+ end
15
+
16
+ def update(load_balancer_id:, **attributes)
17
+ LoadBalancer.new patch_request("load-balancers/#{load_balancer_id}", body: attributes).body.dig("load_balancer")
18
+ end
19
+
20
+ def delete(load_balancer_id:)
21
+ delete_request("load-balancers/#{load_balancer_id}")
22
+ end
23
+
24
+ def list_forwarding_rules(load_balancer_id:, **params)
25
+ response = get_request("load-balancers/#{load_balancer_id}/forwarding-rules", params: params)
26
+ Collection.from_response(response, key: "forwarding_rules", type: Object)
27
+ end
28
+
29
+ def create_forwarding_rule(load_balancer_id:, **attributes)
30
+ Object.new post_request("load-balancers/#{load_balancer_id}/forwarding-rules", body: attributes).body.dig("forwarding_rule")
31
+ end
32
+
33
+ def retrieve_forwarding_rule(load_balancer_id:, forwarding_rule_id:)
34
+ Object.new get_request("load-balancers/#{load_balancer_id}/forwarding-rules/#{forwarding_rule_id}").body.dig("forwarding_rule")
35
+ end
36
+
37
+ def delete_forwarding_rule(load_balancer_id:, forwarding_rule_id:)
38
+ delete_request("load-balancers/#{load_balancer_id}/forwarding-rules/#{forwarding_rule_id}")
39
+ end
40
+
41
+ def list_firewall_rules(load_balancer_id:, **params)
42
+ response = get_request("load-balancers/#{load_balancer_id}/firewall-rules", params: params)
43
+ Collection.from_response(response, key: "firewall_rules", type: Object)
44
+ end
45
+
46
+ def retrieve_firewall_rule(load_balancer_id:, firewall_rule_id:)
47
+ Object.new get_request("load-balancers/#{load_balancer_id}/firewall-rules/#{firewall_rule_id}").body.dig("firewall_rule")
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,33 @@
1
+ module Vultr
2
+ class ObjectStorageResource < Resource
3
+ def list(**params)
4
+ response = get_request("object-storage", params: params)
5
+ Collection.from_response(response, key: "object_storages", type: ObjectStorage)
6
+ end
7
+
8
+ def create(**attributes)
9
+ ObjectStorage.new post_request("object-storage", body: attributes).body.dig("object_storage")
10
+ end
11
+
12
+ def retrieve(object_storage_id:)
13
+ ObjectStorage.new get_request("object-storage/#{object_storage_id}").body.dig("object_storage")
14
+ end
15
+
16
+ def update(object_storage_id:, **attributes)
17
+ put_request("object-storage/#{object_storage_id}", body: attributes)
18
+ end
19
+
20
+ def delete(object_storage_id:)
21
+ delete_request("object-storage/#{object_storage_id}")
22
+ end
23
+
24
+ def regenerate_keys(object_storage_id:)
25
+ Object.new post_request("object-storage/#{object_storage_id}/regenerate-keys", body: {}).body
26
+ end
27
+
28
+ def list_clusters(**params)
29
+ response = get_request("object-storage/clusters", params: params)
30
+ Collection.from_response(response, key: "clusters", type: Object)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ module Vultr
2
+ class OperatingSystemsResource < Resource
3
+ def list(**params)
4
+ response = get_request("os", params: params)
5
+ Collection.from_response(response, key: "os", type: OperatingSystem)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ module Vultr
2
+ class PlansResource < Resource
3
+ def list(**params)
4
+ response = get_request("plans", params: params)
5
+ Collection.from_response(response, key: "plans", type: Plan)
6
+ end
7
+
8
+ def list_metal(**params)
9
+ response = get_request("plans-metal", params: params)
10
+ Collection.from_response(response, key: "plans_metal", type: Plan)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ module Vultr
2
+ class PrivateNetworksResource < Resource
3
+ def list(**params)
4
+ response = get_request("private-networks", params: params)
5
+ Collection.from_response(response, key: "networks", type: PrivateNetwork)
6
+ end
7
+
8
+ def create(**attributes)
9
+ PrivateNetwork.new post_request("private-networks", body: attributes).body.dig("network")
10
+ end
11
+
12
+ def retrieve(network_id:)
13
+ PrivateNetwork.new get_request("private-networks/#{network_id}").body.dig("network")
14
+ end
15
+
16
+ def update(network_id:, **attributes)
17
+ put_request("private-networks/#{network_id}", body: attributes)
18
+ end
19
+
20
+ def delete(network_id:)
21
+ delete_request("private-networks/#{network_id}")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ module Vultr
2
+ class RegionsResource < Resource
3
+ def list(**params)
4
+ response = get_request("regions", params: params)
5
+ Collection.from_response(response, key: "regions", type: Region)
6
+ end
7
+
8
+ def list_availability(region_id:)
9
+ Object.new get_request("regions/#{region_id}/availability").body
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,32 @@
1
+ module Vultr
2
+ class ReservedIpsResource < Resource
3
+ def list(**params)
4
+ response = get_request("reserved-ips", params: params)
5
+ Collection.from_response(response, key: "reserved_ips", type: ReservedIp)
6
+ end
7
+
8
+ def create(**attributes)
9
+ ReservedIp.new post_request("reserved-ips", body: attributes).body.dig("reserved_ip")
10
+ end
11
+
12
+ def retrieve(reserved_ip:)
13
+ ReservedIp.new get_request("reserved-ips/#{reserved_ip}").body.dig("reserved_ip")
14
+ end
15
+
16
+ def delete(reserved_ip:)
17
+ delete_request("reserved-ips/#{reserved_ip}")
18
+ end
19
+
20
+ def attach(reserved_ip:, instance_id:)
21
+ post_request("reserved-ips/#{reserved_ip}/attach", body: {instance_id: instance_id})
22
+ end
23
+
24
+ def detach(reserved_ip:)
25
+ post_request("reserved-ips/#{reserved_ip}/detach", body: {})
26
+ end
27
+
28
+ def convert(**attributes)
29
+ ReservedIp.new post_request("reserved-ips/convert", body: attributes).body.dig("reserved_ip")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,28 @@
1
+ module Vultr
2
+ class SnapshotsResource < Resource
3
+ def list(**params)
4
+ response = get_request("snapshots", params: params)
5
+ Collection.from_response(response, key: "snapshots", type: Snapshot)
6
+ end
7
+
8
+ def create(**attributes)
9
+ Snapshot.new post_request("snapshots", body: attributes).body.dig("snapshot")
10
+ end
11
+
12
+ def retrieve(snapshot_id:)
13
+ Snapshot.new get_request("snapshots/#{snapshot_id}").body.dig("snapshot")
14
+ end
15
+
16
+ def create_from_url(url)
17
+ Snapshot.new post_request("snapshots/create-from-url", body: {url: url}).body.dig("snapshot")
18
+ end
19
+
20
+ def update(snapshot_id:, **attributes)
21
+ put_request("snapshots/#{snapshot_id}", body: attributes)
22
+ end
23
+
24
+ def delete(snapshot_id:)
25
+ delete_request("snapshots/#{snapshot_id}")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ module Vultr
2
+ class SshKeysResource < Resource
3
+ def list(**params)
4
+ response = get_request("ssh-keys", params: params)
5
+ Collection.from_response(response, key: "ssh_keys", type: SshKey)
6
+ end
7
+
8
+ def create(**attributes)
9
+ SshKey.new post_request("ssh-keys", body: attributes).body.dig("ssh_key")
10
+ end
11
+
12
+ def retrieve(ssh_key_id:)
13
+ SshKey.new get_request("ssh-keys/#{ssh_key_id}").body.dig("ssh_key")
14
+ end
15
+
16
+ def update(ssh_key_id:, **attributes)
17
+ patch_request("ssh-keys/#{ssh_key_id}", body: attributes)
18
+ end
19
+
20
+ def delete(ssh_key_id:)
21
+ delete_request("ssh-keys/#{ssh_key_id}")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Vultr
2
+ class StartupScriptsResource < Resource
3
+ def list(**params)
4
+ response = get_request("startup-scripts", params: params)
5
+ Collection.from_response(response, key: "startup_scripts", type: StartupScript)
6
+ end
7
+
8
+ def create(**attributes)
9
+ StartupScript.new post_request("startup-scripts", body: attributes).body.dig("startup_script")
10
+ end
11
+
12
+ def retrieve(startup_script_id:)
13
+ StartupScript.new get_request("startup-scripts/#{startup_script_id}").body.dig("startup_script")
14
+ end
15
+
16
+ def update(startup_script_id:, **attributes)
17
+ patch_request("startup-scripts/#{startup_script_id}", body: attributes)
18
+ end
19
+
20
+ def delete(startup_script_id:)
21
+ delete_request("startup-scripts/#{startup_script_id}")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module Vultr
2
+ class UserResource < Resource
3
+ def list(**params)
4
+ response = get_request("users", params: params)
5
+ Collection.from_response(response, key: "users", type: User)
6
+ end
7
+
8
+ def create(**attributes)
9
+ User.new post_request("users", body: attributes).body.dig("user")
10
+ end
11
+
12
+ def retrieve(user_id:)
13
+ User.new get_request("users/#{user_id}").body.dig("user")
14
+ end
15
+
16
+ def update(user_id:, **attributes)
17
+ patch_request("users/#{user_id}", body: attributes)
18
+ end
19
+
20
+ def delete(user_id:)
21
+ delete_request("users/#{user_id}")
22
+ end
23
+ end
24
+ end
data/lib/vultr/version.rb CHANGED
@@ -1,10 +1,3 @@
1
1
  module Vultr
2
- module VERSION
3
- MAJOR = 0
4
- MINOR = 4
5
- TINY = 3
6
- PRE = nil
7
-
8
- STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
- end
2
+ VERSION = "2.0.0"
10
3
  end