Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package talhelper for openSUSE:Factory checked in at 2026-01-17 14:53:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/talhelper (Old) and /work/SRC/openSUSE:Factory/.talhelper.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "talhelper" Sat Jan 17 14:53:36 2026 rev:37 rq:1327530 version:3.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/talhelper/talhelper.changes 2026-01-14 16:23:01.416779010 +0100 +++ /work/SRC/openSUSE:Factory/.talhelper.new.1928/talhelper.changes 2026-01-17 14:54:27.394439871 +0100 @@ -1,0 +2,12 @@ +Fri Jan 16 06:14:44 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 3.1.1: + * add common function for buildingRoutes + * chore(schema): update talos-extensions.yaml JSON schema (#1381) + * chore(schema): update talos-extensions.yaml JSON schema (#1379) + * fix(deps): update module github.com/budimanjojo/talhelper/v3 to + v3.1.0 + * feat: update Scoop for talhelper version v3.1.0 + * feat: update flake (#1377) + +------------------------------------------------------------------- Old: ---- talhelper-3.1.0.obscpio New: ---- talhelper-3.1.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ talhelper.spec ++++++ --- /var/tmp/diff_new_pack.4OJV8P/_old 2026-01-17 14:54:28.842500237 +0100 +++ /var/tmp/diff_new_pack.4OJV8P/_new 2026-01-17 14:54:28.850500570 +0100 @@ -17,7 +17,7 @@ Name: talhelper -Version: 3.1.0 +Version: 3.1.1 Release: 0 Summary: Tool to help creating Talos kubernetes cluster License: BSD-3-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.4OJV8P/_old 2026-01-17 14:54:28.898502571 +0100 +++ /var/tmp/diff_new_pack.4OJV8P/_new 2026-01-17 14:54:28.898502571 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/budimanjojo/talhelper</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v3.1.0</param> + <param name="revision">v3.1.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.4OJV8P/_old 2026-01-17 14:54:28.954504906 +0100 +++ /var/tmp/diff_new_pack.4OJV8P/_new 2026-01-17 14:54:28.958505073 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/budimanjojo/talhelper</param> - <param name="changesrevision">51f737124d27d43082622188120bd5b86158c4b9</param></service></servicedata> + <param name="changesrevision">074dc70ec0cc4c9690e62798802ff14fb37e29f8</param></service></servicedata> (No newline at EOF) ++++++ talhelper-3.1.0.obscpio -> talhelper-3.1.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/default.nix new/talhelper-3.1.1/default.nix --- old/talhelper-3.1.0/default.nix 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/default.nix 2026-01-15 17:32:49.000000000 +0100 @@ -8,16 +8,16 @@ buildGo125Module rec { pname = "talhelper"; - version = "3.0.45"; + version = "3.1.0"; src = fetchFromGitHub { owner = "budimanjojo"; repo = pname; rev = "v${version}"; - sha256 = "sha256-9oZM6vIyJH8Vw/QhE9SIbrMa4r2LCZdIDRFztFYVVk0="; + sha256 = "sha256-pvJQ6l/Zh5TpGiWe3SXWsUOwFK5WUoGTu76MPyZcXRo="; }; - vendorHash = "sha256-jn5zwEvFqasjQt6FTQpcX8qJ11lM03aMhGyapOOjclA="; + vendorHash = "sha256-AkCUKg5oA2XvvDtE0m9fQdeqowx5A1SnnimF7F/CORg="; ldflags = [ "-s -w -X github.com/budimanjojo/talhelper/v3/cmd.version=v${version}" ]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/hack/tsehelper/go.mod new/talhelper-3.1.1/hack/tsehelper/go.mod --- old/talhelper-3.1.0/hack/tsehelper/go.mod 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/hack/tsehelper/go.mod 2026-01-15 17:32:49.000000000 +0100 @@ -1,9 +1,9 @@ module tsehelper -go 1.25.4 +go 1.25.5 require ( - github.com/budimanjojo/talhelper/v3 v3.0.45 + github.com/budimanjojo/talhelper/v3 v3.1.0 github.com/google/go-containerregistry v0.20.7 github.com/sirupsen/logrus v1.9.4-0.20251023124752-b61f268f75b6 gopkg.in/yaml.v3 v3.0.1 @@ -23,7 +23,7 @@ github.com/pkg/errors v0.9.1 // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/vbatts/tar-split v0.12.2 // indirect - golang.org/x/mod v0.31.0 // indirect - golang.org/x/sync v0.18.0 // indirect - golang.org/x/sys v0.38.0 // indirect + golang.org/x/mod v0.32.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.39.0 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/hack/tsehelper/go.sum new/talhelper-3.1.1/hack/tsehelper/go.sum --- old/talhelper-3.1.0/hack/tsehelper/go.sum 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/hack/tsehelper/go.sum 2026-01-15 17:32:49.000000000 +0100 @@ -84,6 +84,8 @@ github.com/budimanjojo/talhelper/v3 v3.0.44/go.mod h1:Q7nx013ejd41oJXTkujkViwszT6cRo+wvAZHYYh/9J8= github.com/budimanjojo/talhelper/v3 v3.0.45 h1:ClbhSD2MZ2J7Weppakizq8yy5GBMLhWgxxJzdYkQBZ8= github.com/budimanjojo/talhelper/v3 v3.0.45/go.mod h1:Q7nx013ejd41oJXTkujkViwszT6cRo+wvAZHYYh/9J8= +github.com/budimanjojo/talhelper/v3 v3.1.0 h1:0YDjgySRg3SeFFfm7w3ZlJ2DToNWN673x/GONtyd71M= +github.com/budimanjojo/talhelper/v3 v3.1.0/go.mod h1:0LjuZyGUQKRY6TGB0Py9sxFrKbFekdYinnwKLY/osvk= github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= github.com/containerd/stargz-snapshotter/estargz v0.16.3 h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8= @@ -217,6 +219,8 @@ golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= @@ -237,6 +241,8 @@ golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -266,6 +272,8 @@ golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/pkg/config/schemas/talos-extensions.json new/talhelper-3.1.1/pkg/config/schemas/talos-extensions.json --- old/talhelper-3.1.0/pkg/config/schemas/talos-extensions.json 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/pkg/config/schemas/talos-extensions.json 2026-01-15 17:32:49.000000000 +0100 @@ -38827,6 +38827,176 @@ "digest": "sha256:4d3cf4882cb1dc37afd125ea27d0cc3f64767748ea81213c9c6f04bea5e68d5a" } ] + }, + { + "version": "v1.13.0-alpha.0-1-g9f80dff", + "systemExtensions": [ + "siderolabs/amazon-ena", + "siderolabs/amdgpu", + "siderolabs/amd-ucode", + "siderolabs/binfmt-misc", + "siderolabs/bird2", + "siderolabs/bnx2-bnx2x", + "siderolabs/btrfs", + "siderolabs/chelsio-drivers", + "siderolabs/chelsio-firmware", + "siderolabs/cloudflared", + "siderolabs/crun", + "siderolabs/ctr", + "siderolabs/drbd", + "siderolabs/dvb-cx23885", + "siderolabs/dvb-m88ds3103", + "siderolabs/ecr-credential-provider", + "siderolabs/fuse3", + "siderolabs/gasket-driver", + "siderolabs/gpio-pinctrl", + "siderolabs/glibc", + "siderolabs/gvisor", + "siderolabs/gvisor-debug", + "siderolabs/hailort", + "siderolabs/hello-world-service", + "siderolabs/i915", + "siderolabs/intel-ice-firmware", + "siderolabs/intel-ucode", + "siderolabs/iscsi-tools", + "siderolabs/kata-containers", + "siderolabs/lldpd", + "siderolabs/mdadm", + "siderolabs/mei", + "siderolabs/mellanox-mstflint", + "siderolabs/metal-agent", + "siderolabs/multipath-tools", + "siderolabs/nebula", + "siderolabs/netbird", + "siderolabs/newt", + "siderolabs/nfs-utils", + "siderolabs/nfsd", + "siderolabs/nfsrahead", + "siderolabs/nut-client", + "siderolabs/nvidia-container-toolkit-lts", + "siderolabs/nvidia-container-toolkit-production", + "siderolabs/nvidia-fabricmanager-lts", + "siderolabs/nvidia-fabricmanager-production", + "siderolabs/nvidia-gdrdrv-device", + "siderolabs/nvidia-open-gpu-kernel-modules-lts", + "siderolabs/nvidia-open-gpu-kernel-modules-production", + "siderolabs/nvme-cli", + "siderolabs/soci-snapshotter", + "siderolabs/panfrost", + "siderolabs/qemu-guest-agent", + "siderolabs/qlogic-firmware", + "siderolabs/realtek-firmware", + "siderolabs/revpi-firmware", + "siderolabs/rockchip-rknn", + "siderolabs/spin", + "siderolabs/stargz-snapshotter", + "siderolabs/tailscale", + "siderolabs/tenstorrent", + "siderolabs/thunderbolt", + "siderolabs/trident-iscsi-tools", + "siderolabs/uinput", + "siderolabs/usb-modem-drivers", + "siderolabs/usb-audio-drivers", + "siderolabs/util-linux-tools", + "siderolabs/v4l-uvc-drivers", + "siderolabs/vc4", + "siderolabs/vmtoolsd-guest-agent", + "siderolabs/wasmedge", + "siderolabs/xdma-driver", + "siderolabs/xe", + "siderolabs/xen-guest-agent", + "siderolabs/youki", + "siderolabs/zerotier", + "siderolabs/zfs", + "siderolabs/nonfree-kmod-nvidia-lts", + "siderolabs/nonfree-kmod-nvidia-production" + ], + "overlays": null + }, + { + "version": "v1.13.0-alpha.0-2-ga265b08", + "systemExtensions": [ + "siderolabs/amazon-ena", + "siderolabs/amdgpu", + "siderolabs/amd-ucode", + "siderolabs/binfmt-misc", + "siderolabs/bird2", + "siderolabs/bnx2-bnx2x", + "siderolabs/btrfs", + "siderolabs/chelsio-drivers", + "siderolabs/chelsio-firmware", + "siderolabs/cloudflared", + "siderolabs/crun", + "siderolabs/ctr", + "siderolabs/drbd", + "siderolabs/dvb-cx23885", + "siderolabs/dvb-m88ds3103", + "siderolabs/ecr-credential-provider", + "siderolabs/fuse3", + "siderolabs/gasket-driver", + "siderolabs/gpio-pinctrl", + "siderolabs/glibc", + "siderolabs/gvisor", + "siderolabs/gvisor-debug", + "siderolabs/hailort", + "siderolabs/hello-world-service", + "siderolabs/i915", + "siderolabs/intel-ice-firmware", + "siderolabs/intel-ucode", + "siderolabs/iscsi-tools", + "siderolabs/kata-containers", + "siderolabs/lldpd", + "siderolabs/mdadm", + "siderolabs/mei", + "siderolabs/mellanox-mstflint", + "siderolabs/metal-agent", + "siderolabs/multipath-tools", + "siderolabs/nebula", + "siderolabs/netbird", + "siderolabs/newt", + "siderolabs/nfs-utils", + "siderolabs/nfsd", + "siderolabs/nfsrahead", + "siderolabs/nut-client", + "siderolabs/nvidia-container-toolkit-lts", + "siderolabs/nvidia-container-toolkit-production", + "siderolabs/nvidia-fabricmanager-lts", + "siderolabs/nvidia-fabricmanager-production", + "siderolabs/nvidia-gdrdrv-device", + "siderolabs/nvidia-open-gpu-kernel-modules-lts", + "siderolabs/nvidia-open-gpu-kernel-modules-production", + "siderolabs/nvme-cli", + "siderolabs/soci-snapshotter", + "siderolabs/panfrost", + "siderolabs/qemu-guest-agent", + "siderolabs/qlogic-firmware", + "siderolabs/realtek-firmware", + "siderolabs/revpi-firmware", + "siderolabs/rockchip-rknn", + "siderolabs/spin", + "siderolabs/stargz-snapshotter", + "siderolabs/tailscale", + "siderolabs/tenstorrent", + "siderolabs/thunderbolt", + "siderolabs/trident-iscsi-tools", + "siderolabs/uinput", + "siderolabs/usb-modem-drivers", + "siderolabs/usb-audio-drivers", + "siderolabs/util-linux-tools", + "siderolabs/v4l-uvc-drivers", + "siderolabs/vc4", + "siderolabs/vmtoolsd-guest-agent", + "siderolabs/wasmedge", + "siderolabs/xdma-driver", + "siderolabs/xe", + "siderolabs/xen-guest-agent", + "siderolabs/youki", + "siderolabs/zerotier", + "siderolabs/zfs", + "siderolabs/nonfree-kmod-nvidia-lts", + "siderolabs/nonfree-kmod-nvidia-production" + ], + "overlays": null } ] } \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/pkg/talos/networkconfig.go new/talhelper-3.1.1/pkg/talos/networkconfig.go --- old/talhelper-3.1.0/pkg/talos/networkconfig.go 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/pkg/talos/networkconfig.go 2026-01-15 17:32:49.000000000 +0100 @@ -677,48 +677,11 @@ } for _, route := range device.DeviceRoutes { - routeConfig := network.RouteConfig{} - - networkStr := route.Network() - if networkStr == "" { - continue - } - - prefix, err := netip.ParsePrefix(networkStr) + routeConfig, err := buildRouteConfig(route) if err != nil { continue } - - // For default routes (0.0.0.0/0 or ::/0), omit the destination field - // and let Talos infer it from the gateway's address family - isDefaultRoute := (prefix.String() == "0.0.0.0/0" || prefix.String() == "::/0") - if !isDefaultRoute { - routeConfig.RouteDestination = network.Prefix{Prefix: prefix} - } - - if route.Gateway() != "" { - gateway, err := netip.ParseAddr(route.Gateway()) - if err == nil { - routeConfig.RouteGateway = network.Addr{Addr: gateway} - } - } - - if route.Source() != "" { - source, err := netip.ParseAddr(route.Source()) - if err == nil { - routeConfig.RouteSource = network.Addr{Addr: source} - } - } - - if route.Metric() > 0 { - routeConfig.RouteMetric = route.Metric() - } - - if route.MTU() > 0 { - routeConfig.RouteMTU = route.MTU() - } - - linkConfig.LinkRoutes = append(linkConfig.LinkRoutes, routeConfig) + linkConfig.LinkRoutes = append(linkConfig.LinkRoutes, *routeConfig) } if device.DeviceMTU > 0 { @@ -763,8 +726,8 @@ return nil } - vlanInterface := device.DeviceInterface if vlan.VlanID > 0 { + vlanInterface := fmt.Sprintf("%s.%d", device.DeviceInterface, vlan.VlanID) vlanConfig := network.NewVLANConfigV1Alpha1(vlanInterface) vlanConfig.VLANIDConfig = vlan.VlanID vlanConfig.ParentLinkConfig = device.DeviceInterface @@ -791,41 +754,11 @@ if len(vlan.VlanRoutes) > 0 { for _, route := range vlan.VlanRoutes { - routeSpec := network.RouteConfig{} - - if route.Network() != "" { - prefix, err := netip.ParsePrefix(route.Network()) - if err != nil { - continue - } - routeSpec.RouteDestination = network.Prefix{Prefix: prefix} - } else { + routeConfig, err := buildRouteConfig(route) + if err != nil { continue } - - if route.Gateway() != "" { - gateway, err := netip.ParseAddr(route.Gateway()) - if err == nil { - routeSpec.RouteGateway = network.Addr{Addr: gateway} - } - } - - if route.Source() != "" { - source, err := netip.ParseAddr(route.Source()) - if err == nil { - routeSpec.RouteSource = network.Addr{Addr: source} - } - } - - if route.Metric() > 0 { - routeSpec.RouteMetric = route.Metric() - } - - if route.MTU() > 0 { - routeSpec.RouteMTU = route.MTU() - } - - vlanConfig.LinkRoutes = append(vlanConfig.LinkRoutes, routeSpec) + vlanConfig.LinkRoutes = append(vlanConfig.LinkRoutes, *routeConfig) } } @@ -981,6 +914,57 @@ device.DeviceWireguardConfig != nil || device.DeviceBridge != nil } +func buildRouteConfig(route interface { + Network() string + Gateway() string + Source() string + Metric() uint32 + MTU() uint32 +}) (*network.RouteConfig, error) { + networkStr := route.Network() + if networkStr == "" { + return nil, fmt.Errorf("route network is empty") + } + + prefix, err := netip.ParsePrefix(networkStr) + if err != nil { + return nil, fmt.Errorf("invalid network prefix: %w", err) + } + + routeConfig := &network.RouteConfig{} + + // For default routes (0.0.0.0/0 or ::/0), omit the destination field + // and let Talos infer it from the gateway's address family + isDefaultRoute := (prefix.String() == "0.0.0.0/0" || prefix.String() == "::/0") + if !isDefaultRoute { + routeConfig.RouteDestination = network.Prefix{Prefix: prefix} + } + + if route.Gateway() != "" { + gateway, err := netip.ParseAddr(route.Gateway()) + if err == nil { + routeConfig.RouteGateway = network.Addr{Addr: gateway} + } + } + + if route.Source() != "" { + source, err := netip.ParseAddr(route.Source()) + if err == nil { + routeConfig.RouteSource = network.Addr{Addr: source} + } + } + + if route.Metric() > 0 { + routeConfig.RouteMetric = route.Metric() + } + + if route.MTU() > 0 { + routeConfig.RouteMTU = route.MTU() + } + + return routeConfig, nil +} + func addCommonLinkConfig(linkConfig *network.CommonLinkConfig, device *v1alpha1.Device) { if device == nil || linkConfig == nil { return @@ -1006,48 +990,11 @@ } for _, route := range device.DeviceRoutes { - routeConfig := network.RouteConfig{} - - networkStr := route.Network() - if networkStr == "" { - continue - } - - prefix, err := netip.ParsePrefix(networkStr) + routeConfig, err := buildRouteConfig(route) if err != nil { continue } - - // For default routes (0.0.0.0/0 or ::/0), omit the destination field - // and let Talos infer it from the gateway's address family - isDefaultRoute := (prefix.String() == "0.0.0.0/0" || prefix.String() == "::/0") - if !isDefaultRoute { - routeConfig.RouteDestination = network.Prefix{Prefix: prefix} - } - - if route.Gateway() != "" { - gateway, err := netip.ParseAddr(route.Gateway()) - if err == nil { - routeConfig.RouteGateway = network.Addr{Addr: gateway} - } - } - - if route.Source() != "" { - source, err := netip.ParseAddr(route.Source()) - if err == nil { - routeConfig.RouteSource = network.Addr{Addr: source} - } - } - - if route.Metric() > 0 { - routeConfig.RouteMetric = route.Metric() - } - - if route.MTU() > 0 { - routeConfig.RouteMTU = route.MTU() - } - - linkConfig.LinkRoutes = append(linkConfig.LinkRoutes, routeConfig) + linkConfig.LinkRoutes = append(linkConfig.LinkRoutes, *routeConfig) } if device.DeviceMTU > 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/pkg/talos/networkconfig_test.go new/talhelper-3.1.1/pkg/talos/networkconfig_test.go --- old/talhelper-3.1.0/pkg/talos/networkconfig_test.go 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/pkg/talos/networkconfig_test.go 2026-01-15 17:32:49.000000000 +0100 @@ -664,8 +664,8 @@ t.Fatal("expected VLAN config, got nil") } - if result.MetaName != "eth0" { - t.Errorf("expected name=eth0, got %s", result.MetaName) + if result.MetaName != "eth0.100" { + t.Errorf("expected name=eth0.100, got %s", result.MetaName) } if result.VLANIDConfig != 100 { @@ -722,8 +722,8 @@ if !bytes.Contains(vlanBytes, []byte("kind: VLANConfig")) { t.Error("expected output to contain 'kind: VLANConfig'") } - if !bytes.Contains(vlanBytes, []byte("name: eth0")) { - t.Error("expected output to contain 'name: eth0'") + if !bytes.Contains(vlanBytes, []byte("name: eth0.100")) { + t.Error("expected output to contain 'name: eth0.100'") } if !bytes.Contains(vlanBytes, []byte("vlanID: 100")) { t.Error("expected output to contain 'vlanID: 100'") @@ -734,6 +734,107 @@ t.Logf("VLAN config output:\n%s", vlanStr) } +func TestGenerateVLANConfigMultipleVLANs(t *testing.T) { + data := []byte(`nodes: + - hostname: node1 + networkInterfaces: + - interface: eth0 + vlans: + - vlanId: 100 + addresses: + - 192.168.100.1/24 + - vlanId: 200 + addresses: + - 192.168.200.1/24 + - vlanId: 300 + addresses: + - 192.168.300.1/24`) + + var m config.TalhelperConfig + if err := yaml.Unmarshal(data, &m); err != nil { + t.Fatal(err) + } + + vlans := m.Nodes[0].NetworkInterfaces[0].DeviceVlans + if len(vlans) != 3 { + t.Fatalf("expected 3 VLANs, got %d", len(vlans)) + } + + vlan100 := GenerateVLANConfig(m.Nodes[0].NetworkInterfaces[0], vlans[0]) + vlan200 := GenerateVLANConfig(m.Nodes[0].NetworkInterfaces[0], vlans[1]) + vlan300 := GenerateVLANConfig(m.Nodes[0].NetworkInterfaces[0], vlans[2]) + + if vlan100 == nil || vlan200 == nil || vlan300 == nil { + t.Fatal("expected all VLAN configs to be non-nil") + } + + names := map[string]bool{ + vlan100.MetaName: true, + vlan200.MetaName: true, + vlan300.MetaName: true, + } + + if len(names) != 3 { + t.Errorf("expected 3 unique VLAN names, got %d: vlan100=%s, vlan200=%s, vlan300=%s", + len(names), vlan100.MetaName, vlan200.MetaName, vlan300.MetaName) + } + + expectedNames := map[string]bool{ + "eth0.100": true, + "eth0.200": true, + "eth0.300": true, + } + + if vlan100.MetaName != "eth0.100" { + t.Errorf("expected VLAN 100 name to be eth0.100, got %s", vlan100.MetaName) + } + if vlan200.MetaName != "eth0.200" { + t.Errorf("expected VLAN 200 name to be eth0.200, got %s", vlan200.MetaName) + } + if vlan300.MetaName != "eth0.300" { + t.Errorf("expected VLAN 300 name to be eth0.300, got %s", vlan300.MetaName) + } + + if vlan100.ParentLinkConfig != "eth0" { + t.Errorf("expected parent eth0, got %s", vlan100.ParentLinkConfig) + } + if vlan200.ParentLinkConfig != "eth0" { + t.Errorf("expected parent eth0, got %s", vlan200.ParentLinkConfig) + } + if vlan300.ParentLinkConfig != "eth0" { + t.Errorf("expected parent eth0, got %s", vlan300.ParentLinkConfig) + } + + if vlan100.VLANIDConfig != 100 { + t.Errorf("expected VLAN ID 100, got %d", vlan100.VLANIDConfig) + } + if vlan200.VLANIDConfig != 200 { + t.Errorf("expected VLAN ID 200, got %d", vlan200.VLANIDConfig) + } + if vlan300.VLANIDConfig != 300 { + t.Errorf("expected VLAN ID 300, got %d", vlan300.VLANIDConfig) + } + + vlanBytes, err := GenerateVLANConfigBytes(m.Nodes[0].NetworkInterfaces) + if err != nil { + t.Fatal(err) + } + + if vlanBytes == nil { + t.Fatal("expected VLAN config bytes, got nil") + } + + vlanStr := string(vlanBytes) + + for name := range expectedNames { + if !bytes.Contains(vlanBytes, []byte("name: "+name)) { + t.Errorf("expected output to contain 'name: %s'", name) + } + } + + t.Logf("Multiple VLAN config output:\n%s", vlanStr) +} + func TestGenerateWireguardConfig(t *testing.T) { data := []byte(`nodes: - hostname: node1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/talhelper-3.1.0/talhelper.json new/talhelper-3.1.1/talhelper.json --- old/talhelper-3.1.0/talhelper.json 2026-01-13 08:04:42.000000000 +0100 +++ new/talhelper-3.1.1/talhelper.json 2026-01-15 17:32:49.000000000 +0100 @@ -1,19 +1,19 @@ { - "version": "3.0.45", + "version": "3.1.0", "architecture": { "64bit": { - "url": "https://github.com/budimanjojo/talhelper/releases/download/v3.0.45/talhelper_windows_amd64.tar.gz", + "url": "https://github.com/budimanjojo/talhelper/releases/download/v3.1.0/talhelper_windows_amd64.tar.gz", "bin": [ "talhelper.exe" ], - "hash": "9cdb2f157d90fc80666229632b1e1f66113f59c6a8717626a3ebbc1603143f91" + "hash": "498c6919d552f1d3a0acf2faee2929d0828597b3b21777d714a15423aae14f23" }, "arm64": { - "url": "https://github.com/budimanjojo/talhelper/releases/download/v3.0.45/talhelper_windows_arm64.tar.gz", + "url": "https://github.com/budimanjojo/talhelper/releases/download/v3.1.0/talhelper_windows_arm64.tar.gz", "bin": [ "talhelper.exe" ], - "hash": "8fbdf2fd2dec2c280eb2ba610c7edc3d601a6c47fd7747670ac92a56240ff76f" + "hash": "5a5e65a962defc94eb95dfcb3f5037fb9bc87b14ce8f6294ae04ea6d7d9b073b" } }, "homepage": "https://github.com/budimanjojo/talhelper", ++++++ talhelper.obsinfo ++++++ --- /var/tmp/diff_new_pack.4OJV8P/_old 2026-01-17 14:54:29.330520582 +0100 +++ /var/tmp/diff_new_pack.4OJV8P/_new 2026-01-17 14:54:29.350521415 +0100 @@ -1,5 +1,5 @@ name: talhelper -version: 3.1.0 -mtime: 1768287882 -commit: 51f737124d27d43082622188120bd5b86158c4b9 +version: 3.1.1 +mtime: 1768494769 +commit: 074dc70ec0cc4c9690e62798802ff14fb37e29f8 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/talhelper/vendor.tar.gz /work/SRC/openSUSE:Factory/.talhelper.new.1928/vendor.tar.gz differ: char 135, line 2
