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
61ba80cb
Commit
61ba80cb
authored
Aug 24, 2018
by
yue9944882
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
externalize limitrange
parent
444373b4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
43 additions
and
29 deletions
+43
-29
BUILD
plugin/pkg/admission/limitranger/BUILD
+11
-8
admission.go
plugin/pkg/admission/limitranger/admission.go
+0
-0
admission_test.go
plugin/pkg/admission/limitranger/admission_test.go
+28
-17
interfaces.go
plugin/pkg/admission/limitranger/interfaces.go
+4
-4
No files found.
plugin/pkg/admission/limitranger/BUILD
View file @
61ba80cb
...
@@ -15,10 +15,7 @@ go_library(
...
@@ -15,10 +15,7 @@ go_library(
importpath = "k8s.io/kubernetes/plugin/pkg/admission/limitranger",
importpath = "k8s.io/kubernetes/plugin/pkg/admission/limitranger",
deps = [
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/client/listers/core/internalversion:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
...
@@ -26,6 +23,10 @@ go_library(
...
@@ -26,6 +23,10 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
"//vendor/github.com/hashicorp/golang-lru:go_default_library",
"//vendor/github.com/hashicorp/golang-lru:go_default_library",
],
],
)
)
...
@@ -36,16 +37,18 @@ go_test(
...
@@ -36,16 +37,18 @@ go_test(
embed = [":go_default_library"],
embed = [":go_default_library"],
deps = [
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/apis/core/v1:go_default_library",
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
],
],
)
)
...
...
plugin/pkg/admission/limitranger/admission.go
View file @
61ba80cb
This diff is collapsed.
Click to expand it.
plugin/pkg/admission/limitranger/admission_test.go
View file @
61ba80cb
...
@@ -22,18 +22,20 @@ import (
...
@@ -22,18 +22,20 @@ import (
"testing"
"testing"
"time"
"time"
corev1
"k8s.io/api/core/v1"
apiequality
"k8s.io/apimachinery/pkg/api/equality"
apiequality
"k8s.io/apimachinery/pkg/api/equality"
"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/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
genericadmissioninitializer
"k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/client-go/informers"
clientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
core
"k8s.io/client-go/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/apis/core/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
kubeadmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
)
)
func
getComputeResourceList
(
cpu
,
memory
string
)
api
.
ResourceList
{
func
getComputeResourceList
(
cpu
,
memory
string
)
api
.
ResourceList
{
...
@@ -63,8 +65,8 @@ func getResourceRequirements(requests, limits api.ResourceList) api.ResourceRequ
...
@@ -63,8 +65,8 @@ func getResourceRequirements(requests, limits api.ResourceList) api.ResourceRequ
}
}
// createLimitRange creates a limit range with the specified data
// createLimitRange creates a limit range with the specified data
func
createLimitRange
(
limitType
api
.
LimitType
,
min
,
max
,
defaultLimit
,
defaultRequest
,
maxLimitRequestRatio
api
.
ResourceList
)
api
.
LimitRange
{
func
createLimitRange
(
limitType
api
.
LimitType
,
min
,
max
,
defaultLimit
,
defaultRequest
,
maxLimitRequestRatio
api
.
ResourceList
)
corev1
.
LimitRange
{
return
api
.
LimitRange
{
internalLimitRage
:=
api
.
LimitRange
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"abc"
,
Name
:
"abc"
,
Namespace
:
"test"
,
Namespace
:
"test"
,
...
@@ -82,10 +84,13 @@ func createLimitRange(limitType api.LimitType, min, max, defaultLimit, defaultRe
...
@@ -82,10 +84,13 @@ func createLimitRange(limitType api.LimitType, min, max, defaultLimit, defaultRe
},
},
},
},
}
}
externalLimitRange
:=
corev1
.
LimitRange
{}
v1
.
Convert_core_LimitRange_To_v1_LimitRange
(
&
internalLimitRage
,
&
externalLimitRange
,
nil
)
return
externalLimitRange
}
}
func
validLimitRange
()
api
.
LimitRange
{
func
validLimitRange
()
corev1
.
LimitRange
{
return
api
.
LimitRange
{
internalLimitRange
:=
api
.
LimitRange
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"abc"
,
Name
:
"abc"
,
Namespace
:
"test"
,
Namespace
:
"test"
,
...
@@ -107,10 +112,13 @@ func validLimitRange() api.LimitRange {
...
@@ -107,10 +112,13 @@ func validLimitRange() api.LimitRange {
},
},
},
},
}
}
externalLimitRange
:=
corev1
.
LimitRange
{}
v1
.
Convert_core_LimitRange_To_v1_LimitRange
(
&
internalLimitRange
,
&
externalLimitRange
,
nil
)
return
externalLimitRange
}
}
func
validLimitRangeNoDefaults
()
api
.
LimitRange
{
func
validLimitRangeNoDefaults
()
corev1
.
LimitRange
{
return
api
.
LimitRange
{
internalLimitRange
:=
api
.
LimitRange
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"abc"
,
Name
:
"abc"
,
Namespace
:
"test"
,
Namespace
:
"test"
,
...
@@ -130,6 +138,9 @@ func validLimitRangeNoDefaults() api.LimitRange {
...
@@ -130,6 +138,9 @@ func validLimitRangeNoDefaults() api.LimitRange {
},
},
},
},
}
}
externalLimitRange
:=
corev1
.
LimitRange
{}
v1
.
Convert_core_LimitRange_To_v1_LimitRange
(
&
internalLimitRange
,
&
externalLimitRange
,
nil
)
return
externalLimitRange
}
}
func
validPod
(
name
string
,
numContainers
int
,
resources
api
.
ResourceRequirements
)
api
.
Pod
{
func
validPod
(
name
string
,
numContainers
int
,
resources
api
.
ResourceRequirements
)
api
.
Pod
{
...
@@ -255,7 +266,7 @@ func TestMergePodResourceRequirements(t *testing.T) {
...
@@ -255,7 +266,7 @@ func TestMergePodResourceRequirements(t *testing.T) {
func
TestPodLimitFunc
(
t
*
testing
.
T
)
{
func
TestPodLimitFunc
(
t
*
testing
.
T
)
{
type
testCase
struct
{
type
testCase
struct
{
pod
api
.
Pod
pod
api
.
Pod
limitRange
api
.
LimitRange
limitRange
corev1
.
LimitRange
}
}
successCases
:=
[]
testCase
{
successCases
:=
[]
testCase
{
...
@@ -686,7 +697,7 @@ func TestPodLimitFuncApplyDefault(t *testing.T) {
...
@@ -686,7 +697,7 @@ func TestPodLimitFuncApplyDefault(t *testing.T) {
func
TestLimitRangerIgnoresSubresource
(
t
*
testing
.
T
)
{
func
TestLimitRangerIgnoresSubresource
(
t
*
testing
.
T
)
{
limitRange
:=
validLimitRangeNoDefaults
()
limitRange
:=
validLimitRangeNoDefaults
()
mockClient
:=
newMockClientForTest
([]
api
.
LimitRange
{
limitRange
})
mockClient
:=
newMockClientForTest
([]
corev1
.
LimitRange
{
limitRange
})
handler
,
informerFactory
,
err
:=
newHandlerForTest
(
mockClient
)
handler
,
informerFactory
,
err
:=
newHandlerForTest
(
mockClient
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error initializing handler: %v"
,
err
)
t
.
Errorf
(
"unexpected error initializing handler: %v"
,
err
)
...
@@ -712,7 +723,7 @@ func TestLimitRangerIgnoresSubresource(t *testing.T) {
...
@@ -712,7 +723,7 @@ func TestLimitRangerIgnoresSubresource(t *testing.T) {
func
TestLimitRangerAdmitPod
(
t
*
testing
.
T
)
{
func
TestLimitRangerAdmitPod
(
t
*
testing
.
T
)
{
limitRange
:=
validLimitRangeNoDefaults
()
limitRange
:=
validLimitRangeNoDefaults
()
mockClient
:=
newMockClientForTest
([]
api
.
LimitRange
{
limitRange
})
mockClient
:=
newMockClientForTest
([]
corev1
.
LimitRange
{
limitRange
})
handler
,
informerFactory
,
err
:=
newHandlerForTest
(
mockClient
)
handler
,
informerFactory
,
err
:=
newHandlerForTest
(
mockClient
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error initializing handler: %v"
,
err
)
t
.
Errorf
(
"unexpected error initializing handler: %v"
,
err
)
...
@@ -745,10 +756,10 @@ func TestLimitRangerAdmitPod(t *testing.T) {
...
@@ -745,10 +756,10 @@ func TestLimitRangerAdmitPod(t *testing.T) {
}
}
// newMockClientForTest creates a mock client that returns a client configured for the specified list of limit ranges
// newMockClientForTest creates a mock client that returns a client configured for the specified list of limit ranges
func
newMockClientForTest
(
limitRanges
[]
api
.
LimitRange
)
*
fake
.
Clientset
{
func
newMockClientForTest
(
limitRanges
[]
corev1
.
LimitRange
)
*
fake
.
Clientset
{
mockClient
:=
&
fake
.
Clientset
{}
mockClient
:=
&
fake
.
Clientset
{}
mockClient
.
AddReactor
(
"list"
,
"limitranges"
,
func
(
action
core
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
mockClient
.
AddReactor
(
"list"
,
"limitranges"
,
func
(
action
core
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
limitRangeList
:=
&
api
.
LimitRangeList
{
limitRangeList
:=
&
corev1
.
LimitRangeList
{
ListMeta
:
metav1
.
ListMeta
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
len
(
limitRanges
)),
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
len
(
limitRanges
)),
},
},
...
@@ -769,7 +780,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
...
@@ -769,7 +780,7 @@ func newHandlerForTest(c clientset.Interface) (*LimitRanger, informers.SharedInf
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
f
,
err
return
nil
,
f
,
err
}
}
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
pluginInitializer
.
Initialize
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
err
=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
return
handler
,
f
,
err
...
@@ -788,7 +799,7 @@ func validPersistentVolumeClaim(name string, resources api.ResourceRequirements)
...
@@ -788,7 +799,7 @@ func validPersistentVolumeClaim(name string, resources api.ResourceRequirements)
func
TestPersistentVolumeClaimLimitFunc
(
t
*
testing
.
T
)
{
func
TestPersistentVolumeClaimLimitFunc
(
t
*
testing
.
T
)
{
type
testCase
struct
{
type
testCase
struct
{
pvc
api
.
PersistentVolumeClaim
pvc
api
.
PersistentVolumeClaim
limitRange
api
.
LimitRange
limitRange
corev1
.
LimitRange
}
}
successCases
:=
[]
testCase
{
successCases
:=
[]
testCase
{
...
...
plugin/pkg/admission/limitranger/interfaces.go
View file @
61ba80cb
...
@@ -17,20 +17,20 @@ limitations under the License.
...
@@ -17,20 +17,20 @@ limitations under the License.
package
limitranger
package
limitranger
import
(
import
(
corev1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/admission"
"k8s.io/apiserver/pkg/admission"
api
"k8s.io/kubernetes/pkg/apis/core"
)
)
type
LimitRangerActions
interface
{
type
LimitRangerActions
interface
{
// MutateLimit is a pluggable function to set limits on the object.
// MutateLimit is a pluggable function to set limits on the object.
MutateLimit
(
limitRange
*
api
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
MutateLimit
(
limitRange
*
corev1
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
// ValidateLimits is a pluggable function to enforce limits on the object.
// ValidateLimits is a pluggable function to enforce limits on the object.
ValidateLimit
(
limitRange
*
api
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
ValidateLimit
(
limitRange
*
corev1
.
LimitRange
,
kind
string
,
obj
runtime
.
Object
)
error
// SupportsAttributes is a pluggable function to allow overridding what resources the limitranger
// SupportsAttributes is a pluggable function to allow overridding what resources the limitranger
// supports.
// supports.
SupportsAttributes
(
attr
admission
.
Attributes
)
bool
SupportsAttributes
(
attr
admission
.
Attributes
)
bool
// SupportsLimit is a pluggable function to allow ignoring limits that should not be applied
// SupportsLimit is a pluggable function to allow ignoring limits that should not be applied
// for any reason.
// for any reason.
SupportsLimit
(
limitRange
*
api
.
LimitRange
)
bool
SupportsLimit
(
limitRange
*
corev1
.
LimitRange
)
bool
}
}
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