Make instance show and index use objects
This makes compute_api return instance objects for its get() and get_all() methods. The necessary changes to nova-api's compute/servers are included, which are pretty minor. Most of the change in this patch is making the tests do the right thing after the switch to objects. Also, make a mostly-unrelated typo fix in obj_to_primitive() which was missed in a previous review. Related to blueprint compute-api-objects Change-Id: I08dddd311f061e3b39df953b1c8f21f778603770
This commit is contained in:
parent
fe0b7be103
commit
2a781f48c2
|
@ -30,7 +30,12 @@ class ServerUsageController(wsgi.Controller):
|
|||
def _extend_server(self, server, instance):
|
||||
for k in ['launched_at', 'terminated_at']:
|
||||
key = "%s:%s" % (Server_usage.alias, k)
|
||||
server[key] = instance[k]
|
||||
# NOTE(danms): Historically, this timestamp has been generated
|
||||
# merely by grabbing str(datetime) of a TZ-naive object. The
|
||||
# only way we can keep that with instance objects is to strip
|
||||
# the tzinfo from the stamp and str() it.
|
||||
server[key] = (instance[k].replace(tzinfo=None)
|
||||
if instance[k] else None)
|
||||
|
||||
@wsgi.extends
|
||||
def show(self, req, resp_obj, id):
|
||||
|
|
|
@ -483,18 +483,6 @@ class Controller(wsgi.Controller):
|
|||
raise exc.HTTPBadRequest(explanation=err.format_message())
|
||||
return servers
|
||||
|
||||
def _add_instance_faults(self, ctxt, instances):
|
||||
faults = self.compute_api.get_instance_faults(ctxt, instances)
|
||||
if faults is not None:
|
||||
for instance in instances:
|
||||
faults_list = faults.get(instance['uuid'], [])
|
||||
try:
|
||||
instance['fault'] = faults_list[0]
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
return instances
|
||||
|
||||
def _get_servers(self, req, is_detail):
|
||||
"""Returns a list of servers, based on any search options specified."""
|
||||
|
||||
|
@ -551,7 +539,8 @@ class Controller(wsgi.Controller):
|
|||
instance_list = self.compute_api.get_all(context,
|
||||
search_opts=search_opts,
|
||||
limit=limit,
|
||||
marker=marker)
|
||||
marker=marker,
|
||||
want_objects=True)
|
||||
except exception.MarkerNotFound:
|
||||
msg = _('marker [%s] not found') % marker
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
@ -561,7 +550,7 @@ class Controller(wsgi.Controller):
|
|||
instance_list = []
|
||||
|
||||
if is_detail:
|
||||
self._add_instance_faults(context, instance_list)
|
||||
instance_list.fill_faults()
|
||||
response = self._view_builder.detail(req, instance_list)
|
||||
else:
|
||||
response = self._view_builder.index(req, instance_list)
|
||||
|
@ -571,7 +560,8 @@ class Controller(wsgi.Controller):
|
|||
def _get_server(self, context, req, instance_uuid):
|
||||
"""Utility function for looking up an instance by uuid."""
|
||||
try:
|
||||
instance = self.compute_api.get(context, instance_uuid)
|
||||
instance = self.compute_api.get(context, instance_uuid,
|
||||
want_objects=True)
|
||||
except exception.NotFound:
|
||||
msg = _("Instance could not be found")
|
||||
raise exc.HTTPNotFound(explanation=msg)
|
||||
|
@ -737,9 +727,9 @@ class Controller(wsgi.Controller):
|
|||
"""Returns server details by server id."""
|
||||
try:
|
||||
context = req.environ['nova.context']
|
||||
instance = self.compute_api.get(context, id)
|
||||
instance = self.compute_api.get(context, id,
|
||||
want_objects=True)
|
||||
req.cache_db_instance(instance)
|
||||
self._add_instance_faults(context, [instance])
|
||||
return self._view_builder.show(req, instance)
|
||||
except exception.NotFound:
|
||||
msg = _("Instance could not be found")
|
||||
|
@ -976,19 +966,17 @@ class Controller(wsgi.Controller):
|
|||
|
||||
if 'accessIPv4' in body['server']:
|
||||
access_ipv4 = body['server']['accessIPv4']
|
||||
if access_ipv4 is None:
|
||||
access_ipv4 = ''
|
||||
if access_ipv4:
|
||||
self._validate_access_ipv4(access_ipv4)
|
||||
update_dict['access_ip_v4'] = access_ipv4.strip()
|
||||
update_dict['access_ip_v4'] = (
|
||||
access_ipv4 and access_ipv4.strip() or None)
|
||||
|
||||
if 'accessIPv6' in body['server']:
|
||||
access_ipv6 = body['server']['accessIPv6']
|
||||
if access_ipv6 is None:
|
||||
access_ipv6 = ''
|
||||
if access_ipv6:
|
||||
self._validate_access_ipv6(access_ipv6)
|
||||
update_dict['access_ip_v6'] = access_ipv6.strip()
|
||||
update_dict['access_ip_v6'] = (
|
||||
access_ipv6 and access_ipv6.strip() or None)
|
||||
|
||||
if 'auto_disk_config' in body['server']:
|
||||
auto_disk_config = strutils.bool_from_string(
|
||||
|
@ -1004,16 +992,19 @@ class Controller(wsgi.Controller):
|
|||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
try:
|
||||
instance = self.compute_api.get(ctxt, id)
|
||||
instance = self.compute_api.get(ctxt, id,
|
||||
want_objects=True)
|
||||
req.cache_db_instance(instance)
|
||||
self.compute_api.update(ctxt, instance, **update_dict)
|
||||
except exception.NotFound:
|
||||
msg = _("Instance could not be found")
|
||||
raise exc.HTTPNotFound(explanation=msg)
|
||||
|
||||
# FIXME(danms): Until compute_api.update() is object-aware,
|
||||
# we need to apply the updates to the instance object so
|
||||
# that views will return the new data
|
||||
instance.update(update_dict)
|
||||
|
||||
self._add_instance_faults(ctxt, [instance])
|
||||
return self._view_builder.show(req, instance)
|
||||
|
||||
@wsgi.response(202)
|
||||
|
@ -1305,7 +1296,6 @@ class Controller(wsgi.Controller):
|
|||
|
||||
instance = self._get_server(context, req, id)
|
||||
|
||||
self._add_instance_faults(context, [instance])
|
||||
view = self._view_builder.show(req, instance)
|
||||
|
||||
# Add on the adminPass attribute since the view doesn't do it
|
||||
|
|
|
@ -23,6 +23,7 @@ from nova.api.openstack.compute.views import addresses as views_addresses
|
|||
from nova.api.openstack.compute.views import flavors as views_flavors
|
||||
from nova.api.openstack.compute.views import images as views_images
|
||||
from nova.compute import flavors
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import log as logging
|
||||
from nova.openstack.common import timeutils
|
||||
from nova import utils
|
||||
|
@ -80,6 +81,8 @@ class ViewBuilder(common.ViewBuilder):
|
|||
|
||||
def show(self, request, instance):
|
||||
"""Detailed view of a single instance."""
|
||||
ip_v4 = instance.get('access_ip_v4')
|
||||
ip_v6 = instance.get('access_ip_v6')
|
||||
server = {
|
||||
"server": {
|
||||
"id": instance["uuid"],
|
||||
|
@ -94,8 +97,8 @@ class ViewBuilder(common.ViewBuilder):
|
|||
"created": timeutils.isotime(instance["created_at"]),
|
||||
"updated": timeutils.isotime(instance["updated_at"]),
|
||||
"addresses": self._get_addresses(request, instance),
|
||||
"accessIPv4": instance.get("access_ip_v4") or "",
|
||||
"accessIPv6": instance.get("access_ip_v6") or "",
|
||||
"accessIPv4": str(ip_v4) if ip_v4 is not None else '',
|
||||
"accessIPv6": str(ip_v6) if ip_v6 is not None else '',
|
||||
"links": self._get_links(request,
|
||||
instance["uuid"],
|
||||
self._collection_name),
|
||||
|
@ -133,7 +136,12 @@ class ViewBuilder(common.ViewBuilder):
|
|||
|
||||
@staticmethod
|
||||
def _get_metadata(instance):
|
||||
return utils.instance_meta(instance)
|
||||
# FIXME(danms): Transitional support for objects
|
||||
metadata = instance.get('metadata')
|
||||
if isinstance(instance, instance_obj.Instance):
|
||||
return metadata or {}
|
||||
else:
|
||||
return utils.instance_meta(instance)
|
||||
|
||||
@staticmethod
|
||||
def _get_vm_state(instance):
|
||||
|
|
|
@ -49,6 +49,8 @@ from nova import network
|
|||
from nova.network.security_group import openstack_driver
|
||||
from nova.network.security_group import security_group_base
|
||||
from nova import notifications
|
||||
from nova.objects import base as obj_base
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import excutils
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova.openstack.common import log as logging
|
||||
|
@ -1430,7 +1432,7 @@ class API(base.Base):
|
|||
"""Get an instance type by instance type id."""
|
||||
return flavors.get_flavor(instance_type_id)
|
||||
|
||||
def get(self, context, instance_id):
|
||||
def get(self, context, instance_id, want_objects=False):
|
||||
"""Get a single instance with the given instance_id."""
|
||||
# NOTE(ameade): we still need to support integer ids for ec2
|
||||
try:
|
||||
|
@ -1445,13 +1447,19 @@ class API(base.Base):
|
|||
|
||||
check_policy(context, 'get', instance)
|
||||
|
||||
inst = dict(instance.iteritems())
|
||||
# NOTE(comstud): Doesn't get returned with iteritems
|
||||
inst['name'] = instance['name']
|
||||
if want_objects:
|
||||
inst = instance_obj.Instance._from_db_object(
|
||||
context, instance_obj.Instance(), instance,
|
||||
expected_attrs=['metadata', 'system_metadata',
|
||||
'security_groups', 'info_cache'])
|
||||
else:
|
||||
inst = dict(instance.iteritems())
|
||||
# NOTE(comstud): Doesn't get returned with iteritems
|
||||
inst['name'] = instance['name']
|
||||
return inst
|
||||
|
||||
def get_all(self, context, search_opts=None, sort_key='created_at',
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None, want_objects=False):
|
||||
"""Get all instances filtered by one of the given parameters.
|
||||
|
||||
If there is no filter and the context is an admin, it will retrieve
|
||||
|
@ -1531,14 +1539,13 @@ class API(base.Base):
|
|||
sort_key, sort_dir,
|
||||
limit=limit,
|
||||
marker=marker)
|
||||
if want_objects:
|
||||
return inst_models
|
||||
|
||||
# Convert the models to dictionaries
|
||||
instances = []
|
||||
for inst_model in inst_models:
|
||||
instance = dict(inst_model.iteritems())
|
||||
# NOTE(comstud): Doesn't get returned by iteritems
|
||||
instance['name'] = inst_model['name']
|
||||
instances.append(instance)
|
||||
instances.append(obj_base.obj_to_primitive(inst_model))
|
||||
|
||||
return instances
|
||||
|
||||
|
@ -1554,9 +1561,11 @@ class API(base.Base):
|
|||
uuids = set([r['instance_uuid'] for r in res])
|
||||
filters['uuid'] = uuids
|
||||
|
||||
return self.db.instance_get_all_by_filters(context, filters,
|
||||
sort_key, sort_dir,
|
||||
limit=limit, marker=marker)
|
||||
fields = ['metadata', 'system_metadata', 'info_cache',
|
||||
'security_groups']
|
||||
return instance_obj.InstanceList.get_by_filters(
|
||||
context, filters=filters, sort_key=sort_key, sort_dir=sort_dir,
|
||||
limit=limit, marker=marker, expected_attrs=fields)
|
||||
|
||||
@wrap_check_policy
|
||||
@check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.STOPPED])
|
||||
|
|
|
@ -475,7 +475,7 @@ class NovaObjectSerializer(nova.openstack.common.rpc.serializer.Serializer):
|
|||
|
||||
|
||||
def obj_to_primitive(obj):
|
||||
"""Recrusively turn an object into a python primitive.
|
||||
"""Recursively turn an object into a python primitive.
|
||||
|
||||
A NovaObject becomes a dict, and anything that implements ObjectListBase
|
||||
becomes a list.
|
||||
|
|
|
@ -21,6 +21,7 @@ import base64
|
|||
import copy
|
||||
import datetime
|
||||
import functools
|
||||
import iso8601
|
||||
import os
|
||||
import string
|
||||
import tempfile
|
||||
|
@ -871,6 +872,8 @@ class CloudTestCase(test.TestCase):
|
|||
self.stubs.Set(compute_rpcapi.ComputeAPI, 'change_instance_metadata',
|
||||
fake_change_instance_metadata)
|
||||
|
||||
utc = iso8601.iso8601.Utc()
|
||||
|
||||
# Create some test images
|
||||
sys_meta = flavors.save_flavor_info(
|
||||
{}, flavors.get_flavor(1))
|
||||
|
@ -883,7 +886,8 @@ class CloudTestCase(test.TestCase):
|
|||
'vm_state': 'active',
|
||||
'launched_at': timeutils.utcnow(),
|
||||
'hostname': 'server-1111',
|
||||
'created_at': datetime.datetime(2012, 5, 1, 1, 1, 1),
|
||||
'created_at': datetime.datetime(2012, 5, 1, 1, 1, 1,
|
||||
tzinfo=utc),
|
||||
'system_metadata': sys_meta
|
||||
}
|
||||
|
||||
|
@ -895,7 +899,8 @@ class CloudTestCase(test.TestCase):
|
|||
'vm_state': 'active',
|
||||
'launched_at': timeutils.utcnow(),
|
||||
'hostname': 'server-1112',
|
||||
'created_at': datetime.datetime(2012, 5, 1, 1, 1, 2),
|
||||
'created_at': datetime.datetime(2012, 5, 1, 1, 1, 2,
|
||||
tzinfo=utc),
|
||||
'system_metadata': sys_meta
|
||||
}
|
||||
|
||||
|
@ -939,7 +944,8 @@ class CloudTestCase(test.TestCase):
|
|||
'ipAddress': '1.2.3.4',
|
||||
'keyName': 'None (None, host1)',
|
||||
'launchTime':
|
||||
datetime.datetime(2012, 5, 1, 1, 1, 1),
|
||||
datetime.datetime(2012, 5, 1, 1, 1, 1,
|
||||
tzinfo=utc),
|
||||
'placement': {
|
||||
'availabilityZone': 'nova'},
|
||||
'privateDnsName': u'server-1111',
|
||||
|
@ -970,7 +976,8 @@ class CloudTestCase(test.TestCase):
|
|||
'ipAddress': '1.2.3.4',
|
||||
'keyName': u'None (None, host2)',
|
||||
'launchTime':
|
||||
datetime.datetime(2012, 5, 1, 1, 1, 2),
|
||||
datetime.datetime(2012, 5, 1, 1, 1, 2,
|
||||
tzinfo=utc),
|
||||
'placement': {
|
||||
'availabilityZone': 'nova'},
|
||||
'privateDnsName': u'server-1112',
|
||||
|
@ -1056,25 +1063,30 @@ class CloudTestCase(test.TestCase):
|
|||
'system_metadata': sys_meta,
|
||||
}
|
||||
|
||||
utc = iso8601.iso8601.Utc()
|
||||
|
||||
inst1_kwargs = {}
|
||||
inst1_kwargs.update(inst_base)
|
||||
inst1_kwargs['host'] = 'host1'
|
||||
inst1_kwargs['hostname'] = 'server-1111'
|
||||
inst1_kwargs['created_at'] = datetime.datetime(2012, 5, 1, 1, 1, 1)
|
||||
inst1_kwargs['created_at'] = datetime.datetime(2012, 5, 1, 1, 1, 1,
|
||||
tzinfo=utc)
|
||||
inst1 = db.instance_create(self.context, inst1_kwargs)
|
||||
|
||||
inst2_kwargs = {}
|
||||
inst2_kwargs.update(inst_base)
|
||||
inst2_kwargs['host'] = 'host2'
|
||||
inst2_kwargs['hostname'] = 'server-2222'
|
||||
inst2_kwargs['created_at'] = datetime.datetime(2012, 2, 1, 1, 1, 1)
|
||||
inst2_kwargs['created_at'] = datetime.datetime(2012, 2, 1, 1, 1, 1,
|
||||
tzinfo=utc)
|
||||
inst2 = db.instance_create(self.context, inst2_kwargs)
|
||||
|
||||
inst3_kwargs = {}
|
||||
inst3_kwargs.update(inst_base)
|
||||
inst3_kwargs['host'] = 'host3'
|
||||
inst3_kwargs['hostname'] = 'server-3333'
|
||||
inst3_kwargs['created_at'] = datetime.datetime(2012, 2, 5, 1, 1, 1)
|
||||
inst3_kwargs['created_at'] = datetime.datetime(2012, 2, 5, 1, 1, 1,
|
||||
tzinfo=utc)
|
||||
inst3 = db.instance_create(self.context, inst3_kwargs)
|
||||
|
||||
comp1 = db.service_create(self.context, {'host': 'host1',
|
||||
|
|
|
@ -39,6 +39,8 @@ class ConfigDriveTest(test.TestCase):
|
|||
def test_show(self):
|
||||
self.stubs.Set(db, 'instance_get',
|
||||
fakes.fake_instance_get())
|
||||
self.stubs.Set(db, 'instance_get_by_uuid',
|
||||
fakes.fake_instance_get())
|
||||
req = webob.Request.blank('/v2/fake/servers/1')
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
response = req.get_response(fakes.wsgi_app(init_only=('servers',)))
|
||||
|
|
|
@ -363,6 +363,7 @@ class CreateserverextTest(test.TestCase):
|
|||
|
||||
def test_get_server_by_id_verify_security_groups_json(self):
|
||||
self.stubs.Set(db, 'instance_get', fakes.fake_instance_get())
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fakes.fake_instance_get())
|
||||
req = webob.Request.blank('/v2/fake/os-create-server-ext/1')
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
response = req.get_response(fakes.wsgi_app(
|
||||
|
@ -375,6 +376,7 @@ class CreateserverextTest(test.TestCase):
|
|||
|
||||
def test_get_server_by_id_verify_security_groups_xml(self):
|
||||
self.stubs.Set(db, 'instance_get', fakes.fake_instance_get())
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fakes.fake_instance_get())
|
||||
req = webob.Request.blank('/v2/fake/os-create-server-ext/1')
|
||||
req.headers['Accept'] = 'application/xml'
|
||||
response = req.get_response(fakes.wsgi_app(
|
||||
|
|
|
@ -66,7 +66,7 @@ class DiskConfigTestCase(test.TestCase):
|
|||
|
||||
self.stubs.Set(nova.db, 'instance_get', fake_instance_get)
|
||||
|
||||
def fake_instance_get_by_uuid(context, uuid):
|
||||
def fake_instance_get_by_uuid(context, uuid, columns_to_get=None):
|
||||
for instance in FAKE_INSTANCES:
|
||||
if uuid == instance['uuid']:
|
||||
return instance
|
||||
|
|
|
@ -21,6 +21,7 @@ from nova import availability_zones
|
|||
from nova import compute
|
||||
from nova.compute import vm_states
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
@ -55,7 +56,11 @@ def fake_compute_get_all(*args, **kwargs):
|
|||
vm_state=vm_states.ACTIVE)
|
||||
inst2 = fakes.stub_instance(2, uuid=UUID2, host="all-host",
|
||||
vm_state=vm_states.ACTIVE)
|
||||
return [inst1, inst2]
|
||||
db_list = [inst1, inst2]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
def fake_get_host_availability_zone(context, host):
|
||||
|
|
|
@ -19,6 +19,7 @@ import webob
|
|||
from nova.api.openstack.compute.contrib import extended_ips
|
||||
from nova.api.openstack import xmlutil
|
||||
from nova import compute
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
@ -91,10 +92,14 @@ def fake_compute_get(*args, **kwargs):
|
|||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(1, uuid=UUID1, nw_cache=NW_CACHE),
|
||||
fakes.stub_instance(2, uuid=UUID2, nw_cache=NW_CACHE),
|
||||
]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ExtendedIpsTest(test.TestCase):
|
||||
|
|
|
@ -21,6 +21,7 @@ import webob
|
|||
from nova.api.openstack.compute.contrib import extended_ips_mac
|
||||
from nova.api.openstack import xmlutil
|
||||
from nova import compute
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
@ -98,10 +99,14 @@ def fake_compute_get(*args, **kwargs):
|
|||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(1, uuid=UUID1, nw_cache=NW_CACHE),
|
||||
fakes.stub_instance(2, uuid=UUID2, nw_cache=NW_CACHE),
|
||||
]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ExtendedIpsMacTest(test.TestCase):
|
||||
|
|
|
@ -18,26 +18,39 @@ import webob
|
|||
|
||||
from nova.api.openstack.compute.contrib import extended_server_attributes
|
||||
from nova import compute
|
||||
from nova import db
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
||||
from oslo.config import cfg
|
||||
|
||||
|
||||
NAME_FMT = cfg.CONF.instance_name_template
|
||||
UUID1 = '00000000-0000-0000-0000-000000000001'
|
||||
UUID2 = '00000000-0000-0000-0000-000000000002'
|
||||
UUID3 = '00000000-0000-0000-0000-000000000003'
|
||||
|
||||
|
||||
def fake_compute_get(*args, **kwargs):
|
||||
return fakes.stub_instance(1, uuid=UUID3, host="host-fake",
|
||||
node="node-fake")
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj.Instance._from_db_object(
|
||||
args[1], instance_obj.Instance(),
|
||||
fakes.stub_instance(1, uuid=UUID3, host="host-fake",
|
||||
node="node-fake"), fields)
|
||||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(1, uuid=UUID1, host="host-1", node="node-1"),
|
||||
fakes.stub_instance(2, uuid=UUID2, host="host-2", node="node-2")
|
||||
]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ExtendedServerAttributesTest(test.TestCase):
|
||||
|
@ -49,6 +62,7 @@ class ExtendedServerAttributesTest(test.TestCase):
|
|||
fakes.stub_out_nw_api(self.stubs)
|
||||
self.stubs.Set(compute.api.API, 'get', fake_compute_get)
|
||||
self.stubs.Set(compute.api.API, 'get_all', fake_compute_get_all)
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fake_compute_get)
|
||||
self.flags(
|
||||
osapi_compute_extension=[
|
||||
'nova.api.openstack.compute.contrib.select_extensions'],
|
||||
|
@ -81,7 +95,7 @@ class ExtendedServerAttributesTest(test.TestCase):
|
|||
self.assertServerAttributes(self._get_server(res.body),
|
||||
host='host-fake',
|
||||
node='node-fake',
|
||||
instance_name='instance-1')
|
||||
instance_name=NAME_FMT % 1)
|
||||
|
||||
def test_detail(self):
|
||||
url = '/v2/fake/servers/detail'
|
||||
|
@ -92,7 +106,7 @@ class ExtendedServerAttributesTest(test.TestCase):
|
|||
self.assertServerAttributes(server,
|
||||
host='host-%s' % (i + 1),
|
||||
node='node-%s' % (i + 1),
|
||||
instance_name='instance-%s' % (i + 1))
|
||||
instance_name=NAME_FMT % (i + 1))
|
||||
|
||||
def test_no_instance_passthrough_404(self):
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import webob
|
|||
from nova.api.openstack.compute.contrib import extended_status
|
||||
from nova import compute
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
@ -30,17 +31,22 @@ UUID3 = '00000000-0000-0000-0000-000000000003'
|
|||
|
||||
def fake_compute_get(*args, **kwargs):
|
||||
return fakes.stub_instance(1, uuid=UUID3, task_state="kayaking",
|
||||
vm_state="slightly crunchy", power_state="empowered")
|
||||
vm_state="slightly crunchy", power_state=1)
|
||||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(1, uuid=UUID1, task_state="task-1",
|
||||
vm_state="vm-1", power_state="power-1"),
|
||||
vm_state="vm-1", power_state=1),
|
||||
fakes.stub_instance(2, uuid=UUID2, task_state="task-2",
|
||||
vm_state="vm-2", power_state="power-2"),
|
||||
vm_state="vm-2", power_state=2),
|
||||
]
|
||||
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ExtendedStatusTest(test.TestCase):
|
||||
content_type = 'application/json'
|
||||
|
@ -70,7 +76,7 @@ class ExtendedStatusTest(test.TestCase):
|
|||
|
||||
def assertServerStates(self, server, vm_state, power_state, task_state):
|
||||
self.assertEqual(server.get('%svm_state' % self.prefix), vm_state)
|
||||
self.assertEqual(server.get('%spower_state' % self.prefix),
|
||||
self.assertEqual(int(server.get('%spower_state' % self.prefix)),
|
||||
power_state)
|
||||
self.assertEqual(server.get('%stask_state' % self.prefix), task_state)
|
||||
|
||||
|
@ -81,7 +87,7 @@ class ExtendedStatusTest(test.TestCase):
|
|||
self.assertEqual(res.status_int, 200)
|
||||
self.assertServerStates(self._get_server(res.body),
|
||||
vm_state='slightly crunchy',
|
||||
power_state='empowered',
|
||||
power_state=1,
|
||||
task_state='kayaking')
|
||||
|
||||
def test_detail(self):
|
||||
|
@ -92,7 +98,7 @@ class ExtendedStatusTest(test.TestCase):
|
|||
for i, server in enumerate(self._get_servers(res.body)):
|
||||
self.assertServerStates(server,
|
||||
vm_state='vm-%s' % (i + 1),
|
||||
power_state='power-%s' % (i + 1),
|
||||
power_state=(i + 1),
|
||||
task_state='task-%s' % (i + 1))
|
||||
|
||||
def test_no_instance_passthrough_404(self):
|
||||
|
|
|
@ -22,6 +22,7 @@ from nova.api.openstack import wsgi
|
|||
from nova import compute
|
||||
from nova.compute import vm_states
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
@ -106,7 +107,9 @@ class HideServerAddressesTest(test.TestCase):
|
|||
instances = [instance_0, instance_1]
|
||||
|
||||
def get_all(*args, **kwargs):
|
||||
return instances
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(
|
||||
args[1], instance_obj.InstanceList(), instances, fields)
|
||||
|
||||
self.stubs.Set(compute.api.API, 'get_all', get_all)
|
||||
res = self._make_request('/v2/fake/servers/detail')
|
||||
|
|
|
@ -313,6 +313,8 @@ class KeypairsTest(test.TestCase):
|
|||
def test_show_server(self):
|
||||
self.stubs.Set(db, 'instance_get',
|
||||
fakes.fake_instance_get())
|
||||
self.stubs.Set(db, 'instance_get_by_uuid',
|
||||
fakes.fake_instance_get())
|
||||
req = webob.Request.blank('/v2/fake/servers/1')
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
response = req.get_response(fakes.wsgi_app(init_only=('servers',)))
|
||||
|
|
|
@ -27,6 +27,7 @@ from nova import compute
|
|||
from nova.compute import power_state
|
||||
import nova.db
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import quota
|
||||
from nova import test
|
||||
|
@ -1457,15 +1458,26 @@ UUID3 = '00000000-0000-0000-0000-000000000003'
|
|||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
fakes.stub_instance(1, uuid=UUID1,
|
||||
security_groups=[{'name': 'fake-0-0'},
|
||||
{'name': 'fake-0-1'}]),
|
||||
fakes.stub_instance(2, uuid=UUID2,
|
||||
security_groups=[{'name': 'fake-1-0'},
|
||||
{'name': 'fake-1-1'}])
|
||||
base = {'id': 1, 'description': 'foo', 'user_id': 'bar',
|
||||
'project_id': 'baz', 'deleted': False, 'deleted_at': None,
|
||||
'updated_at': None, 'created_at': None}
|
||||
db_list = [
|
||||
fakes.stub_instance(
|
||||
1, uuid=UUID1,
|
||||
security_groups=[dict(base, **{'name': 'fake-0-0'}),
|
||||
dict(base, **{'name': 'fake-0-1'})]),
|
||||
fakes.stub_instance(
|
||||
2, uuid=UUID2,
|
||||
security_groups=[dict(base, **{'name': 'fake-1-0'}),
|
||||
dict(base, **{'name': 'fake-1-1'})])
|
||||
]
|
||||
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list,
|
||||
['metadata', 'system_metadata',
|
||||
'security_groups', 'info_cache'])
|
||||
|
||||
|
||||
def fake_compute_get(*args, **kwargs):
|
||||
return fakes.stub_instance(1, uuid=UUID3,
|
||||
|
|
|
@ -20,6 +20,7 @@ from lxml import etree
|
|||
from nova.api.openstack.compute.contrib import server_usage
|
||||
from nova import compute
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova.openstack.common import timeutils
|
||||
from nova import test
|
||||
|
@ -40,12 +41,16 @@ def fake_compute_get(*args, **kwargs):
|
|||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(2, uuid=UUID1, launched_at=DATE2,
|
||||
terminated_at=DATE3),
|
||||
fakes.stub_instance(3, uuid=UUID2, launched_at=DATE1,
|
||||
terminated_at=DATE3),
|
||||
]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ServerUsageTest(test.TestCase):
|
||||
|
|
|
@ -18,11 +18,17 @@ import webob
|
|||
|
||||
from nova.api.openstack.compute.contrib import extended_server_attributes
|
||||
from nova import compute
|
||||
from nova import db
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
||||
from oslo.config import cfg
|
||||
|
||||
|
||||
NAME_FMT = cfg.CONF.instance_name_template
|
||||
UUID1 = '00000000-0000-0000-0000-000000000001'
|
||||
UUID2 = '00000000-0000-0000-0000-000000000002'
|
||||
UUID3 = '00000000-0000-0000-0000-000000000003'
|
||||
|
@ -34,10 +40,14 @@ def fake_compute_get(*args, **kwargs):
|
|||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(1, uuid=UUID1, host="host-1", node="node-1"),
|
||||
fakes.stub_instance(2, uuid=UUID2, host="host-2", node="node-2")
|
||||
]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ExtendedServerAttributesTest(test.TestCase):
|
||||
|
@ -49,6 +59,7 @@ class ExtendedServerAttributesTest(test.TestCase):
|
|||
fakes.stub_out_nw_api(self.stubs)
|
||||
self.stubs.Set(compute.api.API, 'get', fake_compute_get)
|
||||
self.stubs.Set(compute.api.API, 'get_all', fake_compute_get_all)
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fake_compute_get)
|
||||
self.flags(
|
||||
osapi_compute_extension=[
|
||||
'nova.api.openstack.compute.contrib.select_extensions'],
|
||||
|
@ -92,7 +103,7 @@ class ExtendedServerAttributesTest(test.TestCase):
|
|||
self.assertServerAttributes(server,
|
||||
host='host-%s' % (i + 1),
|
||||
node='node-%s' % (i + 1),
|
||||
instance_name='instance-%s' % (i + 1))
|
||||
instance_name=NAME_FMT % (i + 1))
|
||||
|
||||
def test_no_instance_passthrough_404(self):
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import webob
|
|||
from nova.api.openstack.compute.contrib import extended_status
|
||||
from nova import compute
|
||||
from nova import exception
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
|
@ -30,16 +31,20 @@ UUID3 = '00000000-0000-0000-0000-000000000003'
|
|||
|
||||
def fake_compute_get(*args, **kwargs):
|
||||
return fakes.stub_instance(1, uuid=UUID3, task_state="kayaking",
|
||||
vm_state="slightly crunchy", power_state="empowered")
|
||||
vm_state="slightly crunchy", power_state=1)
|
||||
|
||||
|
||||
def fake_compute_get_all(*args, **kwargs):
|
||||
return [
|
||||
db_list = [
|
||||
fakes.stub_instance(1, uuid=UUID1, task_state="task-1",
|
||||
vm_state="vm-1", power_state="power-1"),
|
||||
vm_state="vm-1", power_state=1),
|
||||
fakes.stub_instance(2, uuid=UUID2, task_state="task-2",
|
||||
vm_state="vm-2", power_state="power-2"),
|
||||
vm_state="vm-2", power_state=2),
|
||||
]
|
||||
fields = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
return instance_obj._make_instance_list(args[1],
|
||||
instance_obj.InstanceList(),
|
||||
db_list, fields)
|
||||
|
||||
|
||||
class ExtendedStatusTest(test.TestCase):
|
||||
|
@ -70,7 +75,7 @@ class ExtendedStatusTest(test.TestCase):
|
|||
|
||||
def assertServerStates(self, server, vm_state, power_state, task_state):
|
||||
self.assertEqual(server.get('%svm_state' % self.prefix), vm_state)
|
||||
self.assertEqual(server.get('%spower_state' % self.prefix),
|
||||
self.assertEqual(int(server.get('%spower_state' % self.prefix)),
|
||||
power_state)
|
||||
self.assertEqual(server.get('%stask_state' % self.prefix), task_state)
|
||||
|
||||
|
@ -81,7 +86,7 @@ class ExtendedStatusTest(test.TestCase):
|
|||
self.assertEqual(res.status_int, 200)
|
||||
self.assertServerStates(self._get_server(res.body),
|
||||
vm_state='slightly crunchy',
|
||||
power_state='empowered',
|
||||
power_state=1,
|
||||
task_state='kayaking')
|
||||
|
||||
def test_detail(self):
|
||||
|
@ -92,7 +97,7 @@ class ExtendedStatusTest(test.TestCase):
|
|||
for i, server in enumerate(self._get_servers(res.body)):
|
||||
self.assertServerStates(server,
|
||||
vm_state='vm-%s' % (i + 1),
|
||||
power_state='power-%s' % (i + 1),
|
||||
power_state=(i + 1),
|
||||
task_state='task-%s' % (i + 1))
|
||||
|
||||
def test_no_instance_passthrough_404(self):
|
||||
|
|
|
@ -687,7 +687,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
@ -703,7 +703,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('image' in search_opts)
|
||||
self.assertEqual(search_opts['image'], '12345')
|
||||
|
@ -719,7 +719,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
self.assertEqual(filters['project_id'], 'fake')
|
||||
self.assertFalse(filters.get('tenant_id'))
|
||||
|
@ -736,7 +737,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_admin_restricted_tenant(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
self.assertEqual(filters['project_id'], 'fake')
|
||||
return [fakes.stub_instance(100)]
|
||||
|
@ -752,7 +754,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_all_tenants_pass_policy(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
self.assertTrue('project_id' not in filters)
|
||||
return [fakes.stub_instance(100)]
|
||||
|
@ -776,7 +779,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_all_tenants_fail_policy(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
return [fakes.stub_instance(100)]
|
||||
|
||||
|
@ -800,7 +804,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('flavor' in search_opts)
|
||||
# flavor is an integer ID
|
||||
|
@ -826,7 +830,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('vm_state' in search_opts)
|
||||
self.assertEqual(search_opts['vm_state'], vm_states.ACTIVE)
|
||||
|
@ -858,7 +862,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertTrue('vm_state' in search_opts)
|
||||
self.assertEqual(search_opts['vm_state'], 'deleted')
|
||||
|
||||
|
@ -878,7 +882,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('name' in search_opts)
|
||||
self.assertEqual(search_opts['name'], 'whee.*')
|
||||
|
@ -897,7 +901,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('changes-since' in search_opts)
|
||||
changes_since = datetime.datetime(2011, 1, 24, 17, 8, 1,
|
||||
|
@ -929,7 +933,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
# Allowed by user
|
||||
self.assertTrue('name' in search_opts)
|
||||
|
@ -958,7 +962,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
# Allowed by user
|
||||
self.assertTrue('name' in search_opts)
|
||||
|
@ -986,7 +990,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('ip' in search_opts)
|
||||
self.assertEqual(search_opts['ip'], '10\..*')
|
||||
|
@ -1008,7 +1012,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, columns_to_join=None):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('ip6' in search_opts)
|
||||
self.assertEqual(search_opts['ip6'], 'ffff.*')
|
||||
|
|
|
@ -30,6 +30,7 @@ from nova.image import glance
|
|||
from nova.openstack.common import importutils
|
||||
from nova import test
|
||||
from nova.tests.api.openstack import fakes
|
||||
from nova.tests import fake_instance
|
||||
from nova.tests.image import fake
|
||||
from nova.tests import matchers
|
||||
from nova.tests import utils
|
||||
|
@ -994,9 +995,9 @@ class ServerActionsControllerTest(test.TestCase):
|
|||
|
||||
def test_locked(self):
|
||||
def fake_locked(context, instance_uuid):
|
||||
return {"name": "foo",
|
||||
"uuid": FAKE_UUID,
|
||||
"locked": True}
|
||||
return fake_instance.fake_db_instance(name="foo",
|
||||
uuid=FAKE_UUID,
|
||||
locked=True)
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fake_locked)
|
||||
body = dict(reboot=dict(type="HARD"))
|
||||
req = fakes.HTTPRequest.blank(self.url)
|
||||
|
|
|
@ -45,6 +45,7 @@ from nova import exception
|
|||
from nova.image import glance
|
||||
from nova.network import manager
|
||||
from nova.network.quantumv2 import api as quantum_api
|
||||
from nova.objects import instance as instance_obj
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova.openstack.common import policy as common_policy
|
||||
from nova.openstack.common import rpc
|
||||
|
@ -70,6 +71,8 @@ XPATH_NS = {
|
|||
|
||||
INSTANCE_IDS = {FAKE_UUID: 1}
|
||||
|
||||
FIELDS = instance_obj.INSTANCE_DEFAULT_FIELDS
|
||||
|
||||
|
||||
def fake_gen_uuid():
|
||||
return FAKE_UUID
|
||||
|
@ -691,8 +694,10 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
limit=None, marker=None, want_objects=False):
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -707,11 +712,13 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('image' in search_opts)
|
||||
self.assertEqual(search_opts['image'], '12345')
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -723,7 +730,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_tenant_id_filter_converts_to_project_id_for_admin(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
self.assertEqual(filters['project_id'], 'fake')
|
||||
self.assertFalse(filters.get('tenant_id'))
|
||||
|
@ -740,7 +748,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_admin_restricted_tenant(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
self.assertEqual(filters['project_id'], 'fake')
|
||||
return [fakes.stub_instance(100)]
|
||||
|
@ -756,7 +765,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_all_tenants_pass_policy(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
self.assertTrue('project_id' not in filters)
|
||||
return [fakes.stub_instance(100)]
|
||||
|
@ -780,7 +790,8 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def test_all_tenants_fail_policy(self):
|
||||
def fake_get_all(context, filters=None, sort_key=None,
|
||||
sort_dir='desc', limit=None, marker=None):
|
||||
sort_dir='desc', limit=None, marker=None,
|
||||
columns_to_join=None):
|
||||
self.assertNotEqual(filters, None)
|
||||
return [fakes.stub_instance(100)]
|
||||
|
||||
|
@ -804,12 +815,14 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('flavor' in search_opts)
|
||||
# flavor is an integer ID
|
||||
self.assertEqual(search_opts['flavor'], '12345')
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -830,11 +843,13 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('vm_state' in search_opts)
|
||||
self.assertEqual(search_opts['vm_state'], vm_states.ACTIVE)
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -862,11 +877,13 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertTrue('vm_state' in search_opts)
|
||||
self.assertEqual(search_opts['vm_state'], 'deleted')
|
||||
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -882,11 +899,13 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('name' in search_opts)
|
||||
self.assertEqual(search_opts['name'], 'whee.*')
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -901,14 +920,16 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('changes-since' in search_opts)
|
||||
changes_since = datetime.datetime(2011, 1, 24, 17, 8, 1,
|
||||
tzinfo=iso8601.iso8601.UTC)
|
||||
self.assertEqual(search_opts['changes-since'], changes_since)
|
||||
self.assertTrue('deleted' not in search_opts)
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -933,7 +954,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
# Allowed by user
|
||||
self.assertTrue('name' in search_opts)
|
||||
|
@ -942,7 +963,9 @@ class ServersControllerTest(test.TestCase):
|
|||
self.assertTrue('vm_state' in search_opts)
|
||||
# Allowed only by admins with admin API on
|
||||
self.assertFalse('unknown_option' in search_opts)
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -962,7 +985,7 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
# Allowed by user
|
||||
self.assertTrue('name' in search_opts)
|
||||
|
@ -971,7 +994,9 @@ class ServersControllerTest(test.TestCase):
|
|||
# Allowed only by admins with admin API on
|
||||
self.assertTrue('ip' in search_opts)
|
||||
self.assertTrue('unknown_option' in search_opts)
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -989,11 +1014,13 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('ip' in search_opts)
|
||||
self.assertEqual(search_opts['ip'], '10\..*')
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -1011,11 +1038,13 @@ class ServersControllerTest(test.TestCase):
|
|||
|
||||
def fake_get_all(compute_self, context, search_opts=None,
|
||||
sort_key=None, sort_dir='desc',
|
||||
limit=None, marker=None):
|
||||
limit=None, marker=None, want_objects=False):
|
||||
self.assertNotEqual(search_opts, None)
|
||||
self.assertTrue('ip6' in search_opts)
|
||||
self.assertEqual(search_opts['ip6'], 'ffff.*')
|
||||
return [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
db_list = [fakes.stub_instance(100, uuid=server_uuid)]
|
||||
return instance_obj._make_instance_list(
|
||||
context, instance_obj.InstanceList(), db_list, FIELDS)
|
||||
|
||||
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
|
||||
|
||||
|
@ -1045,7 +1074,7 @@ class ServersControllerTest(test.TestCase):
|
|||
self.assertEqual(res_dict['server']['id'], FAKE_UUID)
|
||||
self.assertEqual(res_dict['server']['name'], 'server_test')
|
||||
self.assertEqual(res_dict['server']['accessIPv4'], '0.0.0.0')
|
||||
self.assertEqual(res_dict['server']['accessIPv6'], 'beef::0123')
|
||||
self.assertEqual(res_dict['server']['accessIPv6'], 'beef::123')
|
||||
|
||||
def test_update_server_invalid_xml_raises_lookup(self):
|
||||
req = fakes.HTTPRequest.blank('/fake/servers/%s' % FAKE_UUID)
|
||||
|
@ -1167,7 +1196,7 @@ class ServersControllerTest(test.TestCase):
|
|||
res_dict = self.controller.update(req, FAKE_UUID, body)
|
||||
|
||||
self.assertEqual(res_dict['server']['id'], FAKE_UUID)
|
||||
self.assertEqual(res_dict['server']['accessIPv6'], 'beef::0123')
|
||||
self.assertEqual(res_dict['server']['accessIPv6'], 'beef::123')
|
||||
|
||||
def test_update_server_access_ipv6_bad_format(self):
|
||||
self.stubs.Set(db, 'instance_get',
|
||||
|
|
|
@ -404,7 +404,6 @@ def create_info_cache(nw_cache):
|
|||
'ips': [_ip(ip) for ip in pub0]},
|
||||
{'cidr': 'b33f::/64',
|
||||
'ips': [_ip(ip) for ip in pub1]}]}}]
|
||||
return {"info_cache": {"network_info": nw_cache}}
|
||||
|
||||
if not isinstance(nw_cache, basestring):
|
||||
nw_cache = jsonutils.dumps(nw_cache)
|
||||
|
|
Loading…
Reference in New Issue