mirror of
https://github.com/avitex/elixir-vultr
synced 2024-11-21 10:59:57 +00:00
Remove tesla dependency
This commit is contained in:
parent
621359349a
commit
a1f08f09f0
186
lib/vultr.ex
186
lib/vultr.ex
@ -1,26 +1,12 @@
|
||||
defmodule Vultr do
|
||||
use Tesla, docs: false
|
||||
use Vultr.Request
|
||||
|
||||
plug Tesla.Middleware.BaseUrl, "https://api.vultr.com/v1"
|
||||
plug Tesla.Middleware.FormUrlencoded
|
||||
plug Tesla.Middleware.DecodeJson
|
||||
|
||||
adapter :ibrowse
|
||||
|
||||
@doc """
|
||||
Create a Vultr client with an API-Key for authenticated methods
|
||||
"""
|
||||
def client(api_key) do
|
||||
Tesla.build_client [
|
||||
{Tesla.Middleware.Headers, %{ "API-Key" => api_key }}
|
||||
]
|
||||
end
|
||||
use Vultr.Request, [
|
||||
base_url: "https://api.vultr.com/",
|
||||
]
|
||||
|
||||
##################################################
|
||||
# Account
|
||||
|
||||
request :get, "account/info", [
|
||||
request :get, "v1", "account/info", [
|
||||
desc: """
|
||||
Retrieve information about the current account.
|
||||
""",
|
||||
@ -31,7 +17,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Application
|
||||
|
||||
request :get, "app/list", [
|
||||
request :get, "v1", "app/list", [
|
||||
desc: """
|
||||
Retrieve a list of available applications.
|
||||
|
||||
@ -42,7 +28,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# API Key
|
||||
|
||||
request :get, "auth/info", [
|
||||
request :get, "v1", "auth/info", [
|
||||
desc: """
|
||||
Retrieve information about the current API key.
|
||||
""",
|
||||
@ -52,7 +38,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Backup
|
||||
|
||||
request :get, "backup/list", [
|
||||
request :get, "v1", "backup/list", [
|
||||
desc: """
|
||||
List all backups on the current account.
|
||||
""",
|
||||
@ -73,7 +59,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Block Storage
|
||||
|
||||
request :post, "block/attach", [
|
||||
request :post, "v1", "block/attach", [
|
||||
desc: """
|
||||
Attach a block storage subscription to a VPS subscription.
|
||||
|
||||
@ -97,7 +83,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "block/create", [
|
||||
request :post, "v1", "block/create", [
|
||||
desc: """
|
||||
Create a block storage subscription.
|
||||
""",
|
||||
@ -127,7 +113,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "block/delete", [
|
||||
request :post, "v1", "block/delete", [
|
||||
desc: """
|
||||
Delete a block storage subscription.
|
||||
|
||||
@ -146,7 +132,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "block/detach", [
|
||||
request :post, "v1", "block/detach", [
|
||||
desc: """
|
||||
Detach a block storage subscription from the currently attached instance.
|
||||
""",
|
||||
@ -162,7 +148,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "block/label_set", [
|
||||
request :post, "v1", "block/label_set", [
|
||||
desc: """
|
||||
Set the label of a block storage subscription.
|
||||
""",
|
||||
@ -184,7 +170,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "block/list", [
|
||||
request :get, "v1", "block/list", [
|
||||
desc: """
|
||||
Retrieve a list of any active block storage subscriptions on this account.
|
||||
""",
|
||||
@ -202,7 +188,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "block/resize", [
|
||||
request :post, "v1", "block/resize", [
|
||||
desc: """
|
||||
Resize the block storage volume to a new size.
|
||||
|
||||
@ -229,7 +215,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# DNS
|
||||
|
||||
request :post, "dns/create_domain", [
|
||||
request :post, "v1", "dns/create_domain", [
|
||||
desc: """
|
||||
Create a domain name in DNS.
|
||||
""",
|
||||
@ -251,7 +237,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "dns/create_record", [
|
||||
request :post, "v1", "dns/create_record", [
|
||||
desc: """
|
||||
Add a DNS record.
|
||||
""",
|
||||
@ -298,7 +284,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "dns/delete_domain", [
|
||||
request :post, "v1", "dns/delete_domain", [
|
||||
desc: """
|
||||
Delete a domain name and all associated records.
|
||||
""",
|
||||
@ -314,7 +300,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "dns/delete_record", [
|
||||
request :post, "v1", "dns/delete_record", [
|
||||
desc: """
|
||||
Delete an individual DNS record.
|
||||
""",
|
||||
@ -337,7 +323,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "dns/list", [
|
||||
request :get, "v1", "dns/list", [
|
||||
desc: """
|
||||
List all domains associated with the current account.
|
||||
""",
|
||||
@ -345,7 +331,7 @@ defmodule Vultr do
|
||||
required_access: :dns,
|
||||
]
|
||||
|
||||
request :get, "dns/records", [
|
||||
request :get, "v1", "dns/records", [
|
||||
desc: """
|
||||
List all the records associated with a particular domain.
|
||||
""",
|
||||
@ -361,7 +347,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "dns/update_record", [
|
||||
request :post, "v1", "dns/update_record", [
|
||||
desc: """
|
||||
Update a DNS record.
|
||||
""",
|
||||
@ -415,7 +401,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# ISO Image
|
||||
|
||||
request :get, "iso/list", [
|
||||
request :get, "v1", "iso/list", [
|
||||
desc: """
|
||||
List all ISOs currently available on this account.
|
||||
""",
|
||||
@ -426,7 +412,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Operating System
|
||||
|
||||
request :get, "os/list", [
|
||||
request :get, "v1", "os/list", [
|
||||
desc: """
|
||||
Retrieve a list of available operating systems.
|
||||
|
||||
@ -437,7 +423,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Plans
|
||||
|
||||
request :get, "plans/list", [
|
||||
request :get, "v1", "plans/list", [
|
||||
desc: """
|
||||
Retrieve a list of all active plans. Plans that are no longer available will not be shown.
|
||||
|
||||
@ -460,7 +446,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "plans/list_vc2", [
|
||||
request :get, "v1", "plans/list_vc2", [
|
||||
desc: """
|
||||
Retrieve a list of all active vc2 plans. Plans that are no longer available will not be shown.
|
||||
|
||||
@ -470,7 +456,7 @@ defmodule Vultr do
|
||||
""",
|
||||
]
|
||||
|
||||
request :get, "plans/list_vdc2", [
|
||||
request :get, "v1", "plans/list_vdc2", [
|
||||
desc: """
|
||||
Retrieve a list of all active vdc2 plans. Plans that are no longer available will not be shown.
|
||||
|
||||
@ -483,7 +469,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Regions
|
||||
|
||||
request :get, "regions/availability", [
|
||||
request :get, "v1", "regions/availability", [
|
||||
desc: """
|
||||
Retrieve a list of the `VPSPLANID`s currently available in this location.
|
||||
|
||||
@ -501,7 +487,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "regions/list", [
|
||||
request :get, "v1", "regions/list", [
|
||||
desc: """
|
||||
Retrieve a list of all active regions.
|
||||
|
||||
@ -512,7 +498,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Reserved IP
|
||||
|
||||
request :post, "reservedip/attach", [
|
||||
request :post, "v1", "reservedip/attach", [
|
||||
desc: """
|
||||
Attach a reserved IP to an existing subscription.
|
||||
""",
|
||||
@ -534,7 +520,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "reservedip/convert", [
|
||||
request :post, "v1", "reservedip/convert", [
|
||||
desc: """
|
||||
Convert an existing IP on a subscription to a reserved IP.
|
||||
|
||||
@ -565,7 +551,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "reservedip/create", [
|
||||
request :post, "v1", "reservedip/create", [
|
||||
desc: """
|
||||
Create a new reserved IP.
|
||||
|
||||
@ -598,7 +584,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "reservedip/destroy", [
|
||||
request :post, "v1", "reservedip/destroy", [
|
||||
desc: """
|
||||
Remove a reserved IP from your account.
|
||||
|
||||
@ -616,7 +602,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "reservedip/detach", [
|
||||
request :post, "v1", "reservedip/detach", [
|
||||
desc: """
|
||||
Detach a reserved IP from an existing subscription.
|
||||
""",
|
||||
@ -638,7 +624,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "reservedip/list", [
|
||||
request :get, "v1", "reservedip/list", [
|
||||
desc: """
|
||||
List all the active reserved IPs on this account.
|
||||
|
||||
@ -652,7 +638,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Server
|
||||
|
||||
request :post, "server/app_change", [
|
||||
request :post, "v1", "server/app_change", [
|
||||
desc: """
|
||||
Changes the virtual machine to a different application.
|
||||
|
||||
@ -678,7 +664,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/app_change_list", [
|
||||
request :get, "v1", "server/app_change_list", [
|
||||
desc: """
|
||||
Retrieves a list of applications to which a virtual machine can be changed.
|
||||
|
||||
@ -697,7 +683,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/backup_disable", [
|
||||
request :post, "v1", "server/backup_disable", [
|
||||
desc: """
|
||||
Disables automatic backups on a server.
|
||||
|
||||
@ -716,7 +702,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/backup_enable", [
|
||||
request :post, "v1", "server/backup_enable", [
|
||||
desc: """
|
||||
Enables automatic backups on a server.
|
||||
""",
|
||||
@ -733,7 +719,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/backup_get_schedule", [
|
||||
request :post, "v1", "server/backup_get_schedule", [
|
||||
desc: """
|
||||
Retrieves the backup schedule for a server.
|
||||
|
||||
@ -752,7 +738,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/backup_set_schedule", [
|
||||
request :post, "v1", "server/backup_set_schedule", [
|
||||
desc: """
|
||||
Sets the backup schedule for a server.
|
||||
|
||||
@ -802,7 +788,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/bandwidth", [
|
||||
request :get, "v1", "server/bandwidth", [
|
||||
desc: """
|
||||
Get the bandwidth used by a virtual machine.
|
||||
""",
|
||||
@ -819,7 +805,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/create", [
|
||||
request :post, "v1", "server/create", [
|
||||
desc: """
|
||||
Create a new virtual machine.
|
||||
|
||||
@ -973,7 +959,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/create_ipv4", [
|
||||
request :post, "v1", "server/create_ipv4", [
|
||||
desc: """
|
||||
Add a new IPv4 address to a server.
|
||||
|
||||
@ -1002,7 +988,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/destroy", [
|
||||
request :post, "v1", "server/destroy", [
|
||||
desc: """
|
||||
Destroy (delete) a virtual machine.
|
||||
|
||||
@ -1022,7 +1008,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/destroy_ipv4", [
|
||||
request :post, "v1", "server/destroy_ipv4", [
|
||||
desc: """
|
||||
Removes a secondary IPv4 address from a server.
|
||||
|
||||
@ -1042,7 +1028,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/get_app_info", [
|
||||
request :get, "v1", "server/get_app_info", [
|
||||
desc: """
|
||||
Retrieves the application information for this subscription.
|
||||
""",
|
||||
@ -1059,7 +1045,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/get_user_data", [
|
||||
request :get, "v1", "server/get_user_data", [
|
||||
desc: """
|
||||
Retrieves the (base64 encoded) user-data for this subscription.
|
||||
""",
|
||||
@ -1076,7 +1062,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/halt", [
|
||||
request :post, "v1", "server/halt", [
|
||||
desc: """
|
||||
Halt a virtual machine. This is a hard power off (basically, unplugging the machine).
|
||||
|
||||
@ -1096,7 +1082,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/iso_attach", [
|
||||
request :post, "v1", "server/iso_attach", [
|
||||
desc: """
|
||||
Attach an ISO and reboot the server.
|
||||
""",
|
||||
@ -1120,7 +1106,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/iso_detach", [
|
||||
request :post, "v1", "server/iso_detach", [
|
||||
desc: """
|
||||
Detach the currently mounted ISO and reboot the server.
|
||||
""",
|
||||
@ -1137,7 +1123,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/iso_status", [
|
||||
request :get, "v1", "server/iso_status", [
|
||||
desc: """
|
||||
Retrieve the current ISO state for a given subscription.
|
||||
|
||||
@ -1157,7 +1143,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/label_set", [
|
||||
request :post, "v1", "server/label_set", [
|
||||
desc: """
|
||||
Set the label of a virtual machine.
|
||||
""",
|
||||
@ -1180,7 +1166,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/list", [
|
||||
request :get, "v1", "server/list", [
|
||||
desc: """
|
||||
List all active or pending virtual machines on the current account.
|
||||
|
||||
@ -1232,7 +1218,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/list_ipv4", [
|
||||
request :get, "v1", "server/list_ipv4", [
|
||||
desc: """
|
||||
List the IPv4 information of a virtual machine.
|
||||
|
||||
@ -1242,7 +1228,7 @@ defmodule Vultr do
|
||||
required_access: :subscriptions,
|
||||
]
|
||||
|
||||
request :get, "server/list_ipv6", [
|
||||
request :get, "v1", "server/list_ipv6", [
|
||||
desc: """
|
||||
List the IPv6 information of a virtual machine.
|
||||
|
||||
@ -1253,7 +1239,7 @@ defmodule Vultr do
|
||||
required_access: :subscriptions,
|
||||
]
|
||||
|
||||
request :get, "server/neighbors", [
|
||||
request :get, "v1", "server/neighbors", [
|
||||
desc: """
|
||||
Determine what other subscriptions are hosted on the same physical host as a given subscription.
|
||||
""",
|
||||
@ -1270,7 +1256,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/os_change", [
|
||||
request :post, "v1", "server/os_change", [
|
||||
desc: """
|
||||
Changes the virtual machine to a different operating system.
|
||||
|
||||
@ -1296,7 +1282,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/os_change_list", [
|
||||
request :get, "v1", "server/os_change_list", [
|
||||
desc: """
|
||||
Retrieves a list of operating systems to which a virtual machine can be changed.
|
||||
|
||||
@ -1316,7 +1302,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/reboot", [
|
||||
request :post, "v1", "server/reboot", [
|
||||
desc: """
|
||||
Reboot a virtual machine.
|
||||
|
||||
@ -1335,7 +1321,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/reinstall", [
|
||||
request :post, "v1", "server/reinstall", [
|
||||
desc: """
|
||||
Reinstall the operating system on a virtual machine.
|
||||
|
||||
@ -1362,7 +1348,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/restore_backup", [
|
||||
request :post, "v1", "server/restore_backup", [
|
||||
desc: """
|
||||
Restore the specified backup to the virtual machine.
|
||||
|
||||
@ -1388,7 +1374,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/restore_snapshot", [
|
||||
request :post, "v1", "server/restore_snapshot", [
|
||||
desc: """
|
||||
Restore the specified snapshot to the virtual machine.
|
||||
|
||||
@ -1414,7 +1400,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/reverse_default_ipv4", [
|
||||
request :post, "v1", "server/reverse_default_ipv4", [
|
||||
desc: """
|
||||
Set a reverse DNS entry for an IPv4 address of a virtual machine to the original setting.
|
||||
|
||||
@ -1440,7 +1426,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/reverse_delete_ipv6", [
|
||||
request :post, "v1", "server/reverse_delete_ipv6", [
|
||||
desc: """
|
||||
Remove a reverse DNS entry for an IPv6 address of a virtual machine.
|
||||
|
||||
@ -1466,7 +1452,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "server/reverse_list_ipv6", [
|
||||
request :get, "v1", "server/reverse_list_ipv6", [
|
||||
desc: """
|
||||
List the IPv6 reverse DNS entries of a virtual machine.
|
||||
|
||||
@ -1486,7 +1472,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/reverse_set_ipv4", [
|
||||
request :post, "v1", "server/reverse_set_ipv4", [
|
||||
desc: """
|
||||
Set a reverse DNS entry for an IPv4 address of a virtual machine.
|
||||
|
||||
@ -1518,7 +1504,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/reverse_set_ipv6", [
|
||||
request :post, "v1", "server/reverse_set_ipv6", [
|
||||
desc: """
|
||||
Set a reverse DNS entry for an IPv6 address of a virtual machine.
|
||||
|
||||
@ -1550,7 +1536,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/set_user_data", [
|
||||
request :post, "v1", "server/set_user_data", [
|
||||
desc: """
|
||||
Sets the cloud-init user-data for this subscription.
|
||||
|
||||
@ -1575,7 +1561,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/start", [
|
||||
request :post, "v1", "server/start", [
|
||||
desc: """
|
||||
Start a virtual machine.
|
||||
|
||||
@ -1594,7 +1580,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/upgrade_plan", [
|
||||
request :post, "v1", "server/upgrade_plan", [
|
||||
desc: """
|
||||
Upgrade the plan of a virtual machine.
|
||||
|
||||
@ -1620,7 +1606,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "server/upgrade_plan_list", [
|
||||
request :post, "v1", "server/upgrade_plan_list", [
|
||||
desc: """
|
||||
Retrieve a list of the VPSPLANIDs for which a virtual machine can be upgraded.
|
||||
|
||||
@ -1642,7 +1628,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Snapshot
|
||||
|
||||
request :post, "snapshot/create", [
|
||||
request :post, "v1", "snapshot/create", [
|
||||
desc: """
|
||||
Create a snapshot from an existing virtual machine.
|
||||
|
||||
@ -1668,7 +1654,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "snapshot/destroy", [
|
||||
request :post, "v1", "snapshot/destroy", [
|
||||
desc: """
|
||||
Destroy (delete) a snapshot.
|
||||
|
||||
@ -1687,7 +1673,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "snapshot/list", [
|
||||
request :get, "v1", "snapshot/list", [
|
||||
desc: """
|
||||
List all snapshots on the current account.
|
||||
""",
|
||||
@ -1698,7 +1684,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# SSH Key
|
||||
|
||||
request :post, "sshkey/create", [
|
||||
request :post, "v1", "sshkey/create", [
|
||||
desc: """
|
||||
Create a new SSH Key.
|
||||
""",
|
||||
@ -1720,7 +1706,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "sshkey/destroy", [
|
||||
request :post, "v1", "sshkey/destroy", [
|
||||
desc: """
|
||||
Remove a SSH key.
|
||||
|
||||
@ -1739,7 +1725,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "sshkey/list", [
|
||||
request :get, "v1", "sshkey/list", [
|
||||
desc: """
|
||||
List all the SSH keys on the current account.
|
||||
""",
|
||||
@ -1747,7 +1733,7 @@ defmodule Vultr do
|
||||
required_access: :subscriptions,
|
||||
]
|
||||
|
||||
request :post, "sshkey/update", [
|
||||
request :post, "v1", "sshkey/update", [
|
||||
desc: """
|
||||
Update an existing SSH Key.
|
||||
|
||||
@ -1784,7 +1770,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# Startup Script
|
||||
|
||||
request :post, "startupscript/create", [
|
||||
request :post, "v1", "startupscript/create", [
|
||||
desc: """
|
||||
Create a startup script.
|
||||
""",
|
||||
@ -1814,7 +1800,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "startupscript/destroy", [
|
||||
request :post, "v1", "startupscript/destroy", [
|
||||
desc: """
|
||||
Remove a startup script.
|
||||
""",
|
||||
@ -1830,7 +1816,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "startupscript/list", [
|
||||
request :get, "v1", "startupscript/list", [
|
||||
desc: """
|
||||
List all startup scripts on the current account.
|
||||
|
||||
@ -1841,7 +1827,7 @@ defmodule Vultr do
|
||||
required_access: :subscriptions,
|
||||
]
|
||||
|
||||
request :post, "startupscript/update", [
|
||||
request :post, "v1", "startupscript/update", [
|
||||
desc: """
|
||||
Update an existing startup script.
|
||||
""",
|
||||
@ -1875,7 +1861,7 @@ defmodule Vultr do
|
||||
##################################################
|
||||
# User Management
|
||||
|
||||
request :post, "user/create", [
|
||||
request :post, "v1", "user/create", [
|
||||
desc: """
|
||||
Create a new user.
|
||||
""",
|
||||
@ -1916,7 +1902,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :post, "user/delete", [
|
||||
request :post, "v1", "user/delete", [
|
||||
desc: """
|
||||
Delete a user.
|
||||
""",
|
||||
@ -1932,7 +1918,7 @@ defmodule Vultr do
|
||||
},
|
||||
]
|
||||
|
||||
request :get, "user/list", [
|
||||
request :get, "v1", "user/list", [
|
||||
desc: """
|
||||
Retrieve a list of any users associated with this account.
|
||||
|
||||
@ -1951,7 +1937,7 @@ defmodule Vultr do
|
||||
required_access: :manage_users,
|
||||
]
|
||||
|
||||
request :post, "user/update", [
|
||||
request :post, "v1", "user/update", [
|
||||
desc: """
|
||||
Update the details for a user.
|
||||
""",
|
||||
|
@ -6,22 +6,32 @@ defmodule Vultr.Request do
|
||||
:isoid, :scriptid, :snapshotid, :sshkeyid, :backupid, :userid,
|
||||
]
|
||||
|
||||
defmacro __using__(_) do
|
||||
defmacro __using__(options) do
|
||||
module = __CALLER__.module
|
||||
|
||||
Module.register_attribute(module, :__request_opts__, persist: true)
|
||||
Module.put_attribute(module, :__request_opts__, options)
|
||||
|
||||
quote do
|
||||
import Vultr.Request, only: [request: 3]
|
||||
import Vultr.Request, only: [request: 4]
|
||||
end
|
||||
end
|
||||
|
||||
defmacro request(endpoint_method, endpoint_path, endpoint_opts) do
|
||||
defmacro request(endpoint_method, endpoint_version, endpoint_path, endpoint_opts) do
|
||||
request_opts = Module.get_attribute(__CALLER__.module, :__request_opts__)
|
||||
base_url = Keyword.fetch!(request_opts, :base_url)
|
||||
|
||||
endpoint_params = Keyword.get(endpoint_opts, :params, {nil, nil, []}) |> normalize_params
|
||||
endpoint_versioned_path = Path.join([endpoint_version, endpoint_path])
|
||||
endpoint_url = URI.merge(base_url, endpoint_versioned_path) |> to_string
|
||||
endpoint_description = Keyword.fetch!(endpoint_opts, :desc)
|
||||
endpoint_requires_api_key = Keyword.get(endpoint_opts, :api_key, nil)
|
||||
endpoint_required_access = Keyword.get(endpoint_opts, :required_access, nil)
|
||||
endpoint_has_params = (length(endpoint_params) > 0)
|
||||
|
||||
common_args = [__CALLER__.module, endpoint_method, endpoint_path]
|
||||
common_args = [endpoint_method, endpoint_url]
|
||||
|
||||
func = &__MODULE__.perform_request/5
|
||||
func = &__MODULE__.perform_request/4
|
||||
|
||||
func_name =
|
||||
endpoint_path
|
||||
@ -29,7 +39,7 @@ defmodule Vultr.Request do
|
||||
|> String.to_atom
|
||||
|
||||
func_doc = gen_doc(
|
||||
endpoint_method, endpoint_path,
|
||||
endpoint_method, endpoint_versioned_path,
|
||||
endpoint_description, endpoint_params,
|
||||
endpoint_required_access, endpoint_requires_api_key
|
||||
)
|
||||
@ -38,14 +48,14 @@ defmodule Vultr.Request do
|
||||
cond do
|
||||
endpoint_requires_api_key && endpoint_has_params ->
|
||||
quote do
|
||||
def unquote(func_name)(client, params \\ []) when is_list(params) do
|
||||
unquote(func).(unquote_splicing(common_args), client, params)
|
||||
def unquote(func_name)(api_key, params \\ []) when is_list(params) do
|
||||
unquote(func).(unquote_splicing(common_args), api_key, params)
|
||||
end
|
||||
end
|
||||
endpoint_requires_api_key ->
|
||||
quote do
|
||||
def unquote(func_name)(client) do
|
||||
unquote(func).(unquote_splicing(common_args), client, [])
|
||||
def unquote(func_name)(api_key) do
|
||||
unquote(func).(unquote_splicing(common_args), api_key, [])
|
||||
end
|
||||
end
|
||||
endpoint_has_params ->
|
||||
@ -68,24 +78,43 @@ defmodule Vultr.Request do
|
||||
end
|
||||
end
|
||||
|
||||
def perform_request(caller, method, url, client, params) do
|
||||
opts = [url: url, method: method] ++ prepare_params(method, params)
|
||||
resp = Tesla.perform_request(caller, client, opts)
|
||||
case resp.status do
|
||||
200 -> {:ok, resp.body}
|
||||
400 -> {:error, :invalid_api_location, resp.body}
|
||||
403 -> {:error, :invalid_api_key, resp.body}
|
||||
405 -> {:error, :invalid_http_method, resp.body}
|
||||
412 -> {:error, :bad_request, resp.body}
|
||||
500 -> {:error, :server_error, resp.body}
|
||||
503 -> {:error, :rate_limit, resp.body}
|
||||
def perform_request(method, url, api_key, params) do
|
||||
headers = prepare_api_key_header(api_key)
|
||||
opts = [headers: headers] ++ prepare_params(method, params)
|
||||
resp = HTTPotion.request(method, url, opts)
|
||||
parsed_body = parse_body(resp)
|
||||
|
||||
case resp.status_code do
|
||||
200 -> {:ok, parsed_body}
|
||||
400 -> {:error, :invalid_api_location, parsed_body}
|
||||
403 -> {:error, :invalid_api_key, parsed_body}
|
||||
405 -> {:error, :invalid_http_method, parsed_body}
|
||||
412 -> {:error, :bad_request, parsed_body}
|
||||
500 -> {:error, :server_error, parsed_body}
|
||||
503 -> {:error, :rate_limit, parsed_body}
|
||||
end
|
||||
end
|
||||
|
||||
defp prepare_params(:get, nil), do: [query: []]
|
||||
defp prepare_params(_, nil), do: [body: %{}]
|
||||
defp prepare_params(:get, params), do: [query: capitalize_special_params(params)]
|
||||
defp prepare_params(_, params), do: [body: Enum.into(capitalize_special_params(params), %{})]
|
||||
defp parse_body(%HTTPotion.Response{ body: body, headers: headers }) do
|
||||
case HTTPotion.Headers.fetch(headers, "content-type") do
|
||||
{:ok, "application/json"} ->
|
||||
Poison.decode!(body)
|
||||
_ ->
|
||||
body
|
||||
end
|
||||
end
|
||||
|
||||
defp prepare_api_key_header(nil), do: []
|
||||
defp prepare_api_key_header(api_key), do: ["API-Key": api_key]
|
||||
|
||||
defp prepare_params(:get, params), do: [query: prepare_query(params)]
|
||||
defp prepare_params(_, params), do: [body: prepare_body(params)]
|
||||
|
||||
defp prepare_body(nil), do: ""
|
||||
defp prepare_body(params), do: capitalize_special_params(params) |> Enum.into(%{}) |> Poison.encode!
|
||||
|
||||
defp prepare_query(nil), do: false
|
||||
defp prepare_query(params), do: capitalize_special_params(params)
|
||||
|
||||
defp capitalize_special_params(params) do
|
||||
Enum.map(params, fn {k, v} ->
|
||||
@ -122,36 +151,42 @@ defmodule Vultr.Request do
|
||||
# Documentation helpers
|
||||
|
||||
defp gen_doc(method, path, desc, params, required_access, api_key) do
|
||||
doc = """
|
||||
#{desc}
|
||||
"""
|
||||
|
||||
doc =
|
||||
if length(params) > 0 do
|
||||
doc <> ("""
|
||||
### Params
|
||||
| Name | Type | Optional | Description |
|
||||
| ---- | ---- | -------- | ----------- |
|
||||
#{doc_params(params)}
|
||||
""")
|
||||
else
|
||||
doc
|
||||
end
|
||||
|
||||
doc <> """
|
||||
#{desc}
|
||||
#{doc_params(params)}
|
||||
### Backend
|
||||
- Method: `#{doc_method(method)}`
|
||||
- Path: `/v1/#{path}`
|
||||
- Path: `#{path}`
|
||||
- API Key: `#{doc_api_key(api_key)}`
|
||||
- Required Access: `#{doc_required_access(required_access)}`
|
||||
"""
|
||||
end
|
||||
|
||||
defp doc_param(param), do: """
|
||||
| `#{String.downcase(param.name)}` | #{param.type_string} | #{doc_optional_default(param.optional, param.default)} | #{param.desc |> String.replace("\n", "<br>")} |
|
||||
"""
|
||||
defp doc_params([]), do: ""
|
||||
defp doc_params(params) do
|
||||
param_rows =
|
||||
params
|
||||
|> Enum.map(&doc_param/1)
|
||||
|> Enum.join("")
|
||||
|
||||
defp doc_params(params), do: params |> Enum.map(&doc_param/1) |> Enum.join("")
|
||||
"""
|
||||
### Params
|
||||
| Name | Type | Optional | Description |
|
||||
| ---- | ---- | -------- | ----------- |
|
||||
#{param_rows}
|
||||
"""
|
||||
end
|
||||
|
||||
defp doc_param(param) do
|
||||
columns = [
|
||||
"`#{String.downcase(param.name)}`",
|
||||
param.type_string,
|
||||
doc_optional_default(param.optional, param.default),
|
||||
String.replace(param.desc, "\n", "<br>"),
|
||||
]
|
||||
|
||||
"| #{Enum.join(columns, " | ")} |"
|
||||
end
|
||||
|
||||
defp doc_optional_default(optional, default) do
|
||||
if optional do
|
||||
@ -167,13 +202,7 @@ defmodule Vultr.Request do
|
||||
end
|
||||
end
|
||||
|
||||
defp doc_method(method) do
|
||||
if !Enum.any?([:get, :post], fn supported -> method == supported end) do
|
||||
raise ArgumentError, message: "Bad method"
|
||||
end
|
||||
|
||||
method |> Atom.to_string |> String.upcase
|
||||
end
|
||||
defp doc_method(method), do: method |> Atom.to_string |> String.upcase
|
||||
|
||||
defp doc_api_key(nil), do: "No"
|
||||
defp doc_api_key(atm), do: atom_to_word(atm)
|
||||
|
5
mix.exs
5
mix.exs
@ -16,14 +16,13 @@ defmodule Vultr.Mixfile do
|
||||
|
||||
# Configuration for the OTP application
|
||||
def application, do: [
|
||||
applications: [:tesla, :ibrowse],
|
||||
applications: [:httpotion],
|
||||
]
|
||||
|
||||
defp deps, do: [
|
||||
{:inch_ex, "~> 0.5", only: :docs},
|
||||
{:ex_doc, "~> 0.16", only: :dev, runtime: false},
|
||||
{:tesla, "~> 0.7.2"},
|
||||
{:ibrowse, "~> 4.2"},
|
||||
{:httpotion, "~> 3.0.2"},
|
||||
{:poison, "~> 3.1"},
|
||||
]
|
||||
|
||||
|
12
mix.lock
12
mix.lock
@ -1,12 +1,6 @@
|
||||
%{"certifi": {:hex, :certifi, "1.0.0", "1c787a85b1855ba354f0b8920392c19aa1d06b0ee1362f9141279620a5be2039", [:rebar3], []},
|
||||
"earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], []},
|
||||
%{"earmark": {:hex, :earmark, "1.2.3", "206eb2e2ac1a794aa5256f3982de7a76bf4579ff91cb28d0e17ea2c9491e46a4", [:mix], []},
|
||||
"ex_doc": {:hex, :ex_doc, "0.16.3", "cd2a4cfe5d26e37502d3ec776702c72efa1adfa24ed9ce723bb565f4c30bd31a", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, optional: false]}]},
|
||||
"hackney": {:hex, :hackney, "1.6.6", "5564b4695d48fd87859e9df77a7fa4b4d284d24519f0cd7cc898f09e8fbdc8a3", [:rebar3], [{:certifi, "1.0.0", [hex: :certifi, optional: false]}, {:idna, "4.0.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]},
|
||||
"httpotion": {:hex, :httpotion, "3.0.3", "17096ea1a7c0b2df74509e9c15a82b670d66fc4d66e6ef584189f63a9759428d", [], [{:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: false]}], "hexpm"},
|
||||
"ibrowse": {:hex, :ibrowse, "4.4.0", "2d923325efe0d2cb09b9c6a047b2835a5eda69d8a47ed6ff8bc03628b764e991", [:rebar3], []},
|
||||
"idna": {:hex, :idna, "4.0.0", "10aaa9f79d0b12cf0def53038547855b91144f1bfcc0ec73494f38bb7b9c4961", [:rebar3], []},
|
||||
"inch_ex": {:hex, :inch_ex, "0.5.6", "418357418a553baa6d04eccd1b44171936817db61f4c0840112b420b8e378e67", [:mix], [{:poison, "~> 1.5 or ~> 2.0 or ~> 3.0", [hex: :poison, optional: false]}]},
|
||||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []},
|
||||
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []},
|
||||
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []},
|
||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []},
|
||||
"tesla": {:hex, :tesla, "0.7.2", "29290de334f1064e98c32d0ba5e73674fdbe53c17f8af7bcc686bf5002a30bab", [:mix], [{:exjsx, ">= 0.1.0", [hex: :exjsx, optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, optional: true]}, {:ibrowse, "~> 4.2", [hex: :ibrowse, optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, optional: true]}]}}
|
||||
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}}
|
||||
|
Loading…
Reference in New Issue
Block a user