Merge pull request #67211 from juanvallejo/jvallejo/prototype-sorter

Automatic merge from submit-queue (batch tested with PRs 68051, 68130, 67211, 68065, 68117). If you want to cherry-pick this change to another branch, please follow the instructions here: https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md.

Update `kubectl get` sorter to deal with server-side printing

**Release note**:
```release-note
NONE
```

### Why?

Currently, we default to non-server-side printing when sorting items in `kubectl get`. This means that instead of taking advantage of having the server tell `kubectl` how to display information, `kubectl` falls back to using hardcoded resource types to figure out how to print its output. This does not really work with resources that `kubectl` does not know about, and it goes against our goal of snipping any dependencies that `kubectl` has on the core repo.

This patch adds a sorter capable of dealing with Table objects sent by the server when using "server-side printing".

A few things left to take care of:

- ~~[ ] When printing `all` resources, this implementation does not handle sorting every single Table object, but rather _only_ the rows in each object. As a result, output will contain sorted resources of the same _kind_, but the overall list of mixed resources will _not_ itself be sorted. Example:~~

```bash
$ kubectl get all --sort-by .metadata.name
NAME            READY     STATUS    RESTARTS   AGE
# pods here will be sorted:
pod/bar         0/2       Pending   0          31m
pod/foo         1/1       Running   0          37m

NAME                        DESIRED   CURRENT   READY     AGE
# replication controllers here will be sorted as well:
replicationcontroller/baz   1         1         1         37m
replicationcontroller/buz   1         1         1         37m

# ... but the overall mixed list of rc's and pods will not be sorted
```
This occurs because each Table object received from the server contains all rows for that resource _kind_. We would need a way to build an ambiguous Table object containing all rows for all objects regardless of their type to have a fully sorted mixed-object output.

- [ ] handle sorting by column-names, rather than _only_ with jsonpaths (Tracked in https://github.com/kubernetes/kubernetes/issues/68027)

cc @soltysh @kubernetes/sig-cli-maintainers @seans3 @mengqiy
This commit is contained in:
Kubernetes Submit Queue
2018-08-31 15:32:40 -07:00
committed by GitHub
9 changed files with 370 additions and 33 deletions

View File

@@ -2,9 +2,10 @@ apiVersion: v1
kind: Pod
metadata:
name: sorted-pod1
creationTimestamp: 2018-08-30T14:10:58Z
labels:
name: sorted-pod3-label
spec:
containers:
- name: kubernetes-pause
- name: kubernetes-pause2
image: k8s.gcr.io/pause:2.0

View File

@@ -2,9 +2,10 @@ apiVersion: v1
kind: Pod
metadata:
name: sorted-pod2
creationTimestamp: 2018-08-30T14:10:55Z
labels:
name: sorted-pod2-label
spec:
containers:
- name: kubernetes-pause
- name: kubernetes-pause1
image: k8s.gcr.io/pause:2.0

View File

@@ -2,9 +2,10 @@ apiVersion: v1
kind: Pod
metadata:
name: sorted-pod3
creationTimestamp: 2018-08-30T14:10:53Z
labels:
name: sorted-pod1-label
spec:
containers:
- name: kubernetes-pause
- name: kubernetes-pause3
image: k8s.gcr.io/pause:2.0