Welcome to API documentation!

Warning

The API is not stable, feel free to post comments on our website https://gns3.com/

Communications

All the communication are done over HTTP using JSON.

Errors

In case of error a standard HTTP error is raise and you got a JSON like that

{
    "status": 409,
    "message": "Conflict"
}

Sample session using curl

Warning

Beware the output of this sample is truncated in order to simplify the understanding. Please read the documentation for the exact output.

You can check the server version with a simple curl command:

# curl "http://localhost:8000/v1/version"
{
    "version": "1.3.dev1"
}

The next step is to create a project.

# curl -X POST "http://localhost:8000/v1/projects" -d '{"name": "test"}'
{
    "project_id": "42f9feee-3217-4104-981e-85d5f0a806ec",
    "temporary": false,
    "name": "Test"
}

With this project id we can now create two VPCS VM.

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/vpcs/vms" -d '{"name": "VPCS 1"}'
{
    "console": 2000,
    "name": "VPCS 1",
    "project_id": "42f9feee-3217-4104-981e-85d5f0a806ec",
    "vm_id": "24d2e16b-fbef-4259-ae34-7bc21a41ee28"
}%

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/vpcs/vms" -d '{"name": "VPCS 2"}'
{
    "console": 2001,
    "name": "VPCS 2",
    "vm_id": "daefc24a-103c-4717-8e01-6517d931c1ae"
}

Now we need to link the two VPCS. The first step is to allocate on the remote servers two UDP ports.

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/ports/udp" -d '{}'
{
    "udp_port": 10000
}

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/ports/udp" -d '{}'
{
    "udp_port": 10001
}

We can create the bidirectionnal communication between the two VPCS. The communication is made by creating two UDP tunnels.

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/vpcs/vms/24d2e16b-fbef-4259-ae34-7bc21a41ee28/adapters/0/ports/0/nio" -d '{"lport": 10000, "rhost": "127.0.0.1", "rport": 10001, "type": "nio_udp"}'
{
    "lport": 10000,
    "rhost": "127.0.0.1",
    "rport": 10001,
    "type": "nio_udp"
}

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/vpcs/vms/daefc24a-103c-4717-8e01-6517d931c1ae/adapters/0/ports/0/nio" -d '{"lport": 10001, "rhost": "127.0.0.1", "rport": 10000, "type": "nio_udp"}'
{
    "lport": 10001,
    "rhost": "127.0.0.1",
    "rport": 10000,
    "type": "nio_udp"
}

Now we can start the two VM

# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/vpcs/vms/24d2e16b-fbef-4259-ae34-7bc21a41ee28/start" -d "{}"
# curl -X POST "http://localhost:8000/v1/projects/42f9feee-3217-4104-981e-85d5f0a806ec/vpcs/vms/daefc24a-103c-4717-8e01-6517d931c1ae/start" -d '{}'

Everything should be started now. You can connect via telnet to the different VM. The port is the field console in the create VM request.

# telnet 127.0.0.1 2000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Welcome to Virtual PC Simulator, version 0.6
Dedicated to Daling.
Build time: Dec 29 2014 12:51:46
Copyright (c) 2007-2014, Paul Meng (mirnshi@gmail.com)
All rights reserved.

VPCS is free software, distributed under the terms of the "BSD" licence.
Source code and license can be found at vpcs.sf.net.
For more information, please visit wiki.freecode.com.cn.

Press '?' to get help.

VPCS> ip 192.168.1.1
Checking for duplicate address...
PC1 : 192.168.1.1 255.255.255.0

VPCS> disconnect

Good-bye
Connection closed by foreign host.

# telnet 127.0.0.1 2001
telnet 127.0.0.1 2001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Welcome to Virtual PC Simulator, version 0.6
Dedicated to Daling.
Build time: Dec 29 2014 12:51:46
Copyright (c) 2007-2014, Paul Meng (mirnshi@gmail.com)
All rights reserved.

VPCS is free software, distributed under the terms of the "BSD" licence.
Source code and license can be found at vpcs.sf.net.
For more information, please visit wiki.freecode.com.cn.

Press '?' to get help.

VPCS> ip 192.168.1.2
Checking for duplicate address...
PC1 : 192.168.1.2 255.255.255.0

VPCS> ping 192.168.1.1
84 bytes from 192.168.1.1 icmp_seq=1 ttl=64 time=0.179 ms
84 bytes from 192.168.1.1 icmp_seq=2 ttl=64 time=0.218 ms
84 bytes from 192.168.1.1 icmp_seq=3 ttl=64 time=0.190 ms
84 bytes from 192.168.1.1 icmp_seq=4 ttl=64 time=0.198 ms
84 bytes from 192.168.1.1 icmp_seq=5 ttl=64 time=0.185 ms

VPCS> disconnect
Good-bye
Connection closed by foreign host.

Limitations

Concurrency

A VM can’t process multiple request in the same time. But you can make multiple request on multiple VM. It’s transparent for the client when the first request on a VM start a lock is acquire for this VM id and released for the next request at the end. You can safely send all the requests in the same time and let the server manage an efficent concurrency.

We think it can be a little slower for some operations, but it’s remove a big complexity for the client due to the fact only some command on some VM can be concurrent.

Authentification

In this version of the API you have no authentification system. If you listen on your network interface instead of localhost be carefull. Due to the nature of the multiple supported VM it’s easy for an user to upload and run code on your machine.

Glossary

VM

A Virtual Machine (Dynamips, IOU, Qemu, VPCS...)

Adapter

The physical network interface. The adapter can contain multiple ports.

Port

A port is an opening on network adapter that cable plug into.

For example a VM can have a serial and an ethernet adapter plugged in. The ethernet adapter can have 4 ports.

Development

Code convention

You should respect all the PEP8 convention except the rule about max line length.

Documentation

Build doc

In the project root folder:

./scripts/documentation.sh

The output is available inside docs/_build/html

Tests

Run tests

py.test -v

API Endpoints

Config

/v1/config/reload

POST /v1/config/reload

Check if version is the same as the server

Response status codes
  • 201: Config reload
  • 403: Config reload refused
Sample session
curl -i -X POST 'http://localhost:8000/v1/config/reload' -d '{}'

POST /v1/config/reload HTTP/1.1
{}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/config/reload

Dynamips device

/v1/projects/{project_id}/dynamips/devices

POST /v1/projects/{project_id}/dynamips/devices

Create a new Dynamips device instance

Parameters
  • project_id: UUID for the project
Response status codes
  • 400: Invalid request
  • 201: Instance created
  • 409: Conflict
Input
Name Mandatory Type Description
device_id Dynamips device instance identifier
device_type string Dynamips device type
name string Dynamips device name
Output
Name Mandatory Type Description
device_id string Dynamips router instance UUID
mappings object
name string Dynamips device instance name
ports array
project_id string Project UUID

/v1/projects/{project_id}/dynamips/devices/{device_id}

GET /v1/projects/{project_id}/dynamips/devices/{device_id}

Get a Dynamips device instance

Parameters
  • project_id: UUID for the project
  • device_id: UUID for the instance
Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
device_id string Dynamips router instance UUID
mappings object
name string Dynamips device instance name
ports array
project_id string Project UUID
PUT /v1/projects/{project_id}/dynamips/devices/{device_id}

Update a Dynamips device instance

Parameters
  • project_id: UUID for the project
  • device_id: UUID for the instance
Response status codes
  • 200: Instance updated
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: Conflict
Input
Types
EthernetSwitchPort

Ethernet switch port

Name Mandatory Type Description
port integer Port number
type enum Possible values: access, dot1q, qinq
vlan integer VLAN number
Body
Name Mandatory Type Description
name string Dynamips device instance name
ports array
Output
Name Mandatory Type Description
device_id string Dynamips router instance UUID
mappings object
name string Dynamips device instance name
ports array
project_id string Project UUID
DELETE /v1/projects/{project_id}/dynamips/devices/{device_id}

Delete a Dynamips device instance

Parameters
  • project_id: UUID for the project
  • device_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance deleted

/v1/projects/{project_id}/dynamips/devices/{device_id}/ports/{port_number:d+}/nio

