From 85b0b8f78f7f962d15a6d95c84990188c552ff92 Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Wed, 2 Jul 2025 01:51:25 -0700 Subject: [PATCH 01/16] add POSIX shell to docker image (#2919) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: pýrus --- tools/csi-deps-check.sh | 1 + tools/csi-deps.sh | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/tools/csi-deps-check.sh b/tools/csi-deps-check.sh index 097c409e39..80b3b1baba 100755 --- a/tools/csi-deps-check.sh +++ b/tools/csi-deps-check.sh @@ -21,6 +21,7 @@ set -o errexit # This utils are using by # go mod k8s.io/mount-utils +/bin/sh -c true /bin/mount -V /bin/umount -V /sbin/blkid -V diff --git a/tools/csi-deps.sh b/tools/csi-deps.sh index d902ef62a8..a78f8d6a78 100755 --- a/tools/csi-deps.sh +++ b/tools/csi-deps.sh @@ -62,6 +62,10 @@ else mkdir -p ${DEST}/lib64 && cp -Lv /lib64/ld-linux-*.so.* ${DEST}/lib64/ fi +# Copy POSIX shell +copy_deps /bin/dash +copy_deps /bin/sh + # To collect dmesg logs copy_deps /usr/bin/dmesg || true copy_deps /bin/dmesg || true From 5aa78412c906443f745b34e759b867ea714b50b7 Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Wed, 2 Jul 2025 04:15:24 -0700 Subject: [PATCH 02/16] Temporarily use EOL Bobcat release (#2921) Unblock the gate while we investigate the perforamnce regressions seen in Dalmatian (and possibly Caracal). python-barbicanclient does not have a 2023.2-eol tag so we can't use install from Git. Since we're not hacking on though there's no good reason to be installing from Git, so we remove both this and python-octaviaclient from the list. Signed-off-by: Stephen Finucane Co-authored-by: Stephen Finucane --- tests/playbooks/roles/install-devstack/defaults/main.yaml | 2 +- tests/playbooks/roles/install-devstack/templates/local.conf.j2 | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/playbooks/roles/install-devstack/defaults/main.yaml b/tests/playbooks/roles/install-devstack/defaults/main.yaml index 5812d9c97e..8a2839dd95 100644 --- a/tests/playbooks/roles/install-devstack/defaults/main.yaml +++ b/tests/playbooks/roles/install-devstack/defaults/main.yaml @@ -1,7 +1,7 @@ --- user: "stack" workdir: "/home/{{ user }}/devstack" -branch: "stable/2023.2" +branch: "2023.2-eol" enable_services: - nova - glance diff --git a/tests/playbooks/roles/install-devstack/templates/local.conf.j2 b/tests/playbooks/roles/install-devstack/templates/local.conf.j2 index 6ac3707636..13ae64fdd7 100644 --- a/tests/playbooks/roles/install-devstack/templates/local.conf.j2 +++ b/tests/playbooks/roles/install-devstack/templates/local.conf.j2 @@ -81,7 +81,6 @@ enable_service o-hk enable_service o-da enable_service o-api -LIBS_FROM_GIT+=,python-octaviaclient DIB_REPOLOCATION_amphora_agent=https://github.com/openstack/octavia.git DIB_REPOLOCATION_octavia_lib=https://github.com/openstack/octavia-lib.git @@ -101,8 +100,6 @@ enable_plugin ovn-octavia-provider https://opendev.org/openstack/ovn-octavia-pro # Barbican enable_plugin barbican ${GIT_BASE}/openstack/barbican.git {{ branch }} enable_service barbican-vault - -LIBS_FROM_GIT+=,python-barbicanclient {% endif %} {% if "manila" in enable_services %} From a61afc8766cbf0ee4ab15ea625bbc6f9ef9b05cf Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Wed, 2 Jul 2025 05:45:25 -0700 Subject: [PATCH 03/16] Fix clouds.yaml authentication (#2926) Signed-off-by: Justin Lamp Co-authored-by: Justin Lamp --- pkg/kms/barbican/barbican.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/kms/barbican/barbican.go b/pkg/kms/barbican/barbican.go index f56b9a77df..fd94ba1cd4 100644 --- a/pkg/kms/barbican/barbican.go +++ b/pkg/kms/barbican/barbican.go @@ -2,11 +2,13 @@ package barbican import ( "context" + "os" "github.com/gophercloud/gophercloud/v2" "github.com/gophercloud/gophercloud/v2/openstack" "github.com/gophercloud/gophercloud/v2/openstack/keymanager/v1/secrets" "k8s.io/cloud-provider-openstack/pkg/client" + "k8s.io/klog/v2" ) type KMSOpts struct { @@ -26,6 +28,17 @@ type Barbican struct { // NewBarbicanClient creates new BarbicanClient func NewBarbicanClient(cfg Config) (*gophercloud.ServiceClient, error) { + if cfg.Global.UseClouds { + if cfg.Global.CloudsFile != "" { + os.Setenv("OS_CLIENT_CONFIG_FILE", cfg.Global.CloudsFile) + } + if err := client.ReadClouds(&cfg.Global); err != nil { + return nil, err + } + klog.V(5).Infof("Config, loaded from the %s:", cfg.Global.CloudsFile) + client.LogCfg(cfg.Global) + } + provider, err := client.NewOpenStackClient(&cfg.Global, "barbican-kms-plugin") if err != nil { return nil, err From 209f30ff2caeda018c16135292ccdfc2cca02eeb Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Wed, 2 Jul 2025 16:05:24 +0100 Subject: [PATCH 04/16] [release-1.31] [cinder-csi-plugin] Don't report topology capability when --with-topology=False (#2872) * cinder-csi-plugin, manila-csi-plugin: Correct formatting character %T prints the type. %t prints the word true/false, which is what we want. [1] [1] https://pkg.go.dev/fmt Conflicts: pkg/csi/manila/driver.go NOTE(stephenfin): Merge conflicts are due to the absence of PR #2734, which we don't want to backport. Signed-off-by: Stephen Finucane * cinder-csi-plugin: Don't report topology capability when --with-topology=False The 'PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS' capability flag determines whether the provisioner attempts to look up topology information from the node or not [1][2]. If we report it but don't return topology information from the node, we end up with failures to provision [3]. Fix the issue by optionally reporting the capability, like Manila already does. [1] https://github.com/kubernetes-csi/external-provisioner/blob/17e2429e9f/pkg/controller/controller.go#L685-L700 [2] https://github.com/kubernetes-csi/external-provisioner/blob/17e2429e9f/pkg/controller/controller.go#L994-L996 [3] https://github.com/kubernetes-csi/external-provisioner/blob/17e2429e9f/pkg/controller/topology.go#L177 Signed-off-by: Stephen Finucane * manila-csi-plugin: Unify some logging between cinder, manila Signed-off-by: Stephen Finucane --------- Signed-off-by: Stephen Finucane --- pkg/csi/cinder/driver.go | 2 +- pkg/csi/cinder/identityserver.go | 51 +++++++++++++++++--------------- pkg/csi/manila/driver.go | 1 + pkg/csi/manila/identityserver.go | 8 +++++ 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/pkg/csi/cinder/driver.go b/pkg/csi/cinder/driver.go index 08da8d5080..f3b4613aad 100644 --- a/pkg/csi/cinder/driver.go +++ b/pkg/csi/cinder/driver.go @@ -88,7 +88,7 @@ func NewDriver(o *DriverOpts) *Driver { klog.Info("Driver: ", d.name) klog.Info("Driver version: ", d.fqVersion) klog.Info("CSI Spec version: ", specVersion) - klog.Infof("Topology awareness: %T", d.withTopology) + klog.Infof("Topology awareness: %t", d.withTopology) d.AddControllerServiceCapabilities( []csi.ControllerServiceCapability_RPC_Type{ diff --git a/pkg/csi/cinder/identityserver.go b/pkg/csi/cinder/identityserver.go index 7a73ac9870..dbd62917fc 100644 --- a/pkg/csi/cinder/identityserver.go +++ b/pkg/csi/cinder/identityserver.go @@ -52,36 +52,39 @@ func (ids *identityServer) Probe(ctx context.Context, req *csi.ProbeRequest) (*c func (ids *identityServer) GetPluginCapabilities(ctx context.Context, req *csi.GetPluginCapabilitiesRequest) (*csi.GetPluginCapabilitiesResponse, error) { klog.V(5).Infof("GetPluginCapabilities called with req %+v", req) - return &csi.GetPluginCapabilitiesResponse{ - Capabilities: []*csi.PluginCapability{ - { - Type: &csi.PluginCapability_Service_{ - Service: &csi.PluginCapability_Service{ - Type: csi.PluginCapability_Service_CONTROLLER_SERVICE, - }, + caps := []*csi.PluginCapability{ + { + Type: &csi.PluginCapability_Service_{ + Service: &csi.PluginCapability_Service{ + Type: csi.PluginCapability_Service_CONTROLLER_SERVICE, }, }, - { - Type: &csi.PluginCapability_Service_{ - Service: &csi.PluginCapability_Service{ - Type: csi.PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS, - }, + }, + { + Type: &csi.PluginCapability_VolumeExpansion_{ + VolumeExpansion: &csi.PluginCapability_VolumeExpansion{ + Type: csi.PluginCapability_VolumeExpansion_ONLINE, }, }, - { - Type: &csi.PluginCapability_VolumeExpansion_{ - VolumeExpansion: &csi.PluginCapability_VolumeExpansion{ - Type: csi.PluginCapability_VolumeExpansion_ONLINE, - }, + }, + { + Type: &csi.PluginCapability_VolumeExpansion_{ + VolumeExpansion: &csi.PluginCapability_VolumeExpansion{ + Type: csi.PluginCapability_VolumeExpansion_OFFLINE, }, }, - { - Type: &csi.PluginCapability_VolumeExpansion_{ - VolumeExpansion: &csi.PluginCapability_VolumeExpansion{ - Type: csi.PluginCapability_VolumeExpansion_OFFLINE, - }, + }, + } + + if ids.Driver.withTopology { + caps = append(caps, &csi.PluginCapability{ + Type: &csi.PluginCapability_Service_{ + Service: &csi.PluginCapability_Service{ + Type: csi.PluginCapability_Service_VOLUME_ACCESSIBILITY_CONSTRAINTS, }, }, - }, - }, nil + }) + } + + return &csi.GetPluginCapabilitiesResponse{Capabilities: caps}, nil } diff --git a/pkg/csi/manila/driver.go b/pkg/csi/manila/driver.go index 80e3d849aa..c46822ea51 100644 --- a/pkg/csi/manila/driver.go +++ b/pkg/csi/manila/driver.go @@ -127,6 +127,7 @@ func NewDriver(o *DriverOpts) (*Driver, error) { klog.Info("Driver: ", d.name) klog.Info("Driver version: ", d.fqVersion) klog.Info("CSI spec version: ", specVersion) + klog.Infof("Topology awareness: %t", d.withTopology) getShareAdapter(d.shareProto) // The program will terminate with a non-zero exit code if the share protocol selector is wrong klog.Infof("Operating on %s shares", d.shareProto) diff --git a/pkg/csi/manila/identityserver.go b/pkg/csi/manila/identityserver.go index dae37ca98c..10b11505a6 100644 --- a/pkg/csi/manila/identityserver.go +++ b/pkg/csi/manila/identityserver.go @@ -22,6 +22,7 @@ import ( "github.com/container-storage-interface/spec/lib/go/csi" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "k8s.io/klog/v2" ) type identityServer struct { @@ -29,10 +30,16 @@ type identityServer struct { } func (ids *identityServer) GetPluginInfo(ctx context.Context, req *csi.GetPluginInfoRequest) (*csi.GetPluginInfoResponse, error) { + klog.V(5).Infof("Using default GetPluginInfo") + if ids.d.name == "" { return nil, status.Error(codes.Unavailable, "Driver name not configured") } + if ids.d.fqVersion == "" { + return nil, status.Error(codes.Unavailable, "Driver is missing version") + } + return &csi.GetPluginInfoResponse{ Name: ids.d.name, VendorVersion: ids.d.fqVersion, @@ -50,6 +57,7 @@ func (ids *identityServer) Probe(ctx context.Context, req *csi.ProbeRequest) (*c } func (ids *identityServer) GetPluginCapabilities(ctx context.Context, req *csi.GetPluginCapabilitiesRequest) (*csi.GetPluginCapabilitiesResponse, error) { + klog.V(5).Infof("GetPluginCapabilities called with req %+v", req) caps := []*csi.PluginCapability{ { Type: &csi.PluginCapability_Service_{ From c5712ce938f1b142a143584c73444cc9192fd92a Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Wed, 2 Jul 2025 08:05:31 -0700 Subject: [PATCH 05/16] fix lbaas logs (#2925) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: pýrus --- pkg/openstack/loadbalancer.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/openstack/loadbalancer.go b/pkg/openstack/loadbalancer.go index bf24306e44..d391370623 100644 --- a/pkg/openstack/loadbalancer.go +++ b/pkg/openstack/loadbalancer.go @@ -1515,9 +1515,9 @@ func (lbaas *LbaasV2) makeSvcConf(serviceName string, service *corev1.Service, s svcConf.nodeSelectors = getKeyValueFromServiceAnnotation(service, ServiceAnnotationLoadBalancerNodeSelector, lbaas.opts.NodeSelector) for key, value := range svcConf.nodeSelectors { if value == "" { - klog.V(3).InfoS("Target node label %s key is set to LoadBalancer service %s", key, serviceName) + klog.V(3).Infof("Target node label %s key is set to LoadBalancer service %s", key, serviceName) } else { - klog.V(3).InfoS("Target node label %s=%s is set to LoadBalancer service %s", key, value, serviceName) + klog.V(3).Infof("Target node label %s=%s is set to LoadBalancer service %s", key, value, serviceName) } } From 4f8409c93d5e736ad99ad40d6f43014251bdfdef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?p=C3=BDrus?= Date: Fri, 25 Jul 2025 17:02:30 +0200 Subject: [PATCH 06/16] [release-1.31] chore: bump dependencies (#2939) --- go.mod | 54 ++++++++++++++++++++++++---------------------- go.sum | 68 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 62 insertions(+), 60 deletions(-) diff --git a/go.mod b/go.mod index f16b23fc22..c156b6065d 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.22.0 require ( github.com/container-storage-interface/spec v1.9.0 - github.com/go-chi/chi/v5 v5.0.8 + github.com/go-chi/chi/v5 v5.2.2 github.com/gophercloud/gophercloud/v2 v2.0.0 github.com/gophercloud/utils/v2 v2.0.0-20240701101423-2401526caee5 github.com/hashicorp/go-version v1.6.0 @@ -29,31 +29,33 @@ require ( gopkg.in/gcfg.v1 v1.2.3 gopkg.in/godo.v2 v2.0.9 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.31.6 - k8s.io/apimachinery v0.31.6 - k8s.io/apiserver v0.31.6 - k8s.io/client-go v0.31.6 - k8s.io/cloud-provider v0.31.6 - k8s.io/component-base v0.31.6 + k8s.io/api v0.31.11 + k8s.io/apimachinery v0.31.11 + k8s.io/apiserver v0.31.11 + k8s.io/client-go v0.31.11 + k8s.io/cloud-provider v0.31.11 + k8s.io/component-base v0.31.11 k8s.io/klog/v2 v2.130.1 - k8s.io/kms v0.31.6 - k8s.io/kubernetes v1.31.6 - k8s.io/mount-utils v0.31.6 + k8s.io/kms v0.31.11 + k8s.io/kubernetes v1.31.11 + k8s.io/mount-utils v0.31.11 k8s.io/utils v0.0.0-20241210054802-24370beab758 software.sslmate.com/src/go-pkcs12 v0.5.0 ) // the below fixes the "go list -m all" execution replace ( - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.6 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.6 - k8s.io/endpointslice => k8s.io/endpointslice v0.31.6 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.6 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.6 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.6 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.31.6 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.31.6 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.31.6 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.11 + k8s.io/cri-client => k8s.io/cri-client v0.31.11 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.11 + k8s.io/endpointslice => k8s.io/endpointslice v0.31.11 + k8s.io/externaljwt => k8s.io/externaljwt v0.31.11 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.11 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.11 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.11 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.31.11 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.31.11 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.31.11 ) require ( @@ -156,14 +158,14 @@ require ( gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.31.6 // indirect - k8s.io/component-helpers v0.31.6 // indirect - k8s.io/controller-manager v0.31.6 // indirect - k8s.io/csi-translation-lib v0.31.6 // indirect + k8s.io/apiextensions-apiserver v0.31.11 // indirect + k8s.io/component-helpers v0.31.11 // indirect + k8s.io/controller-manager v0.31.11 // indirect + k8s.io/csi-translation-lib v0.31.11 // indirect k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect - k8s.io/kubectl v0.31.6 // indirect - k8s.io/kubelet v0.31.6 // indirect - k8s.io/pod-security-admission v0.31.6 // indirect + k8s.io/kubectl v0.31.11 // indirect + k8s.io/kubelet v0.31.11 // indirect + k8s.io/pod-security-admission v0.31.11 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/go.sum b/go.sum index bc5d4403c4..8825e45669 100644 --- a/go.sum +++ b/go.sum @@ -113,8 +113,8 @@ github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyT github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= -github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618= +github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -835,43 +835,43 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.31.6 h1:ocWG/UhC9Mqp5oEfYWy9wCddbZiZyBAFTlBt0LVlhDg= -k8s.io/api v0.31.6/go.mod h1:i16xSiKMgVIVhsJMxfWq0mJbXA+Z7KhjPgYmwT41hl4= -k8s.io/apiextensions-apiserver v0.31.6 h1:v9sqyWlrgFZpAPdEb/bEiXfM98TfSppwRF0X/uWKXh0= -k8s.io/apiextensions-apiserver v0.31.6/go.mod h1:QVH3CFwqzGZtwsxPYzJlA/Qiwgb5FXmRMGls3CjzvbI= -k8s.io/apimachinery v0.31.6 h1:Pn96A0wHD0X8+l7QTdAzdLQPrpav1s8rU6A+v2/9UEY= -k8s.io/apimachinery v0.31.6/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= -k8s.io/apiserver v0.31.6 h1:FEhEGLsz1PbMOHeQZDbOUlMh36zRZbjgKwJCoMhdGmw= -k8s.io/apiserver v0.31.6/go.mod h1:dpFh+xqFQ02O8vLYCIqoiV7sJIpZsUULeNuag6Y9HGo= -k8s.io/client-go v0.31.6 h1:51HT40qVIZ13BrHKeWxFuU52uoPnFhxTYJnv4+LTgp4= -k8s.io/client-go v0.31.6/go.mod h1:MEq7JQJelUQ0/4fMoPEUrc/OOFyGo/9LmGA38H6O6xY= -k8s.io/cloud-provider v0.31.6 h1:5vVMyf/m/n8ij/GmSJLRcatchmciRr0gs4peBcxqvKk= -k8s.io/cloud-provider v0.31.6/go.mod h1:iT6kIEMEXrTIvRBAaRU5qefRzgPaSV6kwTc6mjhhnEw= -k8s.io/component-base v0.31.6 h1:FgI25PuZtCp2n7AFpOaDpMQOLieFdrpAbpeoZu7VhDI= -k8s.io/component-base v0.31.6/go.mod h1:aVRrh8lAI1kSShFmwcKLhc3msQoUcmFWPBDf0sXaISM= -k8s.io/component-helpers v0.31.6 h1:Af8BcE6pElKlLaerwW9s04jTQVFa66wmI1pkaNfDWzE= -k8s.io/component-helpers v0.31.6/go.mod h1:6CRV6M+7R13eqtz4FBm2ty9eH+QajDcP3y0Bklzh2FA= -k8s.io/controller-manager v0.31.6 h1:HQRUV6nogHo2N7vr3cgVNjZ+wvHIMvxEMjTeCrHitE4= -k8s.io/controller-manager v0.31.6/go.mod h1:0HDNTZVapQFa9G96jNxrU99ht7fQJVEKBXDzqKDMez0= -k8s.io/csi-translation-lib v0.31.6 h1:mBkF3AG8pRcwZv8SY7qT1JWznRsmYjZfT5Lxel9nN4Q= -k8s.io/csi-translation-lib v0.31.6/go.mod h1:I2F51irYJyt78so7wdral65B7PB7jR3keZ2MpB78mWw= +k8s.io/api v0.31.11 h1:jmrs+NBmdyaYMOIhAmi2g2eemugqiMwRSKtdpk0FAFc= +k8s.io/api v0.31.11/go.mod h1:t1/N5KEcY/DCwEzCbtCoJeJt4b00phLCRVgM11Ijb6o= +k8s.io/apiextensions-apiserver v0.31.11 h1:7VSwWgEKI8F4JfX1XLoRV9p5PaSwLUD5BBunq9mk24w= +k8s.io/apiextensions-apiserver v0.31.11/go.mod h1:c9qU0INuaGrRKNeQdyM73GPcgbJmcZeZoDrIT+dLxhs= +k8s.io/apimachinery v0.31.11 h1:QsYPEVrKOTBtuzj0gmfwVkM7RwPB+IbOUceBAuK4ips= +k8s.io/apimachinery v0.31.11/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apiserver v0.31.11 h1:j5K8wj08jZImaZKmmWJg8rlTLL6ewUCW0MSRcBkeOmo= +k8s.io/apiserver v0.31.11/go.mod h1:yGaiSFKV7RXmgxMT9mcBU3hnCl5I63Ala8xM7sCh088= +k8s.io/client-go v0.31.11 h1:uhc+e8vfsGtm9xVoIs0+ajGW0mWNW64VSjej3bXF+WA= +k8s.io/client-go v0.31.11/go.mod h1:y11StjQTOP0nd/o/RHxqwmdr1CWdBvnpvGs9k7MWYnA= +k8s.io/cloud-provider v0.31.11 h1:UAlqOFIHdwCPP/Hvhz46JdgdEYrXaqUFdNXMZkzmsV8= +k8s.io/cloud-provider v0.31.11/go.mod h1:VYXy7JDjEVZKH6vwDR/CqOwDwoK1425ThgIgPruO9jw= +k8s.io/component-base v0.31.11 h1:uPQCr7SJGhk/oFp4YmxG5ctHrDocZRGSOaheFrbAvoM= +k8s.io/component-base v0.31.11/go.mod h1:huE8dXdht4KoOPo8CSb0ifLjpGUc/dh+cmNGplRGZno= +k8s.io/component-helpers v0.31.11 h1:A3UbO910SOVoUmhkbGX8b3V4k5Ed2a02DtNgyTHBtss= +k8s.io/component-helpers v0.31.11/go.mod h1:+APbittkpj1TRGnNiQFUfJvq7zJ0ekvDu7IX+FZpPRg= +k8s.io/controller-manager v0.31.11 h1:zO/+eR9ZpUO7KABQSP5JC++0DnD7x1YrE/NaLcyB9hc= +k8s.io/controller-manager v0.31.11/go.mod h1:E6SvFTBj4QjY8oPDm4omD+u3O+0MPS4dE8flTmp0y0g= +k8s.io/csi-translation-lib v0.31.11 h1:oW9HXySDI3I4JQnH8Y54U3aQQg9GbqkPKPBcTg6NXn0= +k8s.io/csi-translation-lib v0.31.11/go.mod h1:M4nUwDP4AGtoslFXG2Pl/w0q+47j9exBe88xLa04qzk= k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kms v0.31.6 h1:p7OY+9Hp8nPtgzm0vT9TrERNigQQSu8tkgWqn+GvB2w= -k8s.io/kms v0.31.6/go.mod h1:OZKwl1fan3n3N5FFxnW5C4V3ygrah/3YXeJWS3O6+94= +k8s.io/kms v0.31.11 h1:NjOFtzHMHb8TaxJ2qQNZsFdZ5ofFe8w2HXMjg93dqL0= +k8s.io/kms v0.31.11/go.mod h1:OZKwl1fan3n3N5FFxnW5C4V3ygrah/3YXeJWS3O6+94= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/kubectl v0.31.6 h1:ngzql/UugqpEbeeyQX678BlVHXks19JR3CFjwKnWuFI= -k8s.io/kubectl v0.31.6/go.mod h1:m6OXbx9s0sZiaZrfHHSEmJUD5CjWPA5+cVg0GZnVdzM= -k8s.io/kubelet v0.31.6 h1:lxVvyLNDcb/QTpQNkDySk3iscgq4zubeSZs3cF6PmaA= -k8s.io/kubelet v0.31.6/go.mod h1:BPghO52ilF7UzFEVBmYFOxdVtLge0P1gixjz84lBzzc= -k8s.io/kubernetes v1.31.6 h1:zVhgWDFHmIj51o5sNARmjdgNvpq4K2Smya8pS5vxqlc= -k8s.io/kubernetes v1.31.6/go.mod h1:9xmT2buyTYj8TRKwRae7FcuY8k5+xlxv7VivvO0KKfs= -k8s.io/mount-utils v0.31.6 h1:MYRoh63q/fFjSiwPNpDv8H9L1cJDVrSNYzXzNUKANZY= -k8s.io/mount-utils v0.31.6/go.mod h1:HV/VYBUGqYUj4vt82YltzpWvgv8FPg0G9ItyInT3NPU= -k8s.io/pod-security-admission v0.31.6 h1:5WnXyl+UNmQb73O0L1w82uaUEPuvp+sxdhXRiOLdCkY= -k8s.io/pod-security-admission v0.31.6/go.mod h1:b+ZpSSR+XMx3t9Pvy/GdcXoI0CEpiWGT7IGAhcOBcGM= +k8s.io/kubectl v0.31.11 h1:rVr5JrMxSwtteB1n9Dyiy8u5qaRKwuhs7XjhDEpAiE4= +k8s.io/kubectl v0.31.11/go.mod h1:mF36H/0z8PuxC1J3lyLm+ryGuB3nZRwGEnEQ7vpQHYU= +k8s.io/kubelet v0.31.11 h1:HYoj3wiufFOUjIpcCUis+FVxg5AVFInIFLDkL34MaEQ= +k8s.io/kubelet v0.31.11/go.mod h1:nRUoDj5L7pV5uYK0QXjV0Sm3Scxm9S+3bRFhfEjtRa4= +k8s.io/kubernetes v1.31.11 h1:O5iuiUNzOcnhgy4HTYvhyJdGaw8yCFlcuomeojxu2sA= +k8s.io/kubernetes v1.31.11/go.mod h1:9xmT2buyTYj8TRKwRae7FcuY8k5+xlxv7VivvO0KKfs= +k8s.io/mount-utils v0.31.11 h1:gkvBKSlXY7V2hxNDCJZ9kibk6j8qORXDuECw40Mg7h0= +k8s.io/mount-utils v0.31.11/go.mod h1:HV/VYBUGqYUj4vt82YltzpWvgv8FPg0G9ItyInT3NPU= +k8s.io/pod-security-admission v0.31.11 h1:ESxlSHUbvq1v3G1as9uj0NYyIasKeNux0J04Xpn/NRY= +k8s.io/pod-security-admission v0.31.11/go.mod h1:zalSa2Eyl/xf8KY5qd5Z7dpAqJVmr9IJMB4FF6g2owo= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 7721e72735a2aefde6d39630ce349be1b5afb90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?p=C3=BDrus?= Date: Mon, 28 Jul 2025 10:54:30 +0200 Subject: [PATCH 07/16] [release-1.31] prepare new 1.31.4 release (#2942) --- charts/cinder-csi-plugin/Chart.yaml | 4 ++-- charts/manila-csi-plugin/Chart.yaml | 4 ++-- charts/openstack-cloud-controller-manager/Chart.yaml | 4 ++-- docs/cinder-csi-plugin/multi-region-clouds.md | 6 +++--- .../using-keystone-webhook-authenticator-and-authorizer.md | 2 +- docs/magnum-auto-healer/using-magnum-auto-healer.md | 2 +- .../using-octavia-ingress-controller.md | 2 +- examples/webhook/keystone-deployment.yaml | 2 +- manifests/barbican-kms/ds.yaml | 2 +- manifests/barbican-kms/pod.yaml | 2 +- .../cinder-csi-plugin/cinder-csi-controllerplugin.yaml | 2 +- manifests/cinder-csi-plugin/cinder-csi-nodeplugin.yaml | 2 +- .../openstack-cloud-controller-manager-ds.yaml | 2 +- .../openstack-cloud-controller-manager-pod.yaml | 2 +- manifests/magnum-auto-healer/magnum-auto-healer.yaml | 2 +- manifests/manila-csi-plugin/csi-controllerplugin.yaml | 2 +- manifests/manila-csi-plugin/csi-nodeplugin.yaml | 2 +- 17 files changed, 22 insertions(+), 22 deletions(-) diff --git a/charts/cinder-csi-plugin/Chart.yaml b/charts/cinder-csi-plugin/Chart.yaml index 5074bc9df8..cb0f5060b3 100644 --- a/charts/cinder-csi-plugin/Chart.yaml +++ b/charts/cinder-csi-plugin/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v1 -appVersion: v1.31.3 +appVersion: v1.31.4 description: Cinder CSI Chart for OpenStack name: openstack-cinder-csi -version: 2.31.7 +version: 2.31.8 home: https://github.com/kubernetes/cloud-provider-openstack icon: https://github.com/kubernetes/kubernetes/blob/master/logo/logo.png maintainers: diff --git a/charts/manila-csi-plugin/Chart.yaml b/charts/manila-csi-plugin/Chart.yaml index 6bf6eb6111..c432982eac 100644 --- a/charts/manila-csi-plugin/Chart.yaml +++ b/charts/manila-csi-plugin/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v1 -appVersion: v1.31.3 +appVersion: v1.31.4 description: Manila CSI Chart for OpenStack name: openstack-manila-csi -version: 2.31.3 +version: 2.31.4 home: http://github.com/kubernetes/cloud-provider-openstack icon: https://github.com/kubernetes/kubernetes/blob/master/logo/logo.png maintainers: diff --git a/charts/openstack-cloud-controller-manager/Chart.yaml b/charts/openstack-cloud-controller-manager/Chart.yaml index 468eb44a66..9c5181b128 100644 --- a/charts/openstack-cloud-controller-manager/Chart.yaml +++ b/charts/openstack-cloud-controller-manager/Chart.yaml @@ -1,10 +1,10 @@ apiVersion: v2 -appVersion: v1.31.3 +appVersion: v1.31.4 description: Openstack Cloud Controller Manager Helm Chart icon: https://object-storage-ca-ymq-1.vexxhost.net/swift/v1/6e4619c416ff4bd19e1c087f27a43eea/www-images-prod/openstack-logo/OpenStack-Logo-Vertical.png home: https://github.com/kubernetes/cloud-provider-openstack name: openstack-cloud-controller-manager -version: 2.31.3 +version: 2.31.4 maintainers: - name: eumel8 email: f.kloeker@telekom.de diff --git a/docs/cinder-csi-plugin/multi-region-clouds.md b/docs/cinder-csi-plugin/multi-region-clouds.md index f4f0283f06..574661ef75 100644 --- a/docs/cinder-csi-plugin/multi-region-clouds.md +++ b/docs/cinder-csi-plugin/multi-region-clouds.md @@ -162,7 +162,7 @@ spec: - name: liveness-probe ... - name: cinder-csi-plugin - image: docker.io/k8scloudprovider/cinder-csi-plugin:v1.31.3 + image: docker.io/k8scloudprovider/cinder-csi-plugin:v1.31.4 args: - /bin/cinder-csi-plugin - --endpoint=$(CSI_ENDPOINT) @@ -212,7 +212,7 @@ spec: - name: liveness-probe ... - name: cinder-csi-plugin - image: docker.io/k8scloudprovider/cinder-csi-plugin:v1.31.3 + image: docker.io/k8scloudprovider/cinder-csi-plugin:v1.31.4 args: - /bin/cinder-csi-plugin - --endpoint=$(CSI_ENDPOINT) @@ -278,7 +278,7 @@ spec: - Topology=true ... - name: cinder-csi-plugin - image: docker.io/k8scloudprovider/cinder-csi-plugin:v1.31.3 + image: docker.io/k8scloudprovider/cinder-csi-plugin:v1.31.4 args: - /bin/cinder-csi-plugin - --endpoint=$(CSI_ENDPOINT) diff --git a/docs/keystone-auth/using-keystone-webhook-authenticator-and-authorizer.md b/docs/keystone-auth/using-keystone-webhook-authenticator-and-authorizer.md index 7a191a802d..c75f8f4870 100644 --- a/docs/keystone-auth/using-keystone-webhook-authenticator-and-authorizer.md +++ b/docs/keystone-auth/using-keystone-webhook-authenticator-and-authorizer.md @@ -252,7 +252,7 @@ it as a service. There are several things we need to notice in the deployment manifest: - We are using image - `registry.k8s.io/provider-os/k8s-keystone-auth:v1.31.3` + `registry.k8s.io/provider-os/k8s-keystone-auth:v1.31.4` - We use `k8s-auth-policy` configmap created above. - The pod uses service account `keystone-auth` created above. - We use `keystone-auth-certs` secret created above to inject the diff --git a/docs/magnum-auto-healer/using-magnum-auto-healer.md b/docs/magnum-auto-healer/using-magnum-auto-healer.md index a9051cbb83..4909d69055 100644 --- a/docs/magnum-auto-healer/using-magnum-auto-healer.md +++ b/docs/magnum-auto-healer/using-magnum-auto-healer.md @@ -73,7 +73,7 @@ user_id=ceb61464a3d341ebabdf97d1d4b97099 user_project_id=b23a5e41d1af4c20974bf58b4dff8e5a password=password region=RegionOne -image=registry.k8s.io/provider-os/magnum-auto-healer:v1.31.3 +image=registry.k8s.io/provider-os/magnum-auto-healer:v1.31.4 cat < /etc/kubernetes/octavia-ingress-controller/deployment.yaml --- diff --git a/examples/webhook/keystone-deployment.yaml b/examples/webhook/keystone-deployment.yaml index 57ce208b7d..c668b3fa68 100644 --- a/examples/webhook/keystone-deployment.yaml +++ b/examples/webhook/keystone-deployment.yaml @@ -18,7 +18,7 @@ spec: serviceAccountName: k8s-keystone containers: - name: k8s-keystone-auth - image: registry.k8s.io/provider-os/k8s-keystone-auth:v1.31.3 + image: registry.k8s.io/provider-os/k8s-keystone-auth:v1.31.4 args: - ./bin/k8s-keystone-auth - --tls-cert-file diff --git a/manifests/barbican-kms/ds.yaml b/manifests/barbican-kms/ds.yaml index 70fb6ef485..98e842196d 100644 --- a/manifests/barbican-kms/ds.yaml +++ b/manifests/barbican-kms/ds.yaml @@ -30,7 +30,7 @@ spec: serviceAccountName: cloud-controller-manager containers: - name: barbican-kms - image: registry.k8s.io/provider-os/barbican-kms-plugin:v1.31.3 + image: registry.k8s.io/provider-os/barbican-kms-plugin:v1.31.4 args: - /bin/barbican-kms-plugin - --socketpath=$(KMS_ENDPOINT) diff --git a/manifests/barbican-kms/pod.yaml b/manifests/barbican-kms/pod.yaml index 61cf9af9bb..c6db0386aa 100644 --- a/manifests/barbican-kms/pod.yaml +++ b/manifests/barbican-kms/pod.yaml @@ -5,7 +5,7 @@ metadata: spec: containers: - name: barbican-kms - image: registry.k8s.io/provider-os/barbican-kms-plugin:v1.31.3 + image: registry.k8s.io/provider-os/barbican-kms-plugin:v1.31.4 args: - "--socketpath=/kms/kms.sock" - "--cloud-config=/etc/kubernetes/cloud-config" diff --git a/manifests/cinder-csi-plugin/cinder-csi-controllerplugin.yaml b/manifests/cinder-csi-plugin/cinder-csi-controllerplugin.yaml index 0d66c0d07d..eb5370616e 100644 --- a/manifests/cinder-csi-plugin/cinder-csi-controllerplugin.yaml +++ b/manifests/cinder-csi-plugin/cinder-csi-controllerplugin.yaml @@ -93,7 +93,7 @@ spec: - mountPath: /var/lib/csi/sockets/pluginproxy/ name: socket-dir - name: cinder-csi-plugin - image: registry.k8s.io/provider-os/cinder-csi-plugin:v1.31.3 + image: registry.k8s.io/provider-os/cinder-csi-plugin:v1.31.4 args: - /bin/cinder-csi-plugin - "--endpoint=$(CSI_ENDPOINT)" diff --git a/manifests/cinder-csi-plugin/cinder-csi-nodeplugin.yaml b/manifests/cinder-csi-plugin/cinder-csi-nodeplugin.yaml index 71f4ce7c36..07a1f4211e 100644 --- a/manifests/cinder-csi-plugin/cinder-csi-nodeplugin.yaml +++ b/manifests/cinder-csi-plugin/cinder-csi-nodeplugin.yaml @@ -53,7 +53,7 @@ spec: capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - image: registry.k8s.io/provider-os/cinder-csi-plugin:v1.31.3 + image: registry.k8s.io/provider-os/cinder-csi-plugin:v1.31.4 args: - /bin/cinder-csi-plugin - "--endpoint=$(CSI_ENDPOINT)" diff --git a/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml b/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml index e6fd868343..9f69cdecf1 100644 --- a/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml +++ b/manifests/controller-manager/openstack-cloud-controller-manager-ds.yaml @@ -38,7 +38,7 @@ spec: serviceAccountName: cloud-controller-manager containers: - name: openstack-cloud-controller-manager - image: registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.3 + image: registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.4 args: - /bin/openstack-cloud-controller-manager - --v=1 diff --git a/manifests/controller-manager/openstack-cloud-controller-manager-pod.yaml b/manifests/controller-manager/openstack-cloud-controller-manager-pod.yaml index 9bc8ddb82e..97df4d68b4 100644 --- a/manifests/controller-manager/openstack-cloud-controller-manager-pod.yaml +++ b/manifests/controller-manager/openstack-cloud-controller-manager-pod.yaml @@ -11,7 +11,7 @@ metadata: spec: containers: - name: openstack-cloud-controller-manager - image: registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.3 + image: registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.4 args: - /bin/openstack-cloud-controller-manager - --v=1 diff --git a/manifests/magnum-auto-healer/magnum-auto-healer.yaml b/manifests/magnum-auto-healer/magnum-auto-healer.yaml index f460d3e576..2725f6bd1d 100644 --- a/manifests/magnum-auto-healer/magnum-auto-healer.yaml +++ b/manifests/magnum-auto-healer/magnum-auto-healer.yaml @@ -88,7 +88,7 @@ spec: node-role.kubernetes.io/control-plane: "" containers: - name: magnum-auto-healer - image: registry.k8s.io/provider-os/magnum-auto-healer:v1.31.3 + image: registry.k8s.io/provider-os/magnum-auto-healer:v1.31.4 imagePullPolicy: Always args: - /bin/magnum-auto-healer diff --git a/manifests/manila-csi-plugin/csi-controllerplugin.yaml b/manifests/manila-csi-plugin/csi-controllerplugin.yaml index 86a5701e46..7fab7475d8 100644 --- a/manifests/manila-csi-plugin/csi-controllerplugin.yaml +++ b/manifests/manila-csi-plugin/csi-controllerplugin.yaml @@ -77,7 +77,7 @@ spec: capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - image: registry.k8s.io/provider-os/manila-csi-plugin:v1.31.3 + image: registry.k8s.io/provider-os/manila-csi-plugin:v1.31.4 command: ["/bin/sh", "-c", '/bin/manila-csi-plugin --nodeid=$(NODE_ID) diff --git a/manifests/manila-csi-plugin/csi-nodeplugin.yaml b/manifests/manila-csi-plugin/csi-nodeplugin.yaml index 1122797280..3c1636e65c 100644 --- a/manifests/manila-csi-plugin/csi-nodeplugin.yaml +++ b/manifests/manila-csi-plugin/csi-nodeplugin.yaml @@ -50,7 +50,7 @@ spec: capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - image: registry.k8s.io/provider-os/manila-csi-plugin:v1.31.3 + image: registry.k8s.io/provider-os/manila-csi-plugin:v1.31.4 command: ["/bin/sh", "-c", '/bin/manila-csi-plugin --nodeid=$(NODE_ID) From 6f645a8caba9bb91dd1cdab1706195908d8df214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?p=C3=BDrus?= Date: Mon, 28 Jul 2025 11:02:13 +0200 Subject: [PATCH 08/16] [release-1.31] charts: bump manila chart --- charts/manila-csi-plugin/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/manila-csi-plugin/Chart.yaml b/charts/manila-csi-plugin/Chart.yaml index c432982eac..0faed17e6a 100644 --- a/charts/manila-csi-plugin/Chart.yaml +++ b/charts/manila-csi-plugin/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v1 appVersion: v1.31.4 description: Manila CSI Chart for OpenStack name: openstack-manila-csi -version: 2.31.4 +version: 2.31.5 home: http://github.com/kubernetes/cloud-provider-openstack icon: https://github.com/kubernetes/kubernetes/blob/master/logo/logo.png maintainers: From 492a867ab1d7207cfc4c6abd60d5b91ba67ab8d7 Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Mon, 28 Jul 2025 05:16:29 -0700 Subject: [PATCH 09/16] Update DEBIAN_IMAGE to bookworm (#2944) Co-authored-by: Manjunath Kumatagi --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 169ac6b9f1..b40e56719d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ ARG DISTROLESS_IMAGE=registry.k8s.io/build-image/go-runner:v2.3.1-go1.22.2-bookw ARG ALPINE_IMAGE=alpine:3.17.5 # cinder-csi-plugin uses Debian as a base image -ARG DEBIAN_IMAGE=registry.k8s.io/build-image/debian-base:bullseye-v1.4.3 +ARG DEBIAN_IMAGE=registry.k8s.io/build-image/debian-base:bookworm-v1.0.4 ################################################################################ ## BUILD STAGE ## From d9937d12c492f80f89a5a0775b12aed4d8be001b Mon Sep 17 00:00:00 2001 From: Konstantinos Angelopoulos Date: Tue, 29 Jul 2025 19:36:27 +0200 Subject: [PATCH 10/16] [release-1.31] update alpine to latest patch release (#2947) * update alpine to latest patch release * update go --- Dockerfile | 6 +++--- go.mod | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index b40e56719d..bc6297e062 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ ## BUILD ARGS ## ################################################################################ # This build arg allows the specification of a custom Golang image. -ARG GOLANG_IMAGE=golang:1.22.2 +ARG GOLANG_IMAGE=golang:1.23.11 # The distroless image on which the CPI manager image is built. # @@ -22,11 +22,11 @@ ARG GOLANG_IMAGE=golang:1.22.2 # deterministic builds. Follow what kubernetes uses to build # kube-controller-manager, for example for 1.27.x: # https://github.com/kubernetes/kubernetes/blob/release-1.27/build/common.sh#L99 -ARG DISTROLESS_IMAGE=registry.k8s.io/build-image/go-runner:v2.3.1-go1.22.2-bookworm.0 +ARG DISTROLESS_IMAGE=registry.k8s.io/build-image/go-runner:v2.4.0-go1.23.11-bookworm.0 # We use Alpine as the source for default CA certificates and some output # images -ARG ALPINE_IMAGE=alpine:3.17.5 +ARG ALPINE_IMAGE=alpine:3.17.10 # cinder-csi-plugin uses Debian as a base image ARG DEBIAN_IMAGE=registry.k8s.io/build-image/debian-base:bookworm-v1.0.4 diff --git a/go.mod b/go.mod index c156b6065d..072701b8e4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module k8s.io/cloud-provider-openstack -go 1.22.0 +go 1.23.11 require ( github.com/container-storage-interface/spec v1.9.0 From 853ad568e7b5e98640aaadbbe6f3a7fc356ee05a Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Fri, 1 Aug 2025 08:07:38 -0700 Subject: [PATCH 11/16] tests: create volumev3 service type (#2961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: pýrus --- .../roles/install-devstack/tasks/main.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/playbooks/roles/install-devstack/tasks/main.yml b/tests/playbooks/roles/install-devstack/tasks/main.yml index 1115520321..3dd1dab897 100644 --- a/tests/playbooks/roles/install-devstack/tasks/main.yml +++ b/tests/playbooks/roles/install-devstack/tasks/main.yml @@ -115,3 +115,21 @@ cmd: | set -ex sudo -u {{ user }} -H ./stack.sh + + - name: Create volumev3 service type + shell: + executable: /bin/bash + chdir: "{{ workdir }}" + cmd: | + set -ex + export OS_CLOUD=devstack-admin + if openstack service show volumev3 > /dev/null 2>&1; then + echo "Service volumev3 already exists" + exit 0 + fi + URL="$(openstack endpoint list --service block-storage -f value -c URL | true)" + if [ -z "${URL}" ]; then + exit 0 + fi + openstack service create --name cinder volumev3 + openstack endpoint create --region RegionOne volumev3 public "${URL}" From 1eb090b5828ccb523ff3289c02b69c3fd586c681 Mon Sep 17 00:00:00 2001 From: kayrus Date: Fri, 1 Aug 2025 17:25:30 +0200 Subject: [PATCH 12/16] tests: fix create volumev3 service type task --- tests/playbooks/roles/install-devstack/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/playbooks/roles/install-devstack/tasks/main.yml b/tests/playbooks/roles/install-devstack/tasks/main.yml index 3dd1dab897..6ff97f7d80 100644 --- a/tests/playbooks/roles/install-devstack/tasks/main.yml +++ b/tests/playbooks/roles/install-devstack/tasks/main.yml @@ -127,7 +127,7 @@ echo "Service volumev3 already exists" exit 0 fi - URL="$(openstack endpoint list --service block-storage -f value -c URL | true)" + URL="$(openstack endpoint list --service block-storage -f value -c URL || true)" if [ -z "${URL}" ]; then exit 0 fi From a9d711e1be7e9c494f19586352ade3610a717fc5 Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:16:46 -0700 Subject: [PATCH 13/16] migrate away from gcr.io/k8s-testimages (#2971) Co-authored-by: Jesse Haka --- cloudbuild.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 1f80394b82..3cd2651c1c 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -9,7 +9,7 @@ options: substitution_option: ALLOW_LOOSE machineType: 'N1_HIGHCPU_8' steps: - - name: gcr.io/k8s-testimages/gcb-docker-gcloud + - name: gcr.io/k8s-staging-test-infra/gcb-docker-gcloud entrypoint: bash env: # default cloudbuild has HOME=/builder/home and docker buildx is in /root/.docker/cli-plugins/docker-buildx From 7ae2326997e68c05f989a9916c46aa2b1dd6c5ff Mon Sep 17 00:00:00 2001 From: k8s-infra-cherrypick-robot <90416843+k8s-infra-cherrypick-robot@users.noreply.github.com> Date: Fri, 8 Aug 2025 08:25:43 -0700 Subject: [PATCH 14/16] do not allow DetachVolume when status is detaching (#2975) Co-authored-by: Ansou FALL --- pkg/csi/cinder/openstack/openstack_volumes.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/csi/cinder/openstack/openstack_volumes.go b/pkg/csi/cinder/openstack/openstack_volumes.go index b60dbe6819..fa48816d16 100644 --- a/pkg/csi/cinder/openstack/openstack_volumes.go +++ b/pkg/csi/cinder/openstack/openstack_volumes.go @@ -36,6 +36,7 @@ import ( const ( VolumeAvailableStatus = "available" VolumeInUseStatus = "in-use" + VolumeDetachingStatus = "detaching" operationFinishInitDelay = 1 * time.Second operationFinishFactor = 1.1 operationFinishSteps = 10 @@ -292,6 +293,11 @@ func (os *OpenStack) DetachVolume(instanceID, volumeID string) error { klog.V(2).Infof("volume: %s has been detached from compute: %s ", volume.ID, instanceID) return nil } + // If the volume is already in detaching state, we can return nil + if volume.Status == VolumeDetachingStatus { + klog.V(2).Infof("volume: %s is already in detaching state from compute %s ", volume.ID, instanceID) + return nil + } if volume.Status != VolumeInUseStatus { return fmt.Errorf("can not detach volume %s, its status is %s", volume.Name, volume.Status) From 07d46cc8e2edd2f260eeea49aed6588477624e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?p=C3=BDrus?= Date: Fri, 29 Aug 2025 00:03:08 +0200 Subject: [PATCH 15/16] [release-1.31] tests: Bump DevStack to Epoxy (2025.1) (#2977) * tests: Bump DevStack to Epoxy (2025.1) (#2742) * tests: Prefer ginkgo timeout So that we actually get test results. Signed-off-by: Stephen Finucane * tests: Align opts for Cinder, Manila tests Add a timeout to the Manila job and otherwise move some lines around. Signed-off-by: Stephen Finucane * tests: Suffix image version While boskos will reap most resources for us, it doesn't reap images [1]. This has resulted in us using the same image for who knows how long at this point. Encode the Ubuntu version to prevent us picking up other version by mistake. [1] https://github.com/kubernetes-sigs/boskos/blob/5993cef5a1c719c33c0936d416b7d935058e1204/cmd/janitor/gcp_janitor.py#L46-L88 Signed-off-by: Stephen Finucane * tests: Bump DevStack to Epoxy (2025.1) Signed-off-by: Stephen Finucane * tests: Bump amphora image Use the Ubuntu 24.04 version, rather than the 22.04 version. This aligns with what we're using for DevStack itself. Signed-off-by: Stephen Finucane * devstack: Remove USE_PYTHON3 It's all Python 3 now, baby. Signed-off-by: Stephen Finucane * tests: Install Ansible from Debian Testing Signed-off-by: Stephen Finucane * tests: Correct broken conditions Per the Ansible 2.19 porting guide [1]. [1] https://ansible.readthedocs.io/projects/ansible-core/devel/porting_guides/porting_guide_core_2.19.html Signed-off-by: Stephen Finucane * tests: Decrease device detach timeout Wait less time before retrying. Signed-off-by: Stephen Finucane --------- Signed-off-by: Stephen Finucane * Bump CSI test timeouts (#2966) * Bump CSI test timeouts We have worked around Nova bug #2119114 by lowering the device detach threshold to 1 second. Unfortunately this still leaves us with a N seconds of additional runtime, where N is the number of device detaches incurred by our test suite (since we run tests serially). This has put us right on the cusp of timeouts, meaning our jobs occasionally pass and occasionally fail, depending on the node we end up on. Add a bit more breathing room for the jobs while we wait for the Nova fix. Note that we do this for both Cinder and Manila to try keep those jobs consistent where possible. [1] https://bugs.launchpad.net/nova/+bug/2119114 Signed-off-by: Stephen Finucane * tests: Temporarily remove share v1 endpoint Signed-off-by: Stephen Finucane --------- Signed-off-by: Stephen Finucane --------- Signed-off-by: Stephen Finucane Co-authored-by: Stephen Finucane --- tests/ci-csi-cinder-e2e.sh | 18 +++++++++++++++++ tests/ci-csi-manila-e2e.sh | 18 +++++++++++++++++ tests/ci-occm-e2e.sh | 20 ++++++++++++++++++- .../roles/install-cpo-occm/tasks/main.yaml | 4 ++-- .../roles/install-csi-cinder/tasks/main.yaml | 6 ++++-- .../roles/install-csi-manila/tasks/main.yaml | 14 +++++++------ .../roles/install-devstack/defaults/main.yaml | 4 ++-- .../roles/install-devstack/tasks/main.yml | 16 +++++++++++++++ .../install-devstack/templates/local.conf.j2 | 12 ++++++++++- tests/playbooks/test-occm-e2e.yaml | 2 +- tests/scripts/create-gce-vm.sh | 13 ++++++------ 11 files changed, 106 insertions(+), 21 deletions(-) diff --git a/tests/ci-csi-cinder-e2e.sh b/tests/ci-csi-cinder-e2e.sh index 2c5bbfe33d..a1e0bbfca1 100755 --- a/tests/ci-csi-cinder-e2e.sh +++ b/tests/ci-csi-cinder-e2e.sh @@ -41,6 +41,24 @@ cleanup() { } trap cleanup EXIT +# Install Ansible from Trixie (Debian Testing) to allow us to talk to a host +# running Python 3.12 like Ubuntu 24.04 +# +# https://woju.eu/blog/2025/03/ansible-bookworm/ +cat << EOF > /etc/apt/sources.list.d/trixie.list +deb https://deb.debian.org/debian trixie main +EOF + +cat << EOF > /etc/apt/preferences.d/ansible.pref +Package: * +Pin: release n=trixie +Pin-Priority: -10 + +Package: ansible* python3-netaddr +Pin: release n=trixie +Pin-Priority: 990 +EOF + apt-get update apt-get install -y python3-requests ansible diff --git a/tests/ci-csi-manila-e2e.sh b/tests/ci-csi-manila-e2e.sh index 7b285320ea..d6be16b35c 100755 --- a/tests/ci-csi-manila-e2e.sh +++ b/tests/ci-csi-manila-e2e.sh @@ -41,6 +41,24 @@ cleanup() { } trap cleanup EXIT +# Install Ansible from Trixie (Debian Testing) to allow us to talk to a host +# running Python 3.12 like Ubuntu 24.04 +# +# https://woju.eu/blog/2025/03/ansible-bookworm/ +cat << EOF > /etc/apt/sources.list.d/trixie.list +deb https://deb.debian.org/debian trixie main +EOF + +cat << EOF > /etc/apt/preferences.d/ansible.pref +Package: * +Pin: release n=trixie +Pin-Priority: -10 + +Package: ansible* python3-netaddr +Pin: release n=trixie +Pin-Priority: 990 +EOF + apt-get update apt-get install -y python3-requests ansible diff --git a/tests/ci-occm-e2e.sh b/tests/ci-occm-e2e.sh index 4e60b2d363..230f74b4bd 100755 --- a/tests/ci-occm-e2e.sh +++ b/tests/ci-occm-e2e.sh @@ -42,6 +42,24 @@ cleanup() { } trap cleanup EXIT +# Install Ansible from Trixie (Debian Testing) to allow us to talk to a host +# running Python 3.12 like Ubuntu 24.04 +# +# https://woju.eu/blog/2025/03/ansible-bookworm/ +cat << EOF > /etc/apt/sources.list.d/trixie.list +deb https://deb.debian.org/debian trixie main +EOF + +cat << EOF > /etc/apt/preferences.d/ansible.pref +Package: * +Pin: release n=trixie +Pin-Priority: -10 + +Package: ansible* python3-netaddr +Pin: release n=trixie +Pin-Priority: 990 +EOF + apt-get update apt-get install -y python3-requests ansible @@ -133,4 +151,4 @@ scp -i ~/.ssh/google_compute_engine \ # If Boskos is being used then release the resource back to Boskos. [ -z "${BOSKOS_HOST:-}" ] || python3 tests/scripts/boskos.py --release >> "$ARTIFACTS/logs/boskos.log" 2>&1 -exit ${exit_code} \ No newline at end of file +exit ${exit_code} diff --git a/tests/playbooks/roles/install-cpo-occm/tasks/main.yaml b/tests/playbooks/roles/install-cpo-occm/tasks/main.yaml index c8cbc304cf..cfd889da1b 100644 --- a/tests/playbooks/roles/install-cpo-occm/tasks/main.yaml +++ b/tests/playbooks/roles/install-cpo-occm/tasks/main.yaml @@ -128,7 +128,7 @@ msg: *failmsg - name: Run functional tests for openstack-cloud-controller-manager - when: run_e2e + when: run_e2e | bool register: run_tests shell: executable: /bin/bash @@ -145,7 +145,7 @@ - name: Print logs for debugging when: - - run_e2e + - run_e2e | bool - run_tests.failed block: - name: Show openstack-cloud-controller-manager pod logs diff --git a/tests/playbooks/roles/install-csi-cinder/tasks/main.yaml b/tests/playbooks/roles/install-csi-cinder/tasks/main.yaml index 1e5b7735da..23354effea 100644 --- a/tests/playbooks/roles/install-csi-cinder/tasks/main.yaml +++ b/tests/playbooks/roles/install-csi-cinder/tasks/main.yaml @@ -187,14 +187,16 @@ -storage.testdriver=tests/e2e/csi/cinder/test-driver.yaml \ --ginkgo.focus='External.Storage' \ --ginkgo.skip='\[Disruptive\]|\[Testpattern:\s+Dynamic\s+PV\s+\(default\s+fs\)\]\s+provisioning\s+should\s+mount\s+multiple\s+PV\s+pointing\s+to\s+the\s+same\s+storage\s+on\s+the\s+same\s+node|\[Testpattern:\s+Dynamic\s+PV\s+\(default\s+fs\)\]\s+provisioning\s+should\s+provision\s+storage\s+with\s+any\s+volume\s+data\s+source\s+\[Serial\]|should\s+support\s+expansion\s+of\s+pvcs\s+created\s+for\s+ephemeral\s+pvcs' \ + --ginkgo.v \ --ginkgo.noColor \ --ginkgo.progress \ - --ginkgo.v \ - --ginkgo.timeout=24h \ + --ginkgo.timeout=1h45m \ -test.timeout=0 \ -report-dir="/var/log/csi-pod" | tee "/var/log/csi-pod/cinder-csi-e2e.log" register: functional_test_result ignore_errors: true + async: 6600 # wait 1h50m (i.e. 5 mins longer than the ginkgo timeout) then fail and fetch the logs + poll: 15 - name: Collect pod logs for debug purpose shell: diff --git a/tests/playbooks/roles/install-csi-manila/tasks/main.yaml b/tests/playbooks/roles/install-csi-manila/tasks/main.yaml index 99fd24d231..9db71c027d 100644 --- a/tests/playbooks/roles/install-csi-manila/tasks/main.yaml +++ b/tests/playbooks/roles/install-csi-manila/tasks/main.yaml @@ -227,21 +227,23 @@ set +x; source {{ devstack_workdir }}/openrc demo demo > /dev/null; set -x cd {{ ansible_user_dir }}/src/k8s.io/cloud-provider-openstack - - # GATEWAY_IP is the default value in devstack mkdir -p /var/log/csi-pod + # GATEWAY_IP is the default value in devstack GATEWAY_IP=172.24.5.1 \ OS_RC={{ devstack_workdir }}/openrc \ go test -v ./cmd/tests/manila-csi-e2e-suite/manila_csi_e2e_suite_test.go \ + --ginkgo.focus="\[manila-csi-e2e\]" \ + --ginkgo.skip="\[Disruptive\]|\[sig-storage\]\s+\[manila-csi-e2e\]\s+CSI\s+Volumes\s+\[Driver:\s+nfs.manila.csi.openstack.org\]\s+\[Testpattern:\s+Dynamic\s+PV\s+\(default\s+fs\)\]\s+provisioning\s+should\s+provision\s+storage\s+with\s+any\s+volume\s+data\s+source\s+\[Serial\]|should\s+provision\s+storage\s+with\s+snapshot\s+data\s+source|restoring\s+snapshot\s+to\s+larger\s+size" \ --ginkgo.v \ --ginkgo.noColor \ --ginkgo.progress \ - --ginkgo.skip="\[Disruptive\]|\[sig-storage\]\s+\[manila-csi-e2e\]\s+CSI\s+Volumes\s+\[Driver:\s+nfs.manila.csi.openstack.org\]\s+\[Testpattern:\s+Dynamic\s+PV\s+\(default\s+fs\)\]\s+provisioning\s+should\s+provision\s+storage\s+with\s+any\s+volume\s+data\s+source\s+\[Serial\]|should\s+provision\s+storage\s+with\s+snapshot\s+data\s+source|restoring\s+snapshot\s+to\s+larger\s+size" \ - --ginkgo.focus="\[manila-csi-e2e\]" \ - -report-dir /var/log/csi-pod \ - -timeout=0 | tee "/var/log/csi-pod/manila-csi-e2e.log" + --ginkgo.timeout=1h45m \ + -timeout=0 \ + -report-dir /var/log/csi-pod | tee "/var/log/csi-pod/manila-csi-e2e.log" register: functional_test_result ignore_errors: true + async: 6600 # wait 1h50m (i.e. 5 mins longer than the ginkgo timeout) then fail and fetch the logs + poll: 15 - name: Collect pod logs for debug purpose shell: diff --git a/tests/playbooks/roles/install-devstack/defaults/main.yaml b/tests/playbooks/roles/install-devstack/defaults/main.yaml index 8a2839dd95..c73699bbd5 100644 --- a/tests/playbooks/roles/install-devstack/defaults/main.yaml +++ b/tests/playbooks/roles/install-devstack/defaults/main.yaml @@ -1,7 +1,7 @@ --- user: "stack" workdir: "/home/{{ user }}/devstack" -branch: "2023.2-eol" +branch: "stable/2025.1" enable_services: - nova - glance @@ -10,6 +10,6 @@ enable_services: - octavia - ovn-octavia - barbican -octavia_amphora_url: "https://tarballs.opendev.org/openstack/octavia/test-images/test-only-amphora-x64-haproxy-ubuntu-jammy.qcow2" +octavia_amphora_url: "https://tarballs.opendev.org/openstack/octavia/test-images/test-only-amphora-x64-haproxy-ubuntu-noble.qcow2" octavia_amphora_dir: /opt/octavia-amphora octavia_amphora_filename: amphora-x64-haproxy.qcow2 diff --git a/tests/playbooks/roles/install-devstack/tasks/main.yml b/tests/playbooks/roles/install-devstack/tasks/main.yml index 6ff97f7d80..6a8f07969b 100644 --- a/tests/playbooks/roles/install-devstack/tasks/main.yml +++ b/tests/playbooks/roles/install-devstack/tasks/main.yml @@ -133,3 +133,19 @@ fi openstack service create --name cinder volumev3 openstack endpoint create --region RegionOne volumev3 public "${URL}" + + # FIXME(stephenfin): We should remove this as soon as [1] merges and we + # bump our dependencies to include it. + # [1] https://github.com/gophercloud/gophercloud/pull/3435 + - name: Delete legacy manila endpoint + shell: + executable: /bin/bash + chdir: "{{ workdir }}" + cmd: | + set -ex + export OS_CLOUD=devstack-admin + + # delete legacy manila API endpoints + if openstack service show manila > /dev/null 2>&1; then + openstack service delete manila + fi diff --git a/tests/playbooks/roles/install-devstack/templates/local.conf.j2 b/tests/playbooks/roles/install-devstack/templates/local.conf.j2 index 13ae64fdd7..58bc49e563 100644 --- a/tests/playbooks/roles/install-devstack/templates/local.conf.j2 +++ b/tests/playbooks/roles/install-devstack/templates/local.conf.j2 @@ -3,7 +3,6 @@ RECLONE=False HOST_IP={{ local_ip_address }} DEST=/opt/stack DATA_DIR=${DEST}/data -USE_PYTHON3=True LOGFILE=$DEST/logs/stack.sh.log VERBOSE=True LOG_COLOR=False @@ -29,6 +28,7 @@ enable_service n-cond enable_service n-sch enable_service n-api-meta +# Placement enable_service placement-api enable_service placement-client {% endif %} @@ -128,6 +128,16 @@ if [ -f /opt/stack/data/venv/bin/activate ]; then deactivate fi +{% if "nova" in enable_services %} +[[post-config|$NOVA_CONF]] +[libvirt] +# Workaround for nova bug #2119114. Until that bug is resolved, Nova will +# always timeout when detaching volumes (which affects deletion of PVCs) +# +# https://bugs.launchpad.net/nova/+bug/2119114 +device_detach_timeout = 1 +{% endif %} + {% if "glance" in enable_services %} [[post-config|$GLANCE_API_CONF]] [glance_store] diff --git a/tests/playbooks/test-occm-e2e.yaml b/tests/playbooks/test-occm-e2e.yaml index af5a3cd61e..058796b03c 100644 --- a/tests/playbooks/test-occm-e2e.yaml +++ b/tests/playbooks/test-occm-e2e.yaml @@ -25,5 +25,5 @@ - role: install-k3s worker_node_count: 0 - role: install-cpo-occm - run_e2e: "{{ run_e2e }}" + run_e2e: "{{ run_e2e | bool }}" octavia_provider: "{{ octavia_provider }}" diff --git a/tests/scripts/create-gce-vm.sh b/tests/scripts/create-gce-vm.sh index ad0e90fb7f..9f861e665b 100755 --- a/tests/scripts/create-gce-vm.sh +++ b/tests/scripts/create-gce-vm.sh @@ -91,17 +91,18 @@ main() { case "${FLAVOR}" in "default") - if ! gcloud compute disks describe devstack-${FLAVOR} --zone "${GCP_ZONE}" > /dev/null 2>&1; + local disk_name="devstack-${FLAVOR}-ubuntu2404" + if ! gcloud compute disks describe "${disk_name}" --zone "${GCP_ZONE}" > /dev/null 2>&1; then - gcloud compute disks create devstack-${FLAVOR} \ + gcloud compute disks create "${disk_name}" \ --image-project ubuntu-os-cloud --image-family ubuntu-2404-lts-amd64 \ --zone "${GCP_ZONE}" fi - if ! gcloud compute images describe devstack-${FLAVOR} > /dev/null 2>&1; + if ! gcloud compute images describe "${disk_name}" > /dev/null 2>&1; then - gcloud compute images create devstack-${FLAVOR} \ - --source-disk devstack-${FLAVOR} --source-disk-zone "${GCP_ZONE}" \ + gcloud compute images create "${disk_name}" \ + --source-disk "${disk_name}" --source-disk-zone "${GCP_ZONE}" \ --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx" fi ;; @@ -115,7 +116,7 @@ main() { then gcloud compute instances create devstack \ --zone "${GCP_ZONE}" \ - --image devstack-${FLAVOR} \ + --image "${disk_name}" \ --boot-disk-size 30G \ --boot-disk-type pd-ssd \ --can-ip-forward \ From 34f13e89c0c9f2c5237dbd5fd47bd9f699ac3b12 Mon Sep 17 00:00:00 2001 From: shiftstack-merge-bot Date: Mon, 1 Sep 2025 12:05:42 +0000 Subject: [PATCH 16/16] Updating and vendoring go modules after an upstream merge --- vendor/github.com/go-chi/chi/v5/CHANGELOG.md | 29 ++++++- .../github.com/go-chi/chi/v5/CONTRIBUTING.md | 12 +-- vendor/github.com/go-chi/chi/v5/README.md | 17 +++-- vendor/github.com/go-chi/chi/v5/SECURITY.md | 5 ++ vendor/github.com/go-chi/chi/v5/chi.go | 9 ++- vendor/github.com/go-chi/chi/v5/context.go | 30 +++++--- vendor/github.com/go-chi/chi/v5/mux.go | 76 ++++++++++++++----- vendor/github.com/go-chi/chi/v5/path_value.go | 21 +++++ .../go-chi/chi/v5/path_value_fallback.go | 19 +++++ vendor/github.com/go-chi/chi/v5/tree.go | 32 +++++++- .../apiserver/pkg/storage/etcd3/watcher.go | 71 +++++++++-------- .../metrics/prometheus/slis/routes.go | 4 +- .../kubernetes/pkg/features/kube_features.go | 8 ++ .../kubernetes/pkg/volume/util/resize_util.go | 21 +++++ .../kubernetes/test/e2e/feature/feature.go | 4 + .../kubernetes/test/utils/image/manifest.go | 2 +- vendor/modules.txt | 56 +++++++------- 17 files changed, 302 insertions(+), 114 deletions(-) create mode 100644 vendor/github.com/go-chi/chi/v5/SECURITY.md create mode 100644 vendor/github.com/go-chi/chi/v5/path_value.go create mode 100644 vendor/github.com/go-chi/chi/v5/path_value_fallback.go diff --git a/vendor/github.com/go-chi/chi/v5/CHANGELOG.md b/vendor/github.com/go-chi/chi/v5/CHANGELOG.md index a1feeec055..25b45b9743 100644 --- a/vendor/github.com/go-chi/chi/v5/CHANGELOG.md +++ b/vendor/github.com/go-chi/chi/v5/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## v5.0.12 (2024-02-16) + +- History of changes: see https://github.com/go-chi/chi/compare/v5.0.11...v5.0.12 + + +## v5.0.11 (2023-12-19) + +- History of changes: see https://github.com/go-chi/chi/compare/v5.0.10...v5.0.11 + + +## v5.0.10 (2023-07-13) + +- Fixed small edge case in tests of v5.0.9 for older Go versions +- History of changes: see https://github.com/go-chi/chi/compare/v5.0.9...v5.0.10 + + +## v5.0.9 (2023-07-13) + +- History of changes: see https://github.com/go-chi/chi/compare/v5.0.8...v5.0.9 + + ## v5.0.8 (2022-12-07) - History of changes: see https://github.com/go-chi/chi/compare/v5.0.7...v5.0.8 @@ -90,14 +111,14 @@ incremental, with the architecture and api being the same today as it was origin makes chi a pretty easy project to maintain, as well thanks to the many amazing community contributions over the years to who all help make chi better (total of 86 contributors to date -- thanks all!). -Chi has been an labour of love, art and engineering, with the goals to offer beautiful ergonomics, flexibility, performance +Chi has been a labour of love, art and engineering, with the goals to offer beautiful ergonomics, flexibility, performance and simplicity when building HTTP services with Go. I've strived to keep the router very minimal in surface area / code size, and always improving the code wherever possible -- and as of today the `chi` package is just 1082 lines of code (not counting middlewares, which are all optional). As well, I don't have the exact metrics, but from my analysis and email exchanges from companies and developers, chi is used by thousands of projects around the world -- thank you all as there is no better form of joy for me than to have art I had started be helpful and enjoyed by others. And of course I use chi in all of my own projects too :) -For me, the asthetics of chi's code and usage are very important. With the introduction of Go's module support +For me, the aesthetics of chi's code and usage are very important. With the introduction of Go's module support (which I'm a big fan of), chi's past versioning scheme choice to v2, v3 and v4 would mean I'd require the import path of "github.com/go-chi/chi/v4", leading to the lengthy discussion at https://github.com/go-chi/chi/issues/462. Haha, to some, you may be scratching your head why I've spent > 1 year stalling to adopt "/vXX" convention in the import @@ -289,13 +310,13 @@ Cheers all, happy coding! ## v2.0.0-rc1 (2016-07-26) -- Huge update! chi v2 is a large refactor targetting Go 1.7+. As of Go 1.7, the popular +- Huge update! chi v2 is a large refactor targeting Go 1.7+. As of Go 1.7, the popular community `"net/context"` package has been included in the standard library as `"context"` and utilized by `"net/http"` and `http.Request` to managing deadlines, cancelation signals and other request-scoped values. We're very excited about the new context addition and are proud to introduce chi v2, a minimal and powerful routing package for building large HTTP services, with zero external dependencies. Chi focuses on idiomatic design and encourages the use of - stdlib HTTP handlers and middlwares. + stdlib HTTP handlers and middlewares. - chi v2 deprecates its `chi.Handler` interface and requires `http.Handler` or `http.HandlerFunc` - chi v2 stores URL routing parameters and patterns in the standard request context: `r.Context()` - chi v2 lower-level routing context is accessible by `chi.RouteContext(r.Context()) *chi.Context`, diff --git a/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md b/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md index c0ac2dfe85..b4a6268d57 100644 --- a/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md +++ b/vendor/github.com/go-chi/chi/v5/CONTRIBUTING.md @@ -14,7 +14,7 @@ A typical workflow is: -1. [Fork the repository.][fork] [This tip maybe also helpful.][go-fork-tip] +1. [Fork the repository.][fork] 2. [Create a topic branch.][branch] 3. Add tests for your change. 4. Run `go test`. If your tests pass, return to the step 3. @@ -24,8 +24,8 @@ A typical workflow is: 8. [Submit a pull request.][pull-req] [go-install]: https://golang.org/doc/install -[go-fork-tip]: http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html -[fork]: https://help.github.com/articles/fork-a-repo -[branch]: http://learn.github.com/p/branching.html -[git-help]: https://guides.github.com -[pull-req]: https://help.github.com/articles/using-pull-requests +[fork]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo +[branch]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches +[git-help]: https://docs.github.com/en +[pull-req]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests + diff --git a/vendor/github.com/go-chi/chi/v5/README.md b/vendor/github.com/go-chi/chi/v5/README.md index 3e4cc4a2e1..c58a0e20ce 100644 --- a/vendor/github.com/go-chi/chi/v5/README.md +++ b/vendor/github.com/go-chi/chi/v5/README.md @@ -1,7 +1,7 @@ # chi -[![GoDoc Widget]][GoDoc] [![Travis Widget]][Travis] +[![GoDoc Widget]][GoDoc] `chi` is a lightweight, idiomatic and composable router for building Go HTTP services. It's especially good at helping you write large REST API services that are kept maintainable as your @@ -20,7 +20,9 @@ and [docgen](https://github.com/go-chi/docgen). We hope you enjoy it too! ## Install -`go get -u github.com/go-chi/chi/v5` +```sh +go get -u github.com/go-chi/chi/v5 +``` ## Features @@ -65,7 +67,7 @@ func main() { **REST Preview:** -Here is a little preview of how routing looks like with chi. Also take a look at the generated routing docs +Here is a little preview of what routing looks like with chi. Also take a look at the generated routing docs in JSON ([routes.json](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.json)) and in Markdown ([routes.md](https://github.com/go-chi/chi/blob/master/_examples/rest/routes.md)). @@ -194,7 +196,7 @@ type Router interface { // path, with a fresh middleware stack for the inline-Router. Group(fn func(r Router)) Router - // Route mounts a sub-Router along a `pattern`` string. + // Route mounts a sub-Router along a `pattern` string. Route(pattern string, fn func(r Router)) Router // Mount attaches another http.Handler along ./pattern/* @@ -354,6 +356,7 @@ with `net/http` can be used with chi's mux. | [RouteHeaders] | Route handling for request headers | | [SetHeader] | Short-hand middleware to set a response header key/value | | [StripSlashes] | Strip slashes on routing paths | +| [Sunset] | Sunset set Deprecation/Sunset header to response | | [Throttle] | Puts a ceiling on the number of concurrent requests | | [Timeout] | Signals to the request context when the timeout deadline is reached | | [URLFormat] | Parse extension from url and put it on request context | @@ -380,6 +383,7 @@ with `net/http` can be used with chi's mux. [RouteHeaders]: https://pkg.go.dev/github.com/go-chi/chi/middleware#RouteHeaders [SetHeader]: https://pkg.go.dev/github.com/go-chi/chi/middleware#SetHeader [StripSlashes]: https://pkg.go.dev/github.com/go-chi/chi/middleware#StripSlashes +[Sunset]: https://pkg.go.dev/github.com/go-chi/chi/v5/middleware#Sunset [Throttle]: https://pkg.go.dev/github.com/go-chi/chi/middleware#Throttle [ThrottleBacklog]: https://pkg.go.dev/github.com/go-chi/chi/middleware#ThrottleBacklog [ThrottleWithOpts]: https://pkg.go.dev/github.com/go-chi/chi/middleware#ThrottleWithOpts @@ -467,7 +471,8 @@ how setting context on a request in Go works. * Carl Jackson for https://github.com/zenazn/goji * Parts of chi's thinking comes from goji, and chi's middleware package - sources from goji. + sources from [goji](https://github.com/zenazn/goji/tree/master/web/middleware). + * Please see goji's [LICENSE](https://github.com/zenazn/goji/blob/master/LICENSE) (MIT) * Armon Dadgar for https://github.com/armon/go-radix * Contributions: [@VojtechVitek](https://github.com/VojtechVitek) @@ -494,7 +499,7 @@ Copyright (c) 2015-present [Peter Kieltyka](https://github.com/pkieltyka) Licensed under [MIT License](./LICENSE) -[GoDoc]: https://pkg.go.dev/github.com/go-chi/chi?tab=versions +[GoDoc]: https://pkg.go.dev/github.com/go-chi/chi/v5 [GoDoc Widget]: https://godoc.org/github.com/go-chi/chi?status.svg [Travis]: https://travis-ci.org/go-chi/chi [Travis Widget]: https://travis-ci.org/go-chi/chi.svg?branch=master diff --git a/vendor/github.com/go-chi/chi/v5/SECURITY.md b/vendor/github.com/go-chi/chi/v5/SECURITY.md new file mode 100644 index 0000000000..7e937f87f3 --- /dev/null +++ b/vendor/github.com/go-chi/chi/v5/SECURITY.md @@ -0,0 +1,5 @@ +# Reporting Security Issues + +We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. + +To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/go-chi/chi/security/advisories/new) tab. diff --git a/vendor/github.com/go-chi/chi/v5/chi.go b/vendor/github.com/go-chi/chi/v5/chi.go index a1691bbeb1..2b6ebd337c 100644 --- a/vendor/github.com/go-chi/chi/v5/chi.go +++ b/vendor/github.com/go-chi/chi/v5/chi.go @@ -37,8 +37,7 @@ // // A placeholder with a name followed by a colon allows a regular // expression match, for example {number:\\d+}. The regular expression -// syntax is Go's normal regexp RE2 syntax, except that regular expressions -// including { or } are not supported, and / will never be +// syntax is Go's normal regexp RE2 syntax, except that / will never be // matched. An anonymous regexp pattern is allowed, using an empty string // before the colon in the placeholder, such as {:\\d+} // @@ -51,7 +50,7 @@ // "/user/{name}" matches "/user/jsmith" but not "/user/jsmith/info" or "/user/jsmith/" // "/user/{name}/info" matches "/user/jsmith/info" // "/page/*" matches "/page/intro/latest" -// "/page/{other}/index" also matches "/page/intro/latest" +// "/page/{other}/latest" also matches "/page/intro/latest" // "/date/{yyyy:\\d\\d\\d\\d}/{mm:\\d\\d}/{dd:\\d\\d}" matches "/date/2017/04/01" package chi @@ -127,6 +126,10 @@ type Routes interface { // the method/path - similar to routing a http request, but without // executing the handler thereafter. Match(rctx *Context, method, path string) bool + + // Find searches the routing tree for the pattern that matches + // the method/path. + Find(rctx *Context, method, path string) string } // Middlewares type is a slice of standard middleware handlers with methods diff --git a/vendor/github.com/go-chi/chi/v5/context.go b/vendor/github.com/go-chi/chi/v5/context.go index e78a2385d8..aacf6eff72 100644 --- a/vendor/github.com/go-chi/chi/v5/context.go +++ b/vendor/github.com/go-chi/chi/v5/context.go @@ -60,7 +60,7 @@ type Context struct { URLParams RouteParams // Route parameters matched for the current sub-router. It is - // intentionally unexported so it cant be tampered. + // intentionally unexported so it can't be tampered. routeParams RouteParams // The endpoint routing pattern that matched the request URI path @@ -74,7 +74,7 @@ type Context struct { // patterns across a stack of sub-routers. RoutePatterns []string - // methodNotAllowed hint + methodsAllowed []methodTyp // allowed methods in case of a 405 methodNotAllowed bool } @@ -91,6 +91,7 @@ func (x *Context) Reset() { x.routeParams.Keys = x.routeParams.Keys[:0] x.routeParams.Values = x.routeParams.Values[:0] x.methodNotAllowed = false + x.methodsAllowed = x.methodsAllowed[:0] x.parentCtx = nil } @@ -108,22 +109,27 @@ func (x *Context) URLParam(key string) string { // RoutePattern builds the routing pattern string for the particular // request, at the particular point during routing. This means, the value // will change throughout the execution of a request in a router. That is -// why its advised to only use this value after calling the next handler. +// why it's advised to only use this value after calling the next handler. // // For example, // -// func Instrument(next http.Handler) http.Handler { -// return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { -// next.ServeHTTP(w, r) -// routePattern := chi.RouteContext(r.Context()).RoutePattern() -// measure(w, r, routePattern) -// }) -// } +// func Instrument(next http.Handler) http.Handler { +// return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +// next.ServeHTTP(w, r) +// routePattern := chi.RouteContext(r.Context()).RoutePattern() +// measure(w, r, routePattern) +// }) +// } func (x *Context) RoutePattern() string { + if x == nil { + return "" + } routePattern := strings.Join(x.RoutePatterns, "") routePattern = replaceWildcards(routePattern) - routePattern = strings.TrimSuffix(routePattern, "//") - routePattern = strings.TrimSuffix(routePattern, "/") + if routePattern != "/" { + routePattern = strings.TrimSuffix(routePattern, "//") + routePattern = strings.TrimSuffix(routePattern, "/") + } return routePattern } diff --git a/vendor/github.com/go-chi/chi/v5/mux.go b/vendor/github.com/go-chi/chi/v5/mux.go index 47e64cf296..f1266971b4 100644 --- a/vendor/github.com/go-chi/chi/v5/mux.go +++ b/vendor/github.com/go-chi/chi/v5/mux.go @@ -107,12 +107,22 @@ func (mx *Mux) Use(middlewares ...func(http.Handler) http.Handler) { // Handle adds the route `pattern` that matches any http method to // execute the `handler` http.Handler. func (mx *Mux) Handle(pattern string, handler http.Handler) { + if method, rest, found := strings.Cut(pattern, " "); found { + mx.Method(method, rest, handler) + return + } + mx.handle(mALL, pattern, handler) } // HandleFunc adds the route `pattern` that matches any http method to // execute the `handlerFn` http.HandlerFunc. func (mx *Mux) HandleFunc(pattern string, handlerFn http.HandlerFunc) { + if method, rest, found := strings.Cut(pattern, " "); found { + mx.Method(method, rest, handlerFn) + return + } + mx.handle(mALL, pattern, handlerFn) } @@ -156,7 +166,7 @@ func (mx *Mux) Head(pattern string, handlerFn http.HandlerFunc) { mx.handle(mHEAD, pattern, handlerFn) } -// Options adds the route `pattern` that matches a OPTIONS http method to +// Options adds the route `pattern` that matches an OPTIONS http method to // execute the `handlerFn` http.HandlerFunc. func (mx *Mux) Options(pattern string, handlerFn http.HandlerFunc) { mx.handle(mOPTIONS, pattern, handlerFn) @@ -250,20 +260,19 @@ func (mx *Mux) With(middlewares ...func(http.Handler) http.Handler) Router { return im } -// Group creates a new inline-Mux with a fresh middleware stack. It's useful +// Group creates a new inline-Mux with a copy of middleware stack. It's useful // for a group of handlers along the same routing path that use an additional // set of middlewares. See _examples/. func (mx *Mux) Group(fn func(r Router)) Router { - im := mx.With().(*Mux) + im := mx.With() if fn != nil { fn(im) } return im } -// Route creates a new Mux with a fresh middleware stack and mounts it -// along the `pattern` as a subrouter. Effectively, this is a short-hand -// call to Mount. See _examples/. +// Route creates a new Mux and mounts it along the `pattern` as a subrouter. +// Effectively, this is a short-hand call to Mount. See _examples/. func (mx *Mux) Route(pattern string, fn func(r Router)) Router { if fn == nil { panic(fmt.Sprintf("chi: attempting to Route() a nil subrouter on '%s'", pattern)) @@ -352,19 +361,40 @@ func (mx *Mux) Middlewares() Middlewares { // Note: the *Context state is updated during execution, so manage // the state carefully or make a NewRouteContext(). func (mx *Mux) Match(rctx *Context, method, path string) bool { + return mx.Find(rctx, method, path) != "" +} + +// Find searches the routing tree for the pattern that matches +// the method/path. +// +// Note: the *Context state is updated during execution, so manage +// the state carefully or make a NewRouteContext(). +func (mx *Mux) Find(rctx *Context, method, path string) string { m, ok := methodMap[method] if !ok { - return false + return "" } - node, _, h := mx.tree.FindRoute(rctx, m, path) + node, _, _ := mx.tree.FindRoute(rctx, m, path) + pattern := rctx.routePattern + + if node != nil { + if node.subroutes == nil { + e := node.endpoints[m] + return e.pattern + } - if node != nil && node.subroutes != nil { rctx.RoutePath = mx.nextRoutePath(rctx) - return node.subroutes.Match(rctx, method, rctx.RoutePath) + subPattern := node.subroutes.Find(rctx, method, rctx.RoutePath) + if subPattern == "" { + return "" + } + + pattern = strings.TrimSuffix(pattern, "/*") + pattern += subPattern } - return h != nil + return pattern } // NotFoundHandler returns the default Mux 404 responder whenever a route @@ -378,11 +408,11 @@ func (mx *Mux) NotFoundHandler() http.HandlerFunc { // MethodNotAllowedHandler returns the default Mux 405 responder whenever // a method cannot be resolved for a route. -func (mx *Mux) MethodNotAllowedHandler() http.HandlerFunc { +func (mx *Mux) MethodNotAllowedHandler(methodsAllowed ...methodTyp) http.HandlerFunc { if mx.methodNotAllowedHandler != nil { return mx.methodNotAllowedHandler } - return methodNotAllowedHandler + return methodNotAllowedHandler(methodsAllowed...) } // handle registers a http.Handler in the routing tree for a particular http method @@ -441,11 +471,15 @@ func (mx *Mux) routeHTTP(w http.ResponseWriter, r *http.Request) { // Find the route if _, _, h := mx.tree.FindRoute(rctx, method, routePath); h != nil { + if supportsPathValue { + setPathValue(rctx, r) + } + h.ServeHTTP(w, r) return } if rctx.methodNotAllowed { - mx.MethodNotAllowedHandler().ServeHTTP(w, r) + mx.MethodNotAllowedHandler(rctx.methodsAllowed...).ServeHTTP(w, r) } else { mx.NotFoundHandler().ServeHTTP(w, r) } @@ -480,8 +514,14 @@ func (mx *Mux) updateRouteHandler() { } // methodNotAllowedHandler is a helper function to respond with a 405, -// method not allowed. -func methodNotAllowedHandler(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(405) - w.Write(nil) +// method not allowed. It sets the Allow header with the list of allowed +// methods for the route. +func methodNotAllowedHandler(methodsAllowed ...methodTyp) func(w http.ResponseWriter, r *http.Request) { + return func(w http.ResponseWriter, r *http.Request) { + for _, m := range methodsAllowed { + w.Header().Add("Allow", reverseMethodMap[m]) + } + w.WriteHeader(405) + w.Write(nil) + } } diff --git a/vendor/github.com/go-chi/chi/v5/path_value.go b/vendor/github.com/go-chi/chi/v5/path_value.go new file mode 100644 index 0000000000..77c840f019 --- /dev/null +++ b/vendor/github.com/go-chi/chi/v5/path_value.go @@ -0,0 +1,21 @@ +//go:build go1.22 && !tinygo +// +build go1.22,!tinygo + + +package chi + +import "net/http" + +// supportsPathValue is true if the Go version is 1.22 and above. +// +// If this is true, `net/http.Request` has methods `SetPathValue` and `PathValue`. +const supportsPathValue = true + +// setPathValue sets the path values in the Request value +// based on the provided request context. +func setPathValue(rctx *Context, r *http.Request) { + for i, key := range rctx.URLParams.Keys { + value := rctx.URLParams.Values[i] + r.SetPathValue(key, value) + } +} diff --git a/vendor/github.com/go-chi/chi/v5/path_value_fallback.go b/vendor/github.com/go-chi/chi/v5/path_value_fallback.go new file mode 100644 index 0000000000..749a8520a7 --- /dev/null +++ b/vendor/github.com/go-chi/chi/v5/path_value_fallback.go @@ -0,0 +1,19 @@ +//go:build !go1.22 || tinygo +// +build !go1.22 tinygo + +package chi + +import "net/http" + +// supportsPathValue is true if the Go version is 1.22 and above. +// +// If this is true, `net/http.Request` has methods `SetPathValue` and `PathValue`. +const supportsPathValue = false + +// setPathValue sets the path values in the Request value +// based on the provided request context. +// +// setPathValue is only supported in Go 1.22 and above so +// this is just a blank function so that it compiles. +func setPathValue(rctx *Context, r *http.Request) { +} diff --git a/vendor/github.com/go-chi/chi/v5/tree.go b/vendor/github.com/go-chi/chi/v5/tree.go index 4189b5228b..85fcfdbb8d 100644 --- a/vendor/github.com/go-chi/chi/v5/tree.go +++ b/vendor/github.com/go-chi/chi/v5/tree.go @@ -43,6 +43,18 @@ var methodMap = map[string]methodTyp{ http.MethodTrace: mTRACE, } +var reverseMethodMap = map[methodTyp]string{ + mCONNECT: http.MethodConnect, + mDELETE: http.MethodDelete, + mGET: http.MethodGet, + mHEAD: http.MethodHead, + mOPTIONS: http.MethodOptions, + mPATCH: http.MethodPatch, + mPOST: http.MethodPost, + mPUT: http.MethodPut, + mTRACE: http.MethodTrace, +} + // RegisterMethod adds support for custom HTTP method handlers, available // via Router#Method and Router#MethodFunc func RegisterMethod(method string) { @@ -454,6 +466,13 @@ func (n *node) findRoute(rctx *Context, method methodTyp, path string) *node { return xn } + for endpoints := range xn.endpoints { + if endpoints == mALL || endpoints == mSTUB { + continue + } + rctx.methodsAllowed = append(rctx.methodsAllowed, endpoints) + } + // flag that the routing context found a route, but not a corresponding // supported method rctx.methodNotAllowed = true @@ -493,6 +512,13 @@ func (n *node) findRoute(rctx *Context, method methodTyp, path string) *node { return xn } + for endpoints := range xn.endpoints { + if endpoints == mALL || endpoints == mSTUB { + continue + } + rctx.methodsAllowed = append(rctx.methodsAllowed, endpoints) + } + // flag that the routing context found a route, but not a corresponding // supported method rctx.methodNotAllowed = true @@ -704,11 +730,9 @@ func patNextSegment(pattern string) (nodeTyp, string, string, byte, int, int) { tail = pattern[pe] } - var rexpat string - if idx := strings.Index(key, ":"); idx >= 0 { + key, rexpat, isRegexp := strings.Cut(key, ":") + if isRegexp { nt = ntRegexp - rexpat = key[idx+1:] - key = key[:idx] } if len(rexpat) > 0 { diff --git a/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go b/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go index 536f2e1c08..4bc3a45dee 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go +++ b/vendor/k8s.io/apiserver/pkg/storage/etcd3/watcher.go @@ -438,7 +438,12 @@ func (wc *watchChan) serialProcessEvents(wg *sync.WaitGroup) { for { select { case e := <-wc.incomingEventChan: - res := wc.transform(e) + res, err := wc.transform(e) + if err != nil { + wc.sendError(err) + return + } + if res == nil { continue } @@ -461,10 +466,8 @@ func (wc *watchChan) serialProcessEvents(wg *sync.WaitGroup) { func (wc *watchChan) concurrentProcessEvents(wg *sync.WaitGroup) { p := concurrentOrderedEventProcessing{ - input: wc.incomingEventChan, - processFunc: wc.transform, - output: wc.resultChan, - processingQueue: make(chan chan *watch.Event, processEventConcurrency-1), + wc: wc, + processingQueue: make(chan chan *processingResult, processEventConcurrency-1), objectType: wc.watcher.objectType, groupResource: wc.watcher.groupResource, @@ -481,12 +484,15 @@ func (wc *watchChan) concurrentProcessEvents(wg *sync.WaitGroup) { }() } +type processingResult struct { + event *watch.Event + err error +} + type concurrentOrderedEventProcessing struct { - input chan *event - processFunc func(*event) *watch.Event - output chan watch.Event + wc *watchChan - processingQueue chan chan *watch.Event + processingQueue chan chan *processingResult // Metadata for logging objectType string groupResource schema.GroupResource @@ -498,28 +504,29 @@ func (p *concurrentOrderedEventProcessing) scheduleEventProcessing(ctx context.C select { case <-ctx.Done(): return - case e = <-p.input: + case e = <-p.wc.incomingEventChan: } - processingResponse := make(chan *watch.Event, 1) + processingResponse := make(chan *processingResult, 1) select { case <-ctx.Done(): return case p.processingQueue <- processingResponse: } wg.Add(1) - go func(e *event, response chan<- *watch.Event) { + go func(e *event, response chan<- *processingResult) { defer wg.Done() + responseEvent, err := p.wc.transform(e) select { case <-ctx.Done(): - case response <- p.processFunc(e): + case response <- &processingResult{event: responseEvent, err: err}: } }(e, processingResponse) } } func (p *concurrentOrderedEventProcessing) collectEventProcessing(ctx context.Context) { - var processingResponse chan *watch.Event - var e *watch.Event + var processingResponse chan *processingResult + var r *processingResult for { select { case <-ctx.Done(): @@ -529,21 +536,25 @@ func (p *concurrentOrderedEventProcessing) collectEventProcessing(ctx context.Co select { case <-ctx.Done(): return - case e = <-processingResponse: + case r = <-processingResponse: } - if e == nil { + if r.err != nil { + p.wc.sendError(r.err) + return + } + if r.event == nil { continue } - if len(p.output) == cap(p.output) { - klog.V(3).InfoS("Fast watcher, slow processing. Probably caused by slow dispatching events to watchers", "outgoingEvents", outgoingBufSize, "objectType", p.objectType, "groupResource", p.groupResource) + if len(p.wc.resultChan) == cap(p.wc.resultChan) { + klog.V(3).InfoS("Fast watcher, slow processing. Probably caused by slow dispatching events to watchers", "outgoingEvents", outgoingBufSize, "objectType", p.wc.watcher.objectType, "groupResource", p.wc.watcher.groupResource) } // If user couldn't receive results fast enough, we also block incoming events from watcher. // Because storing events in local will cause more memory usage. // The worst case would be closing the fast watcher. select { - case <-ctx.Done(): + case p.wc.resultChan <- *r.event: + case <-p.wc.ctx.Done(): return - case p.output <- *e: } } } @@ -561,12 +572,11 @@ func (wc *watchChan) acceptAll() bool { } // transform transforms an event into a result for user if not filtered. -func (wc *watchChan) transform(e *event) (res *watch.Event) { +func (wc *watchChan) transform(e *event) (res *watch.Event, err error) { curObj, oldObj, err := wc.prepareObjs(e) if err != nil { klog.Errorf("failed to prepare current and previous objects: %v", err) - wc.sendError(err) - return nil + return nil, err } switch { @@ -574,12 +584,11 @@ func (wc *watchChan) transform(e *event) (res *watch.Event) { object := wc.watcher.newFunc() if err := wc.watcher.versioner.UpdateObject(object, uint64(e.rev)); err != nil { klog.Errorf("failed to propagate object version: %v", err) - return nil + return nil, fmt.Errorf("failed to propagate object resource version: %w", err) } if e.isInitialEventsEndBookmark { if err := storage.AnnotateInitialEventsEndBookmark(object); err != nil { - wc.sendError(fmt.Errorf("error while accessing object's metadata gr: %v, type: %v, obj: %#v, err: %v", wc.watcher.groupResource, wc.watcher.objectType, object, err)) - return nil + return nil, fmt.Errorf("error while accessing object's metadata gr: %v, type: %v, obj: %#v, err: %w", wc.watcher.groupResource, wc.watcher.objectType, object, err) } } res = &watch.Event{ @@ -588,7 +597,7 @@ func (wc *watchChan) transform(e *event) (res *watch.Event) { } case e.isDeleted: if !wc.filter(oldObj) { - return nil + return nil, nil } res = &watch.Event{ Type: watch.Deleted, @@ -596,7 +605,7 @@ func (wc *watchChan) transform(e *event) (res *watch.Event) { } case e.isCreated: if !wc.filter(curObj) { - return nil + return nil, nil } res = &watch.Event{ Type: watch.Added, @@ -608,7 +617,7 @@ func (wc *watchChan) transform(e *event) (res *watch.Event) { Type: watch.Modified, Object: curObj, } - return res + return res, nil } curObjPasses := wc.filter(curObj) oldObjPasses := wc.filter(oldObj) @@ -630,7 +639,7 @@ func (wc *watchChan) transform(e *event) (res *watch.Event) { } } } - return res + return res, nil } func transformErrorToEvent(err error) *watch.Event { diff --git a/vendor/k8s.io/component-base/metrics/prometheus/slis/routes.go b/vendor/k8s.io/component-base/metrics/prometheus/slis/routes.go index 4e88b7c24a..a88607fa50 100644 --- a/vendor/k8s.io/component-base/metrics/prometheus/slis/routes.go +++ b/vendor/k8s.io/component-base/metrics/prometheus/slis/routes.go @@ -38,8 +38,8 @@ type SLIMetrics struct{} func (s SLIMetrics) Install(m mux) { installOnce.Do(func() { Register(Registry) - m.Handle("/metrics/slis", metrics.HandlerFor(Registry, metrics.HandlerOpts{})) }) + m.Handle("/metrics/slis", metrics.HandlerFor(Registry, metrics.HandlerOpts{})) } type SLIMetricsWithReset struct{} @@ -48,6 +48,6 @@ type SLIMetricsWithReset struct{} func (s SLIMetricsWithReset) Install(m mux) { installWithResetOnce.Do(func() { Register(Registry) - m.Handle("/metrics/slis", metrics.HandlerWithReset(Registry, metrics.HandlerOpts{})) }) + m.Handle("/metrics/slis", metrics.HandlerWithReset(Registry, metrics.HandlerOpts{})) } diff --git a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go index 1156442802..66adabcd8b 100644 --- a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go +++ b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -546,6 +546,12 @@ const ( // Permits kubelet to run with swap enabled. NodeSwap featuregate.Feature = "NodeSwap" + // owner: @cici37 + // kep: https://kep.k8s.io/5080 + // + // Enables ordered namespace deletion. + OrderedNamespaceDeletion featuregate.Feature = "OrderedNamespaceDeletion" + // owner: @mortent, @atiratree, @ravig // kep: http://kep.k8s.io/3018 // alpha: v1.26 @@ -1137,6 +1143,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS NodeSwap: {Default: true, PreRelease: featuregate.Beta}, + OrderedNamespaceDeletion: {Default: false, PreRelease: featuregate.Beta}, + PDBUnhealthyPodEvictionPolicy: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.33 PersistentVolumeLastPhaseTransitionTime: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.33 diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/resize_util.go b/vendor/k8s.io/kubernetes/pkg/volume/util/resize_util.go index 2bf54b4b85..599f220976 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/resize_util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/resize_util.go @@ -236,6 +236,27 @@ func MarkFSResizeFinished( return updatedPVC, err } +func MarkNodeExpansionFinishedWithRecovery( + pvc *v1.PersistentVolumeClaim, + newSize resource.Quantity, + kubeClient clientset.Interface) (*v1.PersistentVolumeClaim, error) { + newPVC := pvc.DeepCopy() + + newPVC.Status.Capacity[v1.ResourceStorage] = newSize + + allocatedResourceStatusMap := newPVC.Status.AllocatedResourceStatuses + delete(allocatedResourceStatusMap, v1.ResourceStorage) + if len(allocatedResourceStatusMap) == 0 { + newPVC.Status.AllocatedResourceStatuses = nil + } else { + newPVC.Status.AllocatedResourceStatuses = allocatedResourceStatusMap + } + + newPVC = MergeResizeConditionOnPVC(newPVC, []v1.PersistentVolumeClaimCondition{}, false /* keepOldResizeConditions */) + updatedPVC, err := PatchPVCStatus(pvc /*oldPVC*/, newPVC, kubeClient) + return updatedPVC, err +} + // MarkNodeExpansionInfeasible marks a PVC for node expansion as failed. Kubelet should not retry expansion // of volumes which are in failed state. func MarkNodeExpansionInfeasible(pvc *v1.PersistentVolumeClaim, kubeClient clientset.Interface, err error) (*v1.PersistentVolumeClaim, error) { diff --git a/vendor/k8s.io/kubernetes/test/e2e/feature/feature.go b/vendor/k8s.io/kubernetes/test/e2e/feature/feature.go index a3aaf16509..24c6a93b26 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/feature/feature.go +++ b/vendor/k8s.io/kubernetes/test/e2e/feature/feature.go @@ -251,6 +251,10 @@ var ( // TODO: document the feature (owning SIG, when to use this feature for a test) NodeOutOfServiceVolumeDetach = framework.WithFeature(framework.ValidFeatures.Add("NodeOutOfServiceVolumeDetach")) + // Owner: sig-api-machinery + // Marks tests that enforce ordered namespace deletion. + OrderedNamespaceDeletion = framework.WithFeature(framework.ValidFeatures.Add("OrderedNamespaceDeletion")) + // Owner: sig-network // Marks a single test that tests cluster DNS performance with many services. PerformanceDNS = framework.WithFeature(framework.ValidFeatures.Add("PerformanceDNS")) diff --git a/vendor/k8s.io/kubernetes/test/utils/image/manifest.go b/vendor/k8s.io/kubernetes/test/utils/image/manifest.go index bfed292325..eafaa37c2b 100644 --- a/vendor/k8s.io/kubernetes/test/utils/image/manifest.go +++ b/vendor/k8s.io/kubernetes/test/utils/image/manifest.go @@ -229,7 +229,7 @@ func initImageConfigs(list RegistryList) (map[ImageID]Config, map[ImageID]Config configs[BusyBox] = Config{list.PromoterE2eRegistry, "busybox", "1.36.1-1"} configs[CudaVectorAdd] = Config{list.PromoterE2eRegistry, "cuda-vector-add", "1.0"} configs[CudaVectorAdd2] = Config{list.PromoterE2eRegistry, "cuda-vector-add", "2.3"} - configs[DistrolessIptables] = Config{list.BuildImageRegistry, "distroless-iptables", "v0.5.13"} + configs[DistrolessIptables] = Config{list.BuildImageRegistry, "distroless-iptables", "v0.6.11"} configs[Etcd] = Config{list.GcEtcdRegistry, "etcd", "3.5.15-0"} configs[Httpd] = Config{list.PromoterE2eRegistry, "httpd", "2.4.38-4"} configs[HttpdNew] = Config{list.PromoterE2eRegistry, "httpd", "2.4.39-4"} diff --git a/vendor/modules.txt b/vendor/modules.txt index ec4852134b..07d6578d17 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -56,8 +56,8 @@ github.com/fsnotify/fsnotify # github.com/fxamacker/cbor/v2 v2.7.0 ## explicit; go 1.17 github.com/fxamacker/cbor/v2 -# github.com/go-chi/chi/v5 v5.0.8 -## explicit; go 1.14 +# github.com/go-chi/chi/v5 v5.2.2 +## explicit; go 1.20 github.com/go-chi/chi/v5 # github.com/go-logr/logr v1.4.2 ## explicit; go 1.18 @@ -774,7 +774,7 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# k8s.io/api v0.31.6 +# k8s.io/api v0.31.11 ## explicit; go 1.22.0 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 @@ -834,12 +834,12 @@ k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 k8s.io/api/storagemigration/v1alpha1 -# k8s.io/apiextensions-apiserver v0.31.6 +# k8s.io/apiextensions-apiserver v0.31.11 ## explicit; go 1.22.0 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/features -# k8s.io/apimachinery v0.31.6 +# k8s.io/apimachinery v0.31.11 ## explicit; go 1.22.0 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors @@ -906,7 +906,7 @@ k8s.io/apimachinery/pkg/watch k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect -# k8s.io/apiserver v0.31.6 +# k8s.io/apiserver v0.31.11 ## explicit; go 1.22.0 k8s.io/apiserver/pkg/admission k8s.io/apiserver/pkg/admission/configuration @@ -1057,7 +1057,7 @@ k8s.io/apiserver/plugin/pkg/audit/webhook k8s.io/apiserver/plugin/pkg/authenticator/token/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook k8s.io/apiserver/plugin/pkg/authorizer/webhook/metrics -# k8s.io/client-go v0.31.6 +# k8s.io/client-go v0.31.11 ## explicit; go 1.22.0 k8s.io/client-go/applyconfigurations k8s.io/client-go/applyconfigurations/admissionregistration/v1 @@ -1404,7 +1404,7 @@ k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/watchlist k8s.io/client-go/util/workqueue -# k8s.io/cloud-provider v0.31.6 +# k8s.io/cloud-provider v0.31.11 ## explicit; go 1.22.0 k8s.io/cloud-provider k8s.io/cloud-provider/api @@ -1425,7 +1425,7 @@ k8s.io/cloud-provider/names k8s.io/cloud-provider/node/helpers k8s.io/cloud-provider/options k8s.io/cloud-provider/service/helpers -# k8s.io/component-base v0.31.6 +# k8s.io/component-base v0.31.11 ## explicit; go 1.22.0 k8s.io/component-base/cli k8s.io/component-base/cli/flag @@ -1456,14 +1456,14 @@ k8s.io/component-base/tracing k8s.io/component-base/tracing/api/v1 k8s.io/component-base/version k8s.io/component-base/version/verflag -# k8s.io/component-helpers v0.31.6 +# k8s.io/component-helpers v0.31.11 ## explicit; go 1.22.0 k8s.io/component-helpers/node/util k8s.io/component-helpers/node/util/sysctl k8s.io/component-helpers/scheduling/corev1 k8s.io/component-helpers/scheduling/corev1/nodeaffinity k8s.io/component-helpers/storage/ephemeral -# k8s.io/controller-manager v0.31.6 +# k8s.io/controller-manager v0.31.11 ## explicit; go 1.22.0 k8s.io/controller-manager/app k8s.io/controller-manager/config @@ -1480,7 +1480,7 @@ k8s.io/controller-manager/pkg/informerfactory k8s.io/controller-manager/pkg/leadermigration k8s.io/controller-manager/pkg/leadermigration/config k8s.io/controller-manager/pkg/leadermigration/options -# k8s.io/csi-translation-lib v0.31.6 +# k8s.io/csi-translation-lib v0.31.11 ## explicit; go 1.22.0 k8s.io/csi-translation-lib k8s.io/csi-translation-lib/plugins @@ -1495,7 +1495,7 @@ k8s.io/klog/v2/internal/severity k8s.io/klog/v2/internal/sloghandler k8s.io/klog/v2/internal/verbosity k8s.io/klog/v2/textlogger -# k8s.io/kms v0.31.6 +# k8s.io/kms v0.31.11 ## explicit; go 1.22.0 k8s.io/kms/apis/v1beta1 k8s.io/kms/apis/v2 @@ -1522,14 +1522,14 @@ k8s.io/kube-openapi/pkg/validation/errors k8s.io/kube-openapi/pkg/validation/spec k8s.io/kube-openapi/pkg/validation/strfmt k8s.io/kube-openapi/pkg/validation/strfmt/bson -# k8s.io/kubectl v0.31.6 +# k8s.io/kubectl v0.31.11 ## explicit; go 1.22.0 k8s.io/kubectl/pkg/scale k8s.io/kubectl/pkg/util/podutils -# k8s.io/kubelet v0.31.6 +# k8s.io/kubelet v0.31.11 ## explicit; go 1.22.0 k8s.io/kubelet/pkg/apis -# k8s.io/kubernetes v1.31.6 +# k8s.io/kubernetes v1.31.11 ## explicit; go 1.22.0 k8s.io/kubernetes/pkg/api/legacyscheme k8s.io/kubernetes/pkg/api/service @@ -1598,10 +1598,10 @@ k8s.io/kubernetes/test/utils k8s.io/kubernetes/test/utils/format k8s.io/kubernetes/test/utils/image k8s.io/kubernetes/test/utils/kubeconfig -# k8s.io/mount-utils v0.31.6 +# k8s.io/mount-utils v0.31.11 ## explicit; go 1.22.0 k8s.io/mount-utils -# k8s.io/pod-security-admission v0.31.6 +# k8s.io/pod-security-admission v0.31.11 ## explicit; go 1.22.0 k8s.io/pod-security-admission/api k8s.io/pod-security-admission/policy @@ -1651,12 +1651,14 @@ sigs.k8s.io/yaml/goyaml.v2 ## explicit; go 1.19 software.sslmate.com/src/go-pkcs12 software.sslmate.com/src/go-pkcs12/internal/rc2 -# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.6 -# k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.6 -# k8s.io/endpointslice => k8s.io/endpointslice v0.31.6 -# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.6 -# k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.6 -# k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.6 -# k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.31.6 -# k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.31.6 -# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.31.6 +# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.11 +# k8s.io/cri-client => k8s.io/cri-client v0.31.11 +# k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.11 +# k8s.io/endpointslice => k8s.io/endpointslice v0.31.11 +# k8s.io/externaljwt => k8s.io/externaljwt v0.31.11 +# k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.11 +# k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.11 +# k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.11 +# k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.31.11 +# k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.31.11 +# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.31.11