Openstack NovaClient:使用servers.create()启动实例时出错

时间:2015-07-09 19:20:01

标签: python openstack openstack-nova novaclient

我尝试使用nova python客户端生成一个cirros实例,并使用下面的api调用,

server = nova.servers.create(name = "cirros_vm",
                             image = image.id,
                             flavor = flavor.id )

我收到以下错误:

novaclient.exceptions.BadRequest: Multiple possible networks
found, use a Network ID to be more specific. (HTTP 400)
(Request-ID: req-c3aba1d2-23e9-4751-badc-60142286232e)

这是因为我在租户中有多个网络。帮助文档显示应该使用可选的nics参数。

 :param nics:  (optional extension) an ordered list of nics to be
                  added to this server, with information about
                  connected networks, fixed ips, port etc.

但是我无法弄清楚如何将网络ID传递给这个api。 当我将网络ID作为有序列表提供时,

server = nova.servers.create(name = "api_cir_test",
                             image = image.id,
                             flavor = flavor.id,
                             nics=[ network1.id, network2.id])

我收到以下错误:

AttributeError: 'unicode' object has no attribute 'get'

以下是使用的变量的详细信息:

nova is an object of Client in module novaclient.v1_1.client 
image = nova.images.find(name="cirros")
flavor =nova.flavors.find(name="m1.small")
network =nova.networks.find(label="test_net")

1 个答案:

答案 0 :(得分:3)

nics参数需要您在nova boot命令行中提供的相同信息...这意味着它接受除网络ID之外的其他内容(例如,您可以传入明确的中子端口ID,例如,或者您可以提供有关固定IP地址的信息)。 nics参数需要词典的有序列表,例如:

server = nova.servers.create(name = "api_cir_test",
                             image = image.id,
                             flavor = flavor.id,
                             nics=[{'net-id': network1.id},
                                   {'net-id': network2.id}])

这应该可以成功创建您的服务器。