Sha256: d7c4e9aadd6c8a32e383ed6e2579c25b482eecf2b2404349bd4f1cec8f42d599

Contents?: true

Size: 1.84 KB

Versions: 14

Compression:

Stored size: 1.84 KB

Contents

class BuildCloud::S3Bucket

    include ::BuildCloud::Component

    @@objects = []

    def initialize ( fog_interfaces, log, options = {} )

        @s3      = fog_interfaces[:s3]
        @log     = log
        @options = options

        @log.debug( options.inspect )

        required_options(:key, :location)

    end

    def create
        
        policy = @options.delete(:policy)
        
        unless exists?

            @log.info( "Creating new S3 bucket #{@options[:key]}" )

            bucket = @s3.directories.new( @options )
            bucket.save

            @log.debug( bucket.inspect )
        end
        
        rationalise_policies( policy )

    end

    def read
        @s3.directories.select { |d| d.key == @options[:key] }.first
    end

    alias_method :fog_object, :read

    def delete

        return unless exists?

        @log.info( "Deleting S3 bucket #{@options[:key]}" )

        fog_object.destroy

    end
    
    def rationalise_policies( policy )

        policy = JSON.parse(policy) unless policy.nil?
        @log.debug("Policy inspect #{policy.inspect}")
        
        begin
            @log.debug("Inspect #{@s3.get_bucket_policy(fog_object.key)}")
            current_policy = @s3.get_bucket_policy(fog_object.key)
        rescue Excon::Errors::NotFound
            current_policy = nil
        end

        @log.debug("Current Policy inspect #{current_policy.inspect}")
        
        if policy.nil? and current_policy.nil?
            return
        elsif policy.nil? and current_policy.any?
            @log.info("Existing policy here, deleting it")
            @s3.delete_bucket_policy(fog_object.key)
        elsif policy != current_policy
            @log.info( "For bucket #{fog_object.key} adding/updating policy #{p}" )
            @s3.put_bucket_policy( fog_object.key, policy )
        end
        
    end

end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
build-cloud-1.1.7 lib/build-cloud/s3bucket.rb
build-cloud-1.1.6 lib/build-cloud/s3bucket.rb
build-cloud-1.1.5 lib/build-cloud/s3bucket.rb
build-cloud-1.1.4 lib/build-cloud/s3bucket.rb
build-cloud-1.1.3 lib/build-cloud/s3bucket.rb
build-cloud-1.1.2 lib/build-cloud/s3bucket.rb
build-cloud-1.0.1 lib/build-cloud/s3bucket.rb
build-cloud-1.1.1 lib/build-cloud/s3bucket.rb
build-cloud-1.0.0 lib/build-cloud/s3bucket.rb
build-cloud-0.0.24 lib/build-cloud/s3bucket.rb
build-cloud-0.0.23 lib/build-cloud/s3bucket.rb
build-cloud-0.0.22 lib/build-cloud/s3bucket.rb
build-cloud-0.0.21 lib/build-cloud/s3bucket.rb
build-cloud-0.0.20 lib/build-cloud/s3bucket.rb