diff --git a/heat/engine/clients/os/nova.py b/heat/engine/clients/os/nova.py index ca56d4c4ad..08afc26474 100644 --- a/heat/engine/clients/os/nova.py +++ b/heat/engine/clients/os/nova.py @@ -20,6 +20,7 @@ import pkgutil import string from neutronclient.common import exceptions as q_exceptions +from novaclient import api_versions from novaclient import client as nc from novaclient import exceptions from oslo_config import cfg @@ -34,6 +35,7 @@ from heat.common import exception from heat.common.i18n import _ from heat.engine.clients import client_exception from heat.engine.clients import client_plugin +from heat.engine.clients import microversion_mixin from heat.engine.clients import os as os_client from heat.engine import constraints @@ -43,7 +45,8 @@ LOG = logging.getLogger(__name__) CLIENT_NAME = 'nova' -class NovaClientPlugin(client_plugin.ClientPlugin): +class NovaClientPlugin(microversion_mixin.MicroversionMixin, + client_plugin.ClientPlugin): deferred_server_statuses = ['BUILD', 'HARD_REBOOT', @@ -60,13 +63,14 @@ class NovaClientPlugin(client_plugin.ClientPlugin): NOVA_API_VERSION = '2.1' + # TODO(ramishra) Remove these constants validate_versions = [ V2_2, V2_8, V2_10, V2_15, V2_26, V2_37, V2_42 ] = [ '2.2', '2.8', '2.10', '2.15', '2.26', '2.37', '2.42' ] - supported_versions = [NOVA_API_VERSION] + validate_versions + max_microversion = None service_types = [COMPUTE] = ['compute'] @@ -78,10 +82,16 @@ class NovaClientPlugin(client_plugin.ClientPlugin): # TODO(prazumovsky): remove all unexpected calls from tests and # add default_version after that. version = self.NOVA_API_VERSION + args = self._get_args(version) + + client = nc.Client(version, **args) + return client + + def _get_args(self, version): endpoint_type = self._get_client_option(CLIENT_NAME, 'endpoint_type') extensions = nc.discover_extensions(version) - args = { + return { 'session': self.context.keystone_session, 'extensions': extensions, 'endpoint_type': endpoint_type, @@ -89,18 +99,19 @@ class NovaClientPlugin(client_plugin.ClientPlugin): 'region_name': self._get_region_name(), 'http_log_debug': self._get_client_option(CLIENT_NAME, 'http_log_debug') - } + } - client = nc.Client(version, **args) - # NOTE: check for microversion availability - if version in self.validate_versions: - try: - client.versions.get_current() - except exceptions.NotAcceptable: - raise exception.InvalidServiceVersion(service=self.COMPUTE, - version=version) + def get_max_microversion(self): + if not self.max_microversion: + client = self._create() + self.max_microversion = client.versions.get_current().version + return self.max_microversion - return client + def is_version_supported(self, version): + api_ver = api_versions.get_api_version(version) + max_api_ver = api_versions.get_api_version( + self.get_max_microversion()) + return max_api_ver >= api_ver def is_not_found(self, ex): return isinstance(ex, (exceptions.NotFound, diff --git a/heat/tests/aws/test_eip.py b/heat/tests/aws/test_eip.py index 3338244641..7bebed736c 100644 --- a/heat/tests/aws/test_eip.py +++ b/heat/tests/aws/test_eip.py @@ -172,7 +172,7 @@ class EIPTest(common.HeatTestCase): # force Nova, will test Neutron below super(EIPTest, self).setUp() self.fc = fakes_nova.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.mock_list_net = self.patchobject(neutronclient.Client, 'list_networks') @@ -406,7 +406,7 @@ class AllocTest(common.HeatTestCase): def setUp(self): super(AllocTest, self).setUp() self.fc = fakes_nova.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.mock_list_net = self.patchobject(neutronclient.Client, 'list_networks') diff --git a/heat/tests/aws/test_instance_network.py b/heat/tests/aws/test_instance_network.py index 14a894f3c1..3d5b5dd9ed 100644 --- a/heat/tests/aws/test_instance_network.py +++ b/heat/tests/aws/test_instance_network.py @@ -210,7 +210,7 @@ class instancesTest(common.HeatTestCase): resource_defns['WebServer'], self.stack) metadata = instance.metadata_get() - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self._mock_get_image_id_success(image_id, 1) @@ -244,7 +244,7 @@ class instancesTest(common.HeatTestCase): instance.properties['UserData'], 'ec2-user') neutron.NeutronClientPlugin._create.assert_called_once_with() - nova.NovaClientPlugin._create.assert_called_once_with() + nova.NovaClientPlugin.client.assert_called_with() glance.GlanceClientPlugin.find_image_by_name_or_id.assert_called_with( image_id) return instance @@ -278,7 +278,7 @@ class instancesTest(common.HeatTestCase): self.patchobject(neutron.NeutronClientPlugin, '_create', return_value=FakeNeutron()) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) # need to resolve the template functions @@ -310,7 +310,7 @@ class instancesTest(common.HeatTestCase): instance.properties['UserData'], 'ec2-user') neutron.NeutronClientPlugin._create.assert_called_once_with() - nova.NovaClientPlugin._create.assert_called_once_with() + nova.NovaClientPlugin.client.assert_called_with() glance.GlanceClientPlugin.find_image_by_name_or_id.assert_called_with( image_id) return instance diff --git a/heat/tests/aws/test_loadbalancer.py b/heat/tests/aws/test_loadbalancer.py index 71b7516524..07417d1305 100644 --- a/heat/tests/aws/test_loadbalancer.py +++ b/heat/tests/aws/test_loadbalancer.py @@ -89,9 +89,8 @@ class LoadBalancerTest(common.HeatTestCase): lb_defn = s.t.resource_definitions(s)[resource_name] rsrc = lb.LoadBalancer(resource_name, lb_defn, s) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) - initial_md = {'AWS::CloudFormation::Init': {'config': {'files': diff --git a/heat/tests/clients/test_nova_client.py b/heat/tests/clients/test_nova_client.py index ee356cd343..2c28016fe5 100644 --- a/heat/tests/clients/test_nova_client.py +++ b/heat/tests/clients/test_nova_client.py @@ -47,8 +47,9 @@ class NovaClientPluginTest(NovaClientPluginTestCase): context = utils.dummy_context() ext_mock = self.patchobject(nc, 'discover_extensions') plugin = context.clients.client_plugin('nova') + plugin.max_microversion = '2.53' client = plugin.client() - ext_mock.assert_called_once_with('2.1') + ext_mock.assert_called_once_with('2.53') self.assertIsNotNone(client.servers) def test_v2_26_create(self): @@ -57,21 +58,21 @@ class NovaClientPluginTest(NovaClientPluginTestCase): self.patchobject(nc, 'Client', return_value=mock.Mock()) plugin = ctxt.clients.client_plugin('nova') - plugin.client(version=plugin.V2_26) + plugin.max_microversion = '2.53' + plugin.client(version='2.26') - ext_mock.assert_called_once_with(plugin.V2_26) + ext_mock.assert_called_once_with('2.26') def test_v2_26_create_failed(self): ctxt = utils.dummy_context() self.patchobject(nc, 'discover_extensions') plugin = ctxt.clients.client_plugin('nova') + plugin.max_microversion = '2.23' client_stub = mock.Mock() - client_stub.versions.get_current.side_effect = [ - nova_exceptions.NotAcceptable(406)] self.patchobject(nc, 'Client', return_value=client_stub) - self.assertRaises(exception.InvalidServiceVersion, plugin.client, - plugin.V2_26) + self.assertRaises(exception.InvalidServiceVersion, + plugin.client, '2.26') def test_get_ip(self): my_image = mock.MagicMock() @@ -475,6 +476,8 @@ class FlavorConstraintTest(common.HeatTestCase): def test_validate(self): client = fakes_nova.FakeClient() self.stub_keystoneclient() + self.patchobject(nova.NovaClientPlugin, 'get_max_microversion', + return_value='2.27') self.patchobject(nova.NovaClientPlugin, '_create', return_value=client) client.flavors = mock.MagicMock() @@ -521,6 +524,8 @@ class KeypairConstraintTest(common.HeatTestCase): def test_validation(self): client = fakes_nova.FakeClient() + self.patchobject(nova.NovaClientPlugin, 'get_max_microversion', + return_value='2.27') self.patchobject(nova.NovaClientPlugin, '_create', return_value=client) client.keypairs = mock.MagicMock() @@ -534,7 +539,7 @@ class KeypairConstraintTest(common.HeatTestCase): self.assertFalse(constraint.validate("bar", ctx)) self.assertTrue(constraint.validate("foo", ctx)) self.assertTrue(constraint.validate("", ctx)) - nova.NovaClientPlugin._create.assert_called_once_with() + nova.NovaClientPlugin._create.assert_called_once_with(version='2.27') calls = [mock.call('bar'), mock.call(key.name)] client.keypairs.get.assert_has_calls(calls) diff --git a/heat/tests/db/test_sqlalchemy_api.py b/heat/tests/db/test_sqlalchemy_api.py index 84ec251ebd..b102371265 100644 --- a/heat/tests/db/test_sqlalchemy_api.py +++ b/heat/tests/db/test_sqlalchemy_api.py @@ -98,7 +98,7 @@ class SqlAlchemyTest(common.HeatTestCase): return (template, stack) def _mock_create(self): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self._mock_get_image_id_success('F17-x86_64-gold', 744) diff --git a/heat/tests/engine/service/test_stack_create.py b/heat/tests/engine/service/test_stack_create.py index a58aac27a4..88c5971bf9 100644 --- a/heat/tests/engine/service/test_stack_create.py +++ b/heat/tests/engine/service/test_stack_create.py @@ -311,7 +311,7 @@ class StackCreateTest(common.HeatTestCase): stk = tools.get_stack(stack_name, self.ctx) fc = fakes_nova.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', return_value=fc) + self.patchobject(nova.NovaClientPlugin, 'client', return_value=fc) self.patchobject(glance.GlanceClientPlugin, 'find_image_by_name_or_id', return_value=744) diff --git a/heat/tests/engine/tools.py b/heat/tests/engine/tools.py index fdf5c39166..5192134dc3 100644 --- a/heat/tests/engine/tools.py +++ b/heat/tests/engine/tools.py @@ -217,7 +217,7 @@ def setup_mocks_with_mock(testcase, stack, mock_image_constraint=True, mock_keystone=True): fc = fakes_nova.FakeClient() testcase.patchobject(instances.Instance, 'client', return_value=fc) - testcase.patchobject(nova.NovaClientPlugin, '_create', return_value=fc) + testcase.patchobject(nova.NovaClientPlugin, 'client', return_value=fc) instance = stack['WebServer'] metadata = instance.metadata_get() if mock_image_constraint: diff --git a/heat/tests/openstack/cinder/test_volume_utils.py b/heat/tests/openstack/cinder/test_volume_utils.py index db3f178263..5e3bb05b9e 100644 --- a/heat/tests/openstack/cinder/test_volume_utils.py +++ b/heat/tests/openstack/cinder/test_volume_utils.py @@ -34,7 +34,7 @@ class VolumeTestCase(common.HeatTestCase): self.cinder_fc.volume_api_version = 2 self.patchobject(cinder.CinderClientPlugin, '_create', return_value=self.cinder_fc) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.cinder_fc.volumes = mock.Mock(spec=self.cinder_fc.volumes) self.fc.volumes = mock.Mock() @@ -56,7 +56,7 @@ class VolumeTestCase(common.HeatTestCase): update=False, extra_create_server_volume_mocks=[]): if not update: - nova.NovaClientPlugin._create.return_value = self.fc + nova.NovaClientPlugin.client.return_value = self.fc result = [fva] for m in extra_create_server_volume_mocks: diff --git a/heat/tests/openstack/neutron/test_neutron_loadbalancer.py b/heat/tests/openstack/neutron/test_neutron_loadbalancer.py index 9d6d82cdd7..739c21b606 100644 --- a/heat/tests/openstack/neutron/test_neutron_loadbalancer.py +++ b/heat/tests/openstack/neutron/test_neutron_loadbalancer.py @@ -883,12 +883,12 @@ class LoadBalancerTest(common.HeatTestCase): self.mc = mock.Mock(spec=neutronclient.Client) self.patchobject(neutronclient, 'Client', return_value=self.mc) - self.patchobject(nova.NovaClientPlugin, '_create') + self.patchobject(nova.NovaClientPlugin, 'client') self.patchobject(neutron.NeutronClientPlugin, 'has_extension', return_value=True) def create_load_balancer(self, extra_create_mocks=[]): - nova.NovaClientPlugin._create.return_value = self.fc + nova.NovaClientPlugin.client.return_value = self.fc results = [{'member': {'id': 'member5678'}}] for m in extra_create_mocks: results.append(m) @@ -907,13 +907,16 @@ class LoadBalancerTest(common.HeatTestCase): 'pool_id': 'pool123', 'protocol_port': 8080, 'address': '4.5.6.7'}} ) + nova.NovaClientPlugin.client.assert_called_with() + self.assertEqual(create_count, + nova.NovaClientPlugin.client.call_count) else: self.mc.create_member.assert_called_once_with({ 'member': { 'pool_id': 'pool123', 'protocol_port': 8080, 'address': '1.2.3.4'}} ) - nova.NovaClientPlugin._create.assert_called_once_with() + nova.NovaClientPlugin.client.assert_called_once_with() def test_create(self): rsrc = self.create_load_balancer() diff --git a/heat/tests/openstack/nova/test_floatingip.py b/heat/tests/openstack/nova/test_floatingip.py index b0cecc4c7a..afbdde0242 100644 --- a/heat/tests/openstack/nova/test_floatingip.py +++ b/heat/tests/openstack/nova/test_floatingip.py @@ -64,7 +64,7 @@ class NovaFloatingIPTest(common.HeatTestCase): def setUp(self): super(NovaFloatingIPTest, self).setUp() self.novaclient = fakes_nova.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.novaclient) self.mock_create_fip = self.patchobject(neutronclient.Client, 'create_floatingip') diff --git a/heat/tests/openstack/nova/test_keypair.py b/heat/tests/openstack/nova/test_keypair.py index 36e7bf5997..5cd9565212 100644 --- a/heat/tests/openstack/nova/test_keypair.py +++ b/heat/tests/openstack/nova/test_keypair.py @@ -48,7 +48,7 @@ class NovaKeyPairTest(common.HeatTestCase): self.fake_nova.keypairs = self.fake_keypairs self.patchobject(nova.NovaClientPlugin, 'has_extension', return_value=True) - self.cp_mock = self.patchobject(nova.NovaClientPlugin, '_create', + self.cp_mock = self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fake_nova) def _mock_key(self, name, pub=None, priv=None): @@ -187,7 +187,7 @@ class NovaKeyPairTest(common.HeatTestCase): stack = utils.parse_stack(template) definition = stack.t.resource_definitions(stack)['kp'] kp_res = keypair.KeyPair('kp', definition, stack) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', side_effect=exception.InvalidServiceVersion( service='compute', version=nc_version diff --git a/heat/tests/openstack/nova/test_server.py b/heat/tests/openstack/nova/test_server.py index 224379dde5..bf80c8a0e2 100644 --- a/heat/tests/openstack/nova/test_server.py +++ b/heat/tests/openstack/nova/test_server.py @@ -19,7 +19,6 @@ import mock from keystoneauth1 import exceptions as ks_exceptions from neutronclient.v2_0 import client as neutronclient from novaclient import exceptions as nova_exceptions -from novaclient.v2 import client as novaclient from oslo_serialization import jsonutils from oslo_utils import uuidutils import requests @@ -353,7 +352,7 @@ class ServersTest(common.HeatTestCase): self.stack) self.patchobject(server, 'store_external_ports') - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.patchobject(glance.GlanceClientPlugin, 'get_image', return_value=self.mock_image) @@ -495,7 +494,7 @@ class ServersTest(common.HeatTestCase): def test_server_create_metadata(self): stack_name = 'create_metadata_test_stack' - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] (tmpl, stack) = self._setup_test_stack(stack_name) @@ -515,7 +514,7 @@ class ServersTest(common.HeatTestCase): def test_server_create_with_subnet_security_group(self): stack_name = 'server_with_subnet_security_group' - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] (tmpl, stack) = self._setup_test_stack( @@ -559,7 +558,7 @@ class ServersTest(common.HeatTestCase): stack_name = 'server_with_str_network' return_server = self.fc.servers.list()[1] (tmpl, stack) = self._setup_test_stack(stack_name) - mock_nc = self.patchobject(nova.NovaClientPlugin, '_create', + mock_nc = self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.patchobject(glance.GlanceClientPlugin, 'get_image', return_value=self.mock_image) @@ -577,7 +576,10 @@ class ServersTest(common.HeatTestCase): create_mock = self.patchobject(self.fc.servers, 'create', return_value=return_server) scheduler.TaskRunner(server.create)() - mock_nc.assert_called_with(version='2.37') + mock_nc.assert_has_calls([mock.call(), + mock.call(version='2.37'), + mock.call()]) + self.assertEqual(3, mock_nc.call_count) self.assertEqual('none', create_mock.call_args[1]['nics']) def test_server_create_with_image_id(self): @@ -703,7 +705,7 @@ class ServersTest(common.HeatTestCase): six.text_type(e)) def test_server_create_raw_userdata(self): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] stack_name = 'raw_userdata_s' @@ -724,7 +726,7 @@ class ServersTest(common.HeatTestCase): self.assertEqual({}, kwargs['meta']) def test_server_create_raw_config_userdata(self): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] stack_name = 'raw_userdata_s' @@ -752,7 +754,7 @@ class ServersTest(common.HeatTestCase): self.assertEqual({}, kwargs['meta']) def test_server_create_raw_config_userdata_None(self): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] stack_name = 'raw_userdata_s' @@ -788,7 +790,7 @@ class ServersTest(common.HeatTestCase): def _server_create_software_config(self, md=None, stack_name='software_config_s', ret_tmpl=False): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] (tmpl, stack) = self._setup_test_stack(stack_name) @@ -879,7 +881,7 @@ class ServersTest(common.HeatTestCase): }, server.metadata_get()) def _server_create_software_config_poll_heat(self, md=None): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] stack_name = 'software_config_s' @@ -946,7 +948,7 @@ class ServersTest(common.HeatTestCase): }, server.metadata_get()) def _server_create_software_config_poll_temp_url(self, md=None): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] stack_name = 'software_config_s' @@ -1028,7 +1030,7 @@ class ServersTest(common.HeatTestCase): }, server.metadata_get()) def _prepare_for_server_create(self, md=None): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] stack_name = 'software_config_s' @@ -1146,7 +1148,7 @@ class ServersTest(common.HeatTestCase): resource_defns['WebServer'], stack) self.patchobject(server, 'store_external_ports') - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) mock_create = self.patchobject(self.fc.servers, 'create', return_value=return_server) @@ -1166,7 +1168,7 @@ class ServersTest(common.HeatTestCase): server = servers.Server('WebServer', resource_defns['WebServer'], stack) self.patchobject(server, 'store_external_ports') - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) mock_create = self.patchobject(self.fc.servers, 'create', return_value=return_server) @@ -1176,7 +1178,7 @@ class ServersTest(common.HeatTestCase): self.assertEqual({}, kwargs['meta']) def test_server_create_with_stack_scheduler_hints(self): - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) return_server = self.fc.servers.list()[1] return_server.id = '5678' @@ -1227,7 +1229,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate(self): stack_name = 'srv_val' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_create_image', @@ -1241,7 +1243,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_with_bootable_vol(self): stack_name = 'srv_val_bootvol' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.stub_VolumeConstraint_validate() # create a server with bootable volume @@ -1303,7 +1305,7 @@ class ServersTest(common.HeatTestCase): return_value=True) t = template_format.parse(nova_keypair_template) templ = template.Template(t) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) stack = parser.Stack(utils.dummy_context(), stack_name, templ, stack_id=uuidutils.generate_uuid()) @@ -1319,7 +1321,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_with_invalid_ssh_key(self): stack_name = 'srv_val_test' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) web_server = tmpl['Resources']['WebServer'] # Make the ssh key have an invalid name @@ -1342,7 +1344,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_software_config_invalid_meta(self): stack_name = 'srv_val_test' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) web_server = tmpl['Resources']['WebServer'] web_server['Properties']['user_data_format'] = 'SOFTWARE_CONFIG' @@ -1386,7 +1388,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_with_network_empty_ref(self): stack_name = 'srv_net' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) tmpl['Resources']['WebServer']['Properties']['networks'] = ( [{'network': ''}]) @@ -1408,7 +1410,7 @@ class ServersTest(common.HeatTestCase): # create a server with 'uuid' and 'network' properties tmpl['Resources']['WebServer']['Properties']['networks'] = ( [{'fixed_ip': '10.0.0.99'}]) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_validate_with_networks', @@ -1434,7 +1436,7 @@ class ServersTest(common.HeatTestCase): tmpl['Resources']['WebServer']['Properties']['networks'] = ( [{'floating_ip': '172.24.4.14', 'network': '6b1688bb-18a0-4754-ab05-19daaedc5871'}]) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_validate_net_floating_ip', @@ -1459,7 +1461,7 @@ class ServersTest(common.HeatTestCase): tmpl['Resources']['WebServer']['Properties']['networks'] = ( [{'network': '6b1688bb-18a0-4754-ab05-19daaedc5871', 'allocate_network': 'auto'}]) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_validate_net_list_str', @@ -1517,7 +1519,7 @@ class ServersTest(common.HeatTestCase): tmpl['Resources']['WebServer']['Properties']['networks'] = ( [{'uuid': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'fixed_ip': '10.0.0.99'}]) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_validate_with_networks', @@ -1536,7 +1538,7 @@ class ServersTest(common.HeatTestCase): tmpl['Resources']['WebServer']['Properties']['networks'] = ( [{'network': 'public', 'fixed_ip': '10.0.0.99'}]) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_validate_with_networks', @@ -1559,7 +1561,7 @@ class ServersTest(common.HeatTestCase): {'port': ''}] tmpl['Resources']['WebServer']['Properties'][ 'security_groups'] = ['my_security_group'] - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_validate_net_security_groups', @@ -2176,7 +2178,7 @@ class ServersTest(common.HeatTestCase): self.assertRaises(resource.UpdateReplace, updater) @mock.patch.object(servers.Server, 'prepare_for_replace') - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_server_update_server_userdata_replace(self, mock_create, mock_replace): stack_name = 'update_udatrep' @@ -2192,7 +2194,7 @@ class ServersTest(common.HeatTestCase): updater = scheduler.TaskRunner(server.update, update_template) self.assertRaises(resource.UpdateReplace, updater) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_update_failed_server_not_replace(self, mock_create): stack_name = 'update_failed_server_not_replace' (tmpl, stack) = self._setup_test_stack(stack_name) @@ -2213,7 +2215,7 @@ class ServersTest(common.HeatTestCase): self.assertEqual((server.UPDATE, server.COMPLETE), server.state) @mock.patch.object(servers.Server, 'prepare_for_replace') - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_server_update_server_userdata_ignore(self, mock_create, mock_replace): stack_name = 'update_udatignore' @@ -2682,7 +2684,7 @@ class ServersTest(common.HeatTestCase): } ])) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_block_device_mapping_volume_size_valid_int(self, mock_create): stack_name = 'val_vsize_valid' @@ -2702,7 +2704,7 @@ class ServersTest(common.HeatTestCase): self.stub_VolumeConstraint_validate() self.assertIsNone(server.validate()) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_block_device_mapping_volume_size_valid_str(self, mock_create): stack_name = 'val_vsize_valid' @@ -2721,7 +2723,7 @@ class ServersTest(common.HeatTestCase): return_value=self.mock_flavor) self.assertIsNone(server.validate()) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_bd_mapping_volume_size_invalid_str(self, mock_create): stack_name = 'val_vsize_invalid' tmpl, stack = self._setup_test_stack(stack_name) @@ -2737,7 +2739,7 @@ class ServersTest(common.HeatTestCase): server.validate) self.assertIn("Value '10a' is not an integer", six.text_type(exc)) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_conflict_block_device_mapping_props(self, mock_create): stack_name = 'val_blkdev1' (tmpl, stack) = self._setup_test_stack(stack_name) @@ -2752,7 +2754,7 @@ class ServersTest(common.HeatTestCase): self.stub_SnapshotConstraint_validate() self.assertRaises(exception.ResourcePropertyConflict, server.validate) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_insufficient_block_device_mapping_props(self, mock_create): stack_name = 'val_blkdev2' @@ -2770,7 +2772,7 @@ class ServersTest(common.HeatTestCase): "for device mapping vdb") self.assertEqual(msg, six.text_type(ex)) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_block_device_mapping_with_empty_ref(self, mock_create): stack_name = 'val_blkdev2' (tmpl, stack) = self._setup_test_stack(stack_name) @@ -2789,7 +2791,7 @@ class ServersTest(common.HeatTestCase): self.stub_VolumeConstraint_validate() self.assertIsNone(server.validate()) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_without_image_or_bootable_volume(self, mock_create): stack_name = 'val_imgvol' (tmpl, stack) = self._setup_test_stack(stack_name) @@ -2808,7 +2810,7 @@ class ServersTest(common.HeatTestCase): 'for instance %s' % server.name) self.assertEqual(msg, six.text_type(ex)) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_invalid_image_status(self, mock_create): stack_name = 'test_stack' tmpl, stack = self._setup_test_stack(stack_name) @@ -2826,7 +2828,7 @@ class ServersTest(common.HeatTestCase): 'Image status is required to be active not sdfsdf.', six.text_type(error)) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_insufficient_ram_flavor(self, mock_create): stack_name = 'test_stack' tmpl, stack = self._setup_test_stack(stack_name) @@ -2847,7 +2849,7 @@ class ServersTest(common.HeatTestCase): 'has only 4.', six.text_type(error)) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_image_flavor_not_found(self, mock_create): stack_name = 'test_stack' tmpl, stack = self._setup_test_stack(stack_name) @@ -2864,7 +2866,7 @@ class ServersTest(common.HeatTestCase): self.assertIsNone(server.validate()) self.assertIsNone(server.validate()) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_insufficient_disk_flavor(self, mock_create): stack_name = 'test_stack' tmpl, stack = self._setup_test_stack(stack_name) @@ -2961,7 +2963,7 @@ class ServersTest(common.HeatTestCase): server.validate) self.assertIn(msg, six.text_type(exc)) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_with_both_blk_dev_map_and_blk_dev_map_v2(self, mock_create): stack_name = 'invalid_stack' @@ -3005,7 +3007,7 @@ class ServersTest(common.HeatTestCase): else: self.assertIsNone(server.validate()) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_conflict_block_device_mapping_v2_props(self, mock_create): stack_name = 'val_blkdev2' @@ -3018,7 +3020,7 @@ class ServersTest(common.HeatTestCase): raise_exc=exception.ResourcePropertyConflict, error_msg=error_msg) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_bdm_v2_with_empty_mapping(self, mock_create): stack_name = 'val_blkdev2' bdm_v2 = [{}] @@ -3028,20 +3030,20 @@ class ServersTest(common.HeatTestCase): raise_exc=exception.StackValidationFailed, error_msg=msg) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_bdm_v2_properties_success(self, mock_create): stack_name = 'bdm_v2_success' bdm_v2 = [{'volume_id': '1', 'boot_index': -1}] self._test_validate_bdm_v2(stack_name, bdm_v2) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_bdm_v2_with_unresolved_volume(self, mock_create): stack_name = 'bdm_v2_with_unresolved_vol' # empty string indicates that volume is unresolved bdm_v2 = [{'volume_id': ''}] self._test_validate_bdm_v2(stack_name, bdm_v2, with_image=False) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_bdm_v2_multiple_bootable_source(self, mock_create): stack_name = 'v2_multiple_bootable' # with two bootable sources: volume_id and image @@ -3051,7 +3053,7 @@ class ServersTest(common.HeatTestCase): raise_exc=exception.StackValidationFailed, error_msg=msg) - @mock.patch.object(nova.NovaClientPlugin, '_create') + @mock.patch.object(nova.NovaClientPlugin, 'client') def test_validate_bdm_v2_properties_no_bootable_vol(self, mock_create): stack_name = 'bdm_v2_no_bootable' bdm_v2 = [{'swap_size': 10}] @@ -3070,7 +3072,7 @@ class ServersTest(common.HeatTestCase): 'b': 2, 'c': 3, 'd': 4} - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_create_image_err', @@ -3091,7 +3093,7 @@ class ServersTest(common.HeatTestCase): tmpl.t['Resources']['WebServer']['Properties']['metadata'] = {'a': 1, 'b': 2, 'c': 3} - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_create_image_err', @@ -3110,7 +3112,7 @@ class ServersTest(common.HeatTestCase): props['tags'] = ['a'] # no need test with key_name props.pop('key_name') - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', side_effect=[ exception.InvalidServiceVersion(service='a', version='2.26')]) @@ -3131,7 +3133,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_too_many_personality(self): stack_name = 'srv_val' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) tmpl.t['Resources']['WebServer']['Properties'][ 'personality'] = {"/fake/path1": "fake contents1", @@ -3155,7 +3157,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_personality_okay(self): stack_name = 'srv_val' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) tmpl.t['Resources']['WebServer']['Properties'][ 'personality'] = {"/fake/path1": "fake contents1", @@ -3175,7 +3177,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_personality_file_size_okay(self): stack_name = 'srv_val' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) tmpl.t['Resources']['WebServer']['Properties'][ 'personality'] = {"/fake/path1": "a" * 10240} @@ -3190,7 +3192,7 @@ class ServersTest(common.HeatTestCase): def test_server_validate_personality_file_size_too_big(self): stack_name = 'srv_val' (tmpl, stack) = self._setup_test_stack(stack_name) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) tmpl.t['Resources']['WebServer']['Properties'][ @@ -3212,7 +3214,7 @@ class ServersTest(common.HeatTestCase): stack_name = 'srv_val' (tmpl, stack) = self._setup_test_stack( stack_name, server_with_sw_config_personality) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_create_image_err', @@ -3235,7 +3237,7 @@ class ServersTest(common.HeatTestCase): def test_resolve_attribute_console_url(self): server = self.fc.servers.list()[0] tmpl, stack = self._setup_test_stack('console_url_stack') - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) ws = servers.Server( 'WebServer', tmpl.resource_definitions(stack)['WebServer'], stack) @@ -4193,7 +4195,7 @@ class ServersTest(common.HeatTestCase): return_value=self.mock_image) mock_limits = self.patchobject(nova.NovaClientPlugin, 'absolute_limits') - self.patchobject(nova.NovaClientPlugin, '_create') + self.patchobject(nova.NovaClientPlugin, 'client') # Assert here checks that server resource validates, but actually # this call is Act stage of this test. We calling server.validate() @@ -4209,7 +4211,7 @@ class ServersTest(common.HeatTestCase): (tmpl, stack) = self._setup_test_stack(stack_name) tmpl.t['Resources']['WebServer']['Properties'][ 'personality'] = {"/fake/path1": "a" * 10} - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_create_image_err', @@ -4226,7 +4228,7 @@ class ServersTest(common.HeatTestCase): (tmpl, stack) = self._setup_test_stack(stack_name) tmpl.t['Resources']['WebServer']['Properties'][ 'personality'] = {"/fake/path1": "a" * 10} - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) resource_defns = tmpl.resource_definitions(stack) server = servers.Server('server_create_image_err', @@ -4244,7 +4246,7 @@ class ServersTest(common.HeatTestCase): tmpl = template.Template(t, files={'a_file': 'the content'}) stack = parser.Stack(utils.dummy_context(), "server_restore", tmpl) stack.store() - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self.patchobject(glance.GlanceClientPlugin, 'get_image', return_value=self.mock_image) @@ -4285,7 +4287,7 @@ class ServersTest(common.HeatTestCase): self.patchobject(stack['WebServer'], 'store_external_ports') - mock_plugin = self.patchobject(nova.NovaClientPlugin, '_create') + mock_plugin = self.patchobject(nova.NovaClientPlugin, 'client') mock_plugin.return_value = self.fc return_server = self.fc.servers.list()[1] @@ -4328,7 +4330,7 @@ class ServersTest(common.HeatTestCase): self.patchobject(stack['WebServer'], 'store_external_ports') - mock_plugin = self.patchobject(nova.NovaClientPlugin, '_create') + mock_plugin = self.patchobject(nova.NovaClientPlugin, 'client') mock_plugin.return_value = self.fc self.patchobject(glance.GlanceClientPlugin, 'get_image', return_value=self.mock_image) @@ -4379,7 +4381,7 @@ class ServersTest(common.HeatTestCase): utils.dummy_context(), 'snapshot_policy', tmpl) stack.store() rsrc = stack['WebServer'] - mock_plugin = self.patchobject(nova.NovaClientPlugin, '_create') + mock_plugin = self.patchobject(nova.NovaClientPlugin, 'client') mock_plugin.return_value = self.fc delete_server = self.patchobject(self.fc.servers, 'delete') delete_server.side_effect = nova_exceptions.NotFound(404) @@ -4454,10 +4456,6 @@ class ServerInternalPortTest(ServersTest): self.port_show = self.patchobject(neutronclient.Client, 'show_port') - self.server_get = self.patchobject(novaclient.servers.ServerManager, - 'get') - self.server_get.return_value = self.fc.servers.list()[1] - def neutron_side_effect(*args): if args[0] == 'subnet': return '1234' @@ -4921,6 +4919,7 @@ class ServerInternalPortTest(ServersTest): port_ids = [{'id': 1122}] server._data = {"internal_ports": jsonutils.dumps(port_ids)} + self.patchobject(nova.NovaClientPlugin, 'client') self.patchobject(nova.NovaClientPlugin, 'interface_detach') self.patchobject(nova.NovaClientPlugin, 'fetch_server') self.patchobject(nova.NovaClientPlugin.check_interface_detach.retry, @@ -4941,8 +4940,9 @@ class ServerInternalPortTest(ServersTest): external_port_ids = [{'id': '5566'}] server._data = {"internal_ports": jsonutils.dumps(port_ids), "external_ports": jsonutils.dumps(external_port_ids)} + + self.patchobject(nova.NovaClientPlugin, 'client') nova_server = self.fc.servers.list()[1] - server.client = mock.Mock() server.client().servers.get.return_value = nova_server self.patchobject(nova.NovaClientPlugin, 'interface_detach', @@ -4966,13 +4966,16 @@ class ServerInternalPortTest(ServersTest): external_port_ids = [{'id': '5566'}] server._data = {"internal_ports": jsonutils.dumps(port_ids), "external_ports": jsonutils.dumps(external_port_ids)} + self.patchobject(nova.NovaClientPlugin, 'client') self.patchobject(nova.NovaClientPlugin, 'fetch_server', side_effect=nova_exceptions.NotFound(404)) check_detach = self.patchobject(nova.NovaClientPlugin, 'check_interface_detach') + + self.patchobject(nova.NovaClientPlugin, 'client') nova_server = self.fc.servers.list()[1] nova_server.status = 'DELETED' - self.server_get.return_value = nova_server + server.client().servers.get.return_value = nova_server server.prepare_for_replace() check_detach.assert_not_called() @@ -4987,9 +4990,10 @@ class ServerInternalPortTest(ServersTest): server._data = {"internal_ports": jsonutils.dumps(port_ids), "external_ports": jsonutils.dumps(external_port_ids)} + self.patchobject(nova.NovaClientPlugin, 'client') nova_server = self.fc.servers.list()[1] nova_server.status = 'ERROR' - self.server_get.return_value = nova_server + server.client().servers.get.return_value = nova_server self.patchobject(nova.NovaClientPlugin, 'interface_detach', return_value=True) diff --git a/heat/tests/test_nokey.py b/heat/tests/test_nokey.py index ea375fb18c..876fb4b8c6 100644 --- a/heat/tests/test_nokey.py +++ b/heat/tests/test_nokey.py @@ -50,7 +50,6 @@ class NoKeyTest(common.HeatTestCase): resource_defns = stack.t.resource_definitions(stack) instance = instances.Instance('create_instance_name', resource_defns['WebServer'], stack) - # need to resolve the template functions metadata = instance.metadata_get() server_userdata = instance.client_plugin().build_userdata( @@ -59,7 +58,7 @@ class NoKeyTest(common.HeatTestCase): 'ec2-user') fc = fakes_nova.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=fc) self.patchobject(glance.GlanceClientPlugin, 'find_image_by_name_or_id', return_value=1234) diff --git a/heat/tests/test_server_tags.py b/heat/tests/test_server_tags.py index e564112f4b..2d484b160d 100644 --- a/heat/tests/test_server_tags.py +++ b/heat/tests/test_server_tags.py @@ -77,7 +77,7 @@ class ServerTagsTest(common.HeatTestCase): instance = instances.Instance('WebServer', resource_defns['WebServer'], self.stack) - self.patchobject(nova.NovaClientPlugin, '_create', + self.patchobject(nova.NovaClientPlugin, 'client', return_value=self.fc) self._mock_get_image_id_success('CentOS 5.2', 1) # need to resolve the template functions diff --git a/heat/tests/test_stack.py b/heat/tests/test_stack.py index ee368564a0..4a8caed9c0 100644 --- a/heat/tests/test_stack.py +++ b/heat/tests/test_stack.py @@ -1789,7 +1789,7 @@ class StackTest(common.HeatTestCase): # Mock objects so the query for flavors in server.FlavorConstraint # works for stack creation fc = fakes.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', return_value=fc) + self.patchobject(nova.NovaClientPlugin, 'client', return_value=fc) fc.flavors = mock.Mock() flavor = collections.namedtuple("Flavor", ["id", "name"]) diff --git a/heat/tests/test_template.py b/heat/tests/test_template.py index bf1498ef8e..34cc22a7bd 100644 --- a/heat/tests/test_template.py +++ b/heat/tests/test_template.py @@ -1227,7 +1227,7 @@ class TemplateTest(common.HeatTestCase): stk = stack.Stack(self.ctx, 'test_stack', template.Template(empty_template)) fc = fakes_nova.FakeClient() - self.patchobject(nova.NovaClientPlugin, '_create', return_value=fc) + self.patchobject(nova.NovaClientPlugin, 'client', return_value=fc) self.assertEqual(["nova1"], self.resolve(snippet, tmpl, stk)) def test_replace_string_values(self): diff --git a/heat/tests/test_validate.py b/heat/tests/test_validate.py index d2f885abf1..927eba4661 100644 --- a/heat/tests/test_validate.py +++ b/heat/tests/test_validate.py @@ -1555,7 +1555,7 @@ class ValidateTest(common.HeatTestCase): self.assertRaises(exception.StackValidationFailed, resource.validate) - @mock.patch('heat.engine.clients.os.nova.NovaClientPlugin._create') + @mock.patch('heat.engine.clients.os.nova.NovaClientPlugin.client') def test_invalid_security_groups_with_nics(self, mock_create): t = template_format.parse(test_template_invalid_secgroups) template = tmpl.Template(t, @@ -1571,7 +1571,7 @@ class ValidateTest(common.HeatTestCase): self.assertRaises(exception.ResourcePropertyConflict, resource.validate) - @mock.patch('heat.engine.clients.os.nova.NovaClientPlugin._create') + @mock.patch('heat.engine.clients.os.nova.NovaClientPlugin.client') def test_invalid_security_group_ids_with_nics(self, mock_create): t = template_format.parse(test_template_invalid_secgroupids) template = tmpl.Template(