2014-11-20 35 views
2

我正嘗試使用python-novaclient在openstack中創建一個可啓動卷中的實例。使用python-novaclient在openstach中創建一個實例

我正在採取的步驟如下:

第一步:創建圖像「的Centos」與100GB的體積。 第2步:用我在第1步中創建的卷創建一個實例。

但是,我必須做一些錯誤的事情或缺少一些無法完成任務的信息。

這裏是我在python shell中的命令。

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


project_name = 'project' 
region_name = 'region' 
keystone_link = 'https://keystone.net:5000/v2.0' 
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 
print(cinder.volumes.list()) 
[<Volume: 1d36203e-b90d-458f-99db-8690148b9600>, <Volume: d734f5fc-87f2-41dd-887e-c586bf76d116>] 

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

block_device_mapping = {'device_name': vol1.id, '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': network.id}] 

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

s1 = 'nova-vol-test' 

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

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.6/site-packages/novaclient/v1_1/servers.py", line 902, in create 
    **boot_kwargs) 
    File "/usr/lib/python2.6/site-packages/novaclient/v1_1/servers.py", line 554, in _boot 
    return_raw=return_raw, **kwargs) 
    File "/usr/lib/python2.6/site-packages/novaclient/base.py", line 100, in _create 
    _resp, body = self.api.client.post(url, body=body) 
    File "/usr/lib/python2.6/site-packages/novaclient/client.py", line 490, in post 
    return self._cs_request(url, 'POST', **kwargs) 
    File "/usr/lib/python2.6/site-packages/novaclient/client.py", line 465, in _cs_request 
    resp, body = self._time_request(url, method, **kwargs) 
    File "/usr/lib/python2.6/site-packages/novaclient/client.py", line 439, in _time_request 
    resp, body = self.request(url, method, **kwargs) 
    File "/usr/lib/python2.6/site-packages/novaclient/client.py", 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) 
>>> 

我試圖找到任何文件,以便我可以自己解決這個問題,但是我無法做到。

如果有人曾經嘗試過這一點,我將不勝感激這方面的幫助。

感謝, 穆爾塔扎

回答

4

我能夠得到它使用這本字典的工作:

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

然後我把它叫做在這樣的創建方法:

instance = nova.servers.create(name="python-test3", image='', block_device_mapping=block_dev_mapping, 
            flavor=flavor, key_name="my-keypair", nics=nics) 
+0

我試過這個block_dev_mapping = {'vda':'你想要使用的卷的uuid'}但是,其中沒有一個可以起作用。令人驚訝的是,它現在起作用。感謝您的回覆。 – 2014-11-26 03:31:40

+0

@MurtazaPitalwala那麼,我們知道爲什麼現在令人驚訝的作品? – Albert 2015-11-30 19:21:17