diff --git a/.travis.yml b/.travis.yml
index 0e4b9b70..6a54de90 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,6 @@
language: go
go:
- - 1.24.2
+ - 1.24.5
group: bluezone
dist: focal
diff --git a/OPENSOURCE b/OPENSOURCE
index 30b9bfde..8b137891 100644
--- a/OPENSOURCE
+++ b/OPENSOURCE
@@ -1,81 +1 @@
-github.com/BurntSushi/toml,v1.4.0,direct
-github.com/IBM/go-sdk-core/v5,v5.20.1,direct
-github.com/IBM/ibm-cos-sdk-go,v1.12.2,direct
-github.com/IBM/ibm-cos-sdk-go-config/v2,v2.3.0,direct
-github.com/gofrs/uuid,v4.4.0+incompatible,direct
-github.com/golang/protobuf,v1.5.4,direct
-github.com/jessevdk/go-flags,v1.6.1,direct
-github.com/stretchr/testify,v1.10.0,direct
-go.uber.org/zap,v1.27.0,direct
-google.golang.org/grpc,v1.69.4,direct
-google.golang.org/protobuf,v1.36.3,direct
-gopkg.in/natefinch/lumberjack.v2,v2.2.1,direct
-k8s.io/api,v0.32.1,direct
-k8s.io/apimachinery,v0.32.1,direct
-k8s.io/client-go,v0.32.1,direct
-sigs.k8s.io/sig-storage-lib-external-provisioner/v6,v6.3.0,direct
-github.com/asaskevich/govalidator,v0.0.0-20230301143203-a9d515a09cc2,indirect
-github.com/beorn7/perks,v1.0.1,indirect
-github.com/cespare/xxhash/v2,v2.3.0,indirect
-github.com/davecgh/go-spew,v1.1.2-0.20180830191138-d8f796af33cc,indirect
-github.com/emicklei/go-restful/v3,v3.12.1,indirect
-github.com/fxamacker/cbor/v2,v2.7.0,indirect
-github.com/gabriel-vasile/mimetype,v1.4.8,indirect
-github.com/go-logr/logr,v1.4.2,indirect
-github.com/go-openapi/errors,v0.22.0,indirect
-github.com/go-openapi/jsonpointer,v0.21.0,indirect
-github.com/go-openapi/jsonreference,v0.21.0,indirect
-github.com/go-openapi/strfmt,v0.23.0,indirect
-github.com/go-openapi/swag,v0.23.0,indirect
-github.com/go-playground/locales,v0.14.1,indirect
-github.com/go-playground/universal-translator,v0.18.1,indirect
-github.com/go-playground/validator/v10,v10.26.0,indirect
-github.com/gogo/protobuf,v1.3.2,indirect
-github.com/google/gnostic-models,v0.6.9,indirect
-github.com/google/go-cmp,v0.7.0,indirect
-github.com/google/gofuzz,v1.2.0,indirect
-github.com/google/uuid,v1.6.0,indirect
-github.com/hashicorp/go-cleanhttp,v0.5.2,indirect
-github.com/hashicorp/go-retryablehttp,v0.7.7,indirect
-github.com/jmespath/go-jmespath,v0.4.0,indirect
-github.com/josharian/intern,v1.0.0,indirect
-github.com/json-iterator/go,v1.1.12,indirect
-github.com/klauspost/compress,v1.17.11,indirect
-github.com/leodido/go-urn,v1.4.0,indirect
-github.com/mailru/easyjson,v0.9.0,indirect
-github.com/miekg/dns,v1.1.62,indirect
-github.com/mitchellh/mapstructure,v1.5.0,indirect
-github.com/modern-go/concurrent,v0.0.0-20180306012644-bacd9c7ef1dd,indirect
-github.com/modern-go/reflect2,v1.0.2,indirect
-github.com/munnerz/goautoneg,v0.0.0-20191010083416-a7dc8b61c822,indirect
-github.com/oklog/ulid,v1.3.1,indirect
-github.com/pkg/errors,v0.9.1,indirect
-github.com/pmezard/go-difflib,v1.0.1-0.20181226105442-5d4384ee4fb2,indirect
-github.com/prometheus/client_golang,v1.20.5,indirect
-github.com/prometheus/client_model,v0.6.1,indirect
-github.com/prometheus/common,v0.62.0,indirect
-github.com/prometheus/procfs,v0.15.1,indirect
-github.com/spf13/pflag,v1.0.5,indirect
-github.com/x448/float16,v0.8.4,indirect
-go.mongodb.org/mongo-driver,v1.17.2,indirect
-go.uber.org/multierr,v1.11.0,indirect
-golang.org/x/crypto,v0.38.0,indirect
-golang.org/x/mod,v0.22.0,indirect
-golang.org/x/net,v0.38.0,indirect
-golang.org/x/oauth2,v0.25.0,indirect
-golang.org/x/sync,v0.14.0,indirect
-golang.org/x/sys,v0.33.0,indirect
-golang.org/x/term,v0.32.0,indirect
-golang.org/x/text,v0.25.0,indirect
-golang.org/x/time,v0.9.0,indirect
-golang.org/x/tools,v0.29.0,indirect
-google.golang.org/genproto/googleapis/rpc,v0.0.0-20250115164207-1a7da9e5054f,indirect
-gopkg.in/evanphx/json-patch.v4,v4.12.0,indirect
-gopkg.in/inf.v0,v0.9.1,indirect
-gopkg.in/yaml.v3,v3.0.1,indirect
-k8s.io/klog/v2,v2.130.1,indirect
-k8s.io/kube-openapi,v0.0.0-20241212222426-2c72e554b1e7,indirect
-k8s.io/utils,v0.0.0-20241210054802-24370beab758,indirect
-sigs.k8s.io/json,v0.0.0-20241014173422-cfa47c3a1cc8,indirect
-sigs.k8s.io/structured-merge-diff/v4,v4.5.0,indirect
-sigs.k8s.io/yaml,v1.4.0,indirect
+
diff --git a/README.md b/README.md
index be9dcb2f..731868a7 100644
--- a/README.md
+++ b/README.md
@@ -8,8 +8,8 @@ Before installing IBM Cloud Object Storage plug-in in a Kubernetes cluster, ensu
2. [S3FS-FUSE](https://github.com/s3fs-fuse/s3fs-fuse#installation) should be installed on every worker node in the cluster.
## Build the `provisioner` image and `driver` binary
-For building the **provisioner** image and the **driver** binary, `docker`, `GO` and `glide` should be installed on your local system.
-1. On your local machine, install [`docker`](https://docs.docker.com/install/), [`Go`](https://golang.org/doc/install), and [`glide`](https://glide.sh/).
+For building the **provisioner** image and the **driver** binary, `docker`and `GO` should be installed on your local system.
+1. On your local machine, install [`docker`](https://docs.docker.com/install/), [`Go`](https://golang.org/doc/install).
2. Set the [`GOPATH` environment variable](https://github.com/golang/go/wiki/SettingGOPATH).
3. Build the provisioner container image and the driver binary
clone the repo or your forked repo
@@ -22,7 +22,7 @@ For building the **provisioner** image and the **driver** binary, `docker`, `GO`
```
build project and runs testcases
```
- $ make
+ $ make all
```
build container image for the provisioner
```
@@ -48,7 +48,7 @@ Push the provisioner container image from the build system to your image reposit
$ sudo systemctl restart kubelet
```
3. Create the provisioner.
- Before executing following command update `image` details as per your repository in `deploy/provisioner.yaml`. Currently, it is `image: ibmcloud-object-storage-plugin:latest`, which expects image to be in public docker hub
+ Before executing following command update `image` details as per your repository in `deploy/provisioner.yaml`.
```
$ kubectl create -f deploy/provisioner-sa.yaml
$ kubectl create -f deploy/provisioner.yaml
@@ -88,7 +88,7 @@ data:
access-key:
secret-key:
api-key:
- service-instance-id:
+ service-instance-id:
EOF
```
**Note**: Replace **** with your namespace (for example: default).
diff --git a/cmd/driver/main.go b/cmd/driver/main.go
index 842d124d..835a3e89 100644
--- a/cmd/driver/main.go
+++ b/cmd/driver/main.go
@@ -2,7 +2,7 @@
* IBM Confidential
* OCO Source Materials
* IBM Cloud Kubernetes Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2023 All Rights Reserved.
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
@@ -21,7 +21,7 @@ import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
- "io/ioutil"
+ "io"
"log"
"os"
"strings"
@@ -60,7 +60,9 @@ func NewS3fsPlugin(logger *zap.Logger) *driver.S3fsPlugin {
type versionCommand struct{}
func (v *versionCommand) Execute(args []string) error {
- fmt.Fprintf(stdout, "Version:%s, Build:%s\n", Version, Build)
+ if _, err := fmt.Fprintf(stdout, "Version:%s, Build:%s\n", Version, Build); err != nil {
+ return err
+ }
return nil
}
@@ -108,7 +110,7 @@ func (m *mountCommand) Execute(args []string) error {
filelogger.Info(":MountCommand start:" + hostname)
mountOpts := make(map[string]string)
- mountOptsLogs := make(map[string]string) // nolint:ineffassign
+ //mountOptsLogs := make(map[string]string) // nolint:ineffassign
switch len(args) {
case 2:
@@ -208,7 +210,7 @@ func main() {
// disable the console logging (if anywhere else being done by softlayer or any other pkg)
// presently softlayer logs few warning message, which makes the flexdriver unmarshall failure
log.SetFlags(0)
- log.SetOutput(ioutil.Discard)
+ log.SetOutput(io.Discard)
// Divert all loggers outputs and fmt.printf loggings (this will create issues with flex response)
NullDevice, _ := os.Open(os.DevNull)
@@ -294,7 +296,9 @@ func printResponse(f interfaces.FlexVolumeResponse) error {
filelogger.Info(":FlexVolumeResponse", zap.String("output", output))
// write it to stdout, so that flexdriver will read it
- fmt.Fprintf(stdout, "%s", output)
+ if _, err := fmt.Fprintf(stdout, "%s", output); err != nil {
+ return err
+ }
return nil
}
diff --git a/driver/driver.go b/driver/driver.go
index 20620b0b..f9bf9c41 100644
--- a/driver/driver.go
+++ b/driver/driver.go
@@ -2,7 +2,7 @@
* IBM Confidential
* OCO Source Materials
* IBM Cloud Kubernetes Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2023 All Rights Reserved.
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
@@ -14,7 +14,6 @@ import (
"crypto/sha256"
"errors"
"fmt"
- "io/ioutil"
"os"
"os/exec"
"path"
@@ -55,7 +54,7 @@ var (
stat = os.Stat
unmount = syscall.Unmount
mount = syscall.Mount
- writeFile = ioutil.WriteFile
+ writeFile = os.WriteFile
mkdirAll = os.MkdirAll
removeAll = os.RemoveAll
//hostname, anyerror = os.Hostname()
@@ -103,7 +102,7 @@ type Options struct {
// PathExists returns true if the specified path exists.
func pathExists(path string) (bool, error) {
if path == "" {
- return false, errors.New("Undefined path")
+ return false, errors.New("undefined path")
}
_, err := os.Stat(path)
if err == nil {
@@ -177,7 +176,7 @@ func (p *S3fsPlugin) isMountpoint(pathname string) (bool, error) {
zap.String("Pathname", pathname))
return false, nil
} else {
- p.Logger.Error(podUID+":"+"Cannot parse mountpoint result",
+ p.Logger.Error(podUID+":"+"cannot parse mountpoint result",
zap.String("Error", outStr))
return false, fmt.Errorf("cannot parse mountpoint result: %s", outStr)
}
@@ -195,7 +194,7 @@ func (p *S3fsPlugin) unmountPath(mountPath string, delete bool) error {
zap.String("Mount path", mountPath))
return nil
} else {
- p.Logger.Error(podUID+":"+"Cannot stat directory",
+ p.Logger.Error(podUID+":"+"cannot stat directory",
zap.String("Mount path", mountPath), zap.Error(err))
return fmt.Errorf("cannot stat directory %s: %v", mountPath, err)
}
@@ -208,12 +207,12 @@ func (p *S3fsPlugin) unmountPath(mountPath string, delete bool) error {
zap.String("Mount path", mountPath))
err = unmount(mountPath, syscall.MNT_DETACH)
if err != nil && checkMountErr == nil {
- p.Logger.Error(podUID+":"+"Cannot unmount. Trying force unmount",
+ p.Logger.Error(podUID+":"+"cannot unmount. Trying force unmount",
zap.String("Mount path", mountPath), zap.Error(err))
//Do force unmount
err = unmount(mountPath, syscall.MNT_FORCE)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot force unmount",
+ p.Logger.Error(podUID+":"+"cannot force unmount",
zap.String("Mount path", mountPath), zap.Error(err))
return fmt.Errorf("cannot force unmount %s: %v", mountPath, err)
}
@@ -225,7 +224,7 @@ func (p *S3fsPlugin) unmountPath(mountPath string, delete bool) error {
zap.String("Mount path", mountPath))
err = removeAll(mountPath)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot remove",
+ p.Logger.Error(podUID+":"+"cannot remove",
zap.String("Mount path", mountPath), zap.Error(err))
return fmt.Errorf("cannot remove %s: %v", mountPath, err)
}
@@ -249,7 +248,7 @@ func (p *S3fsPlugin) createEmptyMountpoint(mountPath string) error {
zap.String("mountPath", mountPath))
err = mkdirAll(mountPath, 0755)
if err != nil {
- p.Logger.Error(podUID+":Cannot create directory",
+ p.Logger.Error(podUID+":cannot create directory",
zap.String("mountPath", mountPath), zap.Error(err))
return fmt.Errorf("cannot create directory %s: %v", mountPath, err)
}
@@ -259,7 +258,7 @@ func (p *S3fsPlugin) createEmptyMountpoint(mountPath string) error {
zap.String("mountPath", mountPath))
err = mount("tmpfs", mountPath, "tmpfs", 0, "size=4k")
if err != nil {
- p.Logger.Error(podUID+":Cannot create tmpfs mountpoint",
+ p.Logger.Error(podUID+":cannot create tmpfs mountpoint",
zap.String("mountPath", mountPath), zap.Error(err))
return fmt.Errorf("cannot create tmpfs mountpoint %s: %v", mountPath, err)
}
@@ -307,12 +306,12 @@ func (p *S3fsPlugin) createDirectoryIfNotExists(path string) error {
zap.String("path", path))
err = mkdirAll(path, 0755)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot create directory",
+ p.Logger.Error(podUID+":"+"cannot create directory",
zap.Error(err))
return fmt.Errorf("cannot create directory: %v", err)
}
} else {
- p.Logger.Error(podUID+":"+"Cannot stat directory",
+ p.Logger.Error(podUID+":"+"cannot stat directory",
zap.Error(err))
return fmt.Errorf("cannot stat directory: %v", err)
}
@@ -330,7 +329,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
err := parser.UnmarshalMap(&mountRequest.Opts, &options)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot unmarshal driver options",
+ p.Logger.Error(podUID+":"+"cannot unmarshal driver options",
zap.Error(err))
return fmt.Errorf("cannot unmarshal driver options: %v", err)
}
@@ -350,14 +349,14 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
regionValue = "dummy-object-store-storageclass"
}
- if !(strings.HasPrefix(endptValue, "https://") || strings.HasPrefix(endptValue, "http://")) {
+ if !strings.HasPrefix(endptValue, "https://") && !strings.HasPrefix(endptValue, "http://") {
p.Logger.Error(podUID+":"+
- "Bad value for object-store-endpoint: scheme is missing."+
- " Must be of the form http:// or https://",
+ "bad value for object-store-endpoint: scheme is missing."+
+ " must be of the form http:// or https://",
zap.String("object-store-endpoint", endptValue))
return fmt.Errorf(podUID+":"+
- "Bad value for object-store-endpoint \"%v\": scheme is missing."+
- " Must be of the form http:// or https://",
+ "bad value for object-store-endpoint \"%v\": scheme is missing."+
+ " must be of the form http:// or https://",
endptValue)
}
@@ -366,9 +365,9 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
retryCount, err := strconv.Atoi(options.S3FSFUSERetryCount)
if err != nil {
p.Logger.Error(podUID+":"+
- "Cannot convert value of s3fs-fuse-retry-count into integer",
+ "cannot convert value of s3fs-fuse-retry-count into integer",
zap.Error(err))
- return fmt.Errorf("Cannot convert value of s3fs-fuse-retry-count into integer: %v", err)
+ return fmt.Errorf("cannot convert value of s3fs-fuse-retry-count into integer: %v", err)
}
if retryCount < 1 {
p.Logger.Error(podUID+":"+
@@ -383,9 +382,9 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
cacheExpireSeconds, err := strconv.Atoi(options.StatCacheExpireSeconds)
if err != nil {
p.Logger.Error(podUID+":"+
- " Cannot convert value of stat-cache-expire-seconds into integer",
+ " cannot convert value of stat-cache-expire-seconds into integer",
zap.Error(err))
- return fmt.Errorf("Cannot convert value of stat-cache-expire-seconds into integer: %v", err)
+ return fmt.Errorf("cannot convert value of stat-cache-expire-seconds into integer: %v", err)
} else if cacheExpireSeconds < 0 {
p.Logger.Error(podUID+":"+
" value of stat-cache-expire-seconds should be >= 0",
@@ -399,9 +398,9 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
_, err := strconv.Atoi(options.ConnectTimeoutSeconds)
if err != nil {
p.Logger.Error(podUID+":"+
- "Cannot convert value of connect-timeout-seconds into integer",
+ "cannot convert value of connect-timeout-seconds into integer",
zap.Error(err))
- return fmt.Errorf("Cannot convert value of connect-timeout-seconds into integer: %v", err)
+ return fmt.Errorf("cannot convert value of connect-timeout-seconds into integer: %v", err)
}
}
@@ -410,9 +409,9 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
_, err := strconv.Atoi(options.ReadwriteTimeoutSeconds)
if err != nil {
p.Logger.Error(podUID+":"+
- "Cannot convert value of readwrite-timeout-seconds into integer",
+ "cannot convert value of readwrite-timeout-seconds into integer",
zap.Error(err))
- return fmt.Errorf("Cannot convert value of readwrite-timeout-seconds into integer: %v", err)
+ return fmt.Errorf("cannot convert value of readwrite-timeout-seconds into integer: %v", err)
}
}
@@ -420,14 +419,14 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
apiKey, err = parser.DecodeBase64(options.APIKeyB64)
if err != nil {
p.Logger.Error(podUID+":"+
- " Cannot decode API key",
+ " cannot decode API key",
zap.Error(err))
return fmt.Errorf("cannot decode API key: %v", err)
}
serviceInstanceId, err = parser.DecodeBase64(options.ServiceInstanceIDB64)
if err != nil {
p.Logger.Error(podUID+":"+
- " Cannot decode Service Instance ID",
+ " cannot decode Service Instance ID",
zap.Error(err))
return fmt.Errorf("cannot decode Service Instance ID: %v", err)
}
@@ -435,7 +434,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
accessKey, err = parser.DecodeBase64(options.AccessKeyB64)
if err != nil {
p.Logger.Error(podUID+":"+
- " Cannot decode access key",
+ " cannot decode access key",
zap.Error(err))
return fmt.Errorf("cannot decode access key: %v", err)
}
@@ -443,7 +442,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
secretKey, err = parser.DecodeBase64(options.SecretKeyB64)
if err != nil {
p.Logger.Error(podUID+":"+
- " Cannot decode secret key",
+ " cannot decode secret key",
zap.Error(err))
return fmt.Errorf("cannot decode secret key: %v", err)
}
@@ -453,14 +452,14 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
if options.IAMEndpoint == "" {
iamEndpoint = defaultIAMEndPoint
} else {
- if !(strings.HasPrefix(options.IAMEndpoint, "https://") || strings.HasPrefix(options.IAMEndpoint, "http://")) {
+ if !strings.HasPrefix(options.IAMEndpoint, "https://") && !strings.HasPrefix(options.IAMEndpoint, "http://") {
p.Logger.Error(podUID+":"+
- " Bad value for iam-endpoint."+
- " Must be of the form https:// or http://",
+ " bad value for iam-endpoint."+
+ " must be of the form https:// or http://",
zap.String("iam-endpoint", options.IAMEndpoint))
return fmt.Errorf(podUID+":"+
- " Bad value for iam-endpoint \"%v\":"+
- " Must be of the form https:// or http://",
+ " bad value for iam-endpoint \"%v\":"+
+ " must be of the form https:// or http://",
options.IAMEndpoint)
} else {
iamEndpoint = options.IAMEndpoint
@@ -470,7 +469,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
if options.CAbundleB64 != "" {
CaBundleKey, err := parser.DecodeBase64(options.CAbundleB64)
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot decode CA bundle",
+ p.Logger.Error(podUID+":"+" cannot decode CA bundle",
zap.Error(err))
return fmt.Errorf("cannot decode CA bundle: %v", err)
}
@@ -485,22 +484,22 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
p.Logger.Info(podUID+": CA CERT", zap.String("CA bundle file", caFile))
err = writeFile(caFile, []byte(CaBundleKey), 0600)
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot create ca crt file",
+ p.Logger.Error(podUID+":"+" cannot create ca crt file",
zap.Error(err))
return fmt.Errorf("cannot create ca crt file: %v", err)
}
err = os.Setenv("CURL_CA_BUNDLE", caFile)
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot set CURL_CA_BUNDLE env var",
+ p.Logger.Error(podUID+":"+" cannot set CURL_CA_BUNDLE env var",
zap.Error(err))
- return fmt.Errorf("Cannot set CURL_CA_BUNDLE env var: %v", err)
+ return fmt.Errorf("cannot set CURL_CA_BUNDLE env var: %v", err)
}
err = os.Setenv("AWS_CA_BUNDLE", caFile)
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot set AWS_CA_BUNDLE env var",
+ p.Logger.Error(podUID+":"+" cannot set AWS_CA_BUNDLE env var",
zap.Error(err))
- return fmt.Errorf("Cannot set AWS_CA_BUNDLE env var: %v", err)
+ return fmt.Errorf("cannot set AWS_CA_BUNDLE env var: %v", err)
}
}
// check that bucket exists before doing the mount
@@ -512,7 +511,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
ServiceInstanceID: serviceInstanceId,
IAMEndpoint: iamEndpoint})
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot access bucket",
+ p.Logger.Error(podUID+":"+" cannot access bucket",
zap.Error(err))
return fmt.Errorf("cannot access bucket: %v", err)
}
@@ -527,7 +526,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
ServiceInstanceID: serviceInstanceId,
IAMEndpoint: iamEndpoint})
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot access object-path inside bucket",
+ p.Logger.Error(podUID+":"+" cannot access object-path inside bucket",
zap.String("bucket", options.Bucket), zap.String("object-path", options.ObjectPath), zap.Error(err))
return fmt.Errorf("cannot access object-path \"%s\" inside bucket %s: %v", options.ObjectPath, options.Bucket, err)
} else if !exist {
@@ -540,7 +539,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
// create target directory
err = p.createDirectoryIfNotExists(mountRequest.MountDir)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot create target directory",
+ p.Logger.Error(podUID+":"+"cannot create target directory",
zap.Error(err))
return fmt.Errorf("cannot create target directory: %v", err)
}
@@ -550,7 +549,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
done := false
err = p.createEmptyMountpoint(mountPath)
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot create mount point",
+ p.Logger.Error(podUID+":"+" cannot create mount point",
zap.Error(err))
return fmt.Errorf("cannot create mount point: %v", err)
}
@@ -574,7 +573,7 @@ func (p *S3fsPlugin) mountInternal(mountRequest interfaces.FlexVolumeMountReques
err = writeFile(passwordFile, []byte(accessKey+":"+secretKey), 0600)
}
if err != nil {
- p.Logger.Error(podUID+":"+" Cannot create password file",
+ p.Logger.Error(podUID+":"+" cannot create password file",
zap.Error(err))
return fmt.Errorf("cannot create password file: %v", err)
}
@@ -763,7 +762,7 @@ func (p *S3fsPlugin) Unmount(unmountRequest interfaces.FlexVolumeUnmountRequest)
func (p *S3fsPlugin) unmountInternal(unmountRequest interfaces.FlexVolumeUnmountRequest) error {
err := p.unmountPath(unmountRequest.MountDir, false)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot unmount s3fs mount point",
+ p.Logger.Error(podUID+":"+"cannot unmount s3fs mount point",
zap.String("Request", unmountRequest.MountDir),
zap.Error(err))
return fmt.Errorf("cannot unmount s3fs mount point %s: %v", unmountRequest.MountDir, err)
@@ -772,7 +771,7 @@ func (p *S3fsPlugin) unmountInternal(unmountRequest interfaces.FlexVolumeUnmount
mountPath := path.Join(dataRootPath, fmt.Sprintf("%x", sha256.Sum256([]byte(unmountRequest.MountDir))))
err = p.unmountPath(mountPath, true)
if err != nil {
- p.Logger.Error(podUID+":"+"Cannot delete data mount point",
+ p.Logger.Error(podUID+":"+"cannot delete data mount point",
zap.String("mountpath", mountPath), zap.Error(err))
return fmt.Errorf("cannot delete data mount point %s: %v", mountPath, err)
}
diff --git a/driver/driver_test.go b/driver/driver_test.go
index 991f615f..8be24a0c 100644
--- a/driver/driver_test.go
+++ b/driver/driver_test.go
@@ -1,9 +1,9 @@
/*******************************************************************************
* IBM Confidential
* OCO Source Materials
- * IBM Cloud Container Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2018 All Rights Reserved.
- * The source code for this program is not published or otherwise divested of
+ * IBM Cloud Kubernetes Service, 5737-D43
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
+ * The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
******************************************************************************/
@@ -20,7 +20,7 @@ import (
"github.com/IBM/ibmcloud-object-storage-plugin/utils/parser"
"github.com/stretchr/testify/assert"
"go.uber.org/zap"
- "io/ioutil"
+ "io"
"os"
"os/exec"
"path"
@@ -116,7 +116,7 @@ func getPlugin() *S3fsPlugin {
ret := exec.Command(os.Args[0], cs...)
ret.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
if commandFailure {
- ret.Stdout = ioutil.Discard
+ ret.Stdout = io.Discard
}
return ret
}
@@ -213,8 +213,8 @@ func Test_Mount_BadOSEndpoint(t *testing.T) {
resp := p.Mount(r)
if assert.Equal(t, interfaces.StatusFailure, resp.Status) {
- assert.Contains(t, resp.Message, fmt.Sprintf("Bad value for object-store-endpoint \"%s\": scheme is missing. "+
- "Must be of the form http:// or https://", r.Opts[optionOSEndpoint]))
+ assert.Contains(t, resp.Message, fmt.Sprintf("bad value for object-store-endpoint \"%s\": scheme is missing. "+
+ "must be of the form http:// or https://", r.Opts[optionOSEndpoint]))
}
}
@@ -226,8 +226,8 @@ func Test_Mount_BadIAMEndpoint(t *testing.T) {
resp := p.Mount(r)
if assert.Equal(t, interfaces.StatusFailure, resp.Status) {
- assert.Contains(t, resp.Message, fmt.Sprintf("Bad value for iam-endpoint \"%s\":"+
- " Must be of the form https:// or http://", r.Opts[optionIAMEndpoint]))
+ assert.Contains(t, resp.Message, fmt.Sprintf("bad value for iam-endpoint \"%s\":"+
+ " must be of the form https:// or http://", r.Opts[optionIAMEndpoint]))
}
}
@@ -238,7 +238,7 @@ func Test_Mount_BadS3FSFUSERetryCount(t *testing.T) {
resp := p.Mount(r)
if assert.Equal(t, interfaces.StatusFailure, resp.Status) {
- assert.Contains(t, resp.Message, "Cannot convert value of s3fs-fuse-retry-count into integer")
+ assert.Contains(t, resp.Message, "cannot convert value of s3fs-fuse-retry-count into integer")
}
}
@@ -260,7 +260,7 @@ func Test_Mount_BadStatCacheExpireSeconds_NonInt(t *testing.T) {
resp := p.Mount(r)
if assert.Equal(t, interfaces.StatusFailure, resp.Status) {
- assert.Contains(t, resp.Message, "Cannot convert value of stat-cache-expire-seconds into integer")
+ assert.Contains(t, resp.Message, "cannot convert value of stat-cache-expire-seconds into integer")
}
}
@@ -936,7 +936,7 @@ func Test_ConnectTimeoutSeconds_NonInt(t *testing.T) {
resp := p.Mount(r)
if assert.Equal(t, interfaces.StatusFailure, resp.Status) {
- assert.Contains(t, resp.Message, "Cannot convert value of connect-timeout-seconds into integer")
+ assert.Contains(t, resp.Message, "cannot convert value of connect-timeout-seconds into integer")
}
}
@@ -979,7 +979,7 @@ func Test_ReadwriteTimeoutSeconds_NonInt(t *testing.T) {
resp := p.Mount(r)
if assert.Equal(t, interfaces.StatusFailure, resp.Status) {
- assert.Contains(t, resp.Message, "Cannot convert value of readwrite-timeout-seconds into integer")
+ assert.Contains(t, resp.Message, "cannot convert value of readwrite-timeout-seconds into integer")
}
}
diff --git a/go.mod b/go.mod
index 5591c419..de60e9d1 100644
--- a/go.mod
+++ b/go.mod
@@ -1,23 +1,23 @@
module github.com/IBM/ibmcloud-object-storage-plugin
-go 1.23.7
+go 1.24.5
require (
- github.com/BurntSushi/toml v1.4.0
+ github.com/BurntSushi/toml v1.5.0
github.com/IBM/go-sdk-core/v5 v5.21.0
github.com/IBM/ibm-cos-sdk-go v1.12.3
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0
github.com/gofrs/uuid v4.4.0+incompatible
github.com/golang/protobuf v1.5.4
github.com/jessevdk/go-flags v1.6.1
- github.com/stretchr/testify v1.10.0
+ github.com/stretchr/testify v1.11.1
go.uber.org/zap v1.27.0
- google.golang.org/grpc v1.69.4
- google.golang.org/protobuf v1.36.3
+ google.golang.org/grpc v1.75.0
+ google.golang.org/protobuf v1.36.9
gopkg.in/natefinch/lumberjack.v2 v2.2.1
- k8s.io/api v0.32.1
- k8s.io/apimachinery v0.32.1
- k8s.io/client-go v0.32.1
+ k8s.io/api v0.34.0
+ k8s.io/apimachinery v0.34.0
+ k8s.io/client-go v0.34.0
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
)
@@ -26,67 +26,80 @@ require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/emicklei/go-restful/v3 v3.12.1 // indirect
- github.com/fxamacker/cbor/v2 v2.7.0 // indirect
+ github.com/emicklei/go-restful/v3 v3.13.0 // indirect
+ github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
- github.com/go-logr/logr v1.4.2 // indirect
+ github.com/go-logr/logr v1.4.3 // indirect
github.com/go-openapi/errors v0.22.0 // indirect
- github.com/go-openapi/jsonpointer v0.21.0 // indirect
- github.com/go-openapi/jsonreference v0.21.0 // indirect
+ github.com/go-openapi/jsonpointer v0.22.0 // indirect
+ github.com/go-openapi/jsonreference v0.21.1 // indirect
github.com/go-openapi/strfmt v0.23.0 // indirect
- github.com/go-openapi/swag v0.23.0 // indirect
+ github.com/go-openapi/swag v0.24.1 // indirect
+ github.com/go-openapi/swag/cmdutils v0.24.0 // indirect
+ github.com/go-openapi/swag/conv v0.24.0 // indirect
+ github.com/go-openapi/swag/fileutils v0.24.0 // indirect
+ github.com/go-openapi/swag/jsonname v0.24.0 // indirect
+ github.com/go-openapi/swag/jsonutils v0.24.0 // indirect
+ github.com/go-openapi/swag/loading v0.24.0 // indirect
+ github.com/go-openapi/swag/mangling v0.24.0 // indirect
+ github.com/go-openapi/swag/netutils v0.24.0 // indirect
+ github.com/go-openapi/swag/stringutils v0.24.0 // indirect
+ github.com/go-openapi/swag/typeutils v0.24.0 // indirect
+ github.com/go-openapi/swag/yamlutils v0.24.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.26.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/google/gnostic-models v0.6.9 // indirect
+ github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-cmp v0.7.0 // indirect
- github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.6.0 // indirect
+ github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.11 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
- github.com/miekg/dns v1.1.62 // indirect
+ github.com/miekg/dns v1.1.68 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/oklog/ulid v1.3.1 // indirect
- github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/prometheus/client_golang v1.20.5 // indirect
- github.com/prometheus/client_model v0.6.1 // indirect
- github.com/prometheus/common v0.62.0 // indirect
- github.com/prometheus/procfs v0.15.1 // indirect
- github.com/spf13/pflag v1.0.5 // indirect
+ github.com/prometheus/client_golang v1.23.0 // indirect
+ github.com/prometheus/client_model v0.6.2 // indirect
+ github.com/prometheus/common v0.66.0 // indirect
+ github.com/prometheus/procfs v0.17.0 // indirect
+ github.com/spf13/pflag v1.0.6 // indirect
github.com/x448/float16 v0.8.4 // indirect
go.mongodb.org/mongo-driver v1.17.2 // indirect
go.uber.org/multierr v1.11.0 // indirect
+ go.yaml.in/yaml/v2 v2.4.2 // indirect
+ go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.41.0 // indirect
- golang.org/x/mod v0.26.0 // indirect
+ golang.org/x/mod v0.27.0 // indirect
golang.org/x/net v0.43.0 // indirect
- golang.org/x/oauth2 v0.25.0 // indirect
+ golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/term v0.34.0 // indirect
golang.org/x/text v0.28.0 // indirect
- golang.org/x/time v0.9.0 // indirect
- golang.org/x/tools v0.35.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
- gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
+ golang.org/x/time v0.12.0 // indirect
+ golang.org/x/tools v0.36.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 // indirect
+ gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
- k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect
- k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect
- sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.5.0 // indirect
- sigs.k8s.io/yaml v1.4.0 // indirect
+ k8s.io/kube-openapi v0.0.0-20250902184714-7fc278399c7f // indirect
+ k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d // indirect
+ sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
+ sigs.k8s.io/randfill v1.0.0 // indirect
+ sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
+ sigs.k8s.io/yaml v1.6.0 // indirect
)
replace (
diff --git a/go.sum b/go.sum
index deb0e0bc..a6e9057b 100644
--- a/go.sum
+++ b/go.sum
@@ -23,15 +23,11 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
-github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
+github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
+github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/IBM/go-sdk-core/v5 v5.20.1 h1:dzeyifh1kfRLw8VfAIIS5okZYuqLTqplPZP/Kcsgdlo=
-github.com/IBM/go-sdk-core/v5 v5.20.1/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw=
github.com/IBM/go-sdk-core/v5 v5.21.0 h1:DUnYhvC4SoC8T84rx5omnhY3+xcQg/Whyoa3mDPIMkk=
github.com/IBM/go-sdk-core/v5 v5.21.0/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw=
-github.com/IBM/ibm-cos-sdk-go v1.12.2 h1:71A4tDl8u6BZ548h71ecEe7fw5bBA7ECTVqYmeSQWQA=
-github.com/IBM/ibm-cos-sdk-go v1.12.2/go.mod h1:ODYcmrmdpjo5hVguq9RbD6xmC8xb1XZMG7NefUbJNcc=
github.com/IBM/ibm-cos-sdk-go v1.12.3 h1:kMIs1nfPY0UXAMcW6bq8O9WOd6KgqiDBnIMd0e/fMqA=
github.com/IBM/ibm-cos-sdk-go v1.12.3/go.mod h1:dt13UIqJRgfGIlSNlnf17JmAXlBXhfTgXLKV3as8ABk=
github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 h1:956Nqk0eKI3lq+AkzWXZDid4UZHRz0wWh1LwkleBsWk=
@@ -65,8 +61,8 @@ github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZ
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
-github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=
+github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
@@ -76,8 +72,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
+github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
+github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -88,24 +84,46 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
+github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w=
github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE=
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
+github.com/go-openapi/jsonpointer v0.22.0 h1:TmMhghgNef9YXxTu1tOopo+0BGEytxA+okbry0HjZsM=
+github.com/go-openapi/jsonpointer v0.22.0/go.mod h1:xt3jV88UtExdIkkL7NloURjRQjbeUgcxFblMjq2iaiU=
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
-github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
-github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
+github.com/go-openapi/jsonreference v0.21.1 h1:bSKrcl8819zKiOgxkbVNRUBIr6Wwj9KYrDbMjRs0cDA=
+github.com/go-openapi/jsonreference v0.21.1/go.mod h1:PWs8rO4xxTUqKGu+lEvvCxD5k2X7QYkKAepJyCmSTT8=
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c=
github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4=
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
+github.com/go-openapi/swag v0.24.1 h1:DPdYTZKo6AQCRqzwr/kGkxJzHhpKxZ9i/oX0zag+MF8=
+github.com/go-openapi/swag v0.24.1/go.mod h1:sm8I3lCPlspsBBwUm1t5oZeWZS0s7m/A+Psg0ooRU0A=
+github.com/go-openapi/swag/cmdutils v0.24.0 h1:KlRCffHwXFI6E5MV9n8o8zBRElpY4uK4yWyAMWETo9I=
+github.com/go-openapi/swag/cmdutils v0.24.0/go.mod h1:uxib2FAeQMByyHomTlsP8h1TtPd54Msu2ZDU/H5Vuf8=
+github.com/go-openapi/swag/conv v0.24.0 h1:ejB9+7yogkWly6pnruRX45D1/6J+ZxRu92YFivx54ik=
+github.com/go-openapi/swag/conv v0.24.0/go.mod h1:jbn140mZd7EW2g8a8Y5bwm8/Wy1slLySQQ0ND6DPc2c=
+github.com/go-openapi/swag/fileutils v0.24.0 h1:U9pCpqp4RUytnD689Ek/N1d2N/a//XCeqoH508H5oak=
+github.com/go-openapi/swag/fileutils v0.24.0/go.mod h1:3SCrCSBHyP1/N+3oErQ1gP+OX1GV2QYFSnrTbzwli90=
+github.com/go-openapi/swag/jsonname v0.24.0 h1:2wKS9bgRV/xB8c62Qg16w4AUiIrqqiniJFtZGi3dg5k=
+github.com/go-openapi/swag/jsonname v0.24.0/go.mod h1:GXqrPzGJe611P7LG4QB9JKPtUZ7flE4DOVechNaDd7Q=
+github.com/go-openapi/swag/jsonutils v0.24.0 h1:F1vE1q4pg1xtO3HTyJYRmEuJ4jmIp2iZ30bzW5XgZts=
+github.com/go-openapi/swag/jsonutils v0.24.0/go.mod h1:vBowZtF5Z4DDApIoxcIVfR8v0l9oq5PpYRUuteVu6f0=
+github.com/go-openapi/swag/loading v0.24.0 h1:ln/fWTwJp2Zkj5DdaX4JPiddFC5CHQpvaBKycOlceYc=
+github.com/go-openapi/swag/loading v0.24.0/go.mod h1:gShCN4woKZYIxPxbfbyHgjXAhO61m88tmjy0lp/LkJk=
+github.com/go-openapi/swag/mangling v0.24.0 h1:PGOQpViCOUroIeak/Uj/sjGAq9LADS3mOyjznmHy2pk=
+github.com/go-openapi/swag/mangling v0.24.0/go.mod h1:Jm5Go9LHkycsz0wfoaBDkdc4CkpuSnIEf62brzyCbhc=
+github.com/go-openapi/swag/netutils v0.24.0 h1:Bz02HRjYv8046Ycg/w80q3g9QCWeIqTvlyOjQPDjD8w=
+github.com/go-openapi/swag/netutils v0.24.0/go.mod h1:WRgiHcYTnx+IqfMCtu0hy9oOaPR0HnPbmArSRN1SkZM=
+github.com/go-openapi/swag/stringutils v0.24.0 h1:i4Z/Jawf9EvXOLUbT97O0HbPUja18VdBxeadyAqS1FM=
+github.com/go-openapi/swag/stringutils v0.24.0/go.mod h1:5nUXB4xA0kw2df5PRipZDslPJgJut+NjL7D25zPZ/4w=
+github.com/go-openapi/swag/typeutils v0.24.0 h1:d3szEGzGDf4L2y1gYOSSLeK6h46F+zibnEas2Jm/wIw=
+github.com/go-openapi/swag/typeutils v0.24.0/go.mod h1:q8C3Kmk/vh2VhpCLaoR2MVWOGP8y7Jc8l82qCTd1DYI=
+github.com/go-openapi/swag/yamlutils v0.24.0 h1:bhw4894A7Iw6ne+639hsBNRHg9iZg/ISrOVr+sJGp4c=
+github.com/go-openapi/swag/yamlutils v0.24.0/go.mod h1:DpKv5aYuaGm/sULePoeiG8uwMpZSfReo1HR3Ik0yaG8=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -145,19 +163,16 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
-github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
+github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
+github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -171,6 +186,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248=
+github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
@@ -202,8 +219,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
-github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
+github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
+github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -227,8 +244,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.1.29/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
-github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
-github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
+github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA=
+github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -236,8 +253,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
+github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -264,7 +282,6 @@ github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
@@ -272,39 +289,42 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
-github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
-github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
+github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc=
+github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
-github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
+github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
-github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
-github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
+github.com/prometheus/common v0.66.0 h1:K/rJPHrG3+AoQs50r2+0t7zMnMzek2Vbv31OFVsMeVY=
+github.com/prometheus/common v0.66.0/go.mod h1:Ux6NtV1B4LatamKE63tJBntoxD++xmtI/lK0VtEplN4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
-github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
-github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0=
+github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
+github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
+github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -314,22 +334,28 @@ go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAc
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
-go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
-go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
-go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
-go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
-go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
-go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
-go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
-go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
-go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
+go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
+go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
+go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
+go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
+go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
+go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
+go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
+go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
+go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
+go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
+go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
+go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -337,8 +363,6 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
-golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -362,10 +386,8 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
-golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
-golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
-golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
+golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
+golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -385,8 +407,6 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
-golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -394,8 +414,8 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
-golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
+golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -403,8 +423,6 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
-golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -428,27 +446,21 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
-golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
-golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
-golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
+golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -472,14 +484,14 @@ golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
-golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
-golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
-golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
+golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
+golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -500,16 +512,16 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 h1:pmJpJEvT846VzausCQ5d7KreSROcDqmO388w5YbnltA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
-google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
+google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
+google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -519,8 +531,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
-google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
+google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -528,8 +540,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
+gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo=
+gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
@@ -552,14 +564,14 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/api v0.19.1/go.mod h1:+u/k4/K/7vp4vsfdT7dyl8Oxk1F26Md4g5F26Tu85PU=
-k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc=
-k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k=
+k8s.io/api v0.34.0 h1:L+JtP2wDbEYPUeNGbeSa/5GwFtIA662EmT2YSLOkAVE=
+k8s.io/api v0.34.0/go.mod h1:YzgkIzOOlhl9uwWCZNqpw6RJy9L2FK4dlJeayUoydug=
k8s.io/apimachinery v0.19.1/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
-k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs=
-k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
+k8s.io/apimachinery v0.34.0 h1:eR1WO5fo0HyoQZt1wdISpFDffnWOvFLOOeJ7MgIv4z0=
+k8s.io/apimachinery v0.34.0/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
k8s.io/client-go v0.19.1/go.mod h1:AZOIVSI9UUtQPeJD3zJFp15CEhSjRgAuQP5PWRJrCIQ=
-k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU=
-k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg=
+k8s.io/client-go v0.34.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo=
+k8s.io/client-go v0.34.0/go.mod h1:ozgMnEKXkRjeMvBZdV1AijMHLTh3pbACPvK7zFR+QQY=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
@@ -567,20 +579,22 @@ k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
-k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg=
-k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas=
+k8s.io/kube-openapi v0.0.0-20250902184714-7fc278399c7f h1:wyRlmLgBSXi3kgawro8klrMRljXeRo1HFkQRs+meYfs=
+k8s.io/kube-openapi v0.0.0-20250902184714-7fc278399c7f/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
-k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0=
+k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
-sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
+sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
+sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 h1:IKsKAnscMyIOqyl8s8V7guTcx0QBEa6OT57EPgAgpmM=
sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0/go.mod h1:DhZ52sQMJHW21+JXyA2LRUPRIxKnrNrwh+QFV+2tVA4=
sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk=
-sigs.k8s.io/structured-merge-diff/v4 v4.5.0/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
+sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
+sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
+sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
diff --git a/images/driver/Dockerfile.builder b/images/driver/Dockerfile.builder
index d74ef097..b812d768 100644
--- a/images/driver/Dockerfile.builder
+++ b/images/driver/Dockerfile.builder
@@ -1,4 +1,4 @@
-FROM golang:1.23.7
+FROM golang:1.24.5
# Default values
ARG git_commit_id=unknown
diff --git a/images/provisioner/Dockerfile.builder b/images/provisioner/Dockerfile.builder
index 2a790d18..19d77ab8 100644
--- a/images/provisioner/Dockerfile.builder
+++ b/images/provisioner/Dockerfile.builder
@@ -1,4 +1,4 @@
-FROM golang:1.23.7
+FROM golang:1.24.5
ADD . /go/src/github.com/IBM/ibmcloud-object-storage-plugin
RUN set -ex; cd /go/src/github.com/IBM/ibmcloud-object-storage-plugin/ && CGO_ENABLED=0 go install -mod=mod -v github.com/IBM/ibmcloud-object-storage-plugin/cmd/provisioner
RUN set -ex; tar cvC / ./etc/ssl | gzip -n > /root/ca-certs.tar.gz
diff --git a/provisioner/ibm-s3fs-provisioner.go b/provisioner/ibm-s3fs-provisioner.go
index b5219e33..e6cc642a 100644
--- a/provisioner/ibm-s3fs-provisioner.go
+++ b/provisioner/ibm-s3fs-provisioner.go
@@ -2,7 +2,7 @@
* IBM Confidential
* OCO Source Materials
* IBM Cloud Kubernetes Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2023 All Rights Reserved.
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
@@ -14,7 +14,6 @@ import (
"context"
"errors"
"fmt"
- "io/ioutil"
"net"
"os"
"path"
@@ -31,6 +30,7 @@ import (
"github.com/IBM/ibmcloud-object-storage-plugin/utils/uuid"
"go.uber.org/zap"
"google.golang.org/grpc"
+ "google.golang.org/grpc/credentials/insecure"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
@@ -136,7 +136,7 @@ type IBMS3fsProvisioner struct {
}
var _ controller.Provisioner = &IBMS3fsProvisioner{}
-var writeFile = ioutil.WriteFile
+var writeFile = os.WriteFile
func UnixConnect(addr string, t time.Duration) (net.Conn, error) {
unix_addr, _ := net.ResolveUnixAddr("unix", addr)
@@ -182,7 +182,7 @@ func (p *IBMS3fsProvisioner) getCredentials(ctx context.Context, secretName, sec
}
if strings.TrimSpace(string(secrets.Type)) != driverName {
- return nil, nil, "", "", fmt.Errorf("Wrong Secret Type.Provided secret of type %s.Expected type %s", string(secrets.Type), driverName)
+ return nil, nil, "", "", fmt.Errorf("wrong secret type. provided secret of type %s. expected type %s", string(secrets.Type), driverName)
}
var accessKey, secretKey, apiKey, serviceInstanceID string
@@ -204,6 +204,9 @@ func (p *IBMS3fsProvisioner) getCredentials(ctx context.Context, secretName, sec
}
} else {
serviceInstanceID, err = parseSecret(secrets, driver.SecretServiceInstanceID)
+ if err != nil {
+ return nil, nil, "", "", err
+ }
}
if bytesVal, ok := secrets.Data[ResConfApiKey]; ok {
@@ -251,7 +254,7 @@ func (p *IBMS3fsProvisioner) validateAnnotations(ctx context.Context, options co
contextLogger.Info(pvcName + ":" + clusterID + " AllowCrossNsSecret: " + strconv.FormatBool(*AllowCrossNsSecret))
- if AllowCrossNsSecret != nil && *AllowCrossNsSecret == false {
+ if AllowCrossNsSecret != nil && !*AllowCrossNsSecret {
contextLogger.Info(pvcName + ":" + clusterID + " AllowCrossNsSecret is set to false, the secret will be looked for in same namespace where pvc is created")
if pvc.SecretNamespace != "" {
contextLogger.Warn(pvcName + ":" + clusterID + " Ignoring 'ibm.io/secret-namespace' annotation as AllowCrossNsSecret is set to false")
@@ -356,7 +359,7 @@ func (p *IBMS3fsProvisioner) validateAnnotations(ctx context.Context, options co
sc.OSStorageClass = pvc.Region
}
- if !(strings.HasPrefix(sc.OSEndpoint, "https://") || strings.HasPrefix(sc.OSEndpoint, "http://")) {
+ if !strings.HasPrefix(sc.OSEndpoint, "https://") && !strings.HasPrefix(sc.OSEndpoint, "http://") {
return pvc, sc, svcIp, fmt.Errorf(pvcName+":"+clusterID+
":Bad value for ibm.io/object-store-endpoint \"%v\": scheme is missing. "+
"Must be of the form http:// or https://",
@@ -367,7 +370,7 @@ func (p *IBMS3fsProvisioner) validateAnnotations(ctx context.Context, options co
sc.IAMEndpoint = pvc.IAMEndpoint
}
- if !(strings.HasPrefix(sc.IAMEndpoint, "https://") || strings.HasPrefix(sc.IAMEndpoint, "http://")) {
+ if !strings.HasPrefix(sc.IAMEndpoint, "https://") && !strings.HasPrefix(sc.IAMEndpoint, "http://") {
return pvc, sc, svcIp, fmt.Errorf(pvcName+":"+clusterID+
":Bad value for ibm.io/iam-endpoint \"%v\":"+
" Must be of the form https:// or http://",
@@ -382,7 +385,7 @@ func (p *IBMS3fsProvisioner) validateAnnotations(ctx context.Context, options co
if retryCount, err := strconv.Atoi(sc.S3FSFUSERetryCount); err != nil {
return pvc, sc, svcIp, fmt.Errorf(pvcName+":"+clusterID+":Cannot convert value of s3fs-fuse-retry-count into integer: %v", err)
} else if retryCount < 1 {
- return pvc, sc, svcIp, fmt.Errorf(pvcName + ":" + clusterID + ":value of s3fs-fuse-retry-count should be >= 1")
+ return pvc, sc, svcIp, errors.New(pvcName + ":" + clusterID + ":value of s3fs-fuse-retry-count should be >= 1")
}
}
@@ -394,7 +397,7 @@ func (p *IBMS3fsProvisioner) validateAnnotations(ctx context.Context, options co
if cacheExpireSeconds, err := strconv.Atoi(sc.StatCacheExpireSeconds); err != nil {
return pvc, sc, svcIp, fmt.Errorf(pvcName+":"+clusterID+":Cannot convert value of stat-cache-expire-seconds into integer: %v", err)
} else if cacheExpireSeconds < 0 {
- return pvc, sc, svcIp, fmt.Errorf(pvcName + ":" + clusterID + ":value of stat-cache-expire-seconds should be >= 0")
+ return pvc, sc, svcIp, errors.New(pvcName + ":" + clusterID + ":value of stat-cache-expire-seconds should be >= 0")
}
}
@@ -472,7 +475,7 @@ func (p *IBMS3fsProvisioner) Provision(ctx context.Context, options controller.P
var setQuotaLimit = false
var quotaLimit int64
- ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
+ ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
defer cancel()
contextLogger, _ := logger.GetZapDefaultContextLogger()
contextLogger.Info(pvcName + ":" + clusterID + ":Provisioning storage with these spec")
@@ -528,7 +531,7 @@ func (p *IBMS3fsProvisioner) Provision(ctx context.Context, options controller.P
break
}
}
- if allowed == false {
+ if !allowed {
return nil, controller.ProvisioningFinished, errors.New(pvcName + ":" + clusterID + ":PVC creation in " + pvcNamespace + " namespace is not allowed")
}
}
@@ -557,14 +560,16 @@ func (p *IBMS3fsProvisioner) Provision(ctx context.Context, options controller.P
if ConfigBucketAccessPolicy != nil && *ConfigBucketAccessPolicy && pvc.SetAccessPolicy != "false" {
grpcSess = p.GRPCBackend.NewGrpcSession()
cc := &grpcClient.GrpcSes{}
- conn, err := grpcSess.GrpcDial(cc, *SockEndpoint, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithDialer(UnixConnect))
+ // nolint:staticcheck // WithBlock and WithDialer are deprecated but required with grpc.Dial until NewClient is available
+ conn, err := grpcSess.GrpcDial(cc, *SockEndpoint, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock(), grpc.WithDialer(UnixConnect))
+
if err != nil {
return nil, controller.ProvisioningFinished, fmt.Errorf(pvcName+":"+clusterID+":failed to establish grpc-client connection: %v", err)
}
providerClient = p.IBMProvider.NewIBMProviderClient(conn)
if conn != nil {
- defer conn.Close()
+ defer func() { _ = conn.Close() }()
}
name := defaultName
@@ -766,7 +771,7 @@ func (p *IBMS3fsProvisioner) Provision(ctx context.Context, options controller.P
accessMode := options.PVC.Spec.AccessModes
contextLogger.Info(pvcName+":"+clusterID+": acccess mode is.. ", zap.Any("access mode", accessMode))
if len(accessMode) > 1 {
- return nil, controller.ProvisioningFinished, fmt.Errorf(pvcName + ":" + clusterID + ": More that one access mode is not supported.")
+ return nil, controller.ProvisioningFinished, errors.New(pvcName + ":" + clusterID + ": More that one access mode is not supported.")
}
if pvc.AutoCache {
@@ -864,9 +869,9 @@ func (p *IBMS3fsProvisioner) Delete(ctx context.Context, pv *v1.PersistentVolume
contextLogger, _ := logger.GetZapDefaultContextLogger()
contextLogger.Info("Deleting the pvc..")
- endpointValue := pv.Spec.PersistentVolumeSource.FlexVolume.Options["object-store-endpoint"]
- regionValue := pv.Spec.PersistentVolumeSource.FlexVolume.Options["object-store-storage-class"]
- iamEndpoint := pv.Spec.PersistentVolumeSource.FlexVolume.Options["iam-endpoint"]
+ endpointValue := pv.Spec.FlexVolume.Options["object-store-endpoint"]
+ regionValue := pv.Spec.FlexVolume.Options["object-store-storage-class"]
+ iamEndpoint := pv.Spec.FlexVolume.Options["iam-endpoint"]
err := parser.UnmarshalMap(&pv.Annotations, &pvcAnnots)
if err != nil {
diff --git a/provisioner/ibm-s3fs-provisioner_test.go b/provisioner/ibm-s3fs-provisioner_test.go
index b7802fe2..73d50ba9 100644
--- a/provisioner/ibm-s3fs-provisioner_test.go
+++ b/provisioner/ibm-s3fs-provisioner_test.go
@@ -2,7 +2,7 @@
* IBM Confidential
* OCO Source Materials
* IBM Cloud Kubernetes Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2023 All Rights Reserved.
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
@@ -15,6 +15,8 @@ import (
"context"
"errors"
"fmt"
+ "os"
+
"github.com/IBM/ibmcloud-object-storage-plugin/driver"
"github.com/IBM/ibmcloud-object-storage-plugin/ibm-provider/provider"
fakeProvider "github.com/IBM/ibmcloud-object-storage-plugin/ibm-provider/provider/fake-provider"
@@ -28,15 +30,16 @@ import (
storagev1 "k8s.io/api/storage/v1"
"k8s.io/client-go/kubernetes"
k8fake "k8s.io/client-go/kubernetes/fake"
- "os"
"sigs.k8s.io/sig-storage-lib-external-provisioner/v6/controller"
+
//"k8s.io/client-go/pkg/api/v1"
- "k8s.io/api/core/v1"
+ v1 "k8s.io/api/core/v1"
//"k8s.io/client-go/pkg/runtime"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/runtime"
"strconv"
"testing"
+
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
)
const (
@@ -717,7 +720,7 @@ func Test_Provision_APIKeyWithoutServiceInstanceIDInBucketCreation(t *testing.T)
_, _, err := p.Provision(context.Background(), v)
if assert.Error(t, err) {
- assert.Contains(t, err.Error(), "cannot create bucket using API key without service-instance-id")
+ assert.Contains(t, err.Error(), "cannot get credentials: service-instance-id secret missing")
}
}
@@ -1472,7 +1475,7 @@ func Test_Wrong_Secret_Type_True(t *testing.T) {
v := getVolumeOptions()
_, _, err := p.Provision(context.Background(), v)
if assert.Error(t, err) {
- assert.Contains(t, err.Error(), "Wrong Secret Type")
+ assert.Contains(t, err.Error(), "wrong secret type")
}
}
diff --git a/utils/backend/backend.go b/utils/backend/backend.go
index ba31771e..bbabf106 100644
--- a/utils/backend/backend.go
+++ b/utils/backend/backend.go
@@ -1,9 +1,9 @@
/*******************************************************************************
* IBM Confidential
* OCO Source Materials
- * IBM Cloud Container Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2018 All Rights Reserved.
- * The source code for this program is not published or otherwise divested of
+ * IBM Cloud Kubernetes Service, 5737-D43
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
+ * The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
******************************************************************************/
@@ -124,9 +124,8 @@ func (s *COSSession) CheckBucketAccess(bucket string) error {
// CheckObjectPathExistence method checks that object-path exists inside bucket
func (s *COSSession) CheckObjectPathExistence(bucket, objectpath string) (bool, error) {
- if strings.HasPrefix(objectpath, "/") {
- objectpath = strings.TrimPrefix(objectpath, "/")
- }
+
+ objectpath = strings.TrimPrefix(objectpath, "/")
if !strings.HasSuffix(objectpath, "/") {
objectpath = objectpath + "/"
}
diff --git a/utils/config/config.go b/utils/config/config.go
index 7d00cd6b..90a93f79 100644
--- a/utils/config/config.go
+++ b/utils/config/config.go
@@ -2,7 +2,7 @@
* IBM Confidential
* OCO Source Materials
* IBM Cloud Kubernetes Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2023 All Rights Reserved.
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
@@ -14,15 +14,16 @@ import (
"context"
"encoding/json"
"fmt"
+ "os"
+ "strconv"
+ "strings"
+ "time"
+
"github.com/BurntSushi/toml"
"github.com/IBM/ibmcloud-object-storage-plugin/utils/consts"
"go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
- "os"
- "strconv"
- "strings"
- "time"
)
// ClusterInfo ...
@@ -38,7 +39,7 @@ func getEnv(key string) string {
}
func setEnv(key string, value string) {
- os.Setenv(strings.ToUpper(key), value)
+ _ = os.Setenv(strings.ToUpper(key), value)
}
// GetGoPath ...
@@ -95,7 +96,7 @@ func GetConfigStringList(envKey string, defaultConf string, logger zap.Logger) [
val = getEnv(envKey)
}
- val = strings.Replace(val, " ", "", -1)
+ val = strings.ReplaceAll(val, " ", "")
return strings.Split(val, ",")
}
@@ -143,7 +144,7 @@ func LoadClusterInfoMap(kubeclient kubernetes.Interface, logger *zap.Logger) err
clusteInfo := ClusterInfo{}
err = json.Unmarshal([]byte(clusterInfoData), &clusteInfo)
if err != nil {
- err = fmt.Errorf("Error while parsing cluster-config %s. Error: %v", consts.ClusterInfo, err)
+ err = fmt.Errorf("error while parsing cluster-config %s. Error: %v", consts.ClusterInfo, err)
return err
}
diff --git a/utils/config/config_test.go b/utils/config/config_test.go
index b7e2d475..b969a7b4 100644
--- a/utils/config/config_test.go
+++ b/utils/config/config_test.go
@@ -1,9 +1,9 @@
/*******************************************************************************
* IBM Confidential
* OCO Source Materials
- * IBM Cloud Container Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2018 All Rights Reserved.
- * The source code for this program is not published or otherwise divested of
+ * IBM Cloud Kubernetes Service, 5737-D43
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
+ * The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
******************************************************************************/
@@ -89,10 +89,10 @@ func TestGetConfigStringNoEnv(t *testing.T) {
func TestGetConfigStringWithEnv(t *testing.T) {
t.Log("Testing string config value get when there is an env var override")
- os.Setenv("NAME", "env")
+ _ = os.Setenv("NAME", "env")
confVal := GetConfigString("name", testConf.Header.Name)
- os.Unsetenv("NAME")
+ _ = os.Unsetenv("NAME")
expected := "env"
assert.Equal(t, expected, confVal)
@@ -110,10 +110,10 @@ func TestGetConfigIntNoEnv(t *testing.T) {
func TestGetConfigIntWithEnv(t *testing.T) {
t.Log("Testing int config value get when there is an env var override")
- os.Setenv("ID", "10")
+ _ = os.Setenv("ID", "10")
confVal := GetConfigInt("id", testConf.Header.ID, *testLogger)
- os.Unsetenv("ID")
+ _ = os.Unsetenv("ID")
expected := 10
assert.Equal(t, expected, confVal)
@@ -129,10 +129,10 @@ func TestGetConfigBoolNoEnv(t *testing.T) {
func TestGetConfigBoolWithEnv(t *testing.T) {
t.Log("Testing bool config value get when there is an env var override")
- os.Setenv("YESORNO", "false")
+ _ = os.Setenv("YESORNO", "false")
confVal := GetConfigBool("yesOrNo", testConf.Header.YesOrNo, *testLogger)
- os.Unsetenv("YESORNO")
+ _ = os.Unsetenv("YESORNO")
expected := false
assert.Equal(t, expected, confVal)
@@ -149,10 +149,10 @@ func TestGetConfigStringListNoEnv(t *testing.T) {
func TestGetConfigStringListWithEnv(t *testing.T) {
t.Log("Testing string list config value get when there is an env var override")
- os.Setenv("LIST", "1,2,3")
+ _ = os.Setenv("LIST", "1,2,3")
confVal := GetConfigStringList("list", testConf.Header.List, *testLogger)
- os.Unsetenv("LIST")
+ _ = os.Unsetenv("LIST")
expected := []string{"1", "2", "3"}
@@ -162,7 +162,7 @@ func TestGetConfigStringListWithEnv(t *testing.T) {
func TestGetGoPath(t *testing.T) {
t.Log("Testing getting GOPATH")
goPath := "/tmp"
- os.Setenv("GOPATH", goPath)
+ _ = os.Setenv("GOPATH", goPath)
path := GetGoPath()
@@ -172,7 +172,7 @@ func TestGetGoPath(t *testing.T) {
func TestGetEnv(t *testing.T) {
t.Log("Testing getting ENV")
goPath := "/tmp"
- os.Setenv("ENVTEST", goPath)
+ _ = os.Setenv("ENVTEST", goPath)
path := getEnv("ENVTEST")
@@ -182,7 +182,7 @@ func TestGetEnv(t *testing.T) {
func TestGetGoPathNullPath(t *testing.T) {
t.Log("Testing getting GOPATH NULL Path")
goPath := ""
- os.Setenv("GOPATH", goPath)
+ _ = os.Setenv("GOPATH", goPath)
path := GetGoPath()
@@ -227,7 +227,7 @@ func TestPassAlreadySetEnv(t *testing.T) {
}
func TestCmNotFoundSetEnv(t *testing.T) {
- os.Unsetenv("CLUSTER_ID")
+ _ = os.Unsetenv("CLUSTER_ID")
t.Log("Testing SetUpEvn() for CM not found")
kubeclient := kfakes.NewSimpleClientset()
@@ -236,7 +236,7 @@ func TestCmNotFoundSetEnv(t *testing.T) {
}
func TestCmErrorSetEnv(t *testing.T) {
- os.Unsetenv("CLUSTER_ID")
+ _ = os.Unsetenv("CLUSTER_ID")
t.Log("Testing SetUpEvn() for CM wrong content")
configmap := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
@@ -253,7 +253,7 @@ func TestCmErrorSetEnv(t *testing.T) {
}
func TestCmErrorParsing(t *testing.T) {
- os.Unsetenv("CLUSTER_ID")
+ _ = os.Unsetenv("CLUSTER_ID")
t.Log("Testing SetUpEvn() for CM wrong content")
configmap := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
diff --git a/utils/grpc-client/grpc_client.go b/utils/grpc-client/grpc_client.go
index 70cbf26e..5180d42b 100644
--- a/utils/grpc-client/grpc_client.go
+++ b/utils/grpc-client/grpc_client.go
@@ -2,7 +2,7 @@
* IBM Confidential
* OCO Source Materials
* IBM Cloud Kubernetes Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2023 All Rights Reserved.
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
* The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
@@ -36,6 +36,7 @@ type GrpcSes struct {
func (gs *GrpcSes) Connect(target string, opts ...grpc.DialOption) (*grpc.ClientConn, error) {
var err error
+ // nolint:staticcheck // grpc.Dial is deprecated but still required until grpc.NewClient is available
gs.conn, err = grpc.Dial(target, opts...)
return gs.conn, err
}
diff --git a/utils/grpc-client/grpc_client_test.go b/utils/grpc-client/grpc_client_test.go
index 4096b5dd..378273e1 100644
--- a/utils/grpc-client/grpc_client_test.go
+++ b/utils/grpc-client/grpc_client_test.go
@@ -1,9 +1,9 @@
/*******************************************************************************
* IBM Confidential
* OCO Source Materials
- * IBM Cloud Container Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2018 All Rights Reserved.
- * The source code for this program is not published or otherwise divested of
+ * IBM Cloud Kubernetes Service, 5737-D43
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
+ * The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
******************************************************************************/
@@ -14,6 +14,7 @@ import (
"errors"
"github.com/stretchr/testify/assert"
"google.golang.org/grpc"
+ "google.golang.org/grpc/credentials/insecure"
"net"
"testing"
"time"
@@ -84,13 +85,16 @@ var gcon = &grpc.ClientConn{}
func Test_GrpcDial_Positive(t *testing.T) {
grSess := getFakeGrpcSession(gcon, &fakeClientConn1{fcc1: cc1})
- _, err := grSess.GrpcDial(cc1, *sockeEndpoint, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithDialer(UnixConnect))
+ // nolint:staticcheck // WithBlock and WithDialer are deprecated but required with grpc.Dial until NewClient is available
+ _, err := grSess.GrpcDial(cc1, *sockeEndpoint, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock(), grpc.WithDialer(UnixConnect))
+
assert.NoError(t, err)
}
func Test_GrpcDial_Error(t *testing.T) {
grSess := getFakeGrpcSession(gcon, &fakeClientConn2{fcc2: cc2})
- _, err := grSess.GrpcDial(cc2, *sockeEndpoint, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithDialer(UnixConnect))
+ // nolint:staticcheck // WithBlock and WithDialer are deprecated but required with grpc.Dial until NewClient is available
+ _, err := grSess.GrpcDial(cc2, *sockeEndpoint, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock(), grpc.WithDialer(UnixConnect))
if assert.Error(t, err) {
assert.Contains(t, err.Error(), errMsg)
diff --git a/utils/logger/logger.go b/utils/logger/logger.go
index a5bdadfc..b2e8c4e2 100644
--- a/utils/logger/logger.go
+++ b/utils/logger/logger.go
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * IBM Confidential
+ * OCO Source Materials
+ * IBM Cloud Kubernetes Service, 5737-D43
+ * (C) Copyright IBM Corp. 2025 All Rights Reserved.
+ * The source code for this program is not published or otherwise divested of
+ * its trade secrets, irrespective of what has been deposited with
+ * the U.S. Copyright Office.
+ ******************************************************************************/
+
/******************************************************************************r
* IBM Confidential
* OCO Source Materials
@@ -13,11 +23,12 @@ package logger
import (
"context"
"errors"
+ "os"
+
"github.com/IBM/ibmcloud-object-storage-plugin/utils/consts"
uid "github.com/gofrs/uuid"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
- "os"
)
const (
@@ -140,5 +151,5 @@ func CreateZapPodNameKeyField() zapcore.Field {
func generateContextWithRequestID() context.Context {
reqID, _ := uid.NewV4()
requestID := reqID.String()
- return context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ return context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
}
diff --git a/utils/logger/logger_test.go b/utils/logger/logger_test.go
index de528281..d7d31d0a 100644
--- a/utils/logger/logger_test.go
+++ b/utils/logger/logger_test.go
@@ -1,9 +1,9 @@
/*******************************************************************************
* IBM Confidential
* OCO Source Materials
- * IBM Cloud Container Service, 5737-D43
- * (C) Copyright IBM Corp. 2017, 2018 All Rights Reserved.
- * The source code for this program is not published or otherwise divested of
+ * IBM Cloud Kubernetes Service, 5737-D43
+ * (C) Copyright IBM Corp. 2017, 2025 All Rights Reserved.
+ * The source code for this program is not published or otherwise divested of
* its trade secrets, irrespective of what has been deposited with
* the U.S. Copyright Office.
******************************************************************************/
@@ -20,7 +20,7 @@ import (
func TestGetContextLoggerContext(t *testing.T) {
requestID := "myRequestID"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
ctxLogger, err := GetZapContextLogger(ctx)
if err != nil {
t.Errorf("Got error from GetLoggerWithContext: %s", err)
@@ -30,7 +30,7 @@ func TestGetContextLoggerContext(t *testing.T) {
}
func TestGetContextLoggerNullContext(t *testing.T) {
- ctxLogger, err := GetZapContextLogger(nil)
+ ctxLogger, err := GetZapContextLogger(context.Background())
if err != nil {
t.Errorf("Got error from GetLoggerWithContext: %s", err)
}
@@ -49,7 +49,7 @@ func TestGetDefaultContextLogger(t *testing.T) {
func TestGetContextLoggerFromLoggerContext(t *testing.T) {
requestID := "myRequestID"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
parentLogger, _ := GetZapLogger()
ctxLogger, err := GetZapContextLoggerFromLogger(ctx, parentLogger)
if err != nil {
@@ -61,7 +61,7 @@ func TestGetContextLoggerFromLoggerContext(t *testing.T) {
func TestGetContextLoggerFromLoggerNullContext(t *testing.T) {
parentLogger, _ := GetZapLogger()
- ctxLogger, err := GetZapContextLoggerFromLogger(nil, parentLogger)
+ ctxLogger, err := GetZapContextLoggerFromLogger(context.Background(), parentLogger)
if err != nil {
t.Errorf("Got error from GetLoggerWithContext: %s", err)
}
@@ -71,23 +71,23 @@ func TestGetContextLoggerFromLoggerNullContext(t *testing.T) {
func TestGetContextLoggerFromLoggerNullLogger(t *testing.T) {
requestID := "myRequestID"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
_, err := GetZapContextLoggerFromLogger(ctx, nil)
assert.Equal(t, "a valid logger needs to be passed in", err.Error())
}
func TestGetContextLoggerFromLoggerNullLoggerAndContext(t *testing.T) {
requestID := "myRequestID"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
_, err := GetZapContextLoggerFromLogger(ctx, nil)
assert.Equal(t, "a valid logger needs to be passed in", err.Error())
}
func TestAddContextFields(t *testing.T) {
requestID := "myRequestID"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
triggerKey := "myTriggerKey"
- ctx = context.WithValue(ctx, consts.TriggerKeyLabel, triggerKey)
+ ctx = context.WithValue(ctx, consts.TriggerKeyLabel, triggerKey) // nolint:staticcheck
parentLogger, _ := GetZapLogger()
ctxLogger := addContextFields(ctx, parentLogger)
ctxLogger.Info("TestAddContextFields")
@@ -98,7 +98,7 @@ func TestAddContextFieldsTestValue(t *testing.T) {
requestID := "myRequestID"
type key string
var testLabel key = "testLabel"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
ctx = context.WithValue(ctx, testLabel, "test")
parentLogger, _ := GetZapLogger()
ctxLogger := addContextFields(ctx, parentLogger)
@@ -107,7 +107,7 @@ func TestAddContextFieldsTestValue(t *testing.T) {
func TestCreateRequestIdField(t *testing.T) {
requestID := "myRequestID"
- ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID)
+ ctx := context.WithValue(context.Background(), consts.RequestIDLabel, requestID) // nolint:staticcheck
field := CreateZapRequestIDField(ctx)
if field.Key != consts.RequestIDLabel {
t.Errorf("Expected key value to be: %s", consts.RequestIDLabel)
@@ -123,7 +123,7 @@ func TestCreateRequestIdField(t *testing.T) {
}
func TestCreateRequestIdFieldNullContext(t *testing.T) {
- field := CreateZapRequestIDField(nil)
+ field := CreateZapRequestIDField(context.Background())
if field.Key != consts.RequestIDLabel {
t.Errorf("Expected key value to be: %s", consts.RequestIDLabel)
}
@@ -154,7 +154,7 @@ func TestCreateZapRequestIDFieldNoRequestID(t *testing.T) {
func TestCreateTriggerKeyField(t *testing.T) {
triggerKey := "myTriggerKey"
- ctx := context.WithValue(context.Background(), consts.TriggerKeyLabel, triggerKey)
+ ctx := context.WithValue(context.Background(), consts.TriggerKeyLabel, triggerKey) // nolint:staticcheck
field := CreateZapTiggerKeyField(ctx)
if field.Key != consts.TriggerKeyLabel {
t.Errorf("Expected key value to be: %s", consts.TriggerKeyLabel)
@@ -170,7 +170,7 @@ func TestCreateTriggerKeyField(t *testing.T) {
}
func TestCreateTriggerKeyFieldNullContext(t *testing.T) {
- field := CreateZapTiggerKeyField(nil)
+ field := CreateZapTiggerKeyField(context.Background())
if field.Key != consts.TriggerKeyLabel {
t.Errorf("Expected key value to be: %s", consts.TriggerKeyLabel)
}
@@ -212,7 +212,7 @@ func TestCreatePodNameLoggerNotSet(t *testing.T) {
}
func TestCreatePodNameLogger(t *testing.T) {
- os.Setenv(consts.PodNameEnvVar, "myPodName")
+ _ = os.Setenv(consts.PodNameEnvVar, "myPodName")
logger, err := GetZapLogger()
if err != nil {
t.Errorf("Got error when creating global logger: %s", err.Error())
@@ -235,7 +235,7 @@ func TestCreatePodNameLoggerNilLogger(t *testing.T) {
func TestCreatePodNameKeyField(t *testing.T) {
podNameValue := "myPodName"
- os.Setenv(consts.PodNameEnvVar, podNameValue)
+ _ = os.Setenv(consts.PodNameEnvVar, podNameValue)
field := CreateZapPodNameKeyField()
if field.Key != PodName {
t.Errorf("Expected key value to be: %s", PodName)
@@ -246,7 +246,7 @@ func TestCreatePodNameKeyField(t *testing.T) {
}
func TestCreatePodNameKeyFieldNotSet(t *testing.T) {
- os.Unsetenv(consts.PodNameEnvVar)
+ _ = os.Unsetenv(consts.PodNameEnvVar)
field := CreateZapPodNameKeyField()
if field.Key != PodName {
t.Errorf("Expected key value to be: %s", PodName)