POST /v1/projects/{project_id}/dynamips/devices/{device_id}/ports/{port_number:d+}/nio

Add a NIO to a Dynamips device instance

Parameters
  • project_id: UUID for the project
  • port_number: Port on the device
  • device_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 201: NIO created
  • 404: Instance doesn’t exist
Input
Types
Ethernet

Generic Ethernet Network Input/Output

Name Mandatory Type Description
ethernet_device string Ethernet device name e.g. eth0
type enum Possible values: nio_generic_ethernet
LinuxEthernet

Linux Ethernet Network Input/Output

Name Mandatory Type Description
ethernet_device string Ethernet device name e.g. eth0
type enum Possible values: nio_linux_ethernet
NULL

NULL Network Input/Output

Name Mandatory Type Description
type enum Possible values: nio_null
TAP

TAP Network Input/Output

Name Mandatory Type Description
tap_device string TAP device name e.g. tap0
type enum Possible values: nio_tap
UDP

UDP Network Input/Output

Name Mandatory Type Description
lport integer Local port
rhost string Remote host
rport integer Remote port
type enum Possible values: nio_udp
UNIX

UNIX Network Input/Output

Name Mandatory Type Description
local_file string path to the UNIX socket file (local)
remote_file string path to the UNIX socket file (remote)
type enum Possible values: nio_unix
VDE

VDE Network Input/Output

Name Mandatory Type Description
control_file string path to the VDE control file
local_file string path to the VDE control file
type enum Possible values: nio_vde
Body
Name Mandatory Type Description
mappings object
nio UDP, Ethernet, LinuxEthernet, TAP, UNIX, VDE, NULL
port_settings object Ethernet switch
DELETE /v1/projects/{project_id}/dynamips/devices/{device_id}/ports/{port_number:d+}/nio

Remove a NIO from a Dynamips device instance

Parameters
  • project_id: UUID for the project
  • port_number: Port on the device
  • device_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: NIO deleted

/v1/projects/{project_id}/dynamips/devices/{device_id}/ports/{port_number:d+}/start_capture

POST /v1/projects/{project_id}/dynamips/devices/{device_id}/ports/{port_number:d+}/start_capture

Start a packet capture on a Dynamips device instance

Parameters
  • project_id: UUID for the project
  • port_number: Port on the device
  • device_id: UUID for the instance
Response status codes
  • 200: Capture started
  • 400: Invalid request
  • 404: Instance doesn’t exist
Input
Name Mandatory Type Description
capture_file_name string Capture file name
data_link_type string PCAP data link type

Dynamips vm

/v1/projects/{project_id}/dynamips/vms

POST /v1/projects/{project_id}/dynamips/vms

Create a new Dynamips VM instance

Parameters
  • project_id: UUID for the project
Response status codes
  • 400: Invalid request
  • 201: Instance created
  • 409: Conflict
Input
Name Mandatory Type Description
aux integer auxiliary console TCP port
chassis string router chassis model
clock_divisor integer clock divisor
console integer console TCP port
disk0 integer disk0 size in MB
disk1 integer disk1 size in MB
dynamips_id integer ID to use with Dynamips
exec_area integer exec area value
idlemax integer idlemax value
idlepc string Idle-PC value
idlesleep integer idlesleep value
image string path to the IOS image
iomem integer I/O memory percentage
mac_addr string base MAC address
midplane enum Possible values: std, vxr
mmap boolean MMAP feature
name string Dynamips VM instance name
npe enum Possible values: npe-100, npe-150, npe-175, npe-200, npe-225, npe-300, npe-400, npe-g2
nvram integer amount of NVRAM in KB
platform string platform
power_supplies array Power supplies status
private_config string path to the IOS private configuration file
private_config_base64 string private configuration base64 encoded
private_config_content string Content of IOS private configuration file
ram integer amount of RAM in MB
sensors array Temperature sensors
slot0 Network module slot 0
slot1 Network module slot 1
slot2 Network module slot 2
slot3 Network module slot 3
slot4 Network module slot 4
slot5 Network module slot 5
slot6 Network module slot 6
sparsemem boolean sparse memory feature
startup_config string path to the IOS startup configuration file
startup_config_base64 string startup configuration base64 encoded
startup_config_content string Content of IOS startup configuration file
system_id string system ID
vm_id Dynamips VM instance identifier
wic0 Network module WIC slot 0
wic1 Network module WIC slot 0
wic2 Network module WIC slot 0
Output
Name Mandatory Type Description
aux ['integer', 'null'] auxiliary console TCP port
chassis string router chassis model
clock_divisor integer clock divisor
console integer console TCP port
disk0 integer disk0 size in MB
disk1 integer disk1 size in MB
dynamips_id integer ID to use with Dynamips
exec_area integer exec area value
idlemax integer idlemax value
idlepc string Idle-PC value
idlesleep integer idlesleep value
image string path to the IOS image
iomem integer I/O memory percentage
mac_addr string base MAC address
midplane enum Possible values: std, vxr
mmap boolean MMAP feature
name string Dynamips VM instance name
npe enum Possible values: npe-100, npe-150, npe-175, npe-200, npe-225, npe-300, npe-400, npe-g2
nvram integer amount of NVRAM in KB
platform string platform
power_supplies array Power supplies status
private_config string path to the IOS private configuration file
private_config_base64 string private configuration base64 encoded
project_id string Project UUID
ram integer amount of RAM in MB
sensors array Temperature sensors
slot0 Network module slot 0
slot1 Network module slot 1
slot2 Network module slot 2
slot3 Network module slot 3
slot4 Network module slot 4
slot5 Network module slot 5
slot6 Network module slot 6
sparsemem boolean sparse memory feature
startup_config string path to the IOS startup configuration file
startup_config_base64 string startup configuration base64 encoded
system_id string system ID
vm_id string Dynamips router instance UUID
wic0 Network module WIC slot 0
wic1 Network module WIC slot 0
wic2 Network module WIC slot 0

/v1/projects/{project_id}/dynamips/vms/{vm_id}

GET /v1/projects/{project_id}/dynamips/vms/{vm_id}

Get a Dynamips VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
aux ['integer', 'null'] auxiliary console TCP port
chassis string router chassis model
clock_divisor integer clock divisor
console integer console TCP port
disk0 integer disk0 size in MB
disk1 integer disk1 size in MB
dynamips_id integer ID to use with Dynamips
exec_area integer exec area value
idlemax integer idlemax value
idlepc string Idle-PC value
idlesleep integer idlesleep value
image string path to the IOS image
iomem integer I/O memory percentage
mac_addr string base MAC address
midplane enum Possible values: std, vxr
mmap boolean MMAP feature
name string Dynamips VM instance name
npe enum Possible values: npe-100, npe-150, npe-175, npe-200, npe-225, npe-300, npe-400, npe-g2
nvram integer amount of NVRAM in KB
platform string platform
power_supplies array Power supplies status
private_config string path to the IOS private configuration file
private_config_base64 string private configuration base64 encoded
project_id string Project UUID
ram integer amount of RAM in MB
sensors array Temperature sensors
slot0 Network module slot 0
slot1 Network module slot 1
slot2 Network module slot 2
slot3 Network module slot 3
slot4 Network module slot 4
slot5 Network module slot 5
slot6 Network module slot 6
sparsemem boolean sparse memory feature
startup_config string path to the IOS startup configuration file
startup_config_base64 string startup configuration base64 encoded
system_id string system ID
vm_id string Dynamips router instance UUID
wic0 Network module WIC slot 0
wic1 Network module WIC slot 0
wic2 Network module WIC slot 0
PUT /v1/projects/{project_id}/dynamips/vms/{vm_id}

