mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-18 07:34:12 +00:00
Merge pull request #69941 from miguelbernadi/fix-golint-issues-68026
Fix golint issues in plugin/pkg/admission
This commit is contained in:
@@ -35,6 +35,7 @@ go_library(
|
||||
srcs = [
|
||||
"admission.go",
|
||||
"config.go",
|
||||
"doc.go",
|
||||
],
|
||||
importpath = "k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction",
|
||||
deps = [
|
||||
|
@@ -39,6 +39,7 @@ import (
|
||||
pluginapi "k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction"
|
||||
)
|
||||
|
||||
// PluginName is a string with the name of the plugin
|
||||
const PluginName = "PodTolerationRestriction"
|
||||
|
||||
// Register registers a plugin
|
||||
@@ -58,29 +59,21 @@ const (
|
||||
NSWLTolerations string = "scheduler.alpha.kubernetes.io/tolerationsWhitelist"
|
||||
)
|
||||
|
||||
var _ admission.MutationInterface = &podTolerationsPlugin{}
|
||||
var _ admission.ValidationInterface = &podTolerationsPlugin{}
|
||||
var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&podTolerationsPlugin{})
|
||||
var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&podTolerationsPlugin{})
|
||||
var _ admission.MutationInterface = &Plugin{}
|
||||
var _ admission.ValidationInterface = &Plugin{}
|
||||
var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&Plugin{})
|
||||
var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&Plugin{})
|
||||
|
||||
type podTolerationsPlugin struct {
|
||||
// Plugin contains the client used by the admission controller
|
||||
type Plugin struct {
|
||||
*admission.Handler
|
||||
client kubernetes.Interface
|
||||
namespaceLister corev1listers.NamespaceLister
|
||||
pluginConfig *pluginapi.Configuration
|
||||
}
|
||||
|
||||
// This plugin first verifies any conflict between a pod's tolerations and
|
||||
// its namespace's tolerations, and rejects the pod if there's a conflict.
|
||||
// If there's no conflict, the pod's tolerations are merged with its namespace's
|
||||
// toleration. Resulting pod's tolerations are verified against its namespace's
|
||||
// whitelist of tolerations. If the verification is successful, the pod is admitted
|
||||
// otherwise rejected. If a namespace does not have associated default or whitelist
|
||||
// of tolerations, then cluster level default or whitelist of tolerations are used
|
||||
// instead if specified. Tolerations to a namespace are assigned via
|
||||
// scheduler.alpha.kubernetes.io/defaultTolerations and scheduler.alpha.kubernetes.io/tolerationsWhitelist
|
||||
// annotations keys.
|
||||
func (p *podTolerationsPlugin) Admit(a admission.Attributes, o admission.ObjectInterfaces) error {
|
||||
// Admit checks the admission policy and triggers corresponding actions
|
||||
func (p *Plugin) Admit(a admission.Attributes, o admission.ObjectInterfaces) error {
|
||||
if shouldIgnore(a) {
|
||||
return nil
|
||||
}
|
||||
@@ -136,7 +129,9 @@ func (p *podTolerationsPlugin) Admit(a admission.Attributes, o admission.ObjectI
|
||||
pod.Spec.Tolerations = tolerations.MergeTolerations(finalTolerations, []api.Toleration{})
|
||||
return p.Validate(a, o)
|
||||
}
|
||||
func (p *podTolerationsPlugin) Validate(a admission.Attributes, o admission.ObjectInterfaces) error {
|
||||
|
||||
// Validate we can obtain a whitelist of tolerations
|
||||
func (p *Plugin) Validate(a admission.Attributes, o admission.ObjectInterfaces) error {
|
||||
if shouldIgnore(a) {
|
||||
return nil
|
||||
}
|
||||
@@ -190,25 +185,29 @@ func shouldIgnore(a admission.Attributes) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func NewPodTolerationsPlugin(pluginConfig *pluginapi.Configuration) *podTolerationsPlugin {
|
||||
return &podTolerationsPlugin{
|
||||
// NewPodTolerationsPlugin initializes a Plugin
|
||||
func NewPodTolerationsPlugin(pluginConfig *pluginapi.Configuration) *Plugin {
|
||||
return &Plugin{
|
||||
Handler: admission.NewHandler(admission.Create, admission.Update),
|
||||
pluginConfig: pluginConfig,
|
||||
}
|
||||
}
|
||||
|
||||
func (a *podTolerationsPlugin) SetExternalKubeClientSet(client kubernetes.Interface) {
|
||||
a.client = client
|
||||
// SetExternalKubeClientSet sets th client
|
||||
func (p *Plugin) SetExternalKubeClientSet(client kubernetes.Interface) {
|
||||
p.client = client
|
||||
}
|
||||
|
||||
func (p *podTolerationsPlugin) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
||||
// SetExternalKubeInformerFactory initializes the Informer Factory
|
||||
func (p *Plugin) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
||||
namespaceInformer := f.Core().V1().Namespaces()
|
||||
p.namespaceLister = namespaceInformer.Lister()
|
||||
p.SetReadyFunc(namespaceInformer.Informer().HasSynced)
|
||||
|
||||
}
|
||||
|
||||
func (p *podTolerationsPlugin) ValidateInitialization() error {
|
||||
// ValidateInitialization checks the object is properly initialized
|
||||
func (p *Plugin) ValidateInitialization() error {
|
||||
if p.namespaceLister == nil {
|
||||
return fmt.Errorf("missing namespaceLister")
|
||||
}
|
||||
@@ -219,7 +218,7 @@ func (p *podTolerationsPlugin) ValidateInitialization() error {
|
||||
}
|
||||
|
||||
// in exceptional cases, this can result in two live calls, but once the cache catches up, that will stop.
|
||||
func (p *podTolerationsPlugin) getNamespace(nsName string) (*corev1.Namespace, error) {
|
||||
func (p *Plugin) getNamespace(nsName string) (*corev1.Namespace, error) {
|
||||
namespace, err := p.namespaceLister.Get(nsName)
|
||||
if errors.IsNotFound(err) {
|
||||
// in case of latency in our caches, make a call direct to storage to verify that it truly exists or not
|
||||
@@ -237,7 +236,7 @@ func (p *podTolerationsPlugin) getNamespace(nsName string) (*corev1.Namespace, e
|
||||
return namespace, nil
|
||||
}
|
||||
|
||||
func (p *podTolerationsPlugin) getNamespaceDefaultTolerations(nsName string) ([]api.Toleration, error) {
|
||||
func (p *Plugin) getNamespaceDefaultTolerations(nsName string) ([]api.Toleration, error) {
|
||||
ns, err := p.getNamespace(nsName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -245,7 +244,7 @@ func (p *podTolerationsPlugin) getNamespaceDefaultTolerations(nsName string) ([]
|
||||
return extractNSTolerations(ns, NSDefaultTolerations)
|
||||
}
|
||||
|
||||
func (p *podTolerationsPlugin) getNamespaceTolerationsWhitelist(nsName string) ([]api.Toleration, error) {
|
||||
func (p *Plugin) getNamespaceTolerationsWhitelist(nsName string) ([]api.Toleration, error) {
|
||||
ns, err := p.getNamespace(nsName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@@ -350,7 +350,7 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) {
|
||||
}
|
||||
|
||||
// newHandlerForTest returns the admission controller configured for testing.
|
||||
func newHandlerForTest(c kubernetes.Interface) (*podTolerationsPlugin, informers.SharedInformerFactory, error) {
|
||||
func newHandlerForTest(c kubernetes.Interface) (*Plugin, informers.SharedInformerFactory, error) {
|
||||
f := informers.NewSharedInformerFactory(c, 5*time.Minute)
|
||||
pluginConfig, err := loadConfiguration(nil)
|
||||
// must not fail
|
||||
|
@@ -30,7 +30,7 @@ var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.
|
||||
var (
|
||||
// SchemeBuilder is the scheme builder with scheme init functions to run for this API package
|
||||
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
|
||||
// AddToScheme is a global function that registers this API group & version to a scheme
|
||||
// AddToScheme is used to register the types to API encoding/decoding machinery
|
||||
AddToScheme = SchemeBuilder.AddToScheme
|
||||
)
|
||||
|
||||
|
@@ -30,9 +30,12 @@ var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha
|
||||
var (
|
||||
// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api.
|
||||
// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes.
|
||||
|
||||
// SchemeBuilder is a pointer used to call AddToScheme
|
||||
SchemeBuilder runtime.SchemeBuilder
|
||||
localSchemeBuilder = &SchemeBuilder
|
||||
AddToScheme = localSchemeBuilder.AddToScheme
|
||||
// AddToScheme is used to register the types to API encoding/decoding machinery
|
||||
AddToScheme = localSchemeBuilder.AddToScheme
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
30
plugin/pkg/admission/podtolerationrestriction/doc.go
Normal file
30
plugin/pkg/admission/podtolerationrestriction/doc.go
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Package podtolerationrestriction is a plugin that first verifies
|
||||
// any conflict between a pod's tolerations and its namespace's
|
||||
// tolerations, and rejects the pod if there's a conflict. If there's
|
||||
// no conflict, the pod's tolerations are merged with its namespace's
|
||||
// toleration. Resulting pod's tolerations are verified against its
|
||||
// namespace's whitelist of tolerations. If the verification is
|
||||
// successful, the pod is admitted otherwise rejected. If a namespace
|
||||
// does not have associated default or whitelist of tolerations, then
|
||||
// cluster level default or whitelist of tolerations are used instead
|
||||
// if specified. Tolerations to a namespace are assigned via
|
||||
// scheduler.alpha.kubernetes.io/defaultTolerations and
|
||||
// scheduler.alpha.kubernetes.io/tolerationsWhitelist annotations
|
||||
// keys.
|
||||
package podtolerationrestriction // import "k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction"
|
Reference in New Issue
Block a user