diff --git a/lib/puppet/provider/nova_network/nova_manage.rb b/lib/puppet/provider/nova_network/nova_manage.rb index 6da03a39d..c4cb3bd10 100644 --- a/lib/puppet/provider/nova_network/nova_manage.rb +++ b/lib/puppet/provider/nova_network/nova_manage.rb @@ -2,7 +2,7 @@ Puppet::Type.type(:nova_network).provide(:nova_manage) do 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 def self.instances @@ -30,18 +30,19 @@ Puppet::Type.type(:nova_network).provide(:nova_manage) do :dns2 => '--dns2', :gateway => '--gateway', :bridge => '--bridge', - :vlan_start => '--vlan_start' + :vlan_start => '--vlan-start', + :allowed_start => '--allowed-start', + :allowed_end => '--allowed-end', }.each do |param, opt| if resource[param] optional_opts.push(opt).push(resource[param]) end end - nova_manage('network', 'create', + nova('network-create', resource[:label], + '--fixed-range-v4', resource[:name], - resource[:num_networks], - resource[:network_size], optional_opts ) end diff --git a/lib/puppet/type/nova_network.rb b/lib/puppet/type/nova_network.rb index 3a750e02e..c9e654d93 100644 --- a/lib/puppet/type/nova_network.rb +++ b/lib/puppet/type/nova_network.rb @@ -37,6 +37,16 @@ Puppet::Type.newtype(:nova_network) do newparam(:dns2) do 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 end diff --git a/manifests/manage/network.pp b/manifests/manage/network.pp index 922b3ae47..536d7e3bd 100644 --- a/manifests/manage/network.pp +++ b/manifests/manage/network.pp @@ -19,30 +19,42 @@ # (optional) The vlan number to use if in vlan mode # 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*] # (optional) Project that network should be associated with # Defaults to undef # define nova::manage::network ( $network, - $label = 'novanetwork', - $num_networks = 1, - $network_size = 255, - $vlan_start = undef, - $project = undef + $label = 'novanetwork', + $num_networks = 1, + $network_size = 255, + $vlan_start = undef, + $project = undef, + $allowed_start = undef, + $allowed_end = undef, ) { File['/etc/nova/nova.conf'] -> Nova_network[$name] Exec<| title == 'nova-db-sync' |> -> Nova_network[$name] nova_network { $name: - ensure => present, - network => $network, - label => $label, - num_networks => $num_networks, - network_size => $network_size, - project => $project, - vlan_start => $vlan_start, + ensure => present, + network => $network, + label => $label, + num_networks => $num_networks, + network_size => $network_size, + project => $project, + vlan_start => $vlan_start, + allowed_start => $allowed_start, + allowed_end => $allowed_end, } } diff --git a/manifests/network.pp b/manifests/network.pp index b6b5da561..3079b39fe 100644 --- a/manifests/network.pp +++ b/manifests/network.pp @@ -59,6 +59,15 @@ # (optional) Whether to install and enable the service # 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( $private_interface = undef, $fixed_range = '10.0.0.0/8', @@ -71,7 +80,9 @@ class nova::network( $config_overrides = {}, $create_networks = true, $ensure_package = 'present', - $install_service = true + $install_service = true, + $allowed_start = undef, + $allowed_end = undef, ) { include ::nova::params @@ -107,10 +118,12 @@ class nova::network( if $create_networks { nova::manage::network { 'nova-vm-net': - network => $fixed_range, - num_networks => $num_networks, - network_size => $network_size, - vlan_start => $vlan_start, + network => $fixed_range, + num_networks => $num_networks, + network_size => $network_size, + vlan_start => $vlan_start, + allowed_start => $allowed_start, + allowed_end => $allowed_end, } if $floating_range { nova::manage::floating { 'nova-vm-floating': diff --git a/spec/defines/nova_manage_networks_spec.rb b/spec/defines/nova_manage_networks_spec.rb index e177c054e..b8ec36876 100644 --- a/spec/defines/nova_manage_networks_spec.rb +++ b/spec/defines/nova_manage_networks_spec.rb @@ -21,11 +21,13 @@ describe 'nova::manage::network' do } end it { is_expected.to contain_nova_network('foo').with( - :ensure => 'present', - :network => '10.0.0.0/24', - :label => 'novanetwork', - :num_networks => 1, - :project => nil + :ensure => 'present', + :network => '10.0.0.0/24', + :label => 'novanetwork', + :num_networks => 1, + :project => nil, + :allowed_start => nil, + :allowed_end => nil, ) } end describe 'when overriding num networks' do @@ -53,4 +55,20 @@ describe 'nova::manage::network' do :project => 'foo' ) } 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