2015-07-09 1 views
0

Я пытался породить cirros экземпляр с помощью клиента сверхновой питона с ниже апи вызоваOpenStack NovaClient: Ошибка при запуске экземпляра с помощью servers.create()

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. 

Но я не могу понять, как передавать идентификаторы сети на этот апи. Когда я даю идентификаторы сети, как упорядоченный список,

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

ответ

2

nics аргумент требует ту же информацию, которую вы предоставили бы в командной строке nova boot ... что означает, что она принимает вещи, отличные от идентификаторов сети (вы можете пройти в например, явные идентификаторы порта нейтронов, или вы можете предоставить информацию об фиксированных 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}]) 

Это должно успешно создать свой сервер.

+0

Можете ли вы указать доступные ключи в параметре nics. если я хочу передать 'port-id', что должно быть ключом в словаре. –

+0

[Используйте источник, Люк!] (Https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/servers.py#L514) – larsks

+0

Спасибо @larsks. То, что я использовал, - 'server = nova.servers.create (name =" api_cir_test ", image = image.id, flavor = flavor.id, nics = [{'net-id': network1.id} {'port-id': port_id}], block_dev_mapping = {'vdb': '8b7e3ab4-18a3-49d6-8f7d-767ca30809c2', 'vdc': '6933e0cd-df22-4bab-b870-9365935956bb'}) ' –

Смежные вопросы