mirror of
https://github.com/kubernetes/sample-controller.git
synced 2025-05-14 10:54:05 +08:00
Merge pull request #60021 from nikhita/sample-controller-subresources
Automatic merge from submit-queue (batch tested with PRs 60102, 59970, 60021, 62011, 62080). 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>. sample-controller: add status subresource support Builds on top of https://github.com/kubernetes/kubernetes/pull/55168. **DO NOT MERGE** until https://github.com/kubernetes/kubernetes/pull/55168 is merged. Adding a hold. /hold Update: It is now merged! 🎉 This PR: - Adds an example to show how to use the `/status` subresource with custom resources. - Generates `UpdateStatus` for the `Foo` resource. - Updates the comment in the controller to mention that `UpdateStatus` can now be used. Note: this is not enabled by default because subresources require the feature gate to be enabled and are not on by default. - Updates the README to add feature gate information and examples for `CustomResourceSubresources`. - Updates the README to remove feature gate information for CRD validation since the current example uses `apps/v1` deployments (and thus requires v1.9 anyway). **Release note**: ```release-note NONE ``` /assign sttts munnerz Kubernetes-commit: 7bde13f191f0791a87fe5e2575feb3d4849de536
This commit is contained in:
commit
e933a6fa9c
324
Godeps/Godeps.json
generated
324
Godeps/Godeps.json
generated
@ -260,651 +260,651 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
|
"ImportPath": "k8s.io/apimachinery/pkg/api/errors",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
|
"ImportPath": "k8s.io/apimachinery/pkg/api/meta",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
|
"ImportPath": "k8s.io/apimachinery/pkg/api/resource",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
|
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
|
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
|
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
|
"ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
"ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
"ImportPath": "k8s.io/apimachinery/pkg/fields",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/labels",
|
"ImportPath": "k8s.io/apimachinery/pkg/labels",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
|
"ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/selection",
|
"ImportPath": "k8s.io/apimachinery/pkg/selection",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/types",
|
"ImportPath": "k8s.io/apimachinery/pkg/types",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/cache",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/clock",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/diff",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/errors",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/framer",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/intstr",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/json",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/net",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/runtime",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/sets",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/validation",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/validation/field",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/wait",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
|
"ImportPath": "k8s.io/apimachinery/pkg/util/yaml",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/version",
|
"ImportPath": "k8s.io/apimachinery/pkg/version",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/pkg/watch",
|
"ImportPath": "k8s.io/apimachinery/pkg/watch",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
"ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect",
|
||||||
"Rev": "d65938ce76da251a09c2fe861fb066c468571c47"
|
"Rev": "cd2cae2b39fa57e8063fa1f5f13cfe9862db3d41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/discovery",
|
"ImportPath": "k8s.io/client-go/discovery",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/discovery/fake",
|
"ImportPath": "k8s.io/client-go/discovery/fake",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers",
|
"ImportPath": "k8s.io/client-go/informers",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/admissionregistration",
|
"ImportPath": "k8s.io/client-go/informers/admissionregistration",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1",
|
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/apps",
|
"ImportPath": "k8s.io/client-go/informers/apps",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/apps/v1",
|
"ImportPath": "k8s.io/client-go/informers/apps/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/apps/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/apps/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/apps/v1beta2",
|
"ImportPath": "k8s.io/client-go/informers/apps/v1beta2",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/autoscaling",
|
"ImportPath": "k8s.io/client-go/informers/autoscaling",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/autoscaling/v1",
|
"ImportPath": "k8s.io/client-go/informers/autoscaling/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1",
|
"ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/batch",
|
"ImportPath": "k8s.io/client-go/informers/batch",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/batch/v1",
|
"ImportPath": "k8s.io/client-go/informers/batch/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/batch/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/batch/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/batch/v2alpha1",
|
"ImportPath": "k8s.io/client-go/informers/batch/v2alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/certificates",
|
"ImportPath": "k8s.io/client-go/informers/certificates",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/certificates/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/certificates/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/core",
|
"ImportPath": "k8s.io/client-go/informers/core",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/core/v1",
|
"ImportPath": "k8s.io/client-go/informers/core/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/events",
|
"ImportPath": "k8s.io/client-go/informers/events",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/events/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/events/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/extensions",
|
"ImportPath": "k8s.io/client-go/informers/extensions",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/extensions/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/extensions/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/internalinterfaces",
|
"ImportPath": "k8s.io/client-go/informers/internalinterfaces",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/networking",
|
"ImportPath": "k8s.io/client-go/informers/networking",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/networking/v1",
|
"ImportPath": "k8s.io/client-go/informers/networking/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/policy",
|
"ImportPath": "k8s.io/client-go/informers/policy",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/policy/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/policy/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/rbac",
|
"ImportPath": "k8s.io/client-go/informers/rbac",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/rbac/v1",
|
"ImportPath": "k8s.io/client-go/informers/rbac/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1",
|
"ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/rbac/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/rbac/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/scheduling",
|
"ImportPath": "k8s.io/client-go/informers/scheduling",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1",
|
"ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/settings",
|
"ImportPath": "k8s.io/client-go/informers/settings",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/settings/v1alpha1",
|
"ImportPath": "k8s.io/client-go/informers/settings/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/storage",
|
"ImportPath": "k8s.io/client-go/informers/storage",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/storage/v1",
|
"ImportPath": "k8s.io/client-go/informers/storage/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/storage/v1alpha1",
|
"ImportPath": "k8s.io/client-go/informers/storage/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/informers/storage/v1beta1",
|
"ImportPath": "k8s.io/client-go/informers/storage/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes",
|
"ImportPath": "k8s.io/client-go/kubernetes",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/scheme",
|
"ImportPath": "k8s.io/client-go/kubernetes/scheme",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1",
|
"ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1",
|
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/apps/v1",
|
"ImportPath": "k8s.io/client-go/listers/apps/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/apps/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/apps/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/apps/v1beta2",
|
"ImportPath": "k8s.io/client-go/listers/apps/v1beta2",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/autoscaling/v1",
|
"ImportPath": "k8s.io/client-go/listers/autoscaling/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1",
|
"ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/batch/v1",
|
"ImportPath": "k8s.io/client-go/listers/batch/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/batch/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/batch/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/batch/v2alpha1",
|
"ImportPath": "k8s.io/client-go/listers/batch/v2alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/certificates/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/certificates/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/core/v1",
|
"ImportPath": "k8s.io/client-go/listers/core/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/events/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/events/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/extensions/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/extensions/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/networking/v1",
|
"ImportPath": "k8s.io/client-go/listers/networking/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/policy/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/policy/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/rbac/v1",
|
"ImportPath": "k8s.io/client-go/listers/rbac/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1",
|
"ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/rbac/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/rbac/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1",
|
"ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/settings/v1alpha1",
|
"ImportPath": "k8s.io/client-go/listers/settings/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/storage/v1",
|
"ImportPath": "k8s.io/client-go/listers/storage/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/storage/v1alpha1",
|
"ImportPath": "k8s.io/client-go/listers/storage/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/listers/storage/v1beta1",
|
"ImportPath": "k8s.io/client-go/listers/storage/v1beta1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication",
|
"ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1",
|
"ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/pkg/version",
|
"ImportPath": "k8s.io/client-go/pkg/version",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/plugin/pkg/client/auth/exec",
|
"ImportPath": "k8s.io/client-go/plugin/pkg/client/auth/exec",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/rest",
|
"ImportPath": "k8s.io/client-go/rest",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/rest/watch",
|
"ImportPath": "k8s.io/client-go/rest/watch",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/testing",
|
"ImportPath": "k8s.io/client-go/testing",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/auth",
|
"ImportPath": "k8s.io/client-go/tools/auth",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/cache",
|
"ImportPath": "k8s.io/client-go/tools/cache",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/clientcmd",
|
"ImportPath": "k8s.io/client-go/tools/clientcmd",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/clientcmd/api",
|
"ImportPath": "k8s.io/client-go/tools/clientcmd/api",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest",
|
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1",
|
"ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/metrics",
|
"ImportPath": "k8s.io/client-go/tools/metrics",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/pager",
|
"ImportPath": "k8s.io/client-go/tools/pager",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/record",
|
"ImportPath": "k8s.io/client-go/tools/record",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/tools/reference",
|
"ImportPath": "k8s.io/client-go/tools/reference",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/transport",
|
"ImportPath": "k8s.io/client-go/transport",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/buffer",
|
"ImportPath": "k8s.io/client-go/util/buffer",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/cert",
|
"ImportPath": "k8s.io/client-go/util/cert",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/flowcontrol",
|
"ImportPath": "k8s.io/client-go/util/flowcontrol",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/homedir",
|
"ImportPath": "k8s.io/client-go/util/homedir",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/integer",
|
"ImportPath": "k8s.io/client-go/util/integer",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/retry",
|
"ImportPath": "k8s.io/client-go/util/retry",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/client-go/util/workqueue",
|
"ImportPath": "k8s.io/client-go/util/workqueue",
|
||||||
"Rev": "f2e4bfdd42eb708ff7da6bb2cf81bdf2680ac3f8"
|
"Rev": "47c485781f23208b2c4e345f52dfa9d7fe6975b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
|
"ImportPath": "k8s.io/kube-openapi/pkg/util/proto",
|
||||||
|
37
README.md
37
README.md
@ -79,17 +79,44 @@ type User struct {
|
|||||||
|
|
||||||
To validate custom resources, use the [`CustomResourceValidation`](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#validation) feature.
|
To validate custom resources, use the [`CustomResourceValidation`](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#validation) feature.
|
||||||
|
|
||||||
This feature is beta and enabled by default in v1.9. If you are using v1.8, enable the feature using
|
This feature is beta and enabled by default in v1.9.
|
||||||
the `CustomResourceValidation` feature gate on the [kube-apiserver](https://kubernetes.io/docs/admin/kube-apiserver):
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
The schema in [`crd-validation.yaml`](./artifacts/examples/crd-validation.yaml) applies the following validation on the custom resource:
|
||||||
|
`spec.replicas` must be an integer and must have a minimum value of 1 and a maximum value of 10.
|
||||||
|
|
||||||
|
In the above steps, use `crd-validation.yaml` to create the CRD:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
--feature-gates=CustomResourceValidation=true
|
# create a CustomResourceDefinition supporting validation
|
||||||
|
$ kubectl create -f artifacts/examples/crd-validation.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Subresources
|
||||||
|
|
||||||
|
Custom Resources support `/status` and `/scale` subresources as an
|
||||||
|
[alpha feature](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#subresources) in v1.10.
|
||||||
|
Enable this feature using the `CustomResourceSubresources` feature gate on the [kube-apiserver](https://kubernetes.io/docs/admin/kube-apiserver):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
--feature-gates=CustomResourceSubresources=true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
The schema in the [example CRD](./artifacts/examples/crd.yaml) applies the following validation on the custom resource:
|
The CRD in [`crd-status-subresource.yaml`](./artifacts/examples/crd-status-subresource.yaml) enables the `/status` subresource
|
||||||
`spec.replicas` must be an integer and must have a minimum value of 1 and a maximum value of 10.
|
for custom resources.
|
||||||
|
This means that [`UpdateStatus`](./controller.go#L330) can be used by the controller to update only the status part of the custom resource.
|
||||||
|
|
||||||
|
To understand why only the status part of the custom resource should be updated, please refer to the [Kubernetes API conventions](https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status).
|
||||||
|
|
||||||
|
In the above steps, use `crd-status-subresource.yaml` to create the CRD:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# create a CustomResourceDefinition supporting the status subresource
|
||||||
|
$ kubectl create -f artifacts/examples/crd-status-subresource.yaml
|
||||||
|
```
|
||||||
|
|
||||||
## Cleanup
|
## Cleanup
|
||||||
|
|
||||||
|
13
artifacts/examples/crd-status-subresource.yaml
Normal file
13
artifacts/examples/crd-status-subresource.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: foos.samplecontroller.k8s.io
|
||||||
|
spec:
|
||||||
|
group: samplecontroller.k8s.io
|
||||||
|
version: v1alpha1
|
||||||
|
names:
|
||||||
|
kind: Foo
|
||||||
|
plural: foos
|
||||||
|
scope: Namespaced
|
||||||
|
subresources:
|
||||||
|
status: {}
|
20
artifacts/examples/crd-validation.yaml
Normal file
20
artifacts/examples/crd-validation.yaml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
apiVersion: apiextensions.k8s.io/v1beta1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: foos.samplecontroller.k8s.io
|
||||||
|
spec:
|
||||||
|
group: samplecontroller.k8s.io
|
||||||
|
version: v1alpha1
|
||||||
|
names:
|
||||||
|
kind: Foo
|
||||||
|
plural: foos
|
||||||
|
scope: Namespaced
|
||||||
|
validation:
|
||||||
|
openAPIV3Schema:
|
||||||
|
properties:
|
||||||
|
spec:
|
||||||
|
properties:
|
||||||
|
replicas:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
maximum: 10
|
@ -9,12 +9,3 @@ spec:
|
|||||||
kind: Foo
|
kind: Foo
|
||||||
plural: foos
|
plural: foos
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
validation:
|
|
||||||
openAPIV3Schema:
|
|
||||||
properties:
|
|
||||||
spec:
|
|
||||||
properties:
|
|
||||||
replicas:
|
|
||||||
type: integer
|
|
||||||
minimum: 1
|
|
||||||
maximum: 10
|
|
||||||
|
@ -327,10 +327,10 @@ func (c *Controller) updateFooStatus(foo *samplev1alpha1.Foo, deployment *appsv1
|
|||||||
// Or create a copy manually for better performance
|
// Or create a copy manually for better performance
|
||||||
fooCopy := foo.DeepCopy()
|
fooCopy := foo.DeepCopy()
|
||||||
fooCopy.Status.AvailableReplicas = deployment.Status.AvailableReplicas
|
fooCopy.Status.AvailableReplicas = deployment.Status.AvailableReplicas
|
||||||
// Until #38113 is merged, we must use Update instead of UpdateStatus to
|
// If the CustomResourceSubresources feature gate is not enabled,
|
||||||
// update the Status block of the Foo resource. UpdateStatus will not
|
// we must use Update instead of UpdateStatus to update the Status block of the Foo resource.
|
||||||
// allow changes to the Spec of the resource, which is ideal for ensuring
|
// UpdateStatus will not allow changes to the Spec of the resource,
|
||||||
// nothing other than resource status has been updated.
|
// which is ideal for ensuring nothing other than resource status has been updated.
|
||||||
_, err := c.sampleclientset.SamplecontrollerV1alpha1().Foos(foo.Namespace).Update(fooCopy)
|
_, err := c.sampleclientset.SamplecontrollerV1alpha1().Foos(foo.Namespace).Update(fooCopy)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// +genclient
|
// +genclient
|
||||||
// +genclient:noStatus
|
|
||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
// Foo is a specification for a Foo resource
|
// Foo is a specification for a Foo resource
|
||||||
|
@ -100,6 +100,18 @@ func (c *FakeFoos) Update(foo *v1alpha1.Foo) (result *v1alpha1.Foo, err error) {
|
|||||||
return obj.(*v1alpha1.Foo), err
|
return obj.(*v1alpha1.Foo), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateStatus was generated because the type contains a Status member.
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
func (c *FakeFoos) UpdateStatus(foo *v1alpha1.Foo) (*v1alpha1.Foo, error) {
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewUpdateSubresourceAction(foosResource, "status", c.ns, foo), &v1alpha1.Foo{})
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.Foo), err
|
||||||
|
}
|
||||||
|
|
||||||
// Delete takes name of the foo and deletes it. Returns an error if one occurs.
|
// Delete takes name of the foo and deletes it. Returns an error if one occurs.
|
||||||
func (c *FakeFoos) Delete(name string, options *v1.DeleteOptions) error {
|
func (c *FakeFoos) Delete(name string, options *v1.DeleteOptions) error {
|
||||||
_, err := c.Fake.
|
_, err := c.Fake.
|
||||||
|
@ -37,6 +37,7 @@ type FoosGetter interface {
|
|||||||
type FooInterface interface {
|
type FooInterface interface {
|
||||||
Create(*v1alpha1.Foo) (*v1alpha1.Foo, error)
|
Create(*v1alpha1.Foo) (*v1alpha1.Foo, error)
|
||||||
Update(*v1alpha1.Foo) (*v1alpha1.Foo, error)
|
Update(*v1alpha1.Foo) (*v1alpha1.Foo, error)
|
||||||
|
UpdateStatus(*v1alpha1.Foo) (*v1alpha1.Foo, error)
|
||||||
Delete(name string, options *v1.DeleteOptions) error
|
Delete(name string, options *v1.DeleteOptions) error
|
||||||
DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
|
DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
|
||||||
Get(name string, options v1.GetOptions) (*v1alpha1.Foo, error)
|
Get(name string, options v1.GetOptions) (*v1alpha1.Foo, error)
|
||||||
@ -120,6 +121,22 @@ func (c *foos) Update(foo *v1alpha1.Foo) (result *v1alpha1.Foo, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateStatus was generated because the type contains a Status member.
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
|
||||||
|
func (c *foos) UpdateStatus(foo *v1alpha1.Foo) (result *v1alpha1.Foo, err error) {
|
||||||
|
result = &v1alpha1.Foo{}
|
||||||
|
err = c.client.Put().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("foos").
|
||||||
|
Name(foo.Name).
|
||||||
|
SubResource("status").
|
||||||
|
Body(foo).
|
||||||
|
Do().
|
||||||
|
Into(result)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Delete takes name of the foo and deletes it. Returns an error if one occurs.
|
// Delete takes name of the foo and deletes it. Returns an error if one occurs.
|
||||||
func (c *foos) Delete(name string, options *v1.DeleteOptions) error {
|
func (c *foos) Delete(name string, options *v1.DeleteOptions) error {
|
||||||
return c.client.Delete().
|
return c.client.Delete().
|
||||||
|
2
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go
generated
vendored
2
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go
generated
vendored
@ -82,7 +82,7 @@ func (obj *Unstructured) EachListItem(fn func(runtime.Object) error) error {
|
|||||||
|
|
||||||
func (obj *Unstructured) UnstructuredContent() map[string]interface{} {
|
func (obj *Unstructured) UnstructuredContent() map[string]interface{} {
|
||||||
if obj.Object == nil {
|
if obj.Object == nil {
|
||||||
obj.Object = make(map[string]interface{})
|
return make(map[string]interface{})
|
||||||
}
|
}
|
||||||
return obj.Object
|
return obj.Object
|
||||||
}
|
}
|
||||||
|
17
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go
generated
vendored
17
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured_list.go
generated
vendored
@ -53,19 +53,18 @@ func (u *UnstructuredList) EachListItem(fn func(runtime.Object) error) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UnstructuredContent returns a map contain an overlay of the Items field onto
|
// UnstructuredContent returns a map contain an overlay of the Items field onto
|
||||||
// the Object field. Items always overwrites overlay. Changing "items" in the
|
// the Object field. Items always overwrites overlay.
|
||||||
// returned object will affect items in the underlying Items field, but changing
|
|
||||||
// the "items" slice itself will have no effect.
|
|
||||||
// TODO: expose SetUnstructuredContent on runtime.Unstructured that allows
|
|
||||||
// items to be changed.
|
|
||||||
func (u *UnstructuredList) UnstructuredContent() map[string]interface{} {
|
func (u *UnstructuredList) UnstructuredContent() map[string]interface{} {
|
||||||
out := u.Object
|
out := make(map[string]interface{}, len(u.Object)+1)
|
||||||
if out == nil {
|
|
||||||
out = make(map[string]interface{})
|
// shallow copy every property
|
||||||
|
for k, v := range u.Object {
|
||||||
|
out[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
items := make([]interface{}, len(u.Items))
|
items := make([]interface{}, len(u.Items))
|
||||||
for i, item := range u.Items {
|
for i, item := range u.Items {
|
||||||
items[i] = item.Object
|
items[i] = item.UnstructuredContent()
|
||||||
}
|
}
|
||||||
out["items"] = items
|
out["items"] = items
|
||||||
return out
|
return out
|
||||||
|
11
vendor/k8s.io/apimachinery/pkg/runtime/converter.go
generated
vendored
11
vendor/k8s.io/apimachinery/pkg/runtime/converter.go
generated
vendored
@ -411,8 +411,7 @@ func (c *unstructuredConverter) ToUnstructured(obj interface{}) (map[string]inte
|
|||||||
var u map[string]interface{}
|
var u map[string]interface{}
|
||||||
var err error
|
var err error
|
||||||
if unstr, ok := obj.(Unstructured); ok {
|
if unstr, ok := obj.(Unstructured); ok {
|
||||||
// UnstructuredContent() mutates the object so we need to make a copy first
|
u = unstr.UnstructuredContent()
|
||||||
u = unstr.DeepCopyObject().(Unstructured).UnstructuredContent()
|
|
||||||
} else {
|
} else {
|
||||||
t := reflect.TypeOf(obj)
|
t := reflect.TypeOf(obj)
|
||||||
value := reflect.ValueOf(obj)
|
value := reflect.ValueOf(obj)
|
||||||
@ -449,12 +448,20 @@ func DeepCopyJSON(x map[string]interface{}) map[string]interface{} {
|
|||||||
func DeepCopyJSONValue(x interface{}) interface{} {
|
func DeepCopyJSONValue(x interface{}) interface{} {
|
||||||
switch x := x.(type) {
|
switch x := x.(type) {
|
||||||
case map[string]interface{}:
|
case map[string]interface{}:
|
||||||
|
if x == nil {
|
||||||
|
// Typed nil - an interface{} that contains a type map[string]interface{} with a value of nil
|
||||||
|
return x
|
||||||
|
}
|
||||||
clone := make(map[string]interface{}, len(x))
|
clone := make(map[string]interface{}, len(x))
|
||||||
for k, v := range x {
|
for k, v := range x {
|
||||||
clone[k] = DeepCopyJSONValue(v)
|
clone[k] = DeepCopyJSONValue(v)
|
||||||
}
|
}
|
||||||
return clone
|
return clone
|
||||||
case []interface{}:
|
case []interface{}:
|
||||||
|
if x == nil {
|
||||||
|
// Typed nil - an interface{} that contains a type []interface{} with a value of nil
|
||||||
|
return x
|
||||||
|
}
|
||||||
clone := make([]interface{}, len(x))
|
clone := make([]interface{}, len(x))
|
||||||
for i, v := range x {
|
for i, v := range x {
|
||||||
clone[i] = DeepCopyJSONValue(v)
|
clone[i] = DeepCopyJSONValue(v)
|
||||||
|
4
vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go
generated
vendored
4
vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go
generated
vendored
@ -234,9 +234,9 @@ type Object interface {
|
|||||||
// to JSON allowed.
|
// to JSON allowed.
|
||||||
type Unstructured interface {
|
type Unstructured interface {
|
||||||
Object
|
Object
|
||||||
// UnstructuredContent returns a non-nil, mutable map of the contents of this object. Values may be
|
// UnstructuredContent returns a non-nil map with this object's contents. Values may be
|
||||||
// []interface{}, map[string]interface{}, or any primitive type. Contents are typically serialized to
|
// []interface{}, map[string]interface{}, or any primitive type. Contents are typically serialized to
|
||||||
// and from JSON.
|
// and from JSON. SetUnstructuredContent should be used to mutate the contents.
|
||||||
UnstructuredContent() map[string]interface{}
|
UnstructuredContent() map[string]interface{}
|
||||||
// SetUnstructuredContent updates the object content to match the provided map.
|
// SetUnstructuredContent updates the object content to match the provided map.
|
||||||
SetUnstructuredContent(map[string]interface{})
|
SetUnstructuredContent(map[string]interface{})
|
||||||
|
23
vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go
generated
vendored
23
vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go
generated
vendored
@ -880,6 +880,29 @@ func StrategicMergeMapPatchUsingLookupPatchMeta(original, patch JSONMap, schema
|
|||||||
return mergeMap(original, patch, schema, mergeOptions)
|
return mergeMap(original, patch, schema, mergeOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MergeStrategicMergeMapPatchUsingLookupPatchMeta merges strategic merge
|
||||||
|
// patches retaining `null` fields and parallel lists. If 2 patches change the
|
||||||
|
// same fields and the latter one will override the former one. If you don't
|
||||||
|
// want that happen, you need to run func MergingMapsHaveConflicts before
|
||||||
|
// merging these patches. Applying the resulting merged merge patch to a JSONMap
|
||||||
|
// yields the same as merging each strategic merge patch to the JSONMap in
|
||||||
|
// succession.
|
||||||
|
func MergeStrategicMergeMapPatchUsingLookupPatchMeta(schema LookupPatchMeta, patches ...JSONMap) (JSONMap, error) {
|
||||||
|
mergeOptions := MergeOptions{
|
||||||
|
MergeParallelList: false,
|
||||||
|
IgnoreUnmatchedNulls: false,
|
||||||
|
}
|
||||||
|
merged := JSONMap{}
|
||||||
|
var err error
|
||||||
|
for _, patch := range patches {
|
||||||
|
merged, err = mergeMap(merged, patch, schema, mergeOptions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return merged, nil
|
||||||
|
}
|
||||||
|
|
||||||
// handleDirectiveInMergeMap handles the patch directive when merging 2 maps.
|
// handleDirectiveInMergeMap handles the patch directive when merging 2 maps.
|
||||||
func handleDirectiveInMergeMap(directive interface{}, patch map[string]interface{}) (map[string]interface{}, error) {
|
func handleDirectiveInMergeMap(directive interface{}, patch map[string]interface{}) (map[string]interface{}, error) {
|
||||||
if directive == replaceDirective {
|
if directive == replaceDirective {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user