Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package skupper for openSUSE:Factory checked 
in at 2024-11-05 15:40:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/skupper (Old)
 and      /work/SRC/openSUSE:Factory/.skupper.new.2020 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "skupper"

Tue Nov  5 15:40:55 2024 rev:3 rq:1221248 version:1.8.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/skupper/skupper.changes  2024-09-16 
17:41:37.861473520 +0200
+++ /work/SRC/openSUSE:Factory/.skupper.new.2020/skupper.changes        
2024-11-05 15:41:19.394835615 +0100
@@ -1,0 +2,13 @@
+Mon Nov 04 19:49:49 UTC 2024 - opensuse_buildserv...@ojkastl.de
+
+- Update to version 1.8.2:
+  * update for 1.8.2
+  * refine peer link deletion (#1726)
+  * Fixed version in update test (#1711)
+  * Cleanup old link records.  When incoming link is deleted,
+    remove corresponding outgoing link.   (#1699)
+  * add v2 section (#1687)
+  * Update link cost when receiving a flow record (#1695)
+  * Podman sites update issue (#1675)
+
+-------------------------------------------------------------------

Old:
----
  skupper-1.8.1.obscpio

New:
----
  skupper-1.8.2.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ skupper.spec ++++++
--- /var/tmp/diff_new_pack.GR7KP8/_old  2024-11-05 15:41:20.454880058 +0100
+++ /var/tmp/diff_new_pack.GR7KP8/_new  2024-11-05 15:41:20.454880058 +0100
@@ -19,7 +19,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           skupper
-Version:        1.8.1
+Version:        1.8.2
 Release:        0
 Summary:        Virtual Application Network, enabling rich hybrid cloud 
communication
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.GR7KP8/_old  2024-11-05 15:41:20.510882406 +0100
+++ /var/tmp/diff_new_pack.GR7KP8/_new  2024-11-05 15:41:20.510882406 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/skupperproject/skupper</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">1.8.1</param>
+    <param name="revision">1.8.2</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
   </service>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.GR7KP8/_old  2024-11-05 15:41:20.534883412 +0100
+++ /var/tmp/diff_new_pack.GR7KP8/_new  2024-11-05 15:41:20.534883412 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/skupperproject/skupper</param>
-              <param 
name="changesrevision">b44bc8ab3469fb3c02a0df7ac8334452bc391654</param></service></servicedata>
+              <param 
name="changesrevision">149f4a5588c532d6ab1fc489b19ca24633e521e7</param></service></servicedata>
 (No newline at EOF)
 

++++++ generated.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/client/generated/libpod/client/containers/container_restore_libpod_parameters.go
 
new/client/generated/libpod/client/containers/container_restore_libpod_parameters.go
--- 
old/client/generated/libpod/client/containers/container_restore_libpod_parameters.go
        2024-09-14 10:24:44.838237417 +0200
+++ 
new/client/generated/libpod/client/containers/container_restore_libpod_parameters.go
        2024-11-04 21:06:39.874846900 +0100
@@ -100,15 +100,15 @@
 
        /* Name.
 
-          the name or id of the container
+          the name of the container when restored from a tar. can only be used 
with import
        */
-       PathName string
+       QueryName *string
 
        /* Name.
 
-          the name of the container when restored from a tar. can only be used 
with import
+          the name or id of the container
        */
-       QueryName *string
+       PathName string
 
        /* PrintStats.
 
@@ -241,17 +241,6 @@
        o.LeaveRunning = leaveRunning
 }
 
-// WithPathName adds the name to the container restore libpod params
-func (o *ContainerRestoreLibpodParams) WithPathName(name string) 
*ContainerRestoreLibpodParams {
-       o.SetPathName(name)
-       return o
-}
-
-// SetPathName adds the name to the container restore libpod params
-func (o *ContainerRestoreLibpodParams) SetPathName(name string) {
-       o.PathName = name
-}
-
 // WithQueryName adds the name to the container restore libpod params
 func (o *ContainerRestoreLibpodParams) WithQueryName(name *string) 
*ContainerRestoreLibpodParams {
        o.SetQueryName(name)
@@ -263,6 +252,17 @@
        o.QueryName = name
 }
 
+// WithPathName adds the name to the container restore libpod params
+func (o *ContainerRestoreLibpodParams) WithPathName(name string) 
*ContainerRestoreLibpodParams {
+       o.SetPathName(name)
+       return o
+}
+
+// SetPathName adds the name to the container restore libpod params
+func (o *ContainerRestoreLibpodParams) SetPathName(name string) {
+       o.PathName = name
+}
+
 // WithPrintStats adds the printStats to the container restore libpod params
 func (o *ContainerRestoreLibpodParams) WithPrintStats(printStats *bool) 
*ContainerRestoreLibpodParams {
        o.SetPrintStats(printStats)
@@ -395,11 +395,6 @@
                }
        }
 
-       // path param name
-       if err := r.SetPathParam("name", o.PathName); err != nil {
-               return err
-       }
-
        if o.QueryName != nil {
 
                // query param name
@@ -417,6 +412,11 @@
                }
        }
 
+       // path param name
+       if err := r.SetPathParam("name", o.PathName); err != nil {
+               return err
+       }
+
        if o.PrintStats != nil {
 
                // query param printStats
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/client/generated/libpod/client/containers_compat/container_rename_parameters.go
 
new/client/generated/libpod/client/containers_compat/container_rename_parameters.go
--- 
old/client/generated/libpod/client/containers_compat/container_rename_parameters.go
 2024-09-14 10:24:46.834873372 +0200
+++ 
new/client/generated/libpod/client/containers_compat/container_rename_parameters.go
 2024-11-04 21:06:53.817982497 +0100
@@ -63,15 +63,15 @@
 
        /* Name.
 
-          Full or partial ID or full name of the container to rename
+          New name for the container
        */
-       PathName string
+       QueryName string
 
        /* Name.
 
-          New name for the container
+          Full or partial ID or full name of the container to rename
        */
-       QueryName string
+       PathName string
 
        timeout    time.Duration
        Context    context.Context
@@ -126,17 +126,6 @@
        o.HTTPClient = client
 }
 
-// WithPathName adds the name to the container rename params
-func (o *ContainerRenameParams) WithPathName(name string) 
*ContainerRenameParams {
-       o.SetPathName(name)
-       return o
-}
-
-// SetPathName adds the name to the container rename params
-func (o *ContainerRenameParams) SetPathName(name string) {
-       o.PathName = name
-}
-
 // WithQueryName adds the name to the container rename params
 func (o *ContainerRenameParams) WithQueryName(name string) 
*ContainerRenameParams {
        o.SetQueryName(name)
@@ -148,6 +137,17 @@
        o.QueryName = name
 }
 
+// WithPathName adds the name to the container rename params
+func (o *ContainerRenameParams) WithPathName(name string) 
*ContainerRenameParams {
+       o.SetPathName(name)
+       return o
+}
+
+// SetPathName adds the name to the container rename params
+func (o *ContainerRenameParams) SetPathName(name string) {
+       o.PathName = name
+}
+
 // WriteToRequest writes these params to a swagger request
 func (o *ContainerRenameParams) WriteToRequest(r runtime.ClientRequest, reg 
strfmt.Registry) error {
 
@@ -156,11 +156,6 @@
        }
        var res []error
 
-       // path param name
-       if err := r.SetPathParam("name", o.PathName); err != nil {
-               return err
-       }
-
        // query param name
        qrName := o.QueryName
        qName := qrName
@@ -171,6 +166,11 @@
                }
        }
 
+       // path param name
+       if err := r.SetPathParam("name", o.PathName); err != nil {
+               return err
+       }
+
        if len(res) > 0 {
                return errors.CompositeValidationError(res...)
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/client/generated/libpod/models/network_connect_options.go 
new/client/generated/libpod/models/network_connect_options.go
--- old/client/generated/libpod/models/network_connect_options.go       
2024-09-14 10:24:33.608410155 +0200
+++ new/client/generated/libpod/models/network_connect_options.go       
2024-11-04 21:05:48.138913933 +0100
@@ -49,10 +49,6 @@
                res = append(res, err)
        }
 
-       if err := m.validateStaticMac(formats); err != nil {
-               res = append(res, err)
-       }
-
        if len(res) > 0 {
                return errors.CompositeValidationError(res...)
        }
@@ -80,23 +76,6 @@
        return nil
 }
 
-func (m *NetworkConnectOptions) validateStaticMac(formats strfmt.Registry) 
error {
-       if swag.IsZero(m.StaticMac) { // not required
-               return nil
-       }
-
-       if err := m.StaticMac.Validate(formats); err != nil {
-               if ve, ok := err.(*errors.Validation); ok {
-                       return ve.ValidateName("static_mac")
-               } else if ce, ok := err.(*errors.CompositeError); ok {
-                       return ce.ValidateName("static_mac")
-               }
-               return err
-       }
-
-       return nil
-}
-
 // ContextValidate validate this network connect options based on the context 
it is used
 func (m *NetworkConnectOptions) ContextValidate(ctx context.Context, formats 
strfmt.Registry) error {
        var res []error
@@ -105,10 +84,6 @@
                res = append(res, err)
        }
 
-       if err := m.contextValidateStaticMac(ctx, formats); err != nil {
-               res = append(res, err)
-       }
-
        if len(res) > 0 {
                return errors.CompositeValidationError(res...)
        }
@@ -131,20 +106,6 @@
        }
 
        return nil
-}
-
-func (m *NetworkConnectOptions) contextValidateStaticMac(ctx context.Context, 
formats strfmt.Registry) error {
-
-       if err := m.StaticMac.ContextValidate(ctx, formats); err != nil {
-               if ve, ok := err.(*errors.Validation); ok {
-                       return ve.ValidateName("static_mac")
-               } else if ce, ok := err.(*errors.CompositeError); ok {
-                       return ce.ValidateName("static_mac")
-               }
-               return err
-       }
-
-       return nil
 }
 
 // MarshalBinary interface implementation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/client/generated/libpod/models/swag_network_connect_request.go 