Update a Dynamips VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Instance updated
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: Conflict
Input
Name Mandatory Type Description
aux integer auxiliary console TCP port
chassis string router chassis model
clock_divisor integer clock divisor
console integer console TCP port
disk0 integer disk0 size in MB
disk1 integer disk1 size in MB
exec_area integer exec area value
idlemax integer idlemax value
idlepc string Idle-PC value
idlesleep integer idlesleep value
image string path to the IOS image
iomem integer I/O memory percentage
mac_addr string base MAC address
midplane enum Possible values: std, vxr
mmap boolean MMAP feature
name string Dynamips VM instance name
npe enum Possible values: npe-100, npe-150, npe-175, npe-200, npe-225, npe-300, npe-400, npe-g2
nvram integer amount of NVRAM in KB
platform string platform
power_supplies array Power supplies status
private_config string path to the IOS private configuration file
private_config_base64 string private configuration base64 encoded
private_config_content string Content of IOS private configuration file
ram integer amount of RAM in MB
sensors array Temperature sensors
slot0 Network module slot 0
slot1 Network module slot 1
slot2 Network module slot 2
slot3 Network module slot 3
slot4 Network module slot 4
slot5 Network module slot 5
slot6 Network module slot 6
sparsemem boolean sparse memory feature
startup_config string path to the IOS startup configuration file
startup_config_base64 string startup configuration base64 encoded
startup_config_content string Content of IOS startup configuration file
system_id string system ID
wic0 Network module WIC slot 0
wic1 Network module WIC slot 0
wic2 Network module WIC slot 0
Output
Name Mandatory Type Description
aux ['integer', 'null'] auxiliary console TCP port
chassis string router chassis model
clock_divisor integer clock divisor
console integer console TCP port
disk0 integer disk0 size in MB
disk1 integer disk1 size in MB
dynamips_id integer ID to use with Dynamips
exec_area integer exec area value
idlemax integer idlemax value
idlepc string Idle-PC value
idlesleep integer idlesleep value
image string path to the IOS image
iomem integer I/O memory percentage
mac_addr string base MAC address
midplane enum Possible values: std, vxr
mmap boolean MMAP feature
name string Dynamips VM instance name
npe enum Possible values: npe-100, npe-150, npe-175, npe-200, npe-225, npe-300, npe-400, npe-g2
nvram integer amount of NVRAM in KB
platform string platform
power_supplies array Power supplies status
private_config string path to the IOS private configuration file
private_config_base64 string private configuration base64 encoded
project_id string Project UUID
ram integer amount of RAM in MB
sensors array Temperature sensors
slot0 Network module slot 0
slot1 Network module slot 1
slot2 Network module slot 2
slot3 Network module slot 3
slot4 Network module slot 4
slot5 Network module slot 5
slot6 Network module slot 6
sparsemem boolean sparse memory feature
startup_config string path to the IOS startup configuration file
startup_config_base64 string startup configuration base64 encoded
system_id string system ID
vm_id string Dynamips router instance UUID
wic0 Network module WIC slot 0
wic1 Network module WIC slot 0
wic2 Network module WIC slot 0
DELETE /v1/projects/{project_id}/dynamips/vms/{vm_id}

Delete a Dynamips VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance deleted

/v1/projects/{project_id}/dynamips/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

POST /v1/projects/{project_id}/dynamips/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Add a NIO to a Dynamips VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter where the nio should be added
  • port_number: Port on the adapter
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 201: NIO created
  • 404: Instance doesn’t exist
DELETE /v1/projects/{project_id}/dynamips/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Remove a NIO from a Dynamips VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter from where the nio should be removed
  • port_number: Port on the adapter
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: NIO deleted

/v1/projects/{project_id}/dynamips/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/start_capture

POST /v1/projects/{project_id}/dynamips/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/start_capture

Start a packet capture on a Dynamips VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter to start a packet capture
  • port_number: Port on the adapter
  • vm_id: UUID for the instance
Response status codes
  • 200: Capture started
  • 400: Invalid request
  • 404: Instance doesn’t exist
Input
Name Mandatory Type Description
capture_file_name string Capture file name
data_link_type string PCAP data link type

/v1/projects/{project_id}/dynamips/vms/{vm_id}/configs

GET /v1/projects/{project_id}/dynamips/vms/{vm_id}/configs

Retrieve the startup and private configs content

Response status codes
  • 200: Configs retrieved
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
private_config_content ['string', 'null'] Content of the private configuration file
startup_config_content ['string', 'null'] Content of the startup configuration file

Iou

/v1/projects/{project_id}/iou/vms

POST /v1/projects/{project_id}/iou/vms

Create a new IOU instance

Parameters
  • project_id: UUID for the project
Response status codes
  • 400: Invalid request
  • 201: Instance created
  • 409: Conflict
Input
Name Mandatory Type Description
console ['integer', 'null'] console TCP port
ethernet_adapters integer How many ethernet adapters are connected to the IOU
initial_config_content ['string', 'null'] Initial configuration of the IOU
iourc_content ['string', 'null'] Content of the iourc file, if a file exist on servers this variable is ignored. It's mostly for compatibility with < 1.3 releases
l1_keepalives ['boolean', 'null'] Always up ethernet interface
name string IOU VM name
nvram ['integer', 'null'] Allocated NVRAM KB
path string Path of iou binary
ram ['integer', 'null'] Allocated RAM MB
serial_adapters integer How many serial adapters are connected to the IOU
use_default_iou_values ['boolean', 'null'] Use default IOU values
vm_id IOU VM identifier
Output
Name Mandatory Type Description
console integer console TCP port
ethernet_adapters integer How many ethernet adapters are connected to the IOU
initial_config ['string', 'null'] Path of the initial config content relative to project directory
iourc_path ['string', 'null'] Path of the iourc file used by remote servers
l1_keepalives boolean Always up ethernet interface
name string IOU VM name
nvram integer Allocated NVRAM KB
path string Path of iou binary
project_id string Project UUID
ram integer Allocated RAM MB
serial_adapters integer How many serial adapters are connected to the IOU
use_default_iou_values ['boolean', 'null'] Use default IOU values
vm_id string IOU VM UUID
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms' -d '{"ethernet_adapters": 0, "initial_config_content": "hostname test", "iourc_content": "test", "l1_keepalives": true, "name": "PC TEST 1", "nvram": 512, "path": "/private/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/pytest-4450/test_iou_create_with_params0/iou.bin", "ram": 1024, "serial_adapters": 4, "use_default_iou_values": true}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms HTTP/1.1
{
    "ethernet_adapters": 0,
    "initial_config_content": "hostname test",
    "iourc_content": "test",
    "l1_keepalives": true,
    "name": "PC TEST 1",
    "nvram": 512,
    "path": "/private/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/pytest-4450/test_iou_create_with_params0/iou.bin",
    "ram": 1024,
    "serial_adapters": 4,
    "use_default_iou_values": true
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 466
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms

{
    "console": 2000,
    "ethernet_adapters": 0,
    "initial_config": "initial-config.cfg",
    "iourc_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmps796q8lx/iourc",
    "l1_keepalives": true,
    "name": "PC TEST 1",
    "nvram": 512,
    "path": "iou.bin",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "ram": 1024,
    "serial_adapters": 4,
    "use_default_iou_values": true,
    "vm_id": "69f5842a-d4e5-45fe-a500-1010c72f1748"
}

/v1/projects/{project_id}/iou/vms/{vm_id}

GET /v1/projects/{project_id}/iou/vms/{vm_id}

Get a IOU instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
console integer console TCP port
ethernet_adapters integer How many ethernet adapters are connected to the IOU
initial_config ['string', 'null'] Path of the initial config content relative to project directory
iourc_path ['string', 'null'] Path of the iourc file used by remote servers
l1_keepalives boolean Always up ethernet interface
name string IOU VM name
nvram integer Allocated NVRAM KB
path string Path of iou binary
project_id string Project UUID
ram integer Allocated RAM MB
serial_adapters integer How many serial adapters are connected to the IOU
use_default_iou_values ['boolean', 'null'] Use default IOU values
vm_id string IOU VM UUID
Sample session
curl -i -X GET 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/ede1bba5-0723-4fd8-9e89-bdfffe5f5c8f'

GET /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/ede1bba5-0723-4fd8-9e89-bdfffe5f5c8f HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 386
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}

{
    "console": 2000,
    "ethernet_adapters": 2,
    "initial_config": null,
    "iourc_path": null,
    "l1_keepalives": false,
    "name": "PC TEST 1",
    "nvram": 128,
    "path": "iou.bin",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "ram": 256,
    "serial_adapters": 2,
    "use_default_iou_values": true,
    "vm_id": "ede1bba5-0723-4fd8-9e89-bdfffe5f5c8f"
}
PUT /v1/projects/{project_id}/iou/vms/{vm_id}

