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
055a816b
Unverified
Commit
055a816b
authored
Sep 26, 2018
by
k8s-ci-robot
Committed by
GitHub
Sep 26, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #67696 from yue9944882/chore/cleanup-limit-ranger-admission
Propagate externalization to limitranger admission controller
parents
1886e090
61ba80cb
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 @
055a816b
...
@@ -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 @
055a816b
This diff is collapsed.
Click to expand it.
plugin/pkg/admission/limitranger/admission_test.go
View file @
055a816b
...
@@ -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 @
055a816b
...
@@ -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