Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package elemental for openSUSE:Factory 
checked in at 2026-09-09 16:21:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/elemental (Old)
 and      /work/SRC/openSUSE:Factory/.elemental.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "elemental"

Wed Sep  9 16:21:25 2026 rev:3 rq:1376563 version:3.0.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/elemental/elemental.changes      2026-07-31 
16:06:47.287344832 +0200
+++ /work/SRC/openSUSE:Factory/.elemental.new.1265/elemental.changes    
2026-09-09 16:23:14.846272914 +0200
@@ -1,0 +2,7 @@
+Wed Sep  9 08:11:20 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 3.0.3:
+  * dependency bumps
+  * Backport bug fixes
+
+-------------------------------------------------------------------

Old:
----
  elemental-3.0.2.tar.gz

New:
----
  elemental-3.0.3.tar.gz

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

Other differences:
------------------
++++++ elemental.spec ++++++
--- /var/tmp/diff_new_pack.gKPdCn/_old  2026-09-09 16:23:15.964319641 +0200
+++ /var/tmp/diff_new_pack.gKPdCn/_new  2026-09-09 16:23:15.970319891 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           elemental
-Version:        3.0.2
+Version:        3.0.3
 Release:        0
 Summary:        Elemental 3
 License:        Apache-2.0

++++++ elemental-3.0.2.tar.gz -> elemental-3.0.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/go.mod new/elemental-3.0.3/go.mod
--- old/elemental-3.0.2/go.mod  2026-07-29 14:24:40.000000000 +0200
+++ new/elemental-3.0.3/go.mod  2026-09-08 13:26:27.000000000 +0200
@@ -25,7 +25,7 @@
        github.com/twpayne/go-vfs/v4 v4.3.0
        github.com/urfave/cli/v3 v3.10.1
        go.yaml.in/yaml/v3 v3.0.4
-       golang.org/x/crypto v0.54.0
+       golang.org/x/crypto v0.56.0
        golang.org/x/sys v0.47.0
        k8s.io/mount-utils v0.36.2
 )
@@ -38,7 +38,7 @@
        github.com/aws/aws-sdk-go-v2 v1.41.1 // indirect
        github.com/beorn7/perks v1.0.1 // indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
-       github.com/cilium/ebpf v0.16.0 // indirect
+       github.com/cilium/ebpf v0.22.0 // indirect
        github.com/clarketm/json v1.17.1 // indirect
        github.com/clipperhouse/displaywidth v0.10.0 // indirect
        github.com/clipperhouse/uax29/v2 v2.6.0 // indirect
@@ -115,19 +115,18 @@
        go.opentelemetry.io/auto/sdk v1.2.1 // indirect
        
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.68.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 
// indirect
-       go.opentelemetry.io/otel v1.43.0 // indirect
-       go.opentelemetry.io/otel/metric v1.43.0 // indirect
-       go.opentelemetry.io/otel/trace v1.43.0 // indirect
+       go.opentelemetry.io/otel v1.44.0 // indirect
+       go.opentelemetry.io/otel/metric v1.44.0 // indirect
+       go.opentelemetry.io/otel/trace v1.44.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
-       golang.org/x/mod v0.37.0 // indirect
-       golang.org/x/net v0.57.0 // indirect
+       golang.org/x/mod v0.40.0 // indirect
+       golang.org/x/net v0.58.0 // indirect
        golang.org/x/sync v0.22.0 // indirect
        golang.org/x/term v0.45.0 // indirect
-       golang.org/x/text v0.40.0 // indirect
-       golang.org/x/tools v0.47.0 // indirect
+       golang.org/x/text v0.41.0 // indirect
+       golang.org/x/tools v0.49.0 // indirect
        google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260727163830-6c54dddc4772 // indirect
-       google.golang.org/grpc v1.82.1 // indirect
+       google.golang.org/grpc v1.83.2 // indirect
        google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // 
indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
        k8s.io/klog/v2 v2.140.0 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/go.sum new/elemental-3.0.3/go.sum
--- old/elemental-3.0.2/go.sum  2026-07-29 14:24:40.000000000 +0200
+++ new/elemental-3.0.3/go.sum  2026-09-08 13:26:27.000000000 +0200
@@ -31,8 +31,8 @@
 github.com/cespare/xxhash/v2 v2.3.0/go.mod 
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/chengxilo/virtualterm v1.0.4 
h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM=
 github.com/chengxilo/virtualterm v1.0.4/go.mod 
h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY=
-github.com/cilium/ebpf v0.16.0 h1:+BiEnHL6Z7lXnlGUsXQPPAE7+kenAd4ES8MQ5min0Ok=
-github.com/cilium/ebpf v0.16.0/go.mod 
h1:L7u2Blt2jMM/vLAVgjxluxtBKlz3/GWjB0dMOEngfwE=
+github.com/cilium/ebpf v0.22.0 h1:v2ktp0roffpMOj2MMf3idtCQZOsAoC4BJbAJN+ke2bY=
+github.com/cilium/ebpf v0.22.0/go.mod 
h1:CDzZbe2hC5JjlDC+CY3KFCzlYwN4gbxppYM+Z10bQt4=
 github.com/clarketm/json v1.17.1 
h1:U1IxjqJkJ7bRK4L6dyphmoO840P6bdhPdbbLySourqI=
 github.com/clarketm/json v1.17.1/go.mod 
h1:ynr2LRfb0fQU34l07csRNBTcivjySLLiY1YzQqKVfdo=
 github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -131,8 +131,8 @@
 github.com/go-playground/universal-translator v0.18.1/go.mod 
h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
 github.com/go-playground/validator/v10 v10.30.2 
h1:JiFIMtSSHb2/XBUbWM4i/MpeQm9ZK2xqPNk8vgvu5JQ=
 github.com/go-playground/validator/v10 v10.30.2/go.mod 
h1:mAf2pIOVXjTEBrwUMGKkCWKKPs9NheYGabeB04txQSc=
-github.com/go-quicktest/qt v1.101.0 
h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
-github.com/go-quicktest/qt v1.101.0/go.mod 
h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
+github.com/go-quicktest/qt v1.101.1-0.20240301121107-c6c8733fa1e6 
h1:teYtXy9B7y5lHTp8V9KPxpYRAVA7dozigQcMiBust1s=
+github.com/go-quicktest/qt v1.101.1-0.20240301121107-c6c8733fa1e6/go.mod 
h1:p4lGIVX+8Wa6ZPNDvqcxq36XpUDLh42FLetFU7odllI=
 github.com/go-stack/stack v1.8.0/go.mod 
h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-task/slim-sprig/v3 v3.0.0 
h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
 github.com/go-task/slim-sprig/v3 v3.0.0/go.mod 
h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
@@ -344,16 +344,16 @@
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 
h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod 
h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo=
-go.opentelemetry.io/otel v1.43.0 
h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
-go.opentelemetry.io/otel v1.43.0/go.mod 
h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
-go.opentelemetry.io/otel/metric v1.43.0 
h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
-go.opentelemetry.io/otel/metric v1.43.0/go.mod 
h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
-go.opentelemetry.io/otel/sdk v1.43.0 
h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
-go.opentelemetry.io/otel/sdk v1.43.0/go.mod 
h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
-go.opentelemetry.io/otel/sdk/metric v1.43.0 
h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
-go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod 
h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
-go.opentelemetry.io/otel/trace v1.43.0 
h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
-go.opentelemetry.io/otel/trace v1.43.0/go.mod 
h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
+go.opentelemetry.io/otel v1.44.0 
h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU=
+go.opentelemetry.io/otel v1.44.0/go.mod 
h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc=
+go.opentelemetry.io/otel/metric v1.44.0 
h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc=
+go.opentelemetry.io/otel/metric v1.44.0/go.mod 
h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo=
+go.opentelemetry.io/otel/sdk v1.44.0 
h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58=
+go.opentelemetry.io/otel/sdk v1.44.0/go.mod 
h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0=
+go.opentelemetry.io/otel/sdk/metric v1.44.0 
h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI=
+go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod 
h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA=
+go.opentelemetry.io/otel/trace v1.44.0 
h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk=
+go.opentelemetry.io/otel/trace v1.44.0/go.mod 
h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod 
h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
@@ -364,18 +364,16 @@
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod 
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw=
-golang.org/x/crypto v0.54.0/go.mod 
h1:KWL8ny2AZdGR2cWmzeHrp2azQPGogOv+HeQaVEXC2dk=
+golang.org/x/crypto v0.56.0 h1:GUh5Ii4J5jtcseSMiRqr1jXCNHoxjeV9Fmekc2oLy6Y=
+golang.org/x/crypto v0.56.0/go.mod 
h1:OMW5y6CY9l38uPLmxU6l6pwcXp1obtLo3e6gT7gQR2I=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod 
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f 
h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
-golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod 
h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod 
h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod 
h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod 
h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ=
-golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0=
+golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs=
+golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -387,10 +385,8 @@
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod 
h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod 
h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
-golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
-golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
-golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
+golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To=
+golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod 
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -415,8 +411,8 @@
 golang.org/x/term v0.45.0/go.mod 
h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs=
-golang.org/x/text v0.40.0/go.mod 
h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=
+golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8=
+golang.org/x/text v0.41.0/go.mod 
h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod 
h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -425,8 +421,8 @@
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod 
h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod 
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q=
-golang.org/x/tools v0.47.0/go.mod 
h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA=
+golang.org/x/tools v0.49.0 h1:3NI7VXzL9+1WZD52Dx2ttoPwD5DWrFGpl9mFZDlmisI=
+golang.org/x/tools v0.49.0/go.mod 
h1:SJNXV9DBKT0UbdttsQjbfJlAE/q+y36++zo3uL3N0Oo=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -438,8 +434,6 @@
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod 
h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod 
h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 
h1:PvEgGJf9C/1u5CHkInMg7UFYYUoiaQmW2LbtH0pjB78=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260523011958-0a33c5d7ca68/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20260727163830-6c54dddc4772 
h1:zuslGE3FGxH0hC6veLvSLME3TZzun9MQzjYwo1CBN+k=
 google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260727163830-6c54dddc4772/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
 google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -447,10 +441,8 @@
 google.golang.org/grpc v1.25.1/go.mod 
h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.27.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.33.2/go.mod 
h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
-google.golang.org/grpc v1.80.0/go.mod 
h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
-google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE=
-google.golang.org/grpc v1.82.1/go.mod 
h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA=
+google.golang.org/grpc v1.83.2 h1:EManeRomTObA0BU7I8vXgg/78uE5MJ9M8B39EX2WscU=
+google.golang.org/grpc v1.83.2/go.mod 
h1:YPI1hK3kDked6iHvgX3tR0y+nX/qpMFKhPgFsokw1S8=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod 
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod 
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod 
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/internal/config/helm.go 
new/elemental-3.0.3/internal/config/helm.go
--- old/elemental-3.0.2/internal/config/helm.go 2026-07-29 14:24:40.000000000 
+0200
+++ new/elemental-3.0.3/internal/config/helm.go 2026-09-08 13:26:27.000000000 
+0200
@@ -46,7 +46,7 @@
        GetName() string
        GetInlineValues() map[string]any
        GetRepositoryName() string
-       ToCRD(values []byte, repository string, hasAuth, skipTLSVerify bool) 
*helm.CRD
+       ToCRD(values []byte, repository string, hasAuth, skipTLSVerify bool) 
(*helm.CRD, error)
 }
 
 type Helm struct {
@@ -264,7 +264,10 @@
                return fmt.Errorf("resolving values for chart %s: %w", name, 
err)
        }
 
-       crd := chart.ToCRD(values, repository, needsAuth, skipTLSVerify)
+       crd, err := chart.ToCRD(values, repository, needsAuth, skipTLSVerify)
+       if err != nil {
+               return fmt.Errorf("constructing HelmChart custom resource: %w", 
err)
+       }
        *crds = append(*crds, crd)
 
        return nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/internal/config/helm_test.go 
new/elemental-3.0.3/internal/config/helm_test.go
--- old/elemental-3.0.2/internal/config/helm_test.go    2026-07-29 
14:24:40.000000000 +0200
+++ new/elemental-3.0.3/internal/config/helm_test.go    2026-09-08 
13:26:27.000000000 +0200
@@ -370,11 +370,11 @@
                                                Repositories: 
[]*kubernetes.HelmRepository{
                                                        {
                                                                Name: "apache",
-                                                               URL:  
"https://example.com/apache";,
+                                                               URL:  
"https://example.com/apache/";,
                                                        },
                                                        {
                                                                Name: "nginx",
-                                                               URL:  
"oci://example.com/web",
+                                                               URL:  
"oci://example.com/web/",
                                                        },
                                                },
                                        },
@@ -498,7 +498,7 @@
 spec:
     chart: apache
     version: 10.7.0
-    repo: https://example.com/apache
+    repo: https://example.com/apache/
     valuesContent: |
         image:
             debug: true
