1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[openstack|network] create_network provider extensions

Implements provider extensions when creating networks.

See:

http://docs.openstack.org/trunk/openstack-network/admin/content/provider_attributes.html

Complements #1581 (Added missing Network model attributes)
This commit is contained in:
Sergio Rubio 2013-02-26 14:51:28 +01:00
parent e0194a0dbd
commit 12923ffc4d
3 changed files with 98 additions and 13 deletions

View file

@ -6,9 +6,31 @@ module Fog
def create_network(options = {})
data = { 'network' => {} }
vanilla_options = [:name, :shared, :admin_state_up, :tenant_id]
vanilla_options = [
:name,
:shared,
:admin_state_up,
:tenant_id,
:router_external,
:provider_network_type,
:provider_segmentation_id,
:provider_physical_network
]
# Advanced Features through API Extensions
#
# @see http://docs.openstack.org/trunk/openstack-network/admin/content/provider_attributes.html
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'
}
vanilla_options.reject{ |o| options[o].nil? }.each do |key|
data['network'][key] = options[key]
aliased_key = aliases[key] || key
data['network'][aliased_key] = options[key]
end
request(
@ -41,4 +63,4 @@ module Fog
end
end
end
end

View file

@ -10,6 +10,23 @@ Shindo.tests("Fog::Network[:openstack] | network", ['openstack']) do
!@instance.id.nil?
end
tests('#create+extensions').succeeds do
net = Fog::Network[:openstack].networks.create(
:name => 'net_name',
:shared => false,
:admin_state_up => true,
:tenant_id => 'tenant_id',
:router_external => true,
# local, gre, vlan. Depends on the provider.
# May rise an exception if the network_type isn't valid:
# QuantumError: "Invalid input for operation: provider:physical_network"
:provider_network_type => 'gre',
:provider_segmentation_id => 22,
)
net.destroy
net.provider_network_type == 'gre'
end
tests('have attributes') do
attributes = [
:name,

View file

@ -1,19 +1,44 @@
Shindo.tests('Fog::Network[:openstack] | network requests', ['openstack']) do
@network_format = {
'id' => String,
'name' => String,
'subnets' => Array,
'shared' => Fog::Boolean,
'status' => String,
'admin_state_up' => Fog::Boolean,
'tenant_id' => String,
'id' => String,
'name' => String,
'subnets' => Array,
'shared' => Fog::Boolean,
'status' => String,
'admin_state_up' => Fog::Boolean,
'tenant_id' => String,
'router:external' => Fog::Boolean,
'provider:network_type' => String,
'provider:physical_network' => Fog::Nullable::String,
'provider:segmentation_id' => Integer,
}
tests('success') do
tests('#create_network').formats({'network' => @network_format}) do
attributes = {:name => 'net_name', :shared => false,
:admin_state_up => true, :tenant_id => 'tenant_id'}
attributes = {
:name => 'net_name',
:shared => false,
:admin_state_up => true,
:tenant_id => 'tenant_id'
}
Fog::Network[:openstack].create_network(attributes).body
end
tests('#create_network+provider extensions').formats(
{'network' => @network_format}
) do
attributes = {
:name => 'net_name',
:shared => false,
:admin_state_up => true,
:tenant_id => 'tenant_id',
:router_external => true,
# local, gre, vlan. Depends on the provider.
# May rise an exception if the network_type isn't valid:
# QuantumError: "Invalid input for operation: provider:physical_network"
:provider_network_type => 'gre',
:provider_segmentation_id => 22,
}
Fog::Network[:openstack].create_network(attributes).body
end
@ -40,6 +65,22 @@ Shindo.tests('Fog::Network[:openstack] | network requests', ['openstack']) do
end
tests('failure') do
tests('#create_network+provider extensions').raises(
Excon::Errors::BadRequest
) do
attributes = {
:name => 'net_name',
:shared => false,
:admin_state_up => true,
:tenant_id => 'tenant_id',
:router_external => true,
# QuantumError: "Invalid input for operation: provider:physical_network"
:provider_network_type => 'foobar',
:provider_segmentation_id => 22,
}
Fog::Network[:openstack].create_network(attributes)
end
tests('#get_network').raises(Fog::Network::OpenStack::NotFound) do
Fog::Network[:openstack].get_network(0)
end
@ -52,5 +93,10 @@ Shindo.tests('Fog::Network[:openstack] | network requests', ['openstack']) do
Fog::Network[:openstack].delete_network(0)
end
end
# Cleaning up the mess
Fog::Network[:openstack].networks.each do |n|
Fog::Network[:openstack].delete_network(n.id)
end
end
end