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. # under the License.
import mock import mock
from novaclient.exceptions import NotFound
from heat.engine import parser from heat.engine import parser
from heat.engine import resource 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 NovaFlavor # noqa
from ..resources.nova_flavor import resource_mapping # noqa from ..resources.nova_flavor import resource_mapping # noqa
from heat.tests.v1_1 import fakes
flavor_template = { flavor_template = {
'heat_template_version': '2013-05-23', 'heat_template_version': '2013-05-23',
@@ -98,5 +98,5 @@ class NovaFlavorTest(HeatTestCase):
self.my_flavor.resource_id = flavor_id self.my_flavor.resource_id = flavor_id
self.flavors.delete.return_value = None self.flavors.delete.return_value = None
self.assertIsNone(self.my_flavor.handle_delete()) 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()) self.assertIsNone(self.my_flavor.handle_delete())

View File

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

View File

@@ -16,8 +16,6 @@ from cinderclient import client as cinderclient
from glanceclient import client as glanceclient from glanceclient import client as glanceclient
from heatclient import client as heatclient from heatclient import client as heatclient
from neutronclient.v2_0 import client as neutronclient 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 oslo.config import cfg
from stevedore import extension from stevedore import extension
from swiftclient import client as swiftclient from swiftclient import client as swiftclient
@@ -101,35 +99,6 @@ class OpenStackClients(object):
'Replace with calls to client("nova")') 'Replace with calls to client("nova")')
return self.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): def swift(self):
warnings.warn('swift() is deprecated. ' warnings.warn('swift() is deprecated. '
'Replace with calls to client("swift")') '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 # License for the specific language governing permissions and limitations
# under the License. # under the License.
from novaclient import exceptions as nova_exceptions
from heat.common import exception from heat.common import exception
from heat.engine import attributes from heat.engine import attributes
from heat.engine import clients from heat.engine import clients
@@ -79,7 +81,7 @@ class ElasticIp(resource.Resource):
else: else:
try: try:
ips = self.nova().floating_ips.get(self.resource_id) 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) LOG.warn(_("Floating IPs not found: %s") % ex)
else: else:
self.ipaddress = ips.ip self.ipaddress = ips.ip
@@ -105,7 +107,7 @@ class ElasticIp(resource.Resource):
% self.name) % self.name)
try: try:
ips = self.nova().floating_ips.create() ips = self.nova().floating_ips.create()
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
with excutils.save_and_reraise_exception(): with excutils.save_and_reraise_exception():
msg = _("No default floating IP pool configured. " msg = _("No default floating IP pool configured. "
"Set 'default_floating_pool' in nova.conf.") "Set 'default_floating_pool' in nova.conf.")
@@ -128,7 +130,7 @@ class ElasticIp(resource.Resource):
server = self.nova().servers.get(instance_id) server = self.nova().servers.get(instance_id)
if server: if server:
server.remove_floating_ip(self._ipaddress()) server.remove_floating_ip(self._ipaddress())
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
pass pass
"""De-allocate a floating IP.""" """De-allocate a floating IP."""
@@ -143,7 +145,7 @@ class ElasticIp(resource.Resource):
else: else:
try: try:
self.nova().floating_ips.delete(self.resource_id) self.nova().floating_ips.delete(self.resource_id)
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
pass pass
def FnGetRefId(self): def FnGetRefId(self):
@@ -246,7 +248,7 @@ class ElasticIpAssociation(resource.Resource):
server = self.nova().servers.get(instance_id) server = self.nova().servers.get(instance_id)
if server: if server:
server.remove_floating_ip(self.properties[self.EIP]) server.remove_floating_ip(self.properties[self.EIP])
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
pass pass
elif self.properties[self.ALLOCATION_ID]: elif self.properties[self.ALLOCATION_ID]:
float_id = self.properties[self.ALLOCATION_ID] float_id = self.properties[self.ALLOCATION_ID]

View File

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

View File

