Make the name of a Zaqar queue optional
There's no reason to force the user to specify the name of a Zaqar queue. In fact, doing so makes it difficult for users to create multiple instance of the same template without having all of the messages go into a single queue (and without deleting the shared queue when one of the stacks is deleted). We now autogenerate a sensible randomised name if none is provided. Change-Id: I5195d8c0dd413a8f1bd28c2a8ef7a3191c74f882 Partial-Bug: #1637304
This commit is contained in:
parent
015c3c228a
commit
01487ebbbb
@ -49,8 +49,7 @@ class ZaqarQueue(resource.Resource):
|
||||
properties_schema = {
|
||||
NAME: properties.Schema(
|
||||
properties.Schema.STRING,
|
||||
_("Name of the queue instance to create."),
|
||||
required=True),
|
||||
_("Name of the queue instance to create.")),
|
||||
METADATA: properties.Schema(
|
||||
properties.Schema.MAP,
|
||||
description=_("Arbitrary key/value metadata to store "
|
||||
@ -81,7 +80,10 @@ class ZaqarQueue(resource.Resource):
|
||||
}
|
||||
|
||||
def physical_resource_name(self):
|
||||
return self.properties[self.NAME]
|
||||
name = self.properties[self.NAME]
|
||||
if name is not None:
|
||||
return name
|
||||
return super(ZaqarQueue, self).physical_resource_name()
|
||||
|
||||
def handle_create(self):
|
||||
"""Create a zaqar message queue."""
|
||||
@ -126,8 +128,11 @@ class ZaqarQueue(resource.Resource):
|
||||
return {self.METADATA: metadata}
|
||||
|
||||
def parse_live_resource_data(self, resource_properties, resource_data):
|
||||
name = self.resource_id
|
||||
if name == super(ZaqarQueue, self).physical_resource_name():
|
||||
name = None
|
||||
return {
|
||||
self.NAME: self.resource_id,
|
||||
self.NAME: name,
|
||||
self.METADATA: resource_data[self.METADATA]
|
||||
}
|
||||
|
||||
|
@ -107,6 +107,32 @@ class ZaqarMessageQueueTest(common.HeatTestCase):
|
||||
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_create_default_name(self):
|
||||
t = template_format.parse(wp_template)
|
||||
del t['Resources']['MyQueue2']['Properties']['name']
|
||||
self.parse_stack(t)
|
||||
|
||||
queue = self.stack['MyQueue2']
|
||||
self.m.StubOutWithMock(queue, 'client')
|
||||
queue.client().MultipleTimes().AndReturn(self.fc)
|
||||
|
||||
name_match = utils.PhysName(self.stack.name, 'MyQueue2')
|
||||
self.m.StubOutWithMock(self.fc, 'queue')
|
||||
self.fc.queue(name_match, auto_create=False).WithSideEffects(FakeQueue)
|
||||
|
||||
self.m.ReplayAll()
|
||||
|
||||
scheduler.TaskRunner(queue.create)()
|
||||
|
||||
queue_name = queue.physical_resource_name()
|
||||
self.assertEqual(name_match, queue_name)
|
||||
|
||||
self.fc.api_url = 'http://127.0.0.1:8888/v1'
|
||||
self.assertEqual('http://127.0.0.1:8888/v1/queues/' + queue_name,
|
||||
queue.FnGetAtt('href'))
|
||||
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_delete(self):
|
||||
t = template_format.parse(wp_template)
|
||||
self.parse_stack(t)
|
||||
|
Loading…
Reference in New Issue
Block a user