Merge pull request #63565 from roycaihw/bump-kube-openapi-dep

Automatic merge from submit-queue (batch tested with PRs 59034, 63565, 63533). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Bump kube-openapi dependency

picks: https://github.com/kubernetes/kube-openapi/pull/67
ref: https://github.com/kubernetes/kubernetes/issues/63494

**Release note**:

```release-note
NONE
```

Kubernetes-commit: 3663dc757e05fb79f23a14ad4f2ba832d6e5962c
This commit is contained in:
Kubernetes Publisher 2018-05-09 05:13:12 -07:00
commit 8a66ce0ffe
31 changed files with 1061 additions and 692 deletions

382
Godeps/Godeps.json generated
View File

@ -156,767 +156,767 @@
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/apps/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/apps/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/apps/v1beta2",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/authentication/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/authentication/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/authorization/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/authorization/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/autoscaling/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/batch/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/batch/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/batch/v2alpha1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/certificates/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/core/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/events/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/extensions/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/networking/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/policy/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/rbac/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/rbac/v1alpha1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/rbac/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/settings/v1alpha1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/storage/v1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/storage/v1alpha1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/api/storage/v1beta1",
"Rev": "b7d77fa220f5130ec63c2ca7167dd9653449c64d"
"Rev": "8ab7c6a2fbd1724a52514855629cec31a8f86929"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "bd236513a4e35622d9007dff11eab07631645cd5"
"Rev": "5937a4130a6bf81b86b03a6c6e7cd974a5018f59"
},
{
"ImportPath": "k8s.io/client-go/discovery",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/discovery/fake",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/apps",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1beta2",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/batch",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v2alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/certificates",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/certificates/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/core",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/core/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/events",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/events/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/extensions",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/extensions/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/internalinterfaces",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/networking",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/networking/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/policy",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/policy/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/scheduling",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/settings",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/settings/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/storage",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/scheme",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1beta2",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/autoscaling/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v2alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/certificates/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/core/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/events/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/extensions/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/networking/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/policy/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/settings/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1beta1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/pkg/version",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/plugin/pkg/client/auth/exec",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/rest",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/rest/watch",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/testing",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/auth",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/cache",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/metrics",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/pager",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/record",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/tools/reference",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/transport",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/buffer",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/cert",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/flowcontrol",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/homedir",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/integer",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/client-go/util/workqueue",
"Rev": "7e5a9c2cb47b6f7eaf18e4a0484c48ea3932e7d3"
"Rev": "62c4633c17ed12226e4dad9d21e856df3c737862"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
"Rev": "f08db293d3ef80052d6513ece19792642a289fea"
"Rev": "61db125d227fc9d4e373819a059516f32f7f23c7"
}
]
}

View File

