Sha256: 4e3c01a54b35cb340cfe16a769d2a61c386abdffa4bdfc4afc9e0f7e23d911b1

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

require "aws-sdk"

module Snapshotar
  module Storage

    ##
    # This snapshot storage type connects to amazon s3 via *aws-sdk gem*.
    class S3Storage

      def initialize #:nodoc:

        raise ArgumentError, "You should set ENV['AWS_ACCESS_KEY_ID'] to a valid value" unless ENV['AWS_ACCESS_KEY_ID']
        raise ArgumentError, "You should set ENV['AWS_SECRET_ACCESS_KEY'] to a valid value" unless ENV['AWS_SECRET_ACCESS_KEY']
        raise ArgumentError, "You should set ENV['AWS_SNAPSHOTAR_BUCKET'] to a aws bucket name used only for snapshotting" unless ENV['AWS_SNAPSHOTAR_BUCKET']

        p "Running S3 with key: #{ENV['AWS_ACCESS_KEY_ID']}, secret: #{ENV['AWS_SECRET_ACCESS_KEY']}, bucket: #{ENV['AWS_SNAPSHOTAR_BUCKET']}"

        @s3 = AWS::S3.new(
          access_key_id: ENV['AWS_ACCESS_KEY_ID'],
          secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
          region: ENV['AWS_REGION'])

        @bucket = @s3.buckets[ENV['AWS_SNAPSHOTAR_BUCKET']]
      end

      ##
      # lists available snapshots in this storage.
      #
      # returns:: array of filenames
      #
      def index
        @bucket.objects.map{|obj| obj.key}
      end

      ##
      # loads a snapshot specified by the given +filename+.
      #
      # Params::
      #  +filename+:: name of the snapshot to load
      #
      # returns:: still seralized json
      #
      def show(filename)
        @bucket.objects[filename]
      end

      ##
      # creates a snapshot specified by the given +filename+ with data provided
      #
      # Params::
      #  +filename+:: name of the snapshot to create
      #  +serialized_tree+:: json serialized data
      #
      def create(filename,serialized_tree)
        @bucket.objects[filename].write(serialized_tree)
      end

      ##
      # deletes a snapshot specified by the given +filename+.
      #
      # Params::
      #  +filename+:: name of the snapshot to delete
      #
      def delete(filename)
        @bucket.objects[filename].delete
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
snapshotar-0.0.4 lib/snapshotar/storage/s3_storage.rb
snapshotar-0.0.3 lib/snapshotar/storage/s3_storage.rb
snapshotar-0.0.2 lib/snapshotar/storage/s3_storage.rb
snapshotar-0.0.1 lib/snapshotar/storage/s3_storage.rb