Update godeps

This commit is contained in:
Manuel de Brito Fontes 2016-11-10 19:57:28 -03:00
parent 1c8773fc98
commit 1bc383f9c5
1723 changed files with 287976 additions and 411028 deletions

View file

@ -32,6 +32,7 @@ import (
fed_clientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/events"
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/apps"
@ -39,16 +40,18 @@ import (
"k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/kubernetes/pkg/apis/certificates"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/storage"
storageutil "k8s.io/kubernetes/pkg/apis/storage/util"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
client "k8s.io/kubernetes/pkg/client/unversioned"
adapter "k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset"
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
extensionsclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/internalversion"
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
"k8s.io/kubernetes/pkg/fieldpath"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/kubelet/qos"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/types"
utilcertificates "k8s.io/kubernetes/pkg/util/certificates"
certutil "k8s.io/kubernetes/pkg/util/cert"
"k8s.io/kubernetes/pkg/util/intstr"
"k8s.io/kubernetes/pkg/util/sets"
@ -88,7 +91,7 @@ func (e ErrNoDescriber) Error() string {
return fmt.Sprintf("no describer has been defined for %v", e.Types)
}
func describerMap(c *client.Client) map[unversioned.GroupKind]Describer {
func describerMap(c clientset.Interface) map[unversioned.GroupKind]Describer {
m := map[unversioned.GroupKind]Describer{
api.Kind("Pod"): &PodDescriber{c},
api.Kind("ReplicationController"): &ReplicationControllerDescriber{c},
@ -109,13 +112,14 @@ func describerMap(c *client.Client) map[unversioned.GroupKind]Describer {
extensions.Kind("NetworkPolicy"): &NetworkPolicyDescriber{c},
autoscaling.Kind("HorizontalPodAutoscaler"): &HorizontalPodAutoscalerDescriber{c},
extensions.Kind("DaemonSet"): &DaemonSetDescriber{c},
extensions.Kind("Deployment"): &DeploymentDescriber{adapter.FromUnversionedClient(c)},
extensions.Kind("Deployment"): &DeploymentDescriber{c},
extensions.Kind("Job"): &JobDescriber{c},
extensions.Kind("Ingress"): &IngressDescriber{c},
batch.Kind("Job"): &JobDescriber{c},
batch.Kind("ScheduledJob"): &ScheduledJobDescriber{adapter.FromUnversionedClient(c)},
apps.Kind("PetSet"): &PetSetDescriber{c},
batch.Kind("CronJob"): &CronJobDescriber{c},
apps.Kind("StatefulSet"): &StatefulSetDescriber{c},
certificates.Kind("CertificateSigningRequest"): &CertificateSigningRequestDescriber{c},
storage.Kind("StorageClass"): &StorageClassDescriber{c},
}
return m
@ -134,7 +138,7 @@ func DescribableResources() []string {
// Describer returns the default describe functions for each of the standard
// Kubernetes types.
func DescriberFor(kind unversioned.GroupKind, c *client.Client) (Describer, bool) {
func DescriberFor(kind unversioned.GroupKind, c clientset.Interface) (Describer, bool) {
f, ok := describerMap(c)[kind]
return f, ok
}
@ -162,15 +166,15 @@ func init() {
// NamespaceDescriber generates information about a namespace
type NamespaceDescriber struct {
client.Interface
clientset.Interface
}
func (d *NamespaceDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
ns, err := d.Namespaces().Get(name)
ns, err := d.Core().Namespaces().Get(name)
if err != nil {
return "", err
}
resourceQuotaList, err := d.ResourceQuotas(name).List(api.ListOptions{})
resourceQuotaList, err := d.Core().ResourceQuotas(name).List(api.ListOptions{})
if err != nil {
if errors.IsNotFound(err) {
// Server does not support resource quotas.
@ -180,7 +184,7 @@ func (d *NamespaceDescriber) Describe(namespace, name string, describerSettings
return "", err
}
}
limitRangeList, err := d.LimitRanges(name).List(api.ListOptions{})
limitRangeList, err := d.Core().LimitRanges(name).List(api.ListOptions{})
if err != nil {
if errors.IsNotFound(err) {
// Server does not support limit ranges.
@ -210,6 +214,71 @@ func describeNamespace(namespace *api.Namespace, resourceQuotaList *api.Resource
})
}
func describeLimitRangeSpec(spec api.LimitRangeSpec, prefix string, w io.Writer) {
for i := range spec.Limits {
item := spec.Limits[i]
maxResources := item.Max
minResources := item.Min
defaultLimitResources := item.Default
defaultRequestResources := item.DefaultRequest
ratio := item.MaxLimitRequestRatio
set := map[api.ResourceName]bool{}
for k := range maxResources {
set[k] = true
}
for k := range minResources {
set[k] = true
}
for k := range defaultLimitResources {
set[k] = true
}
for k := range defaultRequestResources {
set[k] = true
}
for k := range ratio {
set[k] = true
}
for k := range set {
// if no value is set, we output -
maxValue := "-"
minValue := "-"
defaultLimitValue := "-"
defaultRequestValue := "-"
ratioValue := "-"
maxQuantity, maxQuantityFound := maxResources[k]
if maxQuantityFound {
maxValue = maxQuantity.String()
}
minQuantity, minQuantityFound := minResources[k]
if minQuantityFound {
minValue = minQuantity.String()
}
defaultLimitQuantity, defaultLimitQuantityFound := defaultLimitResources[k]
if defaultLimitQuantityFound {
defaultLimitValue = defaultLimitQuantity.String()
}
defaultRequestQuantity, defaultRequestQuantityFound := defaultRequestResources[k]
if defaultRequestQuantityFound {
defaultRequestValue = defaultRequestQuantity.String()
}
ratioQuantity, ratioQuantityFound := ratio[k]
if ratioQuantityFound {
ratioValue = ratioQuantity.String()
}
msg := "%s%s\t%v\t%v\t%v\t%v\t%v\t%v\n"
fmt.Fprintf(w, msg, prefix, item.Type, k, minValue, maxValue, defaultRequestValue, defaultLimitValue, ratioValue)
}
}
}
// DescribeLimitRanges merges a set of limit range items into a single tabular description
func DescribeLimitRanges(limitRanges *api.LimitRangeList, w io.Writer) {
if len(limitRanges.Items) == 0 {
@ -219,68 +288,7 @@ func DescribeLimitRanges(limitRanges *api.LimitRangeList, w io.Writer) {
fmt.Fprintf(w, "Resource Limits\n Type\tResource\tMin\tMax\tDefault Request\tDefault Limit\tMax Limit/Request Ratio\n")
fmt.Fprintf(w, " ----\t--------\t---\t---\t---------------\t-------------\t-----------------------\n")
for _, limitRange := range limitRanges.Items {
for i := range limitRange.Spec.Limits {
item := limitRange.Spec.Limits[i]
maxResources := item.Max
minResources := item.Min
defaultLimitResources := item.Default
defaultRequestResources := item.DefaultRequest
ratio := item.MaxLimitRequestRatio
set := map[api.ResourceName]bool{}
for k := range maxResources {
set[k] = true
}
for k := range minResources {
set[k] = true
}
for k := range defaultLimitResources {
set[k] = true
}
for k := range defaultRequestResources {
set[k] = true
}
for k := range ratio {
set[k] = true
}
for k := range set {
// if no value is set, we output -
maxValue := "-"
minValue := "-"
defaultLimitValue := "-"
defaultRequestValue := "-"
ratioValue := "-"
maxQuantity, maxQuantityFound := maxResources[k]
if maxQuantityFound {
maxValue = maxQuantity.String()
}
minQuantity, minQuantityFound := minResources[k]
if minQuantityFound {
minValue = minQuantity.String()
}
defaultLimitQuantity, defaultLimitQuantityFound := defaultLimitResources[k]
if defaultLimitQuantityFound {
defaultLimitValue = defaultLimitQuantity.String()
}
defaultRequestQuantity, defaultRequestQuantityFound := defaultRequestResources[k]
if defaultRequestQuantityFound {
defaultRequestValue = defaultRequestQuantity.String()
}
ratioQuantity, ratioQuantityFound := ratio[k]
if ratioQuantityFound {
ratioValue = ratioQuantity.String()
}
msg := " %s\t%v\t%v\t%v\t%v\t%v\t%v\n"
fmt.Fprintf(w, msg, item.Type, k, minValue, maxValue, defaultRequestValue, defaultLimitValue, ratioValue)
}
}
describeLimitRangeSpec(limitRange.Spec, " ", w)
}
}
@ -329,11 +337,11 @@ func DescribeResourceQuotas(quotas *api.ResourceQuotaList, w io.Writer) {
// LimitRangeDescriber generates information about a limit range
type LimitRangeDescriber struct {
client.Interface
clientset.Interface
}
func (d *LimitRangeDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
lr := d.LimitRanges(namespace)
lr := d.Core().LimitRanges(namespace)
limitRange, err := lr.Get(name)
if err != nil {
@ -348,79 +356,18 @@ func describeLimitRange(limitRange *api.LimitRange) (string, error) {
fmt.Fprintf(out, "Namespace:\t%s\n", limitRange.Namespace)
fmt.Fprintf(out, "Type\tResource\tMin\tMax\tDefault Request\tDefault Limit\tMax Limit/Request Ratio\n")
fmt.Fprintf(out, "----\t--------\t---\t---\t---------------\t-------------\t-----------------------\n")
for i := range limitRange.Spec.Limits {
item := limitRange.Spec.Limits[i]
maxResources := item.Max
minResources := item.Min
defaultLimitResources := item.Default
defaultRequestResources := item.DefaultRequest
ratio := item.MaxLimitRequestRatio
set := map[api.ResourceName]bool{}
for k := range maxResources {
set[k] = true
}
for k := range minResources {
set[k] = true
}
for k := range defaultLimitResources {
set[k] = true
}
for k := range defaultRequestResources {
set[k] = true
}
for k := range ratio {
set[k] = true
}
for k := range set {
// if no value is set, we output -
maxValue := "-"
minValue := "-"
defaultLimitValue := "-"
defaultRequestValue := "-"
ratioValue := "-"
maxQuantity, maxQuantityFound := maxResources[k]
if maxQuantityFound {
maxValue = maxQuantity.String()
}
minQuantity, minQuantityFound := minResources[k]
if minQuantityFound {
minValue = minQuantity.String()
}
defaultLimitQuantity, defaultLimitQuantityFound := defaultLimitResources[k]
if defaultLimitQuantityFound {
defaultLimitValue = defaultLimitQuantity.String()
}
defaultRequestQuantity, defaultRequestQuantityFound := defaultRequestResources[k]
if defaultRequestQuantityFound {
defaultRequestValue = defaultRequestQuantity.String()
}
ratioQuantity, ratioQuantityFound := ratio[k]
if ratioQuantityFound {
ratioValue = ratioQuantity.String()
}
msg := "%v\t%v\t%v\t%v\t%v\t%v\t%v\n"
fmt.Fprintf(out, msg, item.Type, k, minValue, maxValue, defaultRequestValue, defaultLimitValue, ratioValue)
}
}
describeLimitRangeSpec(limitRange.Spec, "", out)
return nil
})
}
// ResourceQuotaDescriber generates information about a resource quota
type ResourceQuotaDescriber struct {
client.Interface
clientset.Interface
}
func (d *ResourceQuotaDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
rq := d.ResourceQuotas(namespace)
rq := d.Core().ResourceQuotas(namespace)
resourceQuota, err := rq.Get(name)
if err != nil {
@ -485,14 +432,14 @@ func describeQuota(resourceQuota *api.ResourceQuota) (string, error) {
// PodDescriber generates information about a pod and the replication controllers that
// create it.
type PodDescriber struct {
client.Interface
clientset.Interface
}
func (d *PodDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
pod, err := d.Pods(namespace).Get(name)
pod, err := d.Core().Pods(namespace).Get(name)
if err != nil {
if describerSettings.ShowEvents {
eventsInterface := d.Events(namespace)
eventsInterface := d.Core().Events(namespace)
selector := eventsInterface.GetFieldSelector(&name, &namespace, nil, nil)
options := api.ListOptions{FieldSelector: selector}
events, err2 := eventsInterface.List(options)
@ -513,7 +460,7 @@ func (d *PodDescriber) Describe(namespace, name string, describerSettings Descri
glog.Errorf("Unable to construct reference to '%#v': %v", pod, err)
} else {
ref.Kind = ""
events, _ = d.Events(namespace).Search(ref)
events, _ = d.Core().Events(namespace).Search(ref)
}
}
@ -621,6 +568,12 @@ func describeVolumes(volumes []api.Volume, out io.Writer, space string) {
printDownwardAPIVolumeSource(volume.VolumeSource.DownwardAPI, out)
case volume.VolumeSource.AzureDisk != nil:
printAzureDiskVolumeSource(volume.VolumeSource.AzureDisk, out)
case volume.VolumeSource.VsphereVolume != nil:
printVsphereVolumeSource(volume.VolumeSource.VsphereVolume, out)
case volume.VolumeSource.Cinder != nil:
printCinderVolumeSource(volume.VolumeSource.Cinder, out)
case volume.VolumeSource.PhotonPersistentDisk != nil:
printPhotonPersistentDiskVolumeSource(volume.VolumeSource.PhotonPersistentDisk, out)
default:
fmt.Fprintf(out, " <unknown>\n")
}
@ -749,12 +702,34 @@ func printAzureDiskVolumeSource(d *api.AzureDiskVolumeSource, out io.Writer) {
d.DiskName, d.DataDiskURI, *d.FSType, *d.CachingMode, *d.ReadOnly)
}
func printVsphereVolumeSource(vsphere *api.VsphereVirtualDiskVolumeSource, out io.Writer) {
fmt.Fprintf(out, " Type:\tvSphereVolume (a Persistent Disk resource in vSphere)\n"+
" VolumePath:\t%v\n"+
" FSType:\t%v\n",
vsphere.VolumePath, vsphere.FSType)
}
func printPhotonPersistentDiskVolumeSource(photon *api.PhotonPersistentDiskVolumeSource, out io.Writer) {
fmt.Fprintf(out, " Type:\tPhotonPersistentDisk (a Persistent Disk resource in photon platform)\n"+
" PdID:\t%v\n"+
" FSType:\t%v\n",
photon.PdID, photon.FSType)
}
func printCinderVolumeSource(cinder *api.CinderVolumeSource, out io.Writer) {
fmt.Fprintf(out, " Type:\tCinder (a Persistent Disk resource in OpenStack)\n"+
" VolumeID:\t%v\n"+
" FSType:\t%v\n"+
" ReadOnly:\t%v\n",
cinder.VolumeID, cinder.FSType, cinder.ReadOnly)
}
type PersistentVolumeDescriber struct {
client.Interface
clientset.Interface
}
func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.PersistentVolumes()
c := d.Core().PersistentVolumes()
pv, err := c.Get(name)
if err != nil {
@ -765,12 +740,13 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(pv)
events, _ = d.Core().Events(namespace).Search(pv)
}
return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", pv.Name)
printLabelsMultiline(out, "Labels", pv.Labels)
fmt.Fprintf(out, "StorageClass:\t%s\n", storageutil.GetStorageClassAnnotation(pv.ObjectMeta))
fmt.Fprintf(out, "Status:\t%s\n", pv.Status.Phase)
if pv.Spec.ClaimRef != nil {
fmt.Fprintf(out, "Claim:\t%s\n", pv.Spec.ClaimRef.Namespace+"/"+pv.Spec.ClaimRef.Name)
@ -800,6 +776,14 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe
printRBDVolumeSource(pv.Spec.RBD, out)
case pv.Spec.Quobyte != nil:
printQuobyteVolumeSource(pv.Spec.Quobyte, out)
case pv.Spec.VsphereVolume != nil:
printVsphereVolumeSource(pv.Spec.VsphereVolume, out)
case pv.Spec.Cinder != nil:
printCinderVolumeSource(pv.Spec.Cinder, out)
case pv.Spec.AzureDisk != nil:
printAzureDiskVolumeSource(pv.Spec.AzureDisk, out)
case pv.Spec.PhotonPersistentDisk != nil:
printPhotonPersistentDiskVolumeSource(pv.Spec.PhotonPersistentDisk, out)
}
if events != nil {
@ -811,11 +795,11 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe
}
type PersistentVolumeClaimDescriber struct {
client.Interface
clientset.Interface
}
func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.PersistentVolumeClaims(namespace)
c := d.Core().PersistentVolumeClaims(namespace)
pvc, err := c.Get(name)
if err != nil {
@ -831,11 +815,12 @@ func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, descri
capacity = storage.String()
}
events, _ := d.Events(namespace).Search(pvc)
events, _ := d.Core().Events(namespace).Search(pvc)
return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", pvc.Name)
fmt.Fprintf(out, "Namespace:\t%s\n", pvc.Namespace)
fmt.Fprintf(out, "StorageClass:\t%s\n", storageutil.GetStorageClassAnnotation(pvc.ObjectMeta))
fmt.Fprintf(out, "Status:\t%v\n", pvc.Status.Phase)
fmt.Fprintf(out, "Volume:\t%s\n", pvc.Spec.VolumeName)
printLabelsMultiline(out, "Labels", pvc.Labels)
@ -1083,12 +1068,12 @@ func printBool(value bool) string {
// ReplicationControllerDescriber generates information about a replication controller
// and the pods it has created.
type ReplicationControllerDescriber struct {
client.Interface
clientset.Interface
}
func (d *ReplicationControllerDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
rc := d.ReplicationControllers(namespace)
pc := d.Pods(namespace)
rc := d.Core().ReplicationControllers(namespace)
pc := d.Core().Pods(namespace)
controller, err := rc.Get(name)
if err != nil {
@ -1102,7 +1087,7 @@ func (d *ReplicationControllerDescriber) Describe(namespace, name string, descri
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(controller)
events, _ = d.Core().Events(namespace).Search(controller)
}
return describeReplicationController(controller, events, running, waiting, succeeded, failed)
@ -1152,12 +1137,12 @@ func DescribePodTemplate(template *api.PodTemplateSpec, out io.Writer) {
// ReplicaSetDescriber generates information about a ReplicaSet and the pods it has created.
type ReplicaSetDescriber struct {
client.Interface
clientset.Interface
}
func (d *ReplicaSetDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
rsc := d.Extensions().ReplicaSets(namespace)
pc := d.Pods(namespace)
pc := d.Core().Pods(namespace)
rs, err := rsc.Get(name)
if err != nil {
@ -1169,20 +1154,17 @@ func (d *ReplicaSetDescriber) Describe(namespace, name string, describerSettings
return "", err
}
running, waiting, succeeded, failed, err := getPodStatusForController(pc, selector)
if err != nil {
return "", err
}
running, waiting, succeeded, failed, getPodErr := getPodStatusForController(pc, selector)
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(rs)
events, _ = d.Core().Events(namespace).Search(rs)
}
return describeReplicaSet(rs, events, running, waiting, succeeded, failed)
return describeReplicaSet(rs, events, running, waiting, succeeded, failed, getPodErr)
}
func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, running, waiting, succeeded, failed int) (string, error) {
func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, running, waiting, succeeded, failed int, getPodErr error) (string, error) {
return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", rs.Name)
fmt.Fprintf(out, "Namespace:\t%s\n", rs.Namespace)
@ -1190,7 +1172,12 @@ func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, runnin
fmt.Fprintf(out, "Selector:\t%s\n", unversioned.FormatLabelSelector(rs.Spec.Selector))
printLabelsMultiline(out, "Labels", rs.Labels)
fmt.Fprintf(out, "Replicas:\t%d current / %d desired\n", rs.Status.Replicas, rs.Spec.Replicas)
fmt.Fprintf(out, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
fmt.Fprintf(out, "Pods Status:\t")
if getPodErr != nil {
fmt.Fprintf(out, "error in fetching pods: %s\n", getPodErr)
} else {
fmt.Fprintf(out, "%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
}
describeVolumes(rs.Spec.Template.Spec.Volumes, out, "")
if events != nil {
DescribeEvents(events, out)
@ -1201,7 +1188,7 @@ func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, runnin
// JobDescriber generates information about a job and the pods it has created.
type JobDescriber struct {
client.Interface
clientset.Interface
}
func (d *JobDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
@ -1212,7 +1199,7 @@ func (d *JobDescriber) Describe(namespace, name string, describerSettings Descri
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(job)
events, _ = d.Core().Events(namespace).Search(job)
}
return describeJob(job, events)
@ -1247,13 +1234,13 @@ func describeJob(job *batch.Job, events *api.EventList) (string, error) {
})
}
// ScheduledJobDescriber generates information about a scheduled job and the jobs it has created.
type ScheduledJobDescriber struct {
// CronJobDescriber generates information about a scheduled job and the jobs it has created.
type CronJobDescriber struct {
clientset.Interface
}
func (d *ScheduledJobDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
scheduledJob, err := d.Batch().ScheduledJobs(namespace).Get(name)
func (d *CronJobDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
scheduledJob, err := d.Batch().CronJobs(namespace).Get(name)
if err != nil {
return "", err
}
@ -1263,10 +1250,10 @@ func (d *ScheduledJobDescriber) Describe(namespace, name string, describerSettin
events, _ = d.Core().Events(namespace).Search(scheduledJob)
}
return describeScheduledJob(scheduledJob, events)
return describeCronJob(scheduledJob, events)
}
func describeScheduledJob(scheduledJob *batch.ScheduledJob, events *api.EventList) (string, error) {
func describeCronJob(scheduledJob *batch.CronJob, events *api.EventList) (string, error) {
return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", scheduledJob.Name)
fmt.Fprintf(out, "Namespace:\t%s\n", scheduledJob.Namespace)
@ -1335,12 +1322,12 @@ func printActiveJobs(out io.Writer, title string, jobs []api.ObjectReference) {
// DaemonSetDescriber generates information about a daemon set and the pods it has created.
type DaemonSetDescriber struct {
client.Interface
clientset.Interface
}
func (d *DaemonSetDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
dc := d.Extensions().DaemonSets(namespace)
pc := d.Pods(namespace)
pc := d.Core().Pods(namespace)
daemon, err := dc.Get(name)
if err != nil {
@ -1358,7 +1345,7 @@ func (d *DaemonSetDescriber) Describe(namespace, name string, describerSettings
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(daemon)
events, _ = d.Core().Events(namespace).Search(daemon)
}
return describeDaemonSet(daemon, events, running, waiting, succeeded, failed)
@ -1389,11 +1376,11 @@ func describeDaemonSet(daemon *extensions.DaemonSet, events *api.EventList, runn
// SecretDescriber generates information about a secret
type SecretDescriber struct {
client.Interface
clientset.Interface
}
func (d *SecretDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.Secrets(namespace)
c := d.Core().Secrets(namespace)
secret, err := c.Get(name)
if err != nil {
@ -1427,11 +1414,11 @@ func describeSecret(secret *api.Secret) (string, error) {
}
type IngressDescriber struct {
client.Interface
clientset.Interface
}
func (i *IngressDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := i.Extensions().Ingress(namespace)
c := i.Extensions().Ingresses(namespace)
ing, err := c.Get(name)
if err != nil {
return "", err
@ -1440,8 +1427,8 @@ func (i *IngressDescriber) Describe(namespace, name string, describerSettings De
}
func (i *IngressDescriber) describeBackend(ns string, backend *extensions.IngressBackend) string {
endpoints, _ := i.Endpoints(ns).Get(backend.ServiceName)
service, _ := i.Services(ns).Get(backend.ServiceName)
endpoints, _ := i.Core().Endpoints(ns).Get(backend.ServiceName)
service, _ := i.Core().Services(ns).Get(backend.ServiceName)
spName := ""
for i := range service.Spec.Ports {
sp := &service.Spec.Ports[i]
@ -1502,7 +1489,7 @@ func (i *IngressDescriber) describeIngress(ing *extensions.Ingress, describerSet
describeIngressAnnotations(out, ing.Annotations)
if describerSettings.ShowEvents {
events, _ := i.Events(ing.Namespace).Search(ing)
events, _ := i.Core().Events(ing.Namespace).Search(ing)
if events != nil {
DescribeEvents(events, out)
}
@ -1539,21 +1526,21 @@ func describeIngressAnnotations(out io.Writer, annotations map[string]string) {
// ServiceDescriber generates information about a service.
type ServiceDescriber struct {
client.Interface
clientset.Interface
}
func (d *ServiceDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.Services(namespace)
c := d.Core().Services(namespace)
service, err := c.Get(name)
if err != nil {
return "", err
}
endpoints, _ := d.Endpoints(namespace).Get(name)
endpoints, _ := d.Core().Endpoints(namespace).Get(name)
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(service)
events, _ = d.Core().Events(namespace).Search(service)
}
return describeService(service, endpoints, events)
}
@ -1618,11 +1605,11 @@ func describeService(service *api.Service, endpoints *api.Endpoints, events *api
// EndpointsDescriber generates information about an Endpoint.
type EndpointsDescriber struct {
client.Interface
clientset.Interface
}
func (d *EndpointsDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.Endpoints(namespace)
c := d.Core().Endpoints(namespace)
ep, err := c.Get(name)
if err != nil {
@ -1631,7 +1618,7 @@ func (d *EndpointsDescriber) Describe(namespace, name string, describerSettings
var events *api.EventList
if describerSettings.ShowEvents {
events, _ = d.Events(namespace).Search(ep)
events, _ = d.Core().Events(namespace).Search(ep)
}
return describeEndpoints(ep, events)
@ -1691,11 +1678,11 @@ func describeEndpoints(ep *api.Endpoints, events *api.EventList) (string, error)
// ServiceAccountDescriber generates information about a service.
type ServiceAccountDescriber struct {
client.Interface
clientset.Interface
}
func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.ServiceAccounts(namespace)
c := d.Core().ServiceAccounts(namespace)
serviceAccount, err := c.Get(name)
if err != nil {
@ -1706,7 +1693,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSett
tokenSelector := fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(api.SecretTypeServiceAccountToken)})
options := api.ListOptions{FieldSelector: tokenSelector}
secrets, err := d.Secrets(namespace).List(options)
secrets, err := d.Core().Secrets(namespace).List(options)
if err == nil {
for _, s := range secrets.Items {
name, _ := s.Annotations[api.ServiceAccountNameKey]
@ -1772,11 +1759,11 @@ func describeServiceAccount(serviceAccount *api.ServiceAccount, tokens []api.Sec
// NodeDescriber generates information about a node.
type NodeDescriber struct {
client.Interface
clientset.Interface
}
func (d *NodeDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
mc := d.Nodes()
mc := d.Core().Nodes()
node, err := mc.Get(name)
if err != nil {
return "", err
@ -1789,7 +1776,7 @@ func (d *NodeDescriber) Describe(namespace, name string, describerSettings Descr
// in a policy aware setting, users may have access to a node, but not all pods
// in that case, we note that the user does not have access to the pods
canViewPods := true
nodeNonTerminatedPodsList, err := d.Pods(namespace).List(api.ListOptions{FieldSelector: fieldSelector})
nodeNonTerminatedPodsList, err := d.Core().Pods(namespace).List(api.ListOptions{FieldSelector: fieldSelector})
if err != nil {
if !errors.IsForbidden(err) {
return "", err
@ -1804,7 +1791,7 @@ func (d *NodeDescriber) Describe(namespace, name string, describerSettings Descr
} else {
// TODO: We haven't decided the namespace for Node object yet.
ref.UID = types.UID(ref.Name)
events, _ = d.Events("").Search(ref)
events, _ = d.Core().Events("").Search(ref)
}
}
@ -1890,16 +1877,16 @@ func describeNode(node *api.Node, nodeNonTerminatedPodsList *api.PodList, events
})
}
type PetSetDescriber struct {
client *client.Client
type StatefulSetDescriber struct {
client clientset.Interface
}
func (p *PetSetDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
ps, err := p.client.Apps().PetSets(namespace).Get(name)
func (p *StatefulSetDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
ps, err := p.client.Apps().StatefulSets(namespace).Get(name)
if err != nil {
return "", err
}
pc := p.client.Pods(namespace)
pc := p.client.Core().Pods(namespace)
selector, err := unversioned.LabelSelectorAsSelector(ps.Spec.Selector)
if err != nil {
@ -1923,7 +1910,7 @@ func (p *PetSetDescriber) Describe(namespace, name string, describerSettings Des
fmt.Fprintf(out, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
describeVolumes(ps.Spec.Template.Spec.Volumes, out, "")
if describerSettings.ShowEvents {
events, _ := p.client.Events(namespace).Search(ps)
events, _ := p.client.Core().Events(namespace).Search(ps)
if events != nil {
DescribeEvents(events, out)
}
@ -1933,7 +1920,7 @@ func (p *PetSetDescriber) Describe(namespace, name string, describerSettings Des
}
type CertificateSigningRequestDescriber struct {
client *client.Client
client clientset.Interface
}
func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
@ -1942,7 +1929,7 @@ func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, de
return "", err
}
cr, err := utilcertificates.ParseCertificateRequestObject(csr)
cr, err := certutil.ParseCSR(csr)
if err != nil {
return "", fmt.Errorf("Error parsing CSR: %v", err)
}
@ -1991,7 +1978,7 @@ func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, de
}
if describerSettings.ShowEvents {
events, _ := p.client.Events(namespace).Search(csr)
events, _ := p.client.Core().Events(namespace).Search(csr)
if events != nil {
DescribeEvents(events, out)
}
@ -2002,7 +1989,7 @@ func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, de
// HorizontalPodAutoscalerDescriber generates information about a horizontal pod autoscaler.
type HorizontalPodAutoscalerDescriber struct {
client *client.Client
client clientset.Interface
}
func (d *HorizontalPodAutoscalerDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
@ -2038,7 +2025,7 @@ func (d *HorizontalPodAutoscalerDescriber) Describe(namespace, name string, desc
// TODO: switch to scale subresource once the required code is submitted.
if strings.ToLower(hpa.Spec.ScaleTargetRef.Kind) == "replicationcontroller" {
fmt.Fprintf(out, "ReplicationController pods:\t")
rc, err := d.client.ReplicationControllers(hpa.Namespace).Get(hpa.Spec.ScaleTargetRef.Name)
rc, err := d.client.Core().ReplicationControllers(hpa.Namespace).Get(hpa.Spec.ScaleTargetRef.Name)
if err == nil {
fmt.Fprintf(out, "%d current / %d desired\n", rc.Status.Replicas, rc.Spec.Replicas)
} else {
@ -2047,7 +2034,7 @@ func (d *HorizontalPodAutoscalerDescriber) Describe(namespace, name string, desc
}
if describerSettings.ShowEvents {
events, _ := d.client.Events(namespace).Search(hpa)
events, _ := d.client.Core().Events(namespace).Search(hpa)
if events != nil {
DescribeEvents(events, out)
}
@ -2140,11 +2127,11 @@ func getPodsTotalRequestsAndLimits(podList *api.PodList) (reqs map[api.ResourceN
func DescribeEvents(el *api.EventList, w io.Writer) {
if len(el.Items) == 0 {
fmt.Fprint(w, "No events.")
fmt.Fprint(w, "No events.\n")
return
}
sort.Sort(SortableEvents(el.Items))
fmt.Fprint(w, "Events:\n FirstSeen\tLastSeen\tCount\tFrom\tSubobjectPath\tType\tReason\tMessage\n")
sort.Sort(events.SortableEvents(el.Items))
fmt.Fprint(w, "Events:\n FirstSeen\tLastSeen\tCount\tFrom\tSubObjectPath\tType\tReason\tMessage\n")
fmt.Fprint(w, " ---------\t--------\t-----\t----\t-------------\t--------\t------\t-------\n")
for _, e := range el.Items {
fmt.Fprintf(w, " %s\t%s\t%d\t%v\t%v\t%v\t%v\t%v\n",
@ -2186,6 +2173,13 @@ func (dd *DeploymentDescriber) Describe(namespace, name string, describerSetting
ru := d.Spec.Strategy.RollingUpdate
fmt.Fprintf(out, "RollingUpdateStrategy:\t%s max unavailable, %s max surge\n", ru.MaxUnavailable.String(), ru.MaxSurge.String())
}
if len(d.Status.Conditions) > 0 {
fmt.Fprint(out, "Conditions:\n Type\tStatus\tReason\n")
fmt.Fprint(out, " ----\t------\t------\n")
for _, c := range d.Status.Conditions {
fmt.Fprintf(out, " %v \t%v\t%v\n", c.Type, c.Status, c.Reason)
}
}
oldRSs, _, newRS, err := deploymentutil.GetAllReplicaSets(d, dd)
if err == nil {
fmt.Fprintf(out, "OldReplicaSets:\t%s\n", printReplicaSetsByLabels(oldRSs))
@ -2214,7 +2208,7 @@ func (dd *DeploymentDescriber) Describe(namespace, name string, describerSetting
// of getting all DS's and searching through them manually).
// TODO: write an interface for controllers and fuse getReplicationControllersForLabels
// and getDaemonSetsForLabels.
func getDaemonSetsForLabels(c client.DaemonSetInterface, labelsToMatch labels.Labels) ([]extensions.DaemonSet, error) {
func getDaemonSetsForLabels(c extensionsclient.DaemonSetInterface, labelsToMatch labels.Labels) ([]extensions.DaemonSet, error) {
// Get all daemon sets
// TODO: this needs a namespace scope as argument
dss, err := c.List(api.ListOptions{})
@ -2265,7 +2259,7 @@ func printReplicaSetsByLabels(matchingRSs []*extensions.ReplicaSet) string {
return list
}
func getPodStatusForController(c client.PodInterface, selector labels.Selector) (running, waiting, succeeded, failed int, err error) {
func getPodStatusForController(c coreclient.PodInterface, selector labels.Selector) (running, waiting, succeeded, failed int, err error) {
options := api.ListOptions{LabelSelector: selector}
rcPods, err := c.List(options)
if err != nil {
@ -2288,11 +2282,11 @@ func getPodStatusForController(c client.PodInterface, selector labels.Selector)
// ConfigMapDescriber generates information about a ConfigMap
type ConfigMapDescriber struct {
client.Interface
clientset.Interface
}
func (d *ConfigMapDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
c := d.ConfigMaps(namespace)
c := d.Core().ConfigMaps(namespace)
configMap, err := c.Get(name)
if err != nil {
@ -2360,7 +2354,7 @@ func describeCluster(cluster *federation.Cluster) (string, error) {
// NetworkPolicyDescriber generates information about a NetworkPolicy
type NetworkPolicyDescriber struct {
client.Interface
clientset.Interface
}
func (d *NetworkPolicyDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
@ -2385,6 +2379,34 @@ func describeNetworkPolicy(networkPolicy *extensions.NetworkPolicy) (string, err
})
}
type StorageClassDescriber struct {
clientset.Interface
}
func (s *StorageClassDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
sc, err := s.Storage().StorageClasses().Get(name)
if err != nil {
return "", err
}
return tabbedString(func(out io.Writer) error {
fmt.Fprintf(out, "Name:\t%s\n", sc.Name)
fmt.Fprintf(out, "IsDefaultClass:\t%s\n", storageutil.IsDefaultAnnotationText(sc.ObjectMeta))
fmt.Fprintf(out, "Annotations:\t%s\n", labels.FormatLabels(sc.Annotations))
fmt.Fprintf(out, "Provisioner:\t%s\n", sc.Provisioner)
fmt.Fprintf(out, "Parameters:\t%s\n", labels.FormatLabels(sc.Parameters))
if describerSettings.ShowEvents {
events, err := s.Core().Events(namespace).Search(sc)
if err != nil {
return err
}
if events != nil {
DescribeEvents(events, out)
}
}
return nil
})
}
// newErrNoDescriber creates a new ErrNoDescriber with the names of the provided types.
func newErrNoDescriber(types ...reflect.Type) error {
names := make([]string, 0, len(types))