Implement nova client plugin

This moves the client creation code out of Clients._nova() into
its own client plugin.

Raising nova exceptions has been moved to
heat.tests.v1_1.fakes.fake_exception since it is actually impossible
to directly create a nova exception object which works on both
novaclient 2.17 and (yet to be released) 2.18.
nova.exceptions.from_response is stable across novaclient releases
so all test exceptions are now raised using from_response.

Change-Id: Id68ff32c381c9c8c06f3712736d1888d1d0e8110
This commit is contained in:
Steve Baker 2014-07-04 08:34:39 +12:00
parent 55ab8bdade
commit 9850832da5
34 changed files with 322 additions and 358 deletions

View File

@ -12,7 +12,6 @@
# under the License.
import mock
from novaclient.exceptions import NotFound
from heat.engine import parser
from heat.engine import resource
@ -22,6 +21,7 @@ from heat.tests import utils
from ..resources.nova_flavor import NovaFlavor # noqa
from ..resources.nova_flavor import resource_mapping # noqa
from heat.tests.v1_1 import fakes
flavor_template = {
'heat_template_version': '2013-05-23',
@ -98,5 +98,5 @@ class NovaFlavorTest(HeatTestCase):
self.my_flavor.resource_id = flavor_id
self.flavors.delete.return_value = None
self.assertIsNone(self.my_flavor.handle_delete())
self.flavors.delete.side_effect = NotFound(404, "Not found")
self.flavors.delete.side_effect = fakes.fake_exception()
self.assertIsNone(self.my_flavor.handle_delete())

View File

@ -17,6 +17,7 @@ import mox
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine import resource
@ -77,10 +78,8 @@ class CloudServersTest(HeatTestCase):
def _stub_server_validate(self, server, imageId_input, image_id):
# stub nova validate
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
# stub glance image validate
self._mock_get_image_id_success(imageId_input, image_id)
@ -146,10 +145,6 @@ class CloudServersTest(HeatTestCase):
scheduler.TaskRunner(server.create)()
return server
def _update_test_server(self, return_server, name, exit_code=0):
self.m.StubOutWithMock(cloud_server.CloudServer, "nova")
cloud_server.CloudServer.nova().MultipleTimes().AndReturn(self.fc)
def _mock_metadata_os_distro(self):
image_data = mock.Mock(metadata={'os_distro': 'centos'})
self.fc.images.get = mock.Mock(return_value=image_data)
@ -324,11 +319,11 @@ class CloudServersTest(HeatTestCase):
self.assertEqual('Error: Unknown Managed Cloud automation status: FOO',
str(exc))
@mock.patch.object(clients.OpenStackClients, '_nova')
@mock.patch.object(nova.NovaClientPlugin, '_create')
@mock.patch.object(resource.Resource, 'data_set')
def test_create_store_admin_pass_resource_data(self,
mock_data_set,
mock_nova):
mock_create):
self._mock_metadata_os_distro()
return_server = self.fc.servers.list()[1]
return_server.adminPass = 'autogenerated'
@ -340,7 +335,7 @@ class CloudServersTest(HeatTestCase):
server = cloud_server.CloudServer('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_create.return_value = self.fc
self.fc.servers.create = mock.Mock(return_value=return_server)
self._mock_get_image_id_success('CentOS 5.2', 'image_id')
scheduler.TaskRunner(server.create)()
@ -348,11 +343,11 @@ class CloudServersTest(HeatTestCase):
'autogenerated', redact=True)
self.assertIn(expected_call, mock_data_set.call_args_list)
@mock.patch.object(clients.OpenStackClients, '_nova')
@mock.patch.object(nova.NovaClientPlugin, '_create')
@mock.patch.object(resource.Resource, 'data_set')
def test_create_save_admin_pass_is_false(self,
mock_data_set,
mock_nova):
mock_create):
self._mock_metadata_os_distro()
return_server = self.fc.servers.list()[1]
return_server.adminPass = 'autogenerated'
@ -364,7 +359,7 @@ class CloudServersTest(HeatTestCase):
server = cloud_server.CloudServer('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_create.return_value = self.fc
self.fc.servers.create = mock.Mock(return_value=return_server)
self._mock_get_image_id_success('CentOS 5.2', 'image_id')
scheduler.TaskRunner(server.create)()
@ -372,11 +367,11 @@ class CloudServersTest(HeatTestCase):
mock.ANY, mock.ANY)
self.assertNotIn(expected_call, mock_data_set.call_args_list)
@mock.patch.object(clients.OpenStackClients, '_nova')
@mock.patch.object(nova.NovaClientPlugin, '_create')
@mock.patch.object(resource.Resource, 'data_set')
def test_create_save_admin_pass_defaults_to_false(self,
mock_data_set,
mock_nova):
mock_create):
self._mock_metadata_os_distro()
return_server = self.fc.servers.list()[1]
return_server.adminPass = 'autogenerated'
@ -388,7 +383,7 @@ class CloudServersTest(HeatTestCase):
server = cloud_server.CloudServer('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_create.return_value = self.fc
self.fc.servers.create = mock.Mock(return_value=return_server)
self._mock_get_image_id_success('CentOS 5.2', 'image_id')
scheduler.TaskRunner(server.create)()
@ -396,11 +391,11 @@ class CloudServersTest(HeatTestCase):
mock.ANY, mock.ANY)
self.assertNotIn(expected_call, mock_data_set.call_args_list)
@mock.patch.object(clients.OpenStackClients, '_nova')
@mock.patch.object(nova.NovaClientPlugin, '_create')
@mock.patch.object(resource.Resource, 'data_set')
def test_create_without_adminPass_attribute(self,
mock_data_set,
mock_nova):
mock_create):
self._mock_metadata_os_distro()
return_server = self.fc.servers.list()[1]
stack_name = 'admin_pass_s'
@ -410,7 +405,7 @@ class CloudServersTest(HeatTestCase):
server = cloud_server.CloudServer('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_create.return_value = self.fc
self.fc.servers.create = mock.Mock(return_value=return_server)
self._mock_get_image_id_success('CentOS 5.2', 'image_id')
scheduler.TaskRunner(server.create)()
@ -440,9 +435,9 @@ class CloudServersTest(HeatTestCase):
resource_defns['WebServer'], stack)
self.assertEqual('foo', server.FnGetAtt('admin_pass'))
@mock.patch.object(clients.OpenStackClients, '_nova')
@mock.patch.object(nova.NovaClientPlugin, '_create')
def _test_server_config_drive(self, user_data, config_drive, result,
mock_nova):
mock_create):
return_server = self.fc.servers.list()[1]
stack_name = 'no_user_data'
(tmpl, stack) = self._setup_test_stack(stack_name)
@ -452,7 +447,7 @@ class CloudServersTest(HeatTestCase):
resource_defns = tmpl.resource_definitions(stack)
server = cloud_server.CloudServer('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_create.return_value = self.fc
mock_servers_create = mock.Mock(return_value=return_server)
self.fc.servers.create = mock_servers_create
image_id = mock.ANY

View File

@ -16,8 +16,6 @@ from cinderclient import client as cinderclient
from glanceclient import client as glanceclient
from heatclient import client as heatclient
from neutronclient.v2_0 import client as neutronclient
from novaclient import client as novaclient
from novaclient import shell as novashell
from oslo.config import cfg
from stevedore import extension
from swiftclient import client as swiftclient
@ -101,35 +99,6 @@ class OpenStackClients(object):
'Replace with calls to client("nova")')
return self.client('nova')
def _nova(self):
con = self.context
computeshell = novashell.OpenStackComputeShell()
extensions = computeshell._discover_extensions("1.1")
endpoint_type = self._get_client_option('nova', 'endpoint_type')
args = {
'project_id': con.tenant,
'auth_url': con.auth_url,
'service_type': 'compute',
'username': None,
'api_key': None,
'extensions': extensions,
'endpoint_type': endpoint_type,
'http_log_debug': self._get_client_option('nova',
'http_log_debug'),
'cacert': self._get_client_option('nova', 'ca_file'),
'insecure': self._get_client_option('nova', 'insecure')
}
client = novaclient.Client(1.1, **args)
management_url = self.url_for(service_type='compute',
endpoint_type=endpoint_type)
client.client.auth_token = self.auth_token
client.client.management_url = management_url
return client
def swift(self):
warnings.warn('swift() is deprecated. '
'Replace with calls to client("swift")')

