class LogStash::Outputs::S3::WriteBucketPermissionValidator

Attributes

logger[R]

Public Class Methods

new(logger) click to toggle source
# File lib/logstash/outputs/s3/write_bucket_permission_validator.rb, line 12
def initialize(logger)
  @logger = logger
end

Public Instance Methods

valid?(bucket_resource, upload_options = {}) click to toggle source
# File lib/logstash/outputs/s3/write_bucket_permission_validator.rb, line 16
def valid?(bucket_resource, upload_options = {})
  begin
    upload_test_file(bucket_resource, upload_options)
    true
  rescue StandardError => e
    logger.error("Error validating bucket write permissions!",
      :message => e.message,
      :class => e.class.name,
      :backtrace => e.backtrace
      )
    false
  end
end

Private Instance Methods

upload_test_file(bucket_resource, upload_options = {}) click to toggle source
# File lib/logstash/outputs/s3/write_bucket_permission_validator.rb, line 31
def upload_test_file(bucket_resource, upload_options = {})
  generated_at = Time.now

  key = "logstash-programmatic-access-test-object-#{generated_at}"
  content = "Logstash permission check on #{generated_at}, by #{Socket.gethostname}"

  begin
    f = Stud::Temporary.file
    f.write(content)
    f.fsync

    obj = bucket_resource.object(key)
    obj.upload_file(f, upload_options)

    begin
      obj.delete
    rescue
      # Try to remove the files on the remote bucket,
      # but don't raise any errors if that doesn't work.
      # since we only really need `putobject`.
    end
  ensure
    f.close
    FileUtils.rm_rf(f.path)
  end
end