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:
@@ -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())
|
||||||
|
@@ -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
|
||||||
|
@@ -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")')
|
||||||
|
0
heat/engine/clients/os/__init__.py
Normal file
0
heat/engine/clients/os/__init__.py
Normal file
48
heat/engine/clients/os/nova.py
Normal file
48
heat/engine/clients/os/nova.py
Normal 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
|
@@ -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]
|
||||||
|
@@ -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:
|
||||||
|
@@ -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):
|
||||||
|
@@ -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:
|
||||||
|
@@ -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)
|
||||||
|
@@ -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:
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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'
|
||||||
|
@@ -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')
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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'
|
||||||
|
@@ -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(
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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(
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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),
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
@@ -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"])
|
||||||
|
@@ -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)
|
||||||
|
@@ -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"])
|
||||||
|
@@ -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')
|
||||||
|
@@ -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):
|
||||||
|
@@ -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']
|
||||||
|
@@ -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',
|
||||||
|
@@ -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'}]})
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user