Support allow_start and allow_end parameters

The new nova version added this parameters that allow users
to set a range of allowed ip's for instances.

Change-Id: Ic0eae504f462d198e5f38d1d8ad596f49411506f
This commit is contained in:
Ivan Chavero
2014-11-17 16:39:54 -07:00
committed by Gael Chamoulaud
parent 895e057abb
commit 9eaf5d74a5
5 changed files with 81 additions and 27 deletions

View File

@@ -2,7 +2,7 @@ Puppet::Type.type(:nova_network).provide(:nova_manage) do
desc "Manage nova network" desc "Manage nova network"
optional_commands :nova_manage => 'nova-manage' optional_commands :nova_manage => 'nova-manage', :nova => 'nova'
# I need to setup caching and what-not to make this lookup performance not suck # I need to setup caching and what-not to make this lookup performance not suck
def self.instances def self.instances
@@ -30,18 +30,19 @@ Puppet::Type.type(:nova_network).provide(:nova_manage) do
:dns2 => '--dns2', :dns2 => '--dns2',
:gateway => '--gateway', :gateway => '--gateway',
:bridge => '--bridge', :bridge => '--bridge',
:vlan_start => '--vlan_start' :vlan_start => '--vlan-start',
:allowed_start => '--allowed-start',
:allowed_end => '--allowed-end',
}.each do |param, opt| }.each do |param, opt|
if resource[param] if resource[param]
optional_opts.push(opt).push(resource[param]) optional_opts.push(opt).push(resource[param])
end end
end end
nova_manage('network', 'create', nova('network-create',
resource[:label], resource[:label],
'--fixed-range-v4',
resource[:name], resource[:name],
resource[:num_networks],
resource[:network_size],
optional_opts optional_opts
) )
end end

View File

@@ -37,6 +37,16 @@ Puppet::Type.newtype(:nova_network) do
newparam(:dns2) do newparam(:dns2) do
end end
newparam(:allowed_start) do
desc 'Start of allowed addresses for instances'
newvalues(/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/)
end
newparam(:allowed_end) do
desc 'End of allowed addresses for instances'
newvalues(/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/)
end
newparam(:vlan_start) do newparam(:vlan_start) do
end end

View File

@@ -19,30 +19,42 @@
# (optional) The vlan number to use if in vlan mode # (optional) The vlan number to use if in vlan mode
# Defaults to undef # Defaults to undef
# #
# [*allowed_start*]
# (optional) Start of allowed addresses for instances
# Defaults to undef
#
# [*allowed_end*]
# (optional) End of allowed addresses for instances
# Defaults to undef
#
# [*project*] # [*project*]
# (optional) Project that network should be associated with # (optional) Project that network should be associated with
# Defaults to undef # Defaults to undef
# #
define nova::manage::network ( define nova::manage::network (
$network, $network,
$label = 'novanetwork', $label = 'novanetwork',
$num_networks = 1, $num_networks = 1,
$network_size = 255, $network_size = 255,
$vlan_start = undef, $vlan_start = undef,
$project = undef $project = undef,
$allowed_start = undef,
$allowed_end = undef,
) { ) {
File['/etc/nova/nova.conf'] -> Nova_network[$name] File['/etc/nova/nova.conf'] -> Nova_network[$name]
Exec<| title == 'nova-db-sync' |> -> Nova_network[$name] Exec<| title == 'nova-db-sync' |> -> Nova_network[$name]
nova_network { $name: nova_network { $name:
ensure => present, ensure => present,
network => $network, network => $network,
label => $label, label => $label,
num_networks => $num_networks, num_networks => $num_networks,
network_size => $network_size, network_size => $network_size,
project => $project, project => $project,
vlan_start => $vlan_start, vlan_start => $vlan_start,
allowed_start => $allowed_start,
allowed_end => $allowed_end,
} }
} }

View File

@@ -59,6 +59,15 @@
# (optional) Whether to install and enable the service # (optional) Whether to install and enable the service
# Defaults to true # Defaults to true
# #
# [*allowed_start*]
# (optional) Start of allowed addresses for instances
# Defaults to undef
#
# [*allowed_end*]
# (optional) End of allowed addresses for instances
# Defaults to undef
#
class nova::network( class nova::network(
$private_interface = undef, $private_interface = undef,
$fixed_range = '10.0.0.0/8', $fixed_range = '10.0.0.0/8',
@@ -71,7 +80,9 @@ class nova::network(
$config_overrides = {}, $config_overrides = {},
$create_networks = true, $create_networks = true,
$ensure_package = 'present', $ensure_package = 'present',
$install_service = true $install_service = true,
$allowed_start = undef,
$allowed_end = undef,
) { ) {
include ::nova::params include ::nova::params
@@ -107,10 +118,12 @@ class nova::network(
if $create_networks { if $create_networks {
nova::manage::network { 'nova-vm-net': nova::manage::network { 'nova-vm-net':
network => $fixed_range, network => $fixed_range,
num_networks => $num_networks, num_networks => $num_networks,
network_size => $network_size, network_size => $network_size,
vlan_start => $vlan_start, vlan_start => $vlan_start,
allowed_start => $allowed_start,
allowed_end => $allowed_end,
} }
if $floating_range { if $floating_range {
nova::manage::floating { 'nova-vm-floating': nova::manage::floating { 'nova-vm-floating':

View File

@@ -21,11 +21,13 @@ describe 'nova::manage::network' do
} }
end end
it { is_expected.to contain_nova_network('foo').with( it { is_expected.to contain_nova_network('foo').with(
:ensure => 'present', :ensure => 'present',
:network => '10.0.0.0/24', :network => '10.0.0.0/24',
:label => 'novanetwork', :label => 'novanetwork',
:num_networks => 1, :num_networks => 1,
:project => nil :project => nil,
:allowed_start => nil,
:allowed_end => nil,
) } ) }
end end
describe 'when overriding num networks' do describe 'when overriding num networks' do
@@ -53,4 +55,20 @@ describe 'nova::manage::network' do
:project => 'foo' :project => 'foo'
) } ) }
end end
describe 'when overriding allowed range' do
let :params do
{
:network => '10.0.0.0/20',
:allowed_start => '10.0.0.1',
:allowed_end => '10.0.0.5'
}
end
it { is_expected.to contain_nova_network('foo').with(
:network => '10.0.0.0/20',
:allowed_start => '10.0.0.1',
:allowed_end => '10.0.0.5'
) }
end
end end