in syndicate/core/resources/dynamo_db_resource.py [0:0]
def _create_dynamodb_table_from_meta(self, name, meta):
""" Create Dynamo DB table from meta description after parameter
validation.
:type name: str
:type meta: dict
"""
validate_params(name, meta, DYNAMODB_TABLE_REQUIRED_PARAMS)
res = self.dynamodb_conn.describe_table(name)
autoscaling_config = meta.get('autoscaling')
if res:
_LOG.warn('%s table exists.', name)
if autoscaling_config:
res['Autoscaling'] = self._describe_autoscaling(
autoscaling_config,
name)
response = self.describe_table(name, meta, res)
arn = list(response.keys())[0]
response[arn]['resource_meta']['external'] = True
return response
self.dynamodb_conn.create_table(
name, meta['hash_key_name'], meta['hash_key_type'],
meta.get('sort_key_name'), meta.get('sort_key_type'),
meta.get('read_capacity'), meta.get('write_capacity'),
global_indexes=meta.get('global_indexes'),
local_indexes=meta.get('local_indexes'),
tags=meta.get('tags'),
wait=True)
response = self.dynamodb_conn.describe_table(name)
if not response:
raise AssertionError('Table with name {0} has not been created!'
.format(name))
# enabling stream if present
stream_view_type = meta.get('stream_view_type')
if stream_view_type:
stream = self.dynamodb_conn.get_table_stream_arn(name)
if stream:
_LOG.warn('Stream %s exists.', name)
else:
try:
self.dynamodb_conn.enable_table_stream(name,
stream_view_type)
except ClientError as e:
# handle specific case for fantom stream enabling
if 'ResourceInUseException' in str(e):
_LOG.warn('Stream enabling currently in progress,'
' table: %s', name)
else:
raise e
if autoscaling_config:
_LOG.debug('Found autoscaling configuration for resource %s', name)
sc_res = self._enable_autoscaling(autoscaling_config, name)
response['Autoscaling'] = sc_res
_LOG.info('Created table %s.', name)
return self.describe_table(name, meta, response)