Handle vlan_id in dpdk/vxlan mode

On provision stage apply vlan_id from ovs bridge
to lnx port to pass connectivity check.

Change-Id: Id453f45773905f923c3d8e37650b21a0fb8be26b
Closes-Bug: #1673767
This commit is contained in:
Michael Polenchuk 2017-03-21 18:32:41 +04:00
parent ccdab4a8d5
commit c83d8a06fe
2 changed files with 39 additions and 28 deletions

View File

@ -1,42 +1,29 @@
require 'yaml' require 'yaml'
Puppet::Parser::Functions::newfunction( :remove_ovs_usage, Puppet::Parser::Functions::newfunction( :remove_ovs_usage,
:type => :rvalue, :doc => <<-EOS :type => :rvalue, :arity => 1, :doc => <<-EOS
This function get network_scheme and returns mangled This function get network_scheme and returns mangled
network scheme without ovs-based elements. network scheme without ovs-based elements.
EOS EOS
) do |argv| ) do |argv|
def bridge_name_max_len raise(
15 Puppet::ParseError,
end "remove_ovs_usage(): Wrong network_scheme. Should be non-empty Hash."
) unless argv[0].is_a?(Hash)
if argv.size != 1 raise(
raise( Puppet::ParseError,
Puppet::ParseError, "remove_ovs_usage(): You network_scheme hash has wrong format.\nThis parser can work with v1.1 format, please convert you config."
"remove_ovs_usage(): Wrong number of arguments. Should be two." ) if argv[0]['version'].to_s.to_f < 1.1
)
end
if !argv[0].is_a?(Hash)
raise(
Puppet::ParseError,
"remove_ovs_usage(): Wrong network_scheme. Should be non-empty Hash."
)
end
if argv[0]['version'].to_s.to_f < 1.1
raise(
Puppet::ParseError,
"remove_ovs_usage(): You network_scheme hash has wrong format.\nThis parser can work with v1.1 format, please convert you config."
)
end
network_scheme = argv[0] transformations = argv[0]['transformations']
rv = { rv = {
'use_ovs' => false 'use_ovs' => false
} }
overrides = [] overrides = []
network_scheme['transformations'].each do |tr| transformations.each do |tr|
# get all dependent ovs providers # get all dependent ovs providers
if tr['provider'] =~ /ovs/ if tr['provider'] =~ /ovs/
if tr['action'] == 'add-patch' if tr['action'] == 'add-patch'
@ -46,16 +33,25 @@ Puppet::Parser::Functions::newfunction( :remove_ovs_usage,
'provider' => 'lnx' 'provider' => 'lnx'
} }
else else
overrides << { override_lnx = {
'action' => 'override', 'action' => 'override',
'override' => tr['name'], 'override' => tr['name'],
'provider' => 'lnx' 'provider' => 'lnx'
} }
# handle vxlan mode
if tr['provider'] == 'dpdkovs'
bridge = transformations.select { |t| tr['bridge'] == t['name'] }
bridge_vlan_id = bridge[0]['vendor_specific']['vlan_id']
override_lnx.merge!({'name' => "#{tr['name']}.#{bridge_vlan_id}"}) if bridge_vlan_id
end
overrides << override_lnx
end end
end end
end end
if ! overrides.empty? unless overrides.empty?
rv['network_scheme'] = { rv['network_scheme'] = {
'transformations' => overrides 'transformations' => overrides
} }

View File

@ -29,6 +29,15 @@ describe 'remove_ovs_usage' do
'bridge' => 'bridge-0', 'bridge' => 'bridge-0',
'action' => 'add-port', 'action' => 'add-port',
'name' => 'ethx', 'name' => 'ethx',
},
{
'provider' => 'ovs',
'action' => 'add-br',
'name' => 'bridge-0',
'vendor_specific' => {
'datapath_type' => 'netdev',
'vlan_id' => 909,
},
} }
], ],
} }
@ -48,6 +57,12 @@ describe 'remove_ovs_usage' do
'action' => 'override', 'action' => 'override',
'override' => 'ethx', 'override' => 'ethx',
'provider' => 'lnx', 'provider' => 'lnx',
'name' => 'ethx.909',
},
{
'action' => 'override',
'override' => 'bridge-0',
'provider' => 'lnx',
} }
] ]
} }
@ -91,8 +106,8 @@ describe 'remove_ovs_usage' do
end end
it 'should expect 1 argument' do it 'should expect 1 argument' do
is_expected.to run.with_params().and_raise_error(Puppet::ParseError) is_expected.to run.with_params().and_raise_error(ArgumentError)
is_expected.to run.with_params(1, 2).and_raise_error(Puppet::ParseError) is_expected.to run.with_params(1, 2).and_raise_error(ArgumentError)
end end
it 'should expect a hash as given argument' do it 'should expect a hash as given argument' do