Update a IOU instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Instance updated
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: Conflict
Input
Name Mandatory Type Description
console ['integer', 'null'] console TCP port
ethernet_adapters ['integer', 'null'] How many ethernet adapters are connected to the IOU
initial_config_content ['string', 'null'] Initial configuration of the IOU
iourc_content ['string', 'null'] Content of the iourc file, if a file exist on servers this variable is ignored. It's mostly for compatibility with < 1.3 releases
l1_keepalives ['boolean', 'null'] Always up ethernet interface
name ['string', 'null'] IOU VM name
nvram ['integer', 'null'] Allocated NVRAM KB
path ['string', 'null'] Path of iou binary
ram ['integer', 'null'] Allocated RAM MB
serial_adapters ['integer', 'null'] How many serial adapters are connected to the IOU
use_default_iou_values ['boolean', 'null'] Use default IOU values
Output
Name Mandatory Type Description
console integer console TCP port
ethernet_adapters integer How many ethernet adapters are connected to the IOU
initial_config ['string', 'null'] Path of the initial config content relative to project directory
iourc_path ['string', 'null'] Path of the iourc file used by remote servers
l1_keepalives boolean Always up ethernet interface
name string IOU VM name
nvram integer Allocated NVRAM KB
path string Path of iou binary
project_id string Project UUID
ram integer Allocated RAM MB
serial_adapters integer How many serial adapters are connected to the IOU
use_default_iou_values ['boolean', 'null'] Use default IOU values
vm_id string IOU VM UUID
Sample session
curl -i -X PUT 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/3812eced-e777-4f35-8c7e-e6736e34fcfd' -d '{"console": 2001, "ethernet_adapters": 4, "initial_config_content": "hostname test", "iourc_content": "test", "l1_keepalives": true, "name": "test", "nvram": 2048, "ram": 512, "serial_adapters": 0, "use_default_iou_values": true}'

PUT /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/3812eced-e777-4f35-8c7e-e6736e34fcfd HTTP/1.1
{
    "console": 2001,
    "ethernet_adapters": 4,
    "initial_config_content": "hostname test",
    "iourc_content": "test",
    "l1_keepalives": true,
    "name": "test",
    "nvram": 2048,
    "ram": 512,
    "serial_adapters": 0,
    "use_default_iou_values": true
}


HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 461
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}

{
    "console": 2001,
    "ethernet_adapters": 4,
    "initial_config": "initial-config.cfg",
    "iourc_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmpws7fdl5e/iourc",
    "l1_keepalives": true,
    "name": "test",
    "nvram": 2048,
    "path": "iou.bin",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "ram": 512,
    "serial_adapters": 0,
    "use_default_iou_values": true,
    "vm_id": "3812eced-e777-4f35-8c7e-e6736e34fcfd"
}
DELETE /v1/projects/{project_id}/iou/vms/{vm_id}

Delete a IOU instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/becc8bf8-1936-4076-b7dd-ee83ba078907'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/becc8bf8-1936-4076-b7dd-ee83ba078907 HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}

/v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

