TOPICS
API

API: Virtual Machines

The vm category contains functionality to provision and manage virtual machines.

Action Required Parameters Optional Parameters
vm/create hostname, plan_id image_id, volume_id, volume_virtio, region, ip, net_id, securitygroups, scripts, key_id, set_password, affinity_group
vm/list None None
vm/start vm_id None
vm/stop vm_id None
vm/reboot vm_id None
vm/diskswap vm_id None
vm/rescue vm_id None
vm/shelve vm_id None
vm/unshelve vm_id None
vm/delete vm_id None
vm/info vm_id None
vm/reimage vm_id, image_id None
vm/resize vm_id, plan_id None
vm/vnc vm_id None
vm/floatingip-add vm_id ip, private_ip
vm/floatingip-delete vm_id ip, keep
vm/iplist vm_id None
vm/ip-add vm_id ip
vm/ip-delete vm_id, ip None
vm/securitygroup-add vm_id, group_id None
vm/securitygroup-remove vm_id, group_id None
vm/snapshot vm_id, name None
vm/rename vm_id, hostname None

vm/create

Required parameters:

  • hostname - a label for this VM, which will also be used as its hostname
  • plan_id - either a numeric ID (see plan/list), or a string ID like "m.2" or "s.4"

Optional parameters:

  • image_id - an image ID (see image/list)
  • volume_id - a volume ID (see volume/list)
  • volume_virtio - 'yes' to use the virtio storage driver (default 'no' for ide driver)
  • region - region ('toronto', 'montreal', 'roubaix') (defaults to 'toronto')
  • ip - an unattached floating IP to use for this VM (default is to grab a new floating IP)
  • net_id - a network ID (see network/list)
  • securitygroups - a comma-separated list of security group IDs (e.g. '123,999', see securitygroup/list)
  • scripts - a comma-separated list of script IDs (e.g. '123,999', see script/list)
  • key_id - a comma-separated list of key IDs (e.g. '123,999', see sshkey/list)
  • set_password - 'yes' to set a password via cloud-init for snapshots and volumes (not needed for templates)
  • affinity_group - an affinity group UUID (e.g. '68766804-eff2-4ac5-bed7-7daa2fa528c9')

Notes:

  • One of image_id and volume_id must be set
  • The driver for image sources is derived from the image properties rather than the volume_virtio parameter

Example request and response:

Endpoint: vm/create
hostname=myvm
plan_id=m.4
image_id=94953

{
    "success": "yes",
    "vm_id": "16b64847-0a86-42ea-bea8-ed60bd960c68"
}

vm/list

Endpoint: vm/list

{
    "success": "yes",
    "vms": [
        {
            "bandwidth": "3000",
            "hostname": "myvm",
            "name": "myvm",
            "os_status": "active",
            "plan_id": "89",
            "primaryip": "172.81.176.125",
            "privateip": "172.20.0.228",
            "ram": "4096",
            "region": "toronto",
            "storage": "70",
            "vcpu": "4",
            "vm_id": "16b64847-0a86-42ea-bea8-ed60bd960c68"
        }
    ]
}

Simple Actions (start, stop, reboot, diskswap, rescue, shelve, unshelve, delete)

These actions require vm_id (the VM UUID) and take no other parameters.

Endpoint: vm/stop
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{"success": "yes"}

vm/info

Example request and response:

Endpoint: vm/info
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{
    "extra": {
        "bandwidth": "2500",
        "hostname": "myvm",
        "name": "myvm",
        "os_status": "active",
        "plan_id": "88",
        "primaryip": "172.81.176.21",
        "privateip": "172.20.0.228",
        "ram": "4096",
        "region": "toronto",
        "storage": "35",
        "vcpu": "2",
        "vm_id": "16b64847-0a86-42ea-bea8-ed60bd960c68"
    },
    "info": {
        "additionalip": [],
        "additionalprivateip": [],
        "addresses": [
            {
                "addr": "2602:ffb6:2:0:f816:3eff:fe6a:7b4e",
                "external": "1",
                "version": "6"
            },
            {
                "addr": "172.20.0.228",
                "external": "",
                "version": "4"
            },
            {
                "addr": "172.81.176.21",
                "external": "1",
                "reverse": "21.176.81.172.rdns.lunanode.com.",
                "version": "4"
            }
        ],
        "error_detail": "",
        "host_id": "033ab13d2de597d948b1e734cf3dac2f15e541826fa72abf7c7e3669",
        "hostname": "myvm",
        "image": "Ubuntu 18.04 64-bit (template)",
        "ip": "172.81.176.21",
        "ipv6": [
            "2602:ffb6:2:0:f816:3eff:fe6a:7b4e"
        ],
        "login_details": "username: ubuntu; password: QixaTUKqP1IvxBeG",
        "os": "Ubuntu 18.04 64-bit (template)",
        "privateip": "172.20.0.228",
        "security_group_ids": [
            "4"
        ],
        "security_groups": [
            "default"
        ],
        "securitygroups": [
            "default"
        ],
        "status": "<font color="green"><b>Online</b></font>",
        "status_color": "green",
        "status_nohtml": "Online",
        "status_raw": "active",
        "task_state": "",
        "volumes": ""
    },
    "success": "yes"
}

