How to get droplet name in bash?

January 9, 2019 568 views
Linux Commands DigitalOcean Ubuntu 18.04

I would like to retrieve the droplet name in bash to use as an argument for my script, is there a way to get this info?

2 Answers

You’d need to use the DO API v2 for this. A simple curl to the API would get you the droplet name.

Cheers

Yes it’s doable. The droplet listing API call will get you all droplets in the account and their respective IPs. So from the droplet itself get the IP:

# Make sure to: yum install net-tools
IP=$(ifconfig eth0 |grep "inet "|awk '{print $2}')

Then call the API to get the droplet list and match the droplet with the IP from above.

JSON=$(curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $API_KEY" "https://api.digitalocean.com/v2/droplets?page=1&per_page=1")

{
  "droplets": [
    {
      "id": 3164444,
      "name": "example.com",
      "memory": 1024,
      "vcpus": 1,
      "disk": 25,
      "locked": false,
      "status": "active",
      "kernel": {
        "id": 2233,
        "name": "Ubuntu 14.04 x64 vmlinuz-3.13.0-37-generic",
        "version": "3.13.0-37-generic"
      },
      "created_at": "2014-11-14T16:29:21Z",
      "features": [
        "backups",
        "ipv6",
        "virtio"
      ],
      "backup_ids": [
        7938002
      ],
      "snapshot_ids": [

      ],
      "image": {
        "id": 6918990,
        "name": "14.04 x64",
        "distribution": "Ubuntu",
        "slug": "ubuntu-16-04-x64",
        "public": true,
        "regions": [
          "nyc1",
          "ams1",
          "sfo1",
          "nyc2",
          "ams2",
          "sgp1",
          "lon1",
          "nyc3",
          "ams3",
          "nyc3"
        ],
        "created_at": "2014-10-17T20:24:33Z",
        "type": "snapshot",
        "min_disk_size": 20,
        "size_gigabytes": 2.34
      },
      "volume_ids": [

      ],
      "size": {
      },
      "size_slug": "s-1vcpu-1gb",
      "networks": {
        "v4": [
          {
            "ip_address": "104.236.32.182",
            "netmask": "255.255.192.0",
            "gateway": "104.236.0.1",
            "type": "public"
          }
        ],
        "v6": [
          {
            "ip_address": "2604:A880:0800:0010:0000:0000:02DD:4001",
            "netmask": 64,
            "gateway": "2604:A880:0800:0010:0000:0000:0000:0001",
            "type": "public"
          }
        ]
      },
      "region": {
        "name": "New York 3",
        "slug": "nyc3",
        "sizes": [

        ],
        "features": [
          "virtio",
          "private_networking",
          "backups",
          "ipv6",
          "metadata"
        ],
        "available": null
      },
      "tags": [

      ]
    }
  ],
  "links": {
    "pages": {
      "last": "https://api.digitalocean.com/v2/droplets?page=3&per_page=1",
      "next": "https://api.digitalocean.com/v2/droplets?page=2&per_page=1"
    }
  },
  "meta": {
    "total": 3
  }
} 

  • Thanks, I appreciate your help.

    A few problems: if I have multiple droplets then how do I know which droplet to retrieve the name from? And in the case I have an identifier (e.g IP address) for the droplet, then retrieving the name only half the serves the purpose of what I am trying to do which is retrieving an identifier of the droplet I am currently ON.

    • Are you asking about how to programmatically match the current server’s IP to one of the droplets in the JSON object?

      Cheers

      • No, that’s not what I meant. The curl example you gave me lists all the droplets, how do I know which droplet is the one I am ON such that I can get its name.

        • You already know the droplet’s IP with this command:

          IP=$(ifconfig eth0 |grep "inet "|awk '{print $2}')
          

          So you’d need to pull the JSON object with all the droplets you own and loop through each one and match the $IP from above to it. Once you get a match you can extract the droplet name and other info if needed.

Have another answer? Share your knowledge.