Revert "Fix problem with bonds configuration"

This reverts commit e84fb82f37.

Change-Id: I36f9832e30ced0046d6341d2036f0f3b341602da
Сloses-Bug: #1492781
This commit is contained in:
Alexey Shtokolov
2015-09-06 15:35:31 +00:00
parent e84fb82f37
commit 038e1c6dd5
6 changed files with 16 additions and 54 deletions

View File

@@ -628,27 +628,6 @@ class Puppet::Provider::L2_base < Puppet::Provider
# ---------------------------------------------------------------------------
def self.set_sys_class(property, value)
begin
property_file = File.open(property, 'a')
property_file.write("#{value.to_s}")
property_file.close
rescue Exception => e
raise(Puppet::ExecutionFailure, "Can't set property '#{property}' to '#{value}': #{e.message}")
end
end
def self.get_sys_class(property, array=false)
begin
rv = File.open(property).read.split(/\s+/)
rescue Exception => e
raise(Puppet::ExecutionFailure, "Can't get property '#{property}': #{e.message}")
end
(array ? rv : rv[0])
end
# ---------------------------------------------------------------------------
def self.set_mtu(iface, mtu=1500)
if File.symlink?("/sys/class/net/#{iface}")
debug("Set MTU to '#{mtu}' for interface '#{iface}'")

View File

@@ -96,49 +96,33 @@ Puppet::Type.type(:l2_bond).provide(:lnx, :parent => Puppet::Provider::Lnx_base)
end
if @property_flush.has_key? :bond_properties
# change bond_properties
bond_prop_dir = "/sys/class/net/#{@resource[:bond]}"
need_reassemble = [:mode, :lacp_rate]
#todo(sv): inplement re-assembling only if it need
#todo(sv): re-set only delta between reality and requested
runtime_bond_state = !self.class.get_iface_state(@resource[:bond]).nil?
runtime_slave_ports = self.class.get_sys_class("#{bond_prop_dir}/bonding/slaves", true)
runtime_slave_ports = File.open("/sys/class/net/#{@resource[:bond]}/bonding/slaves", "r").read.split(/\s+/)
runtime_slave_ports.each do |eth|
# for most bond options we should disassemble bond before re-configuration. In the kernel module documentation
# says, that bond interface should be downed, but it's not enouth.
self.class.set_sys_class("#{bond_prop_dir}/bonding/slaves", "-#{eth}")
File.open("/sys/class/net/#{@resource[:bond]}/bonding/slaves", "a") {|f| f << "-#{eth}"}
end
iproute('link', 'set', 'down', 'dev', @resource[:bond])
# setup primary bond_properties
primary_bond_properties = [:mode, :xmit_hash_policy]
curr_mode = self.class.get_sys_class("#{bond_prop_dir}/bonding/mode")
if curr_mode != @property_flush[:bond_properties][:mode]
debug("Setting mode '#{@property_flush[:bond_properties][:mode]}' for bond '#{@resource[:bond]}'")
self.class.set_sys_class("#{bond_prop_dir}/bonding/mode", @property_flush[:bond_properties][:mode])
sleep(1)
end
curr_xhp = self.class.get_sys_class("#{bond_prop_dir}/bonding/xmit_hash_policy")
if @property_flush[:bond_properties].has_key?(:xmit_hash_policy) && curr_mode != @property_flush[:bond_properties][:xmit_hash_policy]
debug("Setting xmit_hash_policy '#{@property_flush[:bond_properties][:xmit_hash_policy]}' for bond '#{@resource[:bond]}'")
self.class.set_sys_class("#{bond_prop_dir}/bonding/xmit_hash_policy", @property_flush[:bond_properties][:xmit_hash_policy])
sleep(1)
end
# setup another bond_properties
@property_flush[:bond_properties].reject{|k,v| primary_bond_properties.include? k}.each_pair do |prop, val|
@property_flush[:bond_properties].each_pair do |prop, val|
if self.class.lnx_bond_allowed_properties_list.include? prop.to_sym
val_should_be = val.to_s
val_actual = self.class.get_sys_class("#{bond_prop_dir}/bonding/#{prop}")
if val_actual != val_should_be
debug("Setting property '#{prop}' to '#{val_should_be}' for bond '#{@resource[:bond]}'")
self.class.set_sys_class("#{bond_prop_dir}/bonding/#{prop}", val_should_be)
end
act_val = val.to_s
else
debug("Unsupported property '#{prop}' for bond '#{@resource[:bond]}'")
act_val = nil
end
if act_val
debug("Set property '#{prop}' to '#{act_val}' for bond '#{@resource[:bond]}'")
File.open("/sys/class/net/#{@resource[:bond]}/bonding/#{prop}", 'a') {|f| f << "#{act_val.to_s}"}
end
end
# re-assemble bond after configuration
iproute('link', 'set', 'up', 'dev', @resource[:bond]) if runtime_bond_state
runtime_slave_ports.each do |eth|
self.class.set_sys_class("#{bond_prop_dir}/bonding/slaves", "+#{eth}")
File.open("/sys/class/net/#{@resource[:bond]}/bonding/slaves", "a") {|f| f << "+#{eth}"}
end
end
if @property_flush.has_key? :bridge

View File

@@ -25,7 +25,7 @@ Puppet::Type.newtype(:l2_bond) do
Regexp.new(/^en[ospx]\h+/),
Regexp.new(/^em\d*/),
Regexp.new(/^p\d+p\d+/),
Regexp.new(/^ib[\h\.]*/),
Regexp.new(/^ib[\h\.]+/),
].select{|x| x.match(val)}.empty?
fail("#{err} '#{val}'")
end
@@ -228,4 +228,4 @@ Puppet::Type.newtype(:l2_bond) do
# end
# end
end
# vim: set ts=2 sw=2 et :
# vim: set ts=2 sw=2 et :

View File

@@ -26,7 +26,7 @@ Puppet::Type.newtype(:l2_bridge) do
Regexp.new(/^en[ospx]\h+/),
Regexp.new(/^em\d*/),
Regexp.new(/^p\d+p\d+/),
Regexp.new(/^ib[\h\.]*/),
Regexp.new(/^ib[\h\.]+/),
].select{|x| x.match(val)}.empty?
fail("#{err} '#{val}'")
end
@@ -127,4 +127,4 @@ Puppet::Type.newtype(:l2_bridge) do
end
end
# vim: set ts=2 sw=2 et :
# vim: set ts=2 sw=2 et :

View File

@@ -23,11 +23,10 @@ describe Puppet::Type.type(:l2_bond) do
it "should be failed for name #{iname}" do
expect { described_class.new({
:name => "#{iname}",
})}.to raise_error(Puppet::ResourceError, %r{Wrong\s+bond\s+name})
})}.to raise_error(Puppet::ResourceError, /Wrong\s+bond\s+name/)
end
end
end
end
# vim: set ts=2 sw=2 et
# vim: set ts=2 sw=2 et