View File

View File

@ -0,0 +1,48 @@
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from novaclient import client as nc
from novaclient import shell as novashell
from heat.engine.clients import client_plugin
class NovaClientPlugin(client_plugin.ClientPlugin):
def _create(self):
computeshell = novashell.OpenStackComputeShell()
extensions = computeshell._discover_extensions("1.1")
endpoint_type = self._get_client_option('nova', 'endpoint_type')
args = {
'project_id': self.context.tenant,
'auth_url': self.context.auth_url,
'service_type': 'compute',
'username': None,
'api_key': None,
'extensions': extensions,
'endpoint_type': endpoint_type,
'http_log_debug': self._get_client_option('nova',
'http_log_debug'),
'cacert': self._get_client_option('nova', 'ca_file'),
'insecure': self._get_client_option('nova', 'insecure')
}
client = nc.Client(1.1, **args)
management_url = self.url_for(service_type='compute',
endpoint_type=endpoint_type)
client.client.auth_token = self.auth_token
client.client.management_url = management_url
return client

View File

@ -11,6 +11,8 @@
# License for the specific language governing permissions and limitations
# under the License.
from novaclient import exceptions as nova_exceptions
from heat.common import exception
from heat.engine import attributes
from heat.engine import clients
@ -79,7 +81,7 @@ class ElasticIp(resource.Resource):
else:
try:
ips = self.nova().floating_ips.get(self.resource_id)
except clients.novaclient.exceptions.NotFound as ex:
except nova_exceptions.NotFound as ex:
LOG.warn(_("Floating IPs not found: %s") % ex)
else:
self.ipaddress = ips.ip
@ -105,7 +107,7 @@ class ElasticIp(resource.Resource):
% self.name)
try:
ips = self.nova().floating_ips.create()
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
with excutils.save_and_reraise_exception():
msg = _("No default floating IP pool configured. "
"Set 'default_floating_pool' in nova.conf.")
@ -128,7 +130,7 @@ class ElasticIp(resource.Resource):
server = self.nova().servers.get(instance_id)
if server:
server.remove_floating_ip(self._ipaddress())
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
"""De-allocate a floating IP."""
@ -143,7 +145,7 @@ class ElasticIp(resource.Resource):
else:
try:
self.nova().floating_ips.delete(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
def FnGetRefId(self):
@ -246,7 +248,7 @@ class ElasticIpAssociation(resource.Resource):
server = self.nova().servers.get(instance_id)
if server:
server.remove_floating_ip(self.properties[self.EIP])
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
elif self.properties[self.ALLOCATION_ID]:
float_id = self.properties[self.ALLOCATION_ID]

View File

@ -12,13 +12,12 @@
# under the License.
import copy
from novaclient import exceptions as nova_exceptions
from oslo.config import cfg
import six
from heat.common import exception
from heat.engine import attributes
from heat.engine import clients
from heat.engine import constraints
from heat.engine import properties
from heat.engine import resource
@ -694,7 +693,7 @@ class Instance(resource.Resource):
nova_utils.refresh_server(server)
if server.status == "DELETED":
break
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
break
self.resource_id_set(None)
@ -717,7 +716,7 @@ class Instance(resource.Resource):
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
self.resource_id_set(None)
return
@ -745,7 +744,7 @@ class Instance(resource.Resource):
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
raise exception.NotFound(_('Failed to find instance %s') %
self.resource_id)
else:
@ -800,7 +799,7 @@ class Instance(resource.Resource):
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
raise exception.NotFound(_('Failed to find instance %s') %
self.resource_id)
else:

View File

@ -11,8 +11,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from novaclient import exceptions as nova_exceptions
from heat.engine import attributes
from heat.engine import clients
from heat.engine import properties
from heat.engine import resource
from heat.openstack.common import excutils
@ -62,7 +63,7 @@ class NovaFloatingIp(resource.Resource):
try:
pool = self.properties.get(self.POOL)
floating_ip = self.nova().floating_ips.create(pool=pool)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
with excutils.save_and_reraise_exception():
if pool is None:
msg = _('Could not allocate floating IP. Probably there '
@ -76,7 +77,7 @@ class NovaFloatingIp(resource.Resource):
if self.resource_id is not None:
try:
self.nova().floating_ips.delete(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
def _resolve_attribute(self, key):
@ -130,7 +131,7 @@ class NovaFloatingIpAssociation(resource.Resource):
fl_ip = self.nova().floating_ips.\
get(self.properties[self.FLOATING_IP])
self.nova().servers.remove_floating_ip(server, fl_ip.ip)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
def handle_update(self, json_snippet, tmpl_diff, prop_diff):

View File

@ -16,17 +16,16 @@ import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import json
from novaclient import exceptions as nova_exceptions
import os
import pkgutil
import string
from novaclient import exceptions as nova_exceptions
from oslo.config import cfg
import six
from six.moves.urllib import parse as urlparse
from heat.common import exception
from heat.engine import clients
from heat.engine import scheduler
from heat.openstack.common.gettextutils import _
from heat.openstack.common import log as logging
@ -52,15 +51,16 @@ def refresh_server(server):
'''
try:
server.get()
except clients.novaclient.exceptions.OverLimit as exc:
except nova_exceptions.OverLimit as exc:
msg = _("Server %(name)s (%(id)s) received an OverLimit "
"response during server.get(): %(exception)s")
LOG.warning(msg % {'name': server.name,
'id': server.id,
'exception': exc})
except clients.novaclient.exceptions.ClientException as exc:
if ((getattr(exc, 'http_status', getattr(exc, 'code', None)) in
(500, 503))):
except nova_exceptions.ClientException as exc:
http_status = (getattr(exc, 'http_status', None) or
getattr(exc, 'code', None))
if http_status in (500, 503):
msg = _('Server "%(name)s" (%(id)s) received the following '
'exception during server.get(): %(exception)s')
LOG.warning(msg % {'name': server.name,
@ -248,7 +248,7 @@ def delete_server(server):
try:
refresh_server(server)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
break
@ -330,7 +330,7 @@ def server_to_ipaddress(client, server):
'''
try:
server = client.servers.get(server)
except clients.novaclient.exceptions.NotFound as ex:
except nova_exceptions.NotFound as ex:
LOG.warn(_('Instance (%(server)s) not found: %(ex)s')
% {'server': server, 'ex': ex})
else:

View File

@ -11,6 +11,9 @@
# License for the specific language governing permissions and limitations
# under the License.
from novaclient import exceptions as nova_exceptions
import six
from heat.common import exception
from heat.engine import clients
from heat.engine import properties
@ -204,8 +207,8 @@ class SecurityGroup(resource.Resource):
i.get(self.RULE_TO_PORT),
i.get(self.RULE_CIDR_IP),
source_group_id)
except clients.novaclient.exceptions.BadRequest as ex:
if ex.message.find('already exists') >= 0:
except nova_exceptions.BadRequest as ex:
if six.text_type(ex).find('already exists') >= 0:
# no worries, the rule is already there
pass
else:
@ -222,13 +225,13 @@ class SecurityGroup(resource.Resource):
if self.resource_id is not None:
try:
sec = self.nova().security_groups.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
else:
for rule in sec.rules:
try:
self.nova().security_group_rules.delete(rule['id'])
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
self.nova().security_groups.delete(self.resource_id)

View File

@ -14,11 +14,11 @@
import copy
import uuid
from novaclient import exceptions as nova_exceptions
from oslo.config import cfg
from heat.common import exception
from heat.engine import attributes
from heat.engine import clients
from heat.engine import constraints
from heat.engine import properties
from heat.engine import resource
@ -626,7 +626,7 @@ class Server(stack_user.StackUser):
self.nova(), self.resource_id) or ''
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound as ex:
except nova_exceptions.NotFound as ex:
LOG.warn(_('Instance (%(server)s) not found: %(ex)s')
% {'server': self.resource_id, 'ex': ex})
return ''
@ -969,7 +969,7 @@ class Server(stack_user.StackUser):
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
pass
else:
delete = scheduler.TaskRunner(nova_utils.delete_server, server)
@ -989,7 +989,7 @@ class Server(stack_user.StackUser):
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
raise exception.NotFound(_('Failed to find server %s') %
self.resource_id)
else:
@ -1034,7 +1034,7 @@ class Server(stack_user.StackUser):
try:
server = self.nova().servers.get(self.resource_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
raise exception.NotFound(_('Failed to find server %s') %
self.resource_id)
else:

View File

@ -12,6 +12,7 @@
# under the License.
import json
from novaclient import exceptions as nova_exceptions
from heat.common import exception
from heat.engine import attributes
@ -362,16 +363,16 @@ class VolumeDetachTask(object):
self.attachment_id)
vol = self.clients.client('cinder').volumes.get(nova_vol.id)
except (clients.cinderclient.exceptions.NotFound,
clients.novaclient.exceptions.BadRequest,
clients.novaclient.exceptions.NotFound):
nova_exceptions.BadRequest,
nova_exceptions.NotFound):
LOG.warning(_('%s - volume not found') % str(self))
return
# detach the volume using volume_attachment
try:
server_api.delete_server_volume(self.server_id, self.attachment_id)
except (clients.novaclient.exceptions.BadRequest,
clients.novaclient.exceptions.NotFound) as e:
except (nova_exceptions.BadRequest,
nova_exceptions.NotFound) as e:
LOG.warning(_('%(res)s - %(err)s') % {'res': str(self),
'err': e})
@ -398,7 +399,7 @@ class VolumeDetachTask(object):
def server_has_attachment(server_id, attachment_id):
try:
server_api.get_server_volume(server_id, attachment_id)
except clients.novaclient.exceptions.NotFound:
except nova_exceptions.NotFound:
return False
return True

