Plumb NetworkRequest objects through conductor and compute RPC
This makes the conductor and compute RPC paths for building instances support and use NetworkRequest objects, which gets this all the way down to the compute managers. Change-Id: Ia45e15896b80ae33533d77719dd23bbdf60a1945
This commit is contained in:
parent
19131dabbf
commit
d678e238b4
|
@ -998,9 +998,6 @@ class API(base.Base):
|
|||
self._record_action_start(context, instance,
|
||||
instance_actions.CREATE)
|
||||
|
||||
if requested_networks is not None:
|
||||
# NOTE(danms): Temporary transition
|
||||
requested_networks = requested_networks.as_tuples()
|
||||
self.compute_task_api.build_instances(context,
|
||||
instances=instances, image=boot_meta,
|
||||
filter_properties=filter_properties,
|
||||
|
|
|
@ -570,7 +570,7 @@ class ComputeVirtAPI(virtapi.VirtAPI):
|
|||
class ComputeManager(manager.Manager):
|
||||
"""Manages the running instances from creation to destruction."""
|
||||
|
||||
target = messaging.Target(version='3.32')
|
||||
target = messaging.Target(version='3.33')
|
||||
|
||||
# How long to wait in seconds before re-issuing a shutdown
|
||||
# signal to a instance during power off. The overall
|
||||
|
@ -1893,6 +1893,14 @@ class ComputeManager(manager.Manager):
|
|||
security_groups=None, block_device_mapping=None,
|
||||
node=None, limits=None):
|
||||
|
||||
# NOTE(danms): Remove this in v4.0 of the RPC API
|
||||
if (requested_networks and
|
||||
not isinstance(requested_networks,
|
||||
objects.NetworkRequestList)):
|
||||
requested_networks = objects.NetworkRequestList(
|
||||
objects=[objects.NetworkRequest.from_tuple(t)
|
||||
for t in requested_networks])
|
||||
|
||||
@utils.synchronized(instance.uuid)
|
||||
def do_build_and_run_instance(context, instance, image, request_spec,
|
||||
filter_properties, admin_password, injected_files,
|
||||
|
@ -1926,6 +1934,9 @@ class ComputeManager(manager.Manager):
|
|||
instance=instance)
|
||||
|
||||
try:
|
||||
# NOTE(danms): Temporary and transitional
|
||||
if requested_networks:
|
||||
requested_networks = requested_networks.as_tuples()
|
||||
self._build_and_run_instance(context, instance, image,
|
||||
decoded_files, admin_password, requested_networks,
|
||||
security_groups, block_device_mapping, node, limits,
|
||||
|
|
|
@ -267,6 +267,7 @@ class ComputeAPI(object):
|
|||
* 3.31 - Add get_instance_diagnostics
|
||||
* 3.32 - Add destroy_disks and migrate_data optional parameters to
|
||||
rollback_live_migration_at_destination()
|
||||
* 3.33 - Make build_and_run_instance() take a NetworkRequestList object
|
||||
|
||||
'''
|
||||
|
||||
|
@ -1039,7 +1040,13 @@ class ComputeAPI(object):
|
|||
filter_properties, admin_password=None, injected_files=None,
|
||||
requested_networks=None, security_groups=None,
|
||||
block_device_mapping=None, node=None, limits=None):
|
||||
cctxt = self.client.prepare(server=host, version='3.23')
|
||||
version = '3.33'
|
||||
if not self.client.can_send_version(version):
|
||||
version = '3.23'
|
||||
if requested_networks is not None:
|
||||
requested_networks = requested_networks.as_tuples()
|
||||
|
||||
cctxt = self.client.prepare(server=host, version=version)
|
||||
cctxt.cast(ctxt, 'build_and_run_instance', instance=instance,
|
||||
image=image, request_spec=request_spec,
|
||||
filter_properties=filter_properties,
|
||||
|
|
|
@ -448,7 +448,7 @@ class ComputeTaskManager(base.Base):
|
|||
may involve coordinating activities on multiple compute nodes.
|
||||
"""
|
||||
|
||||
target = messaging.Target(namespace='compute_task', version='1.8')
|
||||
target = messaging.Target(namespace='compute_task', version='1.9')
|
||||
|
||||
def __init__(self):
|
||||
super(ComputeTaskManager, self).__init__()
|
||||
|
@ -592,6 +592,14 @@ class ComputeTaskManager(base.Base):
|
|||
# 2.0 of the RPC API.
|
||||
request_spec = scheduler_utils.build_request_spec(context, image,
|
||||
instances)
|
||||
# TODO(danms): Remove this in version 2.0 of the RPC API
|
||||
if (requested_networks and
|
||||
not isinstance(requested_networks,
|
||||
objects.NetworkRequestList)):
|
||||
requested_networks = objects.NetworkRequestList(
|
||||
objects=[objects.NetworkRequest.from_tuple(t)
|
||||
for t in requested_networks])
|
||||
|
||||
try:
|
||||
# check retry policy. Rather ugly use of instances[0]...
|
||||
# but if we've exceeded max retries... then we really only
|
||||
|
|
|
@ -365,6 +365,7 @@ class ComputeTaskAPI(object):
|
|||
1.6 - Made migrate_server use instance objects
|
||||
1.7 - Do not send block_device_mapping and legacy_bdm to build_instances
|
||||
1.8 - Add rebuild_instance
|
||||
1.9 - Converted requested_networks to NetworkRequestList object
|
||||
|
||||
"""
|
||||
|
||||
|
@ -405,12 +406,15 @@ class ComputeTaskAPI(object):
|
|||
'requested_networks': requested_networks,
|
||||
'security_groups': security_groups}
|
||||
|
||||
if self.client.can_send_version('1.7'):
|
||||
version = '1.7'
|
||||
else:
|
||||
version = '1.9'
|
||||
if not self.client.can_send_version('1.9'):
|
||||
version = '1.8'
|
||||
kw['requested_networks'] = kw['requested_networks'].as_tuples()
|
||||
if not self.client.can_send_version('1.7'):
|
||||
version = '1.5'
|
||||
kw.update({'block_device_mapping': block_device_mapping,
|
||||
'legacy_bdm': legacy_bdm})
|
||||
|
||||
cctxt = self.client.prepare(version=version)
|
||||
cctxt.cast(context, 'build_instances', **kw)
|
||||
|
||||
|
|
|
@ -862,4 +862,4 @@ class ComputeRpcAPITestCase(test.TestCase):
|
|||
admin_password='passwd', injected_files=None,
|
||||
requested_networks=['network1'], security_groups=None,
|
||||
block_device_mapping=None, node='node', limits=[],
|
||||
version='3.23')
|
||||
version='3.33')
|
||||
|
|
|
@ -1259,7 +1259,7 @@ class _BaseTaskTestCase(object):
|
|||
'limits': []},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping=mox.IgnoreArg(),
|
||||
node='node1', limits=[])
|
||||
|
@ -1285,7 +1285,7 @@ class _BaseTaskTestCase(object):
|
|||
'hosts': [['host2', 'node2']]}},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping=mox.IgnoreArg(),
|
||||
node='node2', limits=[])
|
||||
|
@ -1300,7 +1300,7 @@ class _BaseTaskTestCase(object):
|
|||
filter_properties={},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping='block_device_mapping',
|
||||
legacy_bdm=False)
|
||||
|
@ -1337,7 +1337,7 @@ class _BaseTaskTestCase(object):
|
|||
filter_properties={},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping='block_device_mapping',
|
||||
legacy_bdm=False)
|
||||
|
@ -1929,7 +1929,7 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase):
|
|||
'node2']]}},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping=mox.IsA(objects.BlockDeviceMappingList),
|
||||
node='node2', limits=[])
|
||||
|
@ -1944,7 +1944,7 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase):
|
|||
filter_properties={},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping='block_device_mapping',
|
||||
legacy_bdm=False)
|
||||
|
@ -1980,7 +1980,7 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase):
|
|||
filter_properties={},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping='block_device_mapping',
|
||||
legacy_bdm=False)
|
||||
|
@ -1994,7 +1994,7 @@ class ConductorTaskTestCase(_BaseTaskTestCase, test_compute.BaseTestCase):
|
|||
'node2']]}},
|
||||
admin_password='admin_password',
|
||||
injected_files='injected_files',
|
||||
requested_networks='requested_networks',
|
||||
requested_networks=None,
|
||||
security_groups='security_groups',
|
||||
block_device_mapping=mock.ANY,
|
||||
node='node2', limits=[])
|
||||
|
|
Loading…
Reference in New Issue