diff --git a/pkg/apis/core/helper/helpers.go b/pkg/apis/core/helper/helpers.go index d58e87bc234..f61166ce127 100644 --- a/pkg/apis/core/helper/helpers.go +++ b/pkg/apis/core/helper/helpers.go @@ -303,7 +303,7 @@ func IsStandardFinalizerName(str string) bool { } // GetAccessModesAsString returns a string representation of an array of access modes. -// modes, when present, are always in the same order: RWO,ROX,RWX. +// modes, when present, are always in the same order: RWO,ROX,RWX,RWOP. func GetAccessModesAsString(modes []core.PersistentVolumeAccessMode) string { modes = removeDuplicateAccessModes(modes) modesStr := []string{} @@ -316,6 +316,9 @@ func GetAccessModesAsString(modes []core.PersistentVolumeAccessMode) string { if ContainsAccessMode(modes, core.ReadWriteMany) { modesStr = append(modesStr, "RWX") } + if ContainsAccessMode(modes, core.ReadWriteOncePod) { + modesStr = append(modesStr, "RWOP") + } return strings.Join(modesStr, ",") } @@ -332,6 +335,8 @@ func GetAccessModesFromString(modes string) []core.PersistentVolumeAccessMode { accessModes = append(accessModes, core.ReadOnlyMany) case s == "RWX": accessModes = append(accessModes, core.ReadWriteMany) + case s == "RWOP": + accessModes = append(accessModes, core.ReadWriteOncePod) } } return accessModes diff --git a/pkg/apis/core/helper/helpers_test.go b/pkg/apis/core/helper/helpers_test.go index 86c47e01bc1..de487d241f8 100644 --- a/pkg/apis/core/helper/helpers_test.go +++ b/pkg/apis/core/helper/helpers_test.go @@ -100,12 +100,29 @@ func TestGetAccessModesFromString(t *testing.T) { } modes = GetAccessModesFromString("RWO,ROX,RWX") + if !ContainsAccessMode(modes, core.ReadWriteOnce) { + t.Errorf("Expected mode %s, but got %+v", core.ReadWriteOnce, modes) + } if !ContainsAccessMode(modes, core.ReadOnlyMany) { t.Errorf("Expected mode %s, but got %+v", core.ReadOnlyMany, modes) } if !ContainsAccessMode(modes, core.ReadWriteMany) { t.Errorf("Expected mode %s, but got %+v", core.ReadWriteMany, modes) } + + modes = GetAccessModesFromString("RWO,ROX,RWX,RWOP") + if !ContainsAccessMode(modes, core.ReadWriteOnce) { + t.Errorf("Expected mode %s, but got %+v", core.ReadWriteOnce, modes) + } + if !ContainsAccessMode(modes, core.ReadOnlyMany) { + t.Errorf("Expected mode %s, but got %+v", core.ReadOnlyMany, modes) + } + if !ContainsAccessMode(modes, core.ReadWriteMany) { + t.Errorf("Expected mode %s, but got %+v", core.ReadWriteMany, modes) + } + if !ContainsAccessMode(modes, core.ReadWriteOncePod) { + t.Errorf("Expected mode %s, but got %+v", core.ReadWriteOncePod, modes) + } } func TestRemoveDuplicateAccessModes(t *testing.T) { diff --git a/pkg/apis/core/v1/helper/helpers.go b/pkg/apis/core/v1/helper/helpers.go index 372aaa064ad..1a7aa4458f3 100644 --- a/pkg/apis/core/v1/helper/helpers.go +++ b/pkg/apis/core/v1/helper/helpers.go @@ -170,7 +170,7 @@ func ingressEqual(lhs, rhs *v1.LoadBalancerIngress) bool { } // GetAccessModesAsString returns a string representation of an array of access modes. -// modes, when present, are always in the same order: RWO,ROX,RWX. +// modes, when present, are always in the same order: RWO,ROX,RWX,RWOP. func GetAccessModesAsString(modes []v1.PersistentVolumeAccessMode) string { modes = removeDuplicateAccessModes(modes) modesStr := []string{} @@ -183,6 +183,9 @@ func GetAccessModesAsString(modes []v1.PersistentVolumeAccessMode) string { if ContainsAccessMode(modes, v1.ReadWriteMany) { modesStr = append(modesStr, "RWX") } + if ContainsAccessMode(modes, v1.ReadWriteOncePod) { + modesStr = append(modesStr, "RWOP") + } return strings.Join(modesStr, ",") } @@ -199,6 +202,8 @@ func GetAccessModesFromString(modes string) []v1.PersistentVolumeAccessMode { accessModes = append(accessModes, v1.ReadOnlyMany) case s == "RWX": accessModes = append(accessModes, v1.ReadWriteMany) + case s == "RWOP": + accessModes = append(accessModes, v1.ReadWriteOncePod) } } return accessModes diff --git a/pkg/apis/core/v1/helper/helpers_test.go b/pkg/apis/core/v1/helper/helpers_test.go index 77087386939..245f35b30dc 100644 --- a/pkg/apis/core/v1/helper/helpers_test.go +++ b/pkg/apis/core/v1/helper/helpers_test.go @@ -226,12 +226,29 @@ func TestGetAccessModesFromString(t *testing.T) { } modes = GetAccessModesFromString("RWO,ROX,RWX") + if !ContainsAccessMode(modes, v1.ReadWriteOnce) { + t.Errorf("Expected mode %s, but got %+v", v1.ReadWriteOnce, modes) + } if !ContainsAccessMode(modes, v1.ReadOnlyMany) { t.Errorf("Expected mode %s, but got %+v", v1.ReadOnlyMany, modes) } if !ContainsAccessMode(modes, v1.ReadWriteMany) { t.Errorf("Expected mode %s, but got %+v", v1.ReadWriteMany, modes) } + + modes = GetAccessModesFromString("RWO,ROX,RWX,RWOP") + if !ContainsAccessMode(modes, v1.ReadWriteOnce) { + t.Errorf("Expected mode %s, but got %+v", v1.ReadWriteOnce, modes) + } + if !ContainsAccessMode(modes, v1.ReadOnlyMany) { + t.Errorf("Expected mode %s, but got %+v", v1.ReadOnlyMany, modes) + } + if !ContainsAccessMode(modes, v1.ReadWriteMany) { + t.Errorf("Expected mode %s, but got %+v", v1.ReadWriteMany, modes) + } + if !ContainsAccessMode(modes, v1.ReadWriteOncePod) { + t.Errorf("Expected mode %s, but got %+v", v1.ReadWriteOncePod, modes) + } } func TestRemoveDuplicateAccessModes(t *testing.T) { diff --git a/staging/src/k8s.io/kubectl/pkg/util/storage/storage.go b/staging/src/k8s.io/kubectl/pkg/util/storage/storage.go index 9c2194dd6a9..1f25cf1ab66 100644 --- a/staging/src/k8s.io/kubectl/pkg/util/storage/storage.go +++ b/staging/src/k8s.io/kubectl/pkg/util/storage/storage.go @@ -45,7 +45,7 @@ func IsDefaultAnnotationText(obj metav1.ObjectMeta) string { } // GetAccessModesAsString returns a string representation of an array of access modes. -// modes, when present, are always in the same order: RWO,ROX,RWX. +// modes, when present, are always in the same order: RWO,ROX,RWX,RWOP. func GetAccessModesAsString(modes []v1.PersistentVolumeAccessMode) string { modes = removeDuplicateAccessModes(modes) modesStr := []string{} @@ -58,6 +58,9 @@ func GetAccessModesAsString(modes []v1.PersistentVolumeAccessMode) string { if ContainsAccessMode(modes, v1.ReadWriteMany) { modesStr = append(modesStr, "RWX") } + if ContainsAccessMode(modes, v1.ReadWriteOncePod) { + modesStr = append(modesStr, "RWOP") + } return strings.Join(modesStr, ",") }