mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-01-18 02:39:30 +00:00
Merge pull request #285 from red-hat-storage/sync_us--devel
Syncing latest changes from upstream devel for ceph-csi
This commit is contained in:
commit
b01dec5183
14
.github/workflows/pull-request-commentor.yaml
vendored
14
.github/workflows/pull-request-commentor.yaml
vendored
@ -18,24 +18,14 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
branch: [release-v3.9, release-v3.10, devel]
|
branch: [release-v3.10, release-v3.11, devel]
|
||||||
k8s: ["1.25", "1.26", "1.27", "1.28", "1.29"]
|
k8s: ["1.26", "1.27", "1.28", "1.29"]
|
||||||
exclude:
|
exclude:
|
||||||
# the next Ceph-CSI version will not be tested with old Kubernetes
|
# the next Ceph-CSI version will not be tested with old Kubernetes
|
||||||
- k8s: "1.26"
|
- k8s: "1.26"
|
||||||
branch: "devel"
|
branch: "devel"
|
||||||
- k8s: "1.25"
|
|
||||||
branch: "devel"
|
|
||||||
- k8s: "1.25"
|
|
||||||
branch: "release-v3.10"
|
|
||||||
|
|
||||||
# Ceph-CSI <= 3.9 was released before Kubernetes 1.28
|
|
||||||
- k8s: "1.28"
|
|
||||||
branch: "release-v3.9"
|
|
||||||
|
|
||||||
# Ceph-CSI <= 3.10 was released before Kubernetes 1.29
|
# Ceph-CSI <= 3.10 was released before Kubernetes 1.29
|
||||||
- k8s: "1.29"
|
|
||||||
branch: "release-v3.9"
|
|
||||||
- k8s: "1.29"
|
- k8s: "1.29"
|
||||||
branch: "release-v3.10"
|
branch: "release-v3.10"
|
||||||
|
|
||||||
|
57
.mergify.yml
57
.mergify.yml
@ -68,22 +68,25 @@ queue_rules:
|
|||||||
- "status-success=ci/centos/upgrade-tests-cephfs"
|
- "status-success=ci/centos/upgrade-tests-cephfs"
|
||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- and:
|
- and:
|
||||||
- base=release-v3.9
|
- base=release-v3.11
|
||||||
- "status-success=codespell"
|
- "status-success=codespell"
|
||||||
- "status-success=multi-arch-build"
|
- "status-success=multi-arch-build"
|
||||||
- "status-success=go-test"
|
- "status-success=go-test"
|
||||||
- "status-success=golangci-lint"
|
- "status-success=golangci-lint"
|
||||||
- "status-success=mod-check"
|
- "status-success=mod-check"
|
||||||
- "status-success=lint-extras"
|
- "status-success=lint-extras"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.25"
|
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.25"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.28"
|
||||||
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.29"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.25"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.28"
|
||||||
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.28"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.29"
|
||||||
- "status-success=ci/centos/upgrade-tests-cephfs"
|
- "status-success=ci/centos/upgrade-tests-cephfs"
|
||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- and:
|
- and:
|
||||||
@ -162,15 +165,15 @@ pull_request_rules:
|
|||||||
- "status-success=golangci-lint"
|
- "status-success=golangci-lint"
|
||||||
- "status-success=mod-check"
|
- "status-success=mod-check"
|
||||||
- "status-success=lint-extras"
|
- "status-success=lint-extras"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.25"
|
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.25"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.28"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.25"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.28"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.28"
|
||||||
- "status-success=ci/centos/upgrade-tests-cephfs"
|
- "status-success=ci/centos/upgrade-tests-cephfs"
|
||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- "status-success=DCO"
|
- "status-success=DCO"
|
||||||
@ -246,7 +249,7 @@ pull_request_rules:
|
|||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- and:
|
- and:
|
||||||
- label!=DNM
|
- label!=DNM
|
||||||
- base=release-v3.10
|
- base=release-v3.11
|
||||||
- "#approved-reviews-by>=2"
|
- "#approved-reviews-by>=2"
|
||||||
- "#changes-requested-reviews-by=0"
|
- "#changes-requested-reviews-by=0"
|
||||||
- "approved-reviews-by=@ceph/ceph-csi-contributors"
|
- "approved-reviews-by=@ceph/ceph-csi-contributors"
|
||||||
@ -262,17 +265,20 @@ pull_request_rules:
|
|||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.28"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.28"
|
||||||
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.29"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.28"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.28"
|
||||||
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.28"
|
- "status-success=ci/centos/mini-e2e/k8s-1.28"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.29"
|
||||||
- "status-success=ci/centos/upgrade-tests-cephfs"
|
- "status-success=ci/centos/upgrade-tests-cephfs"
|
||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- and:
|
- and:
|
||||||
- label!=DNM
|
- label!=DNM
|
||||||
- base=release-v3.9
|
- base=release-v3.10
|
||||||
- "#approved-reviews-by>=2"
|
- "#approved-reviews-by>=2"
|
||||||
- "#changes-requested-reviews-by=0"
|
- "#changes-requested-reviews-by=0"
|
||||||
- "approved-reviews-by=@ceph/ceph-csi-contributors"
|
- "approved-reviews-by=@ceph/ceph-csi-contributors"
|
||||||
@ -284,15 +290,15 @@ pull_request_rules:
|
|||||||
- "status-success=commitlint"
|
- "status-success=commitlint"
|
||||||
- "status-success=mod-check"
|
- "status-success=mod-check"
|
||||||
- "status-success=lint-extras"
|
- "status-success=lint-extras"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.25"
|
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.25"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.28"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.25"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.28"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.28"
|
||||||
- "status-success=ci/centos/upgrade-tests-cephfs"
|
- "status-success=ci/centos/upgrade-tests-cephfs"
|
||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- "status-success=DCO"
|
- "status-success=DCO"
|
||||||
@ -343,15 +349,18 @@ pull_request_rules:
|
|||||||
- "status-success=mod-check"
|
- "status-success=mod-check"
|
||||||
- "status-success=lint-extras"
|
- "status-success=lint-extras"
|
||||||
- "#changes-requested-reviews-by=0"
|
- "#changes-requested-reviews-by=0"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.25"
|
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.26"
|
||||||
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.27"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.25"
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.28"
|
||||||
|
- "status-success=ci/centos/k8s-e2e-external-storage/1.29"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.27"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.25"
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.28"
|
||||||
|
- "status-success=ci/centos/mini-e2e-helm/k8s-1.29"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
- "status-success=ci/centos/mini-e2e/k8s-1.26"
|
||||||
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
- "status-success=ci/centos/mini-e2e/k8s-1.27"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.28"
|
||||||
|
- "status-success=ci/centos/mini-e2e/k8s-1.29"
|
||||||
- "status-success=ci/centos/upgrade-tests-cephfs"
|
- "status-success=ci/centos/upgrade-tests-cephfs"
|
||||||
- "status-success=ci/centos/upgrade-tests-rbd"
|
- "status-success=ci/centos/upgrade-tests-rbd"
|
||||||
- "status-success=DCO"
|
- "status-success=DCO"
|
||||||
@ -385,15 +394,6 @@ pull_request_rules:
|
|||||||
name: default
|
name: default
|
||||||
delete_head_branch: {}
|
delete_head_branch: {}
|
||||||
|
|
||||||
- name: backport patches to release-v3.9 branch
|
|
||||||
conditions:
|
|
||||||
- base=devel
|
|
||||||
- label=backport-to-release-v3.9
|
|
||||||
actions:
|
|
||||||
backport:
|
|
||||||
branches:
|
|
||||||
- release-v3.9
|
|
||||||
|
|
||||||
- name: backport patches to release-v3.10 branch
|
- name: backport patches to release-v3.10 branch
|
||||||
conditions:
|
conditions:
|
||||||
- base=devel
|
- base=devel
|
||||||
@ -403,6 +403,15 @@ pull_request_rules:
|
|||||||
branches:
|
branches:
|
||||||
- release-v3.10
|
- release-v3.10
|
||||||
|
|
||||||
|
- name: backport patches to release-v3.11 branch
|
||||||
|
conditions:
|
||||||
|
- base=devel
|
||||||
|
- label=backport-to-release-v3.11
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- release-v3.11
|
||||||
|
|
||||||
- name: remove outdated approvals on ci/centos
|
- name: remove outdated approvals on ci/centos
|
||||||
conditions:
|
conditions:
|
||||||
- base=ci/centos
|
- base=ci/centos
|
||||||
|
@ -56,8 +56,10 @@ environments.
|
|||||||
|
|
||||||
| Ceph CSI Version | Container Orchestrator Name | Version Tested |
|
| Ceph CSI Version | Container Orchestrator Name | Version Tested |
|
||||||
| -----------------| --------------------------- | -------------------|
|
| -----------------| --------------------------- | -------------------|
|
||||||
|
| v3.11.0 | Kubernetes | v1.26, v1.27, v1.28, v1.29|
|
||||||
|
| v3.10.2 | Kubernetes | v1.26, v1.27, v1.28|
|
||||||
|
| v3.10.1 | Kubernetes | v1.26, v1.27, v1.28|
|
||||||
| v3.10.0 | Kubernetes | v1.26, v1.27, v1.28|
|
| v3.10.0 | Kubernetes | v1.26, v1.27, v1.28|
|
||||||
| v3.9.0 | Kubernetes | v1.25, v1.26, v1.27|
|
|
||||||
|
|
||||||
There is work in progress to make this CO-independent and thus
|
There is work in progress to make this CO-independent and thus
|
||||||
support other orchestration environments (Nomad, Mesos..etc).
|
support other orchestration environments (Nomad, Mesos..etc).
|
||||||
@ -128,11 +130,14 @@ in the Kubernetes documentation.
|
|||||||
| Ceph CSI Release/Branch | Container image name | Image Tag |
|
| Ceph CSI Release/Branch | Container image name | Image Tag |
|
||||||
| ----------------------- | ---------------------------- | --------- |
|
| ----------------------- | ---------------------------- | --------- |
|
||||||
| devel (Branch) | quay.io/cephcsi/cephcsi | canary |
|
| devel (Branch) | quay.io/cephcsi/cephcsi | canary |
|
||||||
|
| v3.11.0 (Release) | quay.io/cephcsi/cephcsi | v3.11.0 |
|
||||||
|
| v3.10.2 (Release) | quay.io/cephcsi/cephcsi | v3.10.2 |
|
||||||
|
| v3.10.1 (Release) | quay.io/cephcsi/cephcsi | v3.10.1 |
|
||||||
| v3.10.0 (Release) | quay.io/cephcsi/cephcsi | v3.10.0 |
|
| v3.10.0 (Release) | quay.io/cephcsi/cephcsi | v3.10.0 |
|
||||||
| v3.9.0 (Release) | quay.io/cephcsi/cephcsi | v3.9.0 |
|
|
||||||
|
|
||||||
| Deprecated Ceph CSI Release/Branch | Container image name | Image Tag |
|
| Deprecated Ceph CSI Release/Branch | Container image name | Image Tag |
|
||||||
| ----------------------- | --------------------------------| --------- |
|
| ----------------------- | --------------------------------| --------- |
|
||||||
|
| v3.9.0 (Release) | quay.io/cephcsi/cephcsi | v3.9.0 |
|
||||||
| v3.8.1 (Release) | quay.io/cephcsi/cephcsi | v3.8.1 |
|
| v3.8.1 (Release) | quay.io/cephcsi/cephcsi | v3.8.1 |
|
||||||
| v3.8.0 (Release) | quay.io/cephcsi/cephcsi | v3.8.0 |
|
| v3.8.0 (Release) | quay.io/cephcsi/cephcsi | v3.8.0 |
|
||||||
| v3.7.2 (Release) | quay.io/cephcsi/cephcsi | v3.7.2 |
|
| v3.7.2 (Release) | quay.io/cephcsi/cephcsi | v3.7.2 |
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
ARG WORK_DIR="/home/src"
|
ARG WORK_DIR="/home/src"
|
||||||
ARG BASE_IMAGE="golang:1.18"
|
ARG BASE_IMAGE="golang:1.21"
|
||||||
|
|
||||||
FROM ${BASE_IMAGE} as builder
|
FROM ${BASE_IMAGE} as builder
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -145,7 +146,7 @@ func main() {
|
|||||||
failedTestFound := false
|
failedTestFound := false
|
||||||
for _, r := range statusList {
|
for _, r := range statusList {
|
||||||
log.Printf("found context %s with status %s\n", r.GetContext(), r.GetState())
|
log.Printf("found context %s with status %s\n", r.GetContext(), r.GetState())
|
||||||
if contains([]string{"failed", "failure"}, r.GetState()) {
|
if slices.Contains([]string{"failed", "failure"}, r.GetState()) {
|
||||||
log.Printf("found failed test %s\n", r.GetContext())
|
log.Printf("found failed test %s\n", r.GetContext())
|
||||||
failedTestFound = true
|
failedTestFound = true
|
||||||
// rebase the pr if it is behind the devel branch.
|
// rebase the pr if it is behind the devel branch.
|
||||||
@ -253,17 +254,6 @@ func (c *retestConfig) checkRetestLimitReached(prNumber int, msg string) (bool,
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// containers check if slice contains string.
|
|
||||||
func contains(s []string, e string) bool {
|
|
||||||
for _, a := range s {
|
|
||||||
if a == e {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// filterStatusesList returns list of unique and recently updated github RepoStatuses.
|
// filterStatusesList returns list of unique and recently updated github RepoStatuses.
|
||||||
// Raw github RepoStatus list may contain duplicate and older statuses.
|
// Raw github RepoStatus list may contain duplicate and older statuses.
|
||||||
func filterStatusList(rawStatusList []*github.RepoStatus) []*github.RepoStatus {
|
func filterStatusList(rawStatusList []*github.RepoStatus) []*github.RepoStatus {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
- [Pre-upgrade considerations](#pre-upgrade-considerations)
|
- [Pre-upgrade considerations](#pre-upgrade-considerations)
|
||||||
- [Snapshot-controller and snapshot crd](#snapshot-controller-and-snapshot-crd)
|
- [Snapshot-controller and snapshot crd](#snapshot-controller-and-snapshot-crd)
|
||||||
- [Upgrading from previous releases](#upgrading-from-previous-releases)
|
- [Upgrading from previous releases](#upgrading-from-previous-releases)
|
||||||
- [Upgrading from v3.9 to v3.10](#upgrading-from-v39-to-v310)
|
- [Upgrading from v3.10 to v3.11](#upgrading-from-v310-to-v311)
|
||||||
- [Upgrading CephFS](#upgrading-cephfs)
|
- [Upgrading CephFS](#upgrading-cephfs)
|
||||||
- [1. Upgrade CephFS Provisioner resources](#1-upgrade-cephfs-provisioner-resources)
|
- [1. Upgrade CephFS Provisioner resources](#1-upgrade-cephfs-provisioner-resources)
|
||||||
- [1.1 Update the CephFS Provisioner RBAC](#11-update-the-cephfs-provisioner-rbac)
|
- [1.1 Update the CephFS Provisioner RBAC](#11-update-the-cephfs-provisioner-rbac)
|
||||||
@ -49,7 +49,7 @@ To avoid this issue in future upgrades, we recommend that you do not use the
|
|||||||
fuse client as of now.
|
fuse client as of now.
|
||||||
|
|
||||||
This guide will walk you through the steps to upgrade the software in a cluster
|
This guide will walk you through the steps to upgrade the software in a cluster
|
||||||
from v3.9 to v3.10
|
from v3.10 to v3.11
|
||||||
|
|
||||||
### Snapshot-controller and snapshot crd
|
### Snapshot-controller and snapshot crd
|
||||||
|
|
||||||
@ -77,8 +77,10 @@ To upgrade from previous releases, refer to the following:
|
|||||||
to upgrade from cephcsi v3.7 to v3.8
|
to upgrade from cephcsi v3.7 to v3.8
|
||||||
- [upgrade-from-v3.8-v3.9](https://github.com/ceph/ceph-csi/blob/v3.9.0/docs/ceph-csi-upgrade.md)
|
- [upgrade-from-v3.8-v3.9](https://github.com/ceph/ceph-csi/blob/v3.9.0/docs/ceph-csi-upgrade.md)
|
||||||
to upgrade from cephcsi v3.8 to v3.9
|
to upgrade from cephcsi v3.8 to v3.9
|
||||||
|
- [upgrade-from-v3.9-v3.10](https://github.com/ceph/ceph-csi/blob/v3.10.0/docs/ceph-csi-upgrade.md)
|
||||||
|
to upgrade from cephcsi v3.9 to v3.10
|
||||||
|
|
||||||
## Upgrading from v3.9 to v3.10
|
## Upgrading from v3.10 to v3.11
|
||||||
|
|
||||||
**Ceph-csi releases from devel are expressly unsupported.** It is strongly
|
**Ceph-csi releases from devel are expressly unsupported.** It is strongly
|
||||||
recommended that you use [official
|
recommended that you use [official
|
||||||
@ -88,19 +90,19 @@ that will not be supported in the official releases. Builds from the devel
|
|||||||
branch can have functionality changed and even removed at any time without
|
branch can have functionality changed and even removed at any time without
|
||||||
compatibility support and without prior notice.
|
compatibility support and without prior notice.
|
||||||
|
|
||||||
**Also, we do not recommend any direct upgrades to 3.10 except from 3.9 to 3.10.**
|
**Also, we do not recommend any direct upgrades to 3.11 except from 3.10 to 3.11.**
|
||||||
For example, upgrading from 3.8 to 3.10 is not recommended.
|
For example, upgrading from 3.8 to 3.11 is not recommended.
|
||||||
|
|
||||||
**Refer to the Breaking Changes Section in the
|
**Refer to the Breaking Changes Section in the
|
||||||
[release notes](https://github.com/ceph/ceph-csi/releases/tag/v3.10.0) before
|
[release notes](https://github.com/ceph/ceph-csi/releases/tag/v3.11.0) before
|
||||||
proceeding further.**
|
proceeding further.**
|
||||||
|
|
||||||
git checkout v3.10.0 tag
|
git checkout v3.11.0 tag
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/ceph/ceph-csi.git
|
git clone https://github.com/ceph/ceph-csi.git
|
||||||
cd ./ceph-csi
|
cd ./ceph-csi
|
||||||
git checkout v3.10.0
|
git checkout v3.11.0
|
||||||
```
|
```
|
||||||
|
|
||||||
```console
|
```console
|
||||||
@ -222,7 +224,7 @@ For each node:
|
|||||||
- The pod deletion causes the pods to be restarted and updated automatically
|
- The pod deletion causes the pods to be restarted and updated automatically
|
||||||
on the node.
|
on the node.
|
||||||
|
|
||||||
we have successfully upgraded cephfs csi from v3.9 to v3.10
|
we have successfully upgraded cephfs csi from v3.10 to v3.11
|
||||||
|
|
||||||
### Upgrading RBD
|
### Upgrading RBD
|
||||||
|
|
||||||
@ -286,7 +288,7 @@ daemonset.apps/csi-rbdplugin configured
|
|||||||
service/csi-metrics-rbdplugin configured
|
service/csi-metrics-rbdplugin configured
|
||||||
```
|
```
|
||||||
|
|
||||||
we have successfully upgraded RBD csi from v3.9 to v3.10
|
we have successfully upgraded RBD csi from v3.10 to v3.11
|
||||||
|
|
||||||
### Upgrading NFS
|
### Upgrading NFS
|
||||||
|
|
||||||
@ -348,7 +350,7 @@ daemonset.apps/csi-nfsplugin configured
|
|||||||
service/csi-metrics-nfsplugin configured
|
service/csi-metrics-nfsplugin configured
|
||||||
```
|
```
|
||||||
|
|
||||||
we have successfully upgraded nfs csi from v3.9 to v3.10
|
we have successfully upgraded nfs csi from v3.10 to v3.11
|
||||||
|
|
||||||
### CSI Sidecar containers consideration
|
### CSI Sidecar containers consideration
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"slices"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
@ -349,17 +350,6 @@ func waitForDeploymentUpdate(
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// contains check if slice contains string.
|
|
||||||
func contains(s []string, e string) bool {
|
|
||||||
for _, a := range s {
|
|
||||||
if a == e {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func waitForContainersArgsUpdate(
|
func waitForContainersArgsUpdate(
|
||||||
c kubernetes.Interface,
|
c kubernetes.Interface,
|
||||||
ns,
|
ns,
|
||||||
@ -398,7 +388,7 @@ func waitForContainersArgsUpdate(
|
|||||||
}
|
}
|
||||||
cid := deployment.Spec.Template.Spec.Containers // cid: read as containers in deployment
|
cid := deployment.Spec.Template.Spec.Containers // cid: read as containers in deployment
|
||||||
for i := range cid {
|
for i := range cid {
|
||||||
if contains(containers, cid[i].Name) {
|
if slices.Contains(containers, cid[i].Name) {
|
||||||
match := false
|
match := false
|
||||||
for j, ak := range cid[i].Args {
|
for j, ak := range cid[i].Args {
|
||||||
if ak == key {
|
if ak == key {
|
||||||
|
36
e2e/rbd.go
36
e2e/rbd.go
@ -2006,7 +2006,7 @@ var _ = Describe("RBD", func() {
|
|||||||
"mapOptions": nbdMapOptions,
|
"mapOptions": nbdMapOptions,
|
||||||
"cephLogStrategy": e2eDefaultCephLogStrategy,
|
"cephLogStrategy": e2eDefaultCephLogStrategy,
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
},
|
},
|
||||||
deletePolicy)
|
deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2041,7 +2041,7 @@ var _ = Describe("RBD", func() {
|
|||||||
f,
|
f,
|
||||||
defaultSCName,
|
defaultSCName,
|
||||||
nil,
|
nil,
|
||||||
map[string]string{"encrypted": "true", "encryptionType": util.EncryptionTypeString(encType)},
|
map[string]string{"encrypted": "true", "encryptionType": encType.String()},
|
||||||
deletePolicy)
|
deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("failed to create storageclass: %v", err)
|
framework.Failf("failed to create storageclass: %v", err)
|
||||||
@ -2075,7 +2075,7 @@ var _ = Describe("RBD", func() {
|
|||||||
f,
|
f,
|
||||||
defaultSCName,
|
defaultSCName,
|
||||||
nil,
|
nil,
|
||||||
map[string]string{"encrypted": "true", "encryptionType": util.EncryptionTypeString(encType)},
|
map[string]string{"encrypted": "true", "encryptionType": encType.String()},
|
||||||
deletePolicy)
|
deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
framework.Failf("failed to create storageclass: %v", err)
|
framework.Failf("failed to create storageclass: %v", err)
|
||||||
@ -2120,7 +2120,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2153,7 +2153,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-tokens-test",
|
"encryptionKMSID": "vault-tokens-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2207,7 +2207,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-tenant-sa-test",
|
"encryptionKMSID": "vault-tenant-sa-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2246,7 +2246,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "secrets-metadata-test",
|
"encryptionKMSID": "secrets-metadata-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2279,7 +2279,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "user-ns-secrets-metadata-test",
|
"encryptionKMSID": "user-ns-secrets-metadata-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2333,7 +2333,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "user-secrets-metadata-test",
|
"encryptionKMSID": "user-secrets-metadata-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2460,7 +2460,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2494,7 +2494,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2504,7 +2504,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts = map[string]string{
|
scOpts = map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-tenant-sa-test",
|
"encryptionKMSID": "vault-tenant-sa-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, restoreSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, restoreSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2554,7 +2554,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2564,7 +2564,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts = map[string]string{
|
scOpts = map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-tenant-sa-test",
|
"encryptionKMSID": "vault-tenant-sa-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, restoreSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, restoreSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2617,7 +2617,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "secrets-metadata-test",
|
"encryptionKMSID": "secrets-metadata-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2655,7 +2655,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -4202,7 +4202,7 @@ var _ = Describe("RBD", func() {
|
|||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
}
|
}
|
||||||
err := createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err := createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -4264,7 +4264,7 @@ var _ = Describe("RBD", func() {
|
|||||||
) {
|
) {
|
||||||
scOpts := map[string]string{
|
scOpts := map[string]string{
|
||||||
"encrypted": "true",
|
"encrypted": "true",
|
||||||
"encryptionType": util.EncryptionTypeString(encType),
|
"encryptionType": encType.String(),
|
||||||
"encryptionKMSID": "vault-test",
|
"encryptionKMSID": "vault-test",
|
||||||
}
|
}
|
||||||
err := createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
err := createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, scOpts, deletePolicy)
|
||||||
|
@ -387,8 +387,8 @@ func (conn *Connection) CheckReservation(ctx context.Context,
|
|||||||
if savedImageAttributes.EncryptionType != encryptionType {
|
if savedImageAttributes.EncryptionType != encryptionType {
|
||||||
return nil, fmt.Errorf("internal state inconsistent, omap encryption type"+
|
return nil, fmt.Errorf("internal state inconsistent, omap encryption type"+
|
||||||
" mismatch, request type %q(%d) volume UUID (%s) volume omap encryption type %q (%d)",
|
" mismatch, request type %q(%d) volume UUID (%s) volume omap encryption type %q (%d)",
|
||||||
util.EncryptionTypeString(encryptionType), encryptionType,
|
encryptionType, encryptionType,
|
||||||
objUUID, util.EncryptionTypeString(savedImageAttributes.EncryptionType),
|
objUUID, savedImageAttributes.EncryptionType,
|
||||||
savedImageAttributes.EncryptionType)
|
savedImageAttributes.EncryptionType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -561,7 +561,7 @@ func (conn *Connection) ReserveName(ctx context.Context,
|
|||||||
imagePool string, imagePoolID int64,
|
imagePool string, imagePoolID int64,
|
||||||
reqName, namePrefix, parentName, kmsConf, volUUID, owner,
|
reqName, namePrefix, parentName, kmsConf, volUUID, owner,
|
||||||
backingSnapshotID string,
|
backingSnapshotID string,
|
||||||
encryptionType util.EncryptionType,
|
encryptionType util.EncryptionType, //nolint:interfacer // prefer util.EncryptionType over fmt.Stringer
|
||||||
) (string, string, error) {
|
) (string, string, error) {
|
||||||
// TODO: Take in-arg as ImageAttributes?
|
// TODO: Take in-arg as ImageAttributes?
|
||||||
var (
|
var (
|
||||||
@ -642,7 +642,7 @@ func (conn *Connection) ReserveName(ctx context.Context,
|
|||||||
// Update UUID directory to store encryption values
|
// Update UUID directory to store encryption values
|
||||||
if kmsConf != "" {
|
if kmsConf != "" {
|
||||||
omapValues[cj.encryptKMSKey] = kmsConf
|
omapValues[cj.encryptKMSKey] = kmsConf
|
||||||
omapValues[cj.encryptionType] = util.EncryptionTypeString(encryptionType)
|
omapValues[cj.encryptionType] = encryptionType.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// if owner is passed, set it in the UUID directory too
|
// if owner is passed, set it in the UUID directory too
|
||||||
|
@ -183,6 +183,8 @@ func (rv *rbdVolume) doSnapClone(ctx context.Context, parentVol *rbdVolume) erro
|
|||||||
|
|
||||||
// generate temp cloned volume
|
// generate temp cloned volume
|
||||||
tempClone := rv.generateTempClone()
|
tempClone := rv.generateTempClone()
|
||||||
|
defer tempClone.Destroy()
|
||||||
|
|
||||||
// snapshot name is same as temporary cloned image, This helps to
|
// snapshot name is same as temporary cloned image, This helps to
|
||||||
// flatten the temporary cloned images as we cannot have more than 510
|
// flatten the temporary cloned images as we cannot have more than 510
|
||||||
// snapshots on an rbd image
|
// snapshots on an rbd image
|
||||||
|
@ -669,6 +669,7 @@ func (cs *ControllerServer) createVolumeFromSnapshot(
|
|||||||
parentVol := rbdSnap.toVolume()
|
parentVol := rbdSnap.toVolume()
|
||||||
// as we are operating on single cluster reuse the connection
|
// as we are operating on single cluster reuse the connection
|
||||||
parentVol.conn = rbdVol.conn.Copy()
|
parentVol.conn = rbdVol.conn.Copy()
|
||||||
|
defer parentVol.Destroy()
|
||||||
|
|
||||||
// create clone image and delete snapshot
|
// create clone image and delete snapshot
|
||||||
err = rbdVol.cloneRbdImageFromSnapshot(ctx, rbdSnap, parentVol)
|
err = rbdVol.cloneRbdImageFromSnapshot(ctx, rbdSnap, parentVol)
|
||||||
|
@ -1662,6 +1662,7 @@ func (ri *rbdImage) flattenParent(ctx context.Context, hardLimit, softLimit uint
|
|||||||
if parentImage == nil {
|
if parentImage == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
defer parentImage.Destroy()
|
||||||
|
|
||||||
return parentImage.flattenRbdImage(ctx, false, hardLimit, softLimit)
|
return parentImage.flattenRbdImage(ctx, false, hardLimit, softLimit)
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ func ParseEncryptionType(typeStr string) EncryptionType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func EncryptionTypeString(encType EncryptionType) string {
|
func (encType EncryptionType) String() string {
|
||||||
switch encType {
|
switch encType {
|
||||||
case EncryptionTypeBlock:
|
case EncryptionTypeBlock:
|
||||||
return encryptionTypeBlockString
|
return encryptionTypeBlockString
|
||||||
|
@ -77,7 +77,7 @@ func TestEncryptionType(t *testing.T) {
|
|||||||
assert.EqualValues(t, EncryptionTypeNone, ParseEncryptionType(""))
|
assert.EqualValues(t, EncryptionTypeNone, ParseEncryptionType(""))
|
||||||
|
|
||||||
for _, s := range []string{"file", "block", ""} {
|
for _, s := range []string{"file", "block", ""} {
|
||||||
assert.EqualValues(t, s, EncryptionTypeString(ParseEncryptionType(s)))
|
assert.EqualValues(t, s, ParseEncryptionType(s).String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -363,7 +364,7 @@ func MountOptionsAdd(options string, add ...string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, opt := range add {
|
for _, opt := range add {
|
||||||
if opt != "" && !contains(newOpts, opt) {
|
if opt != "" && !slices.Contains(newOpts, opt) {
|
||||||
newOpts = append(newOpts, opt)
|
newOpts = append(newOpts, opt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -371,16 +372,6 @@ func MountOptionsAdd(options string, add ...string) string {
|
|||||||
return strings.Join(newOpts, ",")
|
return strings.Join(newOpts, ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
func contains(s []string, key string) bool {
|
|
||||||
for _, v := range s {
|
|
||||||
if v == key {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// CallStack returns the stack of the calls in the current goroutine. Useful
|
// CallStack returns the stack of the calls in the current goroutine. Useful
|
||||||
// for debugging or reporting errors. This is a friendly alternative to
|
// for debugging or reporting errors. This is a friendly alternative to
|
||||||
// assert() or panic().
|
// assert() or panic().
|
||||||
|
Loading…
Reference in New Issue
Block a user