Ask Your Question

Create an instance from volume in openstach with python-novaclient

asked 2014-11-22 13:02:55 -0500

murtaza gravatar image


I am trying to create an instance from a bootable volume in openstack using python-novaclient.

The steps I am taking are following:

Step1: create a volume with an Image "Centos" with 100GB. Step2: create an instance with the volume that I created in step1.

However, I must be doing something wrong or missing some information that it is not able to complete the task.

Here are my commands in python shell.

import time, getpass
from cinderclient import client
from novaclient.client import Client

project_name = 'project'
region_name = 'region'
keystone_link = ''
network_zone = "Public"
key_name = 'key_pair'

user = 'user'
pswd = getpass.getpass('Password: ')

# create a connection
cinder = client.Client('1', user, pswd, project_name, keystone_link, region_name = region_name)

# get the volume id that we will attach
[<Volume: 1d36203e-b90d-458f-99db-8690148b9600>, <Volume: d734f5fc-87f2-41dd-887e-c586bf76d116>]

vol1 = cinder.volumes.list()[1]

block_device_mapping = {'device_name':, 'mapping': '/dev/vda'}

### +++++++++++++++++++++++++++++++++++++++++++++++++++++ ###
# now create a connection with nova and create then instance object
nova = Client(2, user, pswd, project_name, keystone_link, region_name = region_name)

# find the image 
image = nova.images.find(name="NETO CentOS 6.4 x86_64 v2.2")

# get the flavor
flavor = nova.flavors.find(name="m1.large")

#get the network and attach
network = nova.networks.find(label=network_zone)
nics = [{'net-id':}]

# get the keyname and attach
key_pair = nova.keypairs.get(key_name)

s1 = 'nova-vol-test'

server = nova.servers.create(name = s1, image =, block_device_mapping = block_device_mapping, flavor =, nics = nics, key_name =

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/novaclient/v1_1/", line 902, in create
  File "/usr/lib/python2.6/site-packages/novaclient/v1_1/", line 554, in _boot
    return_raw=return_raw, **kwargs)
  File "/usr/lib/python2.6/site-packages/novaclient/", line 100, in _create
    _resp, body =, body=body)
  File "/usr/lib/python2.6/site-packages/novaclient/", line 490, in post
    return self._cs_request(url, 'POST', **kwargs)
  File "/usr/lib/python2.6/site-packages/novaclient/", line 465, in _cs_request
    resp, body = self._time_request(url, method, **kwargs)
  File "/usr/lib/python2.6/site-packages/novaclient/", line 439, in _time_request
    resp, body = self.request(url, method, **kwargs)
  File "/usr/lib/python2.6/site-packages/novaclient/", line 433, in request
    raise exceptions.from_response(resp, body, url, method)
novaclient.exceptions.BadRequest: Block Device Mapping is Invalid: failed to get volume /dev/vda. (HTTP 400) (Request-ID: req-2b9db4e1-f24f-48c6-8660-822741ca52ad)

I tried to find any documentation so that I can solve this on my own, however, I was not able to.

If anyone has tried this before, I would appreciate their help on this. Also, if there is another way of doing this, please let me know.

Thanks, Murtaza

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2014-11-25 21:34:44 -0500

murtaza gravatar image

I was able to get it to work by using this dictionary:

block_dev_mapping = {'vda':'uuid of the volume you want to use'}


edit flag offensive delete link more

Get to know Ask OpenStack

Resources for moderators

Question Tools

1 follower


Asked: 2014-11-22 13:02:55 -0500

Seen: 2,329 times

Last updated: Nov 25 '14