Finding droplets with a given tag in metadata API

October 25, 2018 683 views
API Clustering DigitalOcean

I'm looking to form a cluster of distributed Elixir nodes on DigitalOcean.

I wish to use droplet tags to do node discovery identify which droplets are intended to belong to the cluster, as I would on EC2 using this library: https://github.com/kyleaa/libcluster_ec2

It would work by polling a DO API every few seconds, querying to get the IP addresses of all droplets with the specified tag. Once I have these IPs I can handle the connection logic without problem.

What is the recommended way to find droplets with a given tag? From the DO metadata API docs it seems it does not provide that functionality.
Ideally it would be a simple JSON API call that requires no further authentication when called from the droplet itself.

Thanks,
Louis

1 Answer
asb MOD October 26, 2018
Accepted Answer

The aim of the metadata API is to allow a Droplet to access data about itself. This allows a Droplet to know what it is tagged with by calling:

curl http://169.254.169.254/metadata/v1/tags/

To list all Droplets with a specific tag, you would need to use the DigitalOcean public API. You can pass tag_name as a query parameter when listing your Droplets to only receive back ones with that tag. For example:

curl -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $TOKEN" \
    "https://api.digitalocean.com/v2/droplets?tag_name=database"
  • Thank you asb!

    Given DigitalOcean know that the droplet belongs to my account is it possible to forego the authentication header, like one can by applying a role to the machine on GCP or AWS?

Have another answer? Share your knowledge.