module Misty::Microversion

Handles OpenStack Services supporting Microversion feature

Public Instance Methods

microversion_header(version) click to toggle source
# File lib/misty/microversion.rb, line 18
def microversion_header(version)
  {'X-Openstack-API-Version' => "#{service_types[0]} #{version}" }
end
set_version(version) click to toggle source
# File lib/misty/microversion.rb, line 4
def set_version(version)
  case version
  when nil || ''
    # TODO:
    # version_discovery
  when 'latest'
    'latest'
  when /^([1-9]+\d*)\.([1-9]+\d*)$/
    version if version_match(version)
  else
    raise VersionError, ":version must be '<number.number>' or 'latest'"
  end
end

Private Instance Methods

get_microversion() click to toggle source
# File lib/misty/microversion.rb, line 24
def get_microversion
  project = self.class.to_s.split('::')[-2].downcase.to_sym
  s = Misty.services.find {|service| service.project == project}
  raise RuntimeError, 'No microversion found!' unless s&.microversion
  s.microversion
end
microversion() click to toggle source
# File lib/misty/microversion.rb, line 31
def microversion
  @microversion ||= get_microversion
end
version_match(number) click to toggle source
# File lib/misty/microversion.rb, line 48
def version_match(number)
  versions.each do |version|
    return number if version['min_version'] <= number && version['version'] >= number
  end
  raise VersionError, "Version #{number} is out of range of available versions: #{versions}"
end
versions() click to toggle source
# File lib/misty/microversion.rb, line 35
def versions
  @versions ||= versions_fetch
end
versions_fetch() click to toggle source
# File lib/misty/microversion.rb, line 39
def versions_fetch
  response = http_get('/', {'Accept'=> 'application/json'})
  raise VersionError, "Code: #{response.code}, Message: #{response.msg}" unless response.code =~ /2??/
  data = response.body.is_a?(Hash) ? response.body : JSON.parse(response.body)
  list = data['versions']
  raise VersionError, 'Missing version data' unless list
  list
end