Difference between revisions of "Category:DigitalOcean"
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | <div style="margin: 10px; padding: 5px; border: 2px solid red; text-align: center">'''NOTE:''' This article was written in 2015 and is no longer maintained.</div> | ||
+ | |||
This category will be all about using '''[https://www.digitalocean.com/ DigitalOcean's]''' various Cloud products and services. | This category will be all about using '''[https://www.digitalocean.com/ DigitalOcean's]''' various Cloud products and services. | ||
Line 7: | Line 9: | ||
===Environment variables=== | ===Environment variables=== | ||
− | $ API_URL="https://api.digitalocean.com/v2" | + | $ API_URL="<nowiki>https://api.digitalocean.com/v2</nowiki>" |
$ TOKEN=<YOUR_API_TOKEN> | $ TOKEN=<YOUR_API_TOKEN> | ||
I will be using the above environment variables for the remainder of this article. | I will be using the above environment variables for the remainder of this article. | ||
+ | |||
+ | ===Account=== | ||
+ | |||
+ | * Get your DigitalOcean (basic) account information: | ||
+ | $ curl -sXGET "${API_URL}/account" \ | ||
+ | -H "Authorization: Bearer ${TOKEN}" \ | ||
+ | -H "Content-Type: application/json" | python -mjson.tool | ||
+ | { | ||
+ | "account": { | ||
+ | "droplet_limit": 25, | ||
+ | "email": "bob@example.com", | ||
+ | "email_verified": true, | ||
+ | "uuid": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" | ||
+ | } | ||
+ | } | ||
===Regions=== | ===Regions=== | ||
Line 28: | Line 45: | ||
* sfo1 ("San Francisco 1") | * sfo1 ("San Francisco 1") | ||
* sgp1 ("Singapore 1") | * sgp1 ("Singapore 1") | ||
+ | * tor1 ("Toronto 1") | ||
+ | |||
+ | Another way (useful for scripting) is to pipe the output through [[jq]]: | ||
+ | |||
+ | $ curl "${API_URL}/regions" \ | ||
+ | -H "Authorization: Bearer ${TOKEN}" \ | ||
+ | -H "Content-Type: application/json" | jq -crM '[.regions[] | .slug]' | ||
+ | ["nyc1","sfo1","nyc2","ams2","sgp1","lon1","nyc3","ams3","fra1","tor1"] | ||
+ | |||
+ | A quick-and-dirty way to get a pretty table output of the DigitalOcean regions available for Droplets (and the associated sizes and features) is with a Python script something like the following: | ||
+ | |||
+ | <pre> | ||
+ | #!/usr/bin/env python | ||
+ | import re, sys, requests | ||
+ | from prettytable import PrettyTable | ||
+ | TOKEN = "<REDACTED>" | ||
+ | ENDPOINT = "https://api.digitalocean.com/v2" | ||
+ | headers = {'Content-Type': 'application/json', | ||
+ | "Authorization": "Bearer %s" % TOKEN} | ||
+ | r = requests.get(ENDPOINT + "/regions", headers=headers) | ||
+ | |||
+ | errmsg = "Could not connect to DigitalOcean. Exiting..." | ||
+ | regions = r.json()['regions'] if r.status_code == 200 else sys.exit(errmsg) | ||
+ | |||
+ | table = PrettyTable(["Slug", "Name", "Sizes", "Features"]) | ||
+ | table.align = "l" | ||
+ | |||
+ | size_re = re.compile(r"^(\d+)(.*)$") | ||
+ | mult = dict(KB=2**10, MB=2**20, GB=2**30) | ||
+ | |||
+ | def getsize(size): | ||
+ | value = size_re.match(size).group(1) | ||
+ | unit = size_re.match(size).group(2) | ||
+ | multiplier = mult[unit.upper()] | ||
+ | return float(value) * multiplier | ||
+ | |||
+ | for region in regions: | ||
+ | sizes = '; '.join(sorted(region["sizes"], key=getsize)) \ | ||
+ | if region["available"] else "<unavailable>" | ||
+ | table.add_row([region["slug"], region["name"], sizes, | ||
+ | ', '.join(region["features"])]) | ||
+ | |||
+ | print table.get_string(sortby="Slug") | ||
+ | </pre> | ||
+ | |||
+ | Running the above script produces: | ||
+ | <pre> | ||
+ | +------+-----------------+---------------------------------------------------+---------------------------------------------+ | ||
+ | | Slug | Name | Sizes | Features | | ||
+ | +------+-----------------+---------------------------------------------------+---------------------------------------------+ | ||
+ | | ams1 | Amsterdam 1 | <unavailable> | backups | | ||
+ | | ams2 | Amsterdam 2 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | | ams3 | Amsterdam 3 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | | fra1 | Frankfurt 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | | lon1 | London 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | | nyc1 | New York 1 | <unavailable> | backups, metadata | | ||
+ | | nyc2 | New York 2 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups | | ||
+ | | nyc3 | New York 3 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | | sfo1 | San Francisco 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | | sgp1 | Singapore 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ||
+ | +------+-----------------+---------------------------------------------------+---------------------------------------------+ | ||
+ | </pre> | ||
===Droplets=== | ===Droplets=== | ||
Line 39: | Line 118: | ||
<pre> | <pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
# RESPONSE BODY: | # RESPONSE BODY: | ||
{ | { | ||
Line 88: | Line 161: | ||
$ curl -XGET "${API_URL}/droplets" \ | $ curl -XGET "${API_URL}/droplets" \ | ||
− | -H "Content-Type: application/json" \ | + | -H "Authorization: Bearer ${TOKEN}" \ |
− | -H "Authorization: Bearer ${TOKEN}" | python -mjson.tool | + | -H "Content-Type: application/json" | python -mjson.tool |
+ | |||
+ | Or, pretty print the output: | ||
+ | $ curl -sXGET "${API_URL}/droplets" \ | ||
+ | -H "Authorization: Bearer ${TOKEN}" \ | ||
+ | -H "Content-Type: application/json" |\ | ||
+ | python -c 'import sys,json;data=json.loads(sys.stdin.read());\ | ||
+ | print "ID\tName\tRegion\n";\ | ||
+ | print "\n".join(["%s\t%s\t%s"%(d["id"],d["name"],d["region"]["slug"])\ | ||
+ | for d in data["droplets"]])'|column -t | ||
+ | |||
+ | ID Name Region | ||
+ | 1234567 my-test-droplet-1 nyc3 | ||
+ | 2345678 my-test-droplet-2 ams1 | ||
+ | |||
+ | * List the details of a given Droplet: | ||
+ | |||
+ | $ DROPLET_ID=1234567 | ||
+ | $ curl -sXGET "${API_URL}/droplets/${DROPLET_ID}" \ | ||
+ | -H "Authorization: Bearer ${TOKEN}" \ | ||
+ | -H "Content-Type: application/json" | python -mjson.tool | ||
+ | |||
+ | * Delete a given droplet: | ||
+ | $ DROPLET_ID=1234567 | ||
+ | $ curl -X DELETE "${API_URL}/droplets/${DROPLET_ID}" \ | ||
+ | -H "Authorization: Bearer ${TOKEN}" \ | ||
+ | -H 'Content-Type: application/json' | ||
+ | |||
+ | ===Images=== | ||
+ | |||
+ | A quick-and-dirty way to get a pretty table output of the DigitalOcean images available for Droplets is with a Python script something like the following: | ||
+ | <pre> | ||
+ | #!/usr/bin/env python | ||
+ | import sys, requests | ||
+ | from prettytable import PrettyTable | ||
+ | TOKEN = "<REDACTED>" | ||
+ | ENDPOINT = "https://api.digitalocean.com/v2" | ||
+ | headers = {'Content-Type': 'application/json', | ||
+ | "Authorization": "Bearer %s" % TOKEN} | ||
+ | r = requests.get(ENDPOINT + "/images", headers=headers) | ||
+ | errmsg = "Could not connect to DigitalOcean. Exiting..." | ||
+ | images = r.json()['images'] if r.status_code == 200 else sys.exit(errmsg) | ||
+ | |||
+ | table = PrettyTable(["ID", "Slug", "Distribution", "Name", "Type"]) | ||
+ | table.align = "l" | ||
+ | [table.add_row([image["id"], image["slug"], image["distribution"], | ||
+ | image["name"], image["type"]]) for image in images] | ||
+ | |||
+ | print table.get_string(sortby="Slug") | ||
+ | </pre> | ||
+ | |||
+ | Running the above script produces: | ||
+ | <pre> | ||
+ | +----------+------------------+--------------+------------------+----------+ | ||
+ | | ID | Slug | Distribution | Name | Type | | ||
+ | +----------+------------------+--------------+------------------+----------+ | ||
+ | | 6372425 | centos-5-8-x32 | CentOS | 5.10 x32 | snapshot | | ||
+ | | 6372321 | centos-5-8-x64 | CentOS | 5.10 x64 | snapshot | | ||
+ | | 11523060 | centos-6-5-x32 | CentOS | 6.5 x32 | snapshot | | ||
+ | | 11523085 | centos-6-5-x64 | CentOS | 6.5 x64 | snapshot | | ||
+ | | 10322623 | centos-7-0-x64 | CentOS | 7 x64 | snapshot | | ||
+ | | 12276929 | coreos-alpha | CoreOS | 709.0.0 (alpha) | snapshot | | ||
+ | | 12334225 | coreos-beta | CoreOS | 695.2.0 (beta) | snapshot | | ||
+ | | 12247463 | coreos-stable | CoreOS | 681.0.0 (stable) | snapshot | | ||
+ | | 6372662 | debian-6-0-x32 | Debian | 6.0 x32 | snapshot | | ||
+ | | 6372581 | debian-6-0-x64 | Debian | 6.0 x64 | snapshot | | ||
+ | | 10322378 | debian-7-0-x32 | Debian | 7.0 x32 | snapshot | | ||
+ | | 10322059 | debian-7-0-x64 | Debian | 7.0 x64 | snapshot | | ||
+ | | 6370885 | fedora-20-x32 | Fedora | 20 x32 | snapshot | | ||
+ | | 6370882 | fedora-20-x64 | Fedora | 20 x64 | snapshot | | ||
+ | | 9640922 | fedora-21-x64 | Fedora | 21 x64 | snapshot | | ||
+ | | 10144573 | freebsd-10-1-x64 | FreeBSD | 10.1 | snapshot | | ||
+ | | 10321777 | ubuntu-12-04-x32 | Ubuntu | 12.04.5 x32 | snapshot | | ||
+ | | 10321756 | ubuntu-12-04-x64 | Ubuntu | 12.04.5 x64 | snapshot | | ||
+ | | 9801951 | ubuntu-14-10-x32 | Ubuntu | 14.10 x32 | snapshot | | ||
+ | | 9801954 | ubuntu-14-10-x64 | Ubuntu | 14.10 x64 | snapshot | | ||
+ | +----------+------------------+--------------+------------------+----------+ | ||
+ | </pre> | ||
==External links== | ==External links== | ||
Line 95: | Line 245: | ||
[[Category:Technical and Specialized Skills]] | [[Category:Technical and Specialized Skills]] | ||
+ | [[Category:APIs]] |
Latest revision as of 12:12, 29 February 2020
This category will be all about using DigitalOcean's various Cloud products and services.
Contents
DigitalOcean API
Note: This category and associated articles will only cover version 2 (v2) of the DigitalOcean API.
Environment variables
$ API_URL="https://api.digitalocean.com/v2" $ TOKEN=<YOUR_API_TOKEN>
I will be using the above environment variables for the remainder of this article.
Account
- Get your DigitalOcean (basic) account information:
$ curl -sXGET "${API_URL}/account" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" | python -mjson.tool { "account": { "droplet_limit": 25, "email": "bob@example.com", "email_verified": true, "uuid": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" } }
Regions
$ curl "${API_URL}/regions" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" | python -mjson.tool
- ams1 ("Amsterdam 1")
- ams2 ("Amsterdam 2")
- ams3 ("Amsterdam 3")
- fra1 ("Frankfurt 1")
- lon1 ("London 1")
- nyc1 ("New York 1")
- nyc2 ("New York 2")
- nyc3 ("New York 3")
- sfo1 ("San Francisco 1")
- sgp1 ("Singapore 1")
- tor1 ("Toronto 1")
Another way (useful for scripting) is to pipe the output through jq:
$ curl "${API_URL}/regions" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" | jq -crM '[.regions[] | .slug]' ["nyc1","sfo1","nyc2","ams2","sgp1","lon1","nyc3","ams3","fra1","tor1"]
A quick-and-dirty way to get a pretty table output of the DigitalOcean regions available for Droplets (and the associated sizes and features) is with a Python script something like the following:
#!/usr/bin/env python import re, sys, requests from prettytable import PrettyTable TOKEN = "<REDACTED>" ENDPOINT = "https://api.digitalocean.com/v2" headers = {'Content-Type': 'application/json', "Authorization": "Bearer %s" % TOKEN} r = requests.get(ENDPOINT + "/regions", headers=headers) errmsg = "Could not connect to DigitalOcean. Exiting..." regions = r.json()['regions'] if r.status_code == 200 else sys.exit(errmsg) table = PrettyTable(["Slug", "Name", "Sizes", "Features"]) table.align = "l" size_re = re.compile(r"^(\d+)(.*)$") mult = dict(KB=2**10, MB=2**20, GB=2**30) def getsize(size): value = size_re.match(size).group(1) unit = size_re.match(size).group(2) multiplier = mult[unit.upper()] return float(value) * multiplier for region in regions: sizes = '; '.join(sorted(region["sizes"], key=getsize)) \ if region["available"] else "<unavailable>" table.add_row([region["slug"], region["name"], sizes, ', '.join(region["features"])]) print table.get_string(sortby="Slug")
Running the above script produces:
+------+-----------------+---------------------------------------------------+---------------------------------------------+ | Slug | Name | Sizes | Features | +------+-----------------+---------------------------------------------------+---------------------------------------------+ | ams1 | Amsterdam 1 | <unavailable> | backups | | ams2 | Amsterdam 2 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | ams3 | Amsterdam 3 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | fra1 | Frankfurt 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | lon1 | London 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | nyc1 | New York 1 | <unavailable> | backups, metadata | | nyc2 | New York 2 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups | | nyc3 | New York 3 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | sfo1 | San Francisco 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | | sgp1 | Singapore 1 | 512mb; 1gb; 2gb; 4gb; 8gb; 16gb; 32gb; 48gb; 64gb | private_networking, backups, ipv6, metadata | +------+-----------------+---------------------------------------------------+---------------------------------------------+
Droplets
- Create a Droplet:
$ curl -vXPOST "${API_URL}/droplets" \ -d'{"name":"my-test-droplet","region":"nyc3","size":"512mb","image":"ubuntu-14-04-x64"}' \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json"
# RESPONSE BODY: { "droplet": { "backup_ids": [], "created_at": "2015-05-05T20:26:24Z", "disk": 20, "features": [ "virtio" ], "id": 1234567, "image": {}, "kernel": { "id": 2924, "name": "Ubuntu 14.04 x64 vmlinuz-3.13.0-43-generic", "version": "3.13.0-43-generic" }, "locked": true, "memory": 512, "name": "my-test-droplet", "networks": {}, "next_backup_window": null, "region": {}, "size": {}, "size_slug": "512mb", "snapshot_ids": [], "status": "new", "vcpus": 1 }, "links": { "actions": [ { "href": "https://api.digitalocean.com/v2/actions/87654321", "id": 87654321, "rel": "create" } ] } }
- List Droplets on your account:
$ curl -XGET "${API_URL}/droplets" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" | python -mjson.tool
Or, pretty print the output:
$ curl -sXGET "${API_URL}/droplets" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" |\ python -c 'import sys,json;data=json.loads(sys.stdin.read());\ print "ID\tName\tRegion\n";\ print "\n".join(["%s\t%s\t%s"%(d["id"],d["name"],d["region"]["slug"])\ for d in data["droplets"]])'|column -t
ID Name Region 1234567 my-test-droplet-1 nyc3 2345678 my-test-droplet-2 ams1
- List the details of a given Droplet:
$ DROPLET_ID=1234567 $ curl -sXGET "${API_URL}/droplets/${DROPLET_ID}" \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/json" | python -mjson.tool
- Delete a given droplet:
$ DROPLET_ID=1234567 $ curl -X DELETE "${API_URL}/droplets/${DROPLET_ID}" \ -H "Authorization: Bearer ${TOKEN}" \ -H 'Content-Type: application/json'
Images
A quick-and-dirty way to get a pretty table output of the DigitalOcean images available for Droplets is with a Python script something like the following:
#!/usr/bin/env python import sys, requests from prettytable import PrettyTable TOKEN = "<REDACTED>" ENDPOINT = "https://api.digitalocean.com/v2" headers = {'Content-Type': 'application/json', "Authorization": "Bearer %s" % TOKEN} r = requests.get(ENDPOINT + "/images", headers=headers) errmsg = "Could not connect to DigitalOcean. Exiting..." images = r.json()['images'] if r.status_code == 200 else sys.exit(errmsg) table = PrettyTable(["ID", "Slug", "Distribution", "Name", "Type"]) table.align = "l" [table.add_row([image["id"], image["slug"], image["distribution"], image["name"], image["type"]]) for image in images] print table.get_string(sortby="Slug")
Running the above script produces:
+----------+------------------+--------------+------------------+----------+ | ID | Slug | Distribution | Name | Type | +----------+------------------+--------------+------------------+----------+ | 6372425 | centos-5-8-x32 | CentOS | 5.10 x32 | snapshot | | 6372321 | centos-5-8-x64 | CentOS | 5.10 x64 | snapshot | | 11523060 | centos-6-5-x32 | CentOS | 6.5 x32 | snapshot | | 11523085 | centos-6-5-x64 | CentOS | 6.5 x64 | snapshot | | 10322623 | centos-7-0-x64 | CentOS | 7 x64 | snapshot | | 12276929 | coreos-alpha | CoreOS | 709.0.0 (alpha) | snapshot | | 12334225 | coreos-beta | CoreOS | 695.2.0 (beta) | snapshot | | 12247463 | coreos-stable | CoreOS | 681.0.0 (stable) | snapshot | | 6372662 | debian-6-0-x32 | Debian | 6.0 x32 | snapshot | | 6372581 | debian-6-0-x64 | Debian | 6.0 x64 | snapshot | | 10322378 | debian-7-0-x32 | Debian | 7.0 x32 | snapshot | | 10322059 | debian-7-0-x64 | Debian | 7.0 x64 | snapshot | | 6370885 | fedora-20-x32 | Fedora | 20 x32 | snapshot | | 6370882 | fedora-20-x64 | Fedora | 20 x64 | snapshot | | 9640922 | fedora-21-x64 | Fedora | 21 x64 | snapshot | | 10144573 | freebsd-10-1-x64 | FreeBSD | 10.1 | snapshot | | 10321777 | ubuntu-12-04-x32 | Ubuntu | 12.04.5 x32 | snapshot | | 10321756 | ubuntu-12-04-x64 | Ubuntu | 12.04.5 x64 | snapshot | | 9801951 | ubuntu-14-10-x32 | Ubuntu | 14.10 x32 | snapshot | | 9801954 | ubuntu-14-10-x64 | Ubuntu | 14.10 x64 | snapshot | +----------+------------------+--------------+------------------+----------+
External links
This category currently contains no pages or media.