from heat.db import api as db_api
from heat.openstack.common import log as logging
+from heat.common.exception import ServerError
from heat.common.exception import StackValidationFailed
logger = logging.getLogger(__name__)
for res in self:
try:
result = res.validate()
+ except ServerError as ex:
+ logger.exception(ex)
+ raise ex
except Exception as ex:
logger.exception(ex)
raise StackValidationFailed(message=str(ex))
% image_identifier)
raise exception.ImageNotFound(image_name=image_identifier)
else:
- image_list = self.nova().images.list()
+ try:
+ image_list = self.nova().images.list()
+ except clients.novaclient.exceptions.ClientException as ex:
+ raise exception.ServerError(message=str(ex))
image_names = dict(
(o.id, o.name)
for o in image_list if o.name == image_identifier)
from testtools import skipIf
+from heat.engine import clients
from heat.engine import environment
from heat.tests.v1_1 import fakes
from heat.common import exception
}
'''
+test_template_nova_client_exception = '''
+{
+ "AWSTemplateFormatVersion" : "2010-09-09",
+ "Description" : "test.",
+ "Resources" : {
+ "Instance": {
+ "Type": "AWS::EC2::Instance",
+ "DeletionPolicy": "Delete",
+ "Properties": {
+ "ImageId": "image_name",
+ "InstanceType": "m1.large"
+ }
+ }
+ }
+}
+'''
+
class validateTest(HeatTestCase):
def setUp(self):
resource = stack.resources['Instance']
self.assertNotEqual(resource.validate(), None)
+
+ def test_client_exception_from_nova_client(self):
+ t = template_format.parse(test_template_nova_client_exception)
+ template = parser.Template(t)
+ stack = parser.Stack(None, 'test_stack', template)
+
+ self.m.StubOutWithMock(self.fc.images, 'list')
+ self.fc.images.list()\
+ .AndRaise(clients.novaclient.exceptions.ClientException(500))
+ self.m.StubOutWithMock(instances.Instance, 'nova')
+ instances.Instance.nova().AndReturn(self.fc)
+ self.m.ReplayAll()
+
+ self.assertRaises(exception.ServerError,
+ stack.validate)
+ self.m.VerifyAll()