Remove metadata's network-api dependence on the database
This makes the metadata server use instance.info_cache for getting
an instance's info cache instead of going direct to the network-api
(and thus, the database) for it. It also converts the network-api
implementation of get_fixed_ip_by_address() to use and return an
object. Since that translates to the same DB call in the end, none
of the network tests need to change.
Conflicts:
nova/tests/network/test_api.py
Change-Id: Iab444b1669628604f7d96d9550eb684645c554cb
Closes-bug: #1306009
(cherry picked from commit 20d0cef993
)
This commit is contained in:
parent
61e060e2b4
commit
395ec823a5
@ -116,9 +116,12 @@ class InstanceMetadata():
|
||||
|
||||
# NOTE(danms): This should be removed after bp:compute-manager-objects
|
||||
if not isinstance(instance, instance_obj.Instance):
|
||||
expected = ['metadata', 'system_metadata']
|
||||
if 'info_cache' in instance:
|
||||
expected.append('info_cache')
|
||||
instance = instance_obj.Instance._from_db_object(
|
||||
ctxt, instance_obj.Instance(), instance,
|
||||
expected_attrs=['metadata', 'system_metadata'])
|
||||
expected_attrs=expected)
|
||||
|
||||
self.instance = instance
|
||||
self.extra_md = extra_md
|
||||
@ -158,8 +161,7 @@ class InstanceMetadata():
|
||||
|
||||
# get network info, and the rendered network template
|
||||
if network_info is None:
|
||||
network_info = network.API().get_instance_nw_info(ctxt,
|
||||
instance)
|
||||
network_info = instance.info_cache.network_info
|
||||
|
||||
self.ip_info = \
|
||||
ec2utils.get_ip_info_for_instance_from_nw_info(network_info)
|
||||
|
@ -25,6 +25,7 @@ from nova import exception
|
||||
from nova.network import floating_ips
|
||||
from nova.network import model as network_model
|
||||
from nova.network import rpcapi as network_rpcapi
|
||||
from nova.objects import fixed_ip as fixed_ip_obj
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.objects import instance_info_cache as info_cache_obj
|
||||
from nova.openstack.common import excutils
|
||||
@ -157,7 +158,7 @@ class API(base.Base):
|
||||
|
||||
@wrap_check_policy
|
||||
def get_fixed_ip_by_address(self, context, address):
|
||||
return self.db.fixed_ip_get_by_address(context, address)
|
||||
return fixed_ip_obj.FixedIP.get_by_address(context, address)
|
||||
|
||||
@wrap_check_policy
|
||||
def get_floating_ip(self, context, id):
|
||||
|
@ -18,6 +18,7 @@
|
||||
import itertools
|
||||
import random
|
||||
|
||||
import mock
|
||||
import mox
|
||||
|
||||
from nova.compute import flavors
|
||||
@ -29,8 +30,10 @@ from nova.network import api
|
||||
from nova.network import floating_ips
|
||||
from nova.network import model as network_model
|
||||
from nova.network import rpcapi as network_rpcapi
|
||||
from nova.objects import fixed_ip as fixed_ip_obj
|
||||
from nova import policy
|
||||
from nova import test
|
||||
from nova.tests.objects import test_fixed_ip
|
||||
from nova import utils
|
||||
|
||||
FAKE_UUID = 'a47ae74e-ab08-547f-9eee-ffd23fc46c16'
|
||||
@ -286,6 +289,13 @@ class ApiTestCase(test.TestCase):
|
||||
|
||||
self.network_api.associate(self.context, FAKE_UUID, project=None)
|
||||
|
||||
@mock.patch('nova.db.fixed_ip_get_by_address')
|
||||
def test_get_fixed_ip_by_address(self, fip_get):
|
||||
fip_get.return_value = test_fixed_ip.fake_fixed_ip
|
||||
fip = self.network_api.get_fixed_ip_by_address(self.context,
|
||||
'fake-addr')
|
||||
self.assertIsInstance(fip, fixed_ip_obj.FixedIP)
|
||||
|
||||
|
||||
class TestUpdateInstanceCache(test.TestCase):
|
||||
def setUp(self):
|
||||
|
@ -27,7 +27,6 @@ try:
|
||||
except ImportError:
|
||||
import pickle
|
||||
|
||||
import mox
|
||||
from oslo.config import cfg
|
||||
import webob
|
||||
|
||||
@ -47,6 +46,7 @@ from nova import test
|
||||
from nova.tests import fake_block_device
|
||||
from nova.tests import fake_instance
|
||||
from nova.tests import fake_network
|
||||
from nova.tests.objects import test_instance_info_cache
|
||||
from nova.tests.objects import test_security_group
|
||||
from nova.virt import netutils
|
||||
|
||||
@ -71,7 +71,7 @@ INSTANCE = fake_instance.fake_db_instance(**
|
||||
'vcpus': 1,
|
||||
'fixed_ips': [],
|
||||
'root_device_name': '/dev/sda1',
|
||||
'info_cache': {'network_info': []},
|
||||
'info_cache': test_instance_info_cache.fake_info_cache,
|
||||
'hostname': 'test.novadomain',
|
||||
'display_name': 'my_displayname',
|
||||
'metadata': {},
|
||||
@ -82,7 +82,8 @@ INSTANCE = fake_instance.fake_db_instance(**
|
||||
def fake_inst_obj(context):
|
||||
return instance_obj.Instance._from_db_object(
|
||||
context, instance_obj.Instance(), INSTANCE,
|
||||
expected_attrs=['metadata', 'system_metadata'])
|
||||
expected_attrs=['metadata', 'system_metadata',
|
||||
'info_cache'])
|
||||
|
||||
|
||||
def get_default_sys_meta():
|
||||
@ -310,12 +311,6 @@ class MetadataTestCase(test.TestCase):
|
||||
def test_InstanceMetadata_queries_network_API_when_needed(self):
|
||||
network_info_from_api = []
|
||||
|
||||
self.mox.StubOutWithMock(network_api.API, "get_instance_nw_info")
|
||||
|
||||
network_api.API.get_instance_nw_info(
|
||||
mox.IgnoreArg(),
|
||||
mox.IgnoreArg()).AndReturn(network_info_from_api)
|
||||
|
||||
self.mox.StubOutWithMock(netutils, "get_injected_network_template")
|
||||
|
||||
netutils.get_injected_network_template(
|
||||
|
Loading…
Reference in New Issue
Block a user