Retrieve the instance ID after deploying at Vultr with the vultr-cli?

688 views Asked by At

I'm scripting a process with the vultr-cli. I need to deploy a new VPS at Vultr, perform some intermediate steps, then destroy the VPS in a bash script. How do I retrieve instance values in the script after the deployment? Is there a way to capture the information as JSON or set environment variables directly?

So far, my script looks like:

#!/bin/bash

## Create an instance. How do I retrieve the instance ID 
## for use later in the script?
vultr-cli instance create --plan vc2-1c-1gb --os 387 --region ewr

## With the instance ID, retrieve the main IPv4 address.
## Note: I only want the main IP, but there may be multiple. 
vultr-cli instance ipv4 list $INSTANCE_ID

## Perform some tasks here with the IPv4. Assuming I created 
## the instance with my SSH key, for example:
scp root@$INSTANCE_IPv4:/var/log/logfile.log ./logfile.log

## Destroy the instance. 
vultr-cli instance delete $INSTANCE_ID
1

There are 1 answers

0
ddymko On

The vultr-cli will output the response it gets back from the API like this

☁  ~  vultr-cli instance create --plan vc2-1c-1gb --os 387 --region ewr
INSTANCE INFO
ID          87e98eb0-a189-4519-8b4e-fc46bb0a5331
Os          Ubuntu 20.04 x64
RAM         1024
DISK            0
MAIN IP         0.0.0.0
VCPU COUNT      1
REGION          ewr
DATE CREATED        2021-01-23T17:39:45+00:00
STATUS          pending
ALLOWED BANDWIDTH   1000
NETMASK V4
GATEWAY V4      0.0.0.0
POWER STATUS        running
SERVER STATE        none
PLAN            vc2-1c-1gb
LABEL
INTERNAL IP
KVM URL
TAG
OsID            387
AppID           0
FIREWALL GROUP ID
V6 MAIN IP
V6 NETWORK
V6 NETWORK SIZE     0
FEATURES        []

So you would want to capture the ID and it's value from the response. This is a crude example but it does work.

vultr-cli instance create --plan vc2-1c-1gb --os 387 --region ewr | grep -m1 -w "ID" | sed 's/ID//g' | tr -d " \t\n\r"

We are grepping for the 1st line that has ID (which will always be be the 1st line). Then remove the word ID followed by removing any whitespace and newlines.

You will want to do something similar to with the ipv4 list call you have.

Again, there may be a better way to write out the grep/sed/tr portion but this will work for your needs. Hopefully this helps!