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