[rackspace|identity] updated service catalog to return global endpoint if specified region endpoint does not exist
This commit is contained in:
parent
ff678b48ba
commit
4ea81036c4
|
@ -15,33 +15,32 @@ module Fog
|
||||||
catalog.collect {|s| s["name"]}
|
catalog.collect {|s| s["name"]}
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_endpoints(service_type, service_net=false)
|
def get_endpoints(service_name, service_net=false)
|
||||||
h = catalog.find {|service| service["name"] == service_type.to_s}
|
h = catalog.find {|service| service["name"] == service_name.to_s}
|
||||||
return {} unless h
|
return {} unless h
|
||||||
|
|
||||||
key = network_type_key(service_net)
|
key = network_type_key(service_net)
|
||||||
h["endpoints"].select {|e| e[key]}
|
h["endpoints"].select {|e| e[key]}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def display_service_regions(service_type, service_net=false)
|
def display_service_regions(service_name, service_net=false)
|
||||||
endpoints = get_endpoints(service_type, service_net)
|
endpoints = get_endpoints(service_name, service_net)
|
||||||
regions = endpoints.collect do |e|
|
regions = endpoints.collect do |e|
|
||||||
e["region"] ? ":#{e["region"].downcase}" : ":global"
|
e["region"] ? ":#{e["region"].downcase}" : ":global"
|
||||||
end
|
end
|
||||||
regions.join(", ")
|
regions.join(", ")
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_endpoint(service_type, region=nil, service_net=false)
|
def get_endpoint(service_name, region=nil, service_net=false)
|
||||||
service_region = region_key(region)
|
service_region = region_key(region)
|
||||||
|
|
||||||
network_type = network_type_key(service_net)
|
network_type = network_type_key(service_net)
|
||||||
|
|
||||||
endpoints = get_endpoints(service_type, service_net)
|
endpoints = get_endpoints(service_name, service_net)
|
||||||
raise "Unable to locate endpoint for service #{service_type}" if endpoints.empty?
|
raise "Unable to locate endpoint for service #{service_name}" if endpoints.empty?
|
||||||
|
|
||||||
if endpoints.size > 1 && region.nil?
|
if endpoints.size > 1 && region.nil?
|
||||||
raise "There are multiple endpoints available for #{service_type}. Please specify one of the following regions: #{display_service_regions(service_type)}."
|
raise "There are multiple endpoints available for #{service_name}. Please specify one of the following regions: #{display_service_regions(service_name)}."
|
||||||
end
|
end
|
||||||
|
|
||||||
# select multiple endpoints
|
# select multiple endpoints
|
||||||
|
@ -53,7 +52,7 @@ module Fog
|
||||||
return endpoints[0][network_type]
|
return endpoints[0][network_type]
|
||||||
end
|
end
|
||||||
|
|
||||||
raise "Unknown region :#{region} for service #{service_type}. Please use one of the following regions: #{display_service_regions(service_type)}"
|
raise "Unknown region :#{region} for service #{service_name}. Please use one of the following regions: #{display_service_regions(service_name)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def reload
|
def reload
|
||||||
|
|
|
@ -81,11 +81,6 @@ Shindo.tests('Rackspace | Compute', ['rackspace']) do
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
||||||
returns(true, "uses custom endpoint") { (@service.instance_variable_get("@uri").host =~ /my-custom-endpoint\.com/) != nil }
|
returns(true, "uses custom endpoint") { (@service.instance_variable_get("@uri").host =~ /my-custom-endpoint\.com/) != nil }
|
||||||
end
|
end
|
||||||
tests('rackspace_servicenet') do
|
|
||||||
@service = Fog::Compute::Rackspace.new :rackspace_servicenet => true
|
|
||||||
returns(true, "auth token populated") { !@service.send(:auth_token).nil? }
|
|
||||||
returns(true, "uses custom endpoint") { (@service.instance_variable_get("@uri").host =~ /snet-/) != nil }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
tests('reauthentication') do
|
tests('reauthentication') do
|
||||||
|
|
|
@ -61,24 +61,39 @@ Shindo.tests('Fog::Rackspace::ServiceCatalog | users', ['rackspace']) do
|
||||||
end
|
end
|
||||||
|
|
||||||
tests('with one endpoint') do
|
tests('with one endpoint') do
|
||||||
tests('no region specified').returns("https://blockstorage.api.rackspacecloud.com/v1/777") do
|
tests('catalog contains global endpoint') do
|
||||||
list = [{"type"=>"volume", "endpoints"=>[{"tenantId"=>"777", "publicURL"=>"https://blockstorage.api.rackspacecloud.com/v1/777"}], "name"=>"cloudBlockStorage"}]
|
catalog_hash = [{"type"=>"volume", "endpoints"=>[{"tenantId"=>"777", "publicURL"=>"https://blockstorage.api.rackspacecloud.com/v1/777"}], "name"=>"cloudBlockStorage"}]
|
||||||
service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => list)
|
@service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => catalog_hash)
|
||||||
service_catalog.get_endpoint(:cloudBlockStorage)
|
|
||||||
|
tests('no region specifed').returns("https://blockstorage.api.rackspacecloud.com/v1/777") do
|
||||||
|
@service_catalog.get_endpoint(:cloudBlockStorage)
|
||||||
end
|
end
|
||||||
tests('specify region as :global').returns("https://blockstorage.api.rackspacecloud.com/v1/777") do
|
tests('region specifed').returns("https://blockstorage.api.rackspacecloud.com/v1/777") do
|
||||||
list = [{"type"=>"volume", "endpoints"=>[{"tenantId"=>"777", "publicURL"=>"https://blockstorage.api.rackspacecloud.com/v1/777"}], "name"=>"cloudBlockStorage"}]
|
@service_catalog.get_endpoint(:cloudBlockStorage, :ord)
|
||||||
service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => list)
|
end
|
||||||
service_catalog.get_endpoint(:cloudBlockStorage, :global)
|
end
|
||||||
|
tests('catalog does not contain global endpoint') do
|
||||||
|
catalog_hash = [{"type"=>"volume", "endpoints"=>[{"region" => "ORD", "tenantId"=>"777", "publicURL"=>"https://ord.blockstorage.api.rackspacecloud.com/v1/777"}], "name"=>"cloudBlockStorage"}]
|
||||||
|
@service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => catalog_hash)
|
||||||
|
|
||||||
|
tests('non-existing region') do
|
||||||
|
raises(RuntimeError) { @service_catalog.get_endpoint(:cloudBlockStorage, :dfw) }
|
||||||
|
end
|
||||||
|
tests('existing region').returns("https://ord.blockstorage.api.rackspacecloud.com/v1/777") do
|
||||||
|
@service_catalog.get_endpoint(:cloudBlockStorage, :ord)
|
||||||
end
|
end
|
||||||
tests('wrong region') do
|
|
||||||
list = [{"type"=>"volume", "endpoints"=>[{"region" => "ORD", "tenantId"=>"777", "publicURL"=>"https://ord.blockstorage.api.rackspacecloud.com/v1/777"}], "name"=>"cloudBlockStorage"}]
|
|
||||||
service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => list)
|
|
||||||
raises(RuntimeError) { service_catalog.get_endpoint(:cloudBlockStorage, :dfw) }
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
tests('endpoint type') do
|
tests('endpoint type') do
|
||||||
|
catalog_hash = [{"type"=>"object-store", "endpoints"=>[{"internalURL"=>"https://snet-storage101.dfw1.clouddrive.com/v1/Mosso777", "region"=>"DFW",
|
||||||
|
"tenantId"=>"Mosso777",
|
||||||
|
"publicURL"=>"https://storage101.dfw1.clouddrive.com/v1/Mosso777"},
|
||||||
|
{"internalURL"=>"https://snet-storage101.ord1.clouddrive.com/v1/Mosso777", "region"=>"ORD",
|
||||||
|
"tenantId"=>"Mosso777",
|
||||||
|
"publicURL"=>"https://storage101.ord1.clouddrive.com/v1/Mosso777"}], "name"=>"cloudFiles"}]
|
||||||
|
@service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => catalog_hash)
|
||||||
|
|
||||||
returns("https://storage101.ord1.clouddrive.com/v1/Mosso777") { @service_catalog.get_endpoint(:cloudFiles, :ord) }
|
returns("https://storage101.ord1.clouddrive.com/v1/Mosso777") { @service_catalog.get_endpoint(:cloudFiles, :ord) }
|
||||||
returns("https://snet-storage101.ord1.clouddrive.com/v1/Mosso777") { @service_catalog.get_endpoint(:cloudFiles, :ord, true) }
|
returns("https://snet-storage101.ord1.clouddrive.com/v1/Mosso777") { @service_catalog.get_endpoint(:cloudFiles, :ord, true) }
|
||||||
returns("https://storage101.ord1.clouddrive.com/v1/Mosso777") { @service_catalog.get_endpoint(:cloudFiles, :ord, false) }
|
returns("https://storage101.ord1.clouddrive.com/v1/Mosso777") { @service_catalog.get_endpoint(:cloudFiles, :ord, false) }
|
||||||
|
@ -108,7 +123,32 @@ Shindo.tests('Fog::Rackspace::ServiceCatalog | users', ['rackspace']) do
|
||||||
end
|
end
|
||||||
|
|
||||||
tests('display_service_regions') do
|
tests('display_service_regions') do
|
||||||
returns(":dfw, :ord, :global") { @service_catalog.display_service_regions(:cloudServersOpenStack) }
|
|
||||||
returns(":dfw, :ord") { @service_catalog.display_service_regions(:cloudFiles, true) }
|
tests('with global endpoint').returns(":dfw, :ord, :global") do
|
||||||
|
catalog_hash = [{"type"=>"compute", "endpoints"=>[{"region"=>"DFW", "versionId"=>"2",
|
||||||
|
"tenantId"=>"777", "versionList"=>"https://dfw.servers.api.rackspacecloud.com/", "versionInfo"=>"https://dfw.servers.api.rackspacecloud.com/v2",
|
||||||
|
"publicURL"=>"https://dfw.servers.api.rackspacecloud.com/v2/777"}, {"region"=>"ORD", "versionId"=>"2", "tenantId"=>"777",
|
||||||
|
"versionList"=>"https://ord.servers.api.rackspacecloud.com/", "versionInfo"=>"https://ord.servers.api.rackspacecloud.com/v2",
|
||||||
|
"publicURL"=>"https://ord.servers.api.rackspacecloud.com/v2/777"}, {"versionId"=>"2", "tenantId"=>"777", "versionList"=>"https://servers.api.rackspacecloud.com/", "versionInfo"=>"https://servers.api.rackspacecloud.com/v2", "publicURL"=>"https://servers.api.rackspacecloud.com/v2/777"}], "name"=>"cloudServersOpenStack"}]
|
||||||
|
@service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => catalog_hash)
|
||||||
|
|
||||||
|
@service_catalog.display_service_regions(:cloudServersOpenStack)
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('endpoint types') do
|
||||||
|
catalog_hash = [{"type"=>"object-store", "endpoints"=>[{"internalURL"=>"https://snet-storage101.dfw1.clouddrive.com/v1/Mosso777", "region"=>"DFW",
|
||||||
|
"tenantId"=>"Mosso777",
|
||||||
|
"publicURL"=>"https://storage101.dfw1.clouddrive.com/v1/Mosso777"},
|
||||||
|
{ "region"=>"ORD",
|
||||||
|
"tenantId"=>"Mosso777",
|
||||||
|
"publicURL"=>"https://storage101.ord1.clouddrive.com/v1/Mosso777"}], "name"=>"cloudFiles"},]
|
||||||
|
@service_catalog = Fog::Rackspace::Identity::ServiceCatalog.new(:service => nil, :catalog => catalog_hash)
|
||||||
|
tests('public').returns(":dfw, :ord") do
|
||||||
|
@service_catalog.display_service_regions(:cloudFiles)
|
||||||
|
end
|
||||||
|
tests('private').returns(":dfw") do
|
||||||
|
@service_catalog.display_service_regions(:cloudFiles, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
Loading…
Reference in New Issue