Don't store rsrc_data before zaqar queue created
Store rsrc_data 'metadata_queue_id' after zaqar queue created, to avoid unnecessary queue delete calling when delete nova server. Change-Id: Ib1f7759ea66794ebd57fcfcea6b9e596b0e2c1c3 Closes-Bug: #1697682
This commit is contained in:
parent
1c8c7a7914
commit
f47d898932
|
@ -77,6 +77,7 @@ class BaseServer(stack_user.StackUser):
|
|||
for k in existing:
|
||||
existing[k] = None
|
||||
|
||||
queue_id = self.data().get('metadata_queue_id')
|
||||
if self.transport_poll_server_heat(props):
|
||||
occ.update({'heat': {
|
||||
'user_id': self._get_user_id(),
|
||||
|
@ -88,8 +89,7 @@ class BaseServer(stack_user.StackUser):
|
|||
collectors.append('heat')
|
||||
|
||||
elif self.transport_zaqar_message(props):
|
||||
queue_id = self.physical_resource_name()
|
||||
self.data_set('metadata_queue_id', queue_id)
|
||||
queue_id = queue_id or self.physical_resource_name()
|
||||
occ.update({'zaqar': {
|
||||
'user_id': self._get_user_id(),
|
||||
'password': self.password,
|
||||
|
@ -123,20 +123,19 @@ class BaseServer(stack_user.StackUser):
|
|||
self.data_set('metadata_object_name', object_name)
|
||||
|
||||
collectors.append('request')
|
||||
occ.update({'request': {
|
||||
'metadata_url': url}})
|
||||
occ.update({'request': {'metadata_url': url}})
|
||||
|
||||
collectors.append('local')
|
||||
self.metadata_set(meta)
|
||||
|
||||
# push replacement polling config to any existing push-based sources
|
||||
queue_id = self.data().get('metadata_queue_id')
|
||||
if queue_id:
|
||||
zaqar_plugin = self.client_plugin('zaqar')
|
||||
zaqar = zaqar_plugin.create_for_tenant(
|
||||
self.stack.stack_user_project_id, self._user_token())
|
||||
queue = zaqar.queue(queue_id)
|
||||
queue.post({'body': meta, 'ttl': zaqar_plugin.DEFAULT_TTL})
|
||||
self.data_set('metadata_queue_id', queue_id)
|
||||
|
||||
object_name = self.data().get('metadata_object_name')
|
||||
if object_name:
|
||||
|
|
|
@ -16,6 +16,7 @@ import contextlib
|
|||
import copy
|
||||
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 oslo_serialization import jsonutils
|
||||
|
@ -977,7 +978,7 @@ class ServersTest(common.HeatTestCase):
|
|||
'deployments': []
|
||||
}, server.metadata_get())
|
||||
|
||||
def _server_create_software_config_zaqar(self, md=None):
|
||||
def _prepare_for_server_create(self, md=None):
|
||||
self.patchobject(nova.NovaClientPlugin, '_create',
|
||||
return_value=self.fc)
|
||||
return_server = self.fc.servers.list()[1]
|
||||
|
@ -994,14 +995,20 @@ class ServersTest(common.HeatTestCase):
|
|||
server = servers.Server('WebServer',
|
||||
resource_defns['WebServer'], stack)
|
||||
self.patchobject(server, 'store_external_ports')
|
||||
self.patchobject(self.fc.servers, 'create',
|
||||
return_value=return_server)
|
||||
|
||||
return server, stack
|
||||
|
||||
def _server_create_software_config_zaqar(self, md=None):
|
||||
server, stack = self._prepare_for_server_create(md)
|
||||
|
||||
zcc = self.patchobject(zaqar.ZaqarClientPlugin, 'create_for_tenant')
|
||||
zc = mock.Mock()
|
||||
zcc.return_value = zc
|
||||
queue = mock.Mock()
|
||||
zc.queue.return_value = queue
|
||||
self.patchobject(self.fc.servers, 'create',
|
||||
return_value=return_server)
|
||||
|
||||
scheduler.TaskRunner(server.create)()
|
||||
|
||||
metadata_queue_id = server.data().get('metadata_queue_id')
|
||||
|
@ -1037,6 +1044,30 @@ class ServersTest(common.HeatTestCase):
|
|||
'deployments': []
|
||||
}, server.metadata_get())
|
||||
|
||||
def test_create_delete_no_zaqar_service(self):
|
||||
zcc = self.patchobject(zaqar.ZaqarClientPlugin, 'create_for_tenant')
|
||||
zcc.side_effect = ks_exceptions.EndpointNotFound
|
||||
server, stack = self._prepare_for_server_create()
|
||||
creator = scheduler.TaskRunner(server.create)
|
||||
self.assertRaises(exception.ResourceFailure, creator)
|
||||
self.assertEqual((server.CREATE, server.FAILED), server.state)
|
||||
self.assertEqual({
|
||||
'os-collect-config': {
|
||||
'zaqar': {
|
||||
'user_id': '1234',
|
||||
'password': server.password,
|
||||
'auth_url': 'http://server.test:5000/v2.0',
|
||||
'project_id': '8888',
|
||||
'queue_id': mock.ANY
|
||||
},
|
||||
'collectors': ['ec2', 'zaqar', 'local']
|
||||
},
|
||||
'deployments': []
|
||||
}, server.metadata_get())
|
||||
|
||||
scheduler.TaskRunner(server.delete)()
|
||||
self.assertEqual((server.DELETE, server.COMPLETE), server.state)
|
||||
|
||||
def test_server_create_software_config_zaqar_metadata(self):
|
||||
md = {'os-collect-config': {'polling_interval': 10}}
|
||||
queue_id, server = self._server_create_software_config_zaqar(md=md)
|
||||
|
|
Loading…
Reference in New Issue