mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 10:51:29 +00:00
storage capacity: use V1 API
This commit is contained in:
parent
b1aefb9b90
commit
f84f4fa291
@ -40,7 +40,6 @@ import (
|
|||||||
rbacv1beta1 "k8s.io/api/rbac/v1beta1"
|
rbacv1beta1 "k8s.io/api/rbac/v1beta1"
|
||||||
schedulingv1 "k8s.io/api/scheduling/v1"
|
schedulingv1 "k8s.io/api/scheduling/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
@ -530,8 +529,8 @@ func AddHandlers(h printers.PrintHandler) {
|
|||||||
|
|
||||||
csiStorageCapacityColumnDefinitions := []metav1.TableColumnDefinition{
|
csiStorageCapacityColumnDefinitions := []metav1.TableColumnDefinition{
|
||||||
{Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]},
|
{Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]},
|
||||||
{Name: "StorageClassName", Type: "string", Description: storagev1alpha1.CSIStorageCapacity{}.SwaggerDoc()["storageClassName"]},
|
{Name: "StorageClassName", Type: "string", Description: storagev1.CSIStorageCapacity{}.SwaggerDoc()["storageClassName"]},
|
||||||
{Name: "Capacity", Type: "string", Description: storagev1alpha1.CSIStorageCapacity{}.SwaggerDoc()["capacity"]},
|
{Name: "Capacity", Type: "string", Description: storagev1.CSIStorageCapacity{}.SwaggerDoc()["capacity"]},
|
||||||
}
|
}
|
||||||
h.TableHandler(csiStorageCapacityColumnDefinitions, printCSIStorageCapacity)
|
h.TableHandler(csiStorageCapacityColumnDefinitions, printCSIStorageCapacity)
|
||||||
h.TableHandler(csiStorageCapacityColumnDefinitions, printCSIStorageCapacityList)
|
h.TableHandler(csiStorageCapacityColumnDefinitions, printCSIStorageCapacityList)
|
||||||
|
@ -353,7 +353,7 @@ func addAllEventHandlers(
|
|||||||
buildEvtResHandler(at, framework.CSIDriver, "CSIDriver"),
|
buildEvtResHandler(at, framework.CSIDriver, "CSIDriver"),
|
||||||
)
|
)
|
||||||
case framework.CSIStorageCapacity:
|
case framework.CSIStorageCapacity:
|
||||||
informerFactory.Storage().V1beta1().CSIStorageCapacities().Informer().AddEventHandler(
|
informerFactory.Storage().V1().CSIStorageCapacities().Informer().AddEventHandler(
|
||||||
buildEvtResHandler(at, framework.CSIStorageCapacity, "CSIStorageCapacity"),
|
buildEvtResHandler(at, framework.CSIStorageCapacity, "CSIStorageCapacity"),
|
||||||
)
|
)
|
||||||
case framework.PersistentVolume:
|
case framework.PersistentVolume:
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
appsv1 "k8s.io/api/apps/v1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
batchv1 "k8s.io/api/batch/v1"
|
batchv1 "k8s.io/api/batch/v1"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
@ -383,11 +383,11 @@ func TestAddAllEventHandlers(t *testing.T) {
|
|||||||
"storage.k8s.io/CSIStorageCapacity": framework.Update,
|
"storage.k8s.io/CSIStorageCapacity": framework.Update,
|
||||||
},
|
},
|
||||||
expectStaticInformers: map[reflect.Type]bool{
|
expectStaticInformers: map[reflect.Type]bool{
|
||||||
reflect.TypeOf(&v1.Pod{}): true,
|
reflect.TypeOf(&v1.Pod{}): true,
|
||||||
reflect.TypeOf(&v1.Node{}): true,
|
reflect.TypeOf(&v1.Node{}): true,
|
||||||
reflect.TypeOf(&v1.Namespace{}): true,
|
reflect.TypeOf(&v1.Namespace{}): true,
|
||||||
reflect.TypeOf(&v1.PersistentVolume{}): true,
|
reflect.TypeOf(&v1.PersistentVolume{}): true,
|
||||||
reflect.TypeOf(&storagev1beta1.CSIStorageCapacity{}): true,
|
reflect.TypeOf(&storagev1.CSIStorageCapacity{}): true,
|
||||||
},
|
},
|
||||||
expectDynamicInformers: map[schema.GroupVersionResource]bool{},
|
expectDynamicInformers: map[schema.GroupVersionResource]bool{},
|
||||||
},
|
},
|
||||||
|
@ -25,7 +25,6 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
@ -35,11 +34,9 @@ import (
|
|||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
coreinformers "k8s.io/client-go/informers/core/v1"
|
coreinformers "k8s.io/client-go/informers/core/v1"
|
||||||
storageinformers "k8s.io/client-go/informers/storage/v1"
|
storageinformers "k8s.io/client-go/informers/storage/v1"
|
||||||
storageinformersv1beta1 "k8s.io/client-go/informers/storage/v1beta1"
|
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
corelisters "k8s.io/client-go/listers/core/v1"
|
corelisters "k8s.io/client-go/listers/core/v1"
|
||||||
storagelisters "k8s.io/client-go/listers/storage/v1"
|
storagelisters "k8s.io/client-go/listers/storage/v1"
|
||||||
storagelistersv1beta1 "k8s.io/client-go/listers/storage/v1beta1"
|
|
||||||
"k8s.io/component-helpers/storage/ephemeral"
|
"k8s.io/component-helpers/storage/ephemeral"
|
||||||
storagehelpers "k8s.io/component-helpers/storage/volume"
|
storagehelpers "k8s.io/component-helpers/storage/volume"
|
||||||
csitrans "k8s.io/csi-translation-lib"
|
csitrans "k8s.io/csi-translation-lib"
|
||||||
@ -210,7 +207,7 @@ type volumeBinder struct {
|
|||||||
translator InTreeToCSITranslator
|
translator InTreeToCSITranslator
|
||||||
|
|
||||||
csiDriverLister storagelisters.CSIDriverLister
|
csiDriverLister storagelisters.CSIDriverLister
|
||||||
csiStorageCapacityLister storagelistersv1beta1.CSIStorageCapacityLister
|
csiStorageCapacityLister storagelisters.CSIStorageCapacityLister
|
||||||
}
|
}
|
||||||
|
|
||||||
// CapacityCheck contains additional parameters for NewVolumeBinder that
|
// CapacityCheck contains additional parameters for NewVolumeBinder that
|
||||||
@ -218,7 +215,7 @@ type volumeBinder struct {
|
|||||||
// capacity is desired.
|
// capacity is desired.
|
||||||
type CapacityCheck struct {
|
type CapacityCheck struct {
|
||||||
CSIDriverInformer storageinformers.CSIDriverInformer
|
CSIDriverInformer storageinformers.CSIDriverInformer
|
||||||
CSIStorageCapacityInformer storageinformersv1beta1.CSIStorageCapacityInformer
|
CSIStorageCapacityInformer storageinformers.CSIStorageCapacityInformer
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewVolumeBinder sets up all the caches needed for the scheduler to make volume binding decisions.
|
// NewVolumeBinder sets up all the caches needed for the scheduler to make volume binding decisions.
|
||||||
@ -963,7 +960,7 @@ func (b *volumeBinder) hasEnoughCapacity(provisioner string, claim *v1.Persisten
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func capacitySufficient(capacity *storagev1beta1.CSIStorageCapacity, sizeInBytes int64) bool {
|
func capacitySufficient(capacity *storagev1.CSIStorageCapacity, sizeInBytes int64) bool {
|
||||||
limit := capacity.Capacity
|
limit := capacity.Capacity
|
||||||
if capacity.MaximumVolumeSize != nil {
|
if capacity.MaximumVolumeSize != nil {
|
||||||
// Prefer MaximumVolumeSize if available, it is more precise.
|
// Prefer MaximumVolumeSize if available, it is more precise.
|
||||||
@ -972,7 +969,7 @@ func capacitySufficient(capacity *storagev1beta1.CSIStorageCapacity, sizeInBytes
|
|||||||
return limit != nil && limit.Value() >= sizeInBytes
|
return limit != nil && limit.Value() >= sizeInBytes
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *volumeBinder) nodeHasAccess(node *v1.Node, capacity *storagev1beta1.CSIStorageCapacity) bool {
|
func (b *volumeBinder) nodeHasAccess(node *v1.Node, capacity *storagev1.CSIStorageCapacity) bool {
|
||||||
if capacity.NodeTopology == nil {
|
if capacity.NodeTopology == nil {
|
||||||
// Unavailable
|
// Unavailable
|
||||||
return false
|
return false
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
@ -38,7 +37,6 @@ import (
|
|||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
coreinformers "k8s.io/client-go/informers/core/v1"
|
coreinformers "k8s.io/client-go/informers/core/v1"
|
||||||
storageinformers "k8s.io/client-go/informers/storage/v1"
|
storageinformers "k8s.io/client-go/informers/storage/v1"
|
||||||
storageinformersv1beta1 "k8s.io/client-go/informers/storage/v1beta1"
|
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/kubernetes/fake"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
k8stesting "k8s.io/client-go/testing"
|
k8stesting "k8s.io/client-go/testing"
|
||||||
@ -141,7 +139,7 @@ type testEnv struct {
|
|||||||
|
|
||||||
// For CSIStorageCapacity feature testing:
|
// For CSIStorageCapacity feature testing:
|
||||||
internalCSIDriverInformer storageinformers.CSIDriverInformer
|
internalCSIDriverInformer storageinformers.CSIDriverInformer
|
||||||
internalCSIStorageCapacityInformer storageinformersv1beta1.CSIStorageCapacityInformer
|
internalCSIStorageCapacityInformer storageinformers.CSIStorageCapacityInformer
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestBinder(t *testing.T, stopCh <-chan struct{}) *testEnv {
|
func newTestBinder(t *testing.T, stopCh <-chan struct{}) *testEnv {
|
||||||
@ -165,7 +163,7 @@ func newTestBinder(t *testing.T, stopCh <-chan struct{}) *testEnv {
|
|||||||
pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
|
pvcInformer := informerFactory.Core().V1().PersistentVolumeClaims()
|
||||||
classInformer := informerFactory.Storage().V1().StorageClasses()
|
classInformer := informerFactory.Storage().V1().StorageClasses()
|
||||||
csiDriverInformer := informerFactory.Storage().V1().CSIDrivers()
|
csiDriverInformer := informerFactory.Storage().V1().CSIDrivers()
|
||||||
csiStorageCapacityInformer := informerFactory.Storage().V1beta1().CSIStorageCapacities()
|
csiStorageCapacityInformer := informerFactory.Storage().V1().CSIStorageCapacities()
|
||||||
capacityCheck := CapacityCheck{
|
capacityCheck := CapacityCheck{
|
||||||
CSIDriverInformer: csiDriverInformer,
|
CSIDriverInformer: csiDriverInformer,
|
||||||
CSIStorageCapacityInformer: csiStorageCapacityInformer,
|
CSIStorageCapacityInformer: csiStorageCapacityInformer,
|
||||||
@ -301,7 +299,7 @@ func (env *testEnv) addCSIDriver(csiDriver *storagev1.CSIDriver) {
|
|||||||
csiDriverInformer.GetIndexer().Add(csiDriver)
|
csiDriverInformer.GetIndexer().Add(csiDriver)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (env *testEnv) addCSIStorageCapacities(capacities []*storagev1beta1.CSIStorageCapacity) {
|
func (env *testEnv) addCSIStorageCapacities(capacities []*storagev1.CSIStorageCapacity) {
|
||||||
csiStorageCapacityInformer := env.internalCSIStorageCapacityInformer.Informer()
|
csiStorageCapacityInformer := env.internalCSIStorageCapacityInformer.Informer()
|
||||||
for _, capacity := range capacities {
|
for _, capacity := range capacities {
|
||||||
csiStorageCapacityInformer.GetIndexer().Add(capacity)
|
csiStorageCapacityInformer.GetIndexer().Add(capacity)
|
||||||
@ -736,8 +734,8 @@ func makeCSIDriver(name string, storageCapacity bool) *storagev1.CSIDriver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeCapacity(name, storageClassName string, node *v1.Node, capacityStr, maximumVolumeSizeStr string) *storagev1beta1.CSIStorageCapacity {
|
func makeCapacity(name, storageClassName string, node *v1.Node, capacityStr, maximumVolumeSizeStr string) *storagev1.CSIStorageCapacity {
|
||||||
c := &storagev1beta1.CSIStorageCapacity{
|
c := &storagev1.CSIStorageCapacity{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
},
|
},
|
||||||
@ -2159,7 +2157,7 @@ func TestCapacity(t *testing.T) {
|
|||||||
type scenarioType struct {
|
type scenarioType struct {
|
||||||
// Inputs
|
// Inputs
|
||||||
pvcs []*v1.PersistentVolumeClaim
|
pvcs []*v1.PersistentVolumeClaim
|
||||||
capacities []*storagev1beta1.CSIStorageCapacity
|
capacities []*storagev1.CSIStorageCapacity
|
||||||
|
|
||||||
// Expected return values
|
// Expected return values
|
||||||
reasons ConflictReasons
|
reasons ConflictReasons
|
||||||
@ -2168,19 +2166,19 @@ func TestCapacity(t *testing.T) {
|
|||||||
scenarios := map[string]scenarioType{
|
scenarios := map[string]scenarioType{
|
||||||
"network-attached": {
|
"network-attached": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, nil, "1Gi", ""),
|
makeCapacity("net", waitClassWithProvisioner, nil, "1Gi", ""),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"local-storage": {
|
"local-storage": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "1Gi", ""),
|
makeCapacity("net", waitClassWithProvisioner, node1, "1Gi", ""),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"multiple": {
|
"multiple": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, nil, "1Gi", ""),
|
makeCapacity("net", waitClassWithProvisioner, nil, "1Gi", ""),
|
||||||
makeCapacity("net", waitClassWithProvisioner, node2, "1Gi", ""),
|
makeCapacity("net", waitClassWithProvisioner, node2, "1Gi", ""),
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "1Gi", ""),
|
makeCapacity("net", waitClassWithProvisioner, node1, "1Gi", ""),
|
||||||
@ -2192,49 +2190,49 @@ func TestCapacity(t *testing.T) {
|
|||||||
},
|
},
|
||||||
"wrong-node": {
|
"wrong-node": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node2, "1Gi", ""),
|
makeCapacity("net", waitClassWithProvisioner, node2, "1Gi", ""),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
},
|
},
|
||||||
"wrong-storage-class": {
|
"wrong-storage-class": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClass, node1, "1Gi", ""),
|
makeCapacity("net", waitClass, node1, "1Gi", ""),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
},
|
},
|
||||||
"insufficient-storage": {
|
"insufficient-storage": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "1Mi", ""),
|
makeCapacity("net", waitClassWithProvisioner, node1, "1Mi", ""),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
},
|
},
|
||||||
"insufficient-volume-size": {
|
"insufficient-volume-size": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "1Gi", "1Mi"),
|
makeCapacity("net", waitClassWithProvisioner, node1, "1Gi", "1Mi"),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
},
|
},
|
||||||
"zero-storage": {
|
"zero-storage": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "0Mi", ""),
|
makeCapacity("net", waitClassWithProvisioner, node1, "0Mi", ""),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
},
|
},
|
||||||
"zero-volume-size": {
|
"zero-volume-size": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "", "0Mi"),
|
makeCapacity("net", waitClassWithProvisioner, node1, "", "0Mi"),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
},
|
},
|
||||||
"nil-storage": {
|
"nil-storage": {
|
||||||
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
pvcs: []*v1.PersistentVolumeClaim{provisionedPVC},
|
||||||
capacities: []*storagev1beta1.CSIStorageCapacity{
|
capacities: []*storagev1.CSIStorageCapacity{
|
||||||
makeCapacity("net", waitClassWithProvisioner, node1, "", ""),
|
makeCapacity("net", waitClassWithProvisioner, node1, "", ""),
|
||||||
},
|
},
|
||||||
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
reasons: ConflictReasons{ErrReasonNotEnoughSpace},
|
||||||
|
@ -377,7 +377,7 @@ func New(plArgs runtime.Object, fh framework.Handle, fts feature.Features) (fram
|
|||||||
csiNodeInformer := fh.SharedInformerFactory().Storage().V1().CSINodes()
|
csiNodeInformer := fh.SharedInformerFactory().Storage().V1().CSINodes()
|
||||||
capacityCheck := CapacityCheck{
|
capacityCheck := CapacityCheck{
|
||||||
CSIDriverInformer: fh.SharedInformerFactory().Storage().V1().CSIDrivers(),
|
CSIDriverInformer: fh.SharedInformerFactory().Storage().V1().CSIDrivers(),
|
||||||
CSIStorageCapacityInformer: fh.SharedInformerFactory().Storage().V1beta1().CSIStorageCapacities(),
|
CSIStorageCapacityInformer: fh.SharedInformerFactory().Storage().V1().CSIStorageCapacities(),
|
||||||
}
|
}
|
||||||
binder := NewVolumeBinder(fh.ClientSet(), podInformer, nodeInformer, csiNodeInformer, pvcInformer, pvInformer, storageClassInformer, capacityCheck, time.Duration(args.BindTimeoutSeconds)*time.Second)
|
binder := NewVolumeBinder(fh.ClientSet(), podInformer, nodeInformer, csiNodeInformer, pvcInformer, pvInformer, storageClassInformer, capacityCheck, time.Duration(args.BindTimeoutSeconds)*time.Second)
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ import (
|
|||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -1387,7 +1386,7 @@ var _ = utils.SIGDescribe("CSI mock volume", func() {
|
|||||||
// before adding CSIStorageCapacity objects for it.
|
// before adding CSIStorageCapacity objects for it.
|
||||||
for _, capacityStr := range test.capacities {
|
for _, capacityStr := range test.capacities {
|
||||||
capacityQuantity := resource.MustParse(capacityStr)
|
capacityQuantity := resource.MustParse(capacityStr)
|
||||||
capacity := &storagev1beta1.CSIStorageCapacity{
|
capacity := &storagev1.CSIStorageCapacity{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
GenerateName: "fake-capacity-",
|
GenerateName: "fake-capacity-",
|
||||||
},
|
},
|
||||||
@ -1396,10 +1395,10 @@ var _ = utils.SIGDescribe("CSI mock volume", func() {
|
|||||||
NodeTopology: &metav1.LabelSelector{},
|
NodeTopology: &metav1.LabelSelector{},
|
||||||
Capacity: &capacityQuantity,
|
Capacity: &capacityQuantity,
|
||||||
}
|
}
|
||||||
createdCapacity, err := f.ClientSet.StorageV1beta1().CSIStorageCapacities(f.Namespace.Name).Create(context.Background(), capacity, metav1.CreateOptions{})
|
createdCapacity, err := f.ClientSet.StorageV1().CSIStorageCapacities(f.Namespace.Name).Create(context.Background(), capacity, metav1.CreateOptions{})
|
||||||
framework.ExpectNoError(err, "create CSIStorageCapacity %+v", *capacity)
|
framework.ExpectNoError(err, "create CSIStorageCapacity %+v", *capacity)
|
||||||
m.testCleanups = append(m.testCleanups, func() {
|
m.testCleanups = append(m.testCleanups, func() {
|
||||||
f.ClientSet.StorageV1beta1().CSIStorageCapacities(f.Namespace.Name).Delete(context.Background(), createdCapacity.Name, metav1.DeleteOptions{})
|
f.ClientSet.StorageV1().CSIStorageCapacities(f.Namespace.Name).Delete(context.Background(), createdCapacity.Name, metav1.DeleteOptions{})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
"github.com/onsi/gomega/types"
|
"github.com/onsi/gomega/types"
|
||||||
|
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
@ -115,8 +114,8 @@ func (p *capacityTestSuite) DefineTests(driver storageframework.TestDriver, patt
|
|||||||
timeout := time.Minute
|
timeout := time.Minute
|
||||||
pollInterval := time.Second
|
pollInterval := time.Second
|
||||||
matchSC := HaveCapacitiesForClass(sc.Name)
|
matchSC := HaveCapacitiesForClass(sc.Name)
|
||||||
listAll := gomega.Eventually(func() (*storagev1beta1.CSIStorageCapacityList, error) {
|
listAll := gomega.Eventually(func() (*storagev1.CSIStorageCapacityList, error) {
|
||||||
return f.ClientSet.StorageV1beta1().CSIStorageCapacities("").List(context.Background(), metav1.ListOptions{})
|
return f.ClientSet.StorageV1().CSIStorageCapacities("").List(context.Background(), metav1.ListOptions{})
|
||||||
}, timeout, pollInterval)
|
}, timeout, pollInterval)
|
||||||
|
|
||||||
// If we have further information about what storage
|
// If we have further information about what storage
|
||||||
@ -150,7 +149,7 @@ func (p *capacityTestSuite) DefineTests(driver storageframework.TestDriver, patt
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatCapacities(capacities []storagev1beta1.CSIStorageCapacity) []string {
|
func formatCapacities(capacities []storagev1.CSIStorageCapacity) []string {
|
||||||
lines := []string{}
|
lines := []string{}
|
||||||
for _, capacity := range capacities {
|
for _, capacity := range capacities {
|
||||||
lines = append(lines, fmt.Sprintf(" %+v", capacity))
|
lines = append(lines, fmt.Sprintf(" %+v", capacity))
|
||||||
@ -158,7 +157,7 @@ func formatCapacities(capacities []storagev1beta1.CSIStorageCapacity) []string {
|
|||||||
return lines
|
return lines
|
||||||
}
|
}
|
||||||
|
|
||||||
// MatchCapacities runs some kind of check against *storagev1beta1.CSIStorageCapacityList.
|
// MatchCapacities runs some kind of check against *storagev1.CSIStorageCapacityList.
|
||||||
// In case of failure, all actual objects are appended to the failure message.
|
// In case of failure, all actual objects are appended to the failure message.
|
||||||
func MatchCapacities(match types.GomegaMatcher) types.GomegaMatcher {
|
func MatchCapacities(match types.GomegaMatcher) types.GomegaMatcher {
|
||||||
return matchCSIStorageCapacities{match: match}
|
return matchCSIStorageCapacities{match: match}
|
||||||
@ -183,7 +182,7 @@ func (m matchCSIStorageCapacities) NegatedFailureMessage(actual interface{}) (me
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m matchCSIStorageCapacities) dump(actual interface{}) string {
|
func (m matchCSIStorageCapacities) dump(actual interface{}) string {
|
||||||
capacities, ok := actual.(*storagev1beta1.CSIStorageCapacityList)
|
capacities, ok := actual.(*storagev1.CSIStorageCapacityList)
|
||||||
if !ok || capacities == nil {
|
if !ok || capacities == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -201,10 +200,10 @@ type CapacityMatcher interface {
|
|||||||
types.GomegaMatcher
|
types.GomegaMatcher
|
||||||
// MatchedCapacities returns all CSICapacityObjects which were
|
// MatchedCapacities returns all CSICapacityObjects which were
|
||||||
// found during the preceding Match call.
|
// found during the preceding Match call.
|
||||||
MatchedCapacities() []storagev1beta1.CSIStorageCapacity
|
MatchedCapacities() []storagev1.CSIStorageCapacity
|
||||||
}
|
}
|
||||||
|
|
||||||
// HaveCapacitiesForClass filters all storage capacity objects in a *storagev1beta1.CSIStorageCapacityList
|
// HaveCapacitiesForClass filters all storage capacity objects in a *storagev1.CSIStorageCapacityList
|
||||||
// by storage class. Success is when when there is at least one.
|
// by storage class. Success is when when there is at least one.
|
||||||
func HaveCapacitiesForClass(scName string) CapacityMatcher {
|
func HaveCapacitiesForClass(scName string) CapacityMatcher {
|
||||||
return &haveCSIStorageCapacities{scName: scName}
|
return &haveCSIStorageCapacities{scName: scName}
|
||||||
@ -212,15 +211,15 @@ func HaveCapacitiesForClass(scName string) CapacityMatcher {
|
|||||||
|
|
||||||
type haveCSIStorageCapacities struct {
|
type haveCSIStorageCapacities struct {
|
||||||
scName string
|
scName string
|
||||||
matchingCapacities []storagev1beta1.CSIStorageCapacity
|
matchingCapacities []storagev1.CSIStorageCapacity
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ CapacityMatcher = &haveCSIStorageCapacities{}
|
var _ CapacityMatcher = &haveCSIStorageCapacities{}
|
||||||
|
|
||||||
func (h *haveCSIStorageCapacities) Match(actual interface{}) (success bool, err error) {
|
func (h *haveCSIStorageCapacities) Match(actual interface{}) (success bool, err error) {
|
||||||
capacities, ok := actual.(*storagev1beta1.CSIStorageCapacityList)
|
capacities, ok := actual.(*storagev1.CSIStorageCapacityList)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, fmt.Errorf("expected *storagev1beta1.CSIStorageCapacityList, got: %T", actual)
|
return false, fmt.Errorf("expected *storagev1.CSIStorageCapacityList, got: %T", actual)
|
||||||
}
|
}
|
||||||
h.matchingCapacities = nil
|
h.matchingCapacities = nil
|
||||||
for _, capacity := range capacities.Items {
|
for _, capacity := range capacities.Items {
|
||||||
@ -231,7 +230,7 @@ func (h *haveCSIStorageCapacities) Match(actual interface{}) (success bool, err
|
|||||||
return len(h.matchingCapacities) > 0, nil
|
return len(h.matchingCapacities) > 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *haveCSIStorageCapacities) MatchedCapacities() []storagev1beta1.CSIStorageCapacity {
|
func (h *haveCSIStorageCapacities) MatchedCapacities() []storagev1.CSIStorageCapacity {
|
||||||
return h.matchingCapacities
|
return h.matchingCapacities
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,8 +263,8 @@ type haveLocalStorageCapacities struct {
|
|||||||
topologyKey string
|
topologyKey string
|
||||||
|
|
||||||
matchSuccess bool
|
matchSuccess bool
|
||||||
expectedCapacities []storagev1beta1.CSIStorageCapacity
|
expectedCapacities []storagev1.CSIStorageCapacity
|
||||||
unexpectedCapacities []storagev1beta1.CSIStorageCapacity
|
unexpectedCapacities []storagev1.CSIStorageCapacity
|
||||||
missingTopologyValues []string
|
missingTopologyValues []string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +339,7 @@ func (h *haveLocalStorageCapacities) Match(actual interface{}) (success bool, er
|
|||||||
return len(h.unexpectedCapacities) == 0 && len(h.missingTopologyValues) == 0, nil
|
return len(h.unexpectedCapacities) == 0 && len(h.missingTopologyValues) == 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *haveLocalStorageCapacities) MatchedCapacities() []storagev1beta1.CSIStorageCapacity {
|
func (h *haveLocalStorageCapacities) MatchedCapacities() []storagev1.CSIStorageCapacity {
|
||||||
return h.match.MatchedCapacities()
|
return h.match.MatchedCapacities()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
storagev1beta1 "k8s.io/api/storage/v1beta1"
|
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/rand"
|
"k8s.io/apimachinery/pkg/util/rand"
|
||||||
@ -929,8 +928,8 @@ func TestCapacity(t *testing.T) {
|
|||||||
|
|
||||||
// Create CSIStorageCapacity
|
// Create CSIStorageCapacity
|
||||||
if test.haveCapacity {
|
if test.haveCapacity {
|
||||||
if _, err := config.client.StorageV1beta1().CSIStorageCapacities("default").Create(context.TODO(),
|
if _, err := config.client.StorageV1().CSIStorageCapacities("default").Create(context.TODO(),
|
||||||
&storagev1beta1.CSIStorageCapacity{
|
&storagev1.CSIStorageCapacity{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
GenerateName: "foo-",
|
GenerateName: "foo-",
|
||||||
},
|
},
|
||||||
@ -1143,7 +1142,7 @@ func deleteTestObjects(client clientset.Interface, ns string, option metav1.Dele
|
|||||||
client.CoreV1().PersistentVolumes().DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
client.CoreV1().PersistentVolumes().DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
||||||
client.StorageV1().StorageClasses().DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
client.StorageV1().StorageClasses().DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
||||||
client.StorageV1().CSIDrivers().DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
client.StorageV1().CSIDrivers().DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
||||||
client.StorageV1beta1().CSIStorageCapacities("default").DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
client.StorageV1().CSIStorageCapacities("default").DeleteCollection(context.TODO(), option, metav1.ListOptions{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeStorageClass(name string, mode *storagev1.VolumeBindingMode) *storagev1.StorageClass {
|
func makeStorageClass(name string, mode *storagev1.VolumeBindingMode) *storagev1.StorageClass {
|
||||||
|
Loading…
Reference in New Issue
Block a user