| /* |
| 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/genericclioptions/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) |
| } |