From c83d8a06fecdddea622996b5ba102fa136457c95 Mon Sep 17 00:00:00 2001 From: Michael Polenchuk Date: Tue, 21 Mar 2017 18:32:41 +0400 Subject: [PATCH] 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 --- .../parser/functions/remove_ovs_usage.rb | 48 +++++++++---------- .../spec/functions/remove_ovs_usage_spec.rb | 19 +++++++- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/remove_ovs_usage.rb b/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/remove_ovs_usage.rb index febfae75e0..e2ec9ecd01 100644 --- a/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/remove_ovs_usage.rb +++ b/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/remove_ovs_usage.rb @@ -1,42 +1,29 @@ require 'yaml' 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 network scheme without ovs-based elements. EOS ) do |argv| - def bridge_name_max_len - 15 - end + raise( + Puppet::ParseError, + "remove_ovs_usage(): Wrong network_scheme. Should be non-empty Hash." + ) unless argv[0].is_a?(Hash) - if argv.size != 1 - raise( - Puppet::ParseError, - "remove_ovs_usage(): Wrong number of arguments. Should be two." - ) - 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 + 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." + ) if argv[0]['version'].to_s.to_f < 1.1 - network_scheme = argv[0] + transformations = argv[0]['transformations'] rv = { 'use_ovs' => false } overrides = [] - network_scheme['transformations'].each do |tr| + transformations.each do |tr| # get all dependent ovs providers if tr['provider'] =~ /ovs/ if tr['action'] == 'add-patch' @@ -46,16 +33,25 @@ Puppet::Parser::Functions::newfunction( :remove_ovs_usage, 'provider' => 'lnx' } else - overrides << { + override_lnx = { 'action' => 'override', 'override' => tr['name'], '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 - if ! overrides.empty? + unless overrides.empty? rv['network_scheme'] = { 'transformations' => overrides } diff --git a/deployment/puppet/osnailyfacter/spec/functions/remove_ovs_usage_spec.rb b/deployment/puppet/osnailyfacter/spec/functions/remove_ovs_usage_spec.rb index 5030362401..9bdaaad7cf 100644 --- a/deployment/puppet/osnailyfacter/spec/functions/remove_ovs_usage_spec.rb +++ b/deployment/puppet/osnailyfacter/spec/functions/remove_ovs_usage_spec.rb @@ -29,6 +29,15 @@ describe 'remove_ovs_usage' do 'bridge' => 'bridge-0', 'action' => 'add-port', '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', 'override' => 'ethx', 'provider' => 'lnx', + 'name' => 'ethx.909', + }, + { + 'action' => 'override', + 'override' => 'bridge-0', + 'provider' => 'lnx', } ] } @@ -91,8 +106,8 @@ describe 'remove_ovs_usage' do end it 'should expect 1 argument' do - is_expected.to run.with_params().and_raise_error(Puppet::ParseError) - is_expected.to run.with_params(1, 2).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(ArgumentError) end it 'should expect a hash as given argument' do