Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package suseconnect-ng for openSUSE:Factory checked in at 2026-03-20 21:19:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/suseconnect-ng (Old) and /work/SRC/openSUSE:Factory/.suseconnect-ng.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "suseconnect-ng" Fri Mar 20 21:19:31 2026 rev:31 rq:1341153 version:1.20.0 Changes: -------- --- /work/SRC/openSUSE:Factory/suseconnect-ng/suseconnect-ng.changes 2026-01-26 10:43:44.191275879 +0100 +++ /work/SRC/openSUSE:Factory/.suseconnect-ng.new.8177/suseconnect-ng.changes 2026-03-20 21:19:56.601841082 +0100 @@ -1,0 +2,8 @@ +Wed Mar 4 16:48:14 UTC 2026 - Felix Schnizlein <[email protected]> + +- Regressions found during QA test runs: + - Ignore product in announce call (bsc#1257490) + - Registration to SMT server with failed (bsc#1257625) + - Backported by PATCH: fix-libsuseconnect-and-pci.patch + +------------------------------------------------------------------- @@ -2,0 +11 @@ + New: ---- fix-libsuseconnect-and-pci.patch ----------(New B)---------- New: - Registration to SMT server with failed (bsc#1257625) - Backported by PATCH: fix-libsuseconnect-and-pci.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ suseconnect-ng.spec ++++++ --- /var/tmp/diff_new_pack.w8epdR/_old 2026-03-20 21:19:57.437875719 +0100 +++ /var/tmp/diff_new_pack.w8epdR/_new 2026-03-20 21:19:57.437875719 +0100 @@ -2,7 +2,6 @@ # spec file for package suseconnect-ng # # Copyright (c) 2026 SUSE LLC and contributors -# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -23,12 +22,14 @@ Version: 1.20.0 Release: 0 URL: https://github.com/SUSE/connect-ng -License: LGPL-2.1-or-later +License: LGPL-3.0-or-later Summary: Utility to register a system with the SUSE Customer Center Group: System/Management Source: suseconnect-ng-%{version}.tar.xz Source1: %{name}-rpmlintrc Source2: vendor.tar.xz +# PATCH-FIX-UPSTREAM fix-libsuseconnect-and-pci.patch +Patch0: fix-libsuseconnect-and-pci.patch # Build against latest golang in Tumbleweed and # go1.21-openssl on all other distributions ++++++ fix-libsuseconnect-and-pci.patch ++++++ >From 6ed2e5cefb4301b84bbb62e2b5ccebdc76aff1cf Mon Sep 17 00:00:00 2001 From: sampsone <[email protected]> Date: Fri, 20 Feb 2026 08:13:35 -0600 Subject: [PATCH] SMT requires a distro_target in the payload. --- internal/connect/client.go | 27 ++++++++++---------- internal/connect/wrapper.go | 24 +++++++++-------- pkg/registration/product.go | 9 +++++++ pkg/registration/product_test.go | 21 +++++++++++++++ pkg/registration/register.go | 13 +++++++--- third_party/libsuseconnect/libsuseconnect.go | 2 +- 6 files changed, 67 insertions(+), 29 deletions(-) diff --git a/internal/connect/client.go b/internal/connect/client.go index ffc9fdb..8144f0b 100644 --- a/internal/connect/client.go +++ b/internal/connect/client.go @@ -53,28 +53,27 @@ func Register(api WrappedAPI, opts *Options) error { printInformation(fmt.Sprintf("Registering system to %s", opts.ServerName()), opts) } - if err := api.RegisterOrKeepAlive(opts.Token, opts.InstanceDataFile, opts.EnableSystemUptimeTracking); err != nil { - return err - } - installReleasePkg := true - product := opts.Product - if product.IsEmpty() { + if opts.Product.IsEmpty() { base, err := zypper.BaseProduct() if err != nil { return err } - product = base + opts.Product = base installReleasePkg = false } - if service, err := registerProduct(conn, opts, product, installReleasePkg); err == nil { + if err := api.RegisterOrKeepAlive(opts); err != nil { + return err + } + + if service, err := registerProduct(conn, opts, opts.Product, installReleasePkg); err == nil { out.Products = append(out.Products, ProductService{ Product: ProductOut{ - Name: product.Name, - Identifier: product.Identifier, - Version: product.Version, - Arch: product.Arch, + Name: opts.Product.Name, + Identifier: opts.Product.Identifier, + Version: opts.Product.Version, + Arch: opts.Product.Arch, }, Service: ServiceOut{ Id: service.ID, @@ -86,8 +85,8 @@ func Register(api WrappedAPI, opts *Options) error { return err } - if product.IsBase { - p, err := registration.FetchProductInfo(conn, product.Identifier, product.Version, product.Arch) + if opts.Product.IsBase { + p, err := registration.FetchProductInfo(conn, opts.Product.Identifier, opts.Product.Version, opts.Product.Arch) if err != nil { return err } diff --git a/internal/connect/wrapper.go b/internal/connect/wrapper.go index aab721f..4455ca3 100644 --- a/internal/connect/wrapper.go +++ b/internal/connect/wrapper.go @@ -19,8 +19,8 @@ import ( // when unit testing type WrappedAPI interface { KeepAlive(uptimeTracking bool) error - Register(regcode, instanceDataFile string) error - RegisterOrKeepAlive(regcode, instanceDataFile string, uptimeTracking bool) error + Register(opts *Options) error + RegisterOrKeepAlive(opts *Options) error IsRegistered() bool AssignLabels(labels []string) ([]labels.Label, error) @@ -129,8 +129,9 @@ func (w Wrapper) KeepAlive(uptimeTracking bool) error { return err } -func (w Wrapper) Register(regcode, instanceDataFile string) error { +func (w Wrapper) Register(opts *Options) error { hwinfo, err := FetchSystemInformation() + if err != nil { return fmt.Errorf("could not fetch system's information: %v", err) } @@ -140,27 +141,28 @@ func (w Wrapper) Register(regcode, instanceDataFile string) error { // "extra" data. This will be used inside of the `registration.Register` // code. extraData := registration.ExtraData{} - if instanceDataFile != "" { - data, err := os.ReadFile(instanceDataFile) + if opts.InstanceDataFile != "" { + data, err := os.ReadFile(opts.InstanceDataFile) if err != nil { return err } extraData["instance_data"] = string(data) } - // NOTE: we are not interested in the code. Hence, we don't save it - // anywhere. - _, err = registration.Register(w.Connection, regcode, hostname, hwinfo, extraData) + // add distro_target to extra data + extraData["distro_target"] = opts.Product.DistroTarget() + + _, err = registration.Register(w.Connection, opts.Token, hostname, hwinfo, extraData) return err } // RegisterOrKeepAlive calls either `Register` or `KeepAlive` depending on // whether the current system is registered or not. -func (w Wrapper) RegisterOrKeepAlive(regcode, instanceDataFile string, uptimeTracking bool) error { +func (w Wrapper) RegisterOrKeepAlive(opts *Options) error { if w.Registered { - return w.KeepAlive(uptimeTracking) + return w.KeepAlive(opts.EnableSystemUptimeTracking) } - return w.Register(regcode, instanceDataFile) + return w.Register(opts) } func (w Wrapper) IsRegistered() bool { diff --git a/pkg/registration/product.go b/pkg/registration/product.go index 7c82e4a..bb7a02e 100644 --- a/pkg/registration/product.go +++ b/pkg/registration/product.go @@ -149,6 +149,15 @@ func (p Product) FindExtension(triplet string) (Product, error) { return Product{}, fmt.Errorf("extension not found") } +func (p Product) DistroTarget() string { + identifier := strings.ToLower(p.Identifier) + if strings.HasPrefix(identifier, "sle") { + identifier = "sle" + } + version := strings.Split(p.Version, ".")[0] + return identifier + "-" + version + "-" + p.Arch +} + // Transforms the current product into a list of extensions. func (p Product) ToExtensionsList() []Product { res := make([]Product, 0) diff --git a/pkg/registration/product_test.go b/pkg/registration/product_test.go index baff8ad..a9f4c15 100644 --- a/pkg/registration/product_test.go +++ b/pkg/registration/product_test.go @@ -20,6 +20,27 @@ func TestProductToTriplet(t *testing.T) { assert.Equal("SLES/15.5/x86_64", product.ToTriplet()) } +func TestProductDistroTargetSle(t *testing.T) { + assert := assert.New(t) + + productJson := fixture(t, "pkg/registration/product_tree.json") + product := Product{} + + assert.NoError(json.Unmarshal(productJson, &product)) + assert.Equal("sle-15-x86_64", product.DistroTarget()) +} + +func TestProductDistroTargetNotSle(t *testing.T) { + assert := assert.New(t) + + productJson := fixture(t, "pkg/registration/product_tree.json") + product := Product{} + + assert.NoError(json.Unmarshal(productJson, &product)) + product.Identifier = "not-suse-really" + assert.Equal("not-suse-really-15-x86_64", product.DistroTarget()) +} + func TestProductTraverseExtensionsFull(t *testing.T) { assert := assert.New(t) diff --git a/pkg/registration/register.go b/pkg/registration/register.go index a8cb088..b83b913 100644 --- a/pkg/registration/register.go +++ b/pkg/registration/register.go @@ -7,7 +7,8 @@ import ( ) type announceRequest struct { - Hostname string `json:"hostname"` + Hostname string `json:"hostname"` + DistroTarget string `json:"distro_target,omitempty"` requestWithInformation } @@ -28,6 +29,14 @@ func Register(conn connection.Connection, regcode, hostname string, systemInform Hostname: hostname, } + // distro_target may be data in extra data, but only needed for smt + // and it must be at the same level in the payload as hostname + // so, if it is present add to payload and remove from extraData + if _, ok := extraData["distro_target"]; ok { + payload.DistroTarget = extraData["distro_target"].(string) + delete(extraData, "distro_target") + } + enrichWithSystemInformation(&payload.requestWithInformation, systemInformation) enrichErr := enrichWithExtraData(&payload.requestWithInformation, extraData) if enrichErr != nil { @@ -35,14 +44,12 @@ func Register(conn connection.Connection, regcode, hostname string, systemInform } creds := conn.GetCredentials() - request, buildErr := conn.BuildRequest("POST", "/connect/subscriptions/systems", payload) if buildErr != nil { return 0, buildErr } connection.AddRegcodeAuth(request, regcode) - response, doErr := conn.Do(request) if doErr != nil { return 0, doErr diff --git a/third_party/libsuseconnect/libsuseconnect.go b/third_party/libsuseconnect/libsuseconnect.go index df93f87..17356ec 100644 --- a/third_party/libsuseconnect/libsuseconnect.go +++ b/third_party/libsuseconnect/libsuseconnect.go @@ -68,7 +68,7 @@ func announce_system(clientParams, distroTarget *C.char) *C.char { opts := loadConfig(C.GoString(clientParams)) api := connect.NewWrappedAPI(opts) - if err := connect.Register(api, opts); err != nil { + if err := api.Register(opts); err != nil { return C.CString(errorToJSON(err)) } -- 2.52.0
