| /* |
| 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 describe |
| |
| import ( |
| "fmt" |
| "k8s.io/apimachinery/pkg/api/meta" |
| "k8s.io/cli-runtime/pkg/genericclioptions" |
| ) |
| |
| const ( |
| // LoadBalancerWidth is the width how we describe load balancer |
| LoadBalancerWidth = 16 |
| |
| // LabelNodeRolePrefix is a label prefix for node roles |
| // It's copied over to here until it's merged in core: https://github.com/kubernetes/kubernetes/pull/39112 |
| LabelNodeRolePrefix = "node-role.kubernetes.io/" |
| |
| // NodeLabelRole specifies the role of a node |
| NodeLabelRole = "kubernetes.io/role" |
| ) |
| |
| // DescriberFunc gives a way to display the specified RESTMapping type |
| type DescriberFunc func(restClientGetter genericclioptions.RESTClientGetter, mapping *meta.RESTMapping) (Describer, error) |
| |
| // Describer generates output for the named resource or an error |
| // if the output could not be generated. Implementers typically |
| // abstract the retrieval of the named object from a remote server. |
| type Describer interface { |
| Describe(namespace, name string, describerSettings DescriberSettings) (output string, err error) |
| } |
| |
| // DescriberSettings holds display configuration for each object |
| // describer to control what is printed. |
| type DescriberSettings struct { |
| ShowEvents bool |
| } |
| |
| // ObjectDescriber is an interface for displaying arbitrary objects with extra |
| // information. Use when an object is in hand (on disk, or already retrieved). |
| // Implementers may ignore the additional information passed on extra, or use it |
| // by default. ObjectDescribers may return ErrNoDescriber if no suitable describer |
| // is found. |
| type ObjectDescriber interface { |
| DescribeObject(object interface{}, extra ...interface{}) (output string, err error) |
| } |
| |
| // ErrNoDescriber is a structured error indicating the provided object or objects |
| // cannot be described. |
| type ErrNoDescriber struct { |
| Types []string |
| } |
| |
| // Error implements the error interface. |
| func (e ErrNoDescriber) Error() string { |
| return fmt.Sprintf("no describer has been defined for %v", e.Types) |
| } |