@ -16,6 +16,8 @@ limitations under the License.
package v1beta1
import "k8s.io/apimachinery/pkg/runtime"
func (in *TableRow) DeepCopy() *TableRow {
if in == nil {
return nil
@ -26,7 +28,7 @@ func (in *TableRow) DeepCopy() *TableRow {
if in.Cells != nil {
out.Cells = make([]interface{}, len(in.Cells))
for i := range in.Cells {
out.Cells[i] = deepCopyJSON(in.Cells[i])
out.Cells[i] = runtime.DeepCopyJSONValue(in.Cells[i])
}
}
@ -40,22 +42,3 @@ func (in *TableRow) DeepCopy() *TableRow {
in.Object.DeepCopyInto(&out.Object)
return out
}
func deepCopyJSON(x interface{}) interface{} {
switch x := x.(type) {
case map[string]interface{}:
clone := make(map[string]interface{}, len(x))
for k, v := range x {
clone[k] = deepCopyJSON(v)
}
return clone
case []interface{}:
clone := make([]interface{}, len(x))
for i := range x {
clone[i] = deepCopyJSON(x[i])
}
return clone
default:
return x
}
}

View File

@ -73,7 +73,6 @@ var (
mapStringInterfaceType = reflect.TypeOf(map[string]interface{}{})
stringType = reflect.TypeOf(string(""))
int64Type = reflect.TypeOf(int64(0))
uint64Type = reflect.TypeOf(uint64(0))
float64Type = reflect.TypeOf(float64(0))
boolType = reflect.TypeOf(bool(false))
fieldCache = newFieldsCache()
@ -438,13 +437,15 @@ func (c *unstructuredConverter) ToUnstructured(obj interface{}) (map[string]inte
}
// DeepCopyJSON deep copies the passed value, assuming it is a valid JSON representation i.e. only contains
// types produced by json.Unmarshal().
// types produced by json.Unmarshal() and also int64.
// bool, int64, float64, string, []interface{}, map[string]interface{}, json.Number and nil
func DeepCopyJSON(x map[string]interface{}) map[string]interface{} {
return DeepCopyJSONValue(x).(map[string]interface{})
}
// DeepCopyJSONValue deep copies the passed value, assuming it is a valid JSON representation i.e. only contains
// types produced by json.Unmarshal().
// types produced by json.Unmarshal() and also int64.
// bool, int64, float64, string, []interface{}, map[string]interface{}, json.Number and nil
func DeepCopyJSONValue(x interface{}) interface{} {
switch x := x.(type) {
case map[string]interface{}:
@ -591,10 +592,14 @@ func toUnstructured(sv, dv reflect.Value) error {
dv.Set(reflect.ValueOf(sv.Int()))
return nil
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
dv.Set(reflect.New(uint64Type))
uVal := sv.Uint()
if uVal > math.MaxInt64 {
return fmt.Errorf("unsigned value %d does not fit into int64 (overflow)", uVal)
}
dv.Set(reflect.ValueOf(sv.Uint()))
if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {
dv.Set(reflect.New(int64Type))
}
dv.Set(reflect.ValueOf(int64(uVal)))
return nil
case reflect.Float32, reflect.Float64:
if dt.Kind() == reflect.Interface && dv.NumMethod() == 0 {

View File

@ -21,8 +21,11 @@ import (
"net/url"
"reflect"
"strings"
"k8s.io/apimachinery/pkg/conversion"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets"
)
// Scheme defines methods for serializing and deserializing API objects, a type
@ -68,6 +71,13 @@ type Scheme struct {
// converter stores all registered conversion functions. It also has
// default coverting behavior.
converter *conversion.Converter
// versionPriority is a map of groups to ordered lists of versions for those groups indicating the
// default priorities of these versions as registered in the scheme
versionPriority map[string][]string
// observedVersions keeps track of the order we've seen versions during type registration
observedVersions []schema.GroupVersion
}
// Function to convert a field selector to internal representation.
@ -82,6 +92,7 @@ func NewScheme() *Scheme {
unversionedKinds: map[string]reflect.Type{},
fieldLabelConversionFuncs: map[string]map[string]FieldLabelConversionFunc{},
defaulterFuncs: map[reflect.Type]func(interface{}){},
versionPriority: map[string][]string{},
}
s.converter = conversion.NewConverter(s.nameFunc)
@ -141,6 +152,7 @@ func (s *Scheme) Converter() *conversion.Converter {
// TODO: there is discussion about removing unversioned and replacing it with objects that are manifest into
// every version with particular schemas. Resolve this method at that point.
func (s *Scheme) AddUnversionedTypes(version schema.GroupVersion, types ...Object) {
s.addObservedVersion(version)
s.AddKnownTypes(version, types...)
for _, obj := range types {
t := reflect.TypeOf(obj).Elem()
@ -158,6 +170,7 @@ func (s *Scheme) AddUnversionedTypes(version schema.GroupVersion, types ...Objec
// the struct becomes the "kind" field when encoding. Version may not be empty - use the
// APIVersionInternal constant if you have a type that does not have a formal version.
func (s *Scheme) AddKnownTypes(gv schema.GroupVersion, types ...Object) {
s.addObservedVersion(gv)
for _, obj := range types {
t := reflect.TypeOf(obj)
if t.Kind() != reflect.Ptr {
@ -173,6 +186,7 @@ func (s *Scheme) AddKnownTypes(gv schema.GroupVersion, types ...Object) {
// your structs. Version may not be empty - use the APIVersionInternal constant if you have a
// type that does not have a formal version.
func (s *Scheme) AddKnownTypeWithName(gvk schema.GroupVersionKind, obj Object) {
s.addObservedVersion(gvk.GroupVersion())
t := reflect.TypeOf(obj)
if len(gvk.Version) == 0 {
panic(fmt.Sprintf("version is required on all types: %s %v", gvk, t))
@ -620,3 +634,133 @@ func setTargetKind(obj Object, kind schema.GroupVersionKind) {
}
obj.GetObjectKind().SetGroupVersionKind(kind)
}
// SetVersionPriority allows specifying a precise order of priority. All specified versions must be in the same group,
// and the specified order overwrites any previously specified order for this group
func (s *Scheme) SetVersionPriority(versions ...schema.GroupVersion) error {
groups := sets.String{}
order := []string{}
for _, version := range versions {
if len(version.Version) == 0 || version.Version == APIVersionInternal {
return fmt.Errorf("internal versions cannot be prioritized: %v", version)
}
groups.Insert(version.Group)
order = append(order, version.Version)
}
if len(groups) != 1 {
return fmt.Errorf("must register versions for exactly one group: %v", strings.Join(groups.List(), ", "))
}
s.versionPriority[groups.List()[0]] = order
return nil
}
// PrioritizedVersionsForGroup returns versions for a single group in priority order
func (s *Scheme) PrioritizedVersionsForGroup(group string) []schema.GroupVersion {
ret := []schema.GroupVersion{}
for _, version := range s.versionPriority[group] {
ret = append(ret, schema.GroupVersion{Group: group, Version: version})
}
for _, observedVersion := range s.observedVersions {
if observedVersion.Group != group {
continue
}
found := false
for _, existing := range ret {
if existing == observedVersion {
found = true
break
}
}
if !found {
ret = append(ret, observedVersion)
}
}
return ret
}
// PrioritizedVersionsAllGroups returns all known versions in their priority order. Groups are random, but
// versions for a single group are prioritized
func (s *Scheme) PrioritizedVersionsAllGroups() []schema.GroupVersion {
ret := []schema.GroupVersion{}
for group, versions := range s.versionPriority {
for _, version := range versions {
ret = append(ret, schema.GroupVersion{Group: group, Version: version})
}
}
for _, observedVersion := range s.observedVersions {
found := false
for _, existing := range ret {
if existing == observedVersion {
found = true
break
}
}
if !found {
ret = append(ret, observedVersion)
}
}
return ret
}
// PreferredVersionAllGroups returns the most preferred version for every group.
// group ordering is random.
func (s *Scheme) PreferredVersionAllGroups() []schema.GroupVersion {
ret := []schema.GroupVersion{}
for group, versions := range s.versionPriority {
for _, version := range versions {
ret = append(ret, schema.GroupVersion{Group: group, Version: version})
break
}
}
for _, observedVersion := range s.observedVersions {
found := false
for _, existing := range ret {
if existing.Group == observedVersion.Group {
found = true
break
}
}
if !found {
ret = append(ret, observedVersion)
}
}
return ret
}
// IsGroupRegistered returns true if types for the group have been registered with the scheme
func (s *Scheme) IsGroupRegistered(group string) bool {
for _, observedVersion := range s.observedVersions {
if observedVersion.Group == group {
return true
}
}
return false
}
// IsVersionRegistered returns true if types for the version have been registered with the scheme
func (s *Scheme) IsVersionRegistered(version schema.GroupVersion) bool {
for _, observedVersion := range s.observedVersions {
if observedVersion == version {
return true
}
}
return false
}
func (s *Scheme) addObservedVersion(version schema.GroupVersion) {
if len(version.Version) == 0 || version.Version == APIVersionInternal {
return
}
for _, observedVersion := range s.observedVersions {
if observedVersion == version {
return
}
}
s.observedVersions = append(s.observedVersions, version)
}

View File

@ -75,11 +75,6 @@ func init() {
case jsoniter.NumberValue:
var number json.Number
iter.ReadVal(&number)
u64, err := strconv.ParseUint(string(number), 10, 64)
if err == nil {
*(*interface{})(ptr) = u64
return
}
i64, err := strconv.ParseInt(string(number), 10, 64)
if err == nil {
*(*interface{})(ptr) = i64

View File

@ -160,3 +160,10 @@ func RecoverFromPanic(err *error) {
callers)
}
}
// Must panics on non-nil errors. Useful to handling programmer level errors.
func Must(err error) {
if err != nil {
panic(err)
}
}

View File

@ -250,6 +250,11 @@ func IsGroupDiscoveryFailedError(err error) bool {
// serverPreferredResources returns the supported resources with the version preferred by the server.
func (d *DiscoveryClient) serverPreferredResources() ([]*metav1.APIResourceList, error) {
return ServerPreferredResources(d)
}
// ServerPreferredResources uses the provided discovery interface to look up preferred resources
func ServerPreferredResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) {
serverGroupList, err := d.ServerGroups()
if err != nil {
return nil, err
@ -319,7 +324,12 @@ func (d *DiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList,
// ServerPreferredNamespacedResources returns the supported namespaced resources with the
// version preferred by the server.
func (d *DiscoveryClient) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) {
all, err := d.ServerPreferredResources()
return ServerPreferredNamespacedResources(d)
}
// ServerPreferredNamespacedResources uses the provided discovery interface to look up preferred namespaced resources
func ServerPreferredNamespacedResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) {
all, err := ServerPreferredResources(d)
return FilteredBy(ResourcePredicateFunc(func(groupVersion string, r *metav1.APIResource) bool {
return r.Namespaced
}), all), err

View File

@ -1,336 +0,0 @@
/*
Copyright 2016 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 discovery
import (
"fmt"
"strings"
"sync"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"github.com/golang/glog"
)
// APIGroupResources is an API group with a mapping of versions to
// resources.
type APIGroupResources struct {
Group metav1.APIGroup
// A mapping of version string to a slice of APIResources for
// that version.
VersionedResources map[string][]metav1.APIResource
}
// NewRESTMapper returns a PriorityRESTMapper based on the discovered
// groups and resources passed in.
func NewRESTMapper(groupResources []*APIGroupResources) meta.RESTMapper {
unionMapper := meta.MultiRESTMapper{}
var groupPriority []string
// /v1 is special. It should always come first
resourcePriority := []schema.GroupVersionResource{{Group: "", Version: "v1", Resource: meta.AnyResource}}
kindPriority := []schema.GroupVersionKind{{Group: "", Version: "v1", Kind: meta.AnyKind}}
for _, group := range groupResources {
groupPriority = append(groupPriority, group.Group.Name)
// Make sure the preferred version comes first
if len(group.Group.PreferredVersion.Version) != 0 {
preferred := group.Group.PreferredVersion.Version
if _, ok := group.VersionedResources[preferred]; ok {
resourcePriority = append(resourcePriority, schema.GroupVersionResource{
Group: group.Group.Name,
Version: group.Group.PreferredVersion.Version,
Resource: meta.AnyResource,
})
kindPriority = append(kindPriority, schema.GroupVersionKind{
Group: group.Group.Name,
Version: group.Group.PreferredVersion.Version,
Kind: meta.AnyKind,
})
}
}
for _, discoveryVersion := range group.Group.Versions {
resources, ok := group.VersionedResources[discoveryVersion.Version]
if !ok {
continue
}
// Add non-preferred versions after the preferred version, in case there are resources that only exist in those versions
if discoveryVersion.Version != group.Group.PreferredVersion.Version {
resourcePriority = append(resourcePriority, schema.GroupVersionResource{
Group: group.Group.Name,
Version: discoveryVersion.Version,
Resource: meta.AnyResource,
})
kindPriority = append(kindPriority, schema.GroupVersionKind{
Group: group.Group.Name,
Version: discoveryVersion.Version,
Kind: meta.AnyKind,
})
}
gv := schema.GroupVersion{Group: group.Group.Name, Version: discoveryVersion.Version}
versionMapper := meta.NewDefaultRESTMapper([]schema.GroupVersion{gv})
for _, resource := range resources {
scope := meta.RESTScopeNamespace
if !resource.Namespaced {
scope = meta.RESTScopeRoot
}
// this is for legacy resources and servers which don't list singular forms. For those we must still guess.
if len(resource.SingularName) == 0 {
versionMapper.Add(gv.WithKind(resource.Kind), scope)
// TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior
versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope)
continue
}
plural := gv.WithResource(resource.Name)
singular := gv.WithResource(resource.SingularName)
versionMapper.AddSpecific(gv.WithKind(resource.Kind), plural, singular, scope)
versionMapper.AddSpecific(gv.WithKind(strings.ToLower(resource.Kind)), plural, singular, scope)
// TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior
versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope)
}
// TODO why is this type not in discovery (at least for "v1")
versionMapper.Add(gv.WithKind("List"), meta.RESTScopeRoot)
unionMapper = append(unionMapper, versionMapper)
}
}
for _, group := range groupPriority {
resourcePriority = append(resourcePriority, schema.GroupVersionResource{
Group: group,
Version: meta.AnyVersion,
Resource: meta.AnyResource,
})
kindPriority = append(kindPriority, schema.GroupVersionKind{
Group: group,
Version: meta.AnyVersion,
Kind: meta.AnyKind,
})
}
return meta.PriorityRESTMapper{
Delegate: unionMapper,
ResourcePriority: resourcePriority,
KindPriority: kindPriority,
}
}
// GetAPIGroupResources uses the provided discovery client to gather
// discovery information and populate a slice of APIGroupResources.
func GetAPIGroupResources(cl DiscoveryInterface) ([]*APIGroupResources, error) {
apiGroups, err := cl.ServerGroups()
if err != nil {
if apiGroups == nil || len(apiGroups.Groups) == 0 {
return nil, err
}
// TODO track the errors and update callers to handle partial errors.
}
var result []*APIGroupResources
for _, group := range apiGroups.Groups {
groupResources := &APIGroupResources{
Group: group,
VersionedResources: make(map[string][]metav1.APIResource),
}
for _, version := range group.Versions {
resources, err := cl.ServerResourcesForGroupVersion(version.GroupVersion)
if err != nil {
// continue as best we can
// TODO track the errors and update callers to handle partial errors.
if resources == nil || len(resources.APIResources) == 0 {
continue
}
}
groupResources.VersionedResources[version.Version] = resources.APIResources
}
result = append(result, groupResources)
}
return result, nil
}
// DeferredDiscoveryRESTMapper is a RESTMapper that will defer
// initialization of the RESTMapper until the first mapping is
// requested.
type DeferredDiscoveryRESTMapper struct {
initMu sync.Mutex
delegate meta.RESTMapper
cl CachedDiscoveryInterface
}
// NewDeferredDiscoveryRESTMapper returns a
// DeferredDiscoveryRESTMapper that will lazily query the provided
// client for discovery information to do REST mappings.
func NewDeferredDiscoveryRESTMapper(cl CachedDiscoveryInterface) *DeferredDiscoveryRESTMapper {
return &DeferredDiscoveryRESTMapper{
cl: cl,
}
}
func (d *DeferredDiscoveryRESTMapper) getDelegate() (meta.RESTMapper, error) {
d.initMu.Lock()
defer d.initMu.Unlock()
if d.delegate != nil {
return d.delegate, nil
}
groupResources, err := GetAPIGroupResources(d.cl)
if err != nil {
return nil, err
}
d.delegate = NewRESTMapper(groupResources)
return d.delegate, err
}
// Reset resets the internally cached Discovery information and will
// cause the next mapping request to re-discover.
func (d *DeferredDiscoveryRESTMapper) Reset() {
glog.V(5).Info("Invalidating discovery information")
d.initMu.Lock()
defer d.initMu.Unlock()
d.cl.Invalidate()
d.delegate = nil
}
// KindFor takes a partial resource and returns back the single match.
// It returns an error if there are multiple matches.
func (d *DeferredDiscoveryRESTMapper) KindFor(resource schema.GroupVersionResource) (gvk schema.GroupVersionKind, err error) {
del, err := d.getDelegate()
if err != nil {
return schema.GroupVersionKind{}, err
}
gvk, err = del.KindFor(resource)
if err != nil && !d.cl.Fresh() {
d.Reset()
gvk, err = d.KindFor(resource)
}
return
}
// KindsFor takes a partial resource and returns back the list of
// potential kinds in priority order.
func (d *DeferredDiscoveryRESTMapper) KindsFor(resource schema.GroupVersionResource) (gvks []schema.GroupVersionKind, err error) {
del, err := d.getDelegate()
if err != nil {
return nil, err
}
gvks, err = del.KindsFor(resource)
if len(gvks) == 0 && !d.cl.Fresh() {
d.Reset()
gvks, err = d.KindsFor(resource)
}
return
}
// ResourceFor takes a partial resource and returns back the single
// match. It returns an error if there are multiple matches.
func (d *DeferredDiscoveryRESTMapper) ResourceFor(input schema.GroupVersionResource) (gvr schema.GroupVersionResource, err error) {
del, err := d.getDelegate()
if err != nil {
return schema.GroupVersionResource{}, err
}
gvr, err = del.ResourceFor(input)
if err != nil && !d.cl.Fresh() {
d.Reset()
gvr, err = d.ResourceFor(input)
}
return
}
// ResourcesFor takes a partial resource and returns back the list of
// potential resource in priority order.
func (d *DeferredDiscoveryRESTMapper) ResourcesFor(input schema.GroupVersionResource) (gvrs []schema.GroupVersionResource, err error) {
del, err := d.getDelegate()
if err != nil {
return nil, err
}
gvrs, err = del.ResourcesFor(input)
if len(gvrs) == 0 && !d.cl.Fresh() {
d.Reset()
gvrs, err = d.ResourcesFor(input)
}
return
}
// RESTMapping identifies a preferred resource mapping for the
// provided group kind.
func (d *DeferredDiscoveryRESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) (m *meta.RESTMapping, err error) {
del, err := d.getDelegate()
if err != nil {
return nil, err
}
m, err = del.RESTMapping(gk, versions...)
if err != nil && !d.cl.Fresh() {
d.Reset()
m, err = d.RESTMapping(gk, versions...)
}
return
}
// RESTMappings returns the RESTMappings for the provided group kind
// in a rough internal preferred order. If no kind is found, it will
// return a NoResourceMatchError.
func (d *DeferredDiscoveryRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) (ms []*meta.RESTMapping, err error) {
del, err := d.getDelegate()
if err != nil {
return nil, err
}
ms, err = del.RESTMappings(gk, versions...)
if len(ms) == 0 && !d.cl.Fresh() {
d.Reset()
ms, err = d.RESTMappings(gk, versions...)
}
return
}
// ResourceSingularizer converts a resource name from plural to
// singular (e.g., from pods to pod).
func (d *DeferredDiscoveryRESTMapper) ResourceSingularizer(resource string) (singular string, err error) {
del, err := d.getDelegate()
if err != nil {
return resource, err
}
singular, err = del.ResourceSingularizer(resource)
if err != nil && !d.cl.Fresh() {
d.Reset()
singular, err = d.ResourceSingularizer(resource)
}
return
}
func (d *DeferredDiscoveryRESTMapper) String() string {
del, err := d.getDelegate()
if err != nil {
return fmt.Sprintf("DeferredDiscoveryRESTMapper{%v}", err)
}
return fmt.Sprintf("DeferredDiscoveryRESTMapper{\n\t%v\n}", del)
}
// Make sure it satisfies the interface
var _ meta.RESTMapper = &DeferredDiscoveryRESTMapper{}

View File

@ -26,31 +26,17 @@ import (
// UnstructuredObjectTyper provides a runtime.ObjectTyper implementation for
// runtime.Unstructured object based on discovery information.
type UnstructuredObjectTyper struct {
registered map[schema.GroupVersionKind]bool
typers []runtime.ObjectTyper
typers []runtime.ObjectTyper
}
// NewUnstructuredObjectTyper returns a runtime.ObjectTyper for
// unstructured objects based on discovery information. It accepts a list of fallback typers
// for handling objects that are not runtime.Unstructured. It does not delegate the Recognizes
// check, only ObjectKinds.
func NewUnstructuredObjectTyper(groupResources []*APIGroupResources, typers ...runtime.ObjectTyper) *UnstructuredObjectTyper {
// TODO this only works for the apiextensions server and doesn't recognize any types. Move to point of use.
func NewUnstructuredObjectTyper(typers ...runtime.ObjectTyper) *UnstructuredObjectTyper {
dot := &UnstructuredObjectTyper{
registered: make(map[schema.GroupVersionKind]bool),
typers: typers,
}
for _, group := range groupResources {
for _, discoveryVersion := range group.Group.Versions {
resources, ok := group.VersionedResources[discoveryVersion.Version]
if !ok {
continue
}
gv := schema.GroupVersion{Group: group.Group.Name, Version: discoveryVersion.Version}
for _, resource := range resources {
dot.registered[gv.WithKind(resource.Kind)] = true
}
}
typers: typers,
}
return dot
}
@ -89,7 +75,7 @@ func (d *UnstructuredObjectTyper) ObjectKinds(obj runtime.Object) (gvks []schema
// Recognizes returns true if the provided group,version,kind was in the
// discovery information.
func (d *UnstructuredObjectTyper) Recognizes(gvk schema.GroupVersionKind) bool {
return d.registered[gvk]
return false
}
var _ runtime.ObjectTyper = &UnstructuredObjectTyper{}

View File

@ -58,6 +58,16 @@ func NewGetSubresourceAction(resource schema.GroupVersionResource, namespace, su
return action
}
func NewRootGetSubresourceAction(resource schema.GroupVersionResource, subresource, name string) GetActionImpl {
action := GetActionImpl{}
action.Verb = "get"
action.Resource = resource
action.Subresource = subresource
action.Name = name
return action
}
func NewRootListAction(resource schema.GroupVersionResource, kind schema.GroupVersionKind, opts interface{}) ListActionImpl {
action := ListActionImpl{}
action.Verb = "list"
@ -81,20 +91,6 @@ func NewListAction(resource schema.GroupVersionResource, kind schema.GroupVersio
return action
}
func NewListSubresourceAction(resource schema.GroupVersionResource, name, subresource string, kind schema.GroupVersionKind, namespace string, opts interface{}) ListActionImpl {
action := ListActionImpl{}
action.Verb = "list"
action.Resource = resource
action.Subresource = subresource
action.Kind = kind
action.Namespace = namespace
action.Name = name
labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
return action
}
func NewRootCreateAction(resource schema.GroupVersionResource, object runtime.Object) CreateActionImpl {
action := CreateActionImpl{}
action.Verb = "create"
@ -114,12 +110,23 @@ func NewCreateAction(resource schema.GroupVersionResource, namespace string, obj
return action
}
func NewCreateSubresourceAction(resource schema.GroupVersionResource, name, subresource string, namespace string, object runtime.Object) CreateActionImpl {
func NewRootCreateSubresourceAction(resource schema.GroupVersionResource, name, subresource string, object runtime.Object) CreateActionImpl {
action := CreateActionImpl{}
action.Verb = "create"
action.Resource = resource
action.Subresource = subresource
action.Name = name
action.Object = object
return action
}
func NewCreateSubresourceAction(resource schema.GroupVersionResource, name, subresource, namespace string, object runtime.Object) CreateActionImpl {
action := CreateActionImpl{}
action.Verb = "create"
action.Resource = resource
action.Namespace = namespace
action.Subresource = subresource
action.Name = name
action.Object = object

View File

@ -260,11 +260,11 @@
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/common",
"Rev": "f08db293d3ef80052d6513ece19792642a289fea"
"Rev": "61db125d227fc9d4e373819a059516f32f7f23c7"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/generators",
"Rev": "f08db293d3ef80052d6513ece19792642a289fea"
"Rev": "61db125d227fc9d4e373819a059516f32f7f23c7"
}
]
}

View File

@ -19,25 +19,15 @@ limitations under the License.
package install
import (
"k8s.io/apimachinery/pkg/apimachinery/announced"
"k8s.io/apimachinery/pkg/apimachinery/registered"
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/code-generator/_examples/apiserver/apis/example"
"k8s.io/code-generator/_examples/apiserver/apis/example/v1"
)
// Install registers the API group and adds types to a scheme
func Install(registry *registered.APIRegistrationManager, scheme *runtime.Scheme) {
if err := announced.NewGroupMetaFactory(
&announced.GroupMetaFactoryArgs{
GroupName: example.SchemeGroupVersion.Group,
VersionPreferenceOrder: []string{v1.SchemeGroupVersion.Version},
AddInternalObjectsToScheme: example.AddToScheme,
},
announced.VersionToSchemeFunc{
v1.SchemeGroupVersion.Version: v1.AddToScheme,
},
).Register(registry, scheme); err != nil {
panic(err)
}
func Install(scheme *runtime.Scheme) {
utilruntime.Must(example.AddToScheme(scheme))
utilruntime.Must(v1.AddToScheme(scheme))
utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion))
}

View File

@ -19,25 +19,15 @@ limitations under the License.
package install
import (
"k8s.io/apimachinery/pkg/apimachinery/announced"
"k8s.io/apimachinery/pkg/apimachinery/registered"
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/code-generator/_examples/apiserver/apis/example2"
"k8s.io/code-generator/_examples/apiserver/apis/example2/v1"
)
// Install registers the API group and adds types to a scheme
func Install(registry *registered.APIRegistrationManager, scheme *runtime.Scheme) {
if err := announced.NewGroupMetaFactory(
&announced.GroupMetaFactoryArgs{
GroupName: example2.SchemeGroupVersion.Group,
VersionPreferenceOrder: []string{v1.SchemeGroupVersion.Version},
AddInternalObjectsToScheme: example2.AddToScheme,
},
announced.VersionToSchemeFunc{
v1.SchemeGroupVersion.Version: v1.AddToScheme,
},
).Register(registry, scheme); err != nil {
panic(err)
}
func Install(scheme *runtime.Scheme) {
utilruntime.Must(example2.AddToScheme(scheme))
utilruntime.Must(v1.AddToScheme(scheme))
utilruntime.Must(scheme.SetVersionPriority(v1.SchemeGroupVersion))
}

View File

@ -19,7 +19,6 @@ limitations under the License.
package scheme
import (
registered "k8s.io/apimachinery/pkg/apimachinery/registered"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema"
@ -32,15 +31,13 @@ var Scheme = runtime.NewScheme()
var Codecs = serializer.NewCodecFactory(Scheme)
var ParameterCodec = runtime.NewParameterCodec(Scheme)
var Registry = registered.NewAPIRegistrationManager()
func init() {
v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"})
Install(Registry, Scheme)
Install(Scheme)
}
// Install registers the API group and adds types to a scheme
func Install(registry *registered.APIRegistrationManager, scheme *runtime.Scheme) {
example.Install(registry, scheme)
secondexample.Install(registry, scheme)
func Install(scheme *runtime.Scheme) {
example.Install(scheme)
secondexample.Install(scheme)
}

View File

@ -66,17 +66,12 @@ func New(c rest.Interface) *ExampleClient {
}
func setConfigDefaults(config *rest.Config) error {
g, err := scheme.Registry.Group("example.apiserver.code-generator.k8s.io")
if err != nil {
return err
}
config.APIPath = "/apis"
if config.UserAgent == "" {
config.UserAgent = rest.DefaultKubernetesUserAgent()
}
if config.GroupVersion == nil || config.GroupVersion.Group != g.GroupVersions[0].Group {
gv := g.GroupVersions[0]
if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("example.apiserver.code-generator.k8s.io")[0].Group {
gv := scheme.Scheme.PrioritizedVersionsForGroup("example.apiserver.code-generator.k8s.io")[0]
config.GroupVersion = &gv
}
config.NegotiatedSerializer = scheme.Codecs

View File

@ -66,17 +66,12 @@ func New(c rest.Interface) *SecondExampleClient {
}
func setConfigDefaults(config *rest.Config) error {
g, err := scheme.Registry.Group("example.test.apiserver.code-generator.k8s.io")
if err != nil {
return err
}
config.APIPath = "/apis"
if config.UserAgent == "" {
config.UserAgent = rest.DefaultKubernetesUserAgent()
}
if config.GroupVersion == nil || config.GroupVersion.Group != g.GroupVersions[0].Group {
gv := g.GroupVersions[0]
if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("example.test.apiserver.code-generator.k8s.io")[0].Group {
gv := scheme.Scheme.PrioritizedVersionsForGroup("example.test.apiserver.code-generator.k8s.io")[0]
config.GroupVersion = &gv
}
config.NegotiatedSerializer = scheme.Codecs

View File

@ -45,3 +45,30 @@ type TestTypeList struct {
type TestTypeStatus struct {
Blah string
}
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
type ClusterTestTypeList struct {
metav1.TypeMeta
metav1.ListMeta
Items []ClusterTestType
}
// +genclient
// +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/kubernetes/pkg/apis/autoscaling.Scale
// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/kubernetes/pkg/apis/autoscaling.Scale,result=k8s.io/kubernetes/pkg/apis/autoscaling.Scale
type ClusterTestType struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
// +optional
Status ClusterTestTypeStatus `json:"status,omitempty"`
}
type ClusterTestTypeStatus struct {
Blah string
}

View File

@ -24,6 +24,82 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterTestType) DeepCopyInto(out *ClusterTestType) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
out.Status = in.Status
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTestType.
func (in *ClusterTestType) DeepCopy() *ClusterTestType {
if in == nil {
return nil
}
out := new(ClusterTestType)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *ClusterTestType) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterTestTypeList) DeepCopyInto(out *ClusterTestTypeList) {
*out = *in
out.TypeMeta = in.TypeMeta
out.ListMeta = in.ListMeta
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]ClusterTestType, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTestTypeList.
func (in *ClusterTestTypeList) DeepCopy() *ClusterTestTypeList {
if in == nil {
return nil
}
out := new(ClusterTestTypeList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *ClusterTestTypeList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
}
return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ClusterTestTypeStatus) DeepCopyInto(out *ClusterTestTypeStatus) {
*out = *in
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterTestTypeStatus.
func (in *ClusterTestTypeStatus) DeepCopy() *ClusterTestTypeStatus {
if in == nil {
return nil
}
out := new(ClusterTestTypeStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *TestType) DeepCopyInto(out *TestType) {
*out = *in

View File

@ -0,0 +1,193 @@
/*
Copyright 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package v1
import (
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
rest "k8s.io/client-go/rest"
v1 "k8s.io/code-generator/_examples/crd/apis/example/v1"
scheme "k8s.io/code-generator/_examples/crd/clientset/versioned/scheme"
autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling"
)
// ClusterTestTypesGetter has a method to return a ClusterTestTypeInterface.
// A group's client should implement this interface.
type ClusterTestTypesGetter interface {
ClusterTestTypes() ClusterTestTypeInterface
}
// ClusterTestTypeInterface has methods to work with ClusterTestType resources.
type ClusterTestTypeInterface interface {
Create(*v1.ClusterTestType) (*v1.ClusterTestType, error)
Update(*v1.ClusterTestType) (*v1.ClusterTestType, error)
UpdateStatus(*v1.ClusterTestType) (*v1.ClusterTestType, error)
Delete(name string, options *meta_v1.DeleteOptions) error
DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error
Get(name string, options meta_v1.GetOptions) (*v1.ClusterTestType, error)
List(opts meta_v1.ListOptions) (*v1.ClusterTestTypeList, error)
Watch(opts meta_v1.ListOptions) (watch.Interface, error)
Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ClusterTestType, err error)
GetScale(clusterTestTypeName string, options meta_v1.GetOptions) (*autoscaling.Scale, error)
UpdateScale(clusterTestTypeName string, scale *autoscaling.Scale) (*autoscaling.Scale, error)
ClusterTestTypeExpansion
}
// clusterTestTypes implements ClusterTestTypeInterface
type clusterTestTypes struct {
client rest.Interface
}
// newClusterTestTypes returns a ClusterTestTypes
func newClusterTestTypes(c *ExampleV1Client) *clusterTestTypes {
return &clusterTestTypes{
client: c.RESTClient(),
}
}
// Get takes name of the clusterTestType, and returns the corresponding clusterTestType object, and an error if there is any.
func (c *clusterTestTypes) Get(name string, options meta_v1.GetOptions) (result *v1.ClusterTestType, err error) {
result = &v1.ClusterTestType{}
err = c.client.Get().
Resource("clustertesttypes").
Name(name).
VersionedParams(&options, scheme.ParameterCodec).
Do().
Into(result)
return
}
// List takes label and field selectors, and returns the list of ClusterTestTypes that match those selectors.
func (c *clusterTestTypes) List(opts meta_v1.ListOptions) (result *v1.ClusterTestTypeList, err error) {
result = &v1.ClusterTestTypeList{}
err = c.client.Get().
Resource("clustertesttypes").
VersionedParams(&opts, scheme.ParameterCodec).
Do().
Into(result)
return
}
// Watch returns a watch.Interface that watches the requested clusterTestTypes.
func (c *clusterTestTypes) Watch(opts meta_v1.ListOptions) (watch.Interface, error) {
opts.Watch = true
return c.client.Get().
Resource("clustertesttypes").
VersionedParams(&opts, scheme.ParameterCodec).
Watch()
}
// Create takes the representation of a clusterTestType and creates it. Returns the server's representation of the clusterTestType, and an error, if there is any.
func (c *clusterTestTypes) Create(clusterTestType *v1.ClusterTestType) (result *v1.ClusterTestType, err error) {
result = &v1.ClusterTestType{}
err = c.client.Post().
Resource("clustertesttypes").
Body(clusterTestType).
Do().
Into(result)
return
}
// Update takes the representation of a clusterTestType and updates it. Returns the server's representation of the clusterTestType, and an error, if there is any.
func (c *clusterTestTypes) Update(clusterTestType *v1.ClusterTestType) (result *v1.ClusterTestType, err error) {
result = &v1.ClusterTestType{}
err = c.client.Put().
Resource("clustertesttypes").
Name(clusterTestType.Name).
Body(clusterTestType).
Do().
Into(result)
return
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *clusterTestTypes) UpdateStatus(clusterTestType *v1.ClusterTestType) (result *v1.ClusterTestType, err error) {
result = &v1.ClusterTestType{}
err = c.client.Put().
Resource("clustertesttypes").
Name(clusterTestType.Name).
SubResource("status").
Body(clusterTestType).
Do().
Into(result)
return
}
// Delete takes name of the clusterTestType and deletes it. Returns an error if one occurs.
func (c *clusterTestTypes) Delete(name string, options *meta_v1.DeleteOptions) error {
return c.client.Delete().
Resource("clustertesttypes").
Name(name).
Body(options).
Do().
Error()
}
// DeleteCollection deletes a collection of objects.
func (c *clusterTestTypes) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error {
return c.client.Delete().
Resource("clustertesttypes").
VersionedParams(&listOptions, scheme.ParameterCodec).
Body(options).
Do().
Error()
}
// Patch applies the patch and returns the patched clusterTestType.
func (c *clusterTestTypes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.ClusterTestType, err error) {
result = &v1.ClusterTestType{}
err = c.client.Patch(pt).
Resource("clustertesttypes").
SubResource(subresources...).
Name(name).
Body(data).
Do().
Into(result)
return
}
// GetScale takes name of the clusterTestType, and returns the corresponding autoscaling.Scale object, and an error if there is any.
func (c *clusterTestTypes) GetScale(clusterTestTypeName string, options meta_v1.GetOptions) (result *autoscaling.Scale, err error) {
result = &autoscaling.Scale{}
err = c.client.Get().
Resource("clustertesttypes").
Name(clusterTestTypeName).
SubResource("scale").
VersionedParams(&options, scheme.ParameterCodec).
Do().
Into(result)
return
}
// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any.
func (c *clusterTestTypes) UpdateScale(clusterTestTypeName string, scale *autoscaling.Scale) (result *autoscaling.Scale, err error) {
result = &autoscaling.Scale{}
err = c.client.Put().
Resource("clustertesttypes").
Name(clusterTestTypeName).
SubResource("scale").
Body(scale).
Do().
Into(result)
return
}

View File

@ -27,6 +27,7 @@ import (
type ExampleV1Interface interface {
RESTClient() rest.Interface
ClusterTestTypesGetter
TestTypesGetter
}
@ -35,6 +36,10 @@ type ExampleV1Client struct {
restClient rest.Interface
}
func (c *ExampleV1Client) ClusterTestTypes() ClusterTestTypeInterface {
return newClusterTestTypes(c)
}
func (c *ExampleV1Client) TestTypes(namespace string) TestTypeInterface {
return newTestTypes(c, namespace)
}

View File

@ -0,0 +1,152 @@
/*
Copyright 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.
*/
// Code generated by client-gen. DO NOT EDIT.
package fake
import (
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
labels "k8s.io/apimachinery/pkg/labels"
schema "k8s.io/apimachinery/pkg/runtime/schema"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
testing "k8s.io/client-go/testing"
example_v1 "k8s.io/code-generator/_examples/crd/apis/example/v1"
autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling"
)
// FakeClusterTestTypes implements ClusterTestTypeInterface
type FakeClusterTestTypes struct {
Fake *FakeExampleV1
}
var clustertesttypesResource = schema.GroupVersionResource{Group: "example.crd.code-generator.k8s.io", Version: "v1", Resource: "clustertesttypes"}
var clustertesttypesKind = schema.GroupVersionKind{Group: "example.crd.code-generator.k8s.io", Version: "v1", Kind: "ClusterTestType"}
// Get takes name of the clusterTestType, and returns the corresponding clusterTestType object, and an error if there is any.
func (c *FakeClusterTestTypes) Get(name string, options v1.GetOptions) (result *example_v1.ClusterTestType, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootGetAction(clustertesttypesResource, name), &example_v1.ClusterTestType{})
if obj == nil {
return nil, err
}
return obj.(*example_v1.ClusterTestType), err
}
// List takes label and field selectors, and returns the list of ClusterTestTypes that match those selectors.
func (c *FakeClusterTestTypes) List(opts v1.ListOptions) (result *example_v1.ClusterTestTypeList, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootListAction(clustertesttypesResource, clustertesttypesKind, opts), &example_v1.ClusterTestTypeList{})
if obj == nil {
return nil, err
}
label, _, _ := testing.ExtractFromListOptions(opts)
if label == nil {
label = labels.Everything()
}
list := &example_v1.ClusterTestTypeList{}
for _, item := range obj.(*example_v1.ClusterTestTypeList).Items {
if label.Matches(labels.Set(item.Labels)) {
list.Items = append(list.Items, item)
}
}
return list, err
}
// Watch returns a watch.Interface that watches the requested clusterTestTypes.
func (c *FakeClusterTestTypes) Watch(opts v1.ListOptions) (watch.Interface, error) {
return c.Fake.
InvokesWatch(testing.NewRootWatchAction(clustertesttypesResource, opts))
}
// Create takes the representation of a clusterTestType and creates it. Returns the server's representation of the clusterTestType, and an error, if there is any.
func (c *FakeClusterTestTypes) Create(clusterTestType *example_v1.ClusterTestType) (result *example_v1.ClusterTestType, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootCreateAction(clustertesttypesResource, clusterTestType), &example_v1.ClusterTestType{})
if obj == nil {
return nil, err
}
return obj.(*example_v1.ClusterTestType), err
}
// Update takes the representation of a clusterTestType and updates it. Returns the server's representation of the clusterTestType, and an error, if there is any.
func (c *FakeClusterTestTypes) Update(clusterTestType *example_v1.ClusterTestType) (result *example_v1.ClusterTestType, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootUpdateAction(clustertesttypesResource, clusterTestType), &example_v1.ClusterTestType{})
if obj == nil {
return nil, err
}
return obj.(*example_v1.ClusterTestType), err
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *FakeClusterTestTypes) UpdateStatus(clusterTestType *example_v1.ClusterTestType) (*example_v1.ClusterTestType, error) {
obj, err := c.Fake.
Invokes(testing.NewRootUpdateSubresourceAction(clustertesttypesResource, "status", clusterTestType), &example_v1.ClusterTestType{})
if obj == nil {
return nil, err
}
return obj.(*example_v1.ClusterTestType), err
}
// Delete takes name of the clusterTestType and deletes it. Returns an error if one occurs.
func (c *FakeClusterTestTypes) Delete(name string, options *v1.DeleteOptions) error {
_, err := c.Fake.
Invokes(testing.NewRootDeleteAction(clustertesttypesResource, name), &example_v1.ClusterTestType{})
return err
}
// DeleteCollection deletes a collection of objects.
func (c *FakeClusterTestTypes) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error {
action := testing.NewRootDeleteCollectionAction(clustertesttypesResource, listOptions)
_, err := c.Fake.Invokes(action, &example_v1.ClusterTestTypeList{})
return err
}
// Patch applies the patch and returns the patched clusterTestType.
func (c *FakeClusterTestTypes) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *example_v1.ClusterTestType, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootPatchSubresourceAction(clustertesttypesResource, name, data, subresources...), &example_v1.ClusterTestType{})
if obj == nil {
return nil, err
}
return obj.(*example_v1.ClusterTestType), err
}
// GetScale takes name of the clusterTestType, and returns the corresponding scale object, and an error if there is any.
func (c *FakeClusterTestTypes) GetScale(clusterTestTypeName string, options v1.GetOptions) (result *autoscaling.Scale, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootGetSubresourceAction(clustertesttypesResource, clusterTestTypeName), &autoscaling.Scale{})
if obj == nil {
return nil, err
}
return obj.(*autoscaling.Scale), err
}
// UpdateScale takes the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any.
func (c *FakeClusterTestTypes) UpdateScale(clusterTestTypeName string, scale *autoscaling.Scale) (result *autoscaling.Scale, err error) {
obj, err := c.Fake.
Invokes(testing.NewRootUpdateSubresourceAction(clustertesttypesResource, "scale", scale), &autoscaling.Scale{})
if obj == nil {
return nil, err
}
return obj.(*autoscaling.Scale), err
}

View File

@ -28,6 +28,10 @@ type FakeExampleV1 struct {
*testing.Fake
}
func (c *FakeExampleV1) ClusterTestTypes() v1.ClusterTestTypeInterface {
return &FakeClusterTestTypes{c}
}
func (c *FakeExampleV1) TestTypes(namespace string) v1.TestTypeInterface {
return &FakeTestTypes{c, namespace}
}

View File

@ -18,4 +18,6 @@ limitations under the License.
package v1
type ClusterTestTypeExpansion interface{}
type TestTypeExpansion interface{}

View File

@ -0,0 +1,88 @@
/*
Copyright 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.
*/
// Code generated by informer-gen. DO NOT EDIT.
package v1
import (
time "time"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
watch "k8s.io/apimachinery/pkg/watch"
cache "k8s.io/client-go/tools/cache"
example_v1 "k8s.io/code-generator/_examples/crd/apis/example/v1"
versioned "k8s.io/code-generator/_examples/crd/clientset/versioned"
internalinterfaces "k8s.io/code-generator/_examples/crd/informers/externalversions/internalinterfaces"
v1 "k8s.io/code-generator/_examples/crd/listers/example/v1"
)
// ClusterTestTypeInformer provides access to a shared informer and lister for
// ClusterTestTypes.
type ClusterTestTypeInformer interface {
Informer() cache.SharedIndexInformer
Lister() v1.ClusterTestTypeLister
}
type clusterTestTypeInformer struct {
factory internalinterfaces.SharedInformerFactory
tweakListOptions internalinterfaces.TweakListOptionsFunc
}
// NewClusterTestTypeInformer constructs a new informer for ClusterTestType type.
// Always prefer using an informer factory to get a shared informer instead of getting an independent
// one. This reduces memory footprint and number of connections to the server.
func NewClusterTestTypeInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
return NewFilteredClusterTestTypeInformer(client, resyncPeriod, indexers, nil)
}
// NewFilteredClusterTestTypeInformer constructs a new informer for ClusterTestType type.
// Always prefer using an informer factory to get a shared informer instead of getting an independent
// one. This reduces memory footprint and number of connections to the server.
func NewFilteredClusterTestTypeInformer(client versioned.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
return cache.NewSharedIndexInformer(
&cache.ListWatch{
ListFunc: func(options meta_v1.ListOptions) (runtime.Object, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.ExampleV1().ClusterTestTypes().List(options)
},
WatchFunc: func(options meta_v1.ListOptions) (watch.Interface, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.ExampleV1().ClusterTestTypes().Watch(options)
},
},
&example_v1.ClusterTestType{},
resyncPeriod,
indexers,
)
}
func (f *clusterTestTypeInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
return NewFilteredClusterTestTypeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
}
func (f *clusterTestTypeInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&example_v1.ClusterTestType{}, f.defaultInformer)
}
func (f *clusterTestTypeInformer) Lister() v1.ClusterTestTypeLister {
return v1.NewClusterTestTypeLister(f.Informer().GetIndexer())
}

View File

@ -24,6 +24,8 @@ import (
// Interface provides access to all the informers in this group version.
type Interface interface {
// ClusterTestTypes returns a ClusterTestTypeInformer.
ClusterTestTypes() ClusterTestTypeInformer
// TestTypes returns a TestTypeInformer.
TestTypes() TestTypeInformer
}
@ -39,6 +41,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
}
// ClusterTestTypes returns a ClusterTestTypeInformer.
func (v *version) ClusterTestTypes() ClusterTestTypeInformer {
return &clusterTestTypeInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
}
// TestTypes returns a TestTypeInformer.
func (v *version) TestTypes() TestTypeInformer {
return &testTypeInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}

View File

@ -54,6 +54,8 @@ func (f *genericInformer) Lister() cache.GenericLister {
func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
switch resource {
// Group=example.crd.code-generator.k8s.io, Version=v1
case v1.SchemeGroupVersion.WithResource("clustertesttypes"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Example().V1().ClusterTestTypes().Informer()}, nil
case v1.SchemeGroupVersion.WithResource("testtypes"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Example().V1().TestTypes().Informer()}, nil

View File

@ -0,0 +1,65 @@
/*
Copyright 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.
*/
// Code generated by lister-gen. DO NOT EDIT.
package v1
import (
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/tools/cache"
v1 "k8s.io/code-generator/_examples/crd/apis/example/v1"
)
// ClusterTestTypeLister helps list ClusterTestTypes.
type ClusterTestTypeLister interface {
// List lists all ClusterTestTypes in the indexer.
List(selector labels.Selector) (ret []*v1.ClusterTestType, err error)
// Get retrieves the ClusterTestType from the index for a given name.
Get(name string) (*v1.ClusterTestType, error)
ClusterTestTypeListerExpansion
}
// clusterTestTypeLister implements the ClusterTestTypeLister interface.
type clusterTestTypeLister struct {
indexer cache.Indexer
}
// NewClusterTestTypeLister returns a new ClusterTestTypeLister.
func NewClusterTestTypeLister(indexer cache.Indexer) ClusterTestTypeLister {
return &clusterTestTypeLister{indexer: indexer}
}
// List lists all ClusterTestTypes in the indexer.
func (s *clusterTestTypeLister) List(selector labels.Selector) (ret []*v1.ClusterTestType, err error) {
err = cache.ListAll(s.indexer, selector, func(m interface{}) {
ret = append(ret, m.(*v1.ClusterTestType))
})
return ret, err
}
// Get retrieves the ClusterTestType from the index for a given name.
func (s *clusterTestTypeLister) Get(name string) (*v1.ClusterTestType, error) {
obj, exists, err := s.indexer.GetByKey(name)
if err != nil {
return nil, err
}
if !exists {
return nil, errors.NewNotFound(v1.Resource("clustertesttype"), name)
}
return obj.(*v1.ClusterTestType), nil
}

View File

@ -18,6 +18,10 @@ limitations under the License.
package v1
// ClusterTestTypeListerExpansion allows custom methods to be added to
// ClusterTestTypeLister.
type ClusterTestTypeListerExpansion interface{}
// TestTypeListerExpansion allows custom methods to be added to
// TestTypeLister.
type TestTypeListerExpansion interface{}

View File

@ -146,9 +146,10 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
"NewRootWatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootWatchAction"}),
"NewWatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewWatchAction"}),
"NewCreateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewCreateSubresourceAction"}),
"NewRootCreateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootCreateSubresourceAction"}),
"NewUpdateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewUpdateSubresourceAction"}),
"NewGetSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewGetSubresourceAction"}),
"NewListSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewListSubresourceAction"}),
"NewRootGetSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootGetSubresourceAction"}),
"NewRootUpdateSubresourceAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootUpdateSubresourceAction"}),
"NewRootPatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootPatchAction"}),
"NewPatchAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewPatchAction"}),
@ -235,11 +236,8 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
}
if e.HasVerb("list") {
if e.IsSubresource() {
sw.Do(adjustTemplate(e.VerbName, e.VerbType, listSubresourceTemplate), m)
} else {
sw.Do(adjustTemplate(e.VerbName, e.VerbType, listTemplate), m)
}
sw.Do(adjustTemplate(e.VerbName, e.VerbType, listTemplate), m)
}
// TODO: Figure out schemantic for watching a sub-resource.
@ -322,19 +320,6 @@ func (c *Fake$.type|publicPlural$) List(opts $.ListOptions|raw$) (result *$.type
}
`
var listSubresourceTemplate = `
// List takes label and field selectors, and returns the list of $.resultType|publicPlural$ that match those selectors.
func (c *Fake$.type|publicPlural$) List($.type|private$Name string, opts $.ListOptions|raw$) (result *$.resultType|raw$List, err error) {
obj, err := c.Fake.
$if .namespaced$Invokes($.NewListSubresourceAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name, "$.subresourcePath$", $.type|allLowercasePlural$Kind, c.ns, opts), &$.resultType|raw$List{})
$else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, opts), &$.resultType|raw$List{})$end$
if obj == nil {
return nil, err
}
return obj.(*$.resultType|raw$List), err
}
`
var listUsingOptionsTemplate = `
// List takes label and field selectors, and returns the list of $.type|publicPlural$ that match those selectors.
func (c *Fake$.type|publicPlural$) List(opts $.ListOptions|raw$) (result *$.type|raw$List, err error) {
@ -377,7 +362,7 @@ var getSubresourceTemplate = `
func (c *Fake$.type|publicPlural$) Get($.type|private$Name string, options $.GetOptions|raw$) (result *$.resultType|raw$, err error) {
obj, err := c.Fake.
$if .namespaced$Invokes($.NewGetSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, "$.subresourcePath$", $.type|private$Name), &$.resultType|raw${})
$else$Invokes($.NewRootGetAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name), &$.resultType|raw${})$end$
$else$Invokes($.NewRootGetSubresourceAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name), &$.resultType|raw${})$end$
if obj == nil {
return nil, err
}
@ -423,7 +408,7 @@ var createSubresourceTemplate = `
func (c *Fake$.type|publicPlural$) Create($.type|private$Name string, $.inputType|private$ *$.inputType|raw$) (result *$.resultType|raw$, err error) {
obj, err := c.Fake.
$if .namespaced$Invokes($.NewCreateSubresourceAction|raw$($.type|allLowercasePlural$Resource, $.type|private$Name, "$.subresourcePath$", c.ns, $.inputType|private$), &$.resultType|raw${})
$else$Invokes($.NewRootCreateAction|raw$($.inputType|allLowercasePlural$Resource, $.inputType|private$), &$.resultType|raw${})$end$
$else$Invokes($.NewRootCreateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "$.subresourcePath$", $.inputType|private$), &$.resultType|raw${})$end$
if obj == nil {
return nil, err
}
@ -449,7 +434,7 @@ var updateSubresourceTemplate = `
func (c *Fake$.type|publicPlural$) Update($.type|private$Name string, $.inputType|private$ *$.inputType|raw$) (result *$.resultType|raw$, err error) {
obj, err := c.Fake.
$if .namespaced$Invokes($.NewUpdateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "$.subresourcePath$", c.ns, $.inputType|private$), &$.inputType|raw${})
$else$Invokes($.NewRootUpdateAction|raw$($.type|allLowercasePlural$Resource, $.type|private$), &$.type|raw${})$end$
$else$Invokes($.NewRootUpdateSubresourceAction|raw$($.type|allLowercasePlural$Resource, "$.subresourcePath$", $.inputType|private$), &$.resultType|raw${})$end$
if obj == nil {
return nil, err
}

View File

@ -210,17 +210,12 @@ func New(c $.restRESTClientInterface|raw$) *$.GroupGoName$$.Version$Client {
var setInternalVersionClientDefaultsTemplate = `
func setConfigDefaults(config *$.restConfig|raw$) error {
g, err := scheme.Registry.Group("$.groupName$")
if err != nil {
return err
}
config.APIPath = $.apiPath$
if config.UserAgent == "" {
config.UserAgent = $.restDefaultKubernetesUserAgent|raw$()
}
if config.GroupVersion == nil || config.GroupVersion.Group != g.GroupVersions[0].Group {
gv := g.GroupVersions[0]
if config.GroupVersion == nil || config.GroupVersion.Group != scheme.Scheme.PrioritizedVersionsForGroup("$.groupName$")[0].Group {
gv := scheme.Scheme.PrioritizedVersionsForGroup("$.groupName$")[0]
config.GroupVersion = &gv
}
config.NegotiatedSerializer = scheme.Codecs

View File

@ -86,17 +86,15 @@ func (g *GenScheme) GenerateType(c *generator.Context, t *types.Type, w io.Write
allInstallGroups := clientgentypes.ToGroupInstallPackages(g.Groups, g.GroupGoNames)
m := map[string]interface{}{
"allGroupVersions": allGroupVersions,
"allInstallGroups": allInstallGroups,
"customRegister": false,
"runtimeNewParameterCodec": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "NewParameterCodec"}),
"runtimeNewScheme": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "NewScheme"}),
"serializerNewCodecFactory": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/serializer", Name: "NewCodecFactory"}),
"runtimeScheme": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "Scheme"}),
"schemaGroupVersion": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersion"}),
"metav1AddToGroupVersion": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "AddToGroupVersion"}),
"registeredNew": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/apimachinery/registered", Name: "NewAPIRegistrationManager"}),
"registeredAPIRegistrationManager": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apimachinery/registered", Name: "APIRegistrationManager"}),
"allGroupVersions": allGroupVersions,
"allInstallGroups": allInstallGroups,
"customRegister": false,
"runtimeNewParameterCodec": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "NewParameterCodec"}),
"runtimeNewScheme": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "NewScheme"}),
"serializerNewCodecFactory": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/serializer", Name: "NewCodecFactory"}),
"runtimeScheme": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime", Name: "Scheme"}),
"schemaGroupVersion": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersion"}),
"metav1AddToGroupVersion": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "AddToGroupVersion"}),
}
globals := map[string]string{
"Scheme": "Scheme",
@ -136,20 +134,18 @@ var $.ParameterCodec$ = $.runtimeNewParameterCodec|raw$($.Scheme$)
`
var registryRegistration = `
var $.Registry$ = $.registeredNew|raw$()
func init() {
$.metav1AddToGroupVersion|raw$($.Scheme$, $.schemaGroupVersion|raw${Version: "v1"})
Install($.Registry$, $.Scheme$)
Install($.Scheme$)
}
// Install registers the API group and adds types to a scheme
func Install(registry *$.registeredAPIRegistrationManager|raw$, scheme *$.runtimeScheme|raw$) {
func Install(scheme *$.runtimeScheme|raw$) {
$- range .allInstallGroups$
$.InstallPackageAlias$.Install(registry, scheme)
$.InstallPackageAlias$.Install(scheme)
$- end$
$if .customRegister$
ExtraInstall(registry, scheme)
ExtraInstall(scheme)
$end -$
}
`