From fc04875852029e70ebd335a1be14e010d59d3a1c Mon Sep 17 00:00:00 2001 From: Alfredo Moralejo Date: Tue, 17 Jan 2017 05:20:46 -0500 Subject: [PATCH] Add fail_mode parameter to OVS Ports According to info in https://bugs.launchpad.net/tripleo/+bug/1640812 when setting a OVS bridge with physical interface we need to define fail_mode in OVS_EXTRA parameter of ifcfg to make sure it's set at the desired mode after reboot. This patch adds new parameter fail_mode to vs_port (as ifcfg is created as part of vs_port, not vs_bridge) and defaults it to required value "standalone". Similar patch was implemented to os-net-config in https://github.com/openstack/os-net-config/commit/e479535b508b4072f64300809b824dfecc3a9182 Change-Id: I5f7448e3504c9190d7fe5f4a7958c604ef91a058 Closes-Bug: #1656795 (cherry picked from commit 026f64ade478a8f3e45a9af61a2239d9ff59acc9) --- lib/puppet/provider/vs_port/ovs_redhat.rb | 4 ++-- lib/puppet/type/vs_port.rb | 11 +++++++++++ spec/unit/puppet/lib/type/vs_port_spec.rb | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 spec/unit/puppet/lib/type/vs_port_spec.rb diff --git a/lib/puppet/provider/vs_port/ovs_redhat.rb b/lib/puppet/provider/vs_port/ovs_redhat.rb index 33775fe5..eea7b71c 100644 --- a/lib/puppet/provider/vs_port/ovs_redhat.rb +++ b/lib/puppet/provider/vs_port/ovs_redhat.rb @@ -44,7 +44,7 @@ Puppet::Type.type(:vs_port).provide( if interface_physical? template = DEFAULT - extras = nil + extras = { 'OVS_EXTRA' => "\"set bridge #{@resource[:bridge]} fail_mode=#{@resource[:fail_mode]}\"" } if link? extras = dynamic_default if dynamic? @@ -132,7 +132,7 @@ Puppet::Type.type(:vs_port).provide( bridge_mac_address = File.read("/sys/class/net/#{@resource[:port]}/address").chomp if bridge_mac_address != '' list.merge!({ 'OVS_EXTRA' => - "\"set bridge #{@resource[:bridge]} other-config:hwaddr=#{bridge_mac_address}\"" }) + "\"set bridge #{@resource[:bridge]} other-config:hwaddr=#{bridge_mac_address} fail_mode=#{@resource[:fail_mode]}\"" }) end list end diff --git a/lib/puppet/type/vs_port.rb b/lib/puppet/type/vs_port.rb index 7992d5f4..032418b5 100644 --- a/lib/puppet/type/vs_port.rb +++ b/lib/puppet/type/vs_port.rb @@ -152,6 +152,17 @@ Puppet::Type.newtype(:vs_port) do end end + newparam(:fail_mode) do + desc "Set fail mode for this port. + + Possible values are 'standalone' or 'secure'. + By default standalone is used." + + defaultto "standalone" + + newvalues(:"standalone", :"secure") + end + autorequire(:vs_bridge) do self[:bridge] if self[:bridge] end diff --git a/spec/unit/puppet/lib/type/vs_port_spec.rb b/spec/unit/puppet/lib/type/vs_port_spec.rb new file mode 100644 index 00000000..ffb289e2 --- /dev/null +++ b/spec/unit/puppet/lib/type/vs_port_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Puppet::Type.type(:vs_port) do + + it "should support only secure and standalone as a value for fail_mode" do + expect do + described_class.new(:name => 'foo', :ensure => :present, :fail_mode => 'secure') + end.to_not raise_error + expect do + described_class.new(:name => 'foo', :ensure => :present, :fail_mode => 'standalone') + end.to_not raise_error + expect do + described_class.new(:name => 'foo', :ensure => :present, :fail_mode => 'nomode') + end.to raise_error(Puppet::ResourceError, /Invalid value/) + end + +end