mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			477 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			477 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2015 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 core
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"path"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"k8s.io/apimachinery/pkg/labels"
 | 
						|
	"k8s.io/apimachinery/pkg/runtime"
 | 
						|
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						|
	"k8s.io/kubernetes/pkg/api"
 | 
						|
	"k8s.io/kubernetes/pkg/api/v1"
 | 
						|
	"k8s.io/kubernetes/pkg/fields"
 | 
						|
)
 | 
						|
 | 
						|
func NewRootGetAction(resource schema.GroupVersionResource, name string) GetActionImpl {
 | 
						|
	action := GetActionImpl{}
 | 
						|
	action.Verb = "get"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Name = name
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewGetAction(resource schema.GroupVersionResource, namespace, name string) GetActionImpl {
 | 
						|
	action := GetActionImpl{}
 | 
						|
	action.Verb = "get"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Name = name
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootListAction(resource schema.GroupVersionResource, opts interface{}) ListActionImpl {
 | 
						|
	action := ListActionImpl{}
 | 
						|
	action.Verb = "list"
 | 
						|
	action.Resource = resource
 | 
						|
	labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
 | 
						|
	action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewListAction(resource schema.GroupVersionResource, namespace string, opts interface{}) ListActionImpl {
 | 
						|
	action := ListActionImpl{}
 | 
						|
	action.Verb = "list"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
 | 
						|
	action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootCreateAction(resource schema.GroupVersionResource, object runtime.Object) CreateActionImpl {
 | 
						|
	action := CreateActionImpl{}
 | 
						|
	action.Verb = "create"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Object = object
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewCreateAction(resource schema.GroupVersionResource, namespace string, object runtime.Object) CreateActionImpl {
 | 
						|
	action := CreateActionImpl{}
 | 
						|
	action.Verb = "create"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Object = object
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootUpdateAction(resource schema.GroupVersionResource, object runtime.Object) UpdateActionImpl {
 | 
						|
	action := UpdateActionImpl{}
 | 
						|
	action.Verb = "update"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Object = object
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewUpdateAction(resource schema.GroupVersionResource, namespace string, object runtime.Object) UpdateActionImpl {
 | 
						|
	action := UpdateActionImpl{}
 | 
						|
	action.Verb = "update"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Object = object
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootPatchAction(resource schema.GroupVersionResource, name string, patch []byte) PatchActionImpl {
 | 
						|
	action := PatchActionImpl{}
 | 
						|
	action.Verb = "patch"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Name = name
 | 
						|
	action.Patch = patch
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewPatchAction(resource schema.GroupVersionResource, namespace string, name string, patch []byte) PatchActionImpl {
 | 
						|
	action := PatchActionImpl{}
 | 
						|
	action.Verb = "patch"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Name = name
 | 
						|
	action.Patch = patch
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootPatchSubresourceAction(resource schema.GroupVersionResource, name string, patch []byte, subresources ...string) PatchActionImpl {
 | 
						|
	action := PatchActionImpl{}
 | 
						|
	action.Verb = "patch"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Subresource = path.Join(subresources...)
 | 
						|
	action.Name = name
 | 
						|
	action.Patch = patch
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewPatchSubresourceAction(resource schema.GroupVersionResource, namespace, name string, patch []byte, subresources ...string) PatchActionImpl {
 | 
						|
	action := PatchActionImpl{}
 | 
						|
	action.Verb = "patch"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Subresource = path.Join(subresources...)
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Name = name
 | 
						|
	action.Patch = patch
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootUpdateSubresourceAction(resource schema.GroupVersionResource, subresource string, object runtime.Object) UpdateActionImpl {
 | 
						|
	action := UpdateActionImpl{}
 | 
						|
	action.Verb = "update"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Subresource = subresource
 | 
						|
	action.Object = object
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
func NewUpdateSubresourceAction(resource schema.GroupVersionResource, subresource string, namespace string, object runtime.Object) UpdateActionImpl {
 | 
						|
	action := UpdateActionImpl{}
 | 
						|
	action.Verb = "update"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Subresource = subresource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Object = object
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootDeleteAction(resource schema.GroupVersionResource, name string) DeleteActionImpl {
 | 
						|
	action := DeleteActionImpl{}
 | 
						|
	action.Verb = "delete"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Name = name
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewDeleteAction(resource schema.GroupVersionResource, namespace, name string) DeleteActionImpl {
 | 
						|
	action := DeleteActionImpl{}
 | 
						|
	action.Verb = "delete"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Name = name
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootDeleteCollectionAction(resource schema.GroupVersionResource, opts interface{}) DeleteCollectionActionImpl {
 | 
						|
	action := DeleteCollectionActionImpl{}
 | 
						|
	action.Verb = "delete-collection"
 | 
						|
	action.Resource = resource
 | 
						|
	labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
 | 
						|
	action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewDeleteCollectionAction(resource schema.GroupVersionResource, namespace string, opts interface{}) DeleteCollectionActionImpl {
 | 
						|
	action := DeleteCollectionActionImpl{}
 | 
						|
	action.Verb = "delete-collection"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
 | 
						|
	action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewRootWatchAction(resource schema.GroupVersionResource, opts interface{}) WatchActionImpl {
 | 
						|
	action := WatchActionImpl{}
 | 
						|
	action.Verb = "watch"
 | 
						|
	action.Resource = resource
 | 
						|
	labelSelector, fieldSelector, resourceVersion := ExtractFromListOptions(opts)
 | 
						|
	action.WatchRestrictions = WatchRestrictions{labelSelector, fieldSelector, resourceVersion}
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func ExtractFromListOptions(opts interface{}) (labelSelector labels.Selector, fieldSelector fields.Selector, resourceVersion string) {
 | 
						|
	var err error
 | 
						|
	switch t := opts.(type) {
 | 
						|
	case api.ListOptions:
 | 
						|
		labelSelector = t.LabelSelector
 | 
						|
		fieldSelector = t.FieldSelector
 | 
						|
		resourceVersion = t.ResourceVersion
 | 
						|
	case v1.ListOptions:
 | 
						|
		labelSelector, err = labels.Parse(t.LabelSelector)
 | 
						|
		if err != nil {
 | 
						|
			panic(err)
 | 
						|
		}
 | 
						|
		fieldSelector, err = fields.ParseSelector(t.FieldSelector)
 | 
						|
		if err != nil {
 | 
						|
			panic(err)
 | 
						|
		}
 | 
						|
		resourceVersion = t.ResourceVersion
 | 
						|
	default:
 | 
						|
		panic(fmt.Errorf("expect a ListOptions"))
 | 
						|
	}
 | 
						|
	if labelSelector == nil {
 | 
						|
		labelSelector = labels.Everything()
 | 
						|
	}
 | 
						|
	if fieldSelector == nil {
 | 
						|
		fieldSelector = fields.Everything()
 | 
						|
	}
 | 
						|
	return labelSelector, fieldSelector, resourceVersion
 | 
						|
}
 | 
						|
 | 
						|
func NewWatchAction(resource schema.GroupVersionResource, namespace string, opts interface{}) WatchActionImpl {
 | 
						|
	action := WatchActionImpl{}
 | 
						|
	action.Verb = "watch"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	labelSelector, fieldSelector, resourceVersion := ExtractFromListOptions(opts)
 | 
						|
	action.WatchRestrictions = WatchRestrictions{labelSelector, fieldSelector, resourceVersion}
 | 
						|
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func NewProxyGetAction(resource schema.GroupVersionResource, namespace, scheme, name, port, path string, params map[string]string) ProxyGetActionImpl {
 | 
						|
	action := ProxyGetActionImpl{}
 | 
						|
	action.Verb = "get"
 | 
						|
	action.Resource = resource
 | 
						|
	action.Namespace = namespace
 | 
						|
	action.Scheme = scheme
 | 
						|
	action.Name = name
 | 
						|
	action.Port = port
 | 
						|
	action.Path = path
 | 
						|
	action.Params = params
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
type ListRestrictions struct {
 | 
						|
	Labels labels.Selector
 | 
						|
	Fields fields.Selector
 | 
						|
}
 | 
						|
type WatchRestrictions struct {
 | 
						|
	Labels          labels.Selector
 | 
						|
	Fields          fields.Selector
 | 
						|
	ResourceVersion string
 | 
						|
}
 | 
						|
 | 
						|
type Action interface {
 | 
						|
	GetNamespace() string
 | 
						|
	GetVerb() string
 | 
						|
	GetResource() schema.GroupVersionResource
 | 
						|
	GetSubresource() string
 | 
						|
	Matches(verb, resource string) bool
 | 
						|
}
 | 
						|
 | 
						|
type GenericAction interface {
 | 
						|
	Action
 | 
						|
	GetValue() interface{}
 | 
						|
}
 | 
						|
 | 
						|
type GetAction interface {
 | 
						|
	Action
 | 
						|
	GetName() string
 | 
						|
}
 | 
						|
 | 
						|
type ListAction interface {
 | 
						|
	Action
 | 
						|
	GetListRestrictions() ListRestrictions
 | 
						|
}
 | 
						|
 | 
						|
type CreateAction interface {
 | 
						|
	Action
 | 
						|
	GetObject() runtime.Object
 | 
						|
}
 | 
						|
 | 
						|
type UpdateAction interface {
 | 
						|
	Action
 | 
						|
	GetObject() runtime.Object
 | 
						|
}
 | 
						|
 | 
						|
type DeleteAction interface {
 | 
						|
	Action
 | 
						|
	GetName() string
 | 
						|
}
 | 
						|
 | 
						|
type WatchAction interface {
 | 
						|
	Action
 | 
						|
	GetWatchRestrictions() WatchRestrictions
 | 
						|
}
 | 
						|
 | 
						|
type ProxyGetAction interface {
 | 
						|
	Action
 | 
						|
	GetScheme() string
 | 
						|
	GetName() string
 | 
						|
	GetPort() string
 | 
						|
	GetPath() string
 | 
						|
	GetParams() map[string]string
 | 
						|
}
 | 
						|
 | 
						|
type ActionImpl struct {
 | 
						|
	Namespace   string
 | 
						|
	Verb        string
 | 
						|
	Resource    schema.GroupVersionResource
 | 
						|
	Subresource string
 | 
						|
}
 | 
						|
 | 
						|
func (a ActionImpl) GetNamespace() string {
 | 
						|
	return a.Namespace
 | 
						|
}
 | 
						|
func (a ActionImpl) GetVerb() string {
 | 
						|
	return a.Verb
 | 
						|
}
 | 
						|
func (a ActionImpl) GetResource() schema.GroupVersionResource {
 | 
						|
	return a.Resource
 | 
						|
}
 | 
						|
func (a ActionImpl) GetSubresource() string {
 | 
						|
	return a.Subresource
 | 
						|
}
 | 
						|
func (a ActionImpl) Matches(verb, resource string) bool {
 | 
						|
	return strings.ToLower(verb) == strings.ToLower(a.Verb) &&
 | 
						|
		strings.ToLower(resource) == strings.ToLower(a.Resource.Resource)
 | 
						|
}
 | 
						|
 | 
						|
type GenericActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Value interface{}
 | 
						|
}
 | 
						|
 | 
						|
func (a GenericActionImpl) GetValue() interface{} {
 | 
						|
	return a.Value
 | 
						|
}
 | 
						|
 | 
						|
type GetActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Name string
 | 
						|
}
 | 
						|
 | 
						|
func (a GetActionImpl) GetName() string {
 | 
						|
	return a.Name
 | 
						|
}
 | 
						|
 | 
						|
type ListActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	ListRestrictions ListRestrictions
 | 
						|
}
 | 
						|
 | 
						|
func (a ListActionImpl) GetListRestrictions() ListRestrictions {
 | 
						|
	return a.ListRestrictions
 | 
						|
}
 | 
						|
 | 
						|
type CreateActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Object runtime.Object
 | 
						|
}
 | 
						|
 | 
						|
func (a CreateActionImpl) GetObject() runtime.Object {
 | 
						|
	return a.Object
 | 
						|
}
 | 
						|
 | 
						|
type UpdateActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Object runtime.Object
 | 
						|
}
 | 
						|
 | 
						|
func (a UpdateActionImpl) GetObject() runtime.Object {
 | 
						|
	return a.Object
 | 
						|
}
 | 
						|
 | 
						|
type PatchActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Name  string
 | 
						|
	Patch []byte
 | 
						|
}
 | 
						|
 | 
						|
func (a PatchActionImpl) GetName() string {
 | 
						|
	return a.Name
 | 
						|
}
 | 
						|
 | 
						|
func (a PatchActionImpl) GetPatch() []byte {
 | 
						|
	return a.Patch
 | 
						|
}
 | 
						|
 | 
						|
type DeleteActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Name string
 | 
						|
}
 | 
						|
 | 
						|
func (a DeleteActionImpl) GetName() string {
 | 
						|
	return a.Name
 | 
						|
}
 | 
						|
 | 
						|
type DeleteCollectionActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	ListRestrictions ListRestrictions
 | 
						|
}
 | 
						|
 | 
						|
func (a DeleteCollectionActionImpl) GetListRestrictions() ListRestrictions {
 | 
						|
	return a.ListRestrictions
 | 
						|
}
 | 
						|
 | 
						|
type WatchActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	WatchRestrictions WatchRestrictions
 | 
						|
}
 | 
						|
 | 
						|
func (a WatchActionImpl) GetWatchRestrictions() WatchRestrictions {
 | 
						|
	return a.WatchRestrictions
 | 
						|
}
 | 
						|
 | 
						|
type ProxyGetActionImpl struct {
 | 
						|
	ActionImpl
 | 
						|
	Scheme string
 | 
						|
	Name   string
 | 
						|
	Port   string
 | 
						|
	Path   string
 | 
						|
	Params map[string]string
 | 
						|
}
 | 
						|
 | 
						|
func (a ProxyGetActionImpl) GetScheme() string {
 | 
						|
	return a.Scheme
 | 
						|
}
 | 
						|
 | 
						|
func (a ProxyGetActionImpl) GetName() string {
 | 
						|
	return a.Name
 | 
						|
}
 | 
						|
 | 
						|
func (a ProxyGetActionImpl) GetPort() string {
 | 
						|
	return a.Port
 | 
						|
}
 | 
						|
 | 
						|
func (a ProxyGetActionImpl) GetPath() string {
 | 
						|
	return a.Path
 | 
						|
}
 | 
						|
 | 
						|
func (a ProxyGetActionImpl) GetParams() map[string]string {
 | 
						|
	return a.Params
 | 
						|
}
 |