Hello community, here is the log from the commit of package yast2-network for openSUSE:Factory checked in at 2016-08-18 10:20:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-network (Old) and /work/SRC/openSUSE:Factory/.yast2-network.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-network" Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-network/yast2-network.changes 2016-08-10 19:54:21.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.yast2-network.new/yast2-network.changes 2016-08-18 10:20:03.000000000 +0200 @@ -1,0 +2,19 @@ +Thu Aug 11 19:02:36 UTC 2016 - [email protected] + +- bnc#985905 + - do not limit number of bonding slaves to 10 +- 3.1.165 + +------------------------------------------------------------------- +Thu Aug 11 08:23:00 UTC 2016 - [email protected] + +- bnc#988786 + - Create bridge when proposing configuration for VM host. +- 3.1.164 + +------------------------------------------------------------------- +Wed Aug 10 18:07:12 UTC 2016 - [email protected] + +- Improved parsing of vlan ids that are longer than one character. + +------------------------------------------------------------------- Old: ---- yast2-network-3.1.163.tar.bz2 New: ---- yast2-network-3.1.165.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-network.spec ++++++ --- /var/tmp/diff_new_pack.KtMIDK/_old 2016-08-18 10:20:05.000000000 +0200 +++ /var/tmp/diff_new_pack.KtMIDK/_new 2016-08-18 10:20:05.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-network -Version: 3.1.163 +Version: 3.1.165 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ yast2-network-3.1.163.tar.bz2 -> yast2-network-3.1.165.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.163/package/yast2-network.changes new/yast2-network-3.1.165/package/yast2-network.changes --- old/yast2-network-3.1.163/package/yast2-network.changes 2016-08-09 18:43:38.000000000 +0200 +++ new/yast2-network-3.1.165/package/yast2-network.changes 2016-08-15 08:58:35.000000000 +0200 @@ -1,4 +1,23 @@ ------------------------------------------------------------------- +Thu Aug 11 19:02:36 UTC 2016 - [email protected] + +- bnc#985905 + - do not limit number of bonding slaves to 10 +- 3.1.165 + +------------------------------------------------------------------- +Thu Aug 11 08:23:00 UTC 2016 - [email protected] + +- bnc#988786 + - Create bridge when proposing configuration for VM host. +- 3.1.164 + +------------------------------------------------------------------- +Wed Aug 10 18:07:12 UTC 2016 - [email protected] + +- Improved parsing of vlan ids that are longer than one character. + +------------------------------------------------------------------- Wed Aug 10 16:07:26 UTC 2016 - [email protected] - bnc#991486 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.163/package/yast2-network.spec new/yast2-network-3.1.165/package/yast2-network.spec --- old/yast2-network-3.1.163/package/yast2-network.spec 2016-08-09 18:43:38.000000000 +0200 +++ new/yast2-network-3.1.165/package/yast2-network.spec 2016-08-15 08:58:35.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-network -Version: 3.1.163 +Version: 3.1.165 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.163/src/include/network/lan/hardware.rb new/yast2-network-3.1.165/src/include/network/lan/hardware.rb --- old/yast2-network-3.1.163/src/include/network/lan/hardware.rb 2016-08-09 18:43:38.000000000 +0200 +++ new/yast2-network-3.1.165/src/include/network/lan/hardware.rb 2016-08-15 08:58:35.000000000 +0200 @@ -834,7 +834,7 @@ end if LanItems.type == "vlan" # for vlan devices named vlanN pre-set vlan_id to N, otherwise default to 0 - LanItems.vlan_id = nm[VLAN_SIZE].to_i.to_s + LanItems.vlan_id = nm[VLAN_SIZE..-1] end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.163/src/modules/Lan.rb new/yast2-network-3.1.165/src/modules/Lan.rb --- old/yast2-network-3.1.163/src/modules/Lan.rb 2016-08-09 18:43:38.000000000 +0200 +++ new/yast2-network-3.1.165/src/modules/Lan.rb 2016-08-15 08:58:35.000000000 +0200 @@ -990,11 +990,16 @@ configure_as_bridge_port(ifcfg) Ops.set(LanItems.Items, [current, "ifcfg"], new_ifcfg) - LanItems.SetModified LanItems.force_restart = true Builtins.y2internal("List %1", NetworkInterfaces.List("")) # re-read configuration to see new items in UI LanItems.Read + + # note: LanItems.Read resets modification flag + # the Read is used as a trick how to update LanItems' internal + # cache according NetworkInterfaces' one. As NetworkInterfaces' + # cache was edited directly, LanItems is not aware of changes. + LanItems.SetModified end else Builtins.y2warning("empty ifcfg") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.163/src/modules/LanItems.rb new/yast2-network-3.1.165/src/modules/LanItems.rb --- old/yast2-network-3.1.163/src/modules/LanItems.rb 2016-08-09 18:43:38.000000000 +0200 +++ new/yast2-network-3.1.165/src/modules/LanItems.rb 2016-08-15 08:58:35.000000000 +0200 @@ -127,8 +127,6 @@ @bond_slaves = [] @bond_option = "" - @MAX_BOND_SLAVE = 10 - # VLAN option @vlan_etherdevice = "" @vlan_id = "" @@ -1192,28 +1190,16 @@ firmware end - # Creates list of devices enslaved in any bond device. + # Creates list of devices enslaved in the bond device. + # + # @param bond_master [string] device name of a bond master (e.g. bond0) + # @return list of the bond slaves def GetBondSlaves(bond_master) - slaves = [] - slave_index = 0 - - while Ops.less_than(slave_index, @MAX_BOND_SLAVE) - slave = Ops.get_string( - NetworkInterfaces.FilterDevices("netcard"), - [ - "bond", - bond_master, - Builtins.sformat("BONDING_SLAVE%1", slave_index) - ], - "" - ) + net_cards = NetworkInterfaces.FilterDevices("netcard") || { "bond" => {} } + bonds = net_cards["bond"] || {} + bond_map = bonds[bond_master] || {} - if Ops.greater_than(Builtins.size(slave), 0) - slaves = Builtins.add(slaves, slave) - end - - slave_index = Ops.add(slave_index, 1) - end + slaves = bond_map.select { |k, _| k.start_with?("BONDING_SLAVE") }.values deep_copy(slaves) end @@ -1817,6 +1803,32 @@ devmap end + # Sets bonding specific sysconfig options in given device map + # + # If any bonding specific option is present already it gets overwritten + # by new ones in case of collision. If any BONDING_SLAVEx from devmap + # is not set, then its value is set to 'nil' + # + # @param devmap [Hash] hash of a device's sysconfig variables + # @param slaves [array] list of strings, each string is a bond slave name + # + # @return [Hash] updated copy of the device map + def setup_bonding(devmap, slaves, options) + raise ArgumentError, "Device map has to be provided." if devmap.nil? + + devmap = deep_copy(devmap) + slaves ||= [] + + slave_opts = devmap.select { |k, _| k.start_with?("BONDING_SLAVE") }.keys + slave_opts.each { |s| devmap[s] = nil } + slaves.each_with_index { |s, i| devmap["BONDING_SLAVE#{i}"] = s } + + devmap["BONDING_MODULE_OPTS"] = options || "" + devmap["BONDING_MASTER"] = "yes" + + devmap + end + # Commit pending operation # # It commits *only* content of the corresponding ifcfg into NetworkInterfaces. @@ -1864,20 +1876,10 @@ case @type when "bond" - i = 0 - @bond_slaves.each do |slave| - newdev["BONDING_SLAVE#{i}"] = slave - i += 1 - end - - # assign nil to rest BONDING_SLAVEn to remove them - while i < @MAX_BOND_SLAVE - newdev["BONDING_SLAVE#{i}"] = nil - i += 1 - end - - newdev["BONDING_MODULE_OPTS"] = @bond_option - newdev["BONDING_MASTER"] = "yes" + # we need current slaves - when some of them is not used anymore we need to + # configure it for deletion from ifcfg (SCR expects special value nil) + current_slaves = (GetCurrentMap() || {}).select { |k, _| k.start_with?("BONDING_SLAVE") } + newdev = setup_bonding(newdev.merge(current_slaves), @bond_slaves, @bond_option) when "vlan" newdev["ETHERDEVICE"] = @vlan_etherdevice diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.163/test/bond_test.rb new/yast2-network-3.1.165/test/bond_test.rb --- old/yast2-network-3.1.163/test/bond_test.rb 2016-08-09 18:43:38.000000000 +0200 +++ new/yast2-network-3.1.165/test/bond_test.rb 2016-08-15 08:58:35.000000000 +0200 @@ -102,5 +102,52 @@ expect(LanItems.BuildBondIndex).to match(expected_mapping) end end + + describe "#setup_bonding" do + let(:bonding_map) { { "BONDING_SLAVE0" => "eth0", "BONDING_SLAVE1" => "enp0s3" } } + let(:mandatory_opts) { { "BONDING_MASTER" => "yes", "BONDING_MODULE_OPTS" => option } } + let(:option) { "bonding_option" } + + it "sets BONDING_MASTER and BONDING_MODULE_OPTS" do + expected_map = mandatory_opts + + ret = LanItems.setup_bonding({}, [], option) + + expect(ret.select { |k, _| k !~ /BONDING_SLAVE/ }).to match(expected_map) + end + + it "sets BONDING_SLAVEx options according to given list" do + expected_map = bonding_map + + ret = LanItems.setup_bonding({}, ["eth0", "enp0s3"], nil) + + expect(ret.select { |k, v| k =~ /BONDING_SLAVE/ && !v.nil? }).to match expected_map + end + + it "clears BONDING_SLAVEx which are not needed anymore" do + expected_map = { "BONDING_SLAVE0" => "enp0s3" } + + ret = LanItems.setup_bonding(bonding_map, ["enp0s3"], nil) + + expect(ret.select { |k, v| k =~ /BONDING_SLAVE/ && !v.nil? }).to match expected_map + # Following is required to get unneeded BONDING_SLAVEx deleted + # during write + expect(ret).to have_key("BONDING_SLAVE1") + expect(ret["BONDING_SLAVE1"]).to be nil + end + + it "clears all BONDING_SLAVESx and sets BONDING_MASTER, BONDING_OPTIONS when no slaves provided" do + ret = LanItems.setup_bonding(bonding_map, nil, option) + expected_slaves = { "BONDING_SLAVE0" => nil, "BONDING_SLAVE1" => nil } + expected_map = mandatory_opts.merge(expected_slaves) + + expect(ret).to match(expected_map) + end + + it "raises an exception in case of nil devmap" do + expect { LanItems.setup_bonding(nil, nil, nil) } + .to raise_error(ArgumentError, "Device map has to be provided.") + end + end end end
