Pyrax API:使用boot-volumes

时间:2016-11-04 08:43:22

标签: rackspace-cloud pyrax

对于背景知识:Rackspace中的Compute / Memory nova实例没有本地根卷,Rackspace有一个策略来使用外部SSD可启动卷创建它们。现在的问题是: 我试图使用pyrax api在Rackspace中创建一个Compute flavor实例,Rackspace在其UI(https://support.rackspace.com/how-to/boot-a-server-from-a-cloud-block-storage-volume/)中执行如下操作:

    pyrax.cloudservers.servers.create(hostname,image.id, 
                                      flavor.id,block_device_mapping,
                                      security_groups=security_groups,     
                                      nics=networks, key_name=key)

,其中     block_device_mapping = {“vda”:“59fb72d5-0b33-46c2-b10b-33fed25c5f74 ::: 1”}, 长32位数是我在使用

创建服务器之前创建的卷的volume_id
pyrax.cloud_blockstorage.create(name=volume_name, size=volume_size,     
                                 volume_type=volume_type).

我收到错误说:

Policy doesn't allow memory_flavor:create:image_backed to be performed.(HTTP 403).

对于带有本地根卷的其他版本(不用说我没有引用带有'block_device_mapping'参数的那些),用于实例创建的pyrax api工作正常。 以下是关于github:https://github.com/rackspace/pyrax/issues/484的pyrax / rackspace repo主题的一个小线程,讨论了该问题。 有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

创建可引导卷时,应指定image_id(操作系统映像ID)以引导卷:

pyrax.cloud_blockstorage.create(name=volume_name, size=volume_size,  
                              volume_type=volume_type,image=image.id)

此外,block_device_map需要更多参数:

block_device_map = [{
                            'boot_index': '0',
                            'source_type': 'image',
                            'destination_type': 'volume',
                            'delete_on_termination': True,
                            'uuid': image.id,
                            'volume_size': int(requested_size),
                            'device_name': 'vda'
                   }]                  

这是最后一次捕获实际上没有得到403 Forbidden错误: 在创建服务器实例时,不要在pyrax调用参数中再次指定图像ID,否则pyrax会与启动实例的图像混淆。因此,只需在pyrax.cloudservers.servers.create()的params中为image_id添加None:

pyrax.cloudservers.servers.create(
            hostname,
            image=None,
            flavor=flavor.id,
            block_device_mapping_v2=block_device_map,
            security_groups=security_groups,
            nics=networks,
            key_name=key)