Merge pull request #59293 from roycaihw/openapi_endpoint

Automatic merge from submit-queue (batch tested with PRs 60011, 59256, 59293, 60328, 60367). 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>.

Serve OpenAPI spec with single /openapi/v2 endpoint

**What this PR does / why we need it**:
We are deprecating format-separated endpoints (`/swagger.json`, `/swagger-2.0.0.json`, `/swagger-2.0.0.pb-v1`, `/swagger-2.0.0.pb-v1.gz`) for OpenAPI spec, and switching to a single `/openapi/v2` endpoint in Kubernetes 1.10. The design doc and deprecation process are tracked at: https://docs.google.com/document/d/19lEqE9lc4yHJ3WJAJxS_G7TcORIJXGHyq3wpwcH28nU

Requested format is specified by setting HTTP headers

header | possible values
-- | --
Accept | `application/json`, `application/com.github.proto-openapi.spec.v2@v1.0+protobuf`
Accept-Encoding | `gzip`

This PR changes dynamic_client (and kubectl as a result) to use the new endpoint. The old endpoints will remain in 1.10 and 1.11, and get removed in 1.12.

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #

**Special notes for your reviewer**:

**Release note**:

```release-note
action required: Deprecate format-separated endpoints for OpenAPI spec. Please use single `/openapi/v2` endpoint instead.
```

/sig api-machinery

Kubernetes-commit: d6153194d929ad6c036d5bbbf67a6f892e75feb5
This commit is contained in:
Kubernetes Publisher 2018-02-26 23:47:53 -08:00
commit ac45ff67c5
28 changed files with 4817 additions and 2460 deletions

376
Godeps/Godeps.json generated
View File

