diff --git a/lib/puppet/provider/neutron_network/openstack.rb b/lib/puppet/provider/neutron_network/openstack.rb index cbecc35c6..0c0ea00ac 100644 --- a/lib/puppet/provider/neutron_network/openstack.rb +++ b/lib/puppet/provider/neutron_network/openstack.rb @@ -44,7 +44,8 @@ Puppet::Type.type(:neutron_network).provide( :shared => network[:shared], :tenant_id => network[:project_id], :project_id => network[:project_id], - :availability_zone_hint => parse_availability_zone_hint(network[:availability_zone_hints]) + :availability_zone_hint => parse_availability_zone_hint(network[:availability_zone_hints]), + :mtu => network[:mtu], ) end self.do_not_manage = false @@ -114,6 +115,10 @@ Puppet::Type.type(:neutron_network).provide( end end + if @resource[:mtu] + opts << "--mtu=#{@resource[:mtu]}" + end + network = self.class.request('network', 'create', opts) @property_hash = { :ensure => :present, @@ -127,7 +132,8 @@ Puppet::Type.type(:neutron_network).provide( :shared => network[:shared], :tenant_id => network[:project_id], :project_id => network[:project_id], - :availability_zone_hint => self.class.parse_availability_zone_hint(network[:availability_zone_hints]) + :availability_zone_hint => self.class.parse_availability_zone_hint(network[:availability_zone_hints]), + :mtu => network[:mtu], } end @@ -159,6 +165,10 @@ Puppet::Type.type(:neutron_network).provide( end end + if @property_flush[:mtu] + opts << "--mtu=#{@property_flush[:mtu]}" + end + self.class.request('network', 'set', opts) @property_flush.clear end @@ -177,6 +187,7 @@ Puppet::Type.type(:neutron_network).provide( :admin_state_up, :shared, :router_external, + :mtu ].each do |attr| define_method(attr.to_s + "=") do |value| if self.class.do_not_manage diff --git a/lib/puppet/type/neutron_network.rb b/lib/puppet/type/neutron_network.rb index 2f815e15c..706af6858 100644 --- a/lib/puppet/type/neutron_network.rb +++ b/lib/puppet/type/neutron_network.rb @@ -81,6 +81,14 @@ Puppet::Type.newtype(:neutron_network) do desc 'The availability zone hint to provide the scheduler' end + newproperty(:mtu) do + desc 'Set network mtu' + newvalues(/\d+/) + munge do |v| + Integer(v) + end + end + # Require the neutron-server service to be running autorequire(:anchor) do ['neutron::service::end'] diff --git a/releasenotes/notes/network-mtu-c02dc3947a513f73.yaml b/releasenotes/notes/network-mtu-c02dc3947a513f73.yaml new file mode 100644 index 000000000..6f83839bb --- /dev/null +++ b/releasenotes/notes/network-mtu-c02dc3947a513f73.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The ``neutron_network`` resource type now supports the new ``mtu`` property + to set network MTU. diff --git a/spec/acceptance/10_basic_neutron_spec.rb b/spec/acceptance/10_basic_neutron_spec.rb index b3c06f47c..97c78e375 100644 --- a/spec/acceptance/10_basic_neutron_spec.rb +++ b/spec/acceptance/10_basic_neutron_spec.rb @@ -13,6 +13,10 @@ describe 'basic neutron' do include openstack_integration::mysql include openstack_integration::keystone include openstack_integration::neutron + + neutron_network { 'mtutest': + mtu => 1000, + } EOS diff --git a/spec/unit/provider/neutron_network/openstack_spec.rb b/spec/unit/provider/neutron_network/openstack_spec.rb index f0071f843..03d9c107d 100644 --- a/spec/unit/provider/neutron_network/openstack_spec.rb +++ b/spec/unit/provider/neutron_network/openstack_spec.rb @@ -48,13 +48,15 @@ availability_zone_hints="[]" id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="False" -shared="False"') +shared="False" +mtu="1500"') provider.create expect(provider.exists?).to be_truthy expect(provider.admin_state_up).to eq('True') expect(provider.tenant_id).to eq('60f9544eb94c42a6b7e8e98c2be981b1') expect(provider.router_external).to eq('False') expect(provider.shared).to eq('False') + expect(provider.mtu).to eq('1500') end end @@ -76,7 +78,8 @@ availability_zone_hints="[]" id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="False" -shared="False"') +shared="False" +mtu="1500"') provider.create expect(provider.exists?).to be_truthy expect(provider.admin_state_up).to eq('False') @@ -101,7 +104,8 @@ availability_zone_hints="[]" id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="False" -shared="True"') +shared="True" +mtu="1500"') provider.create expect(provider.exists?).to be_truthy expect(provider.shared).to eq('True') @@ -126,7 +130,8 @@ availability_zone_hints="[]" id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="False" -shared="False"') +shared="False" +mtu="1500"') provider.create expect(provider.exists?).to be_truthy end @@ -157,7 +162,8 @@ provider_network_type="vlan" provider_physical_network="datacentre" provider_segmentation_id="10" router_external="False" -shared="False"') +shared="False" +mtu="1500"') provider.create expect(provider.exists?).to be_truthy expect(provider.provider_network_type).to eq('vlan') @@ -184,12 +190,38 @@ availability_zone_hints="[]" id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="True" -shared="False"') +shared="False" +mtu="1500"') provider.create expect(provider.exists?).to be_truthy expect(provider.router_external).to eq('True') end end + + context 'with mtu' do + let :net_attrs do + { + :name => net_name, + :mtu => 9000, + } + end + + it 'creates network' do + provider_class.expects(:openstack) + .with('network', 'create', '--format', 'shell', + ['net1', '--mtu=9000']) + .returns('admin_state_up="True" +availability_zone_hints="[]" +id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" +project_id="60f9544eb94c42a6b7e8e98c2be981b1" +router_external="True" +shared="False" +mtu="9000"') + provider.create + expect(provider.exists?).to be_truthy + expect(provider.mtu).to eq('9000') + end + end end describe '#destroy' do @@ -243,6 +275,15 @@ shared="False"') provider.flush end end + + context '.mtu' do + it 'updates mtu' do + provider_class.expects(:openstack) + .with('network', 'set', ['net1', '--mtu=1490']) + provider.mtu = 1490 + provider.flush + end + end end describe '#instances' do @@ -261,7 +302,8 @@ availability_zone_hints="[]" id="076520cc-b783-4cf5-a4a9-4cb5a5e93a9b" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="False" -shared="False"') +shared="False" +mtu="1500"') provider_class.expects(:openstack) .with('network', 'show', '--format', 'shell', '34e8f42b-89db-4a5b-92db-76ca7073414d') @@ -270,7 +312,8 @@ availability_zone_hints="[]" id="34e8f42b-89db-4a5b-92db-76ca7073414d" project_id="60f9544eb94c42a6b7e8e98c2be981b1" router_external="True" -shared="True"') +shared="True" +mtu="9000"') instances = provider_class.instances expect(instances.length).to eq(2) @@ -281,6 +324,7 @@ shared="True"') expect(instances[0].router_external).to eq('False') expect(instances[0].tenant_id).to eq('60f9544eb94c42a6b7e8e98c2be981b1') expect(instances[0].shared).to eq('False') + expect(instances[0].mtu).to eq('1500') expect(instances[1].id).to eq('34e8f42b-89db-4a5b-92db-76ca7073414d') expect(instances[1].name).to eq('net2') @@ -288,6 +332,7 @@ shared="True"') expect(instances[1].tenant_id).to eq('60f9544eb94c42a6b7e8e98c2be981b1') expect(instances[1].router_external).to eq('True') expect(instances[1].shared).to eq('True') + expect(instances[1].mtu).to eq('9000') end end end