vultr 0.4.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +32 -0
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile +5 -10
  5. data/README.md +306 -136
  6. data/Rakefile +10 -6
  7. data/bin/console +21 -0
  8. data/bin/setup +8 -0
  9. data/bin/test +6 -0
  10. data/lib/vultr/client.rb +111 -0
  11. data/lib/vultr/collection.rb +22 -0
  12. data/lib/vultr/error.rb +4 -0
  13. data/lib/vultr/object.rb +19 -0
  14. data/lib/vultr/objects/account.rb +4 -0
  15. data/lib/vultr/objects/application.rb +4 -0
  16. data/lib/vultr/objects/backup.rb +4 -0
  17. data/lib/vultr/objects/bare_metal.rb +4 -0
  18. data/lib/vultr/objects/block_storage.rb +4 -0
  19. data/lib/vultr/objects/domain.rb +4 -0
  20. data/lib/vultr/objects/firewall_group.rb +4 -0
  21. data/lib/vultr/objects/instance.rb +4 -0
  22. data/lib/vultr/objects/iso.rb +4 -0
  23. data/lib/vultr/objects/kubernetes_cluster.rb +4 -0
  24. data/lib/vultr/objects/load_balancer.rb +4 -0
  25. data/lib/vultr/objects/object_storage.rb +4 -0
  26. data/lib/vultr/objects/operating_system.rb +4 -0
  27. data/lib/vultr/objects/plan.rb +4 -0
  28. data/lib/vultr/objects/private_network.rb +4 -0
  29. data/lib/vultr/objects/region.rb +4 -0
  30. data/lib/vultr/objects/reserved_ip.rb +4 -0
  31. data/lib/vultr/objects/snapshot.rb +4 -0
  32. data/lib/vultr/objects/ssh_key.rb +4 -0
  33. data/lib/vultr/objects/startup_script.rb +4 -0
  34. data/lib/vultr/objects/user.rb +4 -0
  35. data/lib/vultr/resource.rb +52 -0
  36. data/lib/vultr/resources/account.rb +7 -0
  37. data/lib/vultr/resources/applications.rb +8 -0
  38. data/lib/vultr/resources/backups.rb +12 -0
  39. data/lib/vultr/resources/bare_metal.rb +79 -0
  40. data/lib/vultr/resources/block_storage.rb +32 -0
  41. data/lib/vultr/resources/dns.rb +58 -0
  42. data/lib/vultr/resources/firewall.rb +42 -0
  43. data/lib/vultr/resources/instances.rb +145 -0
  44. data/lib/vultr/resources/iso.rb +25 -0
  45. data/lib/vultr/resources/kubernetes.rb +61 -0
  46. data/lib/vultr/resources/load_balancers.rb +50 -0
  47. data/lib/vultr/resources/object_storage.rb +33 -0
  48. data/lib/vultr/resources/operating_systems.rb +8 -0
  49. data/lib/vultr/resources/plans.rb +13 -0
  50. data/lib/vultr/resources/private_networks.rb +24 -0
  51. data/lib/vultr/resources/regions.rb +12 -0
  52. data/lib/vultr/resources/reserved_ips.rb +32 -0
  53. data/lib/vultr/resources/snapshots.rb +28 -0
  54. data/lib/vultr/resources/ssh_keys.rb +24 -0
  55. data/lib/vultr/resources/startup_scripts.rb +24 -0
  56. data/lib/vultr/resources/users.rb +24 -0
  57. data/lib/vultr/version.rb +1 -8
  58. data/lib/vultr.rb +56 -887
  59. data/test/fixtures/account/info.json +11 -0
  60. data/test/fixtures/applications/list.json +29 -0
  61. data/test/fixtures/backups/list.json +18 -0
  62. data/test/fixtures/backups/retrieve.json +9 -0
  63. data/test/fixtures/bare_metals/bandwidth.json +12 -0
  64. data/test/fixtures/bare_metals/create.json +26 -0
  65. data/test/fixtures/bare_metals/list.json +36 -0
  66. data/test/fixtures/bare_metals/list_ipv4.json +18 -0
  67. data/test/fixtures/bare_metals/list_ipv6.json +17 -0
  68. data/test/fixtures/bare_metals/reinstall.json +25 -0
  69. data/test/fixtures/bare_metals/retrieve.json +26 -0
  70. data/test/fixtures/bare_metals/update.json +26 -0
  71. data/test/fixtures/bare_metals/upgrades.json +47 -0
  72. data/test/fixtures/bare_metals/user_data.json +5 -0
  73. data/test/fixtures/bare_metals/vnc.json +5 -0
  74. data/test/fixtures/block_storage/attach.json +4 -0
  75. data/test/fixtures/block_storage/create.json +13 -0
  76. data/test/fixtures/block_storage/detach.json +4 -0
  77. data/test/fixtures/block_storage/list.json +22 -0
  78. data/test/fixtures/block_storage/retrieve.json +13 -0
  79. data/test/fixtures/domains/create.json +6 -0
  80. data/test/fixtures/domains/dnssec.json +7 -0
  81. data/test/fixtures/domains/list.json +15 -0
  82. data/test/fixtures/domains/record.json +10 -0
  83. data/test/fixtures/domains/records.json +19 -0
  84. data/test/fixtures/domains/retrieve.json +6 -0
  85. data/test/fixtures/domains/soa.json +6 -0
  86. data/test/fixtures/firewall/create.json +11 -0
  87. data/test/fixtures/firewall/create_rule.json +9 -0
  88. data/test/fixtures/firewall/delete.json +1 -0
  89. data/test/fixtures/firewall/delete_rule.json +1 -0
  90. data/test/fixtures/firewall/list.json +20 -0
  91. data/test/fixtures/firewall/list_rules.json +22 -0
  92. data/test/fixtures/firewall/retrieve.json +11 -0
  93. data/test/fixtures/firewall/retrieve_rule.json +13 -0
  94. data/test/fixtures/firewall/update.json +1 -0
  95. data/test/fixtures/instances/attach_iso.json +6 -0
  96. data/test/fixtures/instances/attach_private_network.json +1 -0
  97. data/test/fixtures/instances/backup_schedule.json +10 -0
  98. data/test/fixtures/instances/bandwidth.json +12 -0
  99. data/test/fixtures/instances/create.json +36 -0
  100. data/test/fixtures/instances/create_ipv4_reverse.json +1 -0
  101. data/test/fixtures/instances/create_ipv6_reverse.json +1 -0
  102. data/test/fixtures/instances/delete.json +1 -0
  103. data/test/fixtures/instances/delete_ipv4.json +1 -0
  104. data/test/fixtures/instances/delete_ipv6.json +1 -0
  105. data/test/fixtures/instances/detach_iso.json +5 -0
  106. data/test/fixtures/instances/detach_private_network.json +1 -0
  107. data/test/fixtures/instances/halt.json +1 -0
  108. data/test/fixtures/instances/halt_instances.json +1 -0
  109. data/test/fixtures/instances/ipv4.json +9 -0
  110. data/test/fixtures/instances/ipv6_reverse.json +15 -0
  111. data/test/fixtures/instances/iso.json +6 -0
  112. data/test/fixtures/instances/list.json +44 -0
  113. data/test/fixtures/instances/list_ipv4.json +32 -0
  114. data/test/fixtures/instances/list_ipv6.json +17 -0
  115. data/test/fixtures/instances/list_private_networks.json +16 -0
  116. data/test/fixtures/instances/neighbors.json +6 -0
  117. data/test/fixtures/instances/reboot.json +1 -0
  118. data/test/fixtures/instances/reboot_instances.json +1 -0
  119. data/test/fixtures/instances/reinstall.json +35 -0
  120. data/test/fixtures/instances/restore.json +7 -0
  121. data/test/fixtures/instances/retrieve.json +35 -0
  122. data/test/fixtures/instances/set_backup_schedule.json +1 -0
  123. data/test/fixtures/instances/set_default_reverse_dns_entry.json +1 -0
  124. data/test/fixtures/instances/start.json +1 -0
  125. data/test/fixtures/instances/start_instances.json +1 -0
  126. data/test/fixtures/instances/update.json +1 -0
  127. data/test/fixtures/instances/upgrades.json +55 -0
  128. data/test/fixtures/instances/user_data.json +5 -0
  129. data/test/fixtures/isos/create.json +8 -0
  130. data/test/fixtures/isos/list.json +20 -0
  131. data/test/fixtures/isos/list_public.json +17 -0
  132. data/test/fixtures/isos/retrieve.json +11 -0
  133. data/test/fixtures/kubernetes/config.json +3 -0
  134. data/test/fixtures/kubernetes/create.json +39 -0
  135. data/test/fixtures/kubernetes/create_node_pool.json +25 -0
  136. data/test/fixtures/kubernetes/list.json +85 -0
  137. data/test/fixtures/kubernetes/list_node_pools.json +56 -0
  138. data/test/fixtures/kubernetes/list_resources.json +26 -0
  139. data/test/fixtures/kubernetes/retrieve.json +39 -0
  140. data/test/fixtures/kubernetes/retrieve_node_pool.json +25 -0
  141. data/test/fixtures/kubernetes/update_node_pool.json +19 -0
  142. data/test/fixtures/load_balancers/create.json +48 -0
  143. data/test/fixtures/load_balancers/create_forwarding_rule.json +1 -0
  144. data/test/fixtures/load_balancers/delete.json +1 -0
  145. data/test/fixtures/load_balancers/delete_forwarding_rule.json +1 -0
  146. data/test/fixtures/load_balancers/list.json +57 -0
  147. data/test/fixtures/load_balancers/list_firewall_rules.json +17 -0
  148. data/test/fixtures/load_balancers/list_forwarding_rules.json +18 -0
  149. data/test/fixtures/load_balancers/retrieve.json +48 -0
  150. data/test/fixtures/load_balancers/retrieve_firewall_rule.json +8 -0
  151. data/test/fixtures/load_balancers/retrieve_forwarding_rule.json +9 -0
  152. data/test/fixtures/load_balancers/update.json +1 -0
  153. data/test/fixtures/object_storage/create.json +14 -0
  154. data/test/fixtures/object_storage/delete.json +1 -0
  155. data/test/fixtures/object_storage/list.json +22 -0
  156. data/test/fixtures/object_storage/list_clusters.json +17 -0
  157. data/test/fixtures/object_storage/regenerate_keys.json +7 -0
  158. data/test/fixtures/object_storage/retrieve.json +13 -0
  159. data/test/fixtures/object_storage/update.json +1 -0
  160. data/test/fixtures/operating_systems/list.json +17 -0
  161. data/test/fixtures/plans/list.json +22 -0
  162. data/test/fixtures/plans/list_metal.json +24 -0
  163. data/test/fixtures/private_networks/create.json +10 -0
  164. data/test/fixtures/private_networks/delete.json +1 -0
  165. data/test/fixtures/private_networks/list.json +19 -0
  166. data/test/fixtures/private_networks/retrieve.json +10 -0
  167. data/test/fixtures/private_networks/update.json +1 -0
  168. data/test/fixtures/regions/list.json +20 -0
  169. data/test/fixtures/regions/list_availability.json +24 -0
  170. data/test/fixtures/reserved_ips/attach.json +1 -0
  171. data/test/fixtures/reserved_ips/convert.json +11 -0
  172. data/test/fixtures/reserved_ips/create.json +11 -0
  173. data/test/fixtures/reserved_ips/delete.json +1 -0
  174. data/test/fixtures/reserved_ips/detach.json +1 -0
  175. data/test/fixtures/reserved_ips/list.json +29 -0
  176. data/test/fixtures/reserved_ips/retrieve.json +11 -0
  177. data/test/fixtures/snapshots/create.json +11 -0
  178. data/test/fixtures/snapshots/create_from_url.json +11 -0
  179. data/test/fixtures/snapshots/delete.json +1 -0
  180. data/test/fixtures/snapshots/list.json +20 -0
  181. data/test/fixtures/snapshots/retrieve.json +11 -0
  182. data/test/fixtures/snapshots/update.json +1 -0
  183. data/test/fixtures/ssh_keys/create.json +8 -0
  184. data/test/fixtures/ssh_keys/delete.json +1 -0
  185. data/test/fixtures/ssh_keys/list.json +17 -0
  186. data/test/fixtures/ssh_keys/retrieve.json +8 -0
  187. data/test/fixtures/ssh_keys/update.json +1 -0
  188. data/test/fixtures/startup_scripts/create.json +10 -0
  189. data/test/fixtures/startup_scripts/delete.json +1 -0
  190. data/test/fixtures/startup_scripts/list.json +18 -0
  191. data/test/fixtures/startup_scripts/retrieve.json +10 -0
  192. data/test/fixtures/startup_scripts/update.json +1 -0
  193. data/test/fixtures/users/create.json +9 -0
  194. data/test/fixtures/users/delete.json +1 -0
  195. data/test/fixtures/users/list.json +29 -0
  196. data/test/fixtures/users/retrieve.json +20 -0
  197. data/test/fixtures/users/update.json +1 -0
  198. data/test/test_helper.rb +18 -5
  199. data/test/vultr/client_test.rb +8 -0
  200. data/test/vultr/object_test.rb +21 -0
  201. data/test/vultr/resources/account_test.rb +12 -0
  202. data/test/vultr/resources/applications_test.rb +15 -0
  203. data/test/vultr/resources/backups_test.rb +24 -0
  204. data/test/vultr/resources/bare_metal_test.rb +267 -0
  205. data/test/vultr/resources/block_storage_test.rb +85 -0
  206. data/test/vultr/resources/dns_test.rb +134 -0
  207. data/test/vultr/resources/firewall_test.rb +88 -0
  208. data/test/vultr/resources/instances_test.rb +325 -0
  209. data/test/vultr/resources/iso_test.rb +58 -0
  210. data/test/vultr/resources/kubernetes_test.rb +185 -0
  211. data/test/vultr/resources/load_balancers_test.rb +110 -0
  212. data/test/vultr/resources/object_storage_test.rb +71 -0
  213. data/test/vultr/resources/operating_systems_test.rb +15 -0
  214. data/test/vultr/resources/plans_test.rb +25 -0
  215. data/test/vultr/resources/private_networks_test.rb +50 -0
  216. data/test/vultr/resources/regions_test.rb +26 -0
  217. data/test/vultr/resources/reserved_ips_test.rb +67 -0
  218. data/test/vultr/resources/snapshots_test.rb +60 -0
  219. data/test/vultr/resources/ssh_keys_test.rb +50 -0
  220. data/test/vultr/resources/startup_scripts_test.rb +50 -0
  221. data/test/vultr/resources/users_test.rb +50 -0
  222. data/vultr.gemspec +17 -17
  223. metadata +394 -48
  224. data/test/vultr/vultr_account_test.rb +0 -29
  225. data/test/vultr/vultr_app_test.rb +0 -26
  226. data/test/vultr/vultr_backup_test.rb +0 -22
  227. data/test/vultr/vultr_iso_test.rb +0 -27
  228. data/test/vultr/vultr_os_test.rb +0 -21
  229. data/test/vultr/vultr_plan_test.rb +0 -22
  230. data/test/vultr/vultr_region_test.rb +0 -33
  231. data/test/vultr/vultr_snapshot_test.rb +0 -30
  232. data/test/vultr/vultr_sshkey_test.rb +0 -50
  233. data/test/vultr/vultr_startupscript_test.rb +0 -53
@@ -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
@@ -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