@@ -11,8 +11,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from novaclient import exceptions as nova_exceptions
from heat.engine import attributes from heat.engine import attributes
from heat.engine import clients
from heat.engine import properties from heat.engine import properties
from heat.engine import resource from heat.engine import resource
from heat.openstack.common import excutils from heat.openstack.common import excutils
@@ -62,7 +63,7 @@ class NovaFloatingIp(resource.Resource):
try: try:
pool = self.properties.get(self.POOL) pool = self.properties.get(self.POOL)
floating_ip = self.nova().floating_ips.create(pool=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(): with excutils.save_and_reraise_exception():
if pool is None: if pool is None:
msg = _('Could not allocate floating IP. Probably there ' msg = _('Could not allocate floating IP. Probably there '
@@ -76,7 +77,7 @@ class NovaFloatingIp(resource.Resource):
if self.resource_id is not None: if self.resource_id is not None:
try: try:
self.nova().floating_ips.delete(self.resource_id) self.nova().floating_ips.delete(self.resource_id)
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
pass pass
def _resolve_attribute(self, key): def _resolve_attribute(self, key):
@@ -130,7 +131,7 @@ class NovaFloatingIpAssociation(resource.Resource):
fl_ip = self.nova().floating_ips.\ fl_ip = self.nova().floating_ips.\
get(self.properties[self.FLOATING_IP]) get(self.properties[self.FLOATING_IP])
self.nova().servers.remove_floating_ip(server, fl_ip.ip) self.nova().servers.remove_floating_ip(server, fl_ip.ip)
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
pass pass
def handle_update(self, json_snippet, tmpl_diff, prop_diff): 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.multipart import MIMEMultipart
from email.mime.text import MIMEText from email.mime.text import MIMEText
import json import json
from novaclient import exceptions as nova_exceptions
import os import os
import pkgutil import pkgutil
import string import string
from novaclient import exceptions as nova_exceptions
from oslo.config import cfg from oslo.config import cfg
import six import six
from six.moves.urllib import parse as urlparse from six.moves.urllib import parse as urlparse
from heat.common import exception from heat.common import exception
from heat.engine import clients
from heat.engine import scheduler from heat.engine import scheduler
from heat.openstack.common.gettextutils import _ from heat.openstack.common.gettextutils import _
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
@@ -52,15 +51,16 @@ def refresh_server(server):
''' '''
try: try:
server.get() server.get()
except clients.novaclient.exceptions.OverLimit as exc: except nova_exceptions.OverLimit as exc:
msg = _("Server %(name)s (%(id)s) received an OverLimit " msg = _("Server %(name)s (%(id)s) received an OverLimit "
"response during server.get(): %(exception)s") "response during server.get(): %(exception)s")
LOG.warning(msg % {'name': server.name, LOG.warning(msg % {'name': server.name,
'id': server.id, 'id': server.id,
'exception': exc}) 'exception': exc})
except clients.novaclient.exceptions.ClientException as exc: except nova_exceptions.ClientException as exc:
if ((getattr(exc, 'http_status', getattr(exc, 'code', None)) in http_status = (getattr(exc, 'http_status', None) or
(500, 503))): getattr(exc, 'code', None))
if http_status in (500, 503):
msg = _('Server "%(name)s" (%(id)s) received the following ' msg = _('Server "%(name)s" (%(id)s) received the following '
'exception during server.get(): %(exception)s') 'exception during server.get(): %(exception)s')
LOG.warning(msg % {'name': server.name, LOG.warning(msg % {'name': server.name,
@@ -248,7 +248,7 @@ def delete_server(server):
try: try:
refresh_server(server) refresh_server(server)
except clients.novaclient.exceptions.NotFound: except nova_exceptions.NotFound:
break break
@@ -330,7 +330,7 @@ def server_to_ipaddress(client, server):
''' '''
try: try:
server = client.servers.get(server) 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') LOG.warn(_('Instance (%(server)s) not found: %(ex)s')
% {'server': server, 'ex': ex}) % {'server': server, 'ex': ex})
else: else:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -32,6 +32,7 @@ from heat.common import template_format
from heat.common import urlfetch from heat.common import urlfetch
from heat.db import api as db_api from heat.db import api as db_api
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import dependencies from heat.engine import dependencies
from heat.engine import environment from heat.engine import environment
from heat.engine import parser from heat.engine import parser
@@ -215,8 +216,8 @@ def setup_mocks(mocks, stack, mock_image_constraint=True):
fc = fakes.FakeClient() fc = fakes.FakeClient()
mocks.StubOutWithMock(instances.Instance, 'nova') mocks.StubOutWithMock(instances.Instance, 'nova')
instances.Instance.nova().MultipleTimes().AndReturn(fc) instances.Instance.nova().MultipleTimes().AndReturn(fc)
mocks.StubOutWithMock(clients.OpenStackClients, '_nova') mocks.StubOutWithMock(nova.NovaClientPlugin, '_create')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(fc)
instance = stack['WebServer'] instance = stack['WebServer']
if mock_image_constraint: if mock_image_constraint:
setup_mock_for_image_constraint(mocks, setup_mock_for_image_constraint(mocks,
@@ -264,7 +265,7 @@ def clean_up_stack(stack, delete_res=True):
instances.Instance.nova().MultipleTimes().AndReturn(fc) instances.Instance.nova().MultipleTimes().AndReturn(fc)
m.StubOutWithMock(fc.client, 'get_servers_9999') m.StubOutWithMock(fc.client, 'get_servers_9999')
get = 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() m.ReplayAll()
stack.delete() stack.delete()
if delete_res: if delete_res:
@@ -417,7 +418,7 @@ class StackCreateTest(HeatTestCase):
self.m.StubOutWithMock(fc.client, 'get_servers_9999') self.m.StubOutWithMock(fc.client, 'get_servers_9999')
get = 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) mox.Replay(get)
stack.delete() stack.delete()
@@ -1391,7 +1392,7 @@ class StackServiceAuthorizeTest(HeatTestCase):
fc = setup_mocks(self.m, stack) fc = setup_mocks(self.m, stack)
self.m.StubOutWithMock(fc.client, 'get_servers_9999') self.m.StubOutWithMock(fc.client, 'get_servers_9999')
get = 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() self.m.ReplayAll()
stack.store() 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 exception
from heat.common import template_format from heat.common import template_format
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment from heat.engine import environment
from heat.engine import parser from heat.engine import parser
from heat.engine import resource 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._mock_get_image_id_success(image_id or 'CentOS 5.2', 1)
self.m.StubOutWithMock(instance, 'nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
instance.nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
if stub_create: if stub_create:
self.m.StubOutWithMock(self.fc.servers, 'create') self.m.StubOutWithMock(self.fc.servers, 'create')
@@ -314,8 +313,8 @@ class InstancesTest(HeatTestCase):
instance = instances.Instance('instance_create_image', instance = instances.Instance('instance_create_image',
resource_defns['WebServer'], stack) resource_defns['WebServer'], stack)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('1', 1) self._mock_get_image_id_success('1', 1)
self.m.ReplayAll() self.m.ReplayAll()
@@ -347,8 +346,7 @@ class InstancesTest(HeatTestCase):
d2['server']['status'] = vm_delete_status d2['server']['status'] = vm_delete_status
get().AndReturn((200, d2)) get().AndReturn((200, d2))
else: else:
get().AndRaise( get().AndRaise(fakes.fake_exception())
instances.clients.novaclient.exceptions.NotFound(404))
self.m.ReplayAll() self.m.ReplayAll()

View File

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

View File

@@ -15,6 +15,7 @@ import uuid
from heat.common import template_format from heat.common import template_format
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment from heat.engine import environment
from heat.engine import parser from heat.engine import parser
from heat.engine.resources import glance_utils from heat.engine.resources import glance_utils
@@ -175,10 +176,8 @@ class instancesTest(HeatTestCase):
instance = instances.Instance('%s_name' % name, instance = instances.Instance('%s_name' % name,
resource_defns['WebServer'], stack) resource_defns['WebServer'], stack)
self.m.StubOutWithMock(instance, 'nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
instance.nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success(image_id, 1) self._mock_get_image_id_success(image_id, 1)
@@ -235,10 +234,8 @@ class instancesTest(HeatTestCase):
self.m.StubOutWithMock(nic, 'neutron') self.m.StubOutWithMock(nic, 'neutron')
nic.neutron().MultipleTimes().AndReturn(FakeNeutron()) nic.neutron().MultipleTimes().AndReturn(FakeNeutron())
self.m.StubOutWithMock(instance, 'nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
instance.nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
# need to resolve the template functions # need to resolve the template functions
server_userdata = nova_utils.build_userdata( 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 exception
from heat.common import template_format from heat.common import template_format
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import resource from heat.engine import resource
from heat.engine.resources import glance_utils from heat.engine.resources import glance_utils
from heat.engine.resources import instance from heat.engine.resources import instance
@@ -104,7 +105,7 @@ class LoadBalancerTest(HeatTestCase):
def setUp(self): def setUp(self):
super(LoadBalancerTest, self).setUp() super(LoadBalancerTest, self).setUp()
self.fc = fakes.FakeClient() 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(self.fc.servers, 'create')
self.m.StubOutWithMock(resource.Resource, 'metadata_set') self.m.StubOutWithMock(resource.Resource, 'metadata_set')
self.stub_keystoneclient(username='test_stack.CfnLBUser') self.stub_keystoneclient(username='test_stack.CfnLBUser')
@@ -136,7 +137,7 @@ class LoadBalancerTest(HeatTestCase):
utils.PhysName('test_stack', 'LoadBalancer'), utils.PhysName('test_stack', 'LoadBalancer'),
'LB_instance', 'LB_instance',
limit=instance.Instance.physical_resource_name_limit) 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( self.fc.servers.create(
flavor=2, image=746, key_name=key_name, flavor=2, image=746, key_name=key_name,
meta=None, nics=None, name=server_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 exception
from heat.common import template_format 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 loadbalancer
from heat.engine.resources.neutron import neutron_utils from heat.engine.resources.neutron import neutron_utils
from heat.engine import scheduler from heat.engine import scheduler
@@ -955,10 +955,10 @@ class LoadBalancerTest(HeatTestCase):
self.m.StubOutWithMock(neutronclient.Client, 'create_member') self.m.StubOutWithMock(neutronclient.Client, 'create_member')
self.m.StubOutWithMock(neutronclient.Client, 'delete_member') self.m.StubOutWithMock(neutronclient.Client, 'delete_member')
self.stub_keystoneclient() self.stub_keystoneclient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
def create_load_balancer(self): def create_load_balancer(self):
clients.OpenStackClients._nova().AndReturn(self.fc) nova.NovaClientPlugin._create().AndReturn(self.fc)
neutronclient.Client.create_member({ neutronclient.Client.create_member({
'member': { 'member': {
'pool_id': 'pool123', 'protocol_port': 8080, 'pool_id': 'pool123', 'protocol_port': 8080,

View File

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

View File

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

View File

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

View File

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

View File

@@ -18,9 +18,9 @@ import mock
from novaclient import exceptions as nova_exceptions from novaclient import exceptions as nova_exceptions
from heat.common import exception from heat.common import exception
from heat.engine import clients
from heat.engine.resources import nova_utils from heat.engine.resources import nova_utils
from heat.tests.common import HeatTestCase from heat.tests.common import HeatTestCase
from heat.tests.v1_1 import fakes
class NovaUtilsTests(HeatTestCase): class NovaUtilsTests(HeatTestCase):
@@ -84,7 +84,7 @@ class NovaUtilsTests(HeatTestCase):
self.nova_client.keypairs.get( self.nova_client.keypairs.get(
my_key_name).AndReturn(my_key) my_key_name).AndReturn(my_key)
self.nova_client.keypairs.get( self.nova_client.keypairs.get(
'notakey').AndRaise(nova_exceptions.NotFound(404)) 'notakey').AndRaise(fakes.fake_exception())
self.m.ReplayAll() self.m.ReplayAll()
self.assertEqual(my_key, nova_utils.get_keypair(self.nova_client, self.assertEqual(my_key, nova_utils.get_keypair(self.nova_client,
my_key_name)) my_key_name))
@@ -105,16 +105,12 @@ class NovaUtilsRefreshServerTests(HeatTestCase):
def test_overlimit_error(self): def test_overlimit_error(self):
server = mock.Mock() server = mock.Mock()
server.get.side_effect = clients.novaclient.exceptions.OverLimit( server.get.side_effect = fakes.fake_exception(413)
413, "limit reached")
self.assertIsNone(nova_utils.refresh_server(server)) self.assertIsNone(nova_utils.refresh_server(server))
def test_500_error(self): def test_500_error(self):
server = self.m.CreateMockAnything() server = self.m.CreateMockAnything()
msg = ("ClientException: The server has either erred or is " server.get().AndRaise(fakes.fake_exception(500))
"incapable of performing the requested operation.")
server.get().AndRaise(
clients.novaclient.exceptions.ClientException(500, msg))
self.m.ReplayAll() self.m.ReplayAll()
self.assertIsNone(nova_utils.refresh_server(server)) self.assertIsNone(nova_utils.refresh_server(server))
@@ -122,10 +118,7 @@ class NovaUtilsRefreshServerTests(HeatTestCase):
def test_503_error(self): def test_503_error(self):
server = self.m.CreateMockAnything() server = self.m.CreateMockAnything()
msg = ("ClientException: The server has either erred or is " server.get().AndRaise(fakes.fake_exception(503))
"incapable of performing the requested operation.")
server.get().AndRaise(
clients.novaclient.exceptions.ClientException(503, msg))
self.m.ReplayAll() self.m.ReplayAll()
self.assertIsNone(nova_utils.refresh_server(server)) self.assertIsNone(nova_utils.refresh_server(server))
@@ -133,13 +126,10 @@ class NovaUtilsRefreshServerTests(HeatTestCase):
def test_unhandled_exception(self): def test_unhandled_exception(self):
server = self.m.CreateMockAnything() server = self.m.CreateMockAnything()
msg = ("ClientException: The server has either erred or is " server.get().AndRaise(fakes.fake_exception(501))
"incapable of performing the requested operation.")
server.get().AndRaise(
clients.novaclient.exceptions.ClientException(501, msg))
self.m.ReplayAll() self.m.ReplayAll()
self.assertRaises(clients.novaclient.exceptions.ClientException, self.assertRaises(nova_exceptions.ClientException,
nova_utils.refresh_server, server) nova_utils.refresh_server, server)
self.m.VerifyAll() 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 functions as cfn_funcs
from heat.engine.cfn import template as cfn_t from heat.engine.cfn import template as cfn_t
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment from heat.engine import environment
from heat.engine import function from heat.engine import function
from heat.engine.hot import template as hot_t from heat.engine.hot import template as hot_t
@@ -466,9 +467,9 @@ Mappings:
snippet = {"Fn::GetAZs": ""} snippet = {"Fn::GetAZs": ""}
stack = parser.Stack(self.ctx, 'test_stack', stack = parser.Stack(self.ctx, 'test_stack',
parser.Template(empty_template)) parser.Template(empty_template))
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
fc = fakes.FakeClient() fc = fakes.FakeClient()
clients.OpenStackClients._nova().MultipleTimes().AndReturn(fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(fc)
self.m.ReplayAll() self.m.ReplayAll()
self.assertEqual(["nova1"], self.resolve(snippet, tmpl, stack)) 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 # Mock objects so the query for flavors in server.FlavorConstraint
# works for stack creation # works for stack creation
fc = fakes.FakeClient() fc = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(fc)
fc.flavors = self.m.CreateMockAnything() fc.flavors = self.m.CreateMockAnything()
flavor = collections.namedtuple("Flavor", ["id", "name"]) 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 exception
from heat.common import template_format 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 parser
from heat.engine import scheduler from heat.engine import scheduler
from heat.tests.common import HeatTestCase from heat.tests.common import HeatTestCase
@@ -127,7 +127,7 @@ Resources:
def setUp(self): def setUp(self):
super(SecurityGroupTest, self).setUp() super(SecurityGroupTest, self).setUp()
self.fc = fakes.FakeClient() self.fc = fakes.FakeClient()
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
self.stub_keystoneclient() self.stub_keystoneclient()
self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'create') self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'create')
self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'delete') self.m.StubOutWithMock(nova_sgr.SecurityGroupRuleManager, 'delete')
@@ -165,7 +165,7 @@ Resources:
def test_security_group_nova(self): def test_security_group_nova(self):
#create script #create script
clients.OpenStackClients._nova().AndReturn(self.fc) nova.NovaClientPlugin._create().AndReturn(self.fc)
nova_sg.SecurityGroupManager.list().AndReturn([NovaSG( nova_sg.SecurityGroupManager.list().AndReturn([NovaSG(
id=1, id=1,
name='test', name='test',
@@ -257,7 +257,7 @@ Resources:
def test_security_group_nova_bad_source_group(self): def test_security_group_nova_bad_source_group(self):
#create script #create script
clients.OpenStackClients._nova().AndReturn(self.fc) nova.NovaClientPlugin._create().AndReturn(self.fc)
nova_sg.SecurityGroupManager.list().AndReturn([NovaSG( nova_sg.SecurityGroupManager.list().AndReturn([NovaSG(
id=1, id=1,
name='test', name='test',
@@ -319,9 +319,9 @@ Resources:
stack.delete() stack.delete()
self.m.VerifyAll() self.m.VerifyAll()
def test_security_group_nova_exception(self): def test_security_group_client_exception(self):
#create script #create script
clients.OpenStackClients._nova().AndReturn(self.fc) nova.NovaClientPlugin._create().AndReturn(self.fc)
sg_name = utils.PhysName('test_stack', 'the_sg') sg_name = utils.PhysName('test_stack', 'the_sg')
nova_sg.SecurityGroupManager.list().AndReturn([ nova_sg.SecurityGroupManager.list().AndReturn([
NovaSG( NovaSG(
@@ -340,20 +340,16 @@ Resources:
nova_sgr.SecurityGroupRuleManager.create( nova_sgr.SecurityGroupRuleManager.create(
2, 'tcp', '22', '22', '0.0.0.0/0', None).AndRaise( 2, 'tcp', '22', '22', '0.0.0.0/0', None).AndRaise(
clients.novaclient.exceptions.BadRequest( fakes.fake_exception(400, 'Rule already exists'))
400, 'Rule already exists'))
nova_sgr.SecurityGroupRuleManager.create( nova_sgr.SecurityGroupRuleManager.create(
2, 'tcp', '80', '80', '0.0.0.0/0', None).AndReturn( 2, 'tcp', '80', '80', '0.0.0.0/0', None).AndReturn(
clients.novaclient.exceptions.BadRequest( fakes.fake_exception(400, 'Rule already exists'))
400, 'Rule already exists'))
nova_sgr.SecurityGroupRuleManager.create( nova_sgr.SecurityGroupRuleManager.create(
2, 'tcp', None, None, None, 1).AndReturn( 2, 'tcp', None, None, None, 1).AndReturn(
clients.novaclient.exceptions.BadRequest( fakes.fake_exception(400, 'Rule already exists'))
400, 'Rule already exists'))
nova_sgr.SecurityGroupRuleManager.create( nova_sgr.SecurityGroupRuleManager.create(
2, 'icmp', None, None, None, '1').AndReturn( 2, 'icmp', None, None, None, '1').AndReturn(
clients.novaclient.exceptions.BadRequest( fakes.fake_exception(400, 'Rule already exists'))
400, 'Rule already exists'))
# delete script # delete script
nova_sg.SecurityGroupManager.get(2).AndReturn(NovaSG( nova_sg.SecurityGroupManager.get(2).AndReturn(NovaSG(
@@ -405,17 +401,17 @@ Resources:
}] }]
)) ))
nova_sgr.SecurityGroupRuleManager.delete(130).AndRaise( nova_sgr.SecurityGroupRuleManager.delete(130).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger')) fakes.fake_exception())
nova_sgr.SecurityGroupRuleManager.delete(131).AndRaise( nova_sgr.SecurityGroupRuleManager.delete(131).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger')) fakes.fake_exception())
nova_sgr.SecurityGroupRuleManager.delete(132).AndRaise( nova_sgr.SecurityGroupRuleManager.delete(132).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger')) fakes.fake_exception())
nova_sgr.SecurityGroupRuleManager.delete(133).AndRaise( nova_sgr.SecurityGroupRuleManager.delete(133).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger')) fakes.fake_exception())
nova_sg.SecurityGroupManager.delete(2).AndReturn(None) nova_sg.SecurityGroupManager.delete(2).AndReturn(None)
nova_sg.SecurityGroupManager.get(2).AndRaise( nova_sg.SecurityGroupManager.get(2).AndRaise(
clients.novaclient.exceptions.NotFound('goneburger')) fakes.fake_exception())
self.m.ReplayAll() self.m.ReplayAll()
stack = self.create_stack(self.test_template_nova) stack = self.create_stack(self.test_template_nova)

View File

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

View File

@@ -18,6 +18,7 @@ import mox
from heat.common import template_format from heat.common import template_format
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment from heat.engine import environment
from heat.engine import parser from heat.engine import parser
from heat.engine.resources import glance_utils from heat.engine.resources import glance_utils
@@ -152,10 +153,8 @@ class ServerTagsTest(HeatTestCase):
instance = instances.Instance(stack_name, instance = instances.Instance(stack_name,
resource_defns['WebServer'], stack) resource_defns['WebServer'], stack)
self.m.StubOutWithMock(instance, 'nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
instance.nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('CentOS 5.2', 1) self._mock_get_image_id_success('CentOS 5.2', 1)
# need to resolve the template functions # need to resolve the template functions
server_userdata = nova_utils.build_userdata( server_userdata = nova_utils.build_userdata(
@@ -205,11 +204,9 @@ class ServerTagsTest(HeatTestCase):
new_tags = [{'Key': 'Food', 'Value': 'yuk'}] new_tags = [{'Key': 'Food', 'Value': 'yuk'}]
new_metadata = dict((tm['Key'], tm['Value']) for tm in new_tags) 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.m.StubOutWithMock(self.fc.servers, 'set_meta')
self.fc.servers.set_meta(self.fc.servers.list()[1], self.fc.servers.set_meta(self.fc.servers.list()[1],
new_metadata).AndReturn(None) new_metadata).AndReturn(None)
@@ -242,10 +239,8 @@ class ServerTagsTest(HeatTestCase):
nova_tags['metering.groupname'] = utils.PhysName(stack.name, nova_tags['metering.groupname'] = utils.PhysName(stack.name,
group.name) group.name)
self.m.StubOutWithMock(instances.Instance, 'nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
instances.Instance.nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('CentOS 5.2', 1) self._mock_get_image_id_success('CentOS 5.2', 1)
# need to resolve the template functions # need to resolve the template functions
self.m.StubOutWithMock(self.fc.servers, 'create') self.m.StubOutWithMock(self.fc.servers, 'create')
@@ -293,10 +288,8 @@ class ServerTagsTest(HeatTestCase):
self.m.StubOutWithMock(group, '_cooldown_timestamp') self.m.StubOutWithMock(group, '_cooldown_timestamp')
group._cooldown_timestamp(mox.IgnoreArg()).AndReturn(None) group._cooldown_timestamp(mox.IgnoreArg()).AndReturn(None)
self.m.StubOutWithMock(instances.Instance, 'nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
instances.Instance.nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc)
self._mock_get_image_id_success('CentOS 5.2', 1) self._mock_get_image_id_success('CentOS 5.2', 1)
# need to resolve the template functions # need to resolve the template functions
self.m.StubOutWithMock(self.fc.servers, 'create') 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.common import template_format
from heat.db.sqlalchemy import api as db_api from heat.db.sqlalchemy import api as db_api
from heat.engine import clients 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 environment
from heat.engine import parser from heat.engine import parser
from heat.engine.resource import Resource from heat.engine.resource import Resource
@@ -121,8 +121,8 @@ class SqlAlchemyTest(HeatTestCase):
fc = fakes.FakeClient() fc = fakes.FakeClient()
mocks.StubOutWithMock(instances.Instance, 'nova') mocks.StubOutWithMock(instances.Instance, 'nova')
instances.Instance.nova().MultipleTimes().AndReturn(fc) instances.Instance.nova().MultipleTimes().AndReturn(fc)
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
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._mock_get_image_id_success('F17-x86_64-gold', 744)
mocks.StubOutWithMock(fc.servers, 'create') mocks.StubOutWithMock(fc.servers, 'create')
@@ -141,7 +141,7 @@ class SqlAlchemyTest(HeatTestCase):
instances.Instance.nova().MultipleTimes().AndReturn(fc) instances.Instance.nova().MultipleTimes().AndReturn(fc)
mocks.StubOutWithMock(fc.client, 'get_servers_9999') mocks.StubOutWithMock(fc.client, 'get_servers_9999')
get = 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') @mock.patch.object(db_api, '_paginate_query')
def test_filter_and_page_query_paginates_query(self, mock_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 exception
from heat.common import template_format from heat.common import template_format
from heat.engine import clients from heat.engine import clients
from heat.engine.clients.os import nova
from heat.engine import environment from heat.engine import environment
from heat.engine.hot.template import HOTemplate from heat.engine.hot.template import HOTemplate
from heat.engine import parser from heat.engine import parser
@@ -1267,8 +1268,8 @@ class validateTest(HeatTestCase):
self._mock_get_image_id_success('image_name', 'image_id') self._mock_get_image_id_success('image_name', 'image_id')
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll() self.m.ReplayAll()
resource = stack['Instance'] resource = stack['Instance']
@@ -1284,8 +1285,8 @@ class validateTest(HeatTestCase):
self._mock_get_image_id_success('image_name', 'image_id') self._mock_get_image_id_success('image_name', 'image_id')
self.m.StubOutWithMock(clients.OpenStackClients, '_nova') self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
clients.OpenStackClients._nova().MultipleTimes().AndReturn(self.fc) nova.NovaClientPlugin._create().MultipleTimes().AndReturn(self.fc)
self.m.ReplayAll() self.m.ReplayAll()
resource = stack['Instance'] resource = stack['Instance']

View File

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

View File

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

View File

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