From ef3963410c837b0e28933bd40a801203823db9d1 Mon Sep 17 00:00:00 2001 From: francis-nijay Date: Thu, 7 May 2026 14:25:28 -0500 Subject: [PATCH] Mirror internal repository with cleaned references --- .gitignore | 2 + Dockerfile | 83 ++++++-- Gopkg.toml | 13 -- Makefile | 36 ++-- README.md | 18 +- core/semver/semver.go | 2 +- core/semver/semver_test.go | 2 +- dell-csi-helm-installer/README.md | 4 +- dell-csi-helm-installer/csi-install.sh | 4 +- dell-csi-helm-installer/csi-offline-bundle.md | 2 +- dell-csi-helm-installer/csi-offline-bundle.sh | 2 +- docker.mk | 7 +- go.mod | 48 ++--- go.sum | 128 ++++++------ mkdocs.yml | 7 + service/controller.go | 6 +- service/controller_test.go | 2 +- service/csi_extension_server.go | 2 +- service/ephemeral.go | 11 +- service/features/ephemeral.feature | 2 +- service/identity.go | 2 +- service/mount.go | 25 ++- service/node.go | 5 +- service/replication.go | 2 +- service/service.go | 6 +- service/service_test.go | 30 +-- service/service_unit_test.go | 26 ++- service/step_defs_test.go | 182 +++++++++++------- test/e2e/e2e.go | 2 +- test/integration/integration_test.go | 4 +- test/integration/step_defs_test.go | 4 +- 31 files changed, 398 insertions(+), 271 deletions(-) delete mode 100644 Gopkg.toml create mode 100644 mkdocs.yml diff --git a/.gitignore b/.gitignore index aaad1be7..f0a869a3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,6 @@ gofsutil/ .idea .vscode *.log +csm-common.mk go-code-tester +vendor/ diff --git a/Dockerfile b/Dockerfile index 423afeec..da64e402 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,33 +11,90 @@ # limitations under the License # some arguments that must be supplied -ARG GOPROXY ARG GOIMAGE ARG BASEIMAGE -ARG DIGEST # Stage to build the driver FROM $GOIMAGE as builder -ARG GOPROXY RUN mkdir -p /go/src COPY ./ /go/src/ + WORKDIR /go/src/ -RUN CGO_ENABLED=0 \ - make build +RUN make build # Stage to build the driver image -FROM $BASEIMAGE AS final -ENTRYPOINT ["/csi-vxflexos.sh"] -# copy in the driver -COPY --from=builder /go/src/csi-vxflexos / -COPY "csi-vxflexos.sh" / -RUN chmod +x /csi-vxflexos.sh +FROM registry.access.redhat.com/ubi9/ubi@sha256:b07f5c75ad9669fa90a3aab2ccd4eb85d5a862265b09a695997ebe2be699bd20 AS final + +# CVE remediation: update all packages to latest security fixes +# Addresses: CVE-2025-32462, CVE-2025-68973, CVE-2024-10963, CVE-2025-6965, +# CVE-2026-3497, CVE-2024-12718, CVE-2025-4517, CVE-2026-28417, CVE-2026-33412 +RUN dnf upgrade --security -y && \ + dnf clean all + +# Explicit upgrades for available high CVE fixes: +# CVE-2026-34982 (vim-minimal) -> fixed in 2:8.2.2637-23.el9_7.3 +# CVE-2026-4878 (libcap) -> fixed in 2.48-10.el9_7.1 +RUN dnf upgrade -y vim-minimal libcap && \ + dnf clean all + +# Install required packages with security fixes +RUN dnf install -y \ + python3-3.9.* \ + openssh-8.* \ + gnupg2-2.3.* \ + sqlite-3.* \ + && dnf clean all + +# Install packages available from standard UBI repositories +RUN dnf install -y \ + acl \ + bzip2 \ + gnutls \ + gzip \ + hostname \ + kmod \ + libaio \ + libuuid \ + libxcrypt-compat \ + nettle \ + numactl \ + openssl \ + rpm \ + systemd \ + tar \ + util-linux \ + which \ + && dnf clean all + +# Install packages that are only available from full RHEL repositories. +# These packages (device-mapper-multipath, e2fsprogs, libblockdev, nfs-utils, +# nfs4-acl-tools, xfsprogs) are not shipped in any UBI repo. +# The Dell internal RHEL mirror is configured inline, used to install, then removed +# so no subscription artefacts remain in the final image layer. +RUN printf '[rhel-9-baseos]\nname=RHEL 9 BaseOS\nbaseurl=http://rhel-update.cec.lab.emc.com/rhel-9-for-x86_64-baseos-rpms\ngpgcheck=0\nsslverify=0\nenabled=1\n\n[rhel-9-appstream]\nname=RHEL 9 AppStream\nbaseurl=http://rhel-update.cec.lab.emc.com/rhel-9-for-x86_64-appstream-rpms\ngpgcheck=0\nsslverify=0\nenabled=1\n' > /etc/yum.repos.d/dell-rhel.repo && \ + dnf install -y \ + device-mapper-multipath \ + e2fsprogs \ + libblockdev \ + nfs-utils \ + nfs4-acl-tools \ + xfsprogs \ + && dnf clean all && \ + rm -f /etc/yum.repos.d/dell-rhel.repo + LABEL vendor="Dell Technologies" \ maintainer="Dell Technologies" \ name="csi-powerflex" \ summary="CSI Driver for Dell EMC PowerFlex" \ description="CSI Driver for provisioning persistent storage from Dell EMC PowerFlex" \ - release="1.15.0" \ - version="2.15.0" \ + release="1.15.2" \ + version="2.15.2" \ license="Apache-2.0" + +# copy in the driver +COPY --from=builder /go/src/csi-vxflexos / +COPY "csi-vxflexos.sh" / +RUN chmod +x /csi-vxflexos.sh COPY ./licenses /licenses + +ENTRYPOINT ["/csi-vxflexos.sh"] \ No newline at end of file diff --git a/Gopkg.toml b/Gopkg.toml deleted file mode 100644 index 2d261bf0..00000000 --- a/Gopkg.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md -# for detailed Gopkg.toml documentation. -# -# Refer to https://github.com/toml-lang/toml for detailed TOML docs. - -[prune] - non-go = true - go-tests = true - unused-packages = true - -[[constraint]] - name = "github.com/rexray/gocsi" - version = "0.4.0" diff --git a/Makefile b/Makefile index 4070ca46..d38dab62 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ help: @echo "integration-test - Runs the integration tests. Requires access to an array" @echo "push - Pushes the built container to a target registry" @echo "unit-test - Runs the unit tests" + @echo "vendor - Downloads a vendor list (local copy) of repositories required to compile the repo." @echo @make -s overrides-help @@ -25,23 +26,27 @@ help: clean: rm -f core/core_generated.go rm -f semver.mk + rm -rf csm-common.mk + rm -rf vendor go clean -# Dependencies -dependencies: +generate: go generate - go run core/semver/semver.go -f mk >semver.mk + go run core/semver/semver.go -f mk > semver.mk + +vendor: + GOPRIVATE=github.com go mod vendor # Build the driver locally -build: dependencies - CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build +build: generate + CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -mod=vendor # Generates the docker container (but does not push) -docker: dependencies +docker: generate vendor make -f docker.mk docker # Generates the docker container with no cache (but does not push) -docker-no-cache: dependencies +docker-no-cache: generate vendor make -f docker.mk docker-no-cache # Pushes container to the repository @@ -60,23 +65,6 @@ integration-test: check: @scripts/check.sh ./provider/ ./service/ -.PHONY: actions action-help -actions: ## Run all GitHub Action checks that run on a pull request creation - @echo "Running all GitHub Action checks for pull request events..." - @act -l | grep -v ^Stage | grep pull_request | grep -v image_security_scan | awk '{print $$2}' | while read WF; do \ - echo "Running workflow: $${WF}"; \ - act pull_request --no-cache-server --platform ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-latest --job "$${WF}"; \ - done - go-code-tester: curl -o go-code-tester -L https://raw.githubusercontent.com/dell/common-github-actions/main/go-code-tester/entrypoint.sh \ && chmod +x go-code-tester - -action-help: ## Echo instructions to run one specific workflow locally - @echo "GitHub Workflows can be run locally with the following command:" - @echo "act pull_request --no-cache-server --platform ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-latest --job " - @echo "" - @echo "Where '' is a Job ID returned by the command:" - @echo "act -l" - @echo "" - @echo "NOTE: if act is not installed, it can be downloaded from https://github.com/nektos/act" diff --git a/README.md b/README.md index 1a229381..aac30316 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,20 @@ +# :lock: **Important Notice** +Starting with the release of **Container Storage Modules v1.16.0**, this repository will no longer be maintained as an open source project. Future development will continue under a closed source model. This change reflects our commitment to delivering even greater value to our customers by enabling faster innovation and more deeply integrated features with the Dell storage portfolio.
+For existing customers using Dell’s Container Storage Modules, you will continue to receive: +* **Ongoing Support & Community Engagement**
+ You will continue to receive high-quality support through Dell Support and our community channels. Your experience of engaging with the Dell community remains unchanged. +* **Streamlined Deployment & Updates**
+ Deployment and update processes will remain consistent, ensuring a smooth and familiar experience. +* **Access to Documentation & Resources**
+ All documentation and related materials will remain publicly accessible, providing transparency and technical guidance. +* **Continued Access to Current Open Source Version**
+ The current open-source version will remain available under its existing license for those who rely on it. + +Moving to a closed source model allows Dell’s development team to accelerate feature delivery and enhance integration across our Enterprise Kubernetes Storage solutions ultimately providing a more seamless and robust experience.
+We deeply appreciate the contributions of the open source community and remain committed to supporting our customers through this transition.
+ +For questions or access requests, please contact the maintainers via [Dell Support](https://www.dell.com/support/kbdoc/en-in/000188046/container-storage-interface-csi-drivers-and-container-storage-modules-csm-how-to-get-support). + # CSI Driver for Dell PowerFlex [![Go Report Card](https://goreportcard.com/badge/github.com/dell/csi-vxflexos?style=flat-square)](https://goreportcard.com/report/github.com/dell/csi-vxflexos) @@ -49,4 +66,3 @@ Also, if the `X_CSI_VXFLEXOS_SDCGUID` environment variable is not set, the drive ## Documentation For more detailed information on the driver, please refer to [Container Storage Modules documentation](https://dell.github.io/csm-docs/). - diff --git a/core/semver/semver.go b/core/semver/semver.go index e4fd8108..b59995c9 100644 --- a/core/semver/semver.go +++ b/core/semver/semver.go @@ -362,7 +362,7 @@ var OSExit = func(code int) { // GetExitError is a wrapper around exec.ExitError var GetExitError = func(err error) (e *exec.ExitError, ok bool) { e, ok = err.(*exec.ExitError) - return + return e, ok } // GetStatusError is a wrapper around syscall.WaitStatus diff --git a/core/semver/semver_test.go b/core/semver/semver_test.go index 121a92a9..2acb7b3a 100644 --- a/core/semver/semver_test.go +++ b/core/semver/semver_test.go @@ -299,7 +299,7 @@ func TestErrorExit(t *testing.T) { return } // call the test again with INVOKE_ERROR_EXIT=1 so the errorExit function is invoked and we can check the return code - cmd := exec.Command(os.Args[0], "-test.run=TestErrorExit") // #nosec G204 + cmd := exec.Command(os.Args[0], "-test.run=TestErrorExit") // #nosec G204,G702 cmd.Env = append(os.Environ(), "INVOKE_ERROR_EXIT=1") stderr, err := cmd.StderrPipe() diff --git a/dell-csi-helm-installer/README.md b/dell-csi-helm-installer/README.md index a00ba272..122171ad 100644 --- a/dell-csi-helm-installer/README.md +++ b/dell-csi-helm-installer/README.md @@ -36,7 +36,7 @@ This project provides the following capabilitites, each one is discussed in deta Most of these usages require the creation/specification of a values file. These files specify configuration settings that are passed into the driver and configure it for use. To create one of these files, the following steps should be followed: -1. Download a template file for the driver to a new location, naming this new file is at the users discretion. The template files are always found at `https://github.com/dell/helm-charts/raw/csi-vxflexos-2.15.0/charts/csi-vxflexos/values.yaml` +1. Download a template file for the driver to a new location, naming this new file is at the users discretion. The template files are always found at `https://github.com/dell/helm-charts/raw/csi-vxflexos-2.15.2/charts/csi-vxflexos/values.yaml` 2. Edit the file such that it contains the proper configuration settings for the specific environment. These files are yaml formatted so maintaining the file structure is important. For example, to create a values file for the PowerFlex driver the following steps can be executed @@ -45,7 +45,7 @@ For example, to create a values file for the PowerFlex driver the following step cd dell-csi-helm-installer # download the template file - wget -O my-vxflexos-settings.yaml https://github.com/dell/helm-charts/raw/csi-vxflexos-2.15.0/charts/csi-vxflexos/values.yaml + wget -O my-vxflexos-settings.yaml https://github.com/dell/helm-charts/raw/csi-vxflexos-2.15.2/charts/csi-vxflexos/values.yaml # edit the newly created values file vi my-vxflexos-settings.yaml diff --git a/dell-csi-helm-installer/csi-install.sh b/dell-csi-helm-installer/csi-install.sh index 4d0cf54c..c3a7041a 100755 --- a/dell-csi-helm-installer/csi-install.sh +++ b/dell-csi-helm-installer/csi-install.sh @@ -20,8 +20,8 @@ PROG="${0}" NODE_VERIFY=1 VERIFY=1 MODE="install" -DEFAULT_DRIVER_VERSION="v2.15.0" -DRIVERVERSION="csi-vxflexos-2.15.0" +DEFAULT_DRIVER_VERSION="v2.15.2" +DRIVERVERSION="csi-vxflexos-2.15.2" WATCHLIST="" # export the name of the debug log, so child processes will see it diff --git a/dell-csi-helm-installer/csi-offline-bundle.md b/dell-csi-helm-installer/csi-offline-bundle.md index 4f634118..64ca031a 100644 --- a/dell-csi-helm-installer/csi-offline-bundle.md +++ b/dell-csi-helm-installer/csi-offline-bundle.md @@ -84,7 +84,7 @@ For example, here is the output of a request to build an offline bundle for the quay.io/dell/container-storage-modules/csi-powermax:v2.15.0 quay.io/dell/container-storage-modules/csi-powerstore:v2.15.0 quay.io/dell/container-storage-modules/csi-unity:v2.15.0 - quay.io/dell/container-storage-modules/csi-vxflexos:v2.15.0 + quay.io/dell/container-storage-modules/csi-vxflexos:v2.15.2 quay.io/dell/container-storage-modules/csm-authorization-sidecar:v1.14.0 quay.io/dell/container-storage-modules/csm-metrics-powerflex:v1.12.0 quay.io/dell/container-storage-modules/csm-metrics-powerscale:v1.9.0 diff --git a/dell-csi-helm-installer/csi-offline-bundle.sh b/dell-csi-helm-installer/csi-offline-bundle.sh index b9102d5f..250d101d 100755 --- a/dell-csi-helm-installer/csi-offline-bundle.sh +++ b/dell-csi-helm-installer/csi-offline-bundle.sh @@ -236,7 +236,7 @@ DRIVER="csi-vxflexos" SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" REPODIR="$( dirname "${SCRIPTDIR}" )" -DRIVERVERSION="csi-vxflexos-2.15.0" +DRIVERVERSION="csi-vxflexos-2.15.2" while getopts "cprv:h" opt; do case $opt in diff --git a/docker.mk b/docker.mk index 16cce740..d8b2d833 100644 --- a/docker.mk +++ b/docker.mk @@ -21,7 +21,7 @@ docker: download-csm-common @echo "Building: $(REGISTRY)/$(IMAGENAME):$(IMAGETAG)" $(BUILDER) build --pull $(NOCACHE) -t "$(REGISTRY)/$(IMAGENAME):$(IMAGETAG)" --target $(BUILDSTAGE) --build-arg GOPROXY --build-arg BASEIMAGE=$(CSM_BASEIMAGE) --build-arg GOIMAGE=$(DEFAULT_GOIMAGE) . -docker-no-cache: download-csm-common +docker-no-cache: @echo "Building with --no-cache ..." @make docker NOCACHE=--no-cache @@ -29,6 +29,7 @@ push: @echo "Pushing: $(REGISTRY)/$(IMAGENAME):$(IMAGETAG)" $(BUILDER) push "$(REGISTRY)/$(IMAGENAME):$(IMAGETAG)" - download-csm-common: - curl -O -L https://raw.githubusercontent.com/dell/csm/main/config/csm-common.mk + git clone --depth 1 git@github.com:dell/csm.git temp-repo + cp temp-repo/config/csm-common.mk . + rm -rf temp-repo \ No newline at end of file diff --git a/go.mod b/go.mod index e50a7fea..10854bb6 100644 --- a/go.mod +++ b/go.mod @@ -6,26 +6,26 @@ module github.com/dell/csi-vxflexos/v2 go 1.25 require ( + github.com/dell/dell-csi-extensions/common v1.9.1-0.20250930070920-a5efa6761ce1 + github.com/dell/dell-csi-extensions/podmon v1.9.1-0.20250930070920-a5efa6761ce1 + github.com/dell/dell-csi-extensions/replication v1.12.1-0.20250930070920-a5efa6761ce1 + github.com/dell/dell-csi-extensions/volumeGroupSnapshot v1.8.1 + github.com/dell/gocsi v1.15.1-0.20250930113136-950340479c4e + github.com/dell/gofsutil v1.20.1-0.20250930113120-64ce760f715a + github.com/dell/goscaleio v1.21.1-0.20250930120611-ef836f9c4afa github.com/apparentlymart/go-cidr v1.1.0 github.com/container-storage-interface/spec v1.6.0 github.com/cucumber/godog v0.15.0 - github.com/dell/dell-csi-extensions/common v1.9.0 - github.com/dell/dell-csi-extensions/podmon v1.9.0 - github.com/dell/dell-csi-extensions/replication v1.12.0 - github.com/dell/dell-csi-extensions/volumeGroupSnapshot v1.8.1 - github.com/dell/gocsi v1.15.0 - github.com/dell/gofsutil v1.20.0 - github.com/dell/goscaleio v1.21.0 github.com/fsnotify/fsnotify v1.9.0 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/kubernetes-csi/csi-lib-utils v0.11.0 github.com/sirupsen/logrus v1.9.3 - github.com/spf13/viper v1.20.0 - github.com/stretchr/testify v1.11.0 - golang.org/x/net v0.43.0 - google.golang.org/grpc v1.75.0 - google.golang.org/protobuf v1.36.6 + github.com/spf13/viper v1.21.0 + github.com/stretchr/testify v1.11.1 + golang.org/x/net v0.48.0 + google.golang.org/grpc v1.79.3 + google.golang.org/protobuf v1.36.10 k8s.io/api v0.34.0 k8s.io/apimachinery v0.34.0 k8s.io/client-go v0.34.0 @@ -61,14 +61,14 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 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/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/sagikazarmark/locafero v0.7.0 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.12.0 // indirect - github.com/spf13/cast v1.7.1 // indirect - github.com/spf13/pflag v1.0.9 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/x448/float16 v0.8.4 // indirect @@ -79,13 +79,13 @@ require ( go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.36.0 // indirect - golang.org/x/term v0.34.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/oauth2 v0.34.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/term v0.38.0 // indirect + golang.org/x/text v0.32.0 // indirect golang.org/x/time v0.9.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // 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 diff --git a/go.sum b/go.sum index e559c36e..5b1fa797 100644 --- a/go.sum +++ b/go.sum @@ -22,6 +22,20 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/dell/dell-csi-extensions/common v1.9.1-0.20250930070920-a5efa6761ce1 h1:2HP15S57m8sW8sCnwppnCuUmGw2BAKo5LZIwyypAES4= +github.com/dell/dell-csi-extensions/common v1.9.1-0.20250930070920-a5efa6761ce1/go.mod h1:2bWTNrWVtXvUkeIs2+j26KHDjLW9JD2rowV5gRWQ5rU= +github.com/dell/dell-csi-extensions/podmon v1.9.1-0.20250930070920-a5efa6761ce1 h1:QNEKs8x7AMY0Nv5BtV7dQbEJrNhklTrtYguxmxOY85Y= +github.com/dell/dell-csi-extensions/podmon v1.9.1-0.20250930070920-a5efa6761ce1/go.mod h1:NxKaGj5G9SNNw+fsBfrm5pdiV39YdQe/aI0APyfTchg= +github.com/dell/dell-csi-extensions/replication v1.12.1-0.20250930070920-a5efa6761ce1 h1:JCeIULiHGkNrsLCcLb+X+BK69BJ+/t25l8HytXGiIAg= +github.com/dell/dell-csi-extensions/replication v1.12.1-0.20250930070920-a5efa6761ce1/go.mod h1:bfYzeQY9823QT3UrAAsJR3wlArgHnm7mtP8hKQPym2E= +github.com/dell/dell-csi-extensions/volumeGroupSnapshot v1.8.1 h1:W0UcLCZ8qyJ+NBRDfrZefN+fMs2i73ydkIsq6RjP7bM= +github.com/dell/dell-csi-extensions/volumeGroupSnapshot v1.8.1/go.mod h1:C4Ji1GCEayZ733hcHkvM6JDcboWJjk43H7xp30a/trc= +github.com/dell/gocsi v1.15.1-0.20250930113136-950340479c4e h1:CXHUjhf0THQ98jO+B+TPW6nicCmAY1OzOhEpsAVnYr4= +github.com/dell/gocsi v1.15.1-0.20250930113136-950340479c4e/go.mod h1:/e1SRxCK9YOpEFRruMG3kEY7d1NXM+p19z5/a/+IzUo= +github.com/dell/gofsutil v1.20.1-0.20250930113120-64ce760f715a h1:9iGCZ6Rhc6eF3pj4AenzCjMOQmJsJONH20qfKdBvnug= +github.com/dell/gofsutil v1.20.1-0.20250930113120-64ce760f715a/go.mod h1:x75XHnNGJqbu1Rbvk0BGe4m7elwa9c1l18ZcMz1mPDc= +github.com/dell/goscaleio v1.21.1-0.20250930120611-ef836f9c4afa h1:ai7bIuGrBZbOT7pfapeUEnUS7BbajkwHXohEuMQxILo= +github.com/dell/goscaleio v1.21.1-0.20250930120611-ef836f9c4afa/go.mod h1:yQATNf554Q8PlhvEmK1FxSUnc3n0NvGOaWJx7neHyXM= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -100,20 +114,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dell/dell-csi-extensions/common v1.9.0 h1:H1NXBYlJZ+XTCe4tSXo94Lvg8HD2wgt6ywql3kVrG34= -github.com/dell/dell-csi-extensions/common v1.9.0/go.mod h1:DA9lX2BX3fdshR40IaXfokDrIKo9a32QShcTlAqhf+c= -github.com/dell/dell-csi-extensions/podmon v1.9.0 h1:AYE3n6o6jB3Sh0uce65JPmir3FPxvqSW/21/bGqRhvY= -github.com/dell/dell-csi-extensions/podmon v1.9.0/go.mod h1:jz846RAruY/m25uBbZVYcr8vp7wmKakbjOuUBwpY0Ls= -github.com/dell/dell-csi-extensions/replication v1.12.0 h1:jOdaZsoGHWX9SsqgH+2v9cIJSAVLF1SnKKHtdiF5Ywc= -github.com/dell/dell-csi-extensions/replication v1.12.0/go.mod h1:nyPBfbMOpboVI/cYLOFJhv0LADGSvHwDcF4AxZau/go= -github.com/dell/dell-csi-extensions/volumeGroupSnapshot v1.8.1 h1:NnS/P2OpwMlQ70fwls/KVVfe8z8op4b7nXArv8CDsqk= -github.com/dell/dell-csi-extensions/volumeGroupSnapshot v1.8.1/go.mod h1:rlJGlmp1NI8gU52HYKY2cy13TbSWvt9p5VAG2RLbkQs= -github.com/dell/gocsi v1.15.0 h1:SXBtiNTb3iTHms4WRoewwdJaItOY8XaaxBjkTYy8o5Q= -github.com/dell/gocsi v1.15.0/go.mod h1:u8+NcCB2rWr79Dx63GWUo3TsAJj/RSlRoimTrp6BZiM= -github.com/dell/gofsutil v1.20.0 h1:jkQrOb4sSxEUcPTAbyLBABMBf+7vBC6g+yzxTGb0Ozw= -github.com/dell/gofsutil v1.20.0/go.mod h1:kKFZSYY0tF5lx/U6UhSAqLxKnNESd0hT4gJ4PlYXSB8= -github.com/dell/goscaleio v1.21.0 h1:VSBivlOP4VCoSiY4LMWLx2gVZbCvGwG0CVl5e6BjTtM= -github.com/dell/goscaleio v1.21.0/go.mod h1:YIENxDFggvqwu8defNMPgpdlM6rmhDTDrdLe7T9KZlM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= @@ -388,8 +388,8 @@ github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY= github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= -github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= 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= @@ -435,8 +435,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo= -github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -449,27 +449,27 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= -github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= -github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= -github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.20.0 h1:zrxIyR3RQIOsarIrgL8+sAvALXul9jeEPa06Y0Ph6vY= -github.com/spf13/viper v1.20.0/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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= @@ -486,8 +486,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8= -github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +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/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= @@ -522,16 +522,16 @@ 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.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -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/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 h1:rgMkmiGfix9vFJDcDi1PK8WEQP4FLQwLDfhp5ZLpFeE= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -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 v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60= @@ -539,19 +539,19 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqx go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -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/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -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 v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -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/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -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.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= @@ -580,8 +580,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -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/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -645,15 +645,15 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= -golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= +golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= +golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= 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= @@ -707,13 +707,13 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= -golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -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/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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= @@ -721,8 +721,8 @@ 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.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= 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= @@ -766,8 +766,8 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs 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.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= 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= @@ -811,10 +811,10 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= 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= @@ -827,8 +827,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= -google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= 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= @@ -841,8 +841,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= 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= diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..6e611c28 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,7 @@ +site_name: 'csi-powerflex' +site_description: 'csi-powerflex Documentation.' +docs_dir: docs +plugins: + - techdocs-core +theme: + name: material diff --git a/service/controller.go b/service/controller.go index 21340759..9c031daf 100644 --- a/service/controller.go +++ b/service/controller.go @@ -34,9 +34,9 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/wrapperspb" - csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/dell/goscaleio" siotypes "github.com/dell/goscaleio/types/v1" + csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/sirupsen/logrus" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -1328,9 +1328,11 @@ func (s *service) DeleteVolume( return &csi.DeleteVolumeResponse{}, nil } +var CreateKubeClientSet = k8sutils.CreateKubeClientSet + func (s *service) findNetworkInterfaceIPs() ([]string, error) { if K8sClientset == nil { - err := k8sutils.CreateKubeClientSet() + err := CreateKubeClientSet() if err != nil { Log.Errorf("Failed to create Kubernetes clientset: %v", err) return []string{}, err diff --git a/service/controller_test.go b/service/controller_test.go index 3fa6f13d..a21e446f 100644 --- a/service/controller_test.go +++ b/service/controller_test.go @@ -18,9 +18,9 @@ import ( "sync" "testing" - csi "github.com/container-storage-interface/spec/lib/go/csi" sio "github.com/dell/goscaleio" siotypes "github.com/dell/goscaleio/types/v1" + csi "github.com/container-storage-interface/spec/lib/go/csi" "golang.org/x/net/context" ) diff --git a/service/csi_extension_server.go b/service/csi_extension_server.go index 8c32fa78..fa42b2f0 100644 --- a/service/csi_extension_server.go +++ b/service/csi_extension_server.go @@ -19,11 +19,11 @@ import ( "strconv" "strings" - csi "github.com/container-storage-interface/spec/lib/go/csi" podmon "github.com/dell/dell-csi-extensions/podmon" volumeGroupSnapshot "github.com/dell/dell-csi-extensions/volumeGroupSnapshot" sio "github.com/dell/goscaleio" siotypes "github.com/dell/goscaleio/types/v1" + csi "github.com/container-storage-interface/spec/lib/go/csi" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) diff --git a/service/ephemeral.go b/service/ephemeral.go index 2f811ed2..f160799e 100644 --- a/service/ephemeral.go +++ b/service/ephemeral.go @@ -16,6 +16,7 @@ package service import ( "context" "errors" + "fmt" "os" "path/filepath" "regexp" @@ -141,7 +142,7 @@ func (s *service) ephemeralNodePublish( // Create lockfile to map vol ID from request to volID returned by CreateVolume // will also be used to determine if volume is ephemeral in NodeUnpublish - errLock := os.MkdirAll(ephemeralStagingMountPath+volID, 0o750) + errLock := os.MkdirAll(filepath.Clean(filepath.Join(ephemeralStagingMountPath, volID)), 0o750) if errLock != nil { return nil, errLock } @@ -222,7 +223,7 @@ func (s *service) ephemeralNodeUnpublish( return status.Error(codes.InvalidArgument, "volume ID is required") } - lockFile := ephemeralStagingMountPath + volID + "/id" + lockFile := filepath.Clean(filepath.Join(ephemeralStagingMountPath, volID, "id")) //while a file is being read from, it's a file determined by volID and is written by the driver /* #nosec G304 */ @@ -239,7 +240,7 @@ func (s *service) ephemeralNodeUnpublish( NodeId: NodeID, }) if err != nil { - return errors.New("Inline ephemeral controller unpublish failed") + return fmt.Errorf("Inline ephemeral controller unpublish failed: %v: ", err) } _, err = s.DeleteVolume(ctx, &csi.DeleteVolumeRequest{ @@ -248,9 +249,9 @@ func (s *service) ephemeralNodeUnpublish( if err != nil { return err } - err = os.RemoveAll(ephemeralStagingMountPath + volID) + err = os.RemoveAll(filepath.Clean(filepath.Join(ephemeralStagingMountPath, volID))) if err != nil { - return errors.New("failed to cleanup lock files") + return fmt.Errorf("failed to cleanup lock files: %v", err) } return nil diff --git a/service/features/ephemeral.feature b/service/features/ephemeral.feature index 3f4b071a..b0f32733 100644 --- a/service/features/ephemeral.feature +++ b/service/features/ephemeral.feature @@ -42,7 +42,7 @@ Scenario: Controller Unpublish Ephemeral Volume Fails And I call NodePublishVolume "SDC_GUID" And I induce error "BadVolIDError" And I call NodeUnpublishVolume "SDC_GUID" - Then the error contains "Inline ephemeral controller unpublish failed" + And no error was received Scenario Outline: Node publish and unpublish ephemeral volume Given a VxFlexOS service diff --git a/service/identity.go b/service/identity.go index 052a92d8..0b23a6f8 100644 --- a/service/identity.go +++ b/service/identity.go @@ -19,8 +19,8 @@ import ( "golang.org/x/net/context" - csi "github.com/container-storage-interface/spec/lib/go/csi" commonext "github.com/dell/dell-csi-extensions/common" + csi "github.com/container-storage-interface/spec/lib/go/csi" "google.golang.org/protobuf/types/known/wrapperspb" "github.com/dell/csi-vxflexos/v2/core" diff --git a/service/mount.go b/service/mount.go index d7f2aa15..f14bbef4 100644 --- a/service/mount.go +++ b/service/mount.go @@ -21,8 +21,8 @@ import ( "strings" "time" - "github.com/container-storage-interface/spec/lib/go/csi" "github.com/dell/gofsutil" + "github.com/container-storage-interface/spec/lib/go/csi" "github.com/google/uuid" "github.com/sirupsen/logrus" "google.golang.org/grpc/codes" @@ -30,7 +30,7 @@ import ( ) // Variables set only for unit testing. -var unitTestEmulateBlockDevice bool +var unitTestEmulateBlockDevice = false // Variables populdated from the environment var mountAllowRWOMultiPodAccess bool @@ -56,17 +56,16 @@ func GetDevice(path string) (*Device, error) { return nil, err } - // TODO does EvalSymlinks throw error if link is to non- - // existent file? assuming so by masking error below - ds, _ := os.Stat(d) - dm := ds.Mode() - if unitTestEmulateBlockDevice { - // For unit testing only, emulate a block device on windows - dm = dm | os.ModeDevice - } - if dm&os.ModeDevice == 0 { - return nil, fmt.Errorf( - "%s is not a block device", path) + if !unitTestEmulateBlockDevice { + // TODO does EvalSymlinks throw error if link is to non- + // existent file? assuming so by masking error below + ds, _ := os.Stat(d) + dm := ds.Mode() + + if dm&os.ModeDevice == 0 { + return nil, fmt.Errorf( + "%s is not a block device", path) + } } return &Device{ diff --git a/service/node.go b/service/node.go index 55ca6529..2c151e56 100644 --- a/service/node.go +++ b/service/node.go @@ -20,14 +20,15 @@ import ( "net" "os" "os/exec" + "path/filepath" "strconv" "strings" "time" - csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/dell/gofsutil" "github.com/dell/goscaleio" siotypes "github.com/dell/goscaleio/types/v1" + csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/sirupsen/logrus" "golang.org/x/net/context" "google.golang.org/grpc/codes" @@ -260,7 +261,7 @@ func (s *service) NodeUnpublishVolume( isNFS := strings.Contains(csiVolID, "/") var ephemeralVolume bool // For ephemeral volumes, kubernetes gives us an internal ID, so we need to use the lockfile to find the Powerflex ID this is mapped to. - lockFile := ephemeralStagingMountPath + csiVolID + "/id" + lockFile := filepath.Clean(filepath.Join(ephemeralStagingMountPath, csiVolID, "id")) if s.fileExist(lockFile) { ephemeralVolume = true //while a file is being read from, it's a file determined by volID and is written by the driver diff --git a/service/replication.go b/service/replication.go index 1ede99c4..9842792f 100644 --- a/service/replication.go +++ b/service/replication.go @@ -25,9 +25,9 @@ import ( "strings" "time" - csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/dell/dell-csi-extensions/replication" "github.com/dell/goscaleio" + csi "github.com/container-storage-interface/spec/lib/go/csi" "golang.org/x/net/context" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" diff --git a/service/service.go b/service/service.go index 0b4df4f2..7268e223 100644 --- a/service/service.go +++ b/service/service.go @@ -29,8 +29,6 @@ import ( "sync" "time" - "github.com/apparentlymart/go-cidr/cidr" - "github.com/container-storage-interface/spec/lib/go/csi" "github.com/dell/csi-vxflexos/v2/core" "github.com/dell/csi-vxflexos/v2/k8sutils" "github.com/dell/dell-csi-extensions/podmon" @@ -41,6 +39,8 @@ import ( "github.com/dell/goscaleio" sio "github.com/dell/goscaleio" siotypes "github.com/dell/goscaleio/types/v1" + "github.com/apparentlymart/go-cidr/cidr" + "github.com/container-storage-interface/spec/lib/go/csi" "github.com/fsnotify/fsnotify" "github.com/sirupsen/logrus" "github.com/spf13/viper" @@ -1911,7 +1911,7 @@ func (s *service) SetPodZoneLabel(ctx context.Context, zoneLabel map[string]stri func (s *service) GetNodeUID(_ context.Context) (string, error) { if K8sClientset == nil { - err := k8sutils.CreateKubeClientSet() + err := CreateKubeClientSet() if err != nil { return "", status.Error(codes.Internal, GetMessage("init client failed with error: %v", err)) } diff --git a/service/service_test.go b/service/service_test.go index 54a3acce..552923f8 100644 --- a/service/service_test.go +++ b/service/service_test.go @@ -17,29 +17,39 @@ import ( "context" "fmt" "net/http" - "os" + "path/filepath" "sync" "testing" "time" - "github.com/cucumber/godog" sio "github.com/dell/goscaleio" siotypes "github.com/dell/goscaleio/types/v1" + "github.com/cucumber/godog" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" ) -func TestMain(m *testing.M) { +func TestFeatures(t *testing.T) { defaultGetTargetPathPrefix := getTargetPathPrefix + defaultEphemeralStagingMountPath := ephemeralStagingMountPath + unitTestEmulateBlockDevice = true defer func() { getTargetPathPrefix = defaultGetTargetPathPrefix + ephemeralStagingMountPath = defaultEphemeralStagingMountPath + unitTestEmulateBlockDevice = false }() + tempTargetPathPrefix := t.TempDir() getTargetPathPrefix = func() string { - return "test/" + return tempTargetPathPrefix } + nodePublishBlockDevicePath = filepath.Join(tempTargetPathPrefix, nodePublishBlockDevicePath) + nodePublishAltBlockDevPath = filepath.Join(tempTargetPathPrefix, nodePublishAltBlockDevPath) + nodePublishEphemDevPath = filepath.Join(tempTargetPathPrefix, nodePublishEphemDevPath) + ephemeralStagingMountPath = tempTargetPathPrefix + server := &http.Server{ Addr: "localhost:6060", ReadHeaderTimeout: 60 * time.Second, @@ -60,17 +70,9 @@ func TestMain(m *testing.M) { Options: &opts, }.Run() - fmt.Printf("godog finished\n") - - if st := m.Run(); st > status { - fmt.Printf("godog.TestSuite status %d\n", status) - fmt.Printf("m.Run status %d\n", st) - status = st + if status > 0 { + t.Error("godog tests failed") } - - fmt.Printf("status %d\n", status) - - os.Exit(status) } func Test_service_SetPodZoneLabel(t *testing.T) { diff --git a/service/service_unit_test.go b/service/service_unit_test.go index a5b21f9f..606e8a2c 100644 --- a/service/service_unit_test.go +++ b/service/service_unit_test.go @@ -25,8 +25,8 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" - csi "github.com/container-storage-interface/spec/lib/go/csi" siotypes "github.com/dell/goscaleio/types/v1" + csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/stretchr/testify/assert" ) @@ -602,15 +602,19 @@ func TestGetZoneKeyLabelFromSecret(t *testing.T) { func TestFindNetworkInterfaceIPs(t *testing.T) { tests := []struct { - name string - expectedError string - client kubernetes.Interface - configMapData map[string]string - createConfigMap func(map[string]string, kubernetes.Interface) + name string + expectedError string + client kubernetes.Interface + createK8sClientSet func(kubeConfig ...string) error + configMapData map[string]string + createConfigMap func(map[string]string, kubernetes.Interface) }{ { name: "Error getting K8sClient", expectedError: "unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined", + createK8sClientSet: func(_ ...string) error { + return fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") + }, client: nil, configMapData: nil, createConfigMap: func(map[string]string, kubernetes.Interface) { @@ -696,6 +700,16 @@ func TestFindNetworkInterfaceIPs(t *testing.T) { for _, tt := range tests { s := &service{} t.Run(tt.name, func(t *testing.T) { + defaultCreateKubeClientSet := CreateKubeClientSet + if tt.createK8sClientSet != nil { + CreateKubeClientSet = tt.createK8sClientSet + } + defer func() { + if tt.createK8sClientSet != nil { + CreateKubeClientSet = defaultCreateKubeClientSet + } + }() + K8sClientset = tt.client tt.createConfigMap(tt.configMapData, tt.client) _, err := s.findNetworkInterfaceIPs() diff --git a/service/step_defs_test.go b/service/step_defs_test.go index b94fbb0e..88f05954 100644 --- a/service/step_defs_test.go +++ b/service/step_defs_test.go @@ -26,6 +26,7 @@ import ( "runtime" "strconv" "strings" + "testing" "time" "github.com/container-storage-interface/spec/lib/go/csi" @@ -35,7 +36,6 @@ import ( "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/wrapperspb" - "github.com/cucumber/godog" "github.com/dell/dell-csi-extensions/podmon" "github.com/dell/dell-csi-extensions/replication" volGroupSnap "github.com/dell/dell-csi-extensions/volumeGroupSnapshot" @@ -43,6 +43,7 @@ import ( "github.com/dell/gofsutil" "github.com/dell/goscaleio" types "github.com/dell/goscaleio/types/v1" + "github.com/cucumber/godog" "google.golang.org/grpc/metadata" v1 "k8s.io/api/core/v1" storage "k8s.io/api/storage/v1" @@ -51,45 +52,49 @@ import ( ) const ( - testBaseDir = "test" - arrayID = "14dbbf5617523654" - arrayID2 = "15dbbf5617523655" - badVolumeID = "Totally Fake ID" - badCsiVolumeID = "ffff-f250" - goodVolumeID = "111" - badVolumeID2 = "9999" - badVolumeID3 = "99" - goodVolumeName = "vol1" - altVolumeID = "222" - goodNodeID = "9E56672F-2F4B-4A42-BFF4-88B6846FBFDA" - goodArrayConfig = "./features/array-config/config" - goodDriverConfig = "./features/driver-config/logConfig.yaml" - altNodeID = "7E012974-3651-4DCB-9954-25975A3C3CDF" - datafile = "test/00000000-1111-0000-0000-000000000000/datafile" - datadir = "test/00000000-1111-0000-0000-000000000000/datadir" - badtarget = "nonexistent/target/path" - altdatadir = "test/00000000-1111-0000-0000-000000000000/altdatadir" - altdatafile = "test/00000000-1111-0000-0000-000000000000/altdatafile" - sdcVolume1 = "d0f055a700000000" - sdcVolume2 = "c0f055aa00000000" - sdcVolume0 = "0000000000000000" - ephemVolumeSDC = "6373692d64306630353561373030303030303030" - mdmID = "14dbbf5617523654" - mdmIDEphem = "14dbbf5617523654" - mdmID1 = "24dbbf5617523654" - mdmID2 = "34dbbf5617523654" - badMdmID = "9999" - nodePublishBlockDevicePath = "test/dev/scinia" - nodePublishAltBlockDevPath = "test/dev/scinib" - nodePublishEphemDevPath = "test/dev/scinic" - nodePublishSymlinkDir = "test/dev/disk/by-id" - goodSnapID = "444" - altSnapID = "555" + testBaseDir = "test" + arrayID = "14dbbf5617523654" + arrayID2 = "15dbbf5617523655" + badVolumeID = "999999" + badCsiVolumeID = "ffff-f250" + goodVolumeID = "111" + badVolumeID2 = "9999" + badVolumeID3 = "99" + goodVolumeName = "vol1" + altVolumeID = "222" + goodNodeID = "9E56672F-2F4B-4A42-BFF4-88B6846FBFDA" + goodArrayConfig = "./features/array-config/config" + goodDriverConfig = "./features/driver-config/logConfig.yaml" + altNodeID = "7E012974-3651-4DCB-9954-25975A3C3CDF" + datafile = "test/00000000-1111-0000-0000-000000000000/datafile" + datadir = "test/00000000-1111-0000-0000-000000000000/datadir" + badtarget = "nonexistent/target/path" + altdatadir = "test/00000000-1111-0000-0000-000000000000/altdatadir" + altdatafile = "test/00000000-1111-0000-0000-000000000000/altdatafile" + sdcVolume1 = "d0f055a700000000" + sdcVolume2 = "c0f055aa00000000" + sdcVolume0 = "0000000000000000" + ephemVolumeSDC = "6373692d64306630353561373030303030303030" + mdmID = "14dbbf5617523654" + mdmIDEphem = "14dbbf5617523654" + mdmID1 = "24dbbf5617523654" + mdmID2 = "34dbbf5617523654" + badMdmID = "9999" + nodePublishSymlinkDir = "test/dev/disk/by-id" + goodSnapID = "444" + altSnapID = "555" +) + +var ( + nodePublishBlockDevicePath = "scinia" + nodePublishAltBlockDevPath = "scinib" + nodePublishEphemDevPath = "scinic" ) var setupGetSystemIDtoFail bool type feature struct { + t *testing.T nGoRoutines int server *httptest.Server server2 *httptest.Server @@ -1230,7 +1235,6 @@ func (f *feature) iInduceError(errtype string) error { return err } case "NoBlockDevForNodePublish": - unitTestEmulateBlockDevice = false cmd := exec.Command("rm", nodePublishBlockDevicePath) _, err := cmd.CombinedOutput() if err != nil { @@ -1263,11 +1267,20 @@ func (f *feature) iInduceError(errtype string) error { fmt.Printf("Couldn't make: %s\n", datadir+"/"+sdcVolume1) } case "NodePublishPrivateTargetAlreadyMounted": - cmd := exec.Command("mknod", nodePublishAltBlockDevPath, "b", "0", "0") - _, err := cmd.CombinedOutput() + file, err := os.Create(nodePublishAltBlockDevPath) if err != nil { - fmt.Printf("Couldn't create block dev: %s\n", nodePublishAltBlockDevPath) + fmt.Printf("couldn't create file: %s: %v\n", nodePublishAltBlockDevPath, err) + } + + defer func() { + file.Close() + }() + + // Optionally set permissions to mimic a device node + if err := os.Chmod(nodePublishAltBlockDevPath, 0o750); err != nil { + fmt.Printf("Failed to set permissions on mock device file %s: %v\n", nodePublishAltBlockDevPath, err) } + err = os.MkdirAll("features/"+sdcVolume1, 0o777) if err != nil { fmt.Printf("Couldn't make: %s\n", datadir+"/"+sdcVolume1) @@ -2019,6 +2032,15 @@ func (f *feature) iCallGetNodeLabelsWithInvalidNode() error { } func (f *feature) iCallGetNodeLabelsWithUnsetKubernetesClient() error { + defaultKubernetesHost := os.Getenv("KUBERNETES_SERVICE_HOST") + defaultKubernetesPort := os.Getenv("KUBERNETES_SERVICE_PORT") + defer func() { + os.Setenv("KUBERNETES_SERVICE_HOST", defaultKubernetesHost) + os.Setenv("KUBERNETES_SERVICE_PORT", defaultKubernetesPort) + }() + + os.Unsetenv("KUBERNETES_SERVICE_HOST") + os.Unsetenv("KUBERNETES_SERVICE_PORT") K8sClientset = nil ctx := context.Background() f.nodeLabels, f.err = f.service.GetNodeLabels(ctx) @@ -2033,6 +2055,11 @@ func (f *feature) iCallGetNodeUIDWithInvalidNode() error { func (f *feature) iCallGetNodeUIDWithUnsetKubernetesClient() error { K8sClientset = nil + defaultCreateK8sClientSet := CreateKubeClientSet + defer func() { CreateKubeClientSet = defaultCreateK8sClientSet }() + CreateKubeClientSet = func(_ ...string) error { + return fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") + } ctx := context.Background() f.nodeUID, f.err = f.service.GetNodeUID(ctx) return nil @@ -2611,17 +2638,24 @@ func (f *feature) aControllerPublishedEphemeralVolume() error { _, err = os.Stat(nodePublishEphemDevPath) _, err2 := os.Stat(nodePublishSymlinkDir + "/emc-vol" + "-" + mdmIDEphem + "-" + ephemVolumeSDC) if err != nil || err2 != nil { - cmd := exec.Command("mknod", nodePublishEphemDevPath, "b", "0", "0") - output, err := cmd.CombinedOutput() + file, err := os.Create(nodePublishEphemDevPath) if err != nil { - fmt.Printf("scinic: %s\n", err.Error()) + fmt.Printf("couldn't create file: %s: %v\n", nodePublishEphemDevPath, err) + } + + defer func() { + file.Close() + }() + + // Optionally set permissions to mimic a device node + if err := os.Chmod(nodePublishEphemDevPath, 0o750); err != nil { + fmt.Printf("Failed to set permissions on mock device file %s: %v\n", nodePublishEphemDevPath, err) } - fmt.Printf("mknod output: %s\n", output) // Make the symlink - cmdstring := fmt.Sprintf("cd %s; ln -s ../../scinic emc-vol-%s-%s", nodePublishSymlinkDir, mdmIDEphem, ephemVolumeSDC) + cmdstring := fmt.Sprintf("cd %s; ln -s %s emc-vol-%s-%s", nodePublishSymlinkDir, nodePublishEphemDevPath, mdmIDEphem, ephemVolumeSDC) cmd = exec.Command("sh", "-c", cmdstring) - output, err = cmd.CombinedOutput() + output, err := cmd.CombinedOutput() fmt.Printf("symlink output: %s\n", output) if err != nil { fmt.Printf("link: %s\n", err.Error()) @@ -2653,8 +2687,6 @@ func (f *feature) aControllerPublishedEphemeralVolume() error { goscaleio.FSDevDirectoryPrefix = "test" // Empty WindowsMounts in gofsutil gofsutil.GOFSMockMounts = gofsutil.GOFSMockMounts[:0] - // Set variables in mount for unit testing - unitTestEmulateBlockDevice = true return nil } @@ -2689,25 +2721,47 @@ func (f *feature) controllerPublishVolume() { fmt.Printf("removed private staging directory\n") } + // remove the devices so that they can be re-created for each test + dir, err := os.ReadDir(getTargetPathPrefix()) + if err != nil { + fmt.Printf("couldn't read device directory: %s: %v\n", getTargetPathPrefix(), err) + } + for _, d := range dir { + os.RemoveAll(filepath.Join(getTargetPathPrefix(), d.Name())) + } + // Make the block device _, err = os.Stat(nodePublishBlockDevicePath) if err != nil { - cmd := exec.Command("mknod", nodePublishBlockDevicePath, "b", "0", "0") - output, err := cmd.CombinedOutput() + file, err := os.Create(nodePublishBlockDevicePath) if err != nil { - fmt.Printf("scinia: %s\n", err.Error()) + fmt.Printf("couldn't create file: %s: %v\n", nodePublishBlockDevicePath, err) + } + + defer func() { + file.Close() + }() + + // Optionally set permissions to mimic a device node + if err := os.Chmod(nodePublishBlockDevicePath, 0o750); err != nil { + fmt.Printf("Failed to set permissions on mock device file %s: %v\n", nodePublishBlockDevicePath, err) } - fmt.Printf("mknod output: %s\n", output) // Make the symlink - cmdstring := fmt.Sprintf("cd %s; ln -s ../../scinia emc-vol-%s-%s", nodePublishSymlinkDir, mdmID, sdcVolume1) + cmdstring := fmt.Sprintf("cd %s; ln -s %s emc-vol-%s-%s", nodePublishSymlinkDir, nodePublishBlockDevicePath, mdmID, sdcVolume1) cmd = exec.Command("sh", "-c", cmdstring) - output, err = cmd.CombinedOutput() + output, err := cmd.CombinedOutput() fmt.Printf("symlink output: %s\n", output) if err != nil { fmt.Printf("link: %s\n", err.Error()) err = nil } + + linkTarget, err := os.Readlink(fmt.Sprintf("%s/emc-vol-%s-%s", nodePublishSymlinkDir, mdmID, sdcVolume1)) + if err != nil { + fmt.Printf("Symlink not created correctly: %v\n", err) + } + fmt.Printf("Symlink points to: %s\n", linkTarget) } // Make the target directory if required @@ -2734,8 +2788,6 @@ func (f *feature) controllerPublishVolume() { goscaleio.FSDevDirectoryPrefix = "test" // Empty WindowsMounts in gofsutil gofsutil.GOFSMockMounts = gofsutil.GOFSMockMounts[:0] - // Set variables in mount for unit testing - unitTestEmulateBlockDevice = true } func (f *feature) twoIdenticalVolumesOnTwoDifferentSystems() error { @@ -2762,7 +2814,7 @@ func (f *feature) twoIdenticalVolumesOnTwoDifferentSystems() error { } func (f *feature) iCreateFalseEphemeralID() error { - fakeEphemeralIDFolder := ephemeralStagingMountPath + mdmIDEphem + fakeEphemeralIDFolder := filepath.Join(ephemeralStagingMountPath, mdmIDEphem) _, err := os.Stat(fakeEphemeralIDFolder) if err != nil { @@ -3118,7 +3170,7 @@ func (f *feature) iCallMountValidateVolCapabilities() error { func (f *feature) iCallCleanupPrivateTargetForErrors() error { gofsutil.GOFSMock.InduceDevMountsError = true - sysdevice, _ := GetDevice("test/dev/scinia") + sysdevice, _ := GetDevice(nodePublishBlockDevicePath) err := cleanupPrivateTarget(sysdevice, "1", "features/d0f055a700000000") if err != nil { fmt.Printf("Cleanupprivatetarget getDevice error : %s\n", err.Error()) @@ -3148,7 +3200,7 @@ func (f *feature) iCallCleanupPrivateTargetForErrors() error { } func (f *feature) iCallCleanupPrivateTarget() error { - sysdevice, terr := GetDevice("test/dev/scinia") + sysdevice, terr := GetDevice(nodePublishBlockDevicePath) if terr != nil { return terr } @@ -3176,8 +3228,6 @@ func (f *feature) iCallUnmountAndDeleteTarget() error { } func (f *feature) iCallEphemeralNodePublish() error { - save := ephemeralStagingMountPath - ephemeralStagingMountPath = "/tmp" header := metadata.New(map[string]string{"csi.requestid": "1"}) ctx := metadata.NewIncomingContext(context.Background(), header) req := new(csi.NodePublishVolumeRequest) @@ -3190,7 +3240,6 @@ func (f *feature) iCallEphemeralNodePublish() error { f.err = err } } - ephemeralStagingMountPath = save return nil } @@ -3226,6 +3275,9 @@ func (f *feature) iCallNodeUnpublishVolume(arg1 string) error { req.VolumeId = f.nodePublishVolumeRequest.VolumeId req.TargetPath = f.nodePublishVolumeRequest.TargetPath fmt.Printf("Calling NodeUnpublishVolume\n") + if stepHandlersErrors.BadVolIDError { + req.VolumeId = badVolumeID + } _, err := f.service.NodeUnpublishVolume(ctx, req) if err != nil { fmt.Printf("NodeUnpublishVolume failed: %s\n", err.Error()) @@ -3259,7 +3311,7 @@ func (f *feature) thereIsMount(path string) { split := strings.Split(path, ",") for _, p := range split { gofsutil.GOFSMockMounts = append(gofsutil.GOFSMockMounts, gofsutil.Info{ - Device: "test/dev/scinia", + Device: nodePublishBlockDevicePath, Path: p, }) } @@ -3546,7 +3598,6 @@ func (f *feature) aCorrectNodeGetVolumeStatsResponse() error { func (f *feature) iCallNodeUnstageVolumeWith(errStr string) error { // Save the ephemeralStagingMountPath to restore below - ephemeralPath := ephemeralStagingMountPath header := metadata.New(map[string]string{"csi.requestid": "1"}) if errStr == "NoRequestID" { header = metadata.New(map[string]string{"csi.requestid": ""}) @@ -3567,14 +3618,13 @@ func (f *feature) iCallNodeUnstageVolumeWith(errStr string) error { } if errStr == "EphemeralVolume" { // Create an ephemeral volume id - ephemeralStagingMountPath = "test/" - err := os.MkdirAll("test"+"/"+goodVolumeID+"/id", 0o777) + // ephemeralStagingMountPath = "test/" + err := os.MkdirAll(ephemeralStagingMountPath+"/"+goodVolumeID+"/id", 0o777) if err != nil { return err } } _, f.err = f.service.NodeUnstageVolume(ctx, req) - ephemeralStagingMountPath = ephemeralPath os.Remove("test" + "/" + goodVolumeID + "/id") return nil } diff --git a/test/e2e/e2e.go b/test/e2e/e2e.go index d689a516..409fc60e 100644 --- a/test/e2e/e2e.go +++ b/test/e2e/e2e.go @@ -24,8 +24,8 @@ import ( "strings" "time" - "github.com/cucumber/godog" "github.com/dell/csi-vxflexos/v2/service" + "github.com/cucumber/godog" v1 "k8s.io/api/apps/v1" v1Core "k8s.io/api/core/v1" v1Storage "k8s.io/api/storage/v1" diff --git a/test/integration/integration_test.go b/test/integration/integration_test.go index adc76992..00dd5819 100644 --- a/test/integration/integration_test.go +++ b/test/integration/integration_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" - csi "github.com/container-storage-interface/spec/lib/go/csi" - "github.com/cucumber/godog" "github.com/dell/csi-vxflexos/v2/provider" "github.com/dell/csi-vxflexos/v2/service" csiutils "github.com/dell/gocsi/utils/csi" + csi "github.com/container-storage-interface/spec/lib/go/csi" + "github.com/cucumber/godog" "google.golang.org/grpc" ) diff --git a/test/integration/step_defs_test.go b/test/integration/step_defs_test.go index a488f783..11ff561c 100644 --- a/test/integration/step_defs_test.go +++ b/test/integration/step_defs_test.go @@ -47,10 +47,10 @@ import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" - csi "github.com/container-storage-interface/spec/lib/go/csi" - "github.com/cucumber/godog" csiext "github.com/dell/dell-csi-extensions/podmon" "github.com/dell/goscaleio" + csi "github.com/container-storage-interface/spec/lib/go/csi" + "github.com/cucumber/godog" volGroupSnap "github.com/dell/dell-csi-extensions/volumeGroupSnapshot" )