k3s/pkg/kubectl
Kubernetes Submit Queue 1625150de8 Merge pull request #40260 from liggitt/kubectl-tpr
Automatic merge from submit-queue (batch tested with PRs 39223, 40260, 40082, 40389)

make kubectl generic commands work with unstructured objects

part of making apply, edit, label, annotate, and patch work with third party resources

fixes #35149
fixes #34413

prereq of:
https://github.com/kubernetes/kubernetes/issues/35496
https://github.com/kubernetes/kubernetes/pull/40096

related to:
https://github.com/kubernetes/kubernetes/issues/39906
https://github.com/kubernetes/kubernetes/issues/40119

kubectl is currently decoding any resource it doesn't have compiled-in to a ThirdPartyResourceData struct, which means it computes patches using that struct, and would try to send a ThirdPartyResourceData object to the API server when running `apply`

This PR removes the behavior that decodes unknown objects into ThirdPartyResourceData structs internally, and fixes up the following generic commands to work with unstructured objects

- [x] apply
  - [x] decode into runtime.Unstructured objects
  - [x] successfully use `--record` with unregistered objects 
- [x] patch
  - [x] decode into runtime.Unstructured objects
  - [x] successfully use `--record` with unregistered objects 
- [x] describe
  - [x] decode into runtime.Unstructured objects
  - [x] implement generic describer
- [x] fix other generic kubectl commands to work with unstructured objects
  - [x] label
  - [x] annotate

follow-ups for pre-existing issues:
- [ ] `explain` doesn't work with unregistered resources
- [ ] remove special casing of federation group in clientset lookups, etc
- [ ] `patch`
  - [ ] doesn't honor output formats when persisting to server (`kubectl patch -f svc.json --type merge -p '{}' -o json` doesn't output json)
  - [ ] --local throws exception (`kubectl patch -f svc.json --type merge -p '{}' --local`)
- [ ] `apply`
  - [ ] fall back to generic JSON patch computation if no go struct is registered for the target GVK (e.g. https://github.com/kubernetes/kubernetes/pull/40096)
  - [ ] ensure subkey deletion works in CreateThreeWayJSONMergePatch
  - [ ] ensure type stomping works in CreateThreeWayJSONMergePatch
  - [ ] lots of tests for generic json patch computation
  - [ ] prevent generic apply patch computation among different versions
  - [ ] reconcile treatment of nulls with https://github.com/kubernetes/kubernetes/pull/35496
- [ ] `edit`
  - [ ] decode into runtime.Unstructured objects
  - [ ] fall back to generic JSON patch computation if no go struct is registered for the target GVK
2017-01-27 05:41:45 -08:00
..
cmd Merge pull request #40260 from liggitt/kubectl-tpr 2017-01-27 05:41:45 -08:00
metricsutil generated: informer,client 2017-01-23 17:52:47 -05:00
resource Merge pull request #40046 from juanvallejo/jvallejo/update-multiple-types-requested-check 2017-01-26 16:10:34 -08:00
testing refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
BUILD bazel 2017-01-26 19:59:16 -05:00
OWNERS Revert "update kubectl approvers" 2017-01-25 17:32:22 -08:00
apply.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
autoscale.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
bash_comp_utils.go
cluster.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
cluster_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
clusterrolebinding.go change APIVersion to v1beta1 in create rolebinding/clusterrolebinding 2017-01-24 08:32:56 +08:00
configmap.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
configmap_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
custom_column_printer.go move authoritative client-go utils out of pkg 2017-01-24 08:59:18 -05:00
custom_column_printer_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
deployment.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
deployment_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
describe.go describe: allow describing generic api objects 2017-01-26 19:59:26 -05:00
describe_test.go Allow Optional ConfigMap and Secrets 2017-01-23 18:59:49 -07:00
doc.go
explain.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
generate.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
generate_test.go
history.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
interfaces.go find and replace 2017-01-20 08:04:53 -05:00
kubectl.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
kubectl_test.go
namespace.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
namespace_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
pdb.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
proxy_server.go find and replace 2017-01-20 08:04:53 -05:00
proxy_server_test.go Merge pull request #38789 from jessfraz/cleanup-temp-dirs 2017-01-20 12:34:58 -08:00
quota.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
quota_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
resource_filter.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
resource_printer.go Merge pull request #40073 from matthyx/master 2017-01-26 16:10:36 -08:00
resource_printer_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
rolebinding.go change APIVersion to v1beta1 in create rolebinding/clusterrolebinding 2017-01-24 08:32:56 +08:00
rollback.go refactor: move ListOptions references to metav1 2017-01-23 17:52:46 -05:00
rolling_updater.go refactor: Move *Options references to metav1 2017-01-24 13:41:51 -05:00
rolling_updater_test.go move testing/core to client-go 2017-01-26 13:54:40 -05:00
rollout_status.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
rollout_status_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
run.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
run_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
scale.go refactor: move ListOptions references to metav1 2017-01-23 17:52:46 -05:00
scale_test.go move testing/core to client-go 2017-01-26 13:54:40 -05:00
secret.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
secret_for_docker_registry.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
secret_for_docker_registry_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
secret_for_tls.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
secret_for_tls_test.go move authoritative client-go utils out of pkg 2017-01-24 08:59:18 -05:00
secret_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
service.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
service_basic.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
service_basic_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
service_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
serviceaccount.go start the apimachinery repo 2017-01-11 09:09:48 -05:00
serviceaccount_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
sorted_resource_name_list.go
sorted_resource_name_list_test.go
sorting_printer.go move authoritative client-go utils out of pkg 2017-01-24 08:59:18 -05:00
sorting_printer_test.go refactor: use metav1.ObjectMeta in other types 2017-01-17 16:17:19 -05:00
stop.go pkg/util: move uuid and strategicpatch into k8s.io/apimachinery 2017-01-25 19:45:09 +01:00
stop_test.go move testing/core to client-go 2017-01-26 13:54:40 -05:00
versioned_client.go