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


Reply via email to