From b497570e50e3ea378f2701ed499f9167c12f5413 Mon Sep 17 00:00:00 2001 From: yue9944882 <291271447@qq.com> Date: Thu, 9 Aug 2018 21:26:53 +0800 Subject: [PATCH] util for external pv prune unused pv utils and its test --- pkg/BUILD | 1 + pkg/api/persistentvolume/BUILD | 14 -- pkg/api/persistentvolume/util.go | 113 ----------- pkg/api/v1/persistentvolume/BUILD | 41 ++++ pkg/api/v1/persistentvolume/util.go | 144 ++++++++++++++ .../{ => v1}/persistentvolume/util_test.go | 187 +++++++++--------- 6 files changed, 280 insertions(+), 220 deletions(-) create mode 100644 pkg/api/v1/persistentvolume/BUILD create mode 100644 pkg/api/v1/persistentvolume/util.go rename pkg/api/{ => v1}/persistentvolume/util_test.go (65%) diff --git a/pkg/BUILD b/pkg/BUILD index 1042c2e331..bbb26c6480 100644 --- a/pkg/BUILD +++ b/pkg/BUILD @@ -24,6 +24,7 @@ filegroup( "//pkg/api/testing:all-srcs", "//pkg/api/v1/endpoints:all-srcs", "//pkg/api/v1/node:all-srcs", + "//pkg/api/v1/persistentvolume:all-srcs", "//pkg/api/v1/pod:all-srcs", "//pkg/api/v1/resource:all-srcs", "//pkg/api/v1/service:all-srcs", diff --git a/pkg/api/persistentvolume/BUILD b/pkg/api/persistentvolume/BUILD index 4a256d0d83..c4743ccc70 100644 --- a/pkg/api/persistentvolume/BUILD +++ b/pkg/api/persistentvolume/BUILD @@ -3,7 +3,6 @@ package(default_visibility = ["//visibility:public"]) load( "@io_bazel_rules_go//go:def.bzl", "go_library", - "go_test", ) go_library( @@ -29,16 +28,3 @@ filegroup( srcs = [":package-srcs"], tags = ["automanaged"], ) - -go_test( - name = "go_default_test", - srcs = ["util_test.go"], - embed = [":go_default_library"], - deps = [ - "//pkg/apis/core:go_default_library", - "//pkg/features:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - ], -) diff --git a/pkg/api/persistentvolume/util.go b/pkg/api/persistentvolume/util.go index d5a93667aa..3b28f207a1 100644 --- a/pkg/api/persistentvolume/util.go +++ b/pkg/api/persistentvolume/util.go @@ -22,119 +22,6 @@ import ( "k8s.io/kubernetes/pkg/features" ) -func getClaimRefNamespace(pv *api.PersistentVolume) string { - if pv.Spec.ClaimRef != nil { - return pv.Spec.ClaimRef.Namespace - } - return "" -} - -// Visitor is called with each object's namespace and name, and returns true if visiting should continue -type Visitor func(namespace, name string, kubeletVisible bool) (shouldContinue bool) - -// VisitPVSecretNames invokes the visitor function with the name of every secret -// referenced by the PV spec. If visitor returns false, visiting is short-circuited. -// Returns true if visiting completed, false if visiting was short-circuited. -func VisitPVSecretNames(pv *api.PersistentVolume, visitor Visitor) bool { - source := &pv.Spec.PersistentVolumeSource - switch { - case source.AzureFile != nil: - if source.AzureFile.SecretNamespace != nil && len(*source.AzureFile.SecretNamespace) > 0 { - if len(source.AzureFile.SecretName) > 0 && !visitor(*source.AzureFile.SecretNamespace, source.AzureFile.SecretName, true /* kubeletVisible */) { - return false - } - } else { - if len(source.AzureFile.SecretName) > 0 && !visitor(getClaimRefNamespace(pv), source.AzureFile.SecretName, true /* kubeletVisible */) { - return false - } - } - return true - case source.CephFS != nil: - if source.CephFS.SecretRef != nil { - // previously persisted PV objects use claimRef namespace - ns := getClaimRefNamespace(pv) - if len(source.CephFS.SecretRef.Namespace) > 0 { - // use the secret namespace if namespace is set - ns = source.CephFS.SecretRef.Namespace - } - if !visitor(ns, source.CephFS.SecretRef.Name, true /* kubeletVisible */) { - return false - } - } - case source.Cinder != nil: - if source.Cinder.SecretRef != nil && !visitor(source.Cinder.SecretRef.Namespace, source.Cinder.SecretRef.Name, true /* kubeletVisible */) { - return false - } - case source.FlexVolume != nil: - if source.FlexVolume.SecretRef != nil { - // previously persisted PV objects use claimRef namespace - ns := getClaimRefNamespace(pv) - if len(source.FlexVolume.SecretRef.Namespace) > 0 { - // use the secret namespace if namespace is set - ns = source.FlexVolume.SecretRef.Namespace - } - if !visitor(ns, source.FlexVolume.SecretRef.Name, true /* kubeletVisible */) { - return false - } - } - case source.RBD != nil: - if source.RBD.SecretRef != nil { - // previously persisted PV objects use claimRef namespace - ns := getClaimRefNamespace(pv) - if len(source.RBD.SecretRef.Namespace) > 0 { - // use the secret namespace if namespace is set - ns = source.RBD.SecretRef.Namespace - } - if !visitor(ns, source.RBD.SecretRef.Name, true /* kubeletVisible */) { - return false - } - } - case source.ScaleIO != nil: - if source.ScaleIO.SecretRef != nil { - ns := getClaimRefNamespace(pv) - if source.ScaleIO.SecretRef != nil && len(source.ScaleIO.SecretRef.Namespace) > 0 { - ns = source.ScaleIO.SecretRef.Namespace - } - if !visitor(ns, source.ScaleIO.SecretRef.Name, true /* kubeletVisible */) { - return false - } - } - case source.ISCSI != nil: - if source.ISCSI.SecretRef != nil { - // previously persisted PV objects use claimRef namespace - ns := getClaimRefNamespace(pv) - if len(source.ISCSI.SecretRef.Namespace) > 0 { - // use the secret namespace if namespace is set - ns = source.ISCSI.SecretRef.Namespace - } - if !visitor(ns, source.ISCSI.SecretRef.Name, true /* kubeletVisible */) { - return false - } - } - case source.StorageOS != nil: - if source.StorageOS.SecretRef != nil && !visitor(source.StorageOS.SecretRef.Namespace, source.StorageOS.SecretRef.Name, true /* kubeletVisible */) { - return false - } - case source.CSI != nil: - if source.CSI.ControllerPublishSecretRef != nil { - if !visitor(source.CSI.ControllerPublishSecretRef.Namespace, source.CSI.ControllerPublishSecretRef.Name, false /* kubeletVisible */) { - return false - } - } - if source.CSI.NodePublishSecretRef != nil { - if !visitor(source.CSI.NodePublishSecretRef.Namespace, source.CSI.NodePublishSecretRef.Name, true /* kubeletVisible */) { - return false - } - } - if source.CSI.NodeStageSecretRef != nil { - if !visitor(source.CSI.NodeStageSecretRef.Namespace, source.CSI.NodeStageSecretRef.Name, true /* kubeletVisible */) { - return false - } - } - } - return true -} - // DropDisabledAlphaFields removes disabled fields from the pv spec. // This should be called from PrepareForCreate/PrepareForUpdate for all resources containing a pv spec. func DropDisabledAlphaFields(pvSpec *api.PersistentVolumeSpec) { diff --git a/pkg/api/v1/persistentvolume/BUILD b/pkg/api/v1/persistentvolume/BUILD new file mode 100644 index 0000000000..0a5cbd81f5 --- /dev/null +++ b/pkg/api/v1/persistentvolume/BUILD @@ -0,0 +1,41 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["util.go"], + importpath = "k8s.io/kubernetes/pkg/api/v1/persistentvolume", + visibility = ["//visibility:public"], + deps = [ + "//pkg/features:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["util_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/core:go_default_library", + "//pkg/features:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/api/v1/persistentvolume/util.go b/pkg/api/v1/persistentvolume/util.go new file mode 100644 index 0000000000..063c3ff8e7 --- /dev/null +++ b/pkg/api/v1/persistentvolume/util.go @@ -0,0 +1,144 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package persistentvolume + +import ( + corev1 "k8s.io/api/core/v1" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/pkg/features" +) + +func getClaimRefNamespace(pv *corev1.PersistentVolume) string { + if pv.Spec.ClaimRef != nil { + return pv.Spec.ClaimRef.Namespace + } + return "" +} + +// Visitor is called with each object's namespace and name, and returns true if visiting should continue +type Visitor func(namespace, name string, kubeletVisible bool) (shouldContinue bool) + +// VisitPVSecretNames invokes the visitor function with the name of every secret +// referenced by the PV spec. If visitor returns false, visiting is short-circuited. +// Returns true if visiting completed, false if visiting was short-circuited. +func VisitPVSecretNames(pv *corev1.PersistentVolume, visitor Visitor) bool { + source := &pv.Spec.PersistentVolumeSource + switch { + case source.AzureFile != nil: + if source.AzureFile.SecretNamespace != nil && len(*source.AzureFile.SecretNamespace) > 0 { + if len(source.AzureFile.SecretName) > 0 && !visitor(*source.AzureFile.SecretNamespace, source.AzureFile.SecretName, true /* kubeletVisible */) { + return false + } + } else { + if len(source.AzureFile.SecretName) > 0 && !visitor(getClaimRefNamespace(pv), source.AzureFile.SecretName, true /* kubeletVisible */) { + return false + } + } + return true + case source.CephFS != nil: + if source.CephFS.SecretRef != nil { + // previously persisted PV objects use claimRef namespace + ns := getClaimRefNamespace(pv) + if len(source.CephFS.SecretRef.Namespace) > 0 { + // use the secret namespace if namespace is set + ns = source.CephFS.SecretRef.Namespace + } + if !visitor(ns, source.CephFS.SecretRef.Name, true /* kubeletVisible */) { + return false + } + } + case source.Cinder != nil: + if source.Cinder.SecretRef != nil && !visitor(source.Cinder.SecretRef.Namespace, source.Cinder.SecretRef.Name, true /* kubeletVisible */) { + return false + } + case source.FlexVolume != nil: + if source.FlexVolume.SecretRef != nil { + // previously persisted PV objects use claimRef namespace + ns := getClaimRefNamespace(pv) + if len(source.FlexVolume.SecretRef.Namespace) > 0 { + // use the secret namespace if namespace is set + ns = source.FlexVolume.SecretRef.Namespace + } + if !visitor(ns, source.FlexVolume.SecretRef.Name, true /* kubeletVisible */) { + return false + } + } + case source.RBD != nil: + if source.RBD.SecretRef != nil { + // previously persisted PV objects use claimRef namespace + ns := getClaimRefNamespace(pv) + if len(source.RBD.SecretRef.Namespace) > 0 { + // use the secret namespace if namespace is set + ns = source.RBD.SecretRef.Namespace + } + if !visitor(ns, source.RBD.SecretRef.Name, true /* kubeletVisible */) { + return false + } + } + case source.ScaleIO != nil: + if source.ScaleIO.SecretRef != nil { + ns := getClaimRefNamespace(pv) + if source.ScaleIO.SecretRef != nil && len(source.ScaleIO.SecretRef.Namespace) > 0 { + ns = source.ScaleIO.SecretRef.Namespace + } + if !visitor(ns, source.ScaleIO.SecretRef.Name, true /* kubeletVisible */) { + return false + } + } + case source.ISCSI != nil: + if source.ISCSI.SecretRef != nil { + // previously persisted PV objects use claimRef namespace + ns := getClaimRefNamespace(pv) + if len(source.ISCSI.SecretRef.Namespace) > 0 { + // use the secret namespace if namespace is set + ns = source.ISCSI.SecretRef.Namespace + } + if !visitor(ns, source.ISCSI.SecretRef.Name, true /* kubeletVisible */) { + return false + } + } + case source.StorageOS != nil: + if source.StorageOS.SecretRef != nil && !visitor(source.StorageOS.SecretRef.Namespace, source.StorageOS.SecretRef.Name, true /* kubeletVisible */) { + return false + } + case source.CSI != nil: + if source.CSI.ControllerPublishSecretRef != nil { + if !visitor(source.CSI.ControllerPublishSecretRef.Namespace, source.CSI.ControllerPublishSecretRef.Name, false /* kubeletVisible */) { + return false + } + } + if source.CSI.NodePublishSecretRef != nil { + if !visitor(source.CSI.NodePublishSecretRef.Namespace, source.CSI.NodePublishSecretRef.Name, true /* kubeletVisible */) { + return false + } + } + if source.CSI.NodeStageSecretRef != nil { + if !visitor(source.CSI.NodeStageSecretRef.Namespace, source.CSI.NodeStageSecretRef.Name, true /* kubeletVisible */) { + return false + } + } + } + return true +} + +// DropDisabledAlphaFields removes disabled fields from the pv spec. +// This should be called from PrepareForCreate/PrepareForUpdate for all resources containing a pv spec. +func DropDisabledAlphaFields(pvSpec *corev1.PersistentVolumeSpec) { + if !utilfeature.DefaultFeatureGate.Enabled(features.BlockVolume) { + pvSpec.VolumeMode = nil + } +} diff --git a/pkg/api/persistentvolume/util_test.go b/pkg/api/v1/persistentvolume/util_test.go similarity index 65% rename from pkg/api/persistentvolume/util_test.go rename to pkg/api/v1/persistentvolume/util_test.go index ffa361cc93..56473d37bc 100644 --- a/pkg/api/persistentvolume/util_test.go +++ b/pkg/api/v1/persistentvolume/util_test.go @@ -22,6 +22,7 @@ import ( "strings" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -33,115 +34,115 @@ func TestPVSecrets(t *testing.T) { // Stub containing all possible secret references in a PV. // The names of the referenced secrets match struct paths detected by reflection. secretNamespace := "Spec.PersistentVolumeSource.AzureFile.SecretNamespace" - pvs := []*api.PersistentVolume{ - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - AzureFile: &api.AzureFilePersistentVolumeSource{ + pvs := []*corev1.PersistentVolume{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + AzureFile: &corev1.AzureFilePersistentVolumeSource{ SecretName: "Spec.PersistentVolumeSource.AzureFile.SecretName"}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - AzureFile: &api.AzureFilePersistentVolumeSource{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + AzureFile: &corev1.AzureFilePersistentVolumeSource{ SecretName: "Spec.PersistentVolumeSource.AzureFile.SecretName", SecretNamespace: &secretNamespace}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - CephFS: &api.CephFSPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CephFS: &corev1.CephFSPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.CephFS.SecretRef", Namespace: "cephfs"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - CephFS: &api.CephFSPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CephFS: &corev1.CephFSPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.CephFS.SecretRef"}}}}}, - {Spec: api.PersistentVolumeSpec{ - PersistentVolumeSource: api.PersistentVolumeSource{ - Cinder: &api.CinderPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + PersistentVolumeSource: corev1.PersistentVolumeSource{ + Cinder: &corev1.CinderPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.Cinder.SecretRef", Namespace: "cinder"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - FlexVolume: &api.FlexPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + FlexVolume: &corev1.FlexPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.FlexVolume.SecretRef", Namespace: "flexns"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - FlexVolume: &api.FlexPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + FlexVolume: &corev1.FlexPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.FlexVolume.SecretRef"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - RBD: &api.RBDPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + RBD: &corev1.RBDPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.RBD.SecretRef"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - RBD: &api.RBDPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + RBD: &corev1.RBDPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.RBD.SecretRef", Namespace: "rbdns"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - ScaleIO: &api.ScaleIOPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + ScaleIO: &corev1.ScaleIOPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.ScaleIO.SecretRef"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - ScaleIO: &api.ScaleIOPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + ScaleIO: &corev1.ScaleIOPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.ScaleIO.SecretRef", Namespace: "scaleions"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - ISCSI: &api.ISCSIPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + ISCSI: &corev1.ISCSIPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.ISCSI.SecretRef", Namespace: "iscsi"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - ISCSI: &api.ISCSIPersistentVolumeSource{ - SecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + ISCSI: &corev1.ISCSIPersistentVolumeSource{ + SecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.ISCSI.SecretRef"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - StorageOS: &api.StorageOSPersistentVolumeSource{ - SecretRef: &api.ObjectReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + StorageOS: &corev1.StorageOSPersistentVolumeSource{ + SecretRef: &corev1.ObjectReference{ Name: "Spec.PersistentVolumeSource.StorageOS.SecretRef", Namespace: "storageosns"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - CSI: &api.CSIPersistentVolumeSource{ - ControllerPublishSecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CSI: &corev1.CSIPersistentVolumeSource{ + ControllerPublishSecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.CSI.ControllerPublishSecretRef", Namespace: "csi"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - CSI: &api.CSIPersistentVolumeSource{ - NodePublishSecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CSI: &corev1.CSIPersistentVolumeSource{ + NodePublishSecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.CSI.NodePublishSecretRef", Namespace: "csi"}}}}}, - {Spec: api.PersistentVolumeSpec{ - ClaimRef: &api.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, - PersistentVolumeSource: api.PersistentVolumeSource{ - CSI: &api.CSIPersistentVolumeSource{ - NodeStageSecretRef: &api.SecretReference{ + {Spec: corev1.PersistentVolumeSpec{ + ClaimRef: &corev1.ObjectReference{Namespace: "claimrefns", Name: "claimrefname"}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CSI: &corev1.CSIPersistentVolumeSource{ + NodeStageSecretRef: &corev1.SecretReference{ Name: "Spec.PersistentVolumeSource.CSI.NodeStageSecretRef", Namespace: "csi"}}}}}, } @@ -266,23 +267,23 @@ func collectSecretPaths(t *testing.T, path *field.Path, name string, tp reflect. return secretPaths } -func newHostPathType(pathType string) *api.HostPathType { - hostPathType := new(api.HostPathType) - *hostPathType = api.HostPathType(pathType) +func newHostPathType(pathType string) *corev1.HostPathType { + hostPathType := new(corev1.HostPathType) + *hostPathType = corev1.HostPathType(pathType) return hostPathType } func TestDropAlphaPVVolumeMode(t *testing.T) { - vmode := api.PersistentVolumeFilesystem + vmode := corev1.PersistentVolumeFilesystem // PersistentVolume with VolumeMode set - pv := api.PersistentVolume{ - Spec: api.PersistentVolumeSpec{ - AccessModes: []api.PersistentVolumeAccessMode{api.ReadWriteOnce}, - PersistentVolumeSource: api.PersistentVolumeSource{ - HostPath: &api.HostPathVolumeSource{ + pv := corev1.PersistentVolume{ + Spec: corev1.PersistentVolumeSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + PersistentVolumeSource: corev1.PersistentVolumeSource{ + HostPath: &corev1.HostPathVolumeSource{ Path: "/foo", - Type: newHostPathType(string(api.HostPathDirectory)), + Type: newHostPathType(string(corev1.HostPathDirectory)), }, }, StorageClassName: "test-storage-class",