class Miasma::Contrib::OpenStackApiCore

OpenStack API core helper

Constants

API_MAP

@return [Smash] Mapping to external service name

Attributes

identity[R]

@return [Miasma::Contrib::OpenStackApiCore::Authenticate]

Public Class Methods

new(creds) click to toggle source

Create a new api instance

@param creds [Smash] credential hash @return [self]

# File lib/miasma/contrib/open_stack.rb, line 272
def initialize(creds)
  @credentials = creds
  memo_key = "miasma_open_stack_identity_#{creds.checksum}"
  if(creds[:open_stack_identity_url].include?('v3'))
    @identity = memoize(memo_key, :direct) do
      identity_class('Authenticate::Version3').new(creds)
    end
  elsif(creds[:open_stack_identity_url].include?('v2'))
    @identity = memoize(memo_key, :direct) do
      identity_class('Authenticate::Version2').new(creds)
    end
  else
    # @todo allow attribute to override?
    raise ArgumentError.new('Failed to determine Identity service version')
  end
end

Public Instance Methods

api_token() click to toggle source

@return [String] API token

# File lib/miasma/contrib/open_stack.rb, line 333
def api_token
  identity.api_token
end
endpoint_for(api_name, region) click to toggle source

Provide end point URL for service

@param api_name [String] name of api @param region [String] region in use @return [String] public URL

# File lib/miasma/contrib/open_stack.rb, line 307
def endpoint_for(api_name, region)
  api = self.class.const_get(:API_MAP)[api_name]
  srv = identity.service_catalog.detect do |info|
    info[:name] == api
  end
  unless(srv)
    raise NotImplementedError.new("No API mapping found for `#{api_name}`")
  end
  if(region)
    point = srv[:endpoints].detect do |endpoint|
      endpoint[:region].to_s.downcase == region.to_s.downcase
    end
  else
    point = srv[:endpoints].first
  end
  if(point)
    point.fetch(
      :publicURL,
      point[:url]
    )
  else
    raise KeyError.new("Lookup failed for `#{api_name}` within region `#{region}`")
  end
end
identity_class(i_name) click to toggle source

@return [Class] class from instance class, falls back to parent

# File lib/miasma/contrib/open_stack.rb, line 290
def identity_class(i_name)
  [self.class, Miasma::Contrib::OpenStackApiCore].map do |klass|
    i_name.split('::').inject(klass) do |memo, key|
      if(memo.const_defined?(key))
        memo.const_get(key)
      else
        break
      end
    end
  end.compact.first
end