summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Smith <danms@us.ibm.com>2013-03-06 09:34:40 -0500
committerDan Smith <danms@us.ibm.com>2013-03-08 13:09:52 -0500
commitfcdd30a5fb99dd272cf29d909c46416f2e5084e1 (patch)
treea36ba261c42e7aa75bf3a8f44ead901d6a3b0ca2
parent86e4587fb36aec74102d58c50d614fc6c006ebd3 (diff)
downloadnova-fcdd30a5fb99dd272cf29d909c46416f2e5084e1.tar.gz
nova-fcdd30a5fb99dd272cf29d909c46416f2e5084e1.tar.xz
nova-fcdd30a5fb99dd272cf29d909c46416f2e5084e1.zip
Remove uses of instance['instance_type'] from nova/network
This is one change in a series aimed at removing the use of instance-linked instance_type objects, in favor of the decoupled type data in system_metadata. See bug 1140119 for more details. Change-Id: I43c9e9b7d560d8803899360bd7142e393b793f3d
-rw-r--r--nova/network/api.py15
-rw-r--r--nova/network/api_deprecated.py13
-rw-r--r--nova/network/quantumv2/api.py4
-rw-r--r--nova/tests/network/test_api.py20
-rw-r--r--nova/tests/network/test_quantumv2.py8
5 files changed, 43 insertions, 17 deletions
diff --git a/nova/network/api.py b/nova/network/api.py
index 4f0a2bffa..21d071357 100644
--- a/nova/network/api.py
+++ b/nova/network/api.py
@@ -258,13 +258,14 @@ class API(base.Base):
# this is called from compute.manager which shouldn't
# have db access so we do it on the other side of the
# rpc.
+ instance_type = instance_types.extract_instance_type(instance)
args = {}
args['vpn'] = vpn
args['requested_networks'] = requested_networks
args['instance_id'] = instance['uuid']
args['project_id'] = instance['project_id']
args['host'] = instance['host']
- args['rxtx_factor'] = instance['instance_type']['rxtx_factor']
+ args['rxtx_factor'] = instance_type['rxtx_factor']
args['macs'] = macs
nw_info = self.network_rpcapi.allocate_for_instance(context, **args)
@@ -307,8 +308,9 @@ class API(base.Base):
def add_fixed_ip_to_instance(self, context, instance, network_id,
conductor_api=None):
"""Adds a fixed ip to instance from specified network."""
+ instance_type = instance_types.extract_instance_type(instance)
args = {'instance_id': instance['uuid'],
- 'rxtx_factor': instance['instance_type']['rxtx_factor'],
+ 'rxtx_factor': instance_type['rxtx_factor'],
'host': instance['host'],
'network_id': network_id}
self.network_rpcapi.add_fixed_ip_to_instance(context, **args)
@@ -319,8 +321,9 @@ class API(base.Base):
conductor_api=None):
"""Removes a fixed ip from instance from specified network."""
+ instance_type = instance_types.extract_instance_type(instance)
args = {'instance_id': instance['uuid'],
- 'rxtx_factor': instance['instance_type']['rxtx_factor'],
+ 'rxtx_factor': instance_type['rxtx_factor'],
'host': instance['host'],
'address': address}
self.network_rpcapi.remove_fixed_ip_from_instance(context, **args)
@@ -480,9 +483,10 @@ class API(base.Base):
@wrap_check_policy
def migrate_instance_start(self, context, instance, migration):
"""Start to migrate the network of an instance."""
+ instance_type = instance_types.extract_instance_type(instance)
args = dict(
instance_uuid=instance['uuid'],
- rxtx_factor=instance['instance_type']['rxtx_factor'],
+ rxtx_factor=instance_type['rxtx_factor'],
project_id=instance['project_id'],
source_compute=migration['source_compute'],
dest_compute=migration['dest_compute'],
@@ -499,9 +503,10 @@ class API(base.Base):
@wrap_check_policy
def migrate_instance_finish(self, context, instance, migration):
"""Finish migrating the network of an instance."""
+ instance_type = instance_types.extract_instance_type(instance)
args = dict(
instance_uuid=instance['uuid'],
- rxtx_factor=instance['instance_type']['rxtx_factor'],
+ rxtx_factor=instance_type['rxtx_factor'],
project_id=instance['project_id'],
source_compute=migration['source_compute'],
dest_compute=migration['dest_compute'],
diff --git a/nova/network/api_deprecated.py b/nova/network/api_deprecated.py
index 1f23d90f7..2a6ea0b47 100644
--- a/nova/network/api_deprecated.py
+++ b/nova/network/api_deprecated.py
@@ -22,6 +22,7 @@ This version of the api is deprecated in Grizzly and will be removed.
It is provided just in case a third party manager is in use.
"""
+from nova.compute import instance_types
from nova.db import base
from nova import exception
from nova.network import api as shiny_api
@@ -185,13 +186,14 @@ class API(base.Base):
NB: macs is ignored by nova-network.
:returns: network info as from get_instance_nw_info() below
"""
+ instance_type = instance_types.extract_instance_type(instance)
args = {}
args['vpn'] = vpn
args['requested_networks'] = requested_networks
args['instance_id'] = instance['uuid']
args['project_id'] = instance['project_id']
args['host'] = instance['host']
- args['rxtx_factor'] = instance['instance_type']['rxtx_factor']
+ args['rxtx_factor'] = instance_type['rxtx_factor']
nw_info = self.network_rpcapi.allocate_for_instance(context, **args)
return network_model.NetworkInfo.hydrate(nw_info)
@@ -257,8 +259,9 @@ class API(base.Base):
def _get_instance_nw_info(self, context, instance):
"""Returns all network info related to an instance."""
+ instance_type = instance_types.extract_instance_type(instance)
args = {'instance_id': instance['uuid'],
- 'rxtx_factor': instance['instance_type']['rxtx_factor'],
+ 'rxtx_factor': instance_type['rxtx_factor'],
'host': instance['host'],
'project_id': instance['project_id']}
nw_info = self.network_rpcapi.get_instance_nw_info(context, **args)
@@ -373,9 +376,10 @@ class API(base.Base):
@wrap_check_policy
def migrate_instance_start(self, context, instance, migration):
"""Start to migrate the network of an instance."""
+ instance_type = instance_types.extract_instance_type(instance)
args = dict(
instance_uuid=instance['uuid'],
- rxtx_factor=instance['instance_type']['rxtx_factor'],
+ rxtx_factor=instance_type['rxtx_factor'],
project_id=instance['project_id'],
source_compute=migration['source_compute'],
dest_compute=migration['dest_compute'],
@@ -392,9 +396,10 @@ class API(base.Base):
@wrap_check_policy
def migrate_instance_finish(self, context, instance, migration):
"""Finish migrating the network of an instance."""
+ instance_type = instance_types.extract_instance_type(instance)
args = dict(
instance_uuid=instance['uuid'],
- rxtx_factor=instance['instance_type']['rxtx_factor'],
+ rxtx_factor=instance_type['rxtx_factor'],
project_id=instance['project_id'],
source_compute=migration['source_compute'],
dest_compute=migration['dest_compute'],
diff --git a/nova/network/quantumv2/api.py b/nova/network/quantumv2/api.py
index 5537048a7..53e22c077 100644
--- a/nova/network/quantumv2/api.py
+++ b/nova/network/quantumv2/api.py
@@ -20,6 +20,7 @@ import time
from oslo.config import cfg
+from nova.compute import instance_types
from nova import conductor
from nova import context
from nova.db import base
@@ -303,7 +304,8 @@ class API(base.Base):
def _populate_quantum_extension_values(self, instance, port_req_body):
self._refresh_quantum_extensions_cache()
if 'nvp-qos' in self.extensions:
- rxtx_factor = instance['instance_type'].get('rxtx_factor')
+ instance_type = instance_types.extract_instance_type(instance)
+ rxtx_factor = instance_type.get('rxtx_factor')
port_req_body['port']['rxtx_factor'] = rxtx_factor
def deallocate_for_instance(self, context, instance, **kwargs):
diff --git a/nova/tests/network/test_api.py b/nova/tests/network/test_api.py
index 2d32d5ad9..7a53dc8d4 100644
--- a/nova/tests/network/test_api.py
+++ b/nova/tests/network/test_api.py
@@ -22,6 +22,7 @@ import random
import mox
+from nova.compute import instance_types
from nova import context
from nova import exception
from nova import network
@@ -30,7 +31,7 @@ from nova.network import floating_ips
from nova.network import rpcapi as network_rpcapi
from nova import policy
from nova import test
-
+from nova import utils
FAKE_UUID = 'a47ae74e-ab08-547f-9eee-ffd23fc46c16'
@@ -80,8 +81,11 @@ class ApiTestCase(test.TestCase):
self.network_api.network_rpcapi.allocate_for_instance(
mox.IgnoreArg(), **kwargs).AndReturn([])
self.mox.ReplayAll()
+ inst_type = instance_types.get_default_instance_type()
+ inst_type['rxtx_factor'] = 0
+ sys_meta = instance_types.save_instance_type_info({}, inst_type)
instance = dict(id='id', uuid='uuid', project_id='project_id',
- host='host', instance_type={'rxtx_factor': 0})
+ host='host', system_metadata=utils.dict_to_metadata(sys_meta))
self.network_api.allocate_for_instance(
self.context, instance, 'vpn', 'requested_networks', macs=macs)
@@ -136,10 +140,14 @@ class ApiTestCase(test.TestCase):
self._do_test_associate_floating_ip(None)
def _stub_migrate_instance_calls(self, method, multi_host, info):
- fake_instance_type = {'rxtx_factor': 'fake_factor'}
+ fake_instance_type = instance_types.get_default_instance_type()
+ fake_instance_type['rxtx_factor'] = 1.21
+ sys_meta = utils.dict_to_metadata(
+ instance_types.save_instance_type_info({}, fake_instance_type))
fake_instance = {'uuid': 'fake_uuid',
- 'instance_type': fake_instance_type,
- 'project_id': 'fake_project_id'}
+ 'instance_type_id': fake_instance_type['id'],
+ 'project_id': 'fake_project_id',
+ 'system_metadata': sys_meta}
fake_migration = {'source_compute': 'fake_compute_source',
'dest_compute': 'fake_compute_dest'}
@@ -162,7 +170,7 @@ class ApiTestCase(test.TestCase):
expected = {'instance_uuid': 'fake_uuid',
'source_compute': 'fake_compute_source',
'dest_compute': 'fake_compute_dest',
- 'rxtx_factor': 'fake_factor',
+ 'rxtx_factor': 1.21,
'project_id': 'fake_project_id',
'floating_addresses': None}
if multi_host:
diff --git a/nova/tests/network/test_quantumv2.py b/nova/tests/network/test_quantumv2.py
index 167b418ad..660123866 100644
--- a/nova/tests/network/test_quantumv2.py
+++ b/nova/tests/network/test_quantumv2.py
@@ -21,12 +21,14 @@ import mox
from oslo.config import cfg
from quantumclient.v2_0 import client
+from nova.compute import instance_types
from nova import context
from nova import exception
from nova.network import model
from nova.network import quantumv2
from nova.network.quantumv2 import api as quantumapi
from nova import test
+from nova import utils
CONF = cfg.CONF
@@ -366,7 +368,11 @@ class TestQuantumv2(test.TestCase):
self.moxed_client.list_extensions().AndReturn(
{'extensions': [{'name': 'nvp-qos'}]})
self.mox.ReplayAll()
- instance = {'instance_type': {'rxtx_factor': 1}}
+ instance_type = instance_types.get_default_instance_type()
+ instance_type['rxtx_factor'] = 1
+ sys_meta = utils.dict_to_metadata(
+ instance_types.save_instance_type_info({}, instance_type))
+ instance = {'system_metadata': sys_meta}
port_req_body = {'port': {}}
api._populate_quantum_extension_values(instance, port_req_body)
self.assertEquals(port_req_body['port']['rxtx_factor'], 1)