POST /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Add a NIO to a IOU instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Network adapter where the nio is located
  • port_number: Port where the nio should be added
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 201: NIO created
  • 404: Instance doesn’t exist
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/04648c72-4339-471e-aa12-57b42d7ea18b/adapters/1/ports/0/nio' -d '{"ethernet_device": "eth0", "type": "nio_generic_ethernet"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/04648c72-4339-471e-aa12-57b42d7ea18b/adapters/1/ports/0/nio HTTP/1.1
{
    "ethernet_device": "eth0",
    "type": "nio_generic_ethernet"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 69
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

{
    "ethernet_device": "eth0",
    "type": "nio_generic_ethernet"
}
DELETE /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Remove a NIO from a IOU instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Network adapter where the nio is located
  • port_number: Port from where the nio should be removed
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: NIO deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/779f3f81-60ab-4d26-860c-75f915b1d70b/adapters/1/ports/0/nio'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/779f3f81-60ab-4d26-860c-75f915b1d70b/adapters/1/ports/0/nio HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

/v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/start_capture

POST /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/start_capture

Start a packet capture on a IOU VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter to start a packet capture
  • port_number: Port on the adapter
  • vm_id: UUID for the instance
Response status codes
  • 200: Capture started
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: VM not started
Input
Name Mandatory Type Description
capture_file_name string Capture file name
data_link_type string PCAP data link type
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/6056b617-d0c4-4683-bc9e-d0130beec951/adapters/0/ports/0/start_capture' -d '{"capture_file_name": "test.pcap", "data_link_type": "DLT_EN10MB"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/6056b617-d0c4-4683-bc9e-d0130beec951/adapters/0/ports/0/start_capture HTTP/1.1
{
    "capture_file_name": "test.pcap",
    "data_link_type": "DLT_EN10MB"
}


HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 158
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/start_capture

{
    "pcap_file_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmp367810hd/a1e920ca-338a-4e9f-b363-aa607b09dd80/project-files/captures/test.pcap"
}

/v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/stop_capture

POST /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/stop_capture

Stop a packet capture on a IOU VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter to stop a packet capture
  • port_number: Port on the adapter (always 0)
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Capture stopped
  • 409: VM not started
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/0fb3c393-7cda-4abc-ad76-a9e7af04abea/adapters/0/ports/0/stop_capture' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/0fb3c393-7cda-4abc-ad76-a9e7af04abea/adapters/0/ports/0/stop_capture HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/stop_capture

/v1/projects/{project_id}/iou/vms/{vm_id}/initial_config

GET /v1/projects/{project_id}/iou/vms/{vm_id}/initial_config

Retrieve the initial config content

Response status codes
  • 200: Initial config retrieved
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
content ['string', 'null'] Content of the initial configuration file
Sample session
curl -i -X GET 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/821b0dc3-4cc0-4899-8184-75bfc22db584/initial_config'

GET /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/821b0dc3-4cc0-4899-8184-75bfc22db584/initial_config HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 25
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/initial_config

{
    "content": "TEST"
}

/v1/projects/{project_id}/iou/vms/{vm_id}/reload

POST /v1/projects/{project_id}/iou/vms/{vm_id}/reload

Reload a IOU instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance reloaded
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/b32c38db-3692-4719-b94f-2b3f664cd06f/reload' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/b32c38db-3692-4719-b94f-2b3f664cd06f/reload HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/reload

/v1/projects/{project_id}/iou/vms/{vm_id}/start

POST /v1/projects/{project_id}/iou/vms/{vm_id}/start

Start a IOU instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance started
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/55209a6f-8fe0-49d1-a884-b7cd09547b5c/start' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/55209a6f-8fe0-49d1-a884-b7cd09547b5c/start HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/start

/v1/projects/{project_id}/iou/vms/{vm_id}/stop

POST /v1/projects/{project_id}/iou/vms/{vm_id}/stop

Stop a IOU instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance stopped
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/d893bd2c-d84e-4f89-ad84-f3bdfaf460b6/stop' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/iou/vms/d893bd2c-d84e-4f89-ad84-f3bdfaf460b6/stop HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/iou/vms/{vm_id}/stop

Network

/v1/interfaces

GET /v1/interfaces

List all the network interfaces available on the server

Sample session
curl -i -X GET 'http://localhost:8000/v1/interfaces'

GET /v1/interfaces HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 718
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/interfaces

[
    {
        "id": "lo0",
        "name": "lo0"
    },
    {
        "id": "gif0",
        "name": "gif0"
    },
    {
        "id": "stf0",
        "name": "stf0"
    },
    {
        "id": "en0",
        "name": "en0"
    },
    {
        "id": "en1",
        "name": "en1"
    },
    {
        "id": "fw0",
        "name": "fw0"
    },
    {
        "id": "en2",
        "name": "en2"
    },
    {
        "id": "p2p0",
        "name": "p2p0"
    },
    {
        "id": "bridge0",
        "name": "bridge0"
    },
    {
        "id": "vboxnet0",
        "name": "vboxnet0"
    },
    {
        "id": "vboxnet1",
        "name": "vboxnet1"
    },
    {
        "id": "vboxnet2",
        "name": "vboxnet2"
    }
]

/v1/projects/{project_id}/ports/udp

POST /v1/projects/{project_id}/ports/udp

Allocate an UDP port on the server

Parameters
  • project_id: The UUID of the project
Response status codes
  • 201: UDP port allocated
  • 404: The project doesn’t exist
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/ports/udp' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/ports/udp HTTP/1.1
{}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 25
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/ports/udp

{
    "udp_port": 10000
}

Project

/v1/projects

POST /v1/projects

Create a new project on the server

Response status codes
  • 201: Project created
  • 409: Project already created
Input
Name Mandatory Type Description
name ['string', 'null'] Project name
path ['string', 'null'] Project directory
project_id ['string', 'null'] Project UUID
temporary boolean If project is a temporary project
Output
Name Mandatory Type Description
location string Base directory where the project should be created on remote server
name string Project name
path string Directory of the project on the server
project_id string Project UUID
temporary boolean If project is a temporary project
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects' -d '{"name": "test"}'

POST /v1/projects HTTP/1.1
{
    "name": "test"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 297
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects

{
    "location": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmp_6lclsv7",
    "name": "test",
    "path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmp_6lclsv7/187543e2-5d46-4108-a623-cfdd31fa300e",
    "project_id": "187543e2-5d46-4108-a623-cfdd31fa300e",
    "temporary": false
}

/v1/projects/{project_id}

GET /v1/projects/{project_id}

Get project information

Parameters
  • project_id: The UUID of the project
Response status codes
  • 200: Success
  • 404: The project doesn’t exist
Output
Name Mandatory Type Description
location string Base directory where the project should be created on remote server
name string Project name
path string Directory of the project on the server
project_id string Project UUID
temporary boolean If project is a temporary project
Sample session
curl -i -X GET 'http://localhost:8000/v1/projects/00010203-0405-0607-0809-0a0b0c0d0e02'

GET /v1/projects/00010203-0405-0607-0809-0a0b0c0d0e02 HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 297
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}

{
    "location": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmphbzo0jp9",
    "name": "test",
    "path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmphbzo0jp9/00010203-0405-0607-0809-0a0b0c0d0e02",
    "project_id": "00010203-0405-0607-0809-0a0b0c0d0e02",
    "temporary": false
}
PUT /v1/projects/{project_id}

Update a project

Parameters
  • project_id: The UUID of the project
Response status codes
  • 200: The project has been updated
  • 403: You are not allowed to modify this property
  • 404: The project doesn’t exist
Input
Name Mandatory Type Description
name ['string', 'null'] Project name
path ['string', 'null'] Path of the project on the server (work only with --local)
temporary boolean If project is a temporary project
Output
Name Mandatory Type Description
location string Base directory where the project should be created on remote server
name string Project name
path string Directory of the project on the server
project_id string Project UUID
temporary boolean If project is a temporary project
Sample session
curl -i -X PUT 'http://localhost:8000/v1/projects/b32aab45-411c-4171-9f20-357eaa00d54c' -d '{"name": "second_name", "path": "/private/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/pytest-4450/test_update_path_project_non_l0"}'

PUT /v1/projects/b32aab45-411c-4171-9f20-357eaa00d54c HTTP/1.1
{
    "name": "second_name",
    "path": "/private/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/pytest-4450/test_update_path_project_non_l0"
}


HTTP/1.1 403
CONNECTION: keep-alive
CONTENT-LENGTH: 100
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}

{
    "message": "You are not allowed to modify the project directory location",
    "status": 403
}
DELETE /v1/projects/{project_id}

Delete a project from disk

Parameters
  • project_id: The UUID of the project
Response status codes
  • 404: The project doesn’t exist
  • 204: Changes have been written on disk
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80 HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}

/v1/projects/{project_id}/close

POST /v1/projects/{project_id}/close

Close a project

Parameters
  • project_id: The UUID of the project
Response status codes
  • 404: The project doesn’t exist
  • 204: The project has been closed
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/close' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/close HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/close

/v1/projects/{project_id}/commit

POST /v1/projects/{project_id}/commit

Write changes on disk

Parameters
  • project_id: The UUID of the project
Response status codes
  • 404: The project doesn’t exist
  • 204: Changes have been written on disk
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/commit' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/commit HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/commit

Qemu

/v1/projects/{project_id}/qemu/vms

POST /v1/projects/{project_id}/qemu/vms

Create a new Qemu.instance

Parameters
  • project_id: UUID for the project
Response status codes
  • 400: Invalid request
  • 201: Instance created
  • 409: Conflict
Input
Name Mandatory Type Description
adapter_type ['string', 'null'] QEMU adapter type
adapters ['integer', 'null'] number of adapters
console ['integer', 'null'] console TCP port
cpu_throttling ['integer', 'null'] Percentage of CPU allowed for QEMU
hda_disk_image ['string', 'null'] QEMU hda disk image path
hdb_disk_image ['string', 'null'] QEMU hdb disk image path
hdc_disk_image ['string', 'null'] QEMU hdc disk image path
hdd_disk_image ['string', 'null'] QEMU hdd disk image path
initrd ['string', 'null'] QEMU initrd path
kernel_command_line ['string', 'null'] QEMU kernel command line
kernel_image ['string', 'null'] QEMU kernel image path
legacy_networking ['boolean', 'null'] Use QEMU legagy networking commands (-net syntax)
name string QEMU VM instance name
options ['string', 'null'] Additional QEMU options
process_priority enum Possible values: realtime, very high, high, normal, low, very low, null
qemu_path string Path to QEMU
ram ['integer', 'null'] amount of RAM in MB
vm_id QEMU VM identifier
Output
Name Mandatory Type Description
adapter_type string QEMU adapter type
adapters integer number of adapters
console integer console TCP port
cpu_throttling integer Percentage of CPU allowed for QEMU
hda_disk_image string QEMU hda disk image path
hdb_disk_image string QEMU hdb disk image path
hdc_disk_image string QEMU hdc disk image path
hdd_disk_image string QEMU hdd disk image path
initrd string QEMU initrd path
kernel_command_line string QEMU kernel command line
kernel_image string QEMU kernel image path
legacy_networking boolean Use QEMU legagy networking commands (-net syntax)
name string QEMU VM instance name
options string Additional QEMU options
process_priority enum Possible values: realtime, very high, high, normal, low, very low
project_id string Project uuid
qemu_path string path to QEMU
ram integer amount of RAM in MB
vm_id string QEMU VM uuid
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms' -d '{"hda_disk_image": "/tmp/hda", "name": "PC TEST 1", "qemu_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmpyasp9636/qemu_x42", "ram": 1024}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms HTTP/1.1
{
    "hda_disk_image": "/tmp/hda",
    "name": "PC TEST 1",
    "qemu_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmpyasp9636/qemu_x42",
    "ram": 1024
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 606
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms

{
    "adapter_type": "e1000",
    "adapters": 1,
    "console": 2000,
    "cpu_throttling": 0,
    "hda_disk_image": "/tmp/hda",
    "hdb_disk_image": "",
    "hdc_disk_image": "",
    "hdd_disk_image": "",
    "initrd": "",
    "kernel_command_line": "",
    "kernel_image": "",
    "legacy_networking": false,
    "name": "PC TEST 1",
    "options": "",
    "process_priority": "low",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "qemu_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmpyasp9636/qemu_x42",
    "ram": 1024,
    "vm_id": "8c325041-39a8-4c31-b921-b66dadadc353"
}

/v1/projects/{project_id}/qemu/vms/{vm_id}

GET /v1/projects/{project_id}/qemu/vms/{vm_id}

Get a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
adapter_type string QEMU adapter type
adapters integer number of adapters
console integer console TCP port
cpu_throttling integer Percentage of CPU allowed for QEMU
hda_disk_image string QEMU hda disk image path
hdb_disk_image string QEMU hdb disk image path
hdc_disk_image string QEMU hdc disk image path
hdd_disk_image string QEMU hdd disk image path
initrd string QEMU initrd path
kernel_command_line string QEMU kernel command line
kernel_image string QEMU kernel image path
legacy_networking boolean Use QEMU legagy networking commands (-net syntax)
name string QEMU VM instance name
options string Additional QEMU options
process_priority enum Possible values: realtime, very high, high, normal, low, very low
project_id string Project uuid
qemu_path string path to QEMU
ram integer amount of RAM in MB
vm_id string QEMU VM uuid
Sample session
curl -i -X GET 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e3935d2d-2bf9-4cde-8c7e-0bd1d74c3dad'

GET /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e3935d2d-2bf9-4cde-8c7e-0bd1d74c3dad HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 597
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}

{
    "adapter_type": "e1000",
    "adapters": 1,
    "console": 2000,
    "cpu_throttling": 0,
    "hda_disk_image": "",
    "hdb_disk_image": "",
    "hdc_disk_image": "",
    "hdd_disk_image": "",
    "initrd": "",
    "kernel_command_line": "",
    "kernel_image": "",
    "legacy_networking": false,
    "name": "PC TEST 1",
    "options": "",
    "process_priority": "low",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "qemu_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmpyasp9636/qemu_x42",
    "ram": 256,
    "vm_id": "e3935d2d-2bf9-4cde-8c7e-0bd1d74c3dad"
}
PUT /v1/projects/{project_id}/qemu/vms/{vm_id}

Update a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Instance updated
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: Conflict
Input
Name Mandatory Type Description
adapter_type ['string', 'null'] QEMU adapter type
adapters ['integer', 'null'] number of adapters
console ['integer', 'null'] console TCP port
cpu_throttling ['integer', 'null'] Percentage of CPU allowed for QEMU
hda_disk_image ['string', 'null'] QEMU hda disk image path
hdb_disk_image ['string', 'null'] QEMU hdb disk image path
hdc_disk_image ['string', 'null'] QEMU hdc disk image path
hdd_disk_image ['string', 'null'] QEMU hdd disk image path
initrd ['string', 'null'] QEMU initrd path
kernel_command_line ['string', 'null'] QEMU kernel command line
kernel_image ['string', 'null'] QEMU kernel image path
legacy_networking ['boolean', 'null'] Use QEMU legagy networking commands (-net syntax)
name ['string', 'null'] QEMU VM instance name
options ['string', 'null'] Additional QEMU options
process_priority enum Possible values: realtime, very high, high, normal, low, very low, null
qemu_path ['string', 'null'] Path to QEMU
ram ['integer', 'null'] amount of RAM in MB
Output
Name Mandatory Type Description
adapter_type string QEMU adapter type
adapters integer number of adapters
console integer console TCP port
cpu_throttling integer Percentage of CPU allowed for QEMU
hda_disk_image string QEMU hda disk image path
hdb_disk_image string QEMU hdb disk image path
hdc_disk_image string QEMU hdc disk image path
hdd_disk_image string QEMU hdd disk image path
initrd string QEMU initrd path
kernel_command_line string QEMU kernel command line
kernel_image string QEMU kernel image path
legacy_networking boolean Use QEMU legagy networking commands (-net syntax)
name string QEMU VM instance name
options string Additional QEMU options
process_priority enum Possible values: realtime, very high, high, normal, low, very low
project_id string Project uuid
qemu_path string path to QEMU
ram integer amount of RAM in MB
vm_id string QEMU VM uuid
Sample session
curl -i -X PUT 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e5b90e65-6f6a-4d44-b2d8-3a5c3a4a626b' -d '{"console": 2001, "hdb_disk_image": "/tmp/hdb", "name": "test", "ram": 1024}'

PUT /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e5b90e65-6f6a-4d44-b2d8-3a5c3a4a626b HTTP/1.1
{
    "console": 2001,
    "hdb_disk_image": "/tmp/hdb",
    "name": "test",
    "ram": 1024
}


HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 601
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}

