Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
a9765bce
Commit
a9765bce
authored
Oct 27, 2017
by
Derek Carr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update e2e and integration tests
parent
5b4ca143
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
113 additions
and
27 deletions
+113
-27
.golint_failures
hack/.golint_failures
+0
-1
BUILD
test/e2e/scheduling/BUILD
+1
-0
resource_quota.go
test/e2e/scheduling/resource_quota.go
+65
-0
BUILD
test/integration/quota/BUILD
+1
-2
quota_test.go
test/integration/quota/quota_test.go
+46
-24
No files found.
hack/.golint_failures
View file @
a9765bce
...
@@ -235,7 +235,6 @@ pkg/proxy/util
...
@@ -235,7 +235,6 @@ pkg/proxy/util
pkg/proxy/winkernel
pkg/proxy/winkernel
pkg/proxy/winuserspace
pkg/proxy/winuserspace
pkg/quota/evaluator/core
pkg/quota/evaluator/core
pkg/quota/generic
pkg/registry/admissionregistration/externaladmissionhookconfiguration/storage
pkg/registry/admissionregistration/externaladmissionhookconfiguration/storage
pkg/registry/admissionregistration/initializerconfiguration/storage
pkg/registry/admissionregistration/initializerconfiguration/storage
pkg/registry/admissionregistration/rest
pkg/registry/admissionregistration/rest
...
...
test/e2e/scheduling/BUILD
View file @
a9765bce
...
@@ -38,6 +38,7 @@ go_library(
...
@@ -38,6 +38,7 @@ go_library(
"//vendor/github.com/onsi/gomega:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/api/scheduling/v1alpha1:go_default_library",
"//vendor/k8s.io/api/scheduling/v1alpha1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
...
...
test/e2e/scheduling/resource_quota.go
View file @
a9765bce
...
@@ -21,6 +21,7 @@ import (
...
@@ -21,6 +21,7 @@ import (
"time"
"time"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
extensions
"k8s.io/api/extensions/v1beta1"
"k8s.io/apimachinery/pkg/api/errors"
"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"
...
@@ -409,6 +410,41 @@ var _ = SIGDescribe("ResourceQuota", func() {
...
@@ -409,6 +410,41 @@ var _ = SIGDescribe("ResourceQuota", func() {
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
})
})
It
(
"should create a ResourceQuota and capture the life of a replica set."
,
func
()
{
By
(
"Creating a ResourceQuota"
)
quotaName
:=
"test-quota"
resourceQuota
:=
newTestResourceQuota
(
quotaName
)
resourceQuota
,
err
:=
createResourceQuota
(
f
.
ClientSet
,
f
.
Namespace
.
Name
,
resourceQuota
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"Ensuring resource quota status is calculated"
)
usedResources
:=
v1
.
ResourceList
{}
usedResources
[
v1
.
ResourceQuotas
]
=
resource
.
MustParse
(
"1"
)
usedResources
[
v1
.
ResourceName
(
"count/replicasets.extensions"
)]
=
resource
.
MustParse
(
"0"
)
err
=
waitForResourceQuota
(
f
.
ClientSet
,
f
.
Namespace
.
Name
,
quotaName
,
usedResources
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"Creating a ReplicaSet"
)
replicaSet
:=
newTestReplicaSetForQuota
(
"test-rs"
,
"nginx"
,
0
)
replicaSet
,
err
=
f
.
ClientSet
.
Extensions
()
.
ReplicaSets
(
f
.
Namespace
.
Name
)
.
Create
(
replicaSet
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"Ensuring resource quota status captures replicaset creation"
)
usedResources
=
v1
.
ResourceList
{}
usedResources
[
v1
.
ResourceName
(
"count/replicasets.extensions"
)]
=
resource
.
MustParse
(
"1"
)
err
=
waitForResourceQuota
(
f
.
ClientSet
,
f
.
Namespace
.
Name
,
quotaName
,
usedResources
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"Deleting a ReplicaSet"
)
err
=
f
.
ClientSet
.
Extensions
()
.
ReplicaSets
(
f
.
Namespace
.
Name
)
.
Delete
(
replicaSet
.
Name
,
nil
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
By
(
"Ensuring resource quota status released usage"
)
usedResources
[
v1
.
ResourceName
(
"count/replicasets.extensions"
)]
=
resource
.
MustParse
(
"0"
)
err
=
waitForResourceQuota
(
f
.
ClientSet
,
f
.
Namespace
.
Name
,
quotaName
,
usedResources
)
Expect
(
err
)
.
NotTo
(
HaveOccurred
())
})
It
(
"should create a ResourceQuota and capture the life of a persistent volume claim. [sig-storage]"
,
func
()
{
It
(
"should create a ResourceQuota and capture the life of a persistent volume claim. [sig-storage]"
,
func
()
{
By
(
"Creating a ResourceQuota"
)
By
(
"Creating a ResourceQuota"
)
quotaName
:=
"test-quota"
quotaName
:=
"test-quota"
...
@@ -708,6 +744,8 @@ func newTestResourceQuota(name string) *v1.ResourceQuota {
...
@@ -708,6 +744,8 @@ func newTestResourceQuota(name string) *v1.ResourceQuota {
hard
[
v1
.
ResourceRequestsStorage
]
=
resource
.
MustParse
(
"10Gi"
)
hard
[
v1
.
ResourceRequestsStorage
]
=
resource
.
MustParse
(
"10Gi"
)
hard
[
core
.
V1ResourceByStorageClass
(
classGold
,
v1
.
ResourcePersistentVolumeClaims
)]
=
resource
.
MustParse
(
"10"
)
hard
[
core
.
V1ResourceByStorageClass
(
classGold
,
v1
.
ResourcePersistentVolumeClaims
)]
=
resource
.
MustParse
(
"10"
)
hard
[
core
.
V1ResourceByStorageClass
(
classGold
,
v1
.
ResourceRequestsStorage
)]
=
resource
.
MustParse
(
"10Gi"
)
hard
[
core
.
V1ResourceByStorageClass
(
classGold
,
v1
.
ResourceRequestsStorage
)]
=
resource
.
MustParse
(
"10Gi"
)
// test quota on discovered resource type
hard
[
v1
.
ResourceName
(
"count/replicasets.extensions"
)]
=
resource
.
MustParse
(
"5"
)
return
&
v1
.
ResourceQuota
{
return
&
v1
.
ResourceQuota
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
},
Spec
:
v1
.
ResourceQuotaSpec
{
Hard
:
hard
},
Spec
:
v1
.
ResourceQuotaSpec
{
Hard
:
hard
},
...
@@ -784,6 +822,33 @@ func newTestReplicationControllerForQuota(name, image string, replicas int32) *v
...
@@ -784,6 +822,33 @@ func newTestReplicationControllerForQuota(name, image string, replicas int32) *v
}
}
}
}
// newTestReplicaSetForQuota returns a simple replica set
func
newTestReplicaSetForQuota
(
name
,
image
string
,
replicas
int32
)
*
extensions
.
ReplicaSet
{
zero
:=
int64
(
0
)
return
&
extensions
.
ReplicaSet
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
name
,
},
Spec
:
extensions
.
ReplicaSetSpec
{
Replicas
:
&
replicas
,
Template
:
v1
.
PodTemplateSpec
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
map
[
string
]
string
{
"name"
:
name
},
},
Spec
:
v1
.
PodSpec
{
TerminationGracePeriodSeconds
:
&
zero
,
Containers
:
[]
v1
.
Container
{
{
Name
:
name
,
Image
:
image
,
},
},
},
},
},
}
}
// newTestServiceForQuota returns a simple service
// newTestServiceForQuota returns a simple service
func
newTestServiceForQuota
(
name
string
,
serviceType
v1
.
ServiceType
)
*
v1
.
Service
{
func
newTestServiceForQuota
(
name
string
,
serviceType
v1
.
ServiceType
)
*
v1
.
Service
{
return
&
v1
.
Service
{
return
&
v1
.
Service
{
...
...
test/integration/quota/BUILD
View file @
a9765bce
...
@@ -15,7 +15,6 @@ go_test(
...
@@ -15,7 +15,6 @@ go_test(
importpath = "k8s.io/kubernetes/test/integration/quota",
importpath = "k8s.io/kubernetes/test/integration/quota",
tags = ["integration"],
tags = ["integration"],
deps = [
deps = [
"//pkg/api:go_default_library",
"//pkg/api/testapi:go_default_library",
"//pkg/api/testapi:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
...
@@ -23,6 +22,7 @@ go_test(
...
@@ -23,6 +22,7 @@ go_test(
"//pkg/controller/replication:go_default_library",
"//pkg/controller/replication:go_default_library",
"//pkg/controller/resourcequota:go_default_library",
"//pkg/controller/resourcequota:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//pkg/quota/generic:go_default_library",
"//pkg/quota/install:go_default_library",
"//pkg/quota/install:go_default_library",
"//plugin/pkg/admission/resourcequota:go_default_library",
"//plugin/pkg/admission/resourcequota:go_default_library",
"//plugin/pkg/admission/resourcequota/apis/resourcequota:go_default_library",
"//plugin/pkg/admission/resourcequota/apis/resourcequota:go_default_library",
...
@@ -32,7 +32,6 @@ go_test(
...
@@ -32,7 +32,6 @@ go_test(
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/fields:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
...
...
test/integration/quota/quota_test.go
View file @
a9765bce
...
@@ -28,14 +28,12 @@ import (
...
@@ -28,14 +28,12 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/informers"
"k8s.io/client-go/informers"
clientset
"k8s.io/client-go/kubernetes"
clientset
"k8s.io/client-go/kubernetes"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/tools/record"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
internalinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
internalinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
...
@@ -43,6 +41,7 @@ import (
...
@@ -43,6 +41,7 @@ import (
replicationcontroller
"k8s.io/kubernetes/pkg/controller/replication"
replicationcontroller
"k8s.io/kubernetes/pkg/controller/replication"
resourcequotacontroller
"k8s.io/kubernetes/pkg/controller/resourcequota"
resourcequotacontroller
"k8s.io/kubernetes/pkg/controller/resourcequota"
kubeadmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
kubeadmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
"k8s.io/kubernetes/pkg/quota/generic"
quotainstall
"k8s.io/kubernetes/pkg/quota/install"
quotainstall
"k8s.io/kubernetes/pkg/quota/install"
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota"
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota"
resourcequotaapi
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota"
resourcequotaapi
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota"
...
@@ -74,8 +73,8 @@ func TestQuota(t *testing.T) {
...
@@ -74,8 +73,8 @@ func TestQuota(t *testing.T) {
admission
.
(
kubeadmission
.
WantsInternalKubeClientSet
)
.
SetInternalKubeClientSet
(
internalClientset
)
admission
.
(
kubeadmission
.
WantsInternalKubeClientSet
)
.
SetInternalKubeClientSet
(
internalClientset
)
internalInformers
:=
internalinformers
.
NewSharedInformerFactory
(
internalClientset
,
controller
.
NoResyncPeriodFunc
())
internalInformers
:=
internalinformers
.
NewSharedInformerFactory
(
internalClientset
,
controller
.
NoResyncPeriodFunc
())
admission
.
(
kubeadmission
.
WantsInternalKubeInformerFactory
)
.
SetInternalKubeInformerFactory
(
internalInformers
)
admission
.
(
kubeadmission
.
WantsInternalKubeInformerFactory
)
.
SetInternalKubeInformerFactory
(
internalInformers
)
q
uotaRegistry
:=
quotainstall
.
NewRegistry
(
nil
,
nil
)
q
ca
:=
quotainstall
.
NewQuotaConfigurationForAdmission
(
)
admission
.
(
kubeadmission
.
WantsQuota
Registry
)
.
SetQuotaRegistry
(
quotaRegistry
)
admission
.
(
kubeadmission
.
WantsQuota
Configuration
)
.
SetQuotaConfiguration
(
qca
)
defer
close
(
admissionCh
)
defer
close
(
admissionCh
)
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
...
@@ -101,22 +100,33 @@ func TestQuota(t *testing.T) {
...
@@ -101,22 +100,33 @@ func TestQuota(t *testing.T) {
rm
.
SetEventRecorder
(
&
record
.
FakeRecorder
{})
rm
.
SetEventRecorder
(
&
record
.
FakeRecorder
{})
go
rm
.
Run
(
3
,
controllerCh
)
go
rm
.
Run
(
3
,
controllerCh
)
resourceQuotaRegistry
:=
quotainstall
.
NewRegistry
(
clientset
,
nil
)
discoveryFunc
:=
clientset
.
Discovery
()
.
ServerPreferredNamespacedResources
groupKindsToReplenish
:=
[]
schema
.
GroupKind
{
listerFuncForResource
:=
generic
.
ListerFuncForResourceFunc
(
informers
.
ForResource
)
api
.
Kind
(
"Pod"
),
qc
:=
quotainstall
.
NewQuotaConfigurationForControllers
(
listerFuncForResource
)
}
informersStarted
:=
make
(
chan
struct
{})
resourceQuotaControllerOptions
:=
&
resourcequotacontroller
.
ResourceQuotaControllerOptions
{
resourceQuotaControllerOptions
:=
&
resourcequotacontroller
.
ResourceQuotaControllerOptions
{
QuotaClient
:
clientset
.
Core
(),
QuotaClient
:
clientset
.
Core
(),
ResourceQuotaInformer
:
informers
.
Core
()
.
V1
()
.
ResourceQuotas
(),
ResourceQuotaInformer
:
informers
.
Core
()
.
V1
()
.
ResourceQuotas
(),
ResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
ResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
Registry
:
resourceQuotaRegistry
,
InformerFactory
:
informers
,
GroupKindsToReplenish
:
groupKindsToReplenish
,
ReplenishmentResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
ReplenishmentResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
ControllerFactory
:
resourcequotacontroller
.
NewReplenishmentControllerFactory
(
informers
),
DiscoveryFunc
:
discoveryFunc
,
IgnoredResourcesFunc
:
qc
.
IgnoredResources
,
InformersStarted
:
informersStarted
,
Registry
:
generic
.
NewRegistry
(
qc
.
Evaluators
()),
}
resourceQuotaController
,
err
:=
resourcequotacontroller
.
NewResourceQuotaController
(
resourceQuotaControllerOptions
)
if
err
!=
nil
{
t
.
Fatalf
(
"unexpected err: %v"
,
err
)
}
}
go
resourcequotacontroller
.
NewResourceQuotaController
(
resourceQuotaControllerOptions
)
.
Run
(
2
,
controllerCh
)
go
resourceQuotaController
.
Run
(
2
,
controllerCh
)
// Periodically the quota controller to detect new resource types
go
resourceQuotaController
.
Sync
(
discoveryFunc
,
30
*
time
.
Second
,
controllerCh
)
internalInformers
.
Start
(
controllerCh
)
internalInformers
.
Start
(
controllerCh
)
informers
.
Start
(
controllerCh
)
informers
.
Start
(
controllerCh
)
close
(
informersStarted
)
startTime
:=
time
.
Now
()
startTime
:=
time
.
Now
()
scale
(
t
,
ns2
.
Name
,
clientset
)
scale
(
t
,
ns2
.
Name
,
clientset
)
...
@@ -158,7 +168,6 @@ func waitForQuota(t *testing.T, quota *v1.ResourceQuota, clientset *clientset.Cl
...
@@ -158,7 +168,6 @@ func waitForQuota(t *testing.T, quota *v1.ResourceQuota, clientset *clientset.Cl
default
:
default
:
return
false
,
nil
return
false
,
nil
}
}
switch
cast
:=
event
.
Object
.
(
type
)
{
switch
cast
:=
event
.
Object
.
(
type
)
{
case
*
v1
.
ResourceQuota
:
case
*
v1
.
ResourceQuota
:
if
len
(
cast
.
Status
.
Hard
)
>
0
{
if
len
(
cast
.
Status
.
Hard
)
>
0
{
...
@@ -254,7 +263,7 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
...
@@ -254,7 +263,7 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
},
},
},
},
}
}
q
uotaRegistry
:=
quotainstall
.
NewRegistry
(
nil
,
nil
)
q
ca
:=
quotainstall
.
NewQuotaConfigurationForAdmission
(
)
admission
,
err
:=
resourcequota
.
NewResourceQuota
(
config
,
5
,
admissionCh
)
admission
,
err
:=
resourcequota
.
NewResourceQuota
(
config
,
5
,
admissionCh
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
...
@@ -262,7 +271,7 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
...
@@ -262,7 +271,7 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
admission
.
(
kubeadmission
.
WantsInternalKubeClientSet
)
.
SetInternalKubeClientSet
(
internalClientset
)
admission
.
(
kubeadmission
.
WantsInternalKubeClientSet
)
.
SetInternalKubeClientSet
(
internalClientset
)
internalInformers
:=
internalinformers
.
NewSharedInformerFactory
(
internalClientset
,
controller
.
NoResyncPeriodFunc
())
internalInformers
:=
internalinformers
.
NewSharedInformerFactory
(
internalClientset
,
controller
.
NoResyncPeriodFunc
())
admission
.
(
kubeadmission
.
WantsInternalKubeInformerFactory
)
.
SetInternalKubeInformerFactory
(
internalInformers
)
admission
.
(
kubeadmission
.
WantsInternalKubeInformerFactory
)
.
SetInternalKubeInformerFactory
(
internalInformers
)
admission
.
(
kubeadmission
.
WantsQuota
Registry
)
.
SetQuotaRegistry
(
quotaRegistry
)
admission
.
(
kubeadmission
.
WantsQuota
Configuration
)
.
SetQuotaConfiguration
(
qca
)
defer
close
(
admissionCh
)
defer
close
(
admissionCh
)
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
masterConfig
:=
framework
.
NewIntegrationTestMasterConfig
()
...
@@ -286,22 +295,33 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
...
@@ -286,22 +295,33 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
rm
.
SetEventRecorder
(
&
record
.
FakeRecorder
{})
rm
.
SetEventRecorder
(
&
record
.
FakeRecorder
{})
go
rm
.
Run
(
3
,
controllerCh
)
go
rm
.
Run
(
3
,
controllerCh
)
resourceQuotaRegistry
:=
quotainstall
.
NewRegistry
(
clientset
,
nil
)
discoveryFunc
:=
clientset
.
Discovery
()
.
ServerPreferredNamespacedResources
groupKindsToReplenish
:=
[]
schema
.
GroupKind
{
listerFuncForResource
:=
generic
.
ListerFuncForResourceFunc
(
informers
.
ForResource
)
api
.
Kind
(
"Pod"
),
qc
:=
quotainstall
.
NewQuotaConfigurationForControllers
(
listerFuncForResource
)
}
informersStarted
:=
make
(
chan
struct
{})
resourceQuotaControllerOptions
:=
&
resourcequotacontroller
.
ResourceQuotaControllerOptions
{
resourceQuotaControllerOptions
:=
&
resourcequotacontroller
.
ResourceQuotaControllerOptions
{
QuotaClient
:
clientset
.
Core
(),
QuotaClient
:
clientset
.
Core
(),
ResourceQuotaInformer
:
informers
.
Core
()
.
V1
()
.
ResourceQuotas
(),
ResourceQuotaInformer
:
informers
.
Core
()
.
V1
()
.
ResourceQuotas
(),
ResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
ResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
Registry
:
resourceQuotaRegistry
,
InformerFactory
:
informers
,
GroupKindsToReplenish
:
groupKindsToReplenish
,
ReplenishmentResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
ReplenishmentResyncPeriod
:
controller
.
NoResyncPeriodFunc
,
ControllerFactory
:
resourcequotacontroller
.
NewReplenishmentControllerFactory
(
informers
),
DiscoveryFunc
:
discoveryFunc
,
IgnoredResourcesFunc
:
qc
.
IgnoredResources
,
InformersStarted
:
informersStarted
,
Registry
:
generic
.
NewRegistry
(
qc
.
Evaluators
()),
}
resourceQuotaController
,
err
:=
resourcequotacontroller
.
NewResourceQuotaController
(
resourceQuotaControllerOptions
)
if
err
!=
nil
{
t
.
Fatalf
(
"unexpected err: %v"
,
err
)
}
}
go
resourcequotacontroller
.
NewResourceQuotaController
(
resourceQuotaControllerOptions
)
.
Run
(
2
,
controllerCh
)
go
resourceQuotaController
.
Run
(
2
,
controllerCh
)
// Periodically the quota controller to detect new resource types
go
resourceQuotaController
.
Sync
(
discoveryFunc
,
30
*
time
.
Second
,
controllerCh
)
internalInformers
.
Start
(
controllerCh
)
internalInformers
.
Start
(
controllerCh
)
informers
.
Start
(
controllerCh
)
informers
.
Start
(
controllerCh
)
close
(
informersStarted
)
// try to create a pod
// try to create a pod
pod
:=
&
v1
.
Pod
{
pod
:=
&
v1
.
Pod
{
...
@@ -323,6 +343,7 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
...
@@ -323,6 +343,7 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
}
}
// now create a covering quota
// now create a covering quota
// note: limited resource does a matchContains, so we now have "pods" matching "pods" and "count/pods"
quota
:=
&
v1
.
ResourceQuota
{
quota
:=
&
v1
.
ResourceQuota
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"quota"
,
Name
:
"quota"
,
...
@@ -330,7 +351,8 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
...
@@ -330,7 +351,8 @@ func TestQuotaLimitedResourceDenial(t *testing.T) {
},
},
Spec
:
v1
.
ResourceQuotaSpec
{
Spec
:
v1
.
ResourceQuotaSpec
{
Hard
:
v1
.
ResourceList
{
Hard
:
v1
.
ResourceList
{
v1
.
ResourcePods
:
resource
.
MustParse
(
"1000"
),
v1
.
ResourcePods
:
resource
.
MustParse
(
"1000"
),
v1
.
ResourceName
(
"count/pods"
)
:
resource
.
MustParse
(
"1000"
),
},
},
},
},
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment