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)
