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
f14271b2
Unverified
Commit
f14271b2
authored
Oct 03, 2018
by
k8s-ci-robot
Committed by
GitHub
Oct 03, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #69133 from yue9944882/refactor/externalize-namespace-admission-controller
Externalize namespace admission controller
parents
c520b2cb
a097e23e
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
65 additions
and
59 deletions
+65
-59
BUILD
plugin/pkg/admission/namespace/autoprovision/BUILD
+10
-8
admission.go
plugin/pkg/admission/namespace/autoprovision/admission.go
+16
-15
admission_test.go
...n/pkg/admission/namespace/autoprovision/admission_test.go
+8
-7
BUILD
plugin/pkg/admission/namespace/exists/BUILD
+9
-8
admission.go
plugin/pkg/admission/namespace/exists/admission.go
+13
-13
admission_test.go
plugin/pkg/admission/namespace/exists/admission_test.go
+9
-8
No files found.
plugin/pkg/admission/namespace/autoprovision/BUILD
View file @
f14271b2
...
...
@@ -12,13 +12,14 @@ go_library(
importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/autoprovision",
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset: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/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1: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",
],
)
...
...
@@ -28,15 +29,16 @@ go_test(
embed = [":go_default_library"],
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors: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/util/wait: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",
],
)
...
...
plugin/pkg/admission/namespace/autoprovision/admission.go
View file @
f14271b2
...
...
@@ -20,14 +20,15 @@ import (
"fmt"
"io"
corev1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apiserver/pkg/admission"
genericadmissioninitializer
"k8s.io/apiserver/pkg/admission/initializer"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
corev1listers
"k8s.io/client-go/listers/core/v1"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
corelisters
"k8s.io/kubernetes/pkg/client/listers/core/internalversion"
kubeapiserveradmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
)
// PluginName indicates name of admission plugin.
...
...
@@ -45,13 +46,13 @@ func Register(plugins *admission.Plugins) {
// It is useful in deployments that do not want to restrict creation of a namespace prior to its usage.
type
Provision
struct
{
*
admission
.
Handler
client
internalclientset
.
Interface
namespaceLister
corelisters
.
NamespaceLister
client
kubernetes
.
Interface
namespaceLister
core
v1
listers
.
NamespaceLister
}
var
_
admission
.
MutationInterface
=
&
Provision
{}
var
_
=
kubeapiserveradmission
.
WantsIn
ternalKubeInformerFactory
(
&
Provision
{})
var
_
=
kubeapiserveradmission
.
WantsIn
ternalKubeClientSet
(
&
Provision
{})
var
_
=
genericadmissioninitializer
.
WantsEx
ternalKubeInformerFactory
(
&
Provision
{})
var
_
=
genericadmissioninitializer
.
WantsEx
ternalKubeClientSet
(
&
Provision
{})
// Admit makes an admission decision based on the request attributes
func
(
p
*
Provision
)
Admit
(
a
admission
.
Attributes
)
error
{
...
...
@@ -80,12 +81,12 @@ func (p *Provision) Admit(a admission.Attributes) error {
return
admission
.
NewForbidden
(
a
,
err
)
}
namespace
:=
&
api
.
Namespace
{
namespace
:=
&
corev1
.
Namespace
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
a
.
GetNamespace
(),
Namespace
:
""
,
},
Status
:
api
.
NamespaceStatus
{},
Status
:
corev1
.
NamespaceStatus
{},
}
_
,
err
=
p
.
client
.
Core
()
.
Namespaces
()
.
Create
(
namespace
)
...
...
@@ -103,14 +104,14 @@ func NewProvision() *Provision {
}
}
// Set
InternalKubeClientSet implements the WantsIn
ternalKubeClientSet interface.
func
(
p
*
Provision
)
Set
InternalKubeClientSet
(
client
internalclientset
.
Interface
)
{
// Set
ExternalKubeClientSet implements the WantsEx
ternalKubeClientSet interface.
func
(
p
*
Provision
)
Set
ExternalKubeClientSet
(
client
kubernetes
.
Interface
)
{
p
.
client
=
client
}
// Set
InternalKubeInformerFactory implements the WantsIn
ternalKubeInformerFactory interface.
func
(
p
*
Provision
)
Set
In
ternalKubeInformerFactory
(
f
informers
.
SharedInformerFactory
)
{
namespaceInformer
:=
f
.
Core
()
.
InternalVersion
()
.
Namespaces
()
// Set
ExternalKubeInformerFactory implements the WantsEx
ternalKubeInformerFactory interface.
func
(
p
*
Provision
)
Set
Ex
ternalKubeInformerFactory
(
f
informers
.
SharedInformerFactory
)
{
namespaceInformer
:=
f
.
Core
()
.
V1
()
.
Namespaces
()
p
.
namespaceLister
=
namespaceInformer
.
Lister
()
p
.
SetReadyFunc
(
namespaceInformer
.
Informer
()
.
HasSynced
)
}
...
...
plugin/pkg/admission/namespace/autoprovision/admission_test.go
View file @
f14271b2
...
...
@@ -21,24 +21,25 @@ import (
"testing"
"time"
corev1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait"
"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"
api
"k8s.io/kubernetes/pkg/apis/core"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"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"
)
// newHandlerForTest returns the admission controller configured for testing.
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
MutationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewProvision
()
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
@@ -48,13 +49,13 @@ func newHandlerForTest(c clientset.Interface) (admission.MutationInterface, info
func
newMockClientForTest
(
namespaces
[]
string
)
*
fake
.
Clientset
{
mockClient
:=
&
fake
.
Clientset
{}
mockClient
.
AddReactor
(
"list"
,
"namespaces"
,
func
(
action
core
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
namespaceList
:=
&
api
.
NamespaceList
{
namespaceList
:=
&
corev1
.
NamespaceList
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
len
(
namespaces
)),
},
}
for
i
,
ns
:=
range
namespaces
{
namespaceList
.
Items
=
append
(
namespaceList
.
Items
,
api
.
Namespace
{
namespaceList
.
Items
=
append
(
namespaceList
.
Items
,
corev1
.
Namespace
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
ns
,
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
i
),
...
...
plugin/pkg/admission/namespace/exists/BUILD
View file @
f14271b2
...
...
@@ -12,13 +12,13 @@ go_library(
importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/exists",
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset: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/errors:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1: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",
],
)
...
...
@@ -28,14 +28,15 @@ go_test(
embed = [":go_default_library"],
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//staging/src/k8s.io/api/core/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/util/wait: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",
],
)
...
...
plugin/pkg/admission/namespace/exists/admission.go
View file @
f14271b2
...
...
@@ -23,11 +23,11 @@ import (
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apiserver/pkg/admission"
genericadmissioninitializer
"k8s.io/apiserver/pkg/admission/initializer"
informers
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
corev1listers
"k8s.io/client-go/listers/core/v1"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
informers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
corelisters
"k8s.io/kubernetes/pkg/client/listers/core/internalversion"
kubeapiserveradmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
)
// PluginName indicates name of admission plugin.
...
...
@@ -45,13 +45,13 @@ func Register(plugins *admission.Plugins) {
// It is useful in deployments that want to enforce pre-declaration of a Namespace resource.
type
Exists
struct
{
*
admission
.
Handler
client
internalclientset
.
Interface
namespaceLister
corelisters
.
NamespaceLister
client
kubernetes
.
Interface
namespaceLister
core
v1
listers
.
NamespaceLister
}
var
_
admission
.
ValidationInterface
=
&
Exists
{}
var
_
=
kubeapiserveradmission
.
WantsIn
ternalKubeInformerFactory
(
&
Exists
{})
var
_
=
kubeapiserveradmission
.
WantsIn
ternalKubeClientSet
(
&
Exists
{})
var
_
=
genericadmissioninitializer
.
WantsEx
ternalKubeInformerFactory
(
&
Exists
{})
var
_
=
genericadmissioninitializer
.
WantsEx
ternalKubeClientSet
(
&
Exists
{})
// Validate makes an admission decision based on the request attributes
func
(
e
*
Exists
)
Validate
(
a
admission
.
Attributes
)
error
{
...
...
@@ -93,14 +93,14 @@ func NewExists() *Exists {
}
}
// Set
InternalKubeClientSet implements the WantsIn
ternalKubeClientSet interface.
func
(
e
*
Exists
)
Set
InternalKubeClientSet
(
client
internalclientset
.
Interface
)
{
// Set
ExternalKubeClientSet implements the WantsEx
ternalKubeClientSet interface.
func
(
e
*
Exists
)
Set
ExternalKubeClientSet
(
client
kubernetes
.
Interface
)
{
e
.
client
=
client
}
// Set
InternalKubeInformerFactory implements the WantsIn
ternalKubeInformerFactory interface.
func
(
e
*
Exists
)
Set
In
ternalKubeInformerFactory
(
f
informers
.
SharedInformerFactory
)
{
namespaceInformer
:=
f
.
Core
()
.
InternalVersion
()
.
Namespaces
()
// Set
ExternalKubeInformerFactory implements the WantsEx
ternalKubeInformerFactory interface.
func
(
e
*
Exists
)
Set
Ex
ternalKubeInformerFactory
(
f
informers
.
SharedInformerFactory
)
{
namespaceInformer
:=
f
.
Core
()
.
V1
()
.
Namespaces
()
e
.
namespaceLister
=
namespaceInformer
.
Lister
()
e
.
SetReadyFunc
(
namespaceInformer
.
Informer
()
.
HasSynced
)
}
...
...
plugin/pkg/admission/namespace/exists/admission_test.go
View file @
f14271b2
...
...
@@ -21,23 +21,24 @@ import (
"testing"
"time"
corev1
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apiserver/pkg/admission"
genericadmissioninitializer
"k8s.io/apiserver/pkg/admission/initializer"
informers
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"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"
)
// newHandlerForTest returns the admission controller configured for testing.
func
newHandlerForTest
(
c
clientset
.
Interface
)
(
admission
.
ValidationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
func
newHandlerForTest
(
c
kubernetes
.
Interface
)
(
admission
.
ValidationInterface
,
informers
.
SharedInformerFactory
,
error
)
{
f
:=
informers
.
NewSharedInformerFactory
(
c
,
5
*
time
.
Minute
)
handler
:=
NewExists
()
pluginInitializer
:=
kubeadmission
.
NewPluginInitializer
(
c
,
f
,
nil
,
nil
,
nil
)
pluginInitializer
:=
genericadmissioninitializer
.
New
(
c
,
f
,
nil
,
nil
)
pluginInitializer
.
Initialize
(
handler
)
err
:=
admission
.
ValidateInitialization
(
handler
)
return
handler
,
f
,
err
...
...
@@ -47,13 +48,13 @@ func newHandlerForTest(c clientset.Interface) (admission.ValidationInterface, in
func
newMockClientForTest
(
namespaces
[]
string
)
*
fake
.
Clientset
{
mockClient
:=
&
fake
.
Clientset
{}
mockClient
.
AddReactor
(
"list"
,
"namespaces"
,
func
(
action
core
.
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
namespaceList
:=
&
api
.
NamespaceList
{
namespaceList
:=
&
corev1
.
NamespaceList
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
len
(
namespaces
)),
},
}
for
i
,
ns
:=
range
namespaces
{
namespaceList
.
Items
=
append
(
namespaceList
.
Items
,
api
.
Namespace
{
namespaceList
.
Items
=
append
(
namespaceList
.
Items
,
corev1
.
Namespace
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
ns
,
ResourceVersion
:
fmt
.
Sprintf
(
"%d"
,
i
),
...
...
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