1

以下の API 呼び出しで nova python クライアントを使用して cirros インスタンスを生成しようとしました。

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")
4

1 に答える 1

3

nics引数には、コマンドラインで指定するのと同じ情報が必要ですnova boot...つまり、ネットワーク ID 以外のものを受け入れることを意味します (たとえば、明示的な neutron ポート 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}])

これでサーバーが正常に作成されます。

于 2015-07-09T20:02:56.897 に答える