mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[openstack|network] create_network provider extensions reworked
- Differenciate provider and vanilla options - Fixed mocks
This commit is contained in:
parent
12923ffc4d
commit
0ce5a9b0ce
2 changed files with 47 additions and 9 deletions
|
@ -10,16 +10,28 @@ module Fog
|
||||||
:name,
|
:name,
|
||||||
:shared,
|
:shared,
|
||||||
:admin_state_up,
|
:admin_state_up,
|
||||||
:tenant_id,
|
:tenant_id
|
||||||
:router_external,
|
|
||||||
:provider_network_type,
|
|
||||||
:provider_segmentation_id,
|
|
||||||
:provider_physical_network
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
vanilla_options.reject{ |o| options[o].nil? }.each do |key|
|
||||||
|
data['network'][key] = options[key]
|
||||||
|
end
|
||||||
|
|
||||||
# Advanced Features through API Extensions
|
# Advanced Features through API Extensions
|
||||||
#
|
#
|
||||||
|
# Not strictly required but commonly found in OpenStack
|
||||||
|
# installs with Quantum networking.
|
||||||
|
#
|
||||||
# @see http://docs.openstack.org/trunk/openstack-network/admin/content/provider_attributes.html
|
# @see http://docs.openstack.org/trunk/openstack-network/admin/content/provider_attributes.html
|
||||||
|
provider_options = [
|
||||||
|
:router_external,
|
||||||
|
:provider_network_type,
|
||||||
|
:provider_segmentation_id,
|
||||||
|
:provider_physical_network
|
||||||
|
]
|
||||||
|
|
||||||
|
# Map Fog::Network::OpenStack::Network
|
||||||
|
# model attributes to OpenStack provider attributes
|
||||||
aliases = {
|
aliases = {
|
||||||
:provider_network_type => 'provider:network_type',
|
:provider_network_type => 'provider:network_type',
|
||||||
# Not applicable to the "local" or "gre" network types
|
# Not applicable to the "local" or "gre" network types
|
||||||
|
@ -28,7 +40,7 @@ module Fog
|
||||||
:router_external => 'router:external'
|
:router_external => 'router:external'
|
||||||
}
|
}
|
||||||
|
|
||||||
vanilla_options.reject{ |o| options[o].nil? }.each do |key|
|
provider_options.reject{ |o| options[o].nil? }.each do |key|
|
||||||
aliased_key = aliases[key] || key
|
aliased_key = aliases[key] || key
|
||||||
data['network'][aliased_key] = options[key]
|
data['network'][aliased_key] = options[key]
|
||||||
end
|
end
|
||||||
|
@ -55,6 +67,27 @@ module Fog
|
||||||
'admin_state_up' => options[:admin_state_up],
|
'admin_state_up' => options[:admin_state_up],
|
||||||
'tenant_id' => options[:tenant_id],
|
'tenant_id' => options[:tenant_id],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add provider specific attributes when found
|
||||||
|
#
|
||||||
|
provider_options = [
|
||||||
|
:router_external,
|
||||||
|
:provider_network_type,
|
||||||
|
:provider_segmentation_id,
|
||||||
|
:provider_physical_network
|
||||||
|
]
|
||||||
|
aliases = {
|
||||||
|
:provider_network_type => 'provider:network_type',
|
||||||
|
# Not applicable to the "local" or "gre" network types
|
||||||
|
:provider_physical_network => 'provider:physical_network',
|
||||||
|
:provider_segmentation_id => 'provider:segmentation_id',
|
||||||
|
:router_external => 'router:external'
|
||||||
|
}
|
||||||
|
provider_options.reject{ |o| options[o].nil? }.each do |key|
|
||||||
|
aliased_key = aliases[key] || key
|
||||||
|
data[aliased_key] = options[key]
|
||||||
|
end
|
||||||
|
|
||||||
self.data[:networks][data['id']] = data
|
self.data[:networks][data['id']] = data
|
||||||
response.body = { 'network' => data }
|
response.body = { 'network' => data }
|
||||||
response
|
response
|
||||||
|
|
|
@ -7,11 +7,14 @@ Shindo.tests('Fog::Network[:openstack] | network requests', ['openstack']) do
|
||||||
'shared' => Fog::Boolean,
|
'shared' => Fog::Boolean,
|
||||||
'status' => String,
|
'status' => String,
|
||||||
'admin_state_up' => Fog::Boolean,
|
'admin_state_up' => Fog::Boolean,
|
||||||
'tenant_id' => String,
|
'tenant_id' => String
|
||||||
|
}
|
||||||
|
|
||||||
|
@network_format_extensions = {
|
||||||
'router:external' => Fog::Boolean,
|
'router:external' => Fog::Boolean,
|
||||||
'provider:network_type' => String,
|
'provider:network_type' => String,
|
||||||
'provider:physical_network' => Fog::Nullable::String,
|
'provider:physical_network' => Fog::Nullable::String,
|
||||||
'provider:segmentation_id' => Integer,
|
'provider:segmentation_id' => Integer
|
||||||
}
|
}
|
||||||
|
|
||||||
tests('success') do
|
tests('success') do
|
||||||
|
@ -25,7 +28,7 @@ Shindo.tests('Fog::Network[:openstack] | network requests', ['openstack']) do
|
||||||
Fog::Network[:openstack].create_network(attributes).body
|
Fog::Network[:openstack].create_network(attributes).body
|
||||||
end
|
end
|
||||||
tests('#create_network+provider extensions').formats(
|
tests('#create_network+provider extensions').formats(
|
||||||
{'network' => @network_format}
|
{'network' => @network_format.merge(@network_format_extensions)}
|
||||||
) do
|
) do
|
||||||
attributes = {
|
attributes = {
|
||||||
:name => 'net_name',
|
:name => 'net_name',
|
||||||
|
@ -68,6 +71,8 @@ Shindo.tests('Fog::Network[:openstack] | network requests', ['openstack']) do
|
||||||
tests('#create_network+provider extensions').raises(
|
tests('#create_network+provider extensions').raises(
|
||||||
Excon::Errors::BadRequest
|
Excon::Errors::BadRequest
|
||||||
) do
|
) do
|
||||||
|
pending if Fog.mocking?
|
||||||
|
|
||||||
attributes = {
|
attributes = {
|
||||||
:name => 'net_name',
|
:name => 'net_name',
|
||||||
:shared => false,
|
:shared => false,
|
||||||
|
|
Loading…
Add table
Reference in a new issue