@@ -592,7 +592,7 @@
                                                        },
                                                        {
                                                                Name: "nginx",
-                                                               URL:  
"oci://example.com/web",
+                                                               URL:  
"oci://example.com/web/", // trailing slash
                                                        },
                                                        {
                                                                Name: "storage",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/internal/config/kubernetes.go 
new/elemental-3.0.3/internal/config/kubernetes.go
--- old/elemental-3.0.2/internal/config/kubernetes.go   2026-07-29 
14:24:40.000000000 +0200
+++ new/elemental-3.0.3/internal/config/kubernetes.go   2026-09-08 
13:26:27.000000000 +0200
@@ -182,7 +182,7 @@
                err      error
        )
 
-       if len(k.Nodes) > 0 {
+       if len(k.Nodes) > 1 {
                initNode, err = kubernetes.FindInitNode(k.Nodes)
                if err != nil {
                        return "", fmt.Errorf("finding init node: %w", err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/internal/config/kubernetes_test.go 
new/elemental-3.0.3/internal/config/kubernetes_test.go
--- old/elemental-3.0.2/internal/config/kubernetes_test.go      2026-07-29 
14:24:40.000000000 +0200
+++ new/elemental-3.0.3/internal/config/kubernetes_test.go      2026-09-08 
13:26:27.000000000 +0200
@@ -345,6 +345,51 @@
                        Expect(confScript).ToNot(BeEmpty())
                })
 
+               It("Uses server config for a single explicitly configured 
server node", func() {
+                       conf := kubernetes.Kubernetes{
+                               Nodes: kubernetes.Nodes{
+                                       {Hostname: "node01", Type: 
kubernetes.NodeTypeServer},
+                               },
+                       }
+
+                       confScript, err := writeK8sConfigDeployScript(
+                               fs,
+                               output,
+                               conf,
+                               "/opt/k8s/install",
+                               "/opt/k8s/install/install.sh",
+                       )
+                       Expect(err).NotTo(HaveOccurred())
+
+                       b, err := 
fs.ReadFile(filepath.Join(output.OverlaysDir(), confScript))
+                       Expect(err).NotTo(HaveOccurred())
+                       
Expect(string(b)).To(ContainSubstring(`CONFIGFILE="/var/lib/elemental/kubernetes/${NODETYPE}.yaml"`))
+                       Expect(string(b)).ToNot(ContainSubstring("init.yaml"))
+               })
+
+               It("Uses init config only for multi-node clusters", func() {
+                       conf := kubernetes.Kubernetes{
+                               Nodes: kubernetes.Nodes{
+                                       {Hostname: "server01", Type: 
kubernetes.NodeTypeServer},
+                                       {Hostname: "agent01", Type: 
kubernetes.NodeTypeAgent},
+                               },
+                       }
+
+                       confScript, err := writeK8sConfigDeployScript(
+                               fs,
+                               output,
+                               conf,
+                               "/opt/k8s/install",
+                               "/opt/k8s/install/install.sh",
+                       )
+                       Expect(err).NotTo(HaveOccurred())
+
+                       b, err := 
fs.ReadFile(filepath.Join(output.OverlaysDir(), confScript))
+                       Expect(err).NotTo(HaveOccurred())
+                       Expect(string(b)).To(ContainSubstring(`if [[ 
"${HOSTNAME}" = "server01" ]]; then`))
+                       
Expect(string(b)).To(ContainSubstring("CONFIGFILE=/var/lib/elemental/kubernetes/init.yaml"))
+               })
+
                It("Succeeds to configure RKE2 with additional resources and 
auth", func() {
                        additionalManifests := make(map[string][]byte)
                        additionalManifests["example-auth-priority.yaml"] = 
[]byte("apiVersion: v1\nkind: Secret\nmetadata:\n    namespace: kube-system\n   
 name: example-auth\ntype: kubernetes.io/dockerconfigjson\ndata:\n    
.dockerconfigjson: 
eyJhdXRocyI6eyJleGFtcGxlLmlvIjp7InVzZXJuYW1lIjoiZXhhbXBsZS11c2VyIiwicGFzc3dvcmQiOiJleGFtcGxlLXBhc3MiLCJhdXRoIjoiWlhoaGJYQnNaUzExYzJWeU9tVjRZVzF3YkdVdGNHRnpjdz09In19fQ==\n")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elemental-3.0.2/internal/config/templates/k8s_conf_deploy.sh.tpl 
new/elemental-3.0.3/internal/config/templates/k8s_conf_deploy.sh.tpl
--- old/elemental-3.0.2/internal/config/templates/k8s_conf_deploy.sh.tpl        
2026-07-29 14:24:40.000000000 +0200
+++ new/elemental-3.0.3/internal/config/templates/k8s_conf_deploy.sh.tpl        
2026-09-08 13:26:27.000000000 +0200
@@ -17,10 +17,12 @@
 CONFIGFILE="{{ .KubernetesDir }}/${NODETYPE}.yaml"
 REGFILE="{{ .KubernetesDir }}/registries.yaml"
 
+{{- if .InitNode.Hostname }}
 if [[ "${HOSTNAME}" = "{{ .InitNode.Hostname }}" ]]; then
   echo "Setting up init node"
   CONFIGFILE={{ .KubernetesDir }}/init.yaml
 fi
+{{- end }}
 
 # Better to append if a file exist
 # Useful if some custom configuration are done at boot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elemental-3.0.2/internal/image/kubernetes/cluster_test.go 
new/elemental-3.0.3/internal/image/kubernetes/cluster_test.go
--- old/elemental-3.0.2/internal/image/kubernetes/cluster_test.go       
2026-07-29 14:24:40.000000000 +0200
+++ new/elemental-3.0.3/internal/image/kubernetes/cluster_test.go       
2026-09-08 13:26:27.000000000 +0200
@@ -119,6 +119,36 @@
 
                Expect(cluster.AgentConfig).To(BeNil())
        })
+       It("Loads values from single-node server config when one server node is 
explicitly configured", func() {
+               kubernetes := &Kubernetes{
+                       Network: Network{
+                               APIHost: "api.suse.com",
+                               APIVIP4: "192.168.122.50",
+                       },
+                       Nodes: Nodes{
+                               {
+                                       Hostname: "node01",
+                                       Type:     NodeTypeServer,
+                               },
+                       },
+                       Config: Config{
+                               ServerFilePath: 
"/etc/kubernetes/single-node/server.yaml",
+                       },
+               }
+
+               cluster, err := NewCluster(s, kubernetes)
+               Expect(err).ToNot(HaveOccurred())
+
+               Expect(cluster.ServerConfig).ToNot(BeEmpty())
+               Expect(cluster.ServerConfig["cni"]).To(Equal("calico"))
+               Expect(cluster.ServerConfig["token"]).To(Equal("token123"))
+               
Expect(cluster.ServerConfig["tls-san"]).To(ContainElements([]string{"10.10.10.1",
 "cluster1.suse.com", "192.168.122.50", "api.suse.com"}))
+               Expect(cluster.ServerConfig["selinux"]).To(BeTrue())
+               Expect(cluster.ServerConfig["server"]).To(BeNil())
+
+               Expect(cluster.InitServerConfig).To(BeNil())
+               Expect(cluster.AgentConfig).To(BeNil())
+       })
        It("Loads values from multi-node config", func() {
                kubernetes := &Kubernetes{
                        Network: Network{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/elemental-3.0.2/internal/image/kubernetes/kubernetes.go 
new/elemental-3.0.3/internal/image/kubernetes/kubernetes.go
--- old/elemental-3.0.2/internal/image/kubernetes/kubernetes.go 2026-07-29 
14:24:40.000000000 +0200
+++ new/elemental-3.0.3/internal/image/kubernetes/kubernetes.go 2026-09-08 
13:26:27.000000000 +0200
@@ -93,7 +93,7 @@
        return c.RepositoryName
 }
 
-func (c *HelmChart) ToCRD(values []byte, repository string, hasAuth, 
skipTLSVerify bool) *helm.CRD {
+func (c *HelmChart) ToCRD(values []byte, repository string, hasAuth, 
skipTLSVerify bool) (*helm.CRD, error) {
        return helm.NewCRD(c.TargetNamespace, c.Name, c.Version, 
string(values), repository, hasAuth, skipTLSVerify)
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/pkg/helm/helm.go 
new/elemental-3.0.3/pkg/helm/helm.go
--- old/elemental-3.0.2/pkg/helm/helm.go        2026-07-29 14:24:40.000000000 
+0200
+++ new/elemental-3.0.3/pkg/helm/helm.go        2026-09-08 13:26:27.000000000 
+0200
@@ -19,6 +19,7 @@
 
 import (
        "fmt"
+       "net/url"
        "strings"
 )
 
@@ -77,18 +78,22 @@
        Password         *string `yaml:"password,omitempty"`
 }
 
-func NewCRD(namespace, chart, version, valuesContent string, repository 
string, auth, skipTLSVerify bool) *CRD {
+func NewCRD(namespace, chart, version, valuesContent string, repository 
string, auth, skipTLSVerify bool) (crd *CRD, err error) {
        name := chart
        isOCI := strings.HasPrefix(repository, "oci://")
        if isOCI {
                // The repository is in fact an OCI registry.
                // Use the full path for the chart identifier and drop the 
"repository" value.
                // The latter is only valid for HTTP(s) repositories.
-               chart = fmt.Sprintf("%s/%s", repository, name)
+               chart, err = url.JoinPath(repository, name)
+               if err != nil {
+                       return nil, fmt.Errorf("invalid path for chart %s: %w", 
name, err)
+               }
+
                repository = ""
        }
 
-       crd := &CRD{
+       crd = &CRD{
                APIVersion: helmChartAPIVersion,
                Kind:       helmChartKind,
                Metadata: Metadata{
@@ -119,5 +124,5 @@
                }
        }
 
-       return crd
+       return crd, nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/pkg/manifest/api/shared.go 
new/elemental-3.0.3/pkg/manifest/api/shared.go
--- old/elemental-3.0.2/pkg/manifest/api/shared.go      2026-07-29 
14:24:40.000000000 +0200
+++ new/elemental-3.0.3/pkg/manifest/api/shared.go      2026-09-08 
13:26:27.000000000 +0200
@@ -99,7 +99,7 @@
        return c.Repository
 }
 
-func (c *HelmChart) ToCRD(values []byte, repository string, hasAuth bool, 
skipTLSVerify bool) *helm.CRD {
+func (c *HelmChart) ToCRD(values []byte, repository string, hasAuth bool, 
skipTLSVerify bool) (*helm.CRD, error) {
        return helm.NewCRD(c.Namespace, c.Chart, c.Version, string(values), 
repository, hasAuth, skipTLSVerify)
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/elemental-3.0.2/pkg/repart/disk_repart.go 
new/elemental-3.0.3/pkg/repart/disk_repart.go
--- old/elemental-3.0.2/pkg/repart/disk_repart.go       2026-07-29 
14:24:40.000000000 +0200
+++ new/elemental-3.0.3/pkg/repart/disk_repart.go       2026-09-08 
13:26:27.000000000 +0200
@@ -20,9 +20,11 @@
 import (
        _ "embed"
        "encoding/json"
+       "errors"
        "fmt"
        "io"
        "os"
+       "os/exec"
        "path/filepath"
        "regexp"
        "runtime"
@@ -45,6 +47,8 @@
        // Do not change these values as this could break backward 
compatibility on already installed systems (e.g. reseting a system)
        configType   = "2ecf8b13-6846-4e8a-9bc3-284ff5e2ac22"
        recoveryType = "3265f37b-3105-4777-bd97-cfcd9cc7cf99"
+
+       blkdiscardNotSupported = 2 // blkdiscard exit code for devices that do 
not support discard requests
 )
 
 //go:embed templates/partition.conf.tpl
@@ -176,7 +180,34 @@
                parts[i] = Partition{Partition: part}
        }
 
-       return runSystemdRepart(s, d.Device, parts, fmt.Sprintf("--empty=%s", 
empty))
+       // systemd-repart trimming the disk could result in the entire disk 
waiting to be fully zero'd out. This could hang
+       // installs on large drives. Now, before systemd-repart is triggered, 
we manually discard the entire disk in one pass
+       // through blkdiscard. This results in a native TRIM being executed 
whenever the drive typically runs the TRIM engine.
+       if empty == "force" {
+               err = discardDevice(s, d.Device)
+               if err != nil {
+                       return err
+               }
+       }
+
+       return runSystemdRepart(s, d.Device, parts, fmt.Sprintf("--empty=%s", 
empty), "--discard=no")
+}
+
+// discardDevice discards the given device in a single pass. Devices not
+// supporting discard requests fail silently, unexpected failures, such as 
"device in us" exit immediately.
+// Runs without '--force' on to prevent accidentally trimming an in-use disk.
+func discardDevice(s *sys.System, device string) error {
+       _, err := s.Runner().Run("blkdiscard", device)
+       if err == nil {
+               return nil
+       }
+
+       var exitErr *exec.ExitError
+       if errors.As(err, &exitErr) && exitErr.ExitCode() == 
blkdiscardNotSupported {
+               s.Logger().Warn("Device '%s' does not support discard, 
continuing without trimming it", device)
+               return nil
+       }
+       return fmt.Errorf("failed discarding device '%s': %w", device, err)
 }
 
 // runSystemdRepart runs systemd-repart for the given partitions and target 
device. It appends to the generated command the

++++++ vendor.tar.zst ++++++
++++ 50369 lines of diff (skipped)

Reply via email to