How to Bytemark

Virtual machine: Create

To reduce HTTP calls, a transactional version of POST virtual_machines, POST discs and POST reimage are provided in a single call:

Endpoint

Relative to https://uk0.bigv.io

POST /accounts/{account-id}/groups/{group-id}/vm_create

It takes a JSON data hash like:

{
  "virtual_machine" => { ... },
  "discs"   => [ { ... }, { ... } ],
  "reimage" => { ... },
  "ips": {
    "ipv4": "x.x.x.x",
    "ipv6": "xxxx:xxxx:xxxx:xxxx:xxxx::x"
  }
}

Attributes

Common attributes are listed below. Please see virtual machines for a complete list of options.

  • virtual_machine
    • cdrom_url – URL of an ISO to expose to the VM as a CD drive.
    • cores – number of CPU cores.
    • memory – amount of memory, in megabytes.
    • name – name of the virtual machine.
    • hardware_profile – which hardware profile to use (see the definitions page)
    • power_on – boolean specifying whether the machine should be turned on.
  • discs
    • label – Unix device label - this can be any string to identify the drive.
    • size – size in megabytes.
    • storage_grade – device type: SATA or archive.
  • reimage
    • distribution – the name of a distribution — valid options are available by calling GET /definitions.
    • root_password – the root password the machine should have after reimaging.
    • ssh_public_key – if specified, the contents of /root/.ssh/authorized_keys (for Linux distributions). Allows passwordless login.
    • firstboot_script – if specified, an arbitrary executable to be run on first boot (for Linux distributions). This should be a full, executable script, probably starting #!/bin/sh
  • ips
    • ipv4 – The IPv4 address the VM should have.
    • ipv6 – The IPv6 address the VM should have.
‘ips’ attributes are optional, and only valid for private VLANs

This allows you to specify specific IP addresses for the virtual machine to use instead of them being automatically selected. You can select one or the other of these. For example, you can specify an IPv4 address, but leave the IPv6 to be automatically allocated.

This will fail if another virtual machine exists with that same IP, but it will not check whether there is anything else on the network with that IP. For example, if you have a Dedicated Server already using that IP address, you will likely break the networking to that server by using its IP address here.


Return codes

POST vm_create will return 202 on success, and will process the creation in the background. You will need to poll and check the power_on attribute for when the machine has been powered on (if power_on was set to true when created).


Example

Request
POST /accounts/myaccountname/groups/default/vm_create
Curl
curl -H "Content-type: application/json" \
     -H "Authorization: Bearer {session-id}" \
     -X POST \
     -d '{"virtual_machine":{"name":"myserver1","cores":1,"memory":1024}, "discs":[{"label":"root","storage_grade":"sata","size":25600}], "reimage":{"distribution":"precise", "root_password":"mypassword"}}' \
     https://uk0.bigv.io/accounts/myaccountname/groups/default/vm_create
Response (success: 202)
{  
  "virtual_machine":{  
    "type":"application/vnd.bigv.virtual-machine",
    "autoreboot_on":true,
    "cdrom_url":null,
    "cores":1,
    "group_id":3,
    "id":45,
    "management_address":"213.123.123.123",
    "memory":1024,
    "name":"myserver1",
    "power_on":false,
    "keymap":null,
    "deleted":false,
    "hostname":"myserver1.default.myaccount.uk0.bigv.io",
    "head":null,
    "hardware_profile":"virtio2013",
    "hardware_profile_locked":false
  },
  "discs":[  
    {  
      "type":"application/vnd.bigv.disc",
      "id":45,
      "label":"root",
      "size":25600,
      "virtual_machine_id":45,
      "storage_pool":"t1-sata",
      "storage_grade":"sata"
    }
  ],
  "reimage":{  
    "distribution":"precise",
    "root_password":"mypassword"
  }
}
Bytemark Cloud used to be called "BigV"—nothing has changed except the name! We’re hiring! Please visit careers.bytemark.co.uk to find out more.