mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #2804 from rackspace/router_fix
[openstack|network] updated create_router and update_router use symbol based
This commit is contained in:
commit
fef4d12e20
7 changed files with 94 additions and 70 deletions
|
@ -10,7 +10,7 @@ module Fog
|
|||
attribute :name
|
||||
attribute :tenant_id
|
||||
attribute :external_gateway_info
|
||||
attribute :admin_state_up
|
||||
attribute :admin_state_up, :type => :boolean
|
||||
attribute :status
|
||||
|
||||
def destroy
|
||||
|
|
|
@ -32,15 +32,17 @@ module Fog
|
|||
|
||||
def create
|
||||
requires :name
|
||||
merge_attributes(service.create_router(self.name,
|
||||
self.attributes).body['router'])
|
||||
|
||||
response = service.create_router(self.name, options)
|
||||
merge_attributes(response.body['router'])
|
||||
|
||||
self
|
||||
end
|
||||
|
||||
def update
|
||||
requires :id
|
||||
merge_attributes(service.update_router(self.id,
|
||||
self.attributes).body['router'])
|
||||
response = service.update_router(self.id, options)
|
||||
merge_attributes(response.body['router'])
|
||||
self
|
||||
end
|
||||
|
||||
|
@ -50,6 +52,21 @@ module Fog
|
|||
true
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def options
|
||||
options = self.attributes.dup
|
||||
|
||||
if options[:external_gateway_info]
|
||||
if options[:external_gateway_info].is_a?(Fog::Network::OpenStack::Network)
|
||||
options[:external_gateway_info] = { :network_id => options[:external_gateway_info].id }
|
||||
else
|
||||
options[:external_gateway_info] = { :network_id => options[:external_gateway_info]}
|
||||
end
|
||||
end
|
||||
options
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -14,15 +14,27 @@ module Fog
|
|||
:admin_state_up,
|
||||
:tenant_id,
|
||||
:network_id,
|
||||
:external_gateway_info,
|
||||
:status,
|
||||
:subnet_id
|
||||
]
|
||||
|
||||
vanilla_options.reject{ |o| options[o].nil? }.each do |key|
|
||||
data['router'][key] = options[key]
|
||||
end
|
||||
|
||||
# remove this in a future
|
||||
egi = options[:external_gateway_info]
|
||||
if egi
|
||||
if egi.is_a?(Fog::Network::OpenStack::Network)
|
||||
Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \
|
||||
Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]"
|
||||
data['router'][:external_gateway_info] = { :network_id => egi.id }
|
||||
elsif egi.is_a?(Hash) && egi[:network_id]
|
||||
data['router'][:external_gateway_info] = egi
|
||||
else
|
||||
raise ArgumentError.new('Invalid external_gateway_info attribute')
|
||||
end
|
||||
end
|
||||
|
||||
request(
|
||||
:body => Fog::JSON.encode(data),
|
||||
:expects => [201],
|
||||
|
@ -36,17 +48,26 @@ module Fog
|
|||
def create_router(name, options = {})
|
||||
response = Excon::Response.new
|
||||
response.status = 201
|
||||
|
||||
# remove this in a future
|
||||
egi = options[:external_gateway_info]
|
||||
if egi && egi.is_a?(Fog::Network::OpenStack::Network)
|
||||
Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \
|
||||
Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]"
|
||||
egi = { :network_id => egi.id }
|
||||
end
|
||||
|
||||
data = {
|
||||
'router' => {
|
||||
'id' => Fog::Mock.random_numbers(6).to_s,
|
||||
'status' => options[:status] || 'ACTIVE',
|
||||
'external_gateway_info' => options[:external_gateway_info],
|
||||
'name' => name,
|
||||
'admin_state_up' => options[:admin_state_up],
|
||||
'tenant_id' => '6b96ff0cb17a4b859e1e575d221683d3'
|
||||
:id => Fog::Mock.random_numbers(6).to_s,
|
||||
:status => options[:status] || 'ACTIVE',
|
||||
:external_gateway_info => egi,
|
||||
:name => name,
|
||||
:admin_state_up => options[:admin_state_up],
|
||||
:tenant_id => '6b96ff0cb17a4b859e1e575d221683d3'
|
||||
}
|
||||
}
|
||||
self.data[:routers][data['router']['id']] = data['router']
|
||||
self.data[:routers][data['router'][:id]] = data['router']
|
||||
response.body = data
|
||||
response
|
||||
end
|
||||
|
|
|
@ -15,7 +15,7 @@ module Fog
|
|||
class Mock
|
||||
def delete_router(router_id)
|
||||
response = Excon::Response.new
|
||||
if list_routers.body['routers'].map { |r| r['id'] }.include? router_id
|
||||
if list_routers.body['routers'].find { |r| r[:id] == router_id }
|
||||
self.data[:routers].delete(router_id)
|
||||
response.status = 204
|
||||
response
|
||||
|
|
|
@ -9,39 +9,28 @@ module Fog
|
|||
# Beyond the name and the administrative state, the only
|
||||
# parameter which can be updated with this operation is
|
||||
# the external gateway.
|
||||
#
|
||||
# router = Fog::Network[:openstack].routers.first
|
||||
# net = Fog::Network[:openstack].networks.first
|
||||
#
|
||||
# # :external_gateway_info can be either a
|
||||
# # Fog::Network::OpenStack::Network or a Hash
|
||||
# # like { 'network_id' => network.id }
|
||||
# Fog::Network[:openstack].update_router router.id,
|
||||
# :name => 'foo',
|
||||
# :external_gateway_info => net,
|
||||
# :admin_state_up => true
|
||||
#
|
||||
# @see http://docs.openstack.org/api/openstack-network/2.0/content/router_update.html
|
||||
def update_router(router_id, options = {})
|
||||
data = { 'router' => {} }
|
||||
|
||||
vanilla_options = [:name, :admin_state_up]
|
||||
[:name, :admin_state_up].each do |key|
|
||||
data['router'][key] = options[key] if options[key]
|
||||
end
|
||||
|
||||
# remove this in a future
|
||||
egi = options[:external_gateway_info]
|
||||
if egi
|
||||
if egi.is_a?(Fog::Network::OpenStack::Network)
|
||||
data['router']['external_gateway_info'] = { 'network_id' => egi.id }
|
||||
elsif egi.is_a?(Hash) and egi['network_id']
|
||||
data['router']['external_gateway_info'] = egi
|
||||
Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \
|
||||
Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]"
|
||||
data['router'][:external_gateway_info] = { :network_id => egi.id }
|
||||
elsif egi.is_a?(Hash) and egi[:network_id]
|
||||
data['router'][:external_gateway_info] = egi
|
||||
else
|
||||
raise ArgumentError.new('Invalid external_gateway_info attribute')
|
||||
end
|
||||
end
|
||||
|
||||
vanilla_options.reject{ |o| options[o].nil? }.each do |key|
|
||||
data['router'][key] = options[key]
|
||||
end
|
||||
|
||||
request(
|
||||
:body => Fog::JSON.encode(data),
|
||||
:expects => 200,
|
||||
|
@ -54,29 +43,27 @@ module Fog
|
|||
class Mock
|
||||
def update_router(router_id, options = {})
|
||||
response = Excon::Response.new
|
||||
router = list_routers.body['routers'].detect do |_|
|
||||
_['id'] == router_id
|
||||
end
|
||||
if router
|
||||
egi = options[:external_gateway_info]
|
||||
if egi
|
||||
if egi.is_a?(Fog::Network::OpenStack::Network)
|
||||
router['external_gateway_info'] = { 'network_id' => egi.id }
|
||||
elsif egi.is_a?(Hash) and egi['network_id']
|
||||
router['external_gateway_info'] = egi
|
||||
else
|
||||
raise ArgumentError.new('Invalid external_gateway_info attribute')
|
||||
end
|
||||
router = list_routers.body['routers'].find {|r| r[:id] == router_id}
|
||||
|
||||
raise Fog::Network::OpenStack::NotFound unless router
|
||||
|
||||
options.keys.each {|k| router[k] = options[k] }
|
||||
|
||||
# remove this in a future
|
||||
egi = options[:external_gateway_info]
|
||||
if egi
|
||||
if egi.is_a?(Fog::Network::OpenStack::Network)
|
||||
Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \
|
||||
Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]"
|
||||
router[:external_gateway_info] = { :network_id => egi.id }
|
||||
else egi.is_a?(Hash) && egi[:network_id]
|
||||
router[:external_gateway_info] = egi
|
||||
end
|
||||
options.keys.each do |k|
|
||||
router[k.to_s] = options[k]
|
||||
end
|
||||
response.body = { 'router' => router }
|
||||
response.status = 200
|
||||
response
|
||||
else
|
||||
raise Fog::Network::OpenStack::NotFound
|
||||
end
|
||||
|
||||
response.body = { 'router' => router }
|
||||
response.status = 200
|
||||
response
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -11,9 +11,10 @@ Shindo.tests("Fog::Network[:openstack] | router", ['openstack']) do
|
|||
end
|
||||
|
||||
tests('#update') do
|
||||
test 'router name' do
|
||||
test('router name') do
|
||||
@instance.name = 'new_name'
|
||||
@instance.update.name == 'new_name'
|
||||
@instance.update
|
||||
@instance.name == 'new_name'
|
||||
end
|
||||
# Needs code from issue #1598
|
||||
#test 'external_gateway_info' do
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
Shindo.tests('Fog::Network[:openstack] | router requests', ['openstack']) do
|
||||
|
||||
@router_format = {
|
||||
'id' => String,
|
||||
'name' => String,
|
||||
'status' => String,
|
||||
'admin_state_up' => Fog::Boolean,
|
||||
'tenant_id' => String,
|
||||
'external_gateway_info' => Fog::Nullable::Hash,
|
||||
:id => String,
|
||||
:name => String,
|
||||
:status => String,
|
||||
:admin_state_up => Fog::Boolean,
|
||||
:tenant_id => String,
|
||||
:external_gateway_info => Fog::Nullable::Hash,
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
@ -29,12 +29,11 @@ Shindo.tests('Fog::Network[:openstack] | router requests', ['openstack']) do
|
|||
|
||||
tests('#update_router').formats({'router' => @router_format}) do
|
||||
router_id = Fog::Network[:openstack].routers.all.first.id
|
||||
attributes = {}
|
||||
{
|
||||
attributes = {
|
||||
:name => 'net_name',
|
||||
:external_gateway_info => { :network_id => 'net_id' },
|
||||
:status => 'ACTIVE',
|
||||
:admin_state_up => 'true'
|
||||
:admin_state_up => true
|
||||
}
|
||||
Fog::Network[:openstack].update_router(router_id, attributes).body
|
||||
end
|
||||
|
@ -42,12 +41,11 @@ Shindo.tests('Fog::Network[:openstack] | router requests', ['openstack']) do
|
|||
tests('#update_router_with_network').formats({'router' => @router_format}) do
|
||||
router_id = Fog::Network[:openstack].routers.all.first.id
|
||||
net = Fog::Network[:openstack].networks.first
|
||||
attributes = {}
|
||||
{
|
||||
attributes = {
|
||||
:name => 'net_name',
|
||||
:external_gateway_info => net,
|
||||
:status => 'ACTIVE',
|
||||
:admin_state_up => 'true'
|
||||
:admin_state_up => true
|
||||
}
|
||||
Fog::Network[:openstack].update_router(router_id, attributes).body
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue