def convert()

in syndicate/core/transform/terraform/converter/tf_dynamo_db_converter.py [0:0]


    def convert(self, name, resource):
        validate_params(name, resource, DYNAMODB_TABLE_REQUIRED_PARAMS)

        hash_key_name = resource.get('hash_key_name')
        hash_key_type = resource.get('hash_key_type')
        sort_key_name = resource.get('sort_key_name')
        sort_key_type = resource.get('sort_key_type')
        read_capacity = resource.get('read_capacity', 1)
        write_capacity = resource.get('write_capacity', 1)
        stream_view_type = resource.get('stream_view_type')

        global_indexes = resource.get('global_indexes', [])
        local_indexes = resource.get('local_indexes', [])

        attributes = self._extract_attributes(global_indexes=global_indexes,
                                              local_indexes=local_indexes,
                                              hash_key_type=hash_key_type,
                                              hash_key=hash_key_name,
                                              sort_key_name=sort_key_name,
                                              sort_key_type=sort_key_type)

        dynamo_db_template = generate_tf_template_for_dynamo_table(
            hash_key=hash_key_name,
            range_key=sort_key_name,
            read_capacity=read_capacity,
            write_capacity=write_capacity,
            table_name=name,
            stream_view_type=stream_view_type,
            attributes=attributes,
            global_indexes=global_indexes,
            local_indexes=local_indexes)
        self.template.add_aws_dynamodb_table(meta=dynamo_db_template)

        autoscaling = resource.get('autoscaling', [])
        for aut in autoscaling:
            validate_params(name, aut, AUTOSCALING_REQUIRED_PARAMS)

            max_capacity = str(aut.get('max_capacity'))
            min_capacity = str(aut.get('min_capacity'))
            dimension = aut.get('dimension')
            resource_name = aut.get('resource_name')
            role_name = aut.get('role_name')

            tf_target_resource_name = build_terraform_resource_name(name,
                                                                    'scalable_target')
            resource_id = DynamoDBResource.build_res_id(dimension=dimension,
                                                        resource_name=resource_name,
                                                        table_name=name)
            target = dynamodb_scalable_target(resource_id=resource_id,
                                              scalable_dimension=dimension,
                                              min_capacity=min_capacity,
                                              max_capacity=max_capacity,
                                              role_name=role_name,
                                              tf_target_resource_name=tf_target_resource_name)

            autoscaling_policy = aut.get('config')
            if autoscaling_policy:
                target_utilization = autoscaling_policy['target_utilization']
                scale_in_cooldown = autoscaling_policy.get('scale_in_cooldown')
                scale_out_cooldown = autoscaling_policy.get(
                    'scale_out_cooldown')
                metric_type = 'DynamoDBWriteCapacityUtilization' \
                    if 'Write' in dimension \
                    else 'DynamoDBReadCapacityUtilization'
                tf_resource_name = build_terraform_resource_name(
                    'dynamodb-test-table_read_policy', resource_name)
                target_policy = dynamo_db_autoscaling_target_policy(
                    target_name=tf_target_resource_name,
                    target_value=target_utilization,
                    predefined_metric_type=metric_type,
                    scale_in_cooldown=scale_in_cooldown,
                    scale_out_cooldown=scale_out_cooldown,
                    tf_resource_name=tf_resource_name)
                self.template.add_aws_appautoscaling_target(meta=target)
                self.template.add_aws_appautoscaling_policy(meta=target_policy)