Response notes:

  • Data in "extra" is static or cached, while data in "info" is on-demand. Thus, e.g. use the status in info over os_status in extra.
  • host_id is the physical hypervisor ID (you can use affinity groups to ensure your VMs are assigned to the same or distinct hypervisors)

vm/reimage

Required parameters:

  • vm_id - the VM UUID
  • image_id - an image ID (see image/list)

Notes:

  • Re-image can only be performed on non-volume-backed, non-ISO VMs.
  • For other VMs, simply delete the VM and re-create it. The floating IP can be retained across VM deletions by detaching it (vm/floatingip-delete), creating a new VM (set the optional 'ip' parameter), and deleting the old VM.

Example request and response:

Endpoint: vm/reimage
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
image_id=94953

{"success": "yes"}

vm/resize

Required parameters:

  • vm_id - the VM UUID
  • plan_id - the new plan ID (see plan/list)

Notes:

  • If using local storage (non-volume boot device), the new plan must have the same or larger disk size than the old plan.

Example request and response:

Endpoint: vm/resize
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
plan_id=m.8

{"success": "yes"}

vm/vnc

Example request and response:

Endpoint: vm/vnc
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{
    "success": "yes",
    "vnc_url": "https://toronto-ctrl.lunanode.com:6080/vnc2.html?token=f6818d75-b815-456f-ae27-c63fe56e42de"
}

Response notes:

  • The vnc_url temporarily exposes the noVNC console for the VM with the specified token secure UUID.

vm/floatingip-add

Add a new floating IP to your VM. This does not add an internal IP (see vm/ip-add).

Required parameters:

  • vm_id - the VM UUID

Optional parameters:

  • ip - the floating IP address (must be an unattached IP on your account, see floating/list)
  • private_ip - the internal IP to which the floating IP should be attached

Notes:

  • If ip is not set, a new floating IP address will be added to your account and attached to the VM.
  • private_ip must be set if the VM has more than one internal IP.

Example request and response (here, the VM had one internal IP with no associated floating IP):

Endpoint: vm/floatingip-add
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{"success": "yes"}

vm/floatingip-delete

Remove one or all floating IPs from your VM.

Required parameters:

  • vm_id - the VM UUID

Optional parameters:

  • ip - the floating IP address currently attached to the VM.
  • keep - 'yes' to keep the floating IP on your account so that it can be reused (default 'no')

Notes:

  • If keep=yes, then the floating IP will be retained on your account in an unattached state. Unattached floating IPs can be used as the ip parameter in vm/create or vm/floatingip-add.
  • If ip is not set, all floating IPs attached to the VM will be detached.

Example request and response:

Endpoint: vm/floatingip-delete
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{"success": "yes"}

vm/iplist

Example request and response:

Endpoint: vm/iplist
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{
    "ips": {
        "172.20.0.228": {
            "floating": "172.81.176.125",
            "network": "62eb5bcc-ff99-4fab-84e1-e44a2ff67a6e",
            "network_id": "4",
            "port": "1ae0fc30-9f22-4de9-9611-fe32310ccb35",
            "subnet": "172.20.0.0/16",
            "subnet_identification": "3d783fc1-b54e-4348-936c-4ff1e1812cf5"
        }
    },
    "success": "yes"
}

Response notes:

  • The floating attribute will not appear if the internal IP has no associated floating IP.

vm/ip-add

Add an internal IP to the VM. The internal IP won't be associated with a floating IP, if you want an additional floating IP you'll need to call vm/floatingip-add after adding the internal IP.

Required parameters:

  • vm_id - the VM UUID

Optional parameters:

  • ip - an internal IP address on the network subnet of this VM

Notes:

  • If ip is not set, an arbitrary unused internal IP will be selected.

Example request and response:

Endpoint: vm/ip-add
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68

{
    "ip": "172.20.0.230",
    "success": "yes"
}

vm/ip-delete

Remove an internal IP from the VM.

Required parameters:

  • vm_id - the VM UUID
  • ip - the internal IP address to remove

Notes:

  • The ip must not have any associated floating IP. If it does, you must first detach the floating IP with vm/floatingip-delete.

Example request and response:

Endpoint: vm/ip-delete
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
ip=172.20.0.230

{"success": "yes"}

vm/securitygroup-add

Add the VM to a security group.

Required parameters:

Example request and response:

Endpoint: vm/securitygroup-add
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
group_id=5

{"success": "yes"}

vm/securitygroup-remove

Remove the VM from a security group.

Required parameters:

Example request and response:

Endpoint: vm/securitygroup-remove
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
group_id=5

{"success": "yes"}

vm/snapshot

Required parameters:

  • vm_id - the VM UUID
  • name - a label for the snapshot image

Example request and response:

Endpoint: vm/snapshot
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
name=mysnapshot

{
    "image_id": "141091",
    "success": "yes"
}

vm/rename

Required parameters:

  • vm_id - the VM UUID
  • hostname - a new name for this VM

Example request and response:

Endpoint: vm/rename
vm_id=16b64847-0a86-42ea-bea8-ed60bd960c68
hostname=myvm2

{"success": "yes"}