new/client/generated/libpod/models/swag_network_connect_request.go
--- old/client/generated/libpod/models/swag_network_connect_request.go  
2024-09-14 10:24:43.148263413 +0200
+++ new/client/generated/libpod/models/swag_network_connect_request.go  
2024-11-04 21:06:31.384967300 +0100
@@ -48,10 +48,6 @@
                res = append(res, err)
        }
 
-       if err := m.validateStaticMac(formats); err != nil {
-               res = append(res, err)
-       }
-
        if len(res) > 0 {
                return errors.CompositeValidationError(res...)
        }
@@ -79,23 +75,6 @@
        return nil
 }
 
-func (m *SwagNetworkConnectRequest) validateStaticMac(formats strfmt.Registry) 
error {
-       if swag.IsZero(m.StaticMac) { // not required
-               return nil
-       }
-
-       if err := m.StaticMac.Validate(formats); err != nil {
-               if ve, ok := err.(*errors.Validation); ok {
-                       return ve.ValidateName("static_mac")
-               } else if ce, ok := err.(*errors.CompositeError); ok {
-                       return ce.ValidateName("static_mac")
-               }
-               return err
-       }
-
-       return nil
-}
-
 // ContextValidate validate this swag network connect request based on the 
context it is used
 func (m *SwagNetworkConnectRequest) ContextValidate(ctx context.Context, 
formats strfmt.Registry) error {
        var res []error
@@ -104,10 +83,6 @@
                res = append(res, err)
        }
 
