class LogStash::Outputs::Keystone::KeystoneClient

Public Class Methods

new(url, insecure=false) click to toggle source
# File lib/logstash/outputs/keystone/keystone_client.rb, line 33
def initialize(url, insecure=false)
  @logger = Cabin::Channel.get(LogStash)
  @uri = URI.parse(url)
  @http = Net::HTTP.new(@uri.host, @uri.port)
  if @uri.scheme == 'https'
    @http.use_ssl = true
    @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if insecure
  end
end

Public Instance Methods

authenticate(username, user_domain_name, password, project_name, project_domain_name) click to toggle source
# File lib/logstash/outputs/keystone/keystone_client.rb, line 43
def authenticate(username, user_domain_name, password, project_name, project_domain_name)
  auth_hash = generate_hash(username, user_domain_name, password, project_name, project_domain_name)
  post_header = {
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    }
  response = request('/auth/tokens', post_header, auth_hash)
  handle_response(response)
end

Private Instance Methods

generate_hash(username, user_domain_name, password, project_name, project_domain_name) click to toggle source
# File lib/logstash/outputs/keystone/keystone_client.rb, line 62
def generate_hash(username, user_domain_name, password, project_name, project_domain_name)
  {
    "auth"=>{
      "identity"=>{
        "methods"=>["password"],
        "password"=>{
          "user"=>{
            "domain"=>{"name"=>user_domain_name},
            "name"=>username,
            "password"=>password
          }
        }
      },
      "scope"=>{
        "project"=>{
          "domain"=>{"name"=>project_domain_name},
          "name"=>project_name
        }
      }
    }
  }.to_json
end
handle_response(response) click to toggle source
# File lib/logstash/outputs/keystone/keystone_client.rb, line 85
def handle_response(response)
  case response
  when Net::HTTPCreated
    expires_at = DateTime.parse(
      JSON.parse(response.body)["token"]["expires_at"])

    @logger.debug("Authentication succeed: code=#{response.code}, "\
      "auth-token=#{response['X-Subject-Token']}, "\
      "expires_at=#{expires_at.to_time}")

    {:token => response['X-Subject-Token'],
      :expires_at => expires_at}
  else
    @logger.info("Authentication failed. Response=#{response}")
  end
end
request(path, header, body) click to toggle source
# File lib/logstash/outputs/keystone/keystone_client.rb, line 55
def request(path, header, body)
  @logger.debug('Sending authentication to ', :url => @uri.to_s)
  post_request = Net::HTTP::Post.new(@uri.request_uri + path, header)
  post_request.body = body
  @http.request(post_request)
end