View File

@ -21,6 +21,7 @@ from testtools.matchers import MatchesRegex
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import function
from heat.engine.notification import stack as notification
from heat.engine import parser
@ -253,7 +254,6 @@ class AutoScalingGroupTest(HeatTestCase):
"""
self._stub_validate()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(instance.Instance, 'handle_create')
self.m.StubOutWithMock(instance.Instance, 'check_create_complete')
@ -262,7 +262,8 @@ class AutoScalingGroupTest(HeatTestCase):
cookie = object()
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
# for load balancer setup
if setup_lb:
self._stub_lb_create()
@ -289,13 +290,13 @@ class AutoScalingGroupTest(HeatTestCase):
notification.send(mox.IgnoreArg()).MultipleTimes().AndReturn(None)
# for instances in the group
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(instance.Instance, 'handle_create')
self.m.StubOutWithMock(instance.Instance, 'check_create_complete')
self.m.StubOutWithMock(instance.Instance, 'destroy')
if num_reloads_expected_on_updt > 1:
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
cookie = object()
for i in range(num_creates_expected_on_updt):
@ -311,8 +312,6 @@ class AutoScalingGroupTest(HeatTestCase):
"""
Expect update of the instances
"""
self.m.StubOutWithMock(instance.Instance, 'nova')
instance.Instance.nova().MultipleTimes().AndReturn(self.fc)
def activate_status(server):
server.status = 'VERIFY_RESIZE'

View File

@ -12,11 +12,13 @@
# under the License.
import mox
from novaclient import exceptions as nova_exceptions
from testtools import skipIf
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import parser
from heat.engine.resources import eip
from heat.engine import scheduler
@ -149,8 +151,7 @@ class EIPTest(HeatTestCase):
force_networking('nova')
super(EIPTest, self).setUp()
self.fc = fakes.FakeClient()
self.m.StubOutWithMock(eip.ElasticIp, 'nova')
self.m.StubOutWithMock(eip.ElasticIpAssociation, 'nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(self.fc.servers, 'get')
def tearDown(self):
@ -178,7 +179,7 @@ class EIPTest(HeatTestCase):
return rsrc
def test_eip(self):
eip.ElasticIp.nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
self.fc.servers.get('WebServer').AndReturn(self.fc.servers.list()[0])
self.fc.servers.get('WebServer')
@ -205,8 +206,7 @@ class EIPTest(HeatTestCase):
self.m.VerifyAll()
def test_association_eip(self):
eip.ElasticIp.nova().MultipleTimes().AndReturn(self.fc)
eip.ElasticIpAssociation.nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
self.fc.servers.get('WebServer').MultipleTimes() \
.AndReturn(self.fc.servers.list()[0])
@ -238,9 +238,8 @@ class EIPTest(HeatTestCase):
def test_eip_with_exception(self):
self.m.StubOutWithMock(self.fc.floating_ips, 'create')
eip.ElasticIp.nova().MultipleTimes().AndReturn(self.fc)
self.fc.floating_ips.create().AndRaise(
clients.novaclient.exceptions.NotFound('fake_falure'))
nova.NovaClientPlugin._create().AndReturn(self.fc)
self.fc.floating_ips.create().AndRaise(fakes.fake_exception())
self.m.ReplayAll()
t = template_format.parse(eip_template)
@ -251,15 +250,15 @@ class EIPTest(HeatTestCase):
resource_defns[resource_name],
stack)
self.assertRaises(clients.novaclient.exceptions.NotFound,
self.assertRaises(nova_exceptions.NotFound,
rsrc.handle_create)
self.m.VerifyAll()
def test_delete_eip_with_exception(self):
self.m.StubOutWithMock(self.fc.floating_ips, 'delete')
eip.ElasticIp.nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
self.fc.floating_ips.delete(mox.IsA(object)).AndRaise(
clients.novaclient.exceptions.NotFound('fake_falure'))
fakes.fake_exception())
self.fc.servers.get(mox.IsA(object)).AndReturn(False)
self.m.ReplayAll()
@ -282,10 +281,8 @@ class AllocTest(HeatTestCase):
super(AllocTest, self).setUp()
self.fc = fakes.FakeClient()
self.m.StubOutWithMock(eip.ElasticIp, 'nova')
self.m.StubOutWithMock(eip.ElasticIpAssociation, 'nova')
self.m.StubOutWithMock(self.fc.servers, 'get')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(parser.Stack, 'resource_by_refid')
self.m.StubOutWithMock(clients.neutronclient.Client,
'create_floatingip')
@ -468,7 +465,7 @@ class AllocTest(HeatTestCase):
})
def test_neutron_eip(self):
eip.ElasticIp.nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
self.fc.servers.get('WebServer').AndReturn(self.fc.servers.list()[0])
self.fc.servers.get('WebServer')

View File

@ -32,6 +32,7 @@ from heat.common import template_format
from heat.common import urlfetch
from heat.db import api as db_api
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import dependencies
from heat.engine import environment
from heat.engine import parser
@ -215,8 +216,8 @@ def setup_mocks(mocks, stack, mock_image_constraint=True):
fc = fakes.FakeClient()
mocks.StubOutWithMock(instances.Instance, 'nova')
instances.Instance.nova().MultipleTimes().AndReturn(fc)
mocks.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(fc)
mocks.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(fc)
instance = stack['WebServer']
if mock_image_constraint:
setup_mock_for_image_constraint(mocks,
@ -264,7 +265,7 @@ def clean_up_stack(stack, delete_res=True):
instances.Instance.nova().MultipleTimes().AndReturn(fc)
m.StubOutWithMock(fc.client, 'get_servers_9999')
get = fc.client.get_servers_9999
get().AndRaise(service.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes.fake_exception())
m.ReplayAll()
stack.delete()
if delete_res:
@ -417,7 +418,7 @@ class StackCreateTest(HeatTestCase):
self.m.StubOutWithMock(fc.client, 'get_servers_9999')
get = fc.client.get_servers_9999
get().AndRaise(service.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes.fake_exception())
mox.Replay(get)
stack.delete()
@ -1391,7 +1392,7 @@ class StackServiceAuthorizeTest(HeatTestCase):
fc = setup_mocks(self.m, stack)
self.m.StubOutWithMock(fc.client, 'get_servers_9999')
get = fc.client.get_servers_9999
get().AndRaise(service.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes.fake_exception())
self.m.ReplayAll()
stack.store()

View File

@ -21,6 +21,7 @@ from neutronclient.v2_0 import client as neutronclient
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine import resource
@ -114,10 +115,8 @@ class InstancesTest(HeatTestCase):
self._mock_get_image_id_success(image_id or 'CentOS 5.2', 1)
self.m.StubOutWithMock(instance, 'nova')
instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
if stub_create:
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -314,8 +313,8 @@ class InstancesTest(HeatTestCase):
instance = instances.Instance('instance_create_image',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('1', 1)
self.m.ReplayAll()
@ -347,8 +346,7 @@ class InstancesTest(HeatTestCase):
d2['server']['status'] = vm_delete_status
get().AndReturn((200, d2))
else:
get().AndRaise(
instances.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes.fake_exception())
self.m.ReplayAll()

View File

@ -19,6 +19,7 @@ from testtools.matchers import MatchesRegex
from heat.common import exception
from heat.common import template_format
from heat.engine.clients.os import nova
from heat.engine import function
from heat.engine import parser
from heat.engine.resources import image
@ -211,8 +212,8 @@ class InstanceGroupTest(HeatTestCase):
"""
Expect update of the instances
"""
self.m.StubOutWithMock(instance.Instance, 'nova')
instance.Instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(self.fc)
def activate_status(server):
server.status = 'VERIFY_RESIZE'

View File

@ -15,6 +15,7 @@ import uuid
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine.resources import glance_utils
@ -175,10 +176,8 @@ class instancesTest(HeatTestCase):
instance = instances.Instance('%s_name' % name,
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(instance, 'nova')
instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success(image_id, 1)
@ -235,10 +234,8 @@ class instancesTest(HeatTestCase):
self.m.StubOutWithMock(nic, 'neutron')
nic.neutron().MultipleTimes().AndReturn(FakeNeutron())
self.m.StubOutWithMock(instance, 'nova')
instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
# need to resolve the template functions
server_userdata = nova_utils.build_userdata(

View File

@ -21,6 +21,7 @@ from oslo.config import cfg
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import resource
from heat.engine.resources import glance_utils
from heat.engine.resources import instance
@ -104,7 +105,7 @@ class LoadBalancerTest(HeatTestCase):
def setUp(self):
super(LoadBalancerTest, self).setUp()
self.fc = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(self.fc.servers, 'create')
self.m.StubOutWithMock(resource.Resource, 'metadata_set')
self.stub_keystoneclient(username='test_stack.CfnLBUser')
@ -136,7 +137,7 @@ class LoadBalancerTest(HeatTestCase):
utils.PhysName('test_stack', 'LoadBalancer'),
'LB_instance',
limit=instance.Instance.physical_resource_name_limit)
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.fc.servers.create(
flavor=2, image=746, key_name=key_name,
meta=None, nics=None, name=server_name,

View File

@ -18,7 +18,7 @@ from testtools import skipIf
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine.resources.neutron import loadbalancer
from heat.engine.resources.neutron import neutron_utils
from heat.engine import scheduler
@ -955,10 +955,10 @@ class LoadBalancerTest(HeatTestCase):
self.m.StubOutWithMock(neutronclient.Client, 'create_member')
self.m.StubOutWithMock(neutronclient.Client, 'delete_member')
self.stub_keystoneclient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
def create_load_balancer(self):
clients.OpenStackClients._nova().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
neutronclient.Client.create_member({
'member': {
'pool_id': 'pool123', 'protocol_port': 8080,

View File

@ -13,6 +13,7 @@
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine.resources import glance_utils
from heat.engine.resources import instance as instances
from heat.engine.resources import nova_utils
@ -59,8 +60,8 @@ class nokeyTest(HeatTestCase):
instance = instances.Instance('create_instance_name',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(instance, 'nova')
instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(self.fc)
g_cli_mock = self.m.CreateMockAnything()
self.m.StubOutWithMock(clients.OpenStackClients, '_glance')
clients.OpenStackClients._glance().MultipleTimes().AndReturn(

View File

@ -12,19 +12,18 @@
# under the License.
import copy
from novaclient import exceptions as ncli_ex
from novaclient.v1_1 import client as novaclient
import mock
from heat.common import exception as heat_ex
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine.resources.nova_floatingip import NovaFloatingIp
from heat.engine.resources.nova_floatingip import NovaFloatingIpAssociation
from heat.engine import rsrc_defn
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
from heat.tests import utils
from heat.tests.v1_1 import fakes
floating_ip_template = '''
@ -62,8 +61,8 @@ class NovaFloatingIPTest(HeatTestCase):
def setUp(self):
super(NovaFloatingIPTest, self).setUp()
self.novaclient = novaclient.Client('user', 'pass', 'project', 'uri')
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.novaclient = mock.Mock()
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(self.novaclient.floating_ips, 'create')
self.m.StubOutWithMock(self.novaclient.floating_ips, 'get')
self.m.StubOutWithMock(self.novaclient.floating_ips, 'delete')
@ -79,7 +78,7 @@ class NovaFloatingIPTest(HeatTestCase):
return mock
def prepare_floating_ip(self):
clients.OpenStackClients._nova().AndReturn(self.novaclient)
nova.NovaClientPlugin._create().AndReturn(self.novaclient)
self.novaclient.floating_ips.create(pool='public').AndReturn(
self._make_obj(**{
'id': '1',
@ -95,7 +94,7 @@ class NovaFloatingIPTest(HeatTestCase):
return NovaFloatingIp('MyFloatingIP', floating_ip, stack)
def prepare_floating_ip_assoc(self):
clients.OpenStackClients._nova().AndReturn(
nova.NovaClientPlugin._create().AndReturn(
self.novaclient)
self.novaclient.servers.get('67dc62f9-efde-4c8b-94af-013e00f5dc57')
self.novaclient.floating_ips.get('1').AndReturn(
@ -146,7 +145,7 @@ class NovaFloatingIPTest(HeatTestCase):
def test_delete_floating_ip_assoc_successful_if_create_failed(self):
rsrc = self.prepare_floating_ip_assoc()
self.novaclient.servers.add_floating_ip(None, '11.0.0.1').AndRaise(
ncli_ex.BadRequest(400))
fakes.fake_exception(400))
self.m.ReplayAll()

View File

@ -14,9 +14,7 @@
import collections
import copy
from novaclient import exceptions as nova_exceptions
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine.resources import nova_keypair
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
@ -58,8 +56,8 @@ class NovaKeyPairTest(HeatTestCase):
stack = utils.parse_stack(template)
definition = stack.t.resource_definitions(stack)['kp']
kp_res = nova_keypair.KeyPair('kp', definition, stack)
self.m.StubOutWithMock(kp_res, "nova")
kp_res.nova().MultipleTimes().AndReturn(self.fake_nova)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(self.fake_nova)
return kp_res
def _get_mock_kp_for_create(self, key_name, public_key=None,
@ -110,7 +108,7 @@ class NovaKeyPairTest(HeatTestCase):
test_res.resource_id = "key_name"
test_res.state_set(test_res.CREATE, test_res.COMPLETE)
(self.fake_keypairs.delete("key_name")
.AndRaise(nova_exceptions.NotFound(404)))
.AndRaise(fakes.fake_exception()))
self.m.ReplayAll()
scheduler.TaskRunner(test_res.delete)()
self.assertEqual((test_res.DELETE, test_res.COMPLETE), test_res.state)
@ -152,13 +150,13 @@ class KeypairConstraintTest(HeatTestCase):
def test_validation(self):
client = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(client)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(client)
client.keypairs = self.m.CreateMockAnything()
key = collections.namedtuple("Key", ["name"])
key.name = "foo"
client.keypairs.get('bar').AndRaise(nova_exceptions.NotFound(404))
client.keypairs.get('bar').AndRaise(fakes.fake_exception())
client.keypairs.get(key.name).AndReturn(key)
self.m.ReplayAll()

View File

@ -14,12 +14,11 @@
import json
import mock
from novaclient import exceptions as nova_exceptions
from heat.common import template_format
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
from heat.tests import utils
from heat.tests.v1_1 import fakes
sg_template = {
"heat_template_version": "2013-05-23",
@ -101,7 +100,7 @@ class NovaServerGroupTest(HeatTestCase):
def test_sg_delete_not_found(self):
self._create_sg('test')
self.sg_mgr.delete.side_effect = nova_exceptions.NotFound("ahhhhh")
self.sg_mgr.delete.side_effect = fakes.fake_exception()
scheduler.TaskRunner(self.sg.delete)()
self.sg_mgr.delete.assert_called_once_with('test')
self.assertEqual((self.sg.DELETE, self.sg.COMPLETE),

View File

@ -18,9 +18,9 @@ import mock
from novaclient import exceptions as nova_exceptions
from heat.common import exception
from heat.engine import clients
from heat.engine.resources import nova_utils
from heat.tests.common import HeatTestCase
from heat.tests.v1_1 import fakes
class NovaUtilsTests(HeatTestCase):
@ -84,7 +84,7 @@ class NovaUtilsTests(HeatTestCase):
self.nova_client.keypairs.get(
my_key_name).AndReturn(my_key)
self.nova_client.keypairs.get(
'notakey').AndRaise(nova_exceptions.NotFound(404))
'notakey').AndRaise(fakes.fake_exception())
self.m.ReplayAll()
self.assertEqual(my_key, nova_utils.get_keypair(self.nova_client,
my_key_name))
@ -105,16 +105,12 @@ class NovaUtilsRefreshServerTests(HeatTestCase):
def test_overlimit_error(self):
server = mock.Mock()
server.get.side_effect = clients.novaclient.exceptions.OverLimit(
413, "limit reached")
server.get.side_effect = fakes.fake_exception(413)
self.assertIsNone(nova_utils.refresh_server(server))
def test_500_error(self):
server = self.m.CreateMockAnything()
msg = ("ClientException: The server has either erred or is "
"incapable of performing the requested operation.")
server.get().AndRaise(
clients.novaclient.exceptions.ClientException(500, msg))
server.get().AndRaise(fakes.fake_exception(500))
self.m.ReplayAll()
self.assertIsNone(nova_utils.refresh_server(server))
@ -122,10 +118,7 @@ class NovaUtilsRefreshServerTests(HeatTestCase):
def test_503_error(self):
server = self.m.CreateMockAnything()
msg = ("ClientException: The server has either erred or is "
"incapable of performing the requested operation.")
server.get().AndRaise(
clients.novaclient.exceptions.ClientException(503, msg))
server.get().AndRaise(fakes.fake_exception(503))
self.m.ReplayAll()
self.assertIsNone(nova_utils.refresh_server(server))
@ -133,13 +126,10 @@ class NovaUtilsRefreshServerTests(HeatTestCase):
def test_unhandled_exception(self):
server = self.m.CreateMockAnything()
msg = ("ClientException: The server has either erred or is "
"incapable of performing the requested operation.")
server.get().AndRaise(
clients.novaclient.exceptions.ClientException(501, msg))
server.get().AndRaise(fakes.fake_exception(501))
self.m.ReplayAll()
self.assertRaises(clients.novaclient.exceptions.ClientException,
self.assertRaises(nova_exceptions.ClientException,
nova_utils.refresh_server, server)
self.m.VerifyAll()

View File

@ -32,6 +32,7 @@ import heat.engine.cfn.functions
from heat.engine.cfn import functions as cfn_funcs
from heat.engine.cfn import template as cfn_t
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import function
from heat.engine.hot import template as hot_t
@ -466,9 +467,9 @@ Mappings:
snippet = {"Fn::GetAZs": ""}
stack = parser.Stack(self.ctx, 'test_stack',
parser.Template(empty_template))
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
fc = fakes.FakeClient()
clients.OpenStackClients._nova().MultipleTimes().AndReturn(fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(fc)
self.m.ReplayAll()
self.assertEqual(["nova1"], self.resolve(snippet, tmpl, stack))
@ -3281,8 +3282,8 @@ class StackTest(HeatTestCase):
# Mock objects so the query for flavors in server.FlavorConstraint
# works for stack creation
fc = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(fc)
fc.flavors = self.m.CreateMockAnything()
flavor = collections.namedtuple("Flavor", ["id", "name"])

View File

@ -20,7 +20,7 @@ from novaclient.v1_1 import security_groups as nova_sg
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import parser
from heat.engine import scheduler
from heat.tests.common import HeatTestCase
@ -127,7 +127,7 @@ Resources:
def setUp(self):
super(SecurityGroupTest, self).setUp()
self.fc = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.stub_keystoneclient()
self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'create')
self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'delete')
@ -165,7 +165,7 @@ Resources:
def test_security_group_nova(self):
#create script
clients.OpenStackClients._nova().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
nova_sg.SecurityGroupManager.list().AndReturn([NovaSG(
id=1,
name='test',
@ -257,7 +257,7 @@ Resources:
def test_security_group_nova_bad_source_group(self):
#create script
clients.OpenStackClients._nova().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
nova_sg.SecurityGroupManager.list().AndReturn([NovaSG(
id=1,
name='test',
@ -319,9 +319,9 @@ Resources:
stack.delete()
self.m.VerifyAll()
def test_security_group_nova_exception(self):
def test_security_group_client_exception(self):
#create script
clients.OpenStackClients._nova().AndReturn(self.fc)
nova.NovaClientPlugin._create().AndReturn(self.fc)
sg_name = utils.PhysName('test_stack', 'the_sg')
nova_sg.SecurityGroupManager.list().AndReturn([
NovaSG(
@ -340,20 +340,16 @@ Resources:
nova_sgr.SecurityGroupRuleManager.create(
2, 'tcp', '22', '22', '0.0.0.0/0', None).AndRaise(
clients.novaclient.exceptions.BadRequest(
400, 'Rule already exists'))
fakes.fake_exception(400, 'Rule already exists'))
nova_sgr.SecurityGroupRuleManager.create(
2, 'tcp', '80', '80', '0.0.0.0/0', None).AndReturn(
clients.novaclient.exceptions.BadRequest(
400, 'Rule already exists'))
fakes.fake_exception(400, 'Rule already exists'))
nova_sgr.SecurityGroupRuleManager.create(
2, 'tcp', None, None, None, 1).AndReturn(
clients.novaclient.exceptions.BadRequest(
400, 'Rule already exists'))
fakes.fake_exception(400, 'Rule already exists'))
nova_sgr.SecurityGroupRuleManager.create(
2, 'icmp', None, None, None, '1').AndReturn(
clients.novaclient.exceptions.BadRequest(
400, 'Rule already exists'))
fakes.fake_exception(400, 'Rule already exists'))
# delete script
nova_sg.SecurityGroupManager.get(2).AndReturn(NovaSG(
@ -405,17 +401,17 @@ Resources:
}]
))
nova_sgr.SecurityGroupRuleManager.delete(130).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger'))
fakes.fake_exception())
nova_sgr.SecurityGroupRuleManager.delete(131).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger'))
fakes.fake_exception())
nova_sgr.SecurityGroupRuleManager.delete(132).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger'))
fakes.fake_exception())
nova_sgr.SecurityGroupRuleManager.delete(133).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger'))
fakes.fake_exception())
nova_sg.SecurityGroupManager.delete(2).AndReturn(None)
nova_sg.SecurityGroupManager.get(2).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger'))
fakes.fake_exception())
self.m.ReplayAll()
stack = self.create_stack(self.test_template_nova)

View File

@ -17,11 +17,12 @@ import uuid
import mock
import mox
from novaclient import exceptions
from novaclient import exceptions as nova_exceptions
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine import resource
@ -124,10 +125,8 @@ class ServersTest(HeatTestCase):
self._mock_get_image_id_success(image_id or 'CentOS 5.2', 1,
server_rebuild=server_rebuild)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
if stub_create:
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -186,18 +185,16 @@ class ServersTest(HeatTestCase):
def _mock_get_keypair_success(self, keypair_input, keypair):
n_cli_mock = self.m.CreateMockAnything()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(
n_cli_mock)
self.m.StubOutWithMock(nova_utils, 'get_keypair')
nova_utils.get_keypair(n_cli_mock, keypair_input).MultipleTimes().\
AndReturn(keypair)
def _server_validate_mock(self, server):
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
def test_server_create(self):
@ -276,10 +273,8 @@ class ServersTest(HeatTestCase):
disk_config=None, reservation_id=None, files={},
admin_pass=None).AndReturn(return_server)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', image_id)
self.m.ReplayAll()
@ -455,10 +450,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -491,7 +484,7 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(server, 'heat')
self.m.StubOutWithMock(sc.SoftwareConfig, 'get_software_config')
server.heat().AndReturn(None)
@ -499,9 +492,7 @@ class ServersTest(HeatTestCase):
None, '8c813873-f6ee-4809-8eec-959ef39acb55').AndReturn(
'wordpress from config')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -534,7 +525,7 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(server, 'heat')
self.m.StubOutWithMock(sc.SoftwareConfig, 'get_software_config')
server.heat().AndReturn(None)
@ -542,9 +533,7 @@ class ServersTest(HeatTestCase):
None, sc_id).AndRaise(exception.SoftwareConfigMissing(
software_config_id=sc_id))
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -576,12 +565,10 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(server, 'heat')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -641,11 +628,9 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -693,8 +678,8 @@ class ServersTest(HeatTestCase):
self.m.VerifyAll()
@mock.patch.object(clients.OpenStackClients, '_nova')
def test_server_create_default_admin_pass(self, mock_nova):
@mock.patch.object(nova.NovaClientPlugin, '_create')
def test_server_create_default_admin_pass(self, mock_client):
return_server = self.fc.servers.list()[1]
return_server.adminPass = 'autogenerated'
stack_name = 'admin_pass_s'
@ -704,7 +689,7 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_client.return_value = self.fc
self.fc.servers.create = mock.Mock(return_value=return_server)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
@ -719,8 +704,8 @@ class ServersTest(HeatTestCase):
disk_config=None, reservation_id=None,
files={}, admin_pass=None)
@mock.patch.object(clients.OpenStackClients, '_nova')
def test_server_create_custom_admin_pass(self, mock_nova):
@mock.patch.object(nova.NovaClientPlugin, '_create')
def test_server_create_custom_admin_pass(self, mock_client):
return_server = self.fc.servers.list()[1]
return_server.adminPass = 'foo'
stack_name = 'admin_pass_s'
@ -731,7 +716,7 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
mock_nova.return_value = self.fc
mock_client.return_value = self.fc
self.fc.servers.create = mock.Mock(return_value=return_server)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
@ -764,8 +749,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('server_create_image',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('1', 1)
self.m.ReplayAll()
@ -795,8 +780,8 @@ class ServersTest(HeatTestCase):
if mock_nova:
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll()
return server
@ -845,8 +830,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('server_validate_test',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(self.fc)
self.m.StubOutWithMock(image.ImageConstraint, "validate")
image.ImageConstraint.validate(
mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(True)
@ -869,8 +854,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('WebServer',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll()
error = self.assertRaises(exception.StackValidationFailed,
@ -895,8 +880,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('server_validate_with_networks',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -926,10 +911,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('server_validate_net_security_groups',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -954,7 +937,7 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.client, 'get_servers_1234')
get = self.fc.client.get_servers_1234
get().AndReturn(server_get)
get().AndRaise(servers.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes_v1_1.fake_exception())
mox.Replay(get)
self.m.ReplayAll()
@ -974,7 +957,7 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.client, 'get_servers_1234')
get = self.fc.client.get_servers_1234
get().AndRaise(servers.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes_v1_1.fake_exception())
mox.Replay(get)
scheduler.TaskRunner(server.delete)()
@ -1066,10 +1049,8 @@ class ServersTest(HeatTestCase):
self.m.UnsetStubs()
# part two change the metadata (test removing the old key)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll()
new_meta = {'new_key': 'yeah'}
@ -1182,8 +1163,8 @@ class ServersTest(HeatTestCase):
def test_server_update_server_flavor_replace(self):
stack_name = 'update_flvrep'
(tmpl, stack) = self._setup_test_stack(stack_name)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1201,8 +1182,8 @@ class ServersTest(HeatTestCase):
def test_server_update_server_flavor_policy_update(self):
stack_name = 'update_flvpol'
(tmpl, stack) = self._setup_test_stack(stack_name)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1229,8 +1210,8 @@ class ServersTest(HeatTestCase):
server = servers.Server('server_update_image_replace',
resource_defns['WebServer'], stack)
image_id = self.getUniqueString()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(image.ImageConstraint, "validate")
image.ImageConstraint.validate(
mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(True)
@ -1391,7 +1372,7 @@ class ServersTest(HeatTestCase):
server.resource_id = '1234'
self.m.StubOutWithMock(self.fc.client, 'get_servers_1234')
get = self.fc.client.get_servers_1234
get().AndRaise(servers.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes_v1_1.fake_exception())
mox.Replay(get)
self.m.ReplayAll()
@ -1560,7 +1541,7 @@ class ServersTest(HeatTestCase):
# return the SUSPENDED state first (twice, so we sleep)
self.m.StubOutWithMock(self.fc.client, 'get_servers_1234')
get = self.fc.client.get_servers_1234
get().AndRaise(servers.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes_v1_1.fake_exception())
self.m.ReplayAll()
server.state_set(server.SUSPEND, server.COMPLETE)
@ -1649,10 +1630,12 @@ class ServersTest(HeatTestCase):
self.assertEqual([{'net-id': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'}],
server._build_nics([{'network': 'public'}]))
self.assertRaises(exceptions.NoUniqueMatch, server._build_nics,
self.assertRaises(nova_exceptions.NoUniqueMatch,
server._build_nics,
([{'network': 'foo'}]))
self.assertRaises(exceptions.NotFound, server._build_nics,
self.assertRaises(nova_exceptions.NotFound,
server._build_nics,
([{'network': 'bar'}]))
def test_server_without_ip_address(self):
@ -1762,8 +1745,8 @@ class ServersTest(HeatTestCase):
resource_defns = tmpl.resource_definitions(stack)
server = servers.Server('server_create_image_err',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1781,8 +1764,8 @@ class ServersTest(HeatTestCase):
resource_defns = tmpl.resource_definitions(stack)
server = servers.Server('server_create_image_err',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1805,8 +1788,8 @@ class ServersTest(HeatTestCase):
resource_defns = tmpl.resource_definitions(stack)
server = servers.Server('server_create_image_err',
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll()
ex = self.assertRaises(exception.StackValidationFailed,
@ -1832,10 +1815,8 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.limits, 'get')
self.fc.limits.get().MultipleTimes().AndReturn(self.limits)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1861,8 +1842,8 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
self.assertIsNone(server.validate())
@ -1886,10 +1867,8 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.limits, 'get')
self.fc.limits.get().MultipleTimes().AndReturn(self.limits)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1916,10 +1895,8 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.limits, 'get')
self.fc.limits.get().MultipleTimes().AndReturn(self.limits)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1939,10 +1916,8 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.limits, 'get')
self.fc.limits.get().MultipleTimes().AndReturn(self.limits)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1962,10 +1937,8 @@ class ServersTest(HeatTestCase):
self.m.StubOutWithMock(self.fc.limits, 'get')
self.fc.limits.get().MultipleTimes().AndReturn(self.limits)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
self.m.ReplayAll()
@ -1984,7 +1957,7 @@ class ServersTest(HeatTestCase):
server.resource_id = '1234'
self.m.StubOutWithMock(self.fc.client, 'get_servers_1234')
get = self.fc.client.get_servers_1234
get().AndRaise(servers.clients.novaclient.exceptions.NotFound(404))
get().AndRaise(fakes_v1_1.fake_exception())
mox.Replay(get)
self.m.ReplayAll()
@ -2030,10 +2003,8 @@ class ServersTest(HeatTestCase):
block_device_mapping=None, config_drive=None,
disk_config=None, reservation_id=None, files={},
admin_pass=None).AndReturn(return_server)
self.m.StubOutWithMock(server, 'nova')
server.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', image_id)
self.m.StubOutWithMock(nova_utils, 'build_userdata')
nova_utils.build_userdata(server,
@ -2536,8 +2507,8 @@ class FlavorConstraintTest(HeatTestCase):
def test_validate(self):
client = fakes.FakeClient()
self.stub_keystoneclient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(client)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(client)
client.flavors = self.m.CreateMockAnything()
flavor = collections.namedtuple("Flavor", ["id", "name"])

View File

@ -18,6 +18,7 @@ import mox
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine.resources import glance_utils
@ -152,10 +153,8 @@ class ServerTagsTest(HeatTestCase):
instance = instances.Instance(stack_name,
resource_defns['WebServer'], stack)
self.m.StubOutWithMock(instance, 'nova')
instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('CentOS 5.2', 1)
# need to resolve the template functions
server_userdata = nova_utils.build_userdata(
@ -205,11 +204,9 @@ class ServerTagsTest(HeatTestCase):
new_tags = [{'Key': 'Food', 'Value': 'yuk'}]
new_metadata = dict((tm['Key'], tm['Value']) for tm in new_tags)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(instance, 'nova')
instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(self.fc.servers, 'set_meta')
self.fc.servers.set_meta(self.fc.servers.list()[1],
new_metadata).AndReturn(None)
@ -242,10 +239,8 @@ class ServerTagsTest(HeatTestCase):
nova_tags['metering.groupname'] = utils.PhysName(stack.name,
group.name)
self.m.StubOutWithMock(instances.Instance, 'nova')
instances.Instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('CentOS 5.2', 1)
# need to resolve the template functions
self.m.StubOutWithMock(self.fc.servers, 'create')
@ -293,10 +288,8 @@ class ServerTagsTest(HeatTestCase):
self.m.StubOutWithMock(group, '_cooldown_timestamp')
group._cooldown_timestamp(mox.IgnoreArg()).AndReturn(None)
self.m.StubOutWithMock(instances.Instance, 'nova')
instances.Instance.nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('CentOS 5.2', 1)
# need to resolve the template functions
self.m.StubOutWithMock(self.fc.servers, 'create')

View File

@ -26,7 +26,7 @@ from heat.common import exception
from heat.common import template_format
from heat.db.sqlalchemy import api as db_api
from heat.engine import clients
from heat.engine.clients import novaclient
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine.resource import Resource
@ -121,8 +121,8 @@ class SqlAlchemyTest(HeatTestCase):
fc = fakes.FakeClient()
mocks.StubOutWithMock(instances.Instance, 'nova')
instances.Instance.nova().MultipleTimes().AndReturn(fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('F17-x86_64-gold', 744)
mocks.StubOutWithMock(fc.servers, 'create')
@ -141,7 +141,7 @@ class SqlAlchemyTest(HeatTestCase):
instances.Instance.nova().MultipleTimes().AndReturn(fc)
mocks.StubOutWithMock(fc.client, 'get_servers_9999')
get = fc.client.get_servers_9999
get().MultipleTimes().AndRaise(novaclient.exceptions.NotFound(404))
get().MultipleTimes().AndRaise(fakes.fake_exception())
@mock.patch.object(db_api, '_paginate_query')
def test_filter_and_page_query_paginates_query(self, mock_paginate_query):

View File

@ -18,6 +18,7 @@ from testtools import skipIf
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine.hot.template import HOTemplate
from heat.engine import parser
@ -1267,8 +1268,8 @@ class validateTest(HeatTestCase):
self._mock_get_image_id_success('image_name', 'image_id')
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll()
resource = stack['Instance']
@ -1284,8 +1285,8 @@ class validateTest(HeatTestCase):
self._mock_get_image_id_success('image_name', 'image_id')
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll()
resource = stack['Instance']

View File

@ -22,6 +22,7 @@ from testtools import skipIf
from heat.common import exception
from heat.common import template_format
from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine.resources import glance_utils
from heat.engine.resources import image
from heat.engine.resources import instance
@ -101,7 +102,7 @@ class VolumeTest(HeatTestCase):
self.fc = fakes.FakeClient()
self.cinder_fc = cinderclient.Client('username', 'password')
self.m.StubOutWithMock(clients.OpenStackClients, '_cinder')
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.m.StubOutWithMock(self.cinder_fc.volumes, 'create')
self.m.StubOutWithMock(self.cinder_fc.volumes, 'get')
self.m.StubOutWithMock(self.cinder_fc.volumes, 'delete')
@ -168,7 +169,7 @@ class VolumeTest(HeatTestCase):
device=u'/dev/vdc',
update=False):
if not update:
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.fc.volumes.create_server_volume(
device=device, server_id=server, volume_id=volume).AndReturn(fva)
self.cinder_fc.volumes.get(volume).AndReturn(fva)
@ -211,7 +212,7 @@ class VolumeTest(HeatTestCase):
stack_name = 'test_volume_stack'
# create script
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(instance.Instance, 'handle_create')
self.m.StubOutWithMock(instance.Instance, 'check_create_complete')
self.m.StubOutWithMock(vol.VolumeAttachment, 'handle_create')
@ -333,8 +334,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
self.m.ReplayAll()
@ -367,14 +367,12 @@ class VolumeTest(HeatTestCase):
self.cinder_fc.volumes.get(fva.id).AndReturn(fva)
self.fc.volumes.delete_server_volume(
'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.BadRequest('Already detached'))
'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception(400))
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
self.m.ReplayAll()
t = template_format.parse(volume_template)
@ -437,8 +435,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
self.m.ReplayAll()
@ -527,8 +524,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
# attach script
self._mock_create_server_volume_script(fva2, device=u'/dev/vdd',
@ -588,8 +584,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
# attach script
self._mock_create_server_volume_script(fv2a, volume='vol-456',
@ -647,8 +642,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
# attach script
self._mock_create_server_volume_script(fva2, server=u'WikiDatabase2',
@ -1040,8 +1034,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fva)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
self.m.ReplayAll()
@ -1222,8 +1215,7 @@ class VolumeTest(HeatTestCase):
self.fc.volumes.get_server_volume(u'WikiDatabase',
'vol-123').AndReturn(fvd)
self.fc.volumes.get_server_volume(
u'WikiDatabase', 'vol-123').AndRaise(
clients.novaclient.exceptions.NotFound('NotFound'))
u'WikiDatabase', 'vol-123').AndRaise(fakes.fake_exception())
# resize script
fvr = FakeLatencyVolume(life_cycle=('extending', 'extending',

View File

@ -15,6 +15,7 @@
# limitations under the License.
import httplib2
import mock
from novaclient import client as base_client
from novaclient import exceptions as nova_exceptions
@ -24,6 +25,14 @@ from six.moves.urllib import parse as urlparse
from heat.tests import fakes
def fake_exception(status_code=404, message=None, details=None):
resp = mock.Mock()
resp.status_code = status_code
resp.headers = None
body = {'error': {'message': message, 'details': details}}
return nova_exceptions.from_response(resp, body, None)
class FakeClient(fakes.FakeClient, client.Client):
def __init__(self, *args, **kwargs):
@ -372,7 +381,7 @@ class FakeHTTPClient(base_client.HTTPClient):
'public_key': 'foo'}})
def get_os_keypairs_test2(self, *kw):
raise nova_exceptions.NotFound(404)
raise fake_exception()
def get_os_availability_zone(self, *kw):
return (200, {"availabilityZoneInfo": [{'zoneName': 'nova1'}]})

View File

@ -37,6 +37,9 @@ oslo.config.opts =
heat.common.config = heat.common.config:list_opts
heat.common.wsgi = heat.common.wsgi:list_opts
heat.clients =
nova = heat.engine.clients.os.nova:NovaClientPlugin
heat.constraints =
nova.flavor = heat.engine.resources.server:FlavorConstraint
neutron.network = heat.engine.resources.neutron.net:NetworkConstraint
@ -44,7 +47,6 @@ heat.constraints =
iso_8601 = heat.engine.resources.iso_8601:ISO8601Constraint
nova.keypair = heat.engine.resources.nova_keypair:KeypairConstraint
heat.templates =
heat_template_version.2013-05-23 = heat.engine.hot.template:HOTemplate
HeatTemplateFormatVersion.2012-12-12 = heat.engine.cfn.template:CfnTemplate