12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- Copyright 2014 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 util
- import (
- "k8s.io/apimachinery/pkg/api/meta"
- "k8s.io/cli-runtime/pkg/genericclioptions"
- "k8s.io/cli-runtime/pkg/resource"
- "k8s.io/client-go/dynamic"
- "k8s.io/client-go/kubernetes"
- restclient "k8s.io/client-go/rest"
- "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
- "k8s.io/kubernetes/pkg/kubectl/validation"
- )
- // Factory provides abstractions that allow the Kubectl command to be extended across multiple types
- // of resources and different API sets.
- // The rings are here for a reason. In order for composers to be able to provide alternative factory implementations
- // they need to provide low level pieces of *certain* functions so that when the factory calls back into itself
- // it uses the custom version of the function. Rather than try to enumerate everything that someone would want to override
- // we split the factory into rings, where each ring can depend on methods in an earlier ring, but cannot depend
- // upon peer methods in its own ring.
- // TODO: make the functions interfaces
- // TODO: pass the various interfaces on the factory directly into the command constructors (so the
- // commands are decoupled from the factory).
- type Factory interface {
- genericclioptions.RESTClientGetter
- // DynamicClient returns a dynamic client ready for use
- DynamicClient() (dynamic.Interface, error)
- // KubernetesClientSet gives you back an external clientset
- KubernetesClientSet() (*kubernetes.Clientset, error)
- // Returns a RESTClient for accessing Kubernetes resources or an error.
- RESTClient() (*restclient.RESTClient, error)
- // NewBuilder returns an object that assists in loading objects from both disk and the server
- // and which implements the common patterns for CLI interactions with generic resources.
- NewBuilder() *resource.Builder
- // Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
- // for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer.
- ClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error)
- // Returns a RESTClient for working with Unstructured objects.
- UnstructuredClientForMapping(mapping *meta.RESTMapping) (resource.RESTClient, error)
- // Returns a schema that can validate objects stored on disk.
- Validator(validate bool) (validation.Schema, error)
- // OpenAPISchema returns the schema openapi schema definition
- OpenAPISchema() (openapi.Resources, error)
- }
|