@ -152,755 +152,755 @@
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1alpha1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/admissionregistration/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/apps/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/apps/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/apps/v1beta2",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/authentication/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/authentication/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/authorization/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/authorization/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/autoscaling/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/autoscaling/v2beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/batch/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/batch/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/batch/v2alpha1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/certificates/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/core/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/events/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/extensions/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/networking/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/policy/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/rbac/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/rbac/v1alpha1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/rbac/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/scheduling/v1alpha1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/settings/v1alpha1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/storage/v1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/storage/v1alpha1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/api/storage/v1beta1",
"Rev": "c4b8804aa02d17a4a0ef92e7cb86260a6ba58de7"
"Rev": "0406a944760b00b7a75b559f642673d7bb07b48a"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/fields",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/labels",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/selection",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/types",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/version",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/pkg/watch",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
"Rev": "30b53f19cfbba6e1a971adfd8edd674b6e0f3ead"
"Rev": "bf4c8d907ba9e7fee82a73bad5346aeebff5d06e"
},
{
"ImportPath": "k8s.io/client-go/discovery",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/discovery/fake",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/apps",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/apps/v1beta2",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/batch",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/batch/v2alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/certificates",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/certificates/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/core",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/core/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/events",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/events/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/extensions",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/extensions/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/internalinterfaces",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/networking",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/networking/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/policy",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/policy/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/rbac/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/scheduling",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/settings",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/settings/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/storage",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/informers/storage/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/scheme",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/apps/v1beta2",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/autoscaling/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/batch/v2alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/certificates/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/core/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/events/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/extensions/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/networking/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/policy/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/rbac/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/settings/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1alpha1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/listers/storage/v1beta1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/pkg/version",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/rest",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/rest/watch",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/testing",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/auth",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/cache",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/metrics",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/pager",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/record",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/tools/reference",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/transport",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/buffer",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/cert",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/flowcontrol",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/homedir",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/integer",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/client-go/util/workqueue",
"Rev": "8b0c96689ac641f27b80e24be05940baecb056ae"
"Rev": "fbdccbf09b0ccc7dd39cb25d7a6044e7f37a3147"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
"Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3"
"Rev": "50ae88d24ede7b8bad68e23c805b5d3da5c8abaf"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -44,6 +44,49 @@ message CrossVersionObjectReference {
optional string apiVersion = 3;
}
// ExternalMetricSource indicates how to scale on a metric not associated with
// any Kubernetes object (for example length of queue in cloud
// messaging service, or QPS from loadbalancer running outside of cluster).
message ExternalMetricSource {
// metricName is the name of the metric in question.
optional string metricName = 1;
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2;
// targetValue is the target value of the metric (as a quantity).
// Mutually exclusive with TargetAverageValue.
// +optional
optional k8s.io.apimachinery.pkg.api.resource.Quantity targetValue = 3;
// targetAverageValue is the target per-pod value of global metric (as a quantity).
// Mutually exclusive with TargetValue.
// +optional
optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 4;
}
// ExternalMetricStatus indicates the current value of a global metric
// not associated with any Kubernetes object.
message ExternalMetricStatus {
// metricName is the name of a metric used for autoscaling in
// metric system.
optional string metricName = 1;
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2;
// currentValue is the current value of the metric (as a quantity)
optional k8s.io.apimachinery.pkg.api.resource.Quantity currentValue = 3;
// currentAverageValue is the current value of metric averaged over autoscaled pods.
// +optional
optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 4;
}
// configuration of a horizontal pod autoscaler.
message HorizontalPodAutoscaler {
// Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
@ -160,6 +203,14 @@ message MetricSpec {
// to normal per-pod metrics using the "pods" source.
// +optional
optional ResourceMetricSource resource = 4;
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
optional ExternalMetricSource external = 5;
}
// MetricStatus describes the last-read state of a single metric.
@ -186,6 +237,14 @@ message MetricStatus {
// to normal per-pod metrics using the "pods" source.
// +optional
optional ResourceMetricStatus resource = 4;
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
optional ExternalMetricStatus external = 5;
}
// ObjectMetricSource indicates how to scale on a metric describing a

View File

@ -161,6 +161,12 @@ var (
// Kubernetes, and have special scaling options on top of those available
// to normal per-pod metrics (the "pods" source).
ResourceMetricSourceType MetricSourceType = "Resource"
// ExternalMetricSourceType is a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
ExternalMetricSourceType MetricSourceType = "External"
)
// MetricSpec specifies how to scale based on a single metric
@ -186,6 +192,13 @@ type MetricSpec struct {
// to normal per-pod metrics using the "pods" source.
// +optional
Resource *ResourceMetricSource `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"`
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
External *ExternalMetricSource `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"`
}
// ObjectMetricSource indicates how to scale on a metric describing a
@ -234,6 +247,26 @@ type ResourceMetricSource struct {
TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,3,opt,name=targetAverageValue"`
}
// ExternalMetricSource indicates how to scale on a metric not associated with
// any Kubernetes object (for example length of queue in cloud
// messaging service, or QPS from loadbalancer running outside of cluster).
type ExternalMetricSource struct {
// metricName is the name of the metric in question.
MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"`
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
MetricSelector *metav1.LabelSelector `json:"metricSelector,omitempty" protobuf:"bytes,2,opt,name=metricSelector"`
// targetValue is the target value of the metric (as a quantity).
// Mutually exclusive with TargetAverageValue.
// +optional
TargetValue *resource.Quantity `json:"targetValue,omitempty" protobuf:"bytes,3,opt,name=targetValue"`
// targetAverageValue is the target per-pod value of global metric (as a quantity).
// Mutually exclusive with TargetValue.
// +optional
TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,4,opt,name=targetAverageValue"`
}
// MetricStatus describes the last-read state of a single metric.
type MetricStatus struct {
// type is the type of metric source. It will be one of "Object",
@ -256,6 +289,13 @@ type MetricStatus struct {
// to normal per-pod metrics using the "pods" source.
// +optional
Resource *ResourceMetricStatus `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"`
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
External *ExternalMetricStatus `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"`
}
// HorizontalPodAutoscalerConditionType are the valid conditions of
@ -337,3 +377,20 @@ type ResourceMetricStatus struct {
// It will always be set, regardless of the corresponding metric specification.
CurrentAverageValue resource.Quantity `json:"currentAverageValue" protobuf:"bytes,3,name=currentAverageValue"`
}
// ExternalMetricStatus indicates the current value of a global metric
// not associated with any Kubernetes object.
type ExternalMetricStatus struct {
// metricName is the name of a metric used for autoscaling in
// metric system.
MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"`
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
MetricSelector *metav1.LabelSelector `json:"metricSelector,omitempty" protobuf:"bytes,2,opt,name=metricSelector"`
// currentValue is the current value of the metric (as a quantity)
CurrentValue resource.Quantity `json:"currentValue" protobuf:"bytes,3,name=currentValue"`
// currentAverageValue is the current value of metric averaged over autoscaled pods.
// +optional
CurrentAverageValue *resource.Quantity `json:"currentAverageValue,omitempty" protobuf:"bytes,4,opt,name=currentAverageValue"`
}

View File

@ -38,6 +38,30 @@ func (CrossVersionObjectReference) SwaggerDoc() map[string]string {
return map_CrossVersionObjectReference
}
var map_ExternalMetricSource = map[string]string{
"": "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).",
"metricName": "metricName is the name of the metric in question.",
"metricSelector": "metricSelector is used to identify a specific time series within a given metric.",
"targetValue": "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.",
"targetAverageValue": "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.",
}
func (ExternalMetricSource) SwaggerDoc() map[string]string {
return map_ExternalMetricSource
}
var map_ExternalMetricStatus = map[string]string{
"": "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.",
"metricName": "metricName is the name of a metric used for autoscaling in metric system.",
"metricSelector": "metricSelector is used to identify a specific time series within a given metric.",
"currentValue": "currentValue is the current value of the metric (as a quantity)",
"currentAverageValue": "currentAverageValue is the current value of metric averaged over autoscaled pods.",
}
func (ExternalMetricStatus) SwaggerDoc() map[string]string {
return map_ExternalMetricStatus
}
var map_HorizontalPodAutoscaler = map[string]string{
"": "configuration of a horizontal pod autoscaler.",
"metadata": "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
@ -103,6 +127,7 @@ var map_MetricSpec = map[string]string{
"object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).",
"pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.",
"resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.",
"external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).",
}
func (MetricSpec) SwaggerDoc() map[string]string {
@ -115,6 +140,7 @@ var map_MetricStatus = map[string]string{
"object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).",
"pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.",
"resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.",
"external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).",
}
func (MetricStatus) SwaggerDoc() map[string]string {

View File

@ -42,6 +42,84 @@ func (in *CrossVersionObjectReference) DeepCopy() *CrossVersionObjectReference {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ExternalMetricSource) DeepCopyInto(out *ExternalMetricSource) {
*out = *in
if in.MetricSelector != nil {
in, out := &in.MetricSelector, &out.MetricSelector
if *in == nil {
*out = nil
} else {
*out = new(meta_v1.LabelSelector)
(*in).DeepCopyInto(*out)
}
}
if in.TargetValue != nil {
in, out := &in.TargetValue, &out.TargetValue
if *in == nil {
*out = nil
} else {
*out = new(resource.Quantity)
**out = (*in).DeepCopy()
}
}
if in.TargetAverageValue != nil {
in, out := &in.TargetAverageValue, &out.TargetAverageValue
if *in == nil {
*out = nil
} else {
*out = new(resource.Quantity)
**out = (*in).DeepCopy()
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricSource.
func (in *ExternalMetricSource) DeepCopy() *ExternalMetricSource {
if in == nil {
return nil
}
out := new(ExternalMetricSource)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ExternalMetricStatus) DeepCopyInto(out *ExternalMetricStatus) {
*out = *in
if in.MetricSelector != nil {
in, out := &in.MetricSelector, &out.MetricSelector
if *in == nil {
*out = nil
} else {
*out = new(meta_v1.LabelSelector)
(*in).DeepCopyInto(*out)
}
}
out.CurrentValue = in.CurrentValue.DeepCopy()
if in.CurrentAverageValue != nil {
in, out := &in.CurrentAverageValue, &out.CurrentAverageValue
if *in == nil {
*out = nil
} else {
*out = new(resource.Quantity)
**out = (*in).DeepCopy()
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricStatus.
func (in *ExternalMetricStatus) DeepCopy() *ExternalMetricStatus {
if in == nil {
return nil
}
out := new(ExternalMetricStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HorizontalPodAutoscaler) DeepCopyInto(out *HorizontalPodAutoscaler) {
*out = *in
@ -230,6 +308,15 @@ func (in *MetricSpec) DeepCopyInto(out *MetricSpec) {
(*in).DeepCopyInto(*out)
}
}
if in.External != nil {
in, out := &in.External, &out.External
if *in == nil {
*out = nil
} else {
*out = new(ExternalMetricSource)
(*in).DeepCopyInto(*out)
}
}
return
}
@ -273,6 +360,15 @@ func (in *MetricStatus) DeepCopyInto(out *MetricStatus) {
(*in).DeepCopyInto(*out)
}
}
if in.External != nil {
in, out := &in.External, &out.External
if *in == nil {
*out = nil
} else {
*out = new(ExternalMetricStatus)
(*in).DeepCopyInto(*out)
}
}
return
}

File diff suppressed because it is too large Load Diff

View File

@ -44,6 +44,50 @@ message CrossVersionObjectReference {
optional string apiVersion = 3;
}
// ExternalMetricSource indicates how to scale on a metric not associated with
// any Kubernetes object (for example length of queue in cloud
// messaging service, or QPS from loadbalancer running outside of cluster).
// Exactly one "target" type should be set.
message ExternalMetricSource {
// metricName is the name of the metric in question.
optional string metricName = 1;
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2;
// targetValue is the target value of the metric (as a quantity).
// Mutually exclusive with TargetAverageValue.
// +optional
optional k8s.io.apimachinery.pkg.api.resource.Quantity targetValue = 3;
// targetAverageValue is the target per-pod value of global metric (as a quantity).
// Mutually exclusive with TargetValue.
// +optional
optional k8s.io.apimachinery.pkg.api.resource.Quantity targetAverageValue = 4;
}
// ExternalMetricStatus indicates the current value of a global metric
// not associated with any Kubernetes object.
message ExternalMetricStatus {
// metricName is the name of a metric used for autoscaling in
// metric system.
optional string metricName = 1;
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2;
// currentValue is the current value of the metric (as a quantity)
optional k8s.io.apimachinery.pkg.api.resource.Quantity currentValue = 3;
// currentAverageValue is the current value of metric averaged over autoscaled pods.
// +optional
optional k8s.io.apimachinery.pkg.api.resource.Quantity currentAverageValue = 4;
}
// HorizontalPodAutoscaler is the configuration for a horizontal pod
// autoscaler, which automatically manages the replica count of any resource
// implementing the scale subresource based on the metrics specified.
@ -175,6 +219,14 @@ message MetricSpec {
// to normal per-pod metrics using the "pods" source.
// +optional
optional ResourceMetricSource resource = 4;
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
optional ExternalMetricSource external = 5;
}
// MetricStatus describes the last-read state of a single metric.
@ -201,6 +253,14 @@ message MetricStatus {
// to normal per-pod metrics using the "pods" source.
// +optional
optional ResourceMetricStatus resource = 4;
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
optional ExternalMetricStatus external = 5;
}
// ObjectMetricSource indicates how to scale on a metric describing a

View File

@ -73,6 +73,12 @@ var (
// Kubernetes, and have special scaling options on top of those available
// to normal per-pod metrics (the "pods" source).
ResourceMetricSourceType MetricSourceType = "Resource"
// ExternalMetricSourceType is a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
ExternalMetricSourceType MetricSourceType = "External"
)
// MetricSpec specifies how to scale based on a single metric
@ -98,6 +104,13 @@ type MetricSpec struct {
// to normal per-pod metrics using the "pods" source.
// +optional
Resource *ResourceMetricSource `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"`
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
External *ExternalMetricSource `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"`
}
// ObjectMetricSource indicates how to scale on a metric describing a
@ -146,6 +159,27 @@ type ResourceMetricSource struct {
TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,3,opt,name=targetAverageValue"`
}
// ExternalMetricSource indicates how to scale on a metric not associated with
// any Kubernetes object (for example length of queue in cloud
// messaging service, or QPS from loadbalancer running outside of cluster).
// Exactly one "target" type should be set.
type ExternalMetricSource struct {
// metricName is the name of the metric in question.
MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"`
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
MetricSelector *metav1.LabelSelector `json:"metricSelector,omitempty" protobuf:"bytes,2,opt,name=metricSelector"`
// targetValue is the target value of the metric (as a quantity).
// Mutually exclusive with TargetAverageValue.
// +optional
TargetValue *resource.Quantity `json:"targetValue,omitempty" protobuf:"bytes,3,opt,name=targetValue"`
// targetAverageValue is the target per-pod value of global metric (as a quantity).
// Mutually exclusive with TargetValue.
// +optional
TargetAverageValue *resource.Quantity `json:"targetAverageValue,omitempty" protobuf:"bytes,4,opt,name=targetAverageValue"`
}
// HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.
type HorizontalPodAutoscalerStatus struct {
// observedGeneration is the most recent generation observed by this autoscaler.
@ -231,6 +265,13 @@ type MetricStatus struct {
// to normal per-pod metrics using the "pods" source.
// +optional
Resource *ResourceMetricStatus `json:"resource,omitempty" protobuf:"bytes,4,opt,name=resource"`
// external refers to a global metric that is not associated
// with any Kubernetes object. It allows autoscaling based on information
// coming from components running outside of cluster
// (for example length of queue in cloud messaging service, or
// QPS from loadbalancer running outside of cluster).
// +optional
External *ExternalMetricStatus `json:"external,omitempty" protobuf:"bytes,5,opt,name=external"`
}
// ObjectMetricStatus indicates the current value of a metric describing a
@ -277,6 +318,23 @@ type ResourceMetricStatus struct {
CurrentAverageValue resource.Quantity `json:"currentAverageValue" protobuf:"bytes,3,name=currentAverageValue"`
}
// ExternalMetricStatus indicates the current value of a global metric
// not associated with any Kubernetes object.
type ExternalMetricStatus struct {
// metricName is the name of a metric used for autoscaling in
// metric system.
MetricName string `json:"metricName" protobuf:"bytes,1,name=metricName"`
// metricSelector is used to identify a specific time series
// within a given metric.
// +optional
MetricSelector *metav1.LabelSelector `json:"metricSelector,omitempty" protobuf:"bytes,2,opt,name=metricSelector"`
// currentValue is the current value of the metric (as a quantity)
CurrentValue resource.Quantity `json:"currentValue" protobuf:"bytes,3,name=currentValue"`
// currentAverageValue is the current value of metric averaged over autoscaled pods.
// +optional
CurrentAverageValue *resource.Quantity `json:"currentAverageValue,omitempty" protobuf:"bytes,4,opt,name=currentAverageValue"`
}
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

View File

@ -38,6 +38,30 @@ func (CrossVersionObjectReference) SwaggerDoc() map[string]string {
return map_CrossVersionObjectReference
}
var map_ExternalMetricSource = map[string]string{
"": "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \"target\" type should be set.",
"metricName": "metricName is the name of the metric in question.",
"metricSelector": "metricSelector is used to identify a specific time series within a given metric.",
"targetValue": "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.",
"targetAverageValue": "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.",
}
func (ExternalMetricSource) SwaggerDoc() map[string]string {
return map_ExternalMetricSource
}
var map_ExternalMetricStatus = map[string]string{
"": "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.",
"metricName": "metricName is the name of a metric used for autoscaling in metric system.",
"metricSelector": "metricSelector is used to identify a specific time series within a given metric.",
"currentValue": "currentValue is the current value of the metric (as a quantity)",
"currentAverageValue": "currentAverageValue is the current value of metric averaged over autoscaled pods.",
}
func (ExternalMetricStatus) SwaggerDoc() map[string]string {
return map_ExternalMetricStatus
}
var map_HorizontalPodAutoscaler = map[string]string{
"": "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.",
"metadata": "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
@ -104,6 +128,7 @@ var map_MetricSpec = map[string]string{
"object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).",
"pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.",
"resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.",
"external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).",
}
func (MetricSpec) SwaggerDoc() map[string]string {
@ -116,6 +141,7 @@ var map_MetricStatus = map[string]string{
"object": "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).",
"pods": "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.",
"resource": "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.",
"external": "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).",
}
func (MetricStatus) SwaggerDoc() map[string]string {

View File

@ -42,6 +42,84 @@ func (in *CrossVersionObjectReference) DeepCopy() *CrossVersionObjectReference {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ExternalMetricSource) DeepCopyInto(out *ExternalMetricSource) {
*out = *in
if in.MetricSelector != nil {
in, out := &in.MetricSelector, &out.MetricSelector
if *in == nil {
*out = nil
} else {
*out = new(v1.LabelSelector)
(*in).DeepCopyInto(*out)
}
}
if in.TargetValue != nil {
in, out := &in.TargetValue, &out.TargetValue
if *in == nil {
*out = nil
} else {
*out = new(resource.Quantity)
**out = (*in).DeepCopy()
}
}
if in.TargetAverageValue != nil {
in, out := &in.TargetAverageValue, &out.TargetAverageValue
if *in == nil {
*out = nil
} else {
*out = new(resource.Quantity)
**out = (*in).DeepCopy()
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricSource.
func (in *ExternalMetricSource) DeepCopy() *ExternalMetricSource {
if in == nil {
return nil
}
out := new(ExternalMetricSource)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ExternalMetricStatus) DeepCopyInto(out *ExternalMetricStatus) {
*out = *in
if in.MetricSelector != nil {
in, out := &in.MetricSelector, &out.MetricSelector
if *in == nil {
*out = nil
} else {
*out = new(v1.LabelSelector)
(*in).DeepCopyInto(*out)
}
}
out.CurrentValue = in.CurrentValue.DeepCopy()
if in.CurrentAverageValue != nil {
in, out := &in.CurrentAverageValue, &out.CurrentAverageValue
if *in == nil {
*out = nil
} else {
*out = new(resource.Quantity)
**out = (*in).DeepCopy()
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalMetricStatus.
func (in *ExternalMetricStatus) DeepCopy() *ExternalMetricStatus {
if in == nil {
return nil
}
out := new(ExternalMetricStatus)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HorizontalPodAutoscaler) DeepCopyInto(out *HorizontalPodAutoscaler) {
*out = *in
@ -233,6 +311,15 @@ func (in *MetricSpec) DeepCopyInto(out *MetricSpec) {
(*in).DeepCopyInto(*out)
}
}
if in.External != nil {
in, out := &in.External, &out.External
if *in == nil {
*out = nil
} else {
*out = new(ExternalMetricSource)
(*in).DeepCopyInto(*out)
}
}
return
}
@ -276,6 +363,15 @@ func (in *MetricStatus) DeepCopyInto(out *MetricStatus) {
(*in).DeepCopyInto(*out)
}
}
if in.External != nil {
in, out := &in.External, &out.External
if *in == nil {
*out = nil
} else {
*out = new(ExternalMetricStatus)
(*in).DeepCopyInto(*out)
}
}
return
}

File diff suppressed because it is too large Load Diff

View File

@ -191,6 +191,34 @@ message CSIPersistentVolumeSource {
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
// +optional
optional string fsType = 4;
// Attributes of the volume to publish.
// +optional
map<string, string> volumeAttributes = 5;
// ControllerPublishSecretRef is a reference to the secret object containing
// sensitive information to pass to the CSI driver to complete the CSI
// ControllerPublishVolume and ControllerUnpublishVolume calls.
// This field is optional, and may be empty if no secret is required. If the
// secret object contains more than one secret, all secrets are passed.
// +optional
optional SecretReference controllerPublishSecretRef = 6;
// NodeStageSecretRef is a reference to the secret object containing sensitive
// information to pass to the CSI driver to complete the CSI NodeStageVolume
// and NodeStageVolume and NodeUnstageVolume calls.
// This field is optional, and may be empty if no secret is required. If the
// secret object contains more than one secret, all secrets are passed.
// +optional
optional SecretReference nodeStageSecretRef = 7;
// NodePublishSecretRef is a reference to the secret object containing
// sensitive information to pass to the CSI driver to complete the CSI
// NodePublishVolume and NodeUnpublishVolume calls.
// This field is optional, and may be empty if no secret is required. If the
// secret object contains more than one secret, all secrets are passed.
// +optional
optional SecretReference nodePublishSecretRef = 8;
}
// Adds and removes POSIX capabilities from running containers.
@ -976,6 +1004,7 @@ message Endpoints {
// subsets for the different ports. No address will appear in both Addresses and
// NotReadyAddresses in the same subset.
// Sets of addresses and ports that comprise a service.
// +optional
repeated EndpointSubset subsets = 2;
}
@ -2556,8 +2585,9 @@ message PersistentVolumeSpec {
optional ObjectReference claimRef = 4;
// What happens to a persistent volume when released from its claim.
// Valid options are Retain (default) and Recycle.
// Recycling must be supported by the volume plugin underlying this persistent volume.
// Valid options are Retain (default for manually created PersistentVolumes), Delete (default
// for dynamically provisioned PersistentVolumes), and Recycle (deprecated).
// Recycle must be supported by the volume plugin underlying this PersistentVolume.
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
// +optional
optional string persistentVolumeReclaimPolicy = 5;
@ -3033,7 +3063,6 @@ message PodSpec {
// DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy.
// To have DNS options set along with hostNetwork, you have to specify DNS policy
// explicitly to 'ClusterFirstWithHostNet'.
// Note that 'None' policy is an alpha feature introduced in v1.9 and CustomPodDNS feature gate must be enabled to use it.
// +optional
optional string dnsPolicy = 6;
@ -3157,7 +3186,6 @@ message PodSpec {
// Specifies the DNS parameters of a pod.
// Parameters specified here will be merged to the generated DNS
// configuration based on DNSPolicy.
// This is an alpha feature introduced in v1.9 and CustomPodDNS feature gate must be enabled to use it.
// +optional
optional PodDNSConfig dnsConfig = 26;
}

38
vendor/k8s.io/api/core/v1/types.go generated vendored
View File

@ -511,8 +511,9 @@ type PersistentVolumeSpec struct {
// +optional
ClaimRef *ObjectReference `json:"claimRef,omitempty" protobuf:"bytes,4,opt,name=claimRef"`
// What happens to a persistent volume when released from its claim.
// Valid options are Retain (default) and Recycle.
// Recycling must be supported by the volume plugin underlying this persistent volume.
// Valid options are Retain (default for manually created PersistentVolumes), Delete (default
// for dynamically provisioned PersistentVolumes), and Recycle (deprecated).
// Recycle must be supported by the volume plugin underlying this PersistentVolume.
// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
// +optional
PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy `json:"persistentVolumeReclaimPolicy,omitempty" protobuf:"bytes,5,opt,name=persistentVolumeReclaimPolicy,casttype=PersistentVolumeReclaimPolicy"`
@ -1748,6 +1749,34 @@ type CSIPersistentVolumeSource struct {
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
// +optional
FSType string `json:"fsType,omitempty" protobuf:"bytes,4,opt,name=fsType"`
// Attributes of the volume to publish.
// +optional
VolumeAttributes map[string]string `json:"volumeAttributes,omitempty" protobuf:"bytes,5,rep,name=volumeAttributes"`
// ControllerPublishSecretRef is a reference to the secret object containing
// sensitive information to pass to the CSI driver to complete the CSI
// ControllerPublishVolume and ControllerUnpublishVolume calls.
// This field is optional, and may be empty if no secret is required. If the
// secret object contains more than one secret, all secrets are passed.
// +optional
ControllerPublishSecretRef *SecretReference `json:"controllerPublishSecretRef,omitempty" protobuf:"bytes,6,opt,name=controllerPublishSecretRef"`
// NodeStageSecretRef is a reference to the secret object containing sensitive
// information to pass to the CSI driver to complete the CSI NodeStageVolume
// and NodeStageVolume and NodeUnstageVolume calls.
// This field is optional, and may be empty if no secret is required. If the
// secret object contains more than one secret, all secrets are passed.
// +optional
NodeStageSecretRef *SecretReference `json:"nodeStageSecretRef,omitempty" protobuf:"bytes,7,opt,name=nodeStageSecretRef"`
// NodePublishSecretRef is a reference to the secret object containing
// sensitive information to pass to the CSI driver to complete the CSI
// NodePublishVolume and NodeUnpublishVolume calls.
// This field is optional, and may be empty if no secret is required. If the
// secret object contains more than one secret, all secrets are passed.
// +optional
NodePublishSecretRef *SecretReference `json:"nodePublishSecretRef,omitempty" protobuf:"bytes,8,opt,name=nodePublishSecretRef"`
}
// ContainerPort represents a network port in a single container.
@ -2818,7 +2847,6 @@ type PodSpec struct {
// DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy.
// To have DNS options set along with hostNetwork, you have to specify DNS policy
// explicitly to 'ClusterFirstWithHostNet'.
// Note that 'None' policy is an alpha feature introduced in v1.9 and CustomPodDNS feature gate must be enabled to use it.
// +optional
DNSPolicy DNSPolicy `json:"dnsPolicy,omitempty" protobuf:"bytes,6,opt,name=dnsPolicy,casttype=DNSPolicy"`
// NodeSelector is a selector which must be true for the pod to fit on a node.
@ -2924,7 +2952,6 @@ type PodSpec struct {
// Specifies the DNS parameters of a pod.
// Parameters specified here will be merged to the generated DNS
// configuration based on DNSPolicy.
// This is an alpha feature introduced in v1.9 and CustomPodDNS feature gate must be enabled to use it.
// +optional
DNSConfig *PodDNSConfig `json:"dnsConfig,omitempty" protobuf:"bytes,26,opt,name=dnsConfig"`
}
@ -3694,7 +3721,8 @@ type Endpoints struct {
// subsets for the different ports. No address will appear in both Addresses and
// NotReadyAddresses in the same subset.
// Sets of addresses and ports that comprise a service.
Subsets []EndpointSubset `json:"subsets" protobuf:"bytes,2,rep,name=subsets"`
// +optional
Subsets []EndpointSubset `json:"subsets,omitempty" protobuf:"bytes,2,rep,name=subsets"`
}
// EndpointSubset is a group of addresses with a common set of ports. The

View File

@ -117,11 +117,15 @@ func (Binding) SwaggerDoc() map[string]string {
}
var map_CSIPersistentVolumeSource = map[string]string{
"": "Represents storage that is managed by an external CSI volume driver (Beta feature)",
"driver": "Driver is the name of the driver to use for this volume. Required.",
"volumeHandle": "VolumeHandle is the unique volume name returned by the CSI volume plugins CreateVolume to refer to the volume on all subsequent calls. Required.",
"readOnly": "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).",
"fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"": "Represents storage that is managed by an external CSI volume driver (Beta feature)",
"driver": "Driver is the name of the driver to use for this volume. Required.",
"volumeHandle": "VolumeHandle is the unique volume name returned by the CSI volume plugins CreateVolume to refer to the volume on all subsequent calls. Required.",
"readOnly": "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).",
"fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"volumeAttributes": "Attributes of the volume to publish.",
"controllerPublishSecretRef": "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
"nodeStageSecretRef": "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
"nodePublishSecretRef": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
}
func (CSIPersistentVolumeSource) SwaggerDoc() map[string]string {
@ -1288,7 +1292,7 @@ var map_PersistentVolumeSpec = map[string]string{
"capacity": "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity",
"accessModes": "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes",
"claimRef": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding",
"persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming",
"persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming",
"storageClassName": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.",
"mountOptions": "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options",
"volumeMode": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is an alpha feature and may change in the future.",
@ -1497,7 +1501,7 @@ var map_PodSpec = map[string]string{
"restartPolicy": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy",
"terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.",
"activeDeadlineSeconds": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.",
"dnsPolicy": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'. Note that 'None' policy is an alpha feature introduced in v1.9 and CustomPodDNS feature gate must be enabled to use it.",
"dnsPolicy": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.",
"nodeSelector": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/",
"serviceAccountName": "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/",
"serviceAccount": "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.",
@ -1517,7 +1521,7 @@ var map_PodSpec = map[string]string{
"hostAliases": "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.",
"priorityClassName": "If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.",
"priority": "The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.",
"dnsConfig": "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy. This is an alpha feature introduced in v1.9 and CustomPodDNS feature gate must be enabled to use it.",
"dnsConfig": "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.",
}
func (PodSpec) SwaggerDoc() map[string]string {

View File

@ -249,6 +249,40 @@ func (in *Binding) DeepCopyObject() runtime.Object {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *CSIPersistentVolumeSource) DeepCopyInto(out *CSIPersistentVolumeSource) {
*out = *in
if in.VolumeAttributes != nil {
in, out := &in.VolumeAttributes, &out.VolumeAttributes
*out = make(map[string]string, len(*in))
for key, val := range *in {
(*out)[key] = val
}
}
if in.ControllerPublishSecretRef != nil {
in, out := &in.ControllerPublishSecretRef, &out.ControllerPublishSecretRef
if *in == nil {
*out = nil
} else {
*out = new(SecretReference)
**out = **in
}
}
if in.NodeStageSecretRef != nil {
in, out := &in.NodeStageSecretRef, &out.NodeStageSecretRef
if *in == nil {
*out = nil
} else {
*out = new(SecretReference)
**out = **in
}
}
if in.NodePublishSecretRef != nil {
in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef
if *in == nil {
*out = nil
} else {
*out = new(SecretReference)
**out = **in
}
}
return
}
@ -3300,7 +3334,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) {
*out = nil
} else {
*out = new(CSIPersistentVolumeSource)
**out = **in
(*in).DeepCopyInto(*out)
}
}
return

View File

@ -64,6 +64,9 @@ filegroup(
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
srcs = [
":package-srcs",
"//staging/src/k8s.io/apimachinery/pkg/api/meta/table:all-srcs",
],
tags = ["automanaged"],
)

View File

@ -36,8 +36,12 @@ import (
restclient "k8s.io/client-go/rest"
)
// defaultRetries is the number of times a resource discovery is repeated if an api group disappears on the fly (e.g. ThirdPartyResources).
const defaultRetries = 2
const (
// defaultRetries is the number of times a resource discovery is repeated if an api group disappears on the fly (e.g. ThirdPartyResources).
defaultRetries = 2
// protobuf mime type
mimePb = "application/com.github.proto-openapi.spec.v2@v1.0+protobuf"
)
// DiscoveryInterface holds the methods that discover server-supported API groups,
// versions and resources.
@ -329,9 +333,18 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) {
// OpenAPISchema fetches the open api schema using a rest client and parses the proto.
func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) {
data, err := d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw()
data, err := d.restClient.Get().AbsPath("/openapi/v2").SetHeader("Accept", mimePb).Do().Raw()
if err != nil {
return nil, err
if errors.IsForbidden(err) || errors.IsNotFound(err) {
// single endpoint not found/registered in old server, try to fetch old endpoint
// TODO(roycaihw): remove this in 1.11
data, err = d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw()
if err != nil {
return nil, err
}
} else {
return nil, err
}
}
document := &openapi_v2.Document{}
err = proto.Unmarshal(data, document)

View File

@ -1,3 +1,17 @@
# Copyright 2017 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.
# Implements hack/lib/version.sh's kube::version::ldflags() for Bazel.
def version_x_defs():
# This should match the list of packages in kube::version::ldflag

View File

@ -38,9 +38,22 @@ import (
// TODO: consider merging keyLister with this object, tracking a list of
// "known" keys when Pop() is called. Have to think about how that
// affects error retrying.
// TODO(lavalamp): I believe there is a possible race only when using an
// external known object source that the above TODO would
// fix.
// NOTE: It is possible to misuse this and cause a race when using an
// external known object source.
// Whether there is a potential race depends on how the comsumer
// modifies knownObjects. In Pop(), process function is called under
// lock, so it is safe to update data structures in it that need to be
// in sync with the queue (e.g. knownObjects).
//
// Example:
// In case of sharedIndexInformer being a consumer
// (https://github.com/kubernetes/kubernetes/blob/0cdd940f/staging/
// src/k8s.io/client-go/tools/cache/shared_informer.go#L192),
// there is no race as knownObjects (s.indexer) is modified safely
// under DeltaFIFO's lock. The only exceptions are GetStore() and
// GetIndexer() methods, which expose ways to modify the underlying
// storage. Currently these two methods are used for creating Lister
// and internal tests.
//
// Also see the comment on DeltaFIFO.
func NewDeltaFIFO(keyFunc KeyFunc, knownObjects KeyListerGetter) *DeltaFIFO {
@ -199,8 +212,6 @@ func (f *DeltaFIFO) Delete(obj interface{}) error {
if err == nil && !exists && !itemsExist {
// Presumably, this was deleted when a relist happened.
// Don't provide a second report of the same deletion.
// TODO(lavalamp): This may be racy-- we aren't properly locked
// with knownObjects.
return nil
}
}
@ -485,8 +496,6 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error {
}
// Detect deletions not already in the queue.
// TODO(lavalamp): This may be racy-- we aren't properly locked
// with knownObjects. Unproven.
knownKeys := f.knownObjects.ListKeys()
queuedDeletions := 0
for _, k := range knownKeys {

View File

@ -138,23 +138,50 @@ func MakeEllipticPrivateKeyPEM() ([]byte, error) {
// Host may be an IP or a DNS name
// You may also specify additional subject alt names (either ip or dns names) for the certificate
func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) {
caKey, err := rsa.GenerateKey(cryptorand.Reader, 2048)
if err != nil {
return nil, nil, err
}
caTemplate := x509.Certificate{
SerialNumber: big.NewInt(1),
Subject: pkix.Name{
CommonName: fmt.Sprintf("%s-ca@%d", host, time.Now().Unix()),
},
NotBefore: time.Now(),
NotAfter: time.Now().Add(time.Hour * 24 * 365),
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
BasicConstraintsValid: true,
IsCA: true,
}
caDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &caTemplate, &caTemplate, &caKey.PublicKey, caKey)
if err != nil {
return nil, nil, err
}
caCertificate, err := x509.ParseCertificate(caDERBytes)
if err != nil {
return nil, nil, err
}
priv, err := rsa.GenerateKey(cryptorand.Reader, 2048)
if err != nil {
return nil, nil, err
}
template := x509.Certificate{
SerialNumber: big.NewInt(1),
SerialNumber: big.NewInt(2),
Subject: pkix.Name{
CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()),
},
NotBefore: time.Now(),
NotAfter: time.Now().Add(time.Hour * 24 * 365),
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
BasicConstraintsValid: true,
IsCA: true,
}
if ip := net.ParseIP(host); ip != nil {
@ -166,16 +193,19 @@ func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS
template.IPAddresses = append(template.IPAddresses, alternateIPs...)
template.DNSNames = append(template.DNSNames, alternateDNS...)
derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv)
derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, caCertificate, &priv.PublicKey, caKey)
if err != nil {
return nil, nil, err
}
// Generate cert
// Generate cert, followed by ca
certBuffer := bytes.Buffer{}
if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: derBytes}); err != nil {
return nil, nil, err
}
if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: caDERBytes}); err != nil {
return nil, nil, err
}
// Generate key
keyBuffer := bytes.Buffer{}

View File

@ -1,270 +1,270 @@
{
"ImportPath": "k8s.io/code-generator",
"GoVersion": "go1.9",
"GodepVersion": "v79",
"Packages": [
"./..."
],
"Deps": [
{
"ImportPath": "github.com/PuerkitoBio/purell",
"Rev": "8a290539e2e8629dbc4e6bad948158f790ec31f4"
},
{
"ImportPath": "github.com/PuerkitoBio/urlesc",
"Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e"
},
{
"ImportPath": "github.com/emicklei/go-restful",
"Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46"
},
{
"ImportPath": "github.com/emicklei/go-restful/log",
"Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46"
},
{
"ImportPath": "github.com/go-openapi/jsonpointer",
"Rev": "46af16f9f7b149af66e5d1bd010e3574dc06de98"
},
{
"ImportPath": "github.com/go-openapi/jsonreference",
"Rev": "13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272"
},
{
"ImportPath": "github.com/go-openapi/spec",
"Rev": "7abd5745472fff5eb3685386d5fb8bf38683154d"
},
{
"ImportPath": "github.com/go-openapi/swag",
"Rev": "f3f9494671f93fcff853e3c6e9e948b3eb71e590"
},
{
"ImportPath": "github.com/gogo/protobuf/gogoproto",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/compare",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/defaultcheck",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/description",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/embedcheck",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/enumstringer",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/equal",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/face",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/gostring",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/marshalto",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/oneofcheck",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/populate",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/size",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/stringer",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/testgen",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/union",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/unmarshal",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/proto",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/descriptor",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/generator",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/grpc",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/plugin",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/sortkeys",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/vanity",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/vanity/command",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/golang/glog",
"Rev": "44145f04b68cf362d9c4df2182967c2275eaefed"
},
{
"ImportPath": "github.com/mailru/easyjson/buffer",
"Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d"
},
{
"ImportPath": "github.com/mailru/easyjson/jlexer",
"Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d"
},
{
"ImportPath": "github.com/mailru/easyjson/jwriter",
"Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d"
},
{
"ImportPath": "github.com/spf13/pflag",
"Rev": "4c012f6dcd9546820e378d0bdda4d8fc772cdfea"
},
{
"ImportPath": "golang.org/x/net/idna",
"Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f"
},
{
"ImportPath": "golang.org/x/text/cases",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/internal",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/internal/tag",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/language",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/runes",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/secure/bidirule",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/secure/precis",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/transform",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/unicode/bidi",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/unicode/norm",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/width",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/tools/go/ast/astutil",
"Rev": "2382e3994d48b1d22acc2c86bcad0a2aff028e32"
},
{
"ImportPath": "golang.org/x/tools/imports",
"Rev": "2382e3994d48b1d22acc2c86bcad0a2aff028e32"
},
{
"ImportPath": "gopkg.in/yaml.v2",
"Rev": "670d4cfef0544295bc27a114dbac37980d83185a"
},
{
"ImportPath": "k8s.io/gengo/args",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/deepcopy-gen/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/defaulter-gen/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/import-boss/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/set-gen/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/set-gen/sets",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/generator",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/namer",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/parser",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/types",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/common",
"Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/generators",
"Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3"
}
]
"ImportPath": "k8s.io/code-generator",
"GoVersion": "go1.9",
"GodepVersion": "v79",
"Packages": [
"./..."
],
"Deps": [
{
"ImportPath": "github.com/PuerkitoBio/purell",
"Rev": "8a290539e2e8629dbc4e6bad948158f790ec31f4"
},
{
"ImportPath": "github.com/PuerkitoBio/urlesc",
"Rev": "5bd2802263f21d8788851d5305584c82a5c75d7e"
},
{
"ImportPath": "github.com/emicklei/go-restful",
"Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46"
},
{
"ImportPath": "github.com/emicklei/go-restful/log",
"Rev": "ff4f55a206334ef123e4f79bbf348980da81ca46"
},
{
"ImportPath": "github.com/go-openapi/jsonpointer",
"Rev": "46af16f9f7b149af66e5d1bd010e3574dc06de98"
},
{
"ImportPath": "github.com/go-openapi/jsonreference",
"Rev": "13c6e3589ad90f49bd3e3bbe2c2cb3d7a4142272"
},
{
"ImportPath": "github.com/go-openapi/spec",
"Rev": "1de3e0542de65ad8d75452a595886fdd0befb363"
},
{
"ImportPath": "github.com/go-openapi/swag",
"Rev": "f3f9494671f93fcff853e3c6e9e948b3eb71e590"
},
{
"ImportPath": "github.com/gogo/protobuf/gogoproto",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/compare",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/defaultcheck",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/description",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/embedcheck",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/enumstringer",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/equal",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/face",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/gostring",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/marshalto",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/oneofcheck",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/populate",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/size",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/stringer",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/testgen",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/union",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/plugin/unmarshal",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/proto",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/descriptor",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/generator",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/grpc",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/protoc-gen-gogo/plugin",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/sortkeys",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/vanity",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/gogo/protobuf/vanity/command",
"Rev": "c0656edd0d9eab7c66d1eb0c568f9039345796f7"
},
{
"ImportPath": "github.com/golang/glog",
"Rev": "44145f04b68cf362d9c4df2182967c2275eaefed"
},
{
"ImportPath": "github.com/mailru/easyjson/buffer",
"Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d"
},
{
"ImportPath": "github.com/mailru/easyjson/jlexer",
"Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d"
},
{
"ImportPath": "github.com/mailru/easyjson/jwriter",
"Rev": "2f5df55504ebc322e4d52d34df6a1f5b503bf26d"
},
{
"ImportPath": "github.com/spf13/pflag",
"Rev": "4c012f6dcd9546820e378d0bdda4d8fc772cdfea"
},
{
"ImportPath": "golang.org/x/net/idna",
"Rev": "1c05540f6879653db88113bc4a2b70aec4bd491f"
},
{
"ImportPath": "golang.org/x/text/cases",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/internal",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/internal/tag",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/language",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/runes",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/secure/bidirule",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/secure/precis",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/transform",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/unicode/bidi",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/unicode/norm",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/text/width",
"Rev": "b19bf474d317b857955b12035d2c5acb57ce8b01"
},
{
"ImportPath": "golang.org/x/tools/go/ast/astutil",
"Rev": "2382e3994d48b1d22acc2c86bcad0a2aff028e32"
},
{
"ImportPath": "golang.org/x/tools/imports",
"Rev": "2382e3994d48b1d22acc2c86bcad0a2aff028e32"
},
{
"ImportPath": "gopkg.in/yaml.v2",
"Rev": "670d4cfef0544295bc27a114dbac37980d83185a"
},
{
"ImportPath": "k8s.io/gengo/args",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/deepcopy-gen/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/defaulter-gen/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/import-boss/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/set-gen/generators",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/examples/set-gen/sets",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/generator",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/namer",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/parser",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/gengo/types",
"Rev": "b6c426f7730e6d66e6e476a85d1c3eb7633880e0"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/common",
"Rev": "50ae88d24ede7b8bad68e23c805b5d3da5c8abaf"
},
{
"ImportPath": "k8s.io/kube-openapi/pkg/generators",
"Rev": "50ae88d24ede7b8bad68e23c805b5d3da5c8abaf"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,7 @@ type SimpleSchema struct {
Items *Items `json:"items,omitempty"`
CollectionFormat string `json:"collectionFormat,omitempty"`
Default interface{} `json:"default,omitempty"`
Example interface{} `json:"example,omitempty"`
}
func (s *SimpleSchema) TypeName() string {
@ -178,9 +179,14 @@ func (i *Items) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, &simpleSchema); err != nil {
return err
}
var vendorExtensible VendorExtensible
if err := json.Unmarshal(data, &vendorExtensible); err != nil {
return err
}
i.Refable = ref
i.CommonValidations = validations
i.SimpleSchema = simpleSchema
i.VendorExtensible = vendorExtensible
return nil
}
@ -198,7 +204,11 @@ func (i Items) MarshalJSON() ([]byte, error) {
if err != nil {
return nil, err
}
return swag.ConcatJSON(b3, b1, b2), nil
b4, err := json.Marshal(i.VendorExtensible)
if err != nil {
return nil, err
}
return swag.ConcatJSON(b4, b3, b1, b2), nil
}
// JSONLookup look up a value by the json property name

View File

@ -31,11 +31,36 @@ type OperationProps struct {
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"`
ID string `json:"operationId,omitempty"`
Deprecated bool `json:"deprecated,omitempty"`
Security []map[string][]string `json:"security,omitempty"`
Security []map[string][]string `json:"security,omitempty"` //Special case, see MarshalJSON function
Parameters []Parameter `json:"parameters,omitempty"`
Responses *Responses `json:"responses,omitempty"`
}
// MarshalJSON takes care of serializing operation properties to JSON
//
// We use a custom marhaller here to handle a special cases related
// the Security field. We need to preserve zero length slice
// while omiting the field when the value is nil/unset.
func (op OperationProps) MarshalJSON() ([]byte, error) {
type Alias OperationProps
if op.Security == nil {
return json.Marshal(&struct {
Security []map[string][]string `json:"security,omitempty"`
*Alias
}{
Security: op.Security,
Alias: (*Alias)(&op),
})
}
return json.Marshal(&struct {
Security []map[string][]string `json:"security"`
*Alias
}{
Security: op.Security,
Alias: (*Alias)(&op),
})
}
// Operation describes a single API operation on a path.
//
// For more information: http://goo.gl/8us55a#operationObject

View File

@ -145,7 +145,10 @@ func (r *Ref) UnmarshalJSON(d []byte) error {
if err := json.Unmarshal(d, &v); err != nil {
return err
}
return r.fromMap(v)
}
func (r *Ref) fromMap(v map[string]interface{}) error {
if v == nil {
return nil
}

View File

@ -135,6 +135,10 @@ func (r *SchemaURL) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, &v); err != nil {
return err
}
return r.fromMap(v)
}
func (r *SchemaURL) fromMap(v map[string]interface{}) error {
if v == nil {
return nil
}
@ -582,18 +586,17 @@ func (s Schema) MarshalJSON() ([]byte, error) {
// UnmarshalJSON marshal this from JSON
func (s *Schema) UnmarshalJSON(data []byte) error {
var sch Schema
if err := json.Unmarshal(data, &sch.SchemaProps); err != nil {
props := struct {
SchemaProps
SwaggerSchemaProps
}{}
if err := json.Unmarshal(data, &props); err != nil {
return err
}
if err := json.Unmarshal(data, &sch.Ref); err != nil {
return err
}
if err := json.Unmarshal(data, &sch.Schema); err != nil {
return err
}
if err := json.Unmarshal(data, &sch.SwaggerSchemaProps); err != nil {
return err
sch := Schema{
SchemaProps: props.SchemaProps,
SwaggerSchemaProps: props.SwaggerSchemaProps,
}
var d map[string]interface{}
@ -601,6 +604,9 @@ func (s *Schema) UnmarshalJSON(data []byte) error {
return err
}
sch.Ref.fromMap(d)
sch.Schema.fromMap(d)
delete(d, "$ref")
delete(d, "$schema")
for _, pn := range swag.DefaultJSONNameProvider.GetJSONNames(s) {

View File

@ -634,6 +634,8 @@ func (g openAPITypeWriter) generateSliceProperty(t *types.Type) error {
return fmt.Errorf("please add type %v to getOpenAPITypeFormat function", elemType)
case types.Struct:
g.generateReferenceProperty(elemType)
case types.Slice, types.Array:
g.generateSliceProperty(elemType)
default:
return fmt.Errorf("slice Element kind %v is not supported in %v", elemType.Kind, t)
}