-       if err := m.contextValidateStaticMac(ctx, formats); err != nil {
-               res = append(res, err)
-       }
-
        if len(res) > 0 {
                return errors.CompositeValidationError(res...)
        }
@@ -130,20 +105,6 @@
        }
 
        return nil
-}
-
-func (m *SwagNetworkConnectRequest) contextValidateStaticMac(ctx 
context.Context, formats strfmt.Registry) error {
-
-       if err := m.StaticMac.ContextValidate(ctx, formats); err != nil {
-               if ve, ok := err.(*errors.Validation); ok {
-                       return ve.ValidateName("static_mac")
-               } else if ce, ok := err.(*errors.CompositeError); ok {
-                       return ce.ValidateName("static_mac")
-               }
-               return err
-       }
-
-       return nil
 }
 
 // MarshalBinary interface implementation

++++++ skupper-1.8.1.obscpio -> skupper-1.8.2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/README.md new/skupper-1.8.2/README.md
--- old/skupper-1.8.1/README.md 2024-09-09 12:34:02.000000000 +0200
+++ new/skupper-1.8.2/README.md 2024-11-04 12:08:20.000000000 +0100
@@ -33,5 +33,10 @@
 * [CLI](cmd/skupper/README.md) (This replaces the [Skupper CLI 
repo](https://github.com/skupperproject/skupper-cli))
 * [Console (Preview)](https://github.com/skupperproject/skupper-console)
 
+# Skupper Major Release (Version 2)
+
+The [v2 Branch](https://github.com/skupperproject/skupper/tree/v2) focuses on 
the development of
+the upcoming major release of the Skupper poject.
+
 # Licensing
 Skupper uses the [Skupper 
Router](https://github.com/skupperproject/skupper-router) project and is 
released under the same [Apache License 
2.0](https://github.com/skupperproject/skupper/blob/main/LICENSE).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/cmd/flow-collector/deploy.yaml 
new/skupper-1.8.2/cmd/flow-collector/deploy.yaml
--- old/skupper-1.8.1/cmd/flow-collector/deploy.yaml    2024-09-09 
12:34:02.000000000 +0200
+++ new/skupper-1.8.2/cmd/flow-collector/deploy.yaml    2024-11-04 
12:08:20.000000000 +0100
@@ -66,7 +66,7 @@
           #type: RuntimeDefault
       containers:
       - name: skupper-flow-collector
-        image: quay.io/skupper/flow-collector:1.8.1
+        image: quay.io/skupper/flow-collector:1.8.2
         imagePullPolicy: Always
         securityContext:
           capabilities:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/skupper-1.8.1/cmd/site-controller/deploy-watch-all-ns.yaml 
new/skupper-1.8.2/cmd/site-controller/deploy-watch-all-ns.yaml
--- old/skupper-1.8.1/cmd/site-controller/deploy-watch-all-ns.yaml      
2024-09-09 12:34:02.000000000 +0200
+++ new/skupper-1.8.2/cmd/site-controller/deploy-watch-all-ns.yaml      
2024-11-04 12:08:20.000000000 +0100
@@ -194,7 +194,7 @@
           type: RuntimeDefault
       containers:
       - name: site-controller
-        image: quay.io/skupper/site-controller:1.8.1
+        image: quay.io/skupper/site-controller:1.8.2
         securityContext:
           capabilities:
             drop:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/skupper-1.8.1/cmd/site-controller/deploy-watch-current-ns.yaml 
new/skupper-1.8.2/cmd/site-controller/deploy-watch-current-ns.yaml
--- old/skupper-1.8.1/cmd/site-controller/deploy-watch-current-ns.yaml  
2024-09-09 12:34:02.000000000 +0200
+++ new/skupper-1.8.2/cmd/site-controller/deploy-watch-current-ns.yaml  
2024-11-04 12:08:20.000000000 +0100
@@ -137,7 +137,7 @@
           type: RuntimeDefault
       containers:
       - name: site-controller
-        image: quay.io/skupper/site-controller:1.8.1
+        image: quay.io/skupper/site-controller:1.8.2
         securityContext:
           capabilities:
             drop:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/pkg/domain/podman/update_v1_5_4.go 
new/skupper-1.8.2/pkg/domain/podman/update_v1_5_4.go
--- old/skupper-1.8.1/pkg/domain/podman/update_v1_5_4.go        2024-09-09 
12:34:02.000000000 +0200
+++ new/skupper-1.8.2/pkg/domain/podman/update_v1_5_4.go        1970-01-01 
01:00:00.000000000 +0100
@@ -1,68 +0,0 @@
-package podman
-
-import (
-       "context"
-       "fmt"
-
-       "github.com/skupperproject/skupper/api/types"
-       "github.com/skupperproject/skupper/client/container"
-       clientpodman "github.com/skupperproject/skupper/client/podman"
-       "github.com/skupperproject/skupper/pkg/domain"
-       "github.com/skupperproject/skupper/pkg/utils"
-)
-
-type SkupperNetworkStatusVolume struct {
-       cli *clientpodman.PodmanRestClient
-}
-
-func (m *SkupperNetworkStatusVolume) WithCli(cli 
*clientpodman.PodmanRestClient) *SkupperNetworkStatusVolume {
-       m.cli = cli
-       return m
-}
-
-func (m *SkupperNetworkStatusVolume) Info() string {
-       return "Create and mount the skupper-network-status volume"
-}
-
-func (m *SkupperNetworkStatusVolume) AppliesTo(siteVersion string) bool {
-       curVersion := utils.ParseVersion(siteVersion)
-       return !(&curVersion).IsUndefined() && 
utils.LessRecentThanVersion(siteVersion, m.Version())
-}
-
-func (m *SkupperNetworkStatusVolume) Version() string {
-       return "1.5.4"
-}
-
-func (m *SkupperNetworkStatusVolume) Priority() domain.UpdatePriority {
-       return domain.PriorityNormal
-}
-
-func (m *SkupperNetworkStatusVolume) Run(ctx context.Context) 
*domain.UpdateResult {
-       volumeName := types.NetworkStatusConfigMapName
-       containerName := types.ControllerPodmanContainerName
-       var result = &domain.UpdateResult{}
-
-       _, err := m.cli.ContainerUpdate(containerName, func(newContainer 
*container.Container) {
-               for _, mount := range newContainer.Mounts {
-                       if mount.Name == volumeName {
-                               return
-                       }
-               }
-               // volume not mounted, creating and mounting
-               volume, err := m.cli.VolumeCreate(&container.Volume{Name: 
volumeName})
-               if err != nil && volume == nil {
-                       result.AddErrors(fmt.Errorf("error creating volume %s: 
%s", volumeName, err))
-               } else if volume == nil {
-                       result.AddChange(fmt.Sprintf("Volume has been created: 
%s", volumeName))
-               }
-               newContainer.Mounts = append(newContainer.Mounts, 
container.Volume{
-                       Name:        volumeName,
-                       Destination: "/etc/skupper-network-status",
-               })
-               result.AddChange(fmt.Sprintf("Mounted volume %s into %s", 
volumeName, containerName))
-       })
-       if err != nil {
-               result.AddErrors(fmt.Errorf("error updating container %s: %s", 
containerName, err))
-       }
-       return result
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/skupper-1.8.1/pkg/domain/podman/update_v1_5_4_test.go 
new/skupper-1.8.2/pkg/domain/podman/update_v1_5_4_test.go
--- old/skupper-1.8.1/pkg/domain/podman/update_v1_5_4_test.go   2024-09-09 
12:34:02.000000000 +0200
+++ new/skupper-1.8.2/pkg/domain/podman/update_v1_5_4_test.go   1970-01-01 
01:00:00.000000000 +0100
@@ -1,107 +0,0 @@
-//go:build podman
-// +build podman
-
-package podman
-
-import (
-       "context"
-       "testing"
-
-       "github.com/skupperproject/skupper/api/types"
-       clientpodman "github.com/skupperproject/skupper/client/podman"
-       "gotest.tools/assert"
-)
-
-func TestSkupperNetworkStatusVolumeUpdate(t *testing.T) {
-       cli := clientpodman.NewPodmanClientMock(mockContainers())
-       mock := cli.RestClient.(*clientpodman.RestClientMock)
-       localMockVolumes, localMockVolumeFiles := mockVolumes()
-       // removing new volume to enforce update task to run
-       delete(localMockVolumes, "skupper-network-status")
-       assert.Assert(t, mock.MockVolumeFiles(localMockVolumes, 
localMockVolumeFiles))
-       defer func() {
-               _ = mock.CleanupMockVolumeDir()
-       }()
-       ch := NewRouterConfigHandlerPodman(cli)
-
-       updateSkupperNetworkVolumeTask := 
new(SkupperNetworkStatusVolume).WithCli(cli)
-
-       tests := []struct {
-               name       string
-               curVersion string
-               version    string
-               applies    bool
-               changed    bool
-       }{
-               {
-                       name:       "newer-version",
-                       curVersion: "1.5.3",
-                       version:    "1.5.4",
-                       applies:    true,
-                       changed:    true,
-               },
-               {
-                       name:       "newer-version-volume-exists",
-                       curVersion: "1.5.3",
-                       version:    "1.5.4",
-                       applies:    true,
-                       changed:    false,
-               },
-               {
-                       name:       "older-version",
-                       curVersion: "1.5.4",
-                       version:    "1.5.3",
-                       applies:    false,
-               },
-               {
-                       name:       "invalid-old-version",
-                       curVersion: "invalid-old-version",
-                       version:    "1.5.4",
-                       applies:    false,
-               },
-               {
-                       name:       "invalid-versions",
-                       curVersion: "invalid-old-version",
-                       version:    "invalid-new-version",
-                       applies:    false,
-               },
-       }
-       for _, test := range tests {
-               t.Run(test.name, func(t *testing.T) {
-                       cfg, err := ch.GetRouterConfig()
-                       assert.Assert(t, err)
-                       siteMeta := cfg.GetSiteMetadata()
-                       siteMeta.Version = test.curVersion
-                       cfg.SetSiteMetadata(&siteMeta)
-                       assert.Assert(t, ch.SaveRouterConfig(cfg))
-                       // simulating new version
-                       t.Logf("New version: %s - current mock site version: 
%s", test.version, test.curVersion)
-
-                       // validating if task has to be executed or not
-                       assert.Assert(t, 
updateSkupperNetworkVolumeTask.AppliesTo(test.curVersion) == test.applies)
-
-                       // mocking task execution
-                       if test.applies {
-                               res := 
updateSkupperNetworkVolumeTask.Run(context.Background())
-                               assert.Assert(t, len(res.Errors) == 0)
-                               assert.Assert(t, res.Changed() == test.changed)
-                               if test.changed {
-                                       assert.Assert(t, 1 == 
len(res.GetChanges()))
-                                       // removing mounted volume from 
controller container
-                                       volumeMounted := false
-                                       for _, c := range mock.Containers {
-                                               if c.Name != 
types.ControllerPodmanContainerName {
-                                                       continue
-                                               }
-                                               for _, m := range c.Mounts {
-                                                       if m.Name == 
types.NetworkStatusConfigMapName {
-                                                               volumeMounted = 
true
-                                                       }
-                                               }
-                                       }
-                                       assert.Assert(t, volumeMounted)
-                               }
-                       }
-               })
-       }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/pkg/domain/podman/update_v1_6_0.go 
new/skupper-1.8.2/pkg/domain/podman/update_v1_6_0.go
--- old/skupper-1.8.1/pkg/domain/podman/update_v1_6_0.go        1970-01-01 
01:00:00.000000000 +0100
+++ new/skupper-1.8.2/pkg/domain/podman/update_v1_6_0.go        2024-11-04 
12:08:20.000000000 +0100
@@ -0,0 +1,68 @@
+package podman
+
+import (
+       "context"
+       "fmt"
+
+       "github.com/skupperproject/skupper/api/types"
+       "github.com/skupperproject/skupper/client/container"
+       clientpodman "github.com/skupperproject/skupper/client/podman"
+       "github.com/skupperproject/skupper/pkg/domain"
+       "github.com/skupperproject/skupper/pkg/utils"
+)
+
+type SkupperNetworkStatusVolume struct {
+       cli *clientpodman.PodmanRestClient
+}
+
+func (m *SkupperNetworkStatusVolume) WithCli(cli 
*clientpodman.PodmanRestClient) *SkupperNetworkStatusVolume {
+       m.cli = cli
+       return m
+}
+
+func (m *SkupperNetworkStatusVolume) Info() string {
+       return "Create and mount the skupper-network-status volume"
+}
+
+func (m *SkupperNetworkStatusVolume) AppliesTo(siteVersion string) bool {
+       curVersion := utils.ParseVersion(siteVersion)
+       return !(&curVersion).IsUndefined() && 
utils.LessRecentThanVersion(siteVersion, m.Version())
+}
+
+func (m *SkupperNetworkStatusVolume) Version() string {
+       return "1.6.0"
+}
+
+func (m *SkupperNetworkStatusVolume) Priority() domain.UpdatePriority {
+       return domain.PriorityNormal
+}
+
+func (m *SkupperNetworkStatusVolume) Run(ctx context.Context) 
*domain.UpdateResult {
+       volumeName := types.NetworkStatusConfigMapName
+       containerName := types.ControllerPodmanContainerName
+       var result = &domain.UpdateResult{}
+
+       _, err := m.cli.ContainerUpdate(containerName, func(newContainer 
*container.Container) {
+               for _, mount := range newContainer.Mounts {
+                       if mount.Name == volumeName {
+                               return
+                       }
+               }
+               // volume not mounted, creating and mounting
+               volume, err := m.cli.VolumeCreate(&container.Volume{Name: 
volumeName})
+               if err != nil && volume == nil {
+                       result.AddErrors(fmt.Errorf("error creating volume %s: 
%s", volumeName, err))
+               } else if volume == nil {
+                       result.AddChange(fmt.Sprintf("Volume has been created: 
%s", volumeName))
+               }
+               newContainer.Mounts = append(newContainer.Mounts, 
container.Volume{
+                       Name:        volumeName,
+                       Destination: "/etc/skupper-network-status",
+               })
+               result.AddChange(fmt.Sprintf("Mounted volume %s into %s", 
volumeName, containerName))
+       })
+       if err != nil {
+               result.AddErrors(fmt.Errorf("error updating container %s: %s", 
containerName, err))
+       }
+       return result
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/skupper-1.8.1/pkg/domain/podman/update_v1_6_0_test.go 
new/skupper-1.8.2/pkg/domain/podman/update_v1_6_0_test.go
--- old/skupper-1.8.1/pkg/domain/podman/update_v1_6_0_test.go   1970-01-01 
01:00:00.000000000 +0100
+++ new/skupper-1.8.2/pkg/domain/podman/update_v1_6_0_test.go   2024-11-04 
12:08:20.000000000 +0100
@@ -0,0 +1,107 @@
+//go:build podman
+// +build podman
+
+package podman
+
+import (
+       "context"
+       "testing"
+
+       "github.com/skupperproject/skupper/api/types"
+       clientpodman "github.com/skupperproject/skupper/client/podman"
+       "gotest.tools/assert"
+)
+
+func TestSkupperNetworkStatusVolumeUpdate(t *testing.T) {
+       cli := clientpodman.NewPodmanClientMock(mockContainers())
+       mock := cli.RestClient.(*clientpodman.RestClientMock)
+       localMockVolumes, localMockVolumeFiles := mockVolumes()
+       // removing new volume to enforce update task to run
+       delete(localMockVolumes, "skupper-network-status")
+       assert.Assert(t, mock.MockVolumeFiles(localMockVolumes, 
localMockVolumeFiles))
+       defer func() {
+               _ = mock.CleanupMockVolumeDir()
+       }()
+       ch := NewRouterConfigHandlerPodman(cli)
+
+       updateSkupperNetworkVolumeTask := 
new(SkupperNetworkStatusVolume).WithCli(cli)
+
+       tests := []struct {
+               name       string
+               curVersion string
+               version    string
+               applies    bool
+               changed    bool
+       }{
+               {
+                       name:       "newer-version",
+                       curVersion: "1.5.3",
+                       version:    "1.6.0",
+                       applies:    true,
+                       changed:    true,
+               },
+               {
+                       name:       "newer-version-volume-exists",
+                       curVersion: "1.5.3",
+                       version:    "1.6.0",
+                       applies:    true,
+                       changed:    false,
+               },
+               {
+                       name:       "older-version",
+                       curVersion: "1.6.0",
+                       version:    "1.5.3",
+                       applies:    false,
+               },
+               {
+                       name:       "invalid-old-version",
+                       curVersion: "invalid-old-version",
+                       version:    "1.6.0",
+                       applies:    false,
+               },
+               {
+                       name:       "invalid-versions",
+                       curVersion: "invalid-old-version",
+                       version:    "invalid-new-version",
+                       applies:    false,
+               },
+       }
+       for _, test := range tests {
+               t.Run(test.name, func(t *testing.T) {
+                       cfg, err := ch.GetRouterConfig()
+                       assert.Assert(t, err)
+                       siteMeta := cfg.GetSiteMetadata()
+                       siteMeta.Version = test.curVersion
+                       cfg.SetSiteMetadata(&siteMeta)
+                       assert.Assert(t, ch.SaveRouterConfig(cfg))
+                       // simulating new version
+                       t.Logf("New version: %s - current mock site version: 
%s", test.version, test.curVersion)
+
+                       // validating if task has to be executed or not
+                       assert.Assert(t, 
updateSkupperNetworkVolumeTask.AppliesTo(test.curVersion) == test.applies)
+
+                       // mocking task execution
+                       if test.applies {
+                               res := 
updateSkupperNetworkVolumeTask.Run(context.Background())
+                               assert.Assert(t, len(res.Errors) == 0)
+                               assert.Assert(t, res.Changed() == test.changed)
+                               if test.changed {
+                                       assert.Assert(t, 1 == 
len(res.GetChanges()))
+                                       // removing mounted volume from 
controller container
+                                       volumeMounted := false
+                                       for _, c := range mock.Containers {
+                                               if c.Name != 
types.ControllerPodmanContainerName {
+                                                       continue
+                                               }
+                                               for _, m := range c.Mounts {
+                                                       if m.Name == 
types.NetworkStatusConfigMapName {
+                                                               volumeMounted = 
true
+                                                       }
+                                               }
+                                       }
+                                       assert.Assert(t, volumeMounted)
+                               }
+                       }
+               })
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/pkg/flow/flow_mem_driver.go 
new/skupper-1.8.2/pkg/flow/flow_mem_driver.go
--- old/skupper-1.8.1/pkg/flow/flow_mem_driver.go       2024-09-09 
12:34:02.000000000 +0200
+++ new/skupper-1.8.2/pkg/flow/flow_mem_driver.go       2024-11-04 
12:08:20.000000000 +0100
@@ -809,8 +809,38 @@
                                }
                        } else {
                                if link.EndTime > 0 {
+                                       // find and delete the corresponding 
link for the peer router
+                                       if currentParentRouter, ok := 
fc.Routers[current.Parent]; ok {
+                                               if current.Direction != nil && 
current.Name != nil && currentParentRouter.Name != nil {
+                                                       var peerRouterId string
+                                                       peerDirection := 
Outgoing
+                                                       if *current.Direction 
== Outgoing {
+                                                               peerDirection = 
Incoming
+                                                       }
+                                                       for _, router := range 
fc.Routers {
+                                                               if router.Name 
!= nil && *current.Name == normalizeRouterName(*router.Name) {
+                                                                       
peerRouterId = router.Identity
+                                                                       break
+                                                               }
+                                                       }
+                                                       for _, eLink := range 
fc.Links {
+                                                               if 
eLink.Direction != nil && *eLink.Direction == peerDirection && eLink.Parent == 
peerRouterId && eLink.Name != nil && *eLink.Name == 
normalizeRouterName(*currentParentRouter.Name) {
+                                                                       
eLink.EndTime = link.EndTime
+                                                                       
fc.deleteRecord(eLink)
+                                                                       break
+                                                               }
+                                                       }
+                                               }
+                                       }
                                        current.EndTime = link.EndTime
                                        fc.deleteRecord(current)
+                               } else {
+                                       if current.LinkCost == nil && 
link.LinkCost != nil {
+                                               current.LinkCost = link.LinkCost
+                                               if fc.mode == RecordStatus {
+                                                       fc.updateNetworkStatus()
+                                               }
+                                       }
                                }
                        }
                        fc.updateLastHeard(link.Source)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/pkg/flow/flow_mem_driver_test.go 
new/skupper-1.8.2/pkg/flow/flow_mem_driver_test.go
--- old/skupper-1.8.1/pkg/flow/flow_mem_driver_test.go  2024-09-09 
12:34:02.000000000 +0200
+++ new/skupper-1.8.2/pkg/flow/flow_mem_driver_test.go  2024-11-04 
12:08:20.000000000 +0100
@@ -1623,3 +1623,96 @@
                })
        }
 }
+
+func TestLinkOutgoingDelete(t *testing.T) {
+       name1 := "east-skupper-router-1111-router1"
+       name2 := "west-skupper-router-1111-router0"
+
+       links := []LinkRecord{
+               {
+                       Base: Base{
+                               RecType:   recordNames[Link],
+                               Identity:  "link:0",
+                               Parent:    "router0:0",
+                               StartTime: uint64(time.Now().UnixNano()) / 
uint64(time.Microsecond),
+                       },
+                       Name:      &name1,
+                       Direction: &Incoming,
+               },
+               {
+                       Base: Base{
+                               RecType:   recordNames[Link],
+                               Identity:  "link:1",
+                               Parent:    "router1:0",
+                               StartTime: uint64(time.Now().UnixNano()) / 
uint64(time.Microsecond),
+                       },
+                       Name:      &name2,
+                       Direction: &Outgoing,
+               },
+       }
+
+       routers := []RouterRecord{
+               {
+                       Base: Base{
+                               RecType:   recordNames[Router],
+                               Identity:  "router0:0",
+                               Parent:    "site:0",
+                               StartTime: uint64(time.Now().UnixNano()) / 
uint64(time.Microsecond),
+                       },
+                       Name: &name2,
+               },
+               {
+                       Base: Base{
+                               RecType:   recordNames[Router],
+                               Identity:  "router1:0",
+                               Parent:    "site:0",
+                               StartTime: uint64(time.Now().UnixNano()) / 
uint64(time.Microsecond),
+                       },
+                       Name: &name1,
+               },
+       }
+
+       u, _ := time.ParseDuration("5m")
+       client := fake.NewSimpleClientset()
+       configMapClient := client.CoreV1().ConfigMaps("default")
+       _, err := configMapClient.Create(
+               context.Background(),
+               &v1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: 
types.NetworkStatusConfigMapName}},
+               metav1.CreateOptions{},
+       )
+       if err != nil {
+               t.Fatalf("kube client setup failed: %v", err)
+       }
+       fc := NewFlowCollector(FlowCollectorSpec{
+               Mode:                RecordStatus,
+               Namespace:           "default",
+               Origin:              "origin",
+               PromReg:             nil,
+               ConnectionFactory:   nil,
+               FlowRecordTtl:       u,
+               NetworkStatusClient: client,
+       })
+
+       for _, r := range routers {
+               err := fc.updateRecord(r)
+               assert.Assert(t, err)
+       }
+
+       for _, l := range links {
+               err := fc.updateRecord(l)
+               assert.Assert(t, err)
+       }
+
+       assert.Equal(t, len(fc.Links), 2)
+       assert.Equal(t, len(fc.Routers), 2)
+
+       endTime := uint64(time.Now().UnixNano()) / uint64(time.Microsecond)
+
+       links[0].EndTime = endTime
+       err = fc.updateRecord(links[0])
+       assert.Assert(t, err)
+
+       // expect code to remove both incoming and corresponding outgoing links
+       assert.Equal(t, len(fc.Links), 0)
+
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/skupper-1.8.1/pkg/images/images.go 
new/skupper-1.8.2/pkg/images/images.go
--- old/skupper-1.8.1/pkg/images/images.go      2024-09-09 12:34:02.000000000 
+0200
+++ new/skupper-1.8.2/pkg/images/images.go      2024-11-04 12:08:20.000000000 
+0100
@@ -2,12 +2,12 @@
 
 const (
        DefaultImageRegistry       string = "quay.io/skupper"
-       RouterImageName            string = "skupper-router:2.7.1"
-       ServiceControllerImageName string = "service-controller:1.8.1"
-       ControllerPodmanImageName  string = "controller-podman:1.8.1"
-       ConfigSyncImageName        string = "config-sync:1.8.1"
-       FlowCollectorImageName     string = "flow-collector:1.8.1"
-       SiteControllerImageName    string = "site-controller:1.8.1"
+       RouterImageName            string = "skupper-router:2.7.2"
+       ServiceControllerImageName string = "service-controller:1.8.2"
+       ControllerPodmanImageName  string = "controller-podman:1.8.2"
+       ConfigSyncImageName        string = "config-sync:1.8.2"
+       FlowCollectorImageName     string = "flow-collector:1.8.2"
+       SiteControllerImageName    string = "site-controller:1.8.2"
        PrometheusImageRegistry    string = "quay.io/prometheus"
        PrometheusServerImageName  string = "prometheus:v2.42.0"
        OauthProxyImageRegistry    string = "quay.io/openshift"

++++++ skupper.obsinfo ++++++
--- /var/tmp/diff_new_pack.GR7KP8/_old  2024-11-05 15:41:21.058905382 +0100
+++ /var/tmp/diff_new_pack.GR7KP8/_new  2024-11-05 15:41:21.062905550 +0100
@@ -1,5 +1,5 @@
 name: skupper
-version: 1.8.1
-mtime: 1725878042
-commit: b44bc8ab3469fb3c02a0df7ac8334452bc391654
+version: 1.8.2
+mtime: 1730718500
+commit: 149f4a5588c532d6ab1fc489b19ca24633e521e7
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/skupper/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.skupper.new.2020/vendor.tar.gz differ: char 12, 
line 1

Reply via email to