# License for the specific language governing permissions and limitations
# under the License.
-import binascii
-import os
from urlparse import urlparse
from heat.common import exception
from heat.engine import resource
+from heat.common import short_id
from heat.openstack.common import log as logging
from heat.engine import clients
return {'Error':
'S3 services unavailable because of missing swiftclient.'}
- @staticmethod
- def _create_container_name(resource_name):
- return 'heat-%s-%s' % (resource_name,
- binascii.hexlify(os.urandom(10)))
+ def _create_container_name(self):
+ return '%s-%s-%s' % (self.stack.name, self.name,
+ short_id.generate_id())
def handle_create(self):
"""Create a bucket."""
- container = S3Bucket._create_container_name(
- self.physical_resource_name())
+ container = self._create_container_name()
headers = {}
logger.debug('S3Bucket create container %s with headers %s' %
(container, headers))
self.m.StubOutWithMock(swiftclient.Connection, 'delete_container')
self.m.StubOutWithMock(swiftclient.Connection, 'get_auth')
- self.container_pattern = 'heat-test_stack.test_resource-[0-9a-f]+'
+ self.container_pattern = 'test_stack-test_resource-[0-9a-z]+'
def tearDown(self):
self.m.UnsetStubs()
@skip_if(swiftclient is None, 'unable to import swiftclient')
def test_create_container_name(self):
- self.m.UnsetStubs()
+ self.m.ReplayAll()
+ t = self.load_template()
+ stack = self.parse_stack(t)
+ resource = s3.S3Bucket('test_resource',
+ t['Resources']['S3Bucket'],
+ stack)
self.assertTrue(re.match(self.container_pattern,
- s3.S3Bucket._create_container_name(
- 'test_stack.test_resource')))
+ resource._create_container_name()))
@skip_if(swiftclient is None, 'unable to import swiftclient')
def test_attributes(self):