{
    "adapter_type": "e1000",
    "adapters": 1,
    "console": 2001,
    "cpu_throttling": 0,
    "hda_disk_image": "",
    "hdb_disk_image": "/tmp/hdb",
    "hdc_disk_image": "",
    "hdd_disk_image": "",
    "initrd": "",
    "kernel_command_line": "",
    "kernel_image": "",
    "legacy_networking": false,
    "name": "test",
    "options": "",
    "process_priority": "low",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "qemu_path": "/var/folders/3s/r2wbv07n7wg4vrsn874lmxxh0000gn/T/tmpyasp9636/qemu_x42",
    "ram": 1024,
    "vm_id": "e5b90e65-6f6a-4d44-b2d8-3a5c3a4a626b"
}
DELETE /v1/projects/{project_id}/qemu/vms/{vm_id}

Delete a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/6537c17b-2e47-46f9-b96b-6fc66382709f'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/6537c17b-2e47-46f9-b96b-6fc66382709f HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}

/v1/projects/{project_id}/qemu/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

POST /v1/projects/{project_id}/qemu/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Add a NIO to a Qemu.instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Network adapter where the nio is located
  • port_number: Port on the adapter (always 0)
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 201: NIO created
  • 404: Instance doesn’t exist
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e791569e-7f95-4a1d-9f8d-b48611afeef3/adapters/1/ports/0/nio' -d '{"ethernet_device": "eth0", "type": "nio_generic_ethernet"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e791569e-7f95-4a1d-9f8d-b48611afeef3/adapters/1/ports/0/nio HTTP/1.1
{
    "ethernet_device": "eth0",
    "type": "nio_generic_ethernet"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 69
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

{
    "ethernet_device": "eth0",
    "type": "nio_generic_ethernet"
}
DELETE /v1/projects/{project_id}/qemu/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Remove a NIO from a Qemu.instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Network adapter where the nio is located
  • port_number: Port on the adapter (always 0)
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: NIO deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/b54e4616-058f-413d-a589-0b7c5da20aa3/adapters/1/ports/0/nio'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/b54e4616-058f-413d-a589-0b7c5da20aa3/adapters/1/ports/0/nio HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

/v1/projects/{project_id}/qemu/vms/{vm_id}/reload

POST /v1/projects/{project_id}/qemu/vms/{vm_id}/reload

Reload a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance reloaded
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e6de45b1-048b-498b-9875-de76762532e9/reload' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/e6de45b1-048b-498b-9875-de76762532e9/reload HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/reload

/v1/projects/{project_id}/qemu/vms/{vm_id}/resume

POST /v1/projects/{project_id}/qemu/vms/{vm_id}/resume

Resume a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance resumed
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/d7152d7c-7f23-4d92-9ee1-fae132a50b3b/resume' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/d7152d7c-7f23-4d92-9ee1-fae132a50b3b/resume HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/resume

/v1/projects/{project_id}/qemu/vms/{vm_id}/start

POST /v1/projects/{project_id}/qemu/vms/{vm_id}/start

Start a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance started
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/031c1e57-577c-4ff4-91d1-da6fe0816fdd/start' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/031c1e57-577c-4ff4-91d1-da6fe0816fdd/start HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/start

/v1/projects/{project_id}/qemu/vms/{vm_id}/stop

POST /v1/projects/{project_id}/qemu/vms/{vm_id}/stop

Stop a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance stopped
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/79ca17e8-0194-4682-bb2a-0bdd9f7d1e1a/stop' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/79ca17e8-0194-4682-bb2a-0bdd9f7d1e1a/stop HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/stop

/v1/projects/{project_id}/qemu/vms/{vm_id}/suspend

POST /v1/projects/{project_id}/qemu/vms/{vm_id}/suspend

Suspend a Qemu.instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance suspended
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/7e24f49b-51ea-410f-bc94-16fc58071493/suspend' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/qemu/vms/7e24f49b-51ea-410f-bc94-16fc58071493/suspend HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/qemu/vms/{vm_id}/suspend

/v1/qemu/binaries

GET /v1/qemu/binaries

Get a list of available Qemu binaries

Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Sample session
curl -i -X GET 'http://localhost:8000/v1/qemu/binaries'

GET /v1/qemu/binaries HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 134
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/qemu/binaries

[
    {
        "path": "/tmp/1",
        "version": "2.2.0"
    },
    {
        "path": "/tmp/2",
        "version": "2.1.0"
    }
]

Server

/v1/server/shutdown

POST /v1/server/shutdown

Shutdown the local server

Response status codes
  • 201: Server is shutting down
  • 403: Server shutdown refused

Version

/v1/version

GET /v1/version

Retrieve the server version number

Output
Name Mandatory Type Description
local boolean Either this is a local server
version string Version number human readable
Sample session
curl -i -X GET 'http://localhost:8000/v1/version'

GET /v1/version HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 49
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/version

{
    "local": true,
    "version": "1.3.1.rc2"
}
POST /v1/version

Check if version is the same as the server

Response status codes
  • 200: Same version
  • 409: Invalid version
Input
Name Mandatory Type Description
local boolean Either this is a local server
version string Version number human readable
Output
Name Mandatory Type Description
local boolean Either this is a local server
version string Version number human readable
Sample session
curl -i -X POST 'http://localhost:8000/v1/version' -d '{"version": "1.3.1.rc2"}'

POST /v1/version HTTP/1.1
{
    "version": "1.3.1.rc2"
}


HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 30
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/version

{
    "version": "1.3.1.rc2"
}

Virtualbox

/v1/projects/{project_id}/virtualbox/vms

POST /v1/projects/{project_id}/virtualbox/vms

Create a new VirtualBox VM instance

Parameters
  • project_id: UUID for the project
Response status codes
  • 400: Invalid request
  • 201: Instance created
  • 409: Conflict
Input
Name Mandatory Type Description
adapter_type string VirtualBox adapter type
adapters integer number of adapters
console integer console TCP port
enable_remote_console boolean enable the remote console
headless boolean headless mode
linked_clone boolean either the VM is a linked clone or not
name string VirtualBox VM instance name
ram integer Amount of RAM
use_any_adapter boolean allow GNS3 to use any VirtualBox adapter
vm_id VirtualBox VM instance identifier
vmname string VirtualBox VM name (in VirtualBox itself)
Output
Name Mandatory Type Description
adapter_type string VirtualBox adapter type
adapters integer number of adapters
console integer console TCP port
enable_remote_console boolean enable the remote console
headless boolean headless mode
name string VirtualBox VM instance name
project_id string Project UUID
ram integer Amount of RAM
use_any_adapter boolean allow GNS3 to use any VirtualBox adapter
vm_id string VirtualBox VM instance UUID
vmname string VirtualBox VM name (in VirtualBox itself)
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms' -d '{"linked_clone": false, "name": "VM1", "vmname": "VM1"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms HTTP/1.1
{
    "linked_clone": false,
    "name": "VM1",
    "vmname": "VM1"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 355
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms

{
    "adapter_type": "Intel PRO/1000 MT Desktop (82540EM)",
    "adapters": 0,
    "console": 2000,
    "enable_remote_console": false,
    "headless": false,
    "name": "VM1",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "ram": 0,
    "use_any_adapter": false,
    "vm_id": "fd208626-81e5-449e-b145-fd6993f5097c",
    "vmname": "VM1"
}

/v1/projects/{project_id}/virtualbox/vms/{vm_id}

GET /v1/projects/{project_id}/virtualbox/vms/{vm_id}

Get a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
adapter_type string VirtualBox adapter type
adapters integer number of adapters
console integer console TCP port
enable_remote_console boolean enable the remote console
headless boolean headless mode
name string VirtualBox VM instance name
project_id string Project UUID
ram integer Amount of RAM
use_any_adapter boolean allow GNS3 to use any VirtualBox adapter
vm_id string VirtualBox VM instance UUID
vmname string VirtualBox VM name (in VirtualBox itself)
Sample session
curl -i -X GET 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/f49ff215-0872-4bf7-90c8-3d9ecc2b2f2b'

GET /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/f49ff215-0872-4bf7-90c8-3d9ecc2b2f2b HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 361
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}

{
    "adapter_type": "Intel PRO/1000 MT Desktop (82540EM)",
    "adapters": 0,
    "console": 2001,
    "enable_remote_console": false,
    "headless": false,
    "name": "VMTEST",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "ram": 0,
    "use_any_adapter": false,
    "vm_id": "f49ff215-0872-4bf7-90c8-3d9ecc2b2f2b",
    "vmname": "VMTEST"
}
PUT /v1/projects/{project_id}/virtualbox/vms/{vm_id}

Update a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Instance updated
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: Conflict
Input
Name Mandatory Type Description
adapter_type string VirtualBox adapter type
adapters integer number of adapters
console integer console TCP port
enable_remote_console boolean enable the remote console
headless boolean headless mode
name string VirtualBox VM instance name
ram integer Amount of RAM
use_any_adapter boolean allow GNS3 to use any VirtualBox adapter
vmname string VirtualBox VM name (in VirtualBox itself)
Output
Name Mandatory Type Description
adapter_type string VirtualBox adapter type
adapters integer number of adapters
console integer console TCP port
enable_remote_console boolean enable the remote console
headless boolean headless mode
name string VirtualBox VM instance name
project_id string Project UUID
ram integer Amount of RAM
use_any_adapter boolean allow GNS3 to use any VirtualBox adapter
vm_id string VirtualBox VM instance UUID
vmname string VirtualBox VM name (in VirtualBox itself)
Sample session
curl -i -X PUT 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/514963f5-93f8-4d18-bcd6-7d50ef7164a6' -d '{"console": 2010, "name": "test"}'

PUT /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/514963f5-93f8-4d18-bcd6-7d50ef7164a6 HTTP/1.1
{
    "console": 2010,
    "name": "test"
}


HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 359
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}

{
    "adapter_type": "Intel PRO/1000 MT Desktop (82540EM)",
    "adapters": 0,
    "console": 2010,
    "enable_remote_console": false,
    "headless": false,
    "name": "test",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "ram": 0,
    "use_any_adapter": false,
    "vm_id": "514963f5-93f8-4d18-bcd6-7d50ef7164a6",
    "vmname": "VMTEST"
}
DELETE /v1/projects/{project_id}/virtualbox/vms/{vm_id}

Delete a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance deleted

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Add a NIO to a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter where the nio should be added
  • port_number: Port on the adapter (always 0)
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 201: NIO created
  • 404: Instance doesn’t exist
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/5463a797-0eb0-41d2-8b32-1efbd7a353cc/adapters/0/ports/0/nio' -d '{"lport": 4242, "rhost": "127.0.0.1", "rport": 4343, "type": "nio_udp"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/5463a797-0eb0-41d2-8b32-1efbd7a353cc/adapters/0/ports/0/nio HTTP/1.1
{
    "lport": 4242,
    "rhost": "127.0.0.1",
    "rport": 4343,
    "type": "nio_udp"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 89
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

{
    "lport": 4242,
    "rhost": "127.0.0.1",
    "rport": 4343,
    "type": "nio_udp"
}
DELETE /v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Remove a NIO from a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter from where the nio should be removed
  • port_number: Port on the adapter (always 0)
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: NIO deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/387fb016-f1fc-4844-a25e-97c08ef77274/adapters/0/ports/0/nio'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/387fb016-f1fc-4844-a25e-97c08ef77274/adapters/0/ports/0/nio HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/start_capture

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/start_capture

Start a packet capture on a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Adapter to start a packet capture
  • port_number: Port on the adapter (always 0)
  • vm_id: UUID for the instance
Response status codes
  • 200: Capture started
  • 400: Invalid request
  • 404: Instance doesn’t exist
Input
Name Mandatory Type Description
capture_file_name string Capture file name

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/reload

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/reload

Reload a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance reloaded
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/f24209c8-671e-428a-9561-db4775f6b8a7/reload' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/f24209c8-671e-428a-9561-db4775f6b8a7/reload HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/reload

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/resume

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/resume

Resume a suspended VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance resumed
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/70df82f6-e868-4ab3-9be9-d456871f41dc/resume' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/70df82f6-e868-4ab3-9be9-d456871f41dc/resume HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/resume

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/start

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/start

Start a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance started
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/354d48fe-cab6-41d8-8cc1-64716e02c3a8/start' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/354d48fe-cab6-41d8-8cc1-64716e02c3a8/start HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/start

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/stop

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/stop

Stop a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance stopped
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/90733316-a02a-490b-b8c4-e6ea4a32296a/stop' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/90733316-a02a-490b-b8c4-e6ea4a32296a/stop HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/stop

/v1/projects/{project_id}/virtualbox/vms/{vm_id}/suspend

POST /v1/projects/{project_id}/virtualbox/vms/{vm_id}/suspend

Suspend a VirtualBox VM instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance suspended
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/0f257aa5-d61d-4ee9-872a-898462f7ecdf/suspend' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/virtualbox/vms/0f257aa5-d61d-4ee9-872a-898462f7ecdf/suspend HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/virtualbox/vms/{vm_id}/suspend

Vpcs

/v1/projects/{project_id}/vpcs/vms

POST /v1/projects/{project_id}/vpcs/vms

Create a new VPCS instance

Parameters
  • project_id: UUID for the project
Response status codes
  • 400: Invalid request
  • 201: Instance created
  • 409: Conflict
Input
Name Mandatory Type Description
console ['integer', 'null'] console TCP port
name string VPCS VM name
startup_script ['string', 'null'] Content of the VPCS startup script
vm_id VPCS VM identifier
Output
Name Mandatory Type Description
console integer console TCP port
name string VPCS VM name
project_id string Project UUID
startup_script ['string', 'null'] Content of the VPCS startup script
startup_script_path ['string', 'null'] Path of the VPCS startup script relative to project directory
vm_id string VPCS VM UUID
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms' -d '{"name": "PC TEST 1"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms HTTP/1.1
{
    "name": "PC TEST 1"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 220
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms

{
    "console": 2009,
    "name": "PC TEST 1",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "startup_script": null,
    "startup_script_path": null,
    "vm_id": "68c6af80-0a82-406e-b051-24c95bd728f4"
}

/v1/projects/{project_id}/vpcs/vms/{vm_id}

GET /v1/projects/{project_id}/vpcs/vms/{vm_id}

Get a VPCS instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Success
  • 400: Invalid request
  • 404: Instance doesn’t exist
Output
Name Mandatory Type Description
console integer console TCP port
name string VPCS VM name
project_id string Project UUID
startup_script ['string', 'null'] Content of the VPCS startup script
startup_script_path ['string', 'null'] Path of the VPCS startup script relative to project directory
vm_id string VPCS VM UUID
Sample session
curl -i -X GET 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/3ff6ff9e-93de-45ae-a7ec-e296d406ffe1'

GET /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/3ff6ff9e-93de-45ae-a7ec-e296d406ffe1 HTTP/1.1



HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 220
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}

{
    "console": 2009,
    "name": "PC TEST 1",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "startup_script": null,
    "startup_script_path": null,
    "vm_id": "3ff6ff9e-93de-45ae-a7ec-e296d406ffe1"
}
PUT /v1/projects/{project_id}/vpcs/vms/{vm_id}

Update a VPCS instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 200: Instance updated
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 409: Conflict
Input
Name Mandatory Type Description
console ['integer', 'null'] console TCP port
name ['string', 'null'] VPCS VM name
startup_script ['string', 'null'] Content of the VPCS startup script
Output
Name Mandatory Type Description
console integer console TCP port
name string VPCS VM name
project_id string Project UUID
startup_script ['string', 'null'] Content of the VPCS startup script
startup_script_path ['string', 'null'] Path of the VPCS startup script relative to project directory
vm_id string VPCS VM UUID
Sample session
curl -i -X PUT 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/4905e649-6e81-446d-a60b-fd8b058a85e8' -d '{"console": 2011, "name": "test", "startup_script": "ip 192.168.1.1"}'

PUT /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/4905e649-6e81-446d-a60b-fd8b058a85e8 HTTP/1.1
{
    "console": 2011,
    "name": "test",
    "startup_script": "ip 192.168.1.1"
}


HTTP/1.1 200
CONNECTION: keep-alive
CONTENT-LENGTH: 236
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}

{
    "console": 2011,
    "name": "test",
    "project_id": "a1e920ca-338a-4e9f-b363-aa607b09dd80",
    "startup_script": "ip 192.168.1.1",
    "startup_script_path": "startup.vpc",
    "vm_id": "4905e649-6e81-446d-a60b-fd8b058a85e8"
}
DELETE /v1/projects/{project_id}/vpcs/vms/{vm_id}

Delete a VPCS instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/6bc73868-fea6-449b-af5c-e7b746e4129d'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/6bc73868-fea6-449b-af5c-e7b746e4129d HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}

/v1/projects/{project_id}/vpcs/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

POST /v1/projects/{project_id}/vpcs/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Add a NIO to a VPCS instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Network adapter where the nio is located
  • port_number: Port where the nio should be added
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 201: NIO created
  • 404: Instance doesn’t exist
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/4125e37f-2bf1-435c-a86c-ae1fce4c916a/adapters/0/ports/0/nio' -d '{"lport": 4242, "rhost": "127.0.0.1", "rport": 4343, "type": "nio_udp"}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/4125e37f-2bf1-435c-a86c-ae1fce4c916a/adapters/0/ports/0/nio HTTP/1.1
{
    "lport": 4242,
    "rhost": "127.0.0.1",
    "rport": 4343,
    "type": "nio_udp"
}


HTTP/1.1 201
CONNECTION: keep-alive
CONTENT-LENGTH: 89
CONTENT-TYPE: application/json
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

{
    "lport": 4242,
    "rhost": "127.0.0.1",
    "rport": 4343,
    "type": "nio_udp"
}
DELETE /v1/projects/{project_id}/vpcs/vms/{vm_id}/adapters/{adapter_number:d+}/ports/{port_number:d+}/nio

Remove a NIO from a VPCS instance

Parameters
  • project_id: UUID for the project
  • adapter_number: Network adapter where the nio is located
  • port_number: Port from where the nio should be removed
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: NIO deleted
Sample session
curl -i -X DELETE 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/f7d1d6ad-422b-486a-8d23-1ff46cd8bc4b/adapters/0/ports/0/nio'

DELETE /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/f7d1d6ad-422b-486a-8d23-1ff46cd8bc4b/adapters/0/ports/0/nio HTTP/1.1



HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}/adapters/{adapter_number:\d+}/ports/{port_number:\d+}/nio

/v1/projects/{project_id}/vpcs/vms/{vm_id}/reload

POST /v1/projects/{project_id}/vpcs/vms/{vm_id}/reload

Reload a VPCS instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance reloaded
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/4c5c5174-07bf-4f2a-93ab-cec244e24852/reload' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/4c5c5174-07bf-4f2a-93ab-cec244e24852/reload HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}/reload

/v1/projects/{project_id}/vpcs/vms/{vm_id}/start

POST /v1/projects/{project_id}/vpcs/vms/{vm_id}/start

Start a VPCS instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance started
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/43ac3ea8-78a7-405e-ad5e-653293c48e66/start' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/43ac3ea8-78a7-405e-ad5e-653293c48e66/start HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}/start

/v1/projects/{project_id}/vpcs/vms/{vm_id}/stop

POST /v1/projects/{project_id}/vpcs/vms/{vm_id}/stop

Stop a VPCS instance

Parameters
  • project_id: UUID for the project
  • vm_id: UUID for the instance
Response status codes
  • 400: Invalid request
  • 404: Instance doesn’t exist
  • 204: Instance stopped
Sample session
curl -i -X POST 'http://localhost:8000/v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/59df4b41-6a23-4c99-9370-600b3a2cff23/stop' -d '{}'

POST /v1/projects/a1e920ca-338a-4e9f-b363-aa607b09dd80/vpcs/vms/59df4b41-6a23-4c99-9370-600b3a2cff23/stop HTTP/1.1
{}


HTTP/1.1 204
CONNECTION: keep-alive
CONTENT-LENGTH: 0
DATE: Thu, 08 Jan 2015 16:09:15 GMT
SERVER: Python/3.4 GNS3/1.3.1.rc2
X-ROUTE: /v1/projects/{project_id}/vpcs/vms/{vm_id}/stop