From 644021d0a10247c973c68103276061de311ab9c1 Mon Sep 17 00:00:00 2001 From: deads2k Date: Mon, 23 Jan 2017 09:57:00 -0500 Subject: [PATCH 1/3] update client-go --- .../src/k8s.io/client-go/Godeps/Godeps.json | 76 +- .../apimachinery/pkg/api/meta/default.go} | 21 +- .../pkg/apimachinery/announced/announced.go | 8 - .../apimachinery/announced/group_factory.go | 13 +- .../pkg/apimachinery/registered/registered.go | 2 +- .../k8s.io/client-go/kubernetes/clientset.go | 24 +- .../src/k8s.io/client-go/kubernetes/doc.go | 2 +- .../kubernetes/fake/clientset_generated.go | 16 +- .../k8s.io/client-go/kubernetes/fake/doc.go | 2 +- .../kubernetes/typed/apps/v1beta1/doc.go | 2 +- .../kubernetes/typed/apps/v1beta1/fake/doc.go | 2 +- .../typed/authentication/v1beta1/doc.go | 2 +- .../typed/authentication/v1beta1/fake/doc.go | 2 +- .../typed/authorization/v1beta1/doc.go | 2 +- .../typed/authorization/v1beta1/fake/doc.go | 2 +- .../kubernetes/typed/autoscaling/v1/doc.go | 2 +- .../typed/autoscaling/v1/fake/doc.go | 2 +- .../kubernetes/typed/batch/v1/doc.go | 2 +- .../kubernetes/typed/batch/v1/fake/doc.go | 2 +- .../kubernetes/typed/batch/v2alpha1/doc.go | 2 +- .../typed/batch/v2alpha1/fake/doc.go | 2 +- .../certificates_client.go | 34 +- .../certificatesigningrequest.go | 42 +- .../certificatesigningrequest_expansion.go | 6 +- .../certificates/{v1alpha1 => v1beta1}/doc.go | 4 +- .../{v1alpha1 => v1beta1}/fake/doc.go | 2 +- .../fake/fake_certificates_client.go | 8 +- .../fake/fake_certificatesigningrequest.go | 48 +- ...ake_certificatesigningrequest_expansion.go | 4 +- .../generated_expansion.go | 2 +- .../client-go/kubernetes/typed/core/v1/doc.go | 2 +- .../kubernetes/typed/core/v1/fake/doc.go | 2 +- .../typed/extensions/v1beta1/doc.go | 2 +- .../typed/extensions/v1beta1/fake/doc.go | 2 +- .../kubernetes/typed/policy/v1beta1/doc.go | 2 +- .../typed/policy/v1beta1/fake/doc.go | 2 +- .../kubernetes/typed/rbac/v1alpha1/doc.go | 2 +- .../typed/rbac/v1alpha1/fake/doc.go | 2 +- .../kubernetes/typed/rbac/v1beta1/doc.go | 2 +- .../kubernetes/typed/rbac/v1beta1/fake/doc.go | 2 +- .../kubernetes/typed/storage/v1beta1/doc.go | 2 +- .../typed/storage/v1beta1/fake/doc.go | 2 +- .../k8s.io/client-go/pkg/api/conversion.go | 24 +- .../src/k8s.io/client-go/pkg/api/helpers.go | 17 + .../client-go/pkg/api/install/install.go | 3 +- .../src/k8s.io/client-go/pkg/api/register.go | 5 + .../client-go/pkg/api/testapi/testapi.go | 4 +- staging/src/k8s.io/client-go/pkg/api/types.go | 22 + .../k8s.io/client-go/pkg/api/v1/conversion.go | 5 +- .../client-go/pkg/api/v1/generated.pb.go | 2671 +++++++++-------- .../client-go/pkg/api/v1/generated.proto | 27 + .../k8s.io/client-go/pkg/api/v1/register.go | 1 + .../client-go/pkg/api/v1/types.generated.go | 602 +++- .../src/k8s.io/client-go/pkg/api/v1/types.go | 28 + .../pkg/api/v1/types_swagger_doc_generated.go | 18 + .../pkg/api/v1/zz_generated.conversion.go | 46 + .../pkg/api/v1/zz_generated.deepcopy.go | 30 + .../pkg/api/zz_generated.deepcopy.go | 30 + .../pkg/apis/apps/install/install.go | 12 +- .../apis/authentication/install/install.go | 12 +- .../pkg/apis/authorization/install/install.go | 12 +- .../pkg/apis/autoscaling/install/install.go | 12 +- .../pkg/apis/batch/install/install.go | 12 +- .../pkg/apis/certificates/install/install.go | 18 +- .../v1alpha1/zz_generated.conversion.go | 169 -- .../{v1alpha1 => v1beta1}/conversion.go | 2 +- .../{v1alpha1 => v1beta1}/defaults.go | 2 +- .../certificates/{v1alpha1 => v1beta1}/doc.go | 2 +- .../{v1alpha1 => v1beta1}/generated.pb.go | 112 +- .../{v1alpha1 => v1beta1}/generated.proto | 4 +- .../{v1alpha1 => v1beta1}/helpers.go | 2 +- .../{v1alpha1 => v1beta1}/register.go | 4 +- .../{v1alpha1 => v1beta1}/types.generated.go | 2 +- .../{v1alpha1 => v1beta1}/types.go | 2 +- .../types_swagger_doc_generated.go | 2 +- .../v1beta1/zz_generated.conversion.go | 169 ++ .../zz_generated.deepcopy.go | 30 +- .../zz_generated.defaults.go | 2 +- .../apis/componentconfig/install/install.go | 12 +- .../pkg/apis/componentconfig/types.go | 3 + .../apis/componentconfig/v1alpha1/types.go | 3 + .../v1alpha1/zz_generated.conversion.go | 2 + .../pkg/apis/extensions/install/install.go | 12 +- .../pkg/apis/imagepolicy/install/install.go | 12 +- .../pkg/apis/kubeadm/install/install.go | 12 +- .../pkg/apis/kubeadm/v1alpha1/defaults.go | 12 +- .../pkg/apis/policy/install/install.go | 12 +- .../pkg/apis/rbac/install/install.go | 12 +- .../pkg/apis/storage/install/install.go | 12 +- .../apis/federation/install/install.go | 2 +- .../pkg/util/httpstream/spdy/roundtripper.go | 2 +- .../pkg/util/strategicpatch/patch.go | 2 +- .../plugin/pkg/client/auth/oidc/oidc_test.go | 2 +- .../third_party/forked/golang/json/fields.go | 501 ++++ .../third_party/forked/golang/netutil/addr.go | 27 + .../k8s.io/client-go/tools/cache/listers.go | 321 +- .../client-go/tools/cache/listers_core.go | 350 --- .../tools/cache/listers_extensions.go | 211 -- .../client-go/tools/cache/listers_rbac.go | 234 -- .../client-go/tools/cache/listers_test.go | 613 ---- .../client-go/tools/clientcmd/loader_test.go | 7 +- vendor/BUILD | 299 +- 102 files changed, 3589 insertions(+), 3563 deletions(-) rename staging/src/k8s.io/client-go/{pkg/api/mapper.go => _vendor/k8s.io/apimachinery/pkg/api/meta/default.go} (65%) rename staging/src/k8s.io/client-go/{ => _vendor/k8s.io/apimachinery}/pkg/apimachinery/announced/announced.go (93%) rename staging/src/k8s.io/client-go/{ => _vendor/k8s.io/apimachinery}/pkg/apimachinery/announced/group_factory.go (94%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/certificates_client.go (61%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/certificatesigningrequest.go (76%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/certificatesigningrequest_expansion.go (90%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/doc.go (86%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/fake/doc.go (88%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/fake/fake_certificates_client.go (75%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/fake/fake_certificatesigningrequest.go (66%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/fake/fake_certificatesigningrequest_expansion.go (91%) rename staging/src/k8s.io/client-go/kubernetes/typed/certificates/{v1alpha1 => v1beta1}/generated_expansion.go (97%) delete mode 100644 staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/conversion.go (98%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/defaults.go (98%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/doc.go (97%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/generated.pb.go (86%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/generated.proto (97%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/helpers.go (98%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/register.go (98%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/types.generated.go (99%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/types.go (99%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/types_swagger_doc_generated.go (99%) create mode 100644 staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.conversion.go rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/zz_generated.deepcopy.go (62%) rename staging/src/k8s.io/client-go/pkg/apis/certificates/{v1alpha1 => v1beta1}/zz_generated.defaults.go (98%) create mode 100644 staging/src/k8s.io/client-go/third_party/forked/golang/json/fields.go create mode 100644 staging/src/k8s.io/client-go/third_party/forked/golang/netutil/addr.go delete mode 100644 staging/src/k8s.io/client-go/tools/cache/listers_core.go delete mode 100644 staging/src/k8s.io/client-go/tools/cache/listers_extensions.go delete mode 100644 staging/src/k8s.io/client-go/tools/cache/listers_rbac.go delete mode 100644 staging/src/k8s.io/client-go/tools/cache/listers_test.go diff --git a/staging/src/k8s.io/client-go/Godeps/Godeps.json b/staging/src/k8s.io/client-go/Godeps/Godeps.json index fb26189799c..b5431fb0cd0 100644 --- a/staging/src/k8s.io/client-go/Godeps/Godeps.json +++ b/staging/src/k8s.io/client-go/Godeps/Godeps.json @@ -324,147 +324,151 @@ }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/openapi", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/rand", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "a6364387e6d54a910a0810543a14b6867eafaa99" + "Rev": "1f1411cd407a75607081ff37f3ca1baeeb63d05a" } ] } diff --git a/staging/src/k8s.io/client-go/pkg/api/mapper.go b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/default.go similarity index 65% rename from staging/src/k8s.io/client-go/pkg/api/mapper.go rename to staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/default.go index 69334b0711e..5ea906a2a72 100644 --- a/staging/src/k8s.io/client-go/pkg/api/mapper.go +++ b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/default.go @@ -14,28 +14,21 @@ See the License for the specific language governing permissions and limitations under the License. */ -package api +package meta import ( "strings" - "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" ) -// Instantiates a DefaultRESTMapper based on types registered in api.Scheme -func NewDefaultRESTMapper(defaultGroupVersions []schema.GroupVersion, interfacesFunc meta.VersionInterfacesFunc, - importPathPrefix string, ignoredKinds, rootScoped sets.String) *meta.DefaultRESTMapper { - return NewDefaultRESTMapperFromScheme(defaultGroupVersions, interfacesFunc, importPathPrefix, ignoredKinds, rootScoped, Scheme) -} +// NewDefaultRESTMapperFromScheme instantiates a DefaultRESTMapper based on types registered in the given scheme. +func NewDefaultRESTMapperFromScheme(defaultGroupVersions []schema.GroupVersion, interfacesFunc VersionInterfacesFunc, + importPathPrefix string, ignoredKinds, rootScoped sets.String, scheme *runtime.Scheme) *DefaultRESTMapper { -// Instantiates a DefaultRESTMapper based on types registered in the given scheme. -func NewDefaultRESTMapperFromScheme(defaultGroupVersions []schema.GroupVersion, interfacesFunc meta.VersionInterfacesFunc, - importPathPrefix string, ignoredKinds, rootScoped sets.String, scheme *runtime.Scheme) *meta.DefaultRESTMapper { - - mapper := meta.NewDefaultRESTMapper(defaultGroupVersions, interfacesFunc) + mapper := NewDefaultRESTMapper(defaultGroupVersions, interfacesFunc) // enumerate all supported versions, get the kinds, and register with the mapper how to address // our resources. for _, gv := range defaultGroupVersions { @@ -47,9 +40,9 @@ func NewDefaultRESTMapperFromScheme(defaultGroupVersions []schema.GroupVersion, if !strings.Contains(oType.PkgPath(), importPathPrefix) || ignoredKinds.Has(kind) { continue } - scope := meta.RESTScopeNamespace + scope := RESTScopeNamespace if rootScoped.Has(kind) { - scope = meta.RESTScopeRoot + scope = RESTScopeRoot } mapper.Add(gvk, scope) } diff --git a/staging/src/k8s.io/client-go/pkg/apimachinery/announced/announced.go b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/announced.go similarity index 93% rename from staging/src/k8s.io/client-go/pkg/apimachinery/announced/announced.go rename to staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/announced.go index 054dc4aa5a3..2c8568c1f76 100644 --- a/staging/src/k8s.io/client-go/pkg/apimachinery/announced/announced.go +++ b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/announced.go @@ -28,14 +28,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" ) -var ( - DefaultGroupFactoryRegistry = make(APIGroupFactoryRegistry) - - // These functions will announce your group or version. - AnnounceGroupVersion = DefaultGroupFactoryRegistry.AnnounceGroupVersion - AnnounceGroup = DefaultGroupFactoryRegistry.AnnounceGroup -) - // APIGroupFactoryRegistry allows for groups and versions to announce themselves, // which simply makes them available and doesn't take other actions. Later, // users of the registry can select which groups and versions they'd actually diff --git a/staging/src/k8s.io/client-go/pkg/apimachinery/announced/group_factory.go b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/group_factory.go similarity index 94% rename from staging/src/k8s.io/client-go/pkg/apimachinery/announced/group_factory.go rename to staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/group_factory.go index c8b398147e9..2f4b0898255 100644 --- a/staging/src/k8s.io/client-go/pkg/apimachinery/announced/group_factory.go +++ b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/group_factory.go @@ -27,7 +27,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/api" ) type SchemeFunc func(*runtime.Scheme) error @@ -79,8 +78,8 @@ func NewGroupMetaFactory(groupArgs *GroupMetaFactoryArgs, versions VersionToSche // programmer importing the wrong set of packages. If this assumption doesn't // work for you, just call DefaultGroupFactoryRegistry.AnnouncePreconstructedFactory // yourself. -func (gmf *GroupMetaFactory) Announce() *GroupMetaFactory { - if err := DefaultGroupFactoryRegistry.AnnouncePreconstructedFactory(gmf); err != nil { +func (gmf *GroupMetaFactory) Announce(groupFactoryRegistry APIGroupFactoryRegistry) *GroupMetaFactory { + if err := groupFactoryRegistry.AnnouncePreconstructedFactory(gmf); err != nil { panic(err) } return gmf @@ -171,7 +170,7 @@ func (gmf *GroupMetaFactory) newRESTMapper(scheme *runtime.Scheme, externalVersi ignoredKinds = gmf.GroupArgs.IgnoredKinds } - return api.NewDefaultRESTMapperFromScheme( + return meta.NewDefaultRESTMapperFromScheme( externalVersions, groupMeta.InterfacesFor, gmf.GroupArgs.ImportPrefix, @@ -235,11 +234,11 @@ func (gmf *GroupMetaFactory) Enable(m *registered.APIRegistrationManager, scheme // RegisterAndEnable is provided only to allow this code to get added in multiple steps. // It's really bad that this is called in init() methods, but supporting this // temporarily lets us do the change incrementally. -func (gmf *GroupMetaFactory) RegisterAndEnable() error { - if err := gmf.Register(api.Registry); err != nil { +func (gmf *GroupMetaFactory) RegisterAndEnable(registry *registered.APIRegistrationManager, scheme *runtime.Scheme) error { + if err := gmf.Register(registry); err != nil { return err } - if err := gmf.Enable(api.Registry, api.Scheme); err != nil { + if err := gmf.Enable(registry, scheme); err != nil { return err } diff --git a/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/registered/registered.go b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/registered/registered.go index 5256be659a9..f2e32c88cdf 100644 --- a/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/registered/registered.go +++ b/staging/src/k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/registered/registered.go @@ -105,7 +105,7 @@ func (m *APIRegistrationManager) RegisterVersions(availableVersions []schema.Gro func (m *APIRegistrationManager) RegisterGroup(groupMeta apimachinery.GroupMeta) error { groupName := groupMeta.GroupVersion.Group if _, found := m.groupMetaMap[groupName]; found { - return fmt.Errorf("group %v is already registered", m.groupMetaMap) + return fmt.Errorf("group %q is already registered in groupsMap: %v", groupName, m.groupMetaMap) } m.groupMetaMap[groupName] = &groupMeta return nil diff --git a/staging/src/k8s.io/client-go/kubernetes/clientset.go b/staging/src/k8s.io/client-go/kubernetes/clientset.go index 05fef0cc67c..c509033402d 100644 --- a/staging/src/k8s.io/client-go/kubernetes/clientset.go +++ b/staging/src/k8s.io/client-go/kubernetes/clientset.go @@ -25,7 +25,7 @@ import ( v1autoscaling "k8s.io/client-go/kubernetes/typed/autoscaling/v1" v1batch "k8s.io/client-go/kubernetes/typed/batch/v1" v2alpha1batch "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" - v1alpha1certificates "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1" + v1beta1certificates "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" v1core "k8s.io/client-go/kubernetes/typed/core/v1" v1beta1extensions "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" v1beta1policy "k8s.io/client-go/kubernetes/typed/policy/v1beta1" @@ -59,9 +59,9 @@ type Interface interface { Batch() v1batch.BatchV1Interface BatchV2alpha1() v2alpha1batch.BatchV2alpha1Interface - CertificatesV1alpha1() v1alpha1certificates.CertificatesV1alpha1Interface + CertificatesV1beta1() v1beta1certificates.CertificatesV1beta1Interface // Deprecated: please explicitly pick a version if possible. - Certificates() v1alpha1certificates.CertificatesV1alpha1Interface + Certificates() v1beta1certificates.CertificatesV1beta1Interface ExtensionsV1beta1() v1beta1extensions.ExtensionsV1beta1Interface // Deprecated: please explicitly pick a version if possible. Extensions() v1beta1extensions.ExtensionsV1beta1Interface @@ -89,7 +89,7 @@ type Clientset struct { *v1autoscaling.AutoscalingV1Client *v1batch.BatchV1Client *v2alpha1batch.BatchV2alpha1Client - *v1alpha1certificates.CertificatesV1alpha1Client + *v1beta1certificates.CertificatesV1beta1Client *v1beta1extensions.ExtensionsV1beta1Client *v1beta1policy.PolicyV1beta1Client *v1beta1rbac.RbacV1beta1Client @@ -207,21 +207,21 @@ func (c *Clientset) BatchV2alpha1() v2alpha1batch.BatchV2alpha1Interface { return c.BatchV2alpha1Client } -// CertificatesV1alpha1 retrieves the CertificatesV1alpha1Client -func (c *Clientset) CertificatesV1alpha1() v1alpha1certificates.CertificatesV1alpha1Interface { +// CertificatesV1beta1 retrieves the CertificatesV1beta1Client +func (c *Clientset) CertificatesV1beta1() v1beta1certificates.CertificatesV1beta1Interface { if c == nil { return nil } - return c.CertificatesV1alpha1Client + return c.CertificatesV1beta1Client } // Deprecated: Certificates retrieves the default version of CertificatesClient. // Please explicitly pick a version. -func (c *Clientset) Certificates() v1alpha1certificates.CertificatesV1alpha1Interface { +func (c *Clientset) Certificates() v1beta1certificates.CertificatesV1beta1Interface { if c == nil { return nil } - return c.CertificatesV1alpha1Client + return c.CertificatesV1beta1Client } // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client @@ -344,7 +344,7 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } - cs.CertificatesV1alpha1Client, err = v1alpha1certificates.NewForConfig(&configShallowCopy) + cs.CertificatesV1beta1Client, err = v1beta1certificates.NewForConfig(&configShallowCopy) if err != nil { return nil, err } @@ -388,7 +388,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { cs.AutoscalingV1Client = v1autoscaling.NewForConfigOrDie(c) cs.BatchV1Client = v1batch.NewForConfigOrDie(c) cs.BatchV2alpha1Client = v2alpha1batch.NewForConfigOrDie(c) - cs.CertificatesV1alpha1Client = v1alpha1certificates.NewForConfigOrDie(c) + cs.CertificatesV1beta1Client = v1beta1certificates.NewForConfigOrDie(c) cs.ExtensionsV1beta1Client = v1beta1extensions.NewForConfigOrDie(c) cs.PolicyV1beta1Client = v1beta1policy.NewForConfigOrDie(c) cs.RbacV1beta1Client = v1beta1rbac.NewForConfigOrDie(c) @@ -409,7 +409,7 @@ func New(c rest.Interface) *Clientset { cs.AutoscalingV1Client = v1autoscaling.New(c) cs.BatchV1Client = v1batch.New(c) cs.BatchV2alpha1Client = v2alpha1batch.New(c) - cs.CertificatesV1alpha1Client = v1alpha1certificates.New(c) + cs.CertificatesV1beta1Client = v1beta1certificates.New(c) cs.ExtensionsV1beta1Client = v1beta1extensions.New(c) cs.PolicyV1beta1Client = v1beta1policy.New(c) cs.RbacV1beta1Client = v1beta1rbac.New(c) diff --git a/staging/src/k8s.io/client-go/kubernetes/doc.go b/staging/src/k8s.io/client-go/kubernetes/doc.go index 1f456969be2..cd50cd92cd7 100644 --- a/staging/src/k8s.io/client-go/kubernetes/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated clientset. package kubernetes diff --git a/staging/src/k8s.io/client-go/kubernetes/fake/clientset_generated.go b/staging/src/k8s.io/client-go/kubernetes/fake/clientset_generated.go index cba1cc1df06..a624d115089 100644 --- a/staging/src/k8s.io/client-go/kubernetes/fake/clientset_generated.go +++ b/staging/src/k8s.io/client-go/kubernetes/fake/clientset_generated.go @@ -34,8 +34,8 @@ import ( fakev1batch "k8s.io/client-go/kubernetes/typed/batch/v1/fake" v2alpha1batch "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" fakev2alpha1batch "k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake" - v1alpha1certificates "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1" - fakev1alpha1certificates "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake" + v1beta1certificates "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" + fakev1beta1certificates "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake" v1core "k8s.io/client-go/kubernetes/typed/core/v1" fakev1core "k8s.io/client-go/kubernetes/typed/core/v1/fake" v1beta1extensions "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" @@ -150,14 +150,14 @@ func (c *Clientset) BatchV2alpha1() v2alpha1batch.BatchV2alpha1Interface { return &fakev2alpha1batch.FakeBatchV2alpha1{Fake: &c.Fake} } -// CertificatesV1alpha1 retrieves the CertificatesV1alpha1Client -func (c *Clientset) CertificatesV1alpha1() v1alpha1certificates.CertificatesV1alpha1Interface { - return &fakev1alpha1certificates.FakeCertificatesV1alpha1{Fake: &c.Fake} +// CertificatesV1beta1 retrieves the CertificatesV1beta1Client +func (c *Clientset) CertificatesV1beta1() v1beta1certificates.CertificatesV1beta1Interface { + return &fakev1beta1certificates.FakeCertificatesV1beta1{Fake: &c.Fake} } -// Certificates retrieves the CertificatesV1alpha1Client -func (c *Clientset) Certificates() v1alpha1certificates.CertificatesV1alpha1Interface { - return &fakev1alpha1certificates.FakeCertificatesV1alpha1{Fake: &c.Fake} +// Certificates retrieves the CertificatesV1beta1Client +func (c *Clientset) Certificates() v1beta1certificates.CertificatesV1beta1Interface { + return &fakev1beta1certificates.FakeCertificatesV1beta1{Fake: &c.Fake} } // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client diff --git a/staging/src/k8s.io/client-go/kubernetes/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/fake/doc.go index 148b6ba36ee..f2bc62de4b3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated fake clientset. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go index 2e092f9d264..4b43d84fc95 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go index 2e092f9d264..4b43d84fc95 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go index 3efa4361606..e1d1a76d643 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v2alpha1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go similarity index 61% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go index 60d19545159..b5bf9d8b595 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( fmt "fmt" @@ -24,22 +24,22 @@ import ( rest "k8s.io/client-go/rest" ) -type CertificatesV1alpha1Interface interface { +type CertificatesV1beta1Interface interface { RESTClient() rest.Interface CertificateSigningRequestsGetter } -// CertificatesV1alpha1Client is used to interact with features provided by the certificates.k8s.io group. -type CertificatesV1alpha1Client struct { +// CertificatesV1beta1Client is used to interact with features provided by the certificates.k8s.io group. +type CertificatesV1beta1Client struct { restClient rest.Interface } -func (c *CertificatesV1alpha1Client) CertificateSigningRequests() CertificateSigningRequestInterface { +func (c *CertificatesV1beta1Client) CertificateSigningRequests() CertificateSigningRequestInterface { return newCertificateSigningRequests(c) } -// NewForConfig creates a new CertificatesV1alpha1Client for the given config. -func NewForConfig(c *rest.Config) (*CertificatesV1alpha1Client, error) { +// NewForConfig creates a new CertificatesV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*CertificatesV1beta1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err @@ -48,12 +48,12 @@ func NewForConfig(c *rest.Config) (*CertificatesV1alpha1Client, error) { if err != nil { return nil, err } - return &CertificatesV1alpha1Client{client}, nil + return &CertificatesV1beta1Client{client}, nil } -// NewForConfigOrDie creates a new CertificatesV1alpha1Client for the given config and +// NewForConfigOrDie creates a new CertificatesV1beta1Client for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *CertificatesV1alpha1Client { +func NewForConfigOrDie(c *rest.Config) *CertificatesV1beta1Client { client, err := NewForConfig(c) if err != nil { panic(err) @@ -61,19 +61,19 @@ func NewForConfigOrDie(c *rest.Config) *CertificatesV1alpha1Client { return client } -// New creates a new CertificatesV1alpha1Client for the given RESTClient. -func New(c rest.Interface) *CertificatesV1alpha1Client { - return &CertificatesV1alpha1Client{c} +// New creates a new CertificatesV1beta1Client for the given RESTClient. +func New(c rest.Interface) *CertificatesV1beta1Client { + return &CertificatesV1beta1Client{c} } func setConfigDefaults(config *rest.Config) error { - gv, err := schema.ParseGroupVersion("certificates.k8s.io/v1alpha1") + gv, err := schema.ParseGroupVersion("certificates.k8s.io/v1beta1") if err != nil { return err } - // if certificates.k8s.io/v1alpha1 is not enabled, return an error + // if certificates.k8s.io/v1beta1 is not enabled, return an error if !api.Registry.IsEnabledVersion(gv) { - return fmt.Errorf("certificates.k8s.io/v1alpha1 is not enabled") + return fmt.Errorf("certificates.k8s.io/v1beta1 is not enabled") } config.APIPath = "/apis" if config.UserAgent == "" { @@ -89,7 +89,7 @@ func setConfigDefaults(config *rest.Config) error { // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *CertificatesV1alpha1Client) RESTClient() rest.Interface { +func (c *CertificatesV1beta1Client) RESTClient() rest.Interface { if c == nil { return nil } diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go similarity index 76% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go index a25662da284..20ea332c254 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -22,7 +22,7 @@ import ( watch "k8s.io/apimachinery/pkg/watch" api "k8s.io/client-go/pkg/api" v1 "k8s.io/client-go/pkg/api/v1" - v1alpha1 "k8s.io/client-go/pkg/apis/certificates/v1alpha1" + v1beta1 "k8s.io/client-go/pkg/apis/certificates/v1beta1" rest "k8s.io/client-go/rest" ) @@ -34,15 +34,15 @@ type CertificateSigningRequestsGetter interface { // CertificateSigningRequestInterface has methods to work with CertificateSigningRequest resources. type CertificateSigningRequestInterface interface { - Create(*v1alpha1.CertificateSigningRequest) (*v1alpha1.CertificateSigningRequest, error) - Update(*v1alpha1.CertificateSigningRequest) (*v1alpha1.CertificateSigningRequest, error) - UpdateStatus(*v1alpha1.CertificateSigningRequest) (*v1alpha1.CertificateSigningRequest, error) + Create(*v1beta1.CertificateSigningRequest) (*v1beta1.CertificateSigningRequest, error) + Update(*v1beta1.CertificateSigningRequest) (*v1beta1.CertificateSigningRequest, error) + UpdateStatus(*v1beta1.CertificateSigningRequest) (*v1beta1.CertificateSigningRequest, error) Delete(name string, options *v1.DeleteOptions) error DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options meta_v1.GetOptions) (*v1alpha1.CertificateSigningRequest, error) - List(opts v1.ListOptions) (*v1alpha1.CertificateSigningRequestList, error) + Get(name string, options meta_v1.GetOptions) (*v1beta1.CertificateSigningRequest, error) + List(opts v1.ListOptions) (*v1beta1.CertificateSigningRequestList, error) Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CertificateSigningRequest, err error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CertificateSigningRequest, err error) CertificateSigningRequestExpansion } @@ -52,15 +52,15 @@ type certificateSigningRequests struct { } // newCertificateSigningRequests returns a CertificateSigningRequests -func newCertificateSigningRequests(c *CertificatesV1alpha1Client) *certificateSigningRequests { +func newCertificateSigningRequests(c *CertificatesV1beta1Client) *certificateSigningRequests { return &certificateSigningRequests{ client: c.RESTClient(), } } // Create takes the representation of a certificateSigningRequest and creates it. Returns the server's representation of the certificateSigningRequest, and an error, if there is any. -func (c *certificateSigningRequests) Create(certificateSigningRequest *v1alpha1.CertificateSigningRequest) (result *v1alpha1.CertificateSigningRequest, err error) { - result = &v1alpha1.CertificateSigningRequest{} +func (c *certificateSigningRequests) Create(certificateSigningRequest *v1beta1.CertificateSigningRequest) (result *v1beta1.CertificateSigningRequest, err error) { + result = &v1beta1.CertificateSigningRequest{} err = c.client.Post(). Resource("certificatesigningrequests"). Body(certificateSigningRequest). @@ -70,8 +70,8 @@ func (c *certificateSigningRequests) Create(certificateSigningRequest *v1alpha1. } // Update takes the representation of a certificateSigningRequest and updates it. Returns the server's representation of the certificateSigningRequest, and an error, if there is any. -func (c *certificateSigningRequests) Update(certificateSigningRequest *v1alpha1.CertificateSigningRequest) (result *v1alpha1.CertificateSigningRequest, err error) { - result = &v1alpha1.CertificateSigningRequest{} +func (c *certificateSigningRequests) Update(certificateSigningRequest *v1beta1.CertificateSigningRequest) (result *v1beta1.CertificateSigningRequest, err error) { + result = &v1beta1.CertificateSigningRequest{} err = c.client.Put(). Resource("certificatesigningrequests"). Name(certificateSigningRequest.Name). @@ -84,8 +84,8 @@ func (c *certificateSigningRequests) Update(certificateSigningRequest *v1alpha1. // UpdateStatus was generated because the type contains a Status member. // Add a +genclientstatus=false comment above the type to avoid generating UpdateStatus(). -func (c *certificateSigningRequests) UpdateStatus(certificateSigningRequest *v1alpha1.CertificateSigningRequest) (result *v1alpha1.CertificateSigningRequest, err error) { - result = &v1alpha1.CertificateSigningRequest{} +func (c *certificateSigningRequests) UpdateStatus(certificateSigningRequest *v1beta1.CertificateSigningRequest) (result *v1beta1.CertificateSigningRequest, err error) { + result = &v1beta1.CertificateSigningRequest{} err = c.client.Put(). Resource("certificatesigningrequests"). Name(certificateSigningRequest.Name). @@ -117,8 +117,8 @@ func (c *certificateSigningRequests) DeleteCollection(options *v1.DeleteOptions, } // Get takes name of the certificateSigningRequest, and returns the corresponding certificateSigningRequest object, and an error if there is any. -func (c *certificateSigningRequests) Get(name string, options meta_v1.GetOptions) (result *v1alpha1.CertificateSigningRequest, err error) { - result = &v1alpha1.CertificateSigningRequest{} +func (c *certificateSigningRequests) Get(name string, options meta_v1.GetOptions) (result *v1beta1.CertificateSigningRequest, err error) { + result = &v1beta1.CertificateSigningRequest{} err = c.client.Get(). Resource("certificatesigningrequests"). Name(name). @@ -129,8 +129,8 @@ func (c *certificateSigningRequests) Get(name string, options meta_v1.GetOptions } // List takes label and field selectors, and returns the list of CertificateSigningRequests that match those selectors. -func (c *certificateSigningRequests) List(opts v1.ListOptions) (result *v1alpha1.CertificateSigningRequestList, err error) { - result = &v1alpha1.CertificateSigningRequestList{} +func (c *certificateSigningRequests) List(opts v1.ListOptions) (result *v1beta1.CertificateSigningRequestList, err error) { + result = &v1beta1.CertificateSigningRequestList{} err = c.client.Get(). Resource("certificatesigningrequests"). VersionedParams(&opts, api.ParameterCodec). @@ -149,8 +149,8 @@ func (c *certificateSigningRequests) Watch(opts v1.ListOptions) (watch.Interface } // Patch applies the patch and returns the patched certificateSigningRequest. -func (c *certificateSigningRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CertificateSigningRequest, err error) { - result = &v1alpha1.CertificateSigningRequest{} +func (c *certificateSigningRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CertificateSigningRequest, err error) { + result = &v1beta1.CertificateSigningRequest{} err = c.client.Patch(pt). Resource("certificatesigningrequests"). SubResource(subresources...). diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest_expansion.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go similarity index 90% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest_expansion.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go index 580f92c2028..4765bba8ab5 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest_expansion.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +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. @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( - certificates "k8s.io/client-go/pkg/apis/certificates/v1alpha1" + certificates "k8s.io/client-go/pkg/apis/certificates/v1beta1" ) type CertificateSigningRequestExpansion interface { diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go similarity index 86% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/doc.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go index b6c14d6a9d2..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. -package v1alpha1 +package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go similarity index 88% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/doc.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificates_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go similarity index 75% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificates_client.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go index cbbe0f1fb8a..550c5bba158 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificates_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go @@ -17,22 +17,22 @@ limitations under the License. package fake import ( - v1alpha1 "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1" + v1beta1 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" rest "k8s.io/client-go/rest" testing "k8s.io/client-go/testing" ) -type FakeCertificatesV1alpha1 struct { +type FakeCertificatesV1beta1 struct { *testing.Fake } -func (c *FakeCertificatesV1alpha1) CertificateSigningRequests() v1alpha1.CertificateSigningRequestInterface { +func (c *FakeCertificatesV1beta1) CertificateSigningRequests() v1beta1.CertificateSigningRequestInterface { return &FakeCertificateSigningRequests{c} } // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *FakeCertificatesV1alpha1) RESTClient() rest.Interface { +func (c *FakeCertificatesV1beta1) RESTClient() rest.Interface { var ret *rest.RESTClient return ret } diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go similarity index 66% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go index ff98b93016e..be8e0823755 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go @@ -23,69 +23,69 @@ import ( types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" v1 "k8s.io/client-go/pkg/api/v1" - v1alpha1 "k8s.io/client-go/pkg/apis/certificates/v1alpha1" + v1beta1 "k8s.io/client-go/pkg/apis/certificates/v1beta1" testing "k8s.io/client-go/testing" ) // FakeCertificateSigningRequests implements CertificateSigningRequestInterface type FakeCertificateSigningRequests struct { - Fake *FakeCertificatesV1alpha1 + Fake *FakeCertificatesV1beta1 } -var certificatesigningrequestsResource = schema.GroupVersionResource{Group: "certificates.k8s.io", Version: "v1alpha1", Resource: "certificatesigningrequests"} +var certificatesigningrequestsResource = schema.GroupVersionResource{Group: "certificates.k8s.io", Version: "v1beta1", Resource: "certificatesigningrequests"} -func (c *FakeCertificateSigningRequests) Create(certificateSigningRequest *v1alpha1.CertificateSigningRequest) (result *v1alpha1.CertificateSigningRequest, err error) { +func (c *FakeCertificateSigningRequests) Create(certificateSigningRequest *v1beta1.CertificateSigningRequest) (result *v1beta1.CertificateSigningRequest, err error) { obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(certificatesigningrequestsResource, certificateSigningRequest), &v1alpha1.CertificateSigningRequest{}) + Invokes(testing.NewRootCreateAction(certificatesigningrequestsResource, certificateSigningRequest), &v1beta1.CertificateSigningRequest{}) if obj == nil { return nil, err } - return obj.(*v1alpha1.CertificateSigningRequest), err + return obj.(*v1beta1.CertificateSigningRequest), err } -func (c *FakeCertificateSigningRequests) Update(certificateSigningRequest *v1alpha1.CertificateSigningRequest) (result *v1alpha1.CertificateSigningRequest, err error) { +func (c *FakeCertificateSigningRequests) Update(certificateSigningRequest *v1beta1.CertificateSigningRequest) (result *v1beta1.CertificateSigningRequest, err error) { obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(certificatesigningrequestsResource, certificateSigningRequest), &v1alpha1.CertificateSigningRequest{}) + Invokes(testing.NewRootUpdateAction(certificatesigningrequestsResource, certificateSigningRequest), &v1beta1.CertificateSigningRequest{}) if obj == nil { return nil, err } - return obj.(*v1alpha1.CertificateSigningRequest), err + return obj.(*v1beta1.CertificateSigningRequest), err } -func (c *FakeCertificateSigningRequests) UpdateStatus(certificateSigningRequest *v1alpha1.CertificateSigningRequest) (*v1alpha1.CertificateSigningRequest, error) { +func (c *FakeCertificateSigningRequests) UpdateStatus(certificateSigningRequest *v1beta1.CertificateSigningRequest) (*v1beta1.CertificateSigningRequest, error) { obj, err := c.Fake. - Invokes(testing.NewRootUpdateSubresourceAction(certificatesigningrequestsResource, "status", certificateSigningRequest), &v1alpha1.CertificateSigningRequest{}) + Invokes(testing.NewRootUpdateSubresourceAction(certificatesigningrequestsResource, "status", certificateSigningRequest), &v1beta1.CertificateSigningRequest{}) if obj == nil { return nil, err } - return obj.(*v1alpha1.CertificateSigningRequest), err + return obj.(*v1beta1.CertificateSigningRequest), err } func (c *FakeCertificateSigningRequests) Delete(name string, options *v1.DeleteOptions) error { _, err := c.Fake. - Invokes(testing.NewRootDeleteAction(certificatesigningrequestsResource, name), &v1alpha1.CertificateSigningRequest{}) + Invokes(testing.NewRootDeleteAction(certificatesigningrequestsResource, name), &v1beta1.CertificateSigningRequest{}) return err } func (c *FakeCertificateSigningRequests) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { action := testing.NewRootDeleteCollectionAction(certificatesigningrequestsResource, listOptions) - _, err := c.Fake.Invokes(action, &v1alpha1.CertificateSigningRequestList{}) + _, err := c.Fake.Invokes(action, &v1beta1.CertificateSigningRequestList{}) return err } -func (c *FakeCertificateSigningRequests) Get(name string, options meta_v1.GetOptions) (result *v1alpha1.CertificateSigningRequest, err error) { +func (c *FakeCertificateSigningRequests) Get(name string, options meta_v1.GetOptions) (result *v1beta1.CertificateSigningRequest, err error) { obj, err := c.Fake. - Invokes(testing.NewRootGetAction(certificatesigningrequestsResource, name), &v1alpha1.CertificateSigningRequest{}) + Invokes(testing.NewRootGetAction(certificatesigningrequestsResource, name), &v1beta1.CertificateSigningRequest{}) if obj == nil { return nil, err } - return obj.(*v1alpha1.CertificateSigningRequest), err + return obj.(*v1beta1.CertificateSigningRequest), err } -func (c *FakeCertificateSigningRequests) List(opts v1.ListOptions) (result *v1alpha1.CertificateSigningRequestList, err error) { +func (c *FakeCertificateSigningRequests) List(opts v1.ListOptions) (result *v1beta1.CertificateSigningRequestList, err error) { obj, err := c.Fake. - Invokes(testing.NewRootListAction(certificatesigningrequestsResource, opts), &v1alpha1.CertificateSigningRequestList{}) + Invokes(testing.NewRootListAction(certificatesigningrequestsResource, opts), &v1beta1.CertificateSigningRequestList{}) if obj == nil { return nil, err } @@ -94,8 +94,8 @@ func (c *FakeCertificateSigningRequests) List(opts v1.ListOptions) (result *v1al if label == nil { label = labels.Everything() } - list := &v1alpha1.CertificateSigningRequestList{} - for _, item := range obj.(*v1alpha1.CertificateSigningRequestList).Items { + list := &v1beta1.CertificateSigningRequestList{} + for _, item := range obj.(*v1beta1.CertificateSigningRequestList).Items { if label.Matches(labels.Set(item.Labels)) { list.Items = append(list.Items, item) } @@ -110,11 +110,11 @@ func (c *FakeCertificateSigningRequests) Watch(opts v1.ListOptions) (watch.Inter } // Patch applies the patch and returns the patched certificateSigningRequest. -func (c *FakeCertificateSigningRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.CertificateSigningRequest, err error) { +func (c *FakeCertificateSigningRequests) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.CertificateSigningRequest, err error) { obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(certificatesigningrequestsResource, name, data, subresources...), &v1alpha1.CertificateSigningRequest{}) + Invokes(testing.NewRootPatchSubresourceAction(certificatesigningrequestsResource, name, data, subresources...), &v1beta1.CertificateSigningRequest{}) if obj == nil { return nil, err } - return obj.(*v1alpha1.CertificateSigningRequest), err + return obj.(*v1beta1.CertificateSigningRequest), err } diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest_expansion.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest_expansion.go similarity index 91% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest_expansion.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest_expansion.go index 7f5277906c4..bf6840781ff 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest_expansion.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors. +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. @@ -17,7 +17,7 @@ limitations under the License. package fake import ( - certificates "k8s.io/client-go/pkg/apis/certificates/v1alpha1" + certificates "k8s.io/client-go/pkg/apis/certificates/v1beta1" "k8s.io/client-go/testing" ) diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/generated_expansion.go b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go similarity index 97% rename from staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/generated_expansion.go rename to staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go index 48a74f4a383..2b7e8ca0bfb 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/generated_expansion.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go @@ -14,4 +14,4 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/doc.go index 2e092f9d264..4b43d84fc95 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go index b6c14d6a9d2..69d4d845d4b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1alpha1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go index 2bbf9dc1bd8..0e58290bab3 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // This package has the automatically generated typed clients. package v1beta1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go index b28ae934afe..c4753e0814f 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake/doc.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1alpha1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] +// This package is generated by client-gen with arguments: --clientset-name=clientset --input=[api/v1,apps/v1beta1,authentication/v1beta1,authorization/v1beta1,autoscaling/v1,batch/v1,batch/v2alpha1,certificates/v1beta1,extensions/v1beta1,policy/v1beta1,rbac/v1beta1,rbac/v1alpha1,storage/v1beta1] // Package fake has the automatically generated clients. package fake diff --git a/staging/src/k8s.io/client-go/pkg/api/conversion.go b/staging/src/k8s.io/client-go/pkg/api/conversion.go index 7808b9f4934..39ce83ad6e4 100644 --- a/staging/src/k8s.io/client-go/pkg/api/conversion.go +++ b/staging/src/k8s.io/client-go/pkg/api/conversion.go @@ -18,13 +18,14 @@ package api import ( "fmt" + "strconv" + "strings" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/client-go/pkg/api/resource" "k8s.io/client-go/pkg/util/intstr" utillabels "k8s.io/client-go/pkg/util/labels" @@ -67,6 +68,8 @@ func addConversionFuncs(scheme *runtime.Scheme) error { Convert_map_to_unversioned_LabelSelector, Convert_unversioned_LabelSelector_to_map, + + Convert_Slice_string_To_Slice_int32, ) } @@ -243,8 +246,21 @@ func Convert_map_to_unversioned_LabelSelector(in *map[string]string, out *metav1 func Convert_unversioned_LabelSelector_to_map(in *metav1.LabelSelector, out *map[string]string, s conversion.Scope) error { var err error *out, err = metav1.LabelSelectorAsMap(in) - if err != nil { - err = field.Invalid(field.NewPath("labelSelector"), *in, fmt.Sprintf("cannot convert to old selector: %v", err)) - } return err } + +// Convert_Slice_string_To_Slice_int32 converts multiple query parameters or +// a single query parameter with a comma delimited value to multiple int32. +// This is used for port forwarding which needs the ports as int32. +func Convert_Slice_string_To_Slice_int32(in *[]string, out *[]int32, s conversion.Scope) error { + for _, s := range *in { + for _, v := range strings.Split(s, ",") { + x, err := strconv.ParseUint(v, 10, 16) + if err != nil { + return fmt.Errorf("cannot convert to []int32: %v", err) + } + *out = append(*out, int32(x)) + } + } + return nil +} diff --git a/staging/src/k8s.io/client-go/pkg/api/helpers.go b/staging/src/k8s.io/client-go/pkg/api/helpers.go index 522e4db6ffa..268626e670b 100644 --- a/staging/src/k8s.io/client-go/pkg/api/helpers.go +++ b/staging/src/k8s.io/client-go/pkg/api/helpers.go @@ -50,6 +50,23 @@ func (c *ConversionError) Error() string { ) } +const ( + // annotation key prefix used to identify non-convertible json paths. + NonConvertibleAnnotationPrefix = "non-convertible.kubernetes.io" +) + +// NonConvertibleFields iterates over the provided map and filters out all but +// any keys with the "non-convertible.kubernetes.io" prefix. +func NonConvertibleFields(annotations map[string]string) map[string]string { + nonConvertibleKeys := map[string]string{} + for key, value := range annotations { + if strings.HasPrefix(key, NonConvertibleAnnotationPrefix) { + nonConvertibleKeys[key] = value + } + } + return nonConvertibleKeys +} + // Semantic can do semantic deep equality checks for api objects. // Example: api.Semantic.DeepEqual(aPod, aPodWithNonNilButEmptyMaps) == true var Semantic = conversion.EqualitiesOrDie( diff --git a/staging/src/k8s.io/client-go/pkg/api/install/install.go b/staging/src/k8s.io/client-go/pkg/api/install/install.go index 648afadeca9..f5927c05dc7 100644 --- a/staging/src/k8s.io/client-go/pkg/api/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/api/install/install.go @@ -102,6 +102,7 @@ func newRESTMapper(externalVersions []schema.GroupVersion) meta.RESTMapper { "PodLogOptions", "PodExecOptions", "PodAttachOptions", + "PodPortForwardOptions", "PodProxyOptions", "NodeProxyOptions", "ServiceProxyOptions", @@ -109,7 +110,7 @@ func newRESTMapper(externalVersions []schema.GroupVersion) meta.RESTMapper { "ThirdPartyResourceData", "ThirdPartyResourceList") - mapper := api.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped) + mapper := meta.NewDefaultRESTMapperFromScheme(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped, api.Scheme) return mapper } diff --git a/staging/src/k8s.io/client-go/pkg/api/register.go b/staging/src/k8s.io/client-go/pkg/api/register.go index 1847e0c057a..0e0809c72f4 100644 --- a/staging/src/k8s.io/client-go/pkg/api/register.go +++ b/staging/src/k8s.io/client-go/pkg/api/register.go @@ -19,6 +19,7 @@ package api import ( "os" + "k8s.io/apimachinery/pkg/apimachinery/announced" "k8s.io/apimachinery/pkg/apimachinery/registered" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -26,6 +27,9 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer" ) +// GroupFactoryRegistry is the APIGroupFactoryRegistry (overlaps a bit with Registry, see comments in package for details) +var GroupFactoryRegistry = make(announced.APIGroupFactoryRegistry) + // Registry is an instance of an API registry. This is an interim step to start removing the idea of a global // API registry. var Registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS")) @@ -125,6 +129,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &PodAttachOptions{}, &PodLogOptions{}, &PodExecOptions{}, + &PodPortForwardOptions{}, &PodProxyOptions{}, &ComponentStatus{}, &ComponentStatusList{}, diff --git a/staging/src/k8s.io/client-go/pkg/api/testapi/testapi.go b/staging/src/k8s.io/client-go/pkg/api/testapi/testapi.go index 447dbcfb926..afaa49c11b2 100644 --- a/staging/src/k8s.io/client-go/pkg/api/testapi/testapi.go +++ b/staging/src/k8s.io/client-go/pkg/api/testapi/testapi.go @@ -200,8 +200,8 @@ func init() { externalGroupVersion := schema.GroupVersion{Group: apps.GroupName, Version: api.Registry.GroupOrDie(apps.GroupName).GroupVersion.Version} Groups[apps.GroupName] = TestGroup{ externalGroupVersion: externalGroupVersion, - internalGroupVersion: extensions.SchemeGroupVersion, - internalTypes: api.Scheme.KnownTypes(extensions.SchemeGroupVersion), + internalGroupVersion: apps.SchemeGroupVersion, + internalTypes: api.Scheme.KnownTypes(apps.SchemeGroupVersion), externalTypes: api.Scheme.KnownTypes(externalGroupVersion), } } diff --git a/staging/src/k8s.io/client-go/pkg/api/types.go b/staging/src/k8s.io/client-go/pkg/api/types.go index 15f99e22993..ecb539ce100 100644 --- a/staging/src/k8s.io/client-go/pkg/api/types.go +++ b/staging/src/k8s.io/client-go/pkg/api/types.go @@ -1142,6 +1142,9 @@ type EnvFromSource struct { // The ConfigMap to select from. //+optional ConfigMapRef *ConfigMapEnvSource + // The Secret to select from. + //+optional + SecretRef *SecretEnvSource } // ConfigMapEnvSource selects a ConfigMap to populate the environment @@ -1154,6 +1157,16 @@ type ConfigMapEnvSource struct { LocalObjectReference } +// SecretEnvSource selects a Secret to populate the environment +// variables with. +// +// The contents of the target Secret's Data field will represent the +// key-value pairs as environment variables. +type SecretEnvSource struct { + // The Secret to select from. + LocalObjectReference +} + // HTTPHeader describes a custom header to be used in HTTP probes type HTTPHeader struct { // The header field name @@ -2940,6 +2953,15 @@ type PodExecOptions struct { Command []string } +// PodPortForwardOptions is the query options to a Pod's port forward call +type PodPortForwardOptions struct { + metav1.TypeMeta + + // The list of ports to forward + // +optional + Ports []int32 +} + // PodProxyOptions is the query options to a Pod's proxy call type PodProxyOptions struct { metav1.TypeMeta diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/conversion.go b/staging/src/k8s.io/client-go/pkg/api/v1/conversion.go index f9e7fb73810..c03da073a39 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/conversion.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/conversion.go @@ -35,9 +35,6 @@ const ( // Value used to identify mirror pods from pre-v1.1 kubelet. mirrorAnnotationValue_1_0 = "mirror" - - // annotation key prefix used to identify non-convertible json paths. - NonConvertibleAnnotationPrefix = "kubernetes.io/non-convertible" ) // This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are @@ -311,7 +308,7 @@ func Convert_extensions_ReplicaSet_to_v1_ReplicationController(in *extensions.Re if out.Annotations == nil { out.Annotations = make(map[string]string) } - out.Annotations[NonConvertibleAnnotationPrefix+"/"+fieldErr.Field] = reflect.ValueOf(fieldErr.BadValue).String() + out.Annotations[api.NonConvertibleAnnotationPrefix+"/"+fieldErr.Field] = reflect.ValueOf(fieldErr.BadValue).String() } if err := Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(&in.Status, &out.Status, s); err != nil { return err diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go b/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go index f2c14e8e57a..e9a6aa76efb 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go @@ -132,6 +132,7 @@ limitations under the License. PodExecOptions PodList PodLogOptions + PodPortForwardOptions PodProxyOptions PodSecurityContext PodSignature @@ -161,6 +162,7 @@ limitations under the License. ResourceRequirements SELinuxOptions Secret + SecretEnvSource SecretKeySelector SecretList SecretVolumeSource @@ -660,222 +662,230 @@ func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } func (*PodLogOptions) ProtoMessage() {} func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} } +func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } +func (*PodPortForwardOptions) ProtoMessage() {} +func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } + func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } func (*PodProxyOptions) ProtoMessage() {} -func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } func (*PodSecurityContext) ProtoMessage() {} -func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } func (m *PodSignature) Reset() { *m = PodSignature{} } func (*PodSignature) ProtoMessage() {} -func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } func (m *PodSpec) Reset() { *m = PodSpec{} } func (*PodSpec) ProtoMessage() {} -func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } func (m *PodStatus) Reset() { *m = PodStatus{} } func (*PodStatus) ProtoMessage() {} -func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } func (*PodStatusResult) ProtoMessage() {} -func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } func (m *PodTemplate) Reset() { *m = PodTemplate{} } func (*PodTemplate) ProtoMessage() {} -func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } func (*PodTemplateList) ProtoMessage() {} -func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} -func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{118} + return fileDescriptorGenerated, []int{119} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{124} + return fileDescriptorGenerated, []int{125} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{125} + return fileDescriptorGenerated, []int{126} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{126} + return fileDescriptorGenerated, []int{127} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{127} + return fileDescriptorGenerated, []int{128} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } + +func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } +func (*SecretEnvSource) ProtoMessage() {} +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{156} + return fileDescriptorGenerated, []int{158} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{157} + return fileDescriptorGenerated, []int{159} } func init() { @@ -986,6 +996,7 @@ func init() { proto.RegisterType((*PodExecOptions)(nil), "k8s.io.client-go.pkg.api.v1.PodExecOptions") proto.RegisterType((*PodList)(nil), "k8s.io.client-go.pkg.api.v1.PodList") proto.RegisterType((*PodLogOptions)(nil), "k8s.io.client-go.pkg.api.v1.PodLogOptions") + proto.RegisterType((*PodPortForwardOptions)(nil), "k8s.io.client-go.pkg.api.v1.PodPortForwardOptions") proto.RegisterType((*PodProxyOptions)(nil), "k8s.io.client-go.pkg.api.v1.PodProxyOptions") proto.RegisterType((*PodSecurityContext)(nil), "k8s.io.client-go.pkg.api.v1.PodSecurityContext") proto.RegisterType((*PodSignature)(nil), "k8s.io.client-go.pkg.api.v1.PodSignature") @@ -1015,6 +1026,7 @@ func init() { proto.RegisterType((*ResourceRequirements)(nil), "k8s.io.client-go.pkg.api.v1.ResourceRequirements") proto.RegisterType((*SELinuxOptions)(nil), "k8s.io.client-go.pkg.api.v1.SELinuxOptions") proto.RegisterType((*Secret)(nil), "k8s.io.client-go.pkg.api.v1.Secret") + proto.RegisterType((*SecretEnvSource)(nil), "k8s.io.client-go.pkg.api.v1.SecretEnvSource") proto.RegisterType((*SecretKeySelector)(nil), "k8s.io.client-go.pkg.api.v1.SecretKeySelector") proto.RegisterType((*SecretList)(nil), "k8s.io.client-go.pkg.api.v1.SecretList") proto.RegisterType((*SecretVolumeSource)(nil), "k8s.io.client-go.pkg.api.v1.SecretVolumeSource") @@ -2609,6 +2621,16 @@ func (m *EnvFromSource) MarshalTo(data []byte) (int, error) { } i += n33 } + if m.SecretRef != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) + n34, err := m.SecretRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n34 + } return i, nil } @@ -2639,11 +2661,11 @@ func (m *EnvVar) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.ValueFrom.Size())) - n34, err := m.ValueFrom.MarshalTo(data[i:]) + n35, err := m.ValueFrom.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n34 + i += n35 } return i, nil } @@ -2667,42 +2689,42 @@ func (m *EnvVarSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.FieldRef.Size())) - n35, err := m.FieldRef.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n35 - } - if m.ResourceFieldRef != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.ResourceFieldRef.Size())) - n36, err := m.ResourceFieldRef.MarshalTo(data[i:]) + n36, err := m.FieldRef.MarshalTo(data[i:]) if err != nil { return 0, err } i += n36 } - if m.ConfigMapKeyRef != nil { - data[i] = 0x1a + if m.ResourceFieldRef != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.ConfigMapKeyRef.Size())) - n37, err := m.ConfigMapKeyRef.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ResourceFieldRef.Size())) + n37, err := m.ResourceFieldRef.MarshalTo(data[i:]) if err != nil { return 0, err } i += n37 } - if m.SecretKeyRef != nil { - data[i] = 0x22 + if m.ConfigMapKeyRef != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.SecretKeyRef.Size())) - n38, err := m.SecretKeyRef.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ConfigMapKeyRef.Size())) + n38, err := m.ConfigMapKeyRef.MarshalTo(data[i:]) if err != nil { return 0, err } i += n38 } + if m.SecretKeyRef != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecretKeyRef.Size())) + n39, err := m.SecretKeyRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n39 + } return i, nil } @@ -2724,19 +2746,19 @@ func (m *Event) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n39, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n39 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.InvolvedObject.Size())) - n40, err := m.InvolvedObject.MarshalTo(data[i:]) + n40, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n40 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.InvolvedObject.Size())) + n41, err := m.InvolvedObject.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n41 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -2748,27 +2770,27 @@ func (m *Event) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.Source.Size())) - n41, err := m.Source.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n41 - data[i] = 0x32 - i++ - i = encodeVarintGenerated(data, i, uint64(m.FirstTimestamp.Size())) - n42, err := m.FirstTimestamp.MarshalTo(data[i:]) + n42, err := m.Source.MarshalTo(data[i:]) if err != nil { return 0, err } i += n42 - data[i] = 0x3a + data[i] = 0x32 i++ - i = encodeVarintGenerated(data, i, uint64(m.LastTimestamp.Size())) - n43, err := m.LastTimestamp.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.FirstTimestamp.Size())) + n43, err := m.FirstTimestamp.MarshalTo(data[i:]) if err != nil { return 0, err } i += n43 + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTimestamp.Size())) + n44, err := m.LastTimestamp.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n44 data[i] = 0x40 i++ i = encodeVarintGenerated(data, i, uint64(m.Count)) @@ -2797,11 +2819,11 @@ func (m *EventList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n44, err := m.ListMeta.MarshalTo(data[i:]) + n45, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n44 + i += n45 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -2953,11 +2975,11 @@ func (m *FlexVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) - n45, err := m.SecretRef.MarshalTo(data[i:]) + n46, err := m.SecretRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n45 + i += n46 } data[i] = 0x20 i++ @@ -3136,11 +3158,11 @@ func (m *HTTPGetAction) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) - n46, err := m.Port.MarshalTo(data[i:]) + n47, err := m.Port.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n46 + i += n47 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Host))) @@ -3209,32 +3231,32 @@ func (m *Handler) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Exec.Size())) - n47, err := m.Exec.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n47 - } - if m.HTTPGet != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.HTTPGet.Size())) - n48, err := m.HTTPGet.MarshalTo(data[i:]) + n48, err := m.Exec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n48 } - if m.TCPSocket != nil { - data[i] = 0x1a + if m.HTTPGet != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.TCPSocket.Size())) - n49, err := m.TCPSocket.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.HTTPGet.Size())) + n49, err := m.HTTPGet.MarshalTo(data[i:]) if err != nil { return 0, err } i += n49 } + if m.TCPSocket != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.TCPSocket.Size())) + n50, err := m.TCPSocket.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n50 + } return i, nil } @@ -3355,21 +3377,21 @@ func (m *Lifecycle) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PostStart.Size())) - n50, err := m.PostStart.MarshalTo(data[i:]) + n51, err := m.PostStart.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n50 + i += n51 } if m.PreStop != nil { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PreStop.Size())) - n51, err := m.PreStop.MarshalTo(data[i:]) + n52, err := m.PreStop.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n51 + i += n52 } return i, nil } @@ -3392,19 +3414,19 @@ func (m *LimitRange) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n52, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n52 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n53, err := m.Spec.MarshalTo(data[i:]) + n53, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n53 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n54, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n54 return i, nil } @@ -3442,11 +3464,11 @@ func (m *LimitRangeItem) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n54, err := (&v).MarshalTo(data[i:]) + n55, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n54 + i += n55 } } if len(m.Min) > 0 { @@ -3464,11 +3486,11 @@ func (m *LimitRangeItem) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n55, err := (&v).MarshalTo(data[i:]) + n56, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n55 + i += n56 } } if len(m.Default) > 0 { @@ -3486,11 +3508,11 @@ func (m *LimitRangeItem) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n56, err := (&v).MarshalTo(data[i:]) + n57, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n56 + i += n57 } } if len(m.DefaultRequest) > 0 { @@ -3508,11 +3530,11 @@ func (m *LimitRangeItem) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n57, err := (&v).MarshalTo(data[i:]) + n58, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n57 + i += n58 } } if len(m.MaxLimitRequestRatio) > 0 { @@ -3530,11 +3552,11 @@ func (m *LimitRangeItem) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n58, err := (&v).MarshalTo(data[i:]) + n59, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n58 + i += n59 } } return i, nil @@ -3558,11 +3580,11 @@ func (m *LimitRangeList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n59, err := m.ListMeta.MarshalTo(data[i:]) + n60, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n59 + i += n60 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -3626,11 +3648,11 @@ func (m *List) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n60, err := m.ListMeta.MarshalTo(data[i:]) + n61, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n60 + i += n61 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -3819,27 +3841,27 @@ func (m *Namespace) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n61, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n61 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n62, err := m.Spec.MarshalTo(data[i:]) + n62, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n62 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n63, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n63, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n63 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n64, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n64 return i, nil } @@ -3861,11 +3883,11 @@ func (m *NamespaceList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n64, err := m.ListMeta.MarshalTo(data[i:]) + n65, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n64 + i += n65 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -3954,27 +3976,27 @@ func (m *Node) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n65, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n65 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n66, err := m.Spec.MarshalTo(data[i:]) + n66, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n66 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n67, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n67, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n67 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n68, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n68 return i, nil } @@ -4023,11 +4045,11 @@ func (m *NodeAffinity) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.RequiredDuringSchedulingIgnoredDuringExecution.Size())) - n68, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(data[i:]) + n69, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n68 + i += n69 } if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { @@ -4070,19 +4092,19 @@ func (m *NodeCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastHeartbeatTime.Size())) - n69, err := m.LastHeartbeatTime.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n69 - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n70, err := m.LastTransitionTime.MarshalTo(data[i:]) + n70, err := m.LastHeartbeatTime.MarshalTo(data[i:]) if err != nil { return 0, err } i += n70 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n71, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n71 data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -4112,11 +4134,11 @@ func (m *NodeDaemonEndpoints) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.KubeletEndpoint.Size())) - n71, err := m.KubeletEndpoint.MarshalTo(data[i:]) + n72, err := m.KubeletEndpoint.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n71 + i += n72 return i, nil } @@ -4138,11 +4160,11 @@ func (m *NodeList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n72, err := m.ListMeta.MarshalTo(data[i:]) + n73, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n72 + i += n73 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -4210,11 +4232,11 @@ func (m *NodeResources) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n73, err := (&v).MarshalTo(data[i:]) + n74, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n73 + i += n74 } } return i, nil @@ -4389,11 +4411,11 @@ func (m *NodeStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n74, err := (&v).MarshalTo(data[i:]) + n75, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n74 + i += n75 } } if len(m.Allocatable) > 0 { @@ -4411,11 +4433,11 @@ func (m *NodeStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n75, err := (&v).MarshalTo(data[i:]) + n76, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n75 + i += n76 } } data[i] = 0x1a @@ -4449,19 +4471,19 @@ func (m *NodeStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x32 i++ i = encodeVarintGenerated(data, i, uint64(m.DaemonEndpoints.Size())) - n76, err := m.DaemonEndpoints.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n76 - data[i] = 0x3a - i++ - i = encodeVarintGenerated(data, i, uint64(m.NodeInfo.Size())) - n77, err := m.NodeInfo.MarshalTo(data[i:]) + n77, err := m.DaemonEndpoints.MarshalTo(data[i:]) if err != nil { return 0, err } i += n77 + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.NodeInfo.Size())) + n78, err := m.NodeInfo.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n78 if len(m.Images) > 0 { for _, msg := range m.Images { data[i] = 0x42 @@ -4633,20 +4655,20 @@ func (m *ObjectMeta) MarshalTo(data []byte) (int, error) { data[i] = 0x42 i++ i = encodeVarintGenerated(data, i, uint64(m.CreationTimestamp.Size())) - n78, err := m.CreationTimestamp.MarshalTo(data[i:]) + n79, err := m.CreationTimestamp.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n78 + i += n79 if m.DeletionTimestamp != nil { data[i] = 0x4a i++ i = encodeVarintGenerated(data, i, uint64(m.DeletionTimestamp.Size())) - n79, err := m.DeletionTimestamp.MarshalTo(data[i:]) + n80, err := m.DeletionTimestamp.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n79 + i += n80 } if m.DeletionGracePeriodSeconds != nil { data[i] = 0x50 @@ -4785,27 +4807,27 @@ func (m *PersistentVolume) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n80, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n80 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n81, err := m.Spec.MarshalTo(data[i:]) + n81, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n81 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n82, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n82, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n82 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n83, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n83 return i, nil } @@ -4827,27 +4849,27 @@ func (m *PersistentVolumeClaim) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n83, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n83 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n84, err := m.Spec.MarshalTo(data[i:]) + n84, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n84 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n85, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n85, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n85 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n86, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n86 return i, nil } @@ -4869,11 +4891,11 @@ func (m *PersistentVolumeClaimList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n86, err := m.ListMeta.MarshalTo(data[i:]) + n87, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n86 + i += n87 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -4922,11 +4944,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Resources.Size())) - n87, err := m.Resources.MarshalTo(data[i:]) + n88, err := m.Resources.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n87 + i += n88 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.VolumeName))) @@ -4935,11 +4957,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.Selector.Size())) - n88, err := m.Selector.MarshalTo(data[i:]) + n89, err := m.Selector.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n88 + i += n89 } return i, nil } @@ -4993,11 +5015,11 @@ func (m *PersistentVolumeClaimStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n89, err := (&v).MarshalTo(data[i:]) + n90, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n89 + i += n90 } } return i, nil @@ -5051,11 +5073,11 @@ func (m *PersistentVolumeList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n90, err := m.ListMeta.MarshalTo(data[i:]) + n91, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n90 + i += n91 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -5090,163 +5112,163 @@ func (m *PersistentVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) - n91, err := m.GCEPersistentDisk.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n91 - } - if m.AWSElasticBlockStore != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) - n92, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) + n92, err := m.GCEPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n92 } - if m.HostPath != nil { - data[i] = 0x1a + if m.AWSElasticBlockStore != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) - n93, err := m.HostPath.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n93, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) if err != nil { return 0, err } i += n93 } - if m.Glusterfs != nil { - data[i] = 0x22 + if m.HostPath != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) - n94, err := m.Glusterfs.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) + n94, err := m.HostPath.MarshalTo(data[i:]) if err != nil { return 0, err } i += n94 } - if m.NFS != nil { - data[i] = 0x2a + if m.Glusterfs != nil { + data[i] = 0x22 i++ - i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) - n95, err := m.NFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n95, err := m.Glusterfs.MarshalTo(data[i:]) if err != nil { return 0, err } i += n95 } - if m.RBD != nil { - data[i] = 0x32 + if m.NFS != nil { + data[i] = 0x2a i++ - i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) - n96, err := m.RBD.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n96, err := m.NFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n96 } - if m.ISCSI != nil { - data[i] = 0x3a + if m.RBD != nil { + data[i] = 0x32 i++ - i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) - n97, err := m.ISCSI.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n97, err := m.RBD.MarshalTo(data[i:]) if err != nil { return 0, err } i += n97 } - if m.Cinder != nil { - data[i] = 0x42 + if m.ISCSI != nil { + data[i] = 0x3a i++ - i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) - n98, err := m.Cinder.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n98, err := m.ISCSI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n98 } - if m.CephFS != nil { - data[i] = 0x4a + if m.Cinder != nil { + data[i] = 0x42 i++ - i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) - n99, err := m.CephFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n99, err := m.Cinder.MarshalTo(data[i:]) if err != nil { return 0, err } i += n99 } - if m.FC != nil { - data[i] = 0x52 + if m.CephFS != nil { + data[i] = 0x4a i++ - i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) - n100, err := m.FC.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n100, err := m.CephFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n100 } - if m.Flocker != nil { - data[i] = 0x5a + if m.FC != nil { + data[i] = 0x52 i++ - i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) - n101, err := m.Flocker.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) + n101, err := m.FC.MarshalTo(data[i:]) if err != nil { return 0, err } i += n101 } - if m.FlexVolume != nil { - data[i] = 0x62 + if m.Flocker != nil { + data[i] = 0x5a i++ - i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) - n102, err := m.FlexVolume.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n102, err := m.Flocker.MarshalTo(data[i:]) if err != nil { return 0, err } i += n102 } - if m.AzureFile != nil { - data[i] = 0x6a + if m.FlexVolume != nil { + data[i] = 0x62 i++ - i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) - n103, err := m.AzureFile.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n103, err := m.FlexVolume.MarshalTo(data[i:]) if err != nil { return 0, err } i += n103 } - if m.VsphereVolume != nil { - data[i] = 0x72 + if m.AzureFile != nil { + data[i] = 0x6a i++ - i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) - n104, err := m.VsphereVolume.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) + n104, err := m.AzureFile.MarshalTo(data[i:]) if err != nil { return 0, err } i += n104 } - if m.Quobyte != nil { - data[i] = 0x7a + if m.VsphereVolume != nil { + data[i] = 0x72 i++ - i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) - n105, err := m.Quobyte.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) + n105, err := m.VsphereVolume.MarshalTo(data[i:]) if err != nil { return 0, err } i += n105 } + if m.Quobyte != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) + n106, err := m.Quobyte.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n106 + } if m.AzureDisk != nil { data[i] = 0x82 i++ data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) - n106, err := m.AzureDisk.MarshalTo(data[i:]) + n107, err := m.AzureDisk.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n106 + i += n107 } if m.PhotonPersistentDisk != nil { data[i] = 0x8a @@ -5254,11 +5276,11 @@ func (m *PersistentVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.PhotonPersistentDisk.Size())) - n107, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) + n108, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n107 + i += n108 } return i, nil } @@ -5293,21 +5315,21 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n108, err := (&v).MarshalTo(data[i:]) + n109, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n108 + i += n109 } } data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeSource.Size())) - n109, err := m.PersistentVolumeSource.MarshalTo(data[i:]) + n110, err := m.PersistentVolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n109 + i += n110 if len(m.AccessModes) > 0 { for _, s := range m.AccessModes { data[i] = 0x1a @@ -5327,11 +5349,11 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.ClaimRef.Size())) - n110, err := m.ClaimRef.MarshalTo(data[i:]) + n111, err := m.ClaimRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n110 + i += n111 } data[i] = 0x2a i++ @@ -5414,27 +5436,27 @@ func (m *Pod) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n111, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n111 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n112, err := m.Spec.MarshalTo(data[i:]) + n112, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n112 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n113, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n113, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n113 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n114, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n114 return i, nil } @@ -5499,11 +5521,11 @@ func (m *PodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LabelSelector.Size())) - n114, err := m.LabelSelector.MarshalTo(data[i:]) + n115, err := m.LabelSelector.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n114 + i += n115 } if len(m.Namespaces) > 0 { for _, s := range m.Namespaces { @@ -5649,19 +5671,19 @@ func (m *PodCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastProbeTime.Size())) - n115, err := m.LastProbeTime.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n115 - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n116, err := m.LastTransitionTime.MarshalTo(data[i:]) + n116, err := m.LastProbeTime.MarshalTo(data[i:]) if err != nil { return 0, err } i += n116 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n117, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n117 data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -5760,11 +5782,11 @@ func (m *PodList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n117, err := m.ListMeta.MarshalTo(data[i:]) + n118, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n117 + i += n118 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -5824,11 +5846,11 @@ func (m *PodLogOptions) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.SinceTime.Size())) - n118, err := m.SinceTime.MarshalTo(data[i:]) + n119, err := m.SinceTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n118 + i += n119 } data[i] = 0x30 i++ @@ -5851,6 +5873,31 @@ func (m *PodLogOptions) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *PodPortForwardOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodPortForwardOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Ports) > 0 { + for _, num := range m.Ports { + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(num)) + } + } + return i, nil +} + func (m *PodProxyOptions) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -5892,11 +5939,11 @@ func (m *PodSecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n119, err := m.SELinuxOptions.MarshalTo(data[i:]) + n120, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n119 + i += n120 } if m.RunAsUser != nil { data[i] = 0x10 @@ -5947,11 +5994,11 @@ func (m *PodSignature) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PodController.Size())) - n120, err := m.PodController.MarshalTo(data[i:]) + n121, err := m.PodController.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n120 + i += n121 } return i, nil } @@ -6070,11 +6117,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x72 i++ i = encodeVarintGenerated(data, i, uint64(m.SecurityContext.Size())) - n121, err := m.SecurityContext.MarshalTo(data[i:]) + n122, err := m.SecurityContext.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n121 + i += n122 } if len(m.ImagePullSecrets) > 0 { for _, msg := range m.ImagePullSecrets { @@ -6106,11 +6153,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.Affinity.Size())) - n122, err := m.Affinity.MarshalTo(data[i:]) + n123, err := m.Affinity.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n122 + i += n123 } data[i] = 0x9a i++ @@ -6172,11 +6219,11 @@ func (m *PodStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.StartTime.Size())) - n123, err := m.StartTime.MarshalTo(data[i:]) + n124, err := m.StartTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n123 + i += n124 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -6215,19 +6262,19 @@ func (m *PodStatusResult) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n124, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n124 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n125, err := m.Status.MarshalTo(data[i:]) + n125, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n125 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n126, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n126 return i, nil } @@ -6249,19 +6296,19 @@ func (m *PodTemplate) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n126, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n126 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n127, err := m.Template.MarshalTo(data[i:]) + n127, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n127 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) + n128, err := m.Template.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n128 return i, nil } @@ -6283,11 +6330,11 @@ func (m *PodTemplateList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n128, err := m.ListMeta.MarshalTo(data[i:]) + n129, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n128 + i += n129 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6321,19 +6368,19 @@ func (m *PodTemplateSpec) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n129, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n129 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n130, err := m.Spec.MarshalTo(data[i:]) + n130, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n130 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n131, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n131 return i, nil } @@ -6379,19 +6426,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PodSignature.Size())) - n131, err := m.PodSignature.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n131 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) - n132, err := m.EvictionTime.MarshalTo(data[i:]) + n132, err := m.PodSignature.MarshalTo(data[i:]) if err != nil { return 0, err } i += n132 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) + n133, err := m.EvictionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n133 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -6424,11 +6471,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Preference.Size())) - n133, err := m.Preference.MarshalTo(data[i:]) + n134, err := m.Preference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n133 + i += n134 return i, nil } @@ -6450,11 +6497,11 @@ func (m *Probe) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Handler.Size())) - n134, err := m.Handler.MarshalTo(data[i:]) + n135, err := m.Handler.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n134 + i += n135 data[i] = 0x10 i++ i = encodeVarintGenerated(data, i, uint64(m.InitialDelaySeconds)) @@ -6569,11 +6616,11 @@ func (m *RBDVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) - n135, err := m.SecretRef.MarshalTo(data[i:]) + n136, err := m.SecretRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n135 + i += n136 } data[i] = 0x40 i++ @@ -6604,11 +6651,11 @@ func (m *RangeAllocation) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n136, err := m.ObjectMeta.MarshalTo(data[i:]) + n137, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n136 + i += n137 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Range))) @@ -6640,27 +6687,27 @@ func (m *ReplicationController) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n137, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n137 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n138, err := m.Spec.MarshalTo(data[i:]) + n138, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n138 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n139, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n139, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n139 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n140, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n140 return i, nil } @@ -6690,11 +6737,11 @@ func (m *ReplicationControllerCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n140, err := m.LastTransitionTime.MarshalTo(data[i:]) + n141, err := m.LastTransitionTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n140 + i += n141 data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -6724,11 +6771,11 @@ func (m *ReplicationControllerList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n141, err := m.ListMeta.MarshalTo(data[i:]) + n142, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n141 + i += n142 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6785,11 +6832,11 @@ func (m *ReplicationControllerSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n142, err := m.Template.MarshalTo(data[i:]) + n143, err := m.Template.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n142 + i += n143 } data[i] = 0x20 i++ @@ -6868,11 +6915,11 @@ func (m *ResourceFieldSelector) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Divisor.Size())) - n143, err := m.Divisor.MarshalTo(data[i:]) + n144, err := m.Divisor.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n143 + i += n144 return i, nil } @@ -6894,27 +6941,27 @@ func (m *ResourceQuota) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n144, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n144 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n145, err := m.Spec.MarshalTo(data[i:]) + n145, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n145 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n146, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n146, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n146 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n147, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n147 return i, nil } @@ -6936,11 +6983,11 @@ func (m *ResourceQuotaList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n147, err := m.ListMeta.MarshalTo(data[i:]) + n148, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n147 + i += n148 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6986,11 +7033,11 @@ func (m *ResourceQuotaSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n148, err := (&v).MarshalTo(data[i:]) + n149, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n148 + i += n149 } } if len(m.Scopes) > 0 { @@ -7041,11 +7088,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n149, err := (&v).MarshalTo(data[i:]) + n150, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n149 + i += n150 } } if len(m.Used) > 0 { @@ -7063,11 +7110,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n150, err := (&v).MarshalTo(data[i:]) + n151, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n150 + i += n151 } } return i, nil @@ -7103,11 +7150,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n151, err := (&v).MarshalTo(data[i:]) + n152, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n151 + i += n152 } } if len(m.Requests) > 0 { @@ -7125,11 +7172,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n152, err := (&v).MarshalTo(data[i:]) + n153, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n152 + i += n153 } } return i, nil @@ -7187,11 +7234,11 @@ func (m *Secret) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n153, err := m.ObjectMeta.MarshalTo(data[i:]) + n154, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n153 + i += n154 if len(m.Data) > 0 { for k := range m.Data { data[i] = 0x12 @@ -7233,6 +7280,32 @@ func (m *Secret) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *SecretEnvSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SecretEnvSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) + n155, err := m.LocalObjectReference.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n155 + return i, nil +} + func (m *SecretKeySelector) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -7251,11 +7324,11 @@ func (m *SecretKeySelector) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n154, err := m.LocalObjectReference.MarshalTo(data[i:]) + n156, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n154 + i += n156 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Key))) @@ -7281,11 +7354,11 @@ func (m *SecretList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n155, err := m.ListMeta.MarshalTo(data[i:]) + n157, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n155 + i += n157 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7359,11 +7432,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Capabilities.Size())) - n156, err := m.Capabilities.MarshalTo(data[i:]) + n158, err := m.Capabilities.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n156 + i += n158 } if m.Privileged != nil { data[i] = 0x10 @@ -7379,11 +7452,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n157, err := m.SELinuxOptions.MarshalTo(data[i:]) + n159, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n157 + i += n159 } if m.RunAsUser != nil { data[i] = 0x20 @@ -7431,11 +7504,11 @@ func (m *SerializedReference) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Reference.Size())) - n158, err := m.Reference.MarshalTo(data[i:]) + n160, err := m.Reference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n158 + i += n160 return i, nil } @@ -7457,27 +7530,27 @@ func (m *Service) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n159, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n159 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n160, err := m.Spec.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n160 - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n161, err := m.Status.MarshalTo(data[i:]) + n161, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n161 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n162, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n162 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n163, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n163 return i, nil } @@ -7499,11 +7572,11 @@ func (m *ServiceAccount) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n162, err := m.ObjectMeta.MarshalTo(data[i:]) + n164, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n162 + i += n164 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { data[i] = 0x12 @@ -7549,11 +7622,11 @@ func (m *ServiceAccountList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n163, err := m.ListMeta.MarshalTo(data[i:]) + n165, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n163 + i += n165 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7587,11 +7660,11 @@ func (m *ServiceList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n164, err := m.ListMeta.MarshalTo(data[i:]) + n166, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n164 + i += n166 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7636,11 +7709,11 @@ func (m *ServicePort) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.TargetPort.Size())) - n165, err := m.TargetPort.MarshalTo(data[i:]) + n167, err := m.TargetPort.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n165 + i += n167 data[i] = 0x28 i++ i = encodeVarintGenerated(data, i, uint64(m.NodePort)) @@ -7799,11 +7872,11 @@ func (m *ServiceStatus) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LoadBalancer.Size())) - n166, err := m.LoadBalancer.MarshalTo(data[i:]) + n168, err := m.LoadBalancer.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n166 + i += n168 return i, nil } @@ -7851,11 +7924,11 @@ func (m *TCPSocketAction) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) - n167, err := m.Port.MarshalTo(data[i:]) + n169, err := m.Port.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n167 + i += n169 return i, nil } @@ -7945,11 +8018,11 @@ func (m *Volume) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.VolumeSource.Size())) - n168, err := m.VolumeSource.MarshalTo(data[i:]) + n170, err := m.VolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n168 + i += n170 return i, nil } @@ -8010,163 +8083,163 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) - n169, err := m.HostPath.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n169 - } - if m.EmptyDir != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) - n170, err := m.EmptyDir.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n170 - } - if m.GCEPersistentDisk != nil { - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) - n171, err := m.GCEPersistentDisk.MarshalTo(data[i:]) + n171, err := m.HostPath.MarshalTo(data[i:]) if err != nil { return 0, err } i += n171 } - if m.AWSElasticBlockStore != nil { - data[i] = 0x22 + if m.EmptyDir != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) - n172, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) + n172, err := m.EmptyDir.MarshalTo(data[i:]) if err != nil { return 0, err } i += n172 } - if m.GitRepo != nil { - data[i] = 0x2a + if m.GCEPersistentDisk != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) - n173, err := m.GitRepo.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) + n173, err := m.GCEPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n173 } - if m.Secret != nil { - data[i] = 0x32 + if m.AWSElasticBlockStore != nil { + data[i] = 0x22 i++ - i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) - n174, err := m.Secret.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n174, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) if err != nil { return 0, err } i += n174 } - if m.NFS != nil { - data[i] = 0x3a + if m.GitRepo != nil { + data[i] = 0x2a i++ - i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) - n175, err := m.NFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) + n175, err := m.GitRepo.MarshalTo(data[i:]) if err != nil { return 0, err } i += n175 } - if m.ISCSI != nil { - data[i] = 0x42 + if m.Secret != nil { + data[i] = 0x32 i++ - i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) - n176, err := m.ISCSI.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) + n176, err := m.Secret.MarshalTo(data[i:]) if err != nil { return 0, err } i += n176 } - if m.Glusterfs != nil { - data[i] = 0x4a + if m.NFS != nil { + data[i] = 0x3a i++ - i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) - n177, err := m.Glusterfs.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n177, err := m.NFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n177 } - if m.PersistentVolumeClaim != nil { - data[i] = 0x52 + if m.ISCSI != nil { + data[i] = 0x42 i++ - i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) - n178, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n178, err := m.ISCSI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n178 } - if m.RBD != nil { - data[i] = 0x5a + if m.Glusterfs != nil { + data[i] = 0x4a i++ - i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) - n179, err := m.RBD.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n179, err := m.Glusterfs.MarshalTo(data[i:]) if err != nil { return 0, err } i += n179 } - if m.FlexVolume != nil { - data[i] = 0x62 + if m.PersistentVolumeClaim != nil { + data[i] = 0x52 i++ - i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) - n180, err := m.FlexVolume.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) + n180, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) if err != nil { return 0, err } i += n180 } - if m.Cinder != nil { - data[i] = 0x6a + if m.RBD != nil { + data[i] = 0x5a i++ - i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) - n181, err := m.Cinder.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n181, err := m.RBD.MarshalTo(data[i:]) if err != nil { return 0, err } i += n181 } - if m.CephFS != nil { - data[i] = 0x72 + if m.FlexVolume != nil { + data[i] = 0x62 i++ - i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) - n182, err := m.CephFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n182, err := m.FlexVolume.MarshalTo(data[i:]) if err != nil { return 0, err } i += n182 } - if m.Flocker != nil { - data[i] = 0x7a + if m.Cinder != nil { + data[i] = 0x6a i++ - i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) - n183, err := m.Flocker.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n183, err := m.Cinder.MarshalTo(data[i:]) if err != nil { return 0, err } i += n183 } + if m.CephFS != nil { + data[i] = 0x72 + i++ + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n184, err := m.CephFS.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n184 + } + if m.Flocker != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n185, err := m.Flocker.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n185 + } if m.DownwardAPI != nil { data[i] = 0x82 i++ data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) - n184, err := m.DownwardAPI.MarshalTo(data[i:]) + n186, err := m.DownwardAPI.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n184 + i += n186 } if m.FC != nil { data[i] = 0x8a @@ -8174,11 +8247,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) - n185, err := m.FC.MarshalTo(data[i:]) + n187, err := m.FC.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n185 + i += n187 } if m.AzureFile != nil { data[i] = 0x92 @@ -8186,11 +8259,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) - n186, err := m.AzureFile.MarshalTo(data[i:]) + n188, err := m.AzureFile.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n186 + i += n188 } if m.ConfigMap != nil { data[i] = 0x9a @@ -8198,11 +8271,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) - n187, err := m.ConfigMap.MarshalTo(data[i:]) + n189, err := m.ConfigMap.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n187 + i += n189 } if m.VsphereVolume != nil { data[i] = 0xa2 @@ -8210,11 +8283,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) - n188, err := m.VsphereVolume.MarshalTo(data[i:]) + n190, err := m.VsphereVolume.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n188 + i += n190 } if m.Quobyte != nil { data[i] = 0xaa @@ -8222,11 +8295,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) - n189, err := m.Quobyte.MarshalTo(data[i:]) + n191, err := m.Quobyte.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n189 + i += n191 } if m.AzureDisk != nil { data[i] = 0xb2 @@ -8234,11 +8307,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) - n190, err := m.AzureDisk.MarshalTo(data[i:]) + n192, err := m.AzureDisk.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n190 + i += n192 } if m.PhotonPersistentDisk != nil { data[i] = 0xba @@ -8246,11 +8319,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.PhotonPersistentDisk.Size())) - n191, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) + n193, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n191 + i += n193 } return i, nil } @@ -8302,11 +8375,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PodAffinityTerm.Size())) - n192, err := m.PodAffinityTerm.MarshalTo(data[i:]) + n194, err := m.PodAffinityTerm.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n192 + i += n194 return i, nil } @@ -8919,6 +8992,10 @@ func (m *EnvFromSource) Size() (n int) { l = m.ConfigMapRef.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -10117,6 +10194,17 @@ func (m *PodLogOptions) Size() (n int) { return n } +func (m *PodPortForwardOptions) Size() (n int) { + var l int + _ = l + if len(m.Ports) > 0 { + for _, e := range m.Ports { + n += 1 + sovGenerated(uint64(e)) + } + } + return n +} + func (m *PodProxyOptions) Size() (n int) { var l int _ = l @@ -10632,6 +10720,14 @@ func (m *Secret) Size() (n int) { return n } +func (m *SecretEnvSource) Size() (n int) { + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *SecretKeySelector) Size() (n int) { var l int _ = l @@ -11504,6 +11600,7 @@ func (this *EnvFromSource) String() string { s := strings.Join([]string{`&EnvFromSource{`, `Prefix:` + fmt.Sprintf("%v", this.Prefix) + `,`, `ConfigMapRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapRef), "ConfigMapEnvSource", "ConfigMapEnvSource", 1) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretEnvSource", "SecretEnvSource", 1) + `,`, `}`, }, "") return s @@ -12518,6 +12615,16 @@ func (this *PodLogOptions) String() string { }, "") return s } +func (this *PodPortForwardOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodPortForwardOptions{`, + `Ports:` + fmt.Sprintf("%v", this.Ports) + `,`, + `}`, + }, "") + return s +} func (this *PodProxyOptions) String() string { if this == nil { return "nil" @@ -12983,6 +13090,16 @@ func (this *Secret) String() string { }, "") return s } +func (this *SecretEnvSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretEnvSource{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *SecretKeySelector) String() string { if this == nil { return "nil" @@ -18661,6 +18778,39 @@ func (m *EnvFromSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &SecretEnvSource{} + } + if err := m.SecretRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -30488,6 +30638,76 @@ func (m *PodLogOptions) Unmarshal(data []byte) error { } return nil } +func (m *PodPortForwardOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodPortForwardOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodPortForwardOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Ports = append(m.Ports, v) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PodProxyOptions) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -35853,6 +36073,86 @@ func (m *Secret) Unmarshal(data []byte) error { } return nil } +func (m *SecretEnvSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretEnvSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretEnvSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LocalObjectReference.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SecretKeySelector) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -39624,643 +39924,646 @@ var ( ) var fileDescriptorGenerated = []byte{ - // 10194 bytes of a gzipped FileDescriptorProto + // 10242 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xc7, - 0x75, 0x98, 0x66, 0x17, 0x5f, 0xfb, 0xf0, 0x79, 0x7d, 0x1f, 0x04, 0x61, 0xf2, 0x70, 0x1c, 0x8a, + 0x75, 0x98, 0x66, 0x17, 0x5f, 0xfb, 0xf0, 0x79, 0x7d, 0x1f, 0x04, 0x21, 0xf2, 0x70, 0x1c, 0x8a, 0xd4, 0x91, 0x3c, 0x02, 0xba, 0x23, 0x29, 0x9e, 0x44, 0x85, 0x12, 0x80, 0x05, 0xee, 0xa0, 0x3b, - 0xdc, 0x2d, 0x7b, 0x71, 0x77, 0x94, 0xc4, 0x48, 0x1c, 0xec, 0x34, 0x80, 0xd1, 0xcd, 0xce, 0x2c, - 0x67, 0x66, 0x71, 0x07, 0x29, 0xaa, 0xb2, 0x65, 0x96, 0x5d, 0xa9, 0x28, 0x89, 0x52, 0x2e, 0x55, - 0xa5, 0xe2, 0xa4, 0xec, 0xa4, 0xca, 0x29, 0x25, 0xae, 0x7c, 0x28, 0x8a, 0x2d, 0xb9, 0xac, 0x24, + 0xdc, 0x2d, 0x7b, 0x71, 0x77, 0x94, 0xc4, 0x88, 0x1c, 0xec, 0x34, 0x80, 0xe1, 0xcd, 0xce, 0x2c, + 0x67, 0x66, 0x71, 0x07, 0x2a, 0xaa, 0xb2, 0x65, 0x96, 0x5d, 0xa9, 0x28, 0x89, 0x52, 0x2e, 0x55, + 0xb9, 0xe2, 0xa4, 0xec, 0xa4, 0xca, 0x29, 0x25, 0xae, 0x7c, 0x28, 0x8a, 0x2d, 0xb9, 0xac, 0x24, 0x95, 0xc4, 0x56, 0xe4, 0x7c, 0xb8, 0x94, 0x72, 0x55, 0xec, 0x58, 0x55, 0x88, 0x09, 0xa7, 0xf2, - 0x33, 0x3f, 0x92, 0x7f, 0x48, 0x2a, 0x49, 0xf5, 0xe7, 0x74, 0xcf, 0xee, 0x62, 0x66, 0xc1, 0x03, - 0x44, 0xb9, 0xf2, 0x6f, 0xf7, 0xbd, 0xd7, 0xaf, 0x3f, 0xa6, 0xfb, 0xf5, 0x7b, 0xaf, 0x5f, 0xbf, - 0x86, 0x4b, 0xf7, 0xaf, 0xc6, 0x73, 0x5e, 0x38, 0x7f, 0xbf, 0xbd, 0x41, 0xa2, 0x80, 0x24, 0x24, - 0x9e, 0x6f, 0xdd, 0xdf, 0x9a, 0x77, 0x5a, 0xde, 0xfc, 0xce, 0xe5, 0xf9, 0x2d, 0x12, 0x90, 0xc8, - 0x49, 0x88, 0x3b, 0xd7, 0x8a, 0xc2, 0x24, 0x44, 0x4f, 0x70, 0xea, 0xb9, 0x94, 0x7a, 0xae, 0x75, - 0x7f, 0x6b, 0xce, 0x69, 0x79, 0x73, 0x3b, 0x97, 0x67, 0x5e, 0xdc, 0xf2, 0x92, 0xed, 0xf6, 0xc6, - 0x5c, 0x23, 0x6c, 0xce, 0x6f, 0x85, 0x5b, 0xe1, 0x3c, 0x2b, 0xb4, 0xd1, 0xde, 0x64, 0xff, 0xd8, - 0x1f, 0xf6, 0x8b, 0x33, 0x9b, 0x79, 0x59, 0x54, 0xed, 0xb4, 0xbc, 0xa6, 0xd3, 0xd8, 0xf6, 0x02, - 0x12, 0xed, 0xca, 0xca, 0xe3, 0xf9, 0x26, 0x49, 0x9c, 0x2e, 0x4d, 0x98, 0x99, 0xef, 0x55, 0x2a, - 0x6a, 0x07, 0x89, 0xd7, 0x24, 0x1d, 0x05, 0x3e, 0x96, 0x57, 0x20, 0x6e, 0x6c, 0x93, 0xa6, 0xd3, - 0x51, 0xee, 0x4a, 0xef, 0x91, 0x89, 0x48, 0x1c, 0xb6, 0xa3, 0x46, 0x67, 0x5d, 0x97, 0xbb, 0x97, - 0x69, 0x27, 0x9e, 0x3f, 0xef, 0x05, 0x49, 0x9c, 0x44, 0xd9, 0x22, 0xf6, 0x1f, 0x5a, 0x70, 0x61, - 0xe1, 0x5e, 0x7d, 0xd9, 0x77, 0xe2, 0xc4, 0x6b, 0x2c, 0xfa, 0x61, 0xe3, 0x7e, 0x3d, 0x09, 0x23, - 0x72, 0x37, 0xf4, 0xdb, 0x4d, 0x52, 0x67, 0xf5, 0xa0, 0x4b, 0x30, 0xb2, 0xc3, 0xfe, 0xaf, 0x56, - 0xa7, 0xad, 0x0b, 0xd6, 0xc5, 0xca, 0xe2, 0xd4, 0x0f, 0xf7, 0x66, 0x3f, 0xb4, 0xbf, 0x37, 0x3b, - 0x72, 0x57, 0xc0, 0xb1, 0xa2, 0x40, 0xcf, 0xc2, 0xd0, 0x66, 0xbc, 0xbe, 0xdb, 0x22, 0xd3, 0x25, - 0x46, 0x3b, 0x21, 0x68, 0x87, 0x56, 0xea, 0x14, 0x8a, 0x05, 0x16, 0xcd, 0x43, 0xa5, 0xe5, 0x44, - 0x89, 0x97, 0x78, 0x61, 0x30, 0x5d, 0xbe, 0x60, 0x5d, 0x1c, 0x5c, 0x3c, 0x25, 0x48, 0x2b, 0x35, - 0x89, 0xc0, 0x29, 0x0d, 0x6d, 0x46, 0x44, 0x1c, 0xf7, 0x76, 0xe0, 0xef, 0x4e, 0x0f, 0x5c, 0xb0, - 0x2e, 0x8e, 0xa4, 0xcd, 0xc0, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0xbd, 0x12, 0x8c, 0x2c, 0x6c, 0x6e, - 0x7a, 0x81, 0x97, 0xec, 0xa2, 0xb7, 0x61, 0x2c, 0x08, 0x5d, 0x22, 0xff, 0xb3, 0x5e, 0x8c, 0x5e, - 0x79, 0x7e, 0xee, 0xb0, 0x09, 0x35, 0x77, 0x4b, 0x2b, 0xb1, 0x38, 0xb5, 0xbf, 0x37, 0x3b, 0xa6, - 0x43, 0xb0, 0xc1, 0x11, 0xbd, 0x05, 0xa3, 0xad, 0xd0, 0x55, 0x15, 0x94, 0x58, 0x05, 0xcf, 0x1d, - 0x5e, 0x41, 0x2d, 0x2d, 0xb0, 0x38, 0xb9, 0xbf, 0x37, 0x3b, 0xaa, 0x01, 0xb0, 0xce, 0x0e, 0xf9, - 0x30, 0x49, 0xff, 0x06, 0x89, 0xa7, 0x6a, 0x28, 0xb3, 0x1a, 0x5e, 0xcc, 0xaf, 0x41, 0x2b, 0xb4, - 0x78, 0x7a, 0x7f, 0x6f, 0x76, 0x32, 0x03, 0xc4, 0x59, 0xd6, 0xf6, 0x97, 0x61, 0x62, 0x21, 0x49, - 0x9c, 0xc6, 0x36, 0x71, 0xf9, 0xf7, 0x45, 0x2f, 0xc3, 0x40, 0xe0, 0x34, 0x89, 0xf8, 0xfa, 0x17, - 0xc4, 0xb0, 0x0f, 0xdc, 0x72, 0x9a, 0xe4, 0x60, 0x6f, 0x76, 0xea, 0x4e, 0xe0, 0xbd, 0xd3, 0x16, - 0x73, 0x86, 0xc2, 0x30, 0xa3, 0x46, 0x57, 0x00, 0x5c, 0xb2, 0xe3, 0x35, 0x48, 0xcd, 0x49, 0xb6, - 0xc5, 0x6c, 0x40, 0xa2, 0x2c, 0x54, 0x15, 0x06, 0x6b, 0x54, 0xf6, 0xd7, 0x2c, 0xa8, 0x2c, 0xec, - 0x84, 0x9e, 0x5b, 0x0b, 0xdd, 0x18, 0xb5, 0x61, 0xb2, 0x15, 0x91, 0x4d, 0x12, 0x29, 0xd0, 0xb4, - 0x75, 0xa1, 0x7c, 0x71, 0xf4, 0xca, 0x95, 0x9c, 0x7e, 0x9b, 0x85, 0x96, 0x83, 0x24, 0xda, 0x5d, - 0x7c, 0x4c, 0x54, 0x3d, 0x99, 0xc1, 0xe2, 0x6c, 0x1d, 0xf6, 0x5f, 0x2b, 0xc1, 0xd9, 0x85, 0x2f, - 0xb7, 0x23, 0x52, 0xf5, 0xe2, 0xfb, 0xd9, 0xa5, 0xe0, 0x7a, 0xf1, 0xfd, 0x5b, 0xe9, 0x60, 0xa8, - 0x39, 0x58, 0x15, 0x70, 0xac, 0x28, 0xd0, 0x8b, 0x30, 0x4c, 0x7f, 0xdf, 0xc1, 0xab, 0xa2, 0xf7, - 0xa7, 0x05, 0xf1, 0x68, 0xd5, 0x49, 0x9c, 0x2a, 0x47, 0x61, 0x49, 0x83, 0xd6, 0x60, 0xb4, 0xc1, - 0x64, 0xc4, 0xd6, 0x5a, 0xe8, 0x12, 0xf6, 0x85, 0x2b, 0x8b, 0x2f, 0x50, 0xf2, 0xa5, 0x14, 0x7c, - 0xb0, 0x37, 0x3b, 0xcd, 0xdb, 0x26, 0x58, 0x68, 0x38, 0xac, 0x97, 0x47, 0xb6, 0x5a, 0x88, 0x03, - 0x8c, 0x13, 0x74, 0x59, 0x84, 0x17, 0xb5, 0x35, 0x35, 0xc8, 0xd6, 0xd4, 0x58, 0x8f, 0xf5, 0xf4, - 0xf7, 0x2d, 0x31, 0x26, 0x2b, 0x9e, 0x6f, 0x8a, 0x87, 0x2b, 0x00, 0x31, 0x69, 0x44, 0x24, 0xd1, - 0x46, 0x45, 0x7d, 0xe6, 0xba, 0xc2, 0x60, 0x8d, 0x8a, 0x2e, 0xfe, 0x78, 0xdb, 0x89, 0xd8, 0x6c, - 0x11, 0x63, 0xa3, 0x16, 0x7f, 0x5d, 0x22, 0x70, 0x4a, 0x63, 0x2c, 0xfe, 0x72, 0xee, 0xe2, 0xff, - 0x57, 0x16, 0x0c, 0x2f, 0x7a, 0x81, 0xeb, 0x05, 0x5b, 0xe8, 0x6d, 0x18, 0xa1, 0xd2, 0xdc, 0x75, - 0x12, 0x47, 0xac, 0xfb, 0x8f, 0xca, 0xc9, 0xa3, 0x0b, 0x65, 0x39, 0x7d, 0xe2, 0x39, 0x4a, 0x4d, - 0x27, 0xd1, 0xed, 0x8d, 0x2f, 0x91, 0x46, 0xb2, 0x46, 0x12, 0x27, 0xed, 0x4e, 0x0a, 0xc3, 0x8a, - 0x2b, 0xba, 0x03, 0x43, 0x89, 0x13, 0x6d, 0x91, 0x44, 0x2c, 0xfb, 0x9c, 0x45, 0xc9, 0x79, 0x60, + 0x33, 0x3f, 0x92, 0x7f, 0x97, 0x54, 0x92, 0xea, 0xcf, 0xe9, 0x9e, 0xdd, 0xc5, 0xcc, 0x82, 0x07, + 0x88, 0x72, 0xf9, 0xdf, 0xee, 0x7b, 0xaf, 0x5f, 0x7f, 0x4c, 0xf7, 0xeb, 0xf7, 0x5e, 0xbf, 0x7e, + 0x0d, 0x17, 0xee, 0x5e, 0x8e, 0xe7, 0xbc, 0x70, 0xfe, 0x6e, 0x7b, 0x83, 0x44, 0x01, 0x49, 0x48, + 0x3c, 0xdf, 0xba, 0xbb, 0x35, 0xef, 0xb4, 0xbc, 0xf9, 0x9d, 0x8b, 0xf3, 0x5b, 0x24, 0x20, 0x91, + 0x93, 0x10, 0x77, 0xae, 0x15, 0x85, 0x49, 0x88, 0x1e, 0xe3, 0xd4, 0x73, 0x29, 0xf5, 0x5c, 0xeb, + 0xee, 0xd6, 0x9c, 0xd3, 0xf2, 0xe6, 0x76, 0x2e, 0xce, 0x3c, 0xbf, 0xe5, 0x25, 0xdb, 0xed, 0x8d, + 0xb9, 0x46, 0xd8, 0x9c, 0xdf, 0x0a, 0xb7, 0xc2, 0x79, 0x56, 0x68, 0xa3, 0xbd, 0xc9, 0xfe, 0xb1, + 0x3f, 0xec, 0x17, 0x67, 0x36, 0xf3, 0xa2, 0xa8, 0xda, 0x69, 0x79, 0x4d, 0xa7, 0xb1, 0xed, 0x05, + 0x24, 0xda, 0x95, 0x95, 0xc7, 0xf3, 0x4d, 0x92, 0x38, 0x5d, 0x9a, 0x30, 0x33, 0xdf, 0xab, 0x54, + 0xd4, 0x0e, 0x12, 0xaf, 0x49, 0x3a, 0x0a, 0x7c, 0x32, 0xaf, 0x40, 0xdc, 0xd8, 0x26, 0x4d, 0xa7, + 0xa3, 0xdc, 0xa5, 0xde, 0x23, 0x13, 0x91, 0x38, 0x6c, 0x47, 0x8d, 0xce, 0xba, 0x2e, 0x76, 0x2f, + 0xd3, 0x4e, 0x3c, 0x7f, 0xde, 0x0b, 0x92, 0x38, 0x89, 0xb2, 0x45, 0xec, 0x3f, 0xb4, 0xe0, 0xdc, + 0xc2, 0x9d, 0xfa, 0xb2, 0xef, 0xc4, 0x89, 0xd7, 0x58, 0xf4, 0xc3, 0xc6, 0xdd, 0x7a, 0x12, 0x46, + 0xe4, 0x76, 0xe8, 0xb7, 0x9b, 0xa4, 0xce, 0xea, 0x41, 0x17, 0x60, 0x64, 0x87, 0xfd, 0x5f, 0xad, + 0x4e, 0x5b, 0xe7, 0xac, 0xf3, 0x95, 0xc5, 0xa9, 0x1f, 0xee, 0xcd, 0x7e, 0x64, 0x7f, 0x6f, 0x76, + 0xe4, 0xb6, 0x80, 0x63, 0x45, 0x81, 0x9e, 0x86, 0xa1, 0xcd, 0x78, 0x7d, 0xb7, 0x45, 0xa6, 0x4b, + 0x8c, 0x76, 0x42, 0xd0, 0x0e, 0xad, 0xd4, 0x29, 0x14, 0x0b, 0x2c, 0x9a, 0x87, 0x4a, 0xcb, 0x89, + 0x12, 0x2f, 0xf1, 0xc2, 0x60, 0xba, 0x7c, 0xce, 0x3a, 0x3f, 0xb8, 0x78, 0x42, 0x90, 0x56, 0x6a, + 0x12, 0x81, 0x53, 0x1a, 0xda, 0x8c, 0x88, 0x38, 0xee, 0xcd, 0xc0, 0xdf, 0x9d, 0x1e, 0x38, 0x67, + 0x9d, 0x1f, 0x49, 0x9b, 0x81, 0x05, 0x1c, 0x2b, 0x0a, 0xfb, 0x7b, 0x25, 0x18, 0x59, 0xd8, 0xdc, + 0xf4, 0x02, 0x2f, 0xd9, 0x45, 0x6f, 0xc1, 0x58, 0x10, 0xba, 0x44, 0xfe, 0x67, 0xbd, 0x18, 0xbd, + 0xf4, 0xec, 0xdc, 0x41, 0x13, 0x6a, 0xee, 0x86, 0x56, 0x62, 0x71, 0x6a, 0x7f, 0x6f, 0x76, 0x4c, + 0x87, 0x60, 0x83, 0x23, 0x7a, 0x03, 0x46, 0x5b, 0xa1, 0xab, 0x2a, 0x28, 0xb1, 0x0a, 0x9e, 0x39, + 0xb8, 0x82, 0x5a, 0x5a, 0x60, 0x71, 0x72, 0x7f, 0x6f, 0x76, 0x54, 0x03, 0x60, 0x9d, 0x1d, 0xf2, + 0x61, 0x92, 0xfe, 0x0d, 0x12, 0x4f, 0xd5, 0x50, 0x66, 0x35, 0x3c, 0x9f, 0x5f, 0x83, 0x56, 0x68, + 0xf1, 0xe4, 0xfe, 0xde, 0xec, 0x64, 0x06, 0x88, 0xb3, 0xac, 0xed, 0x77, 0x61, 0x62, 0x21, 0x49, + 0x9c, 0xc6, 0x36, 0x71, 0xf9, 0xf7, 0x45, 0x2f, 0xc2, 0x40, 0xe0, 0x34, 0x89, 0xf8, 0xfa, 0xe7, + 0xc4, 0xb0, 0x0f, 0xdc, 0x70, 0x9a, 0xe4, 0xc1, 0xde, 0xec, 0xd4, 0xad, 0xc0, 0x7b, 0xa7, 0x2d, + 0xe6, 0x0c, 0x85, 0x61, 0x46, 0x8d, 0x2e, 0x01, 0xb8, 0x64, 0xc7, 0x6b, 0x90, 0x9a, 0x93, 0x6c, + 0x8b, 0xd9, 0x80, 0x44, 0x59, 0xa8, 0x2a, 0x0c, 0xd6, 0xa8, 0xec, 0xaf, 0x59, 0x50, 0x59, 0xd8, + 0x09, 0x3d, 0xb7, 0x16, 0xba, 0x31, 0x6a, 0xc3, 0x64, 0x2b, 0x22, 0x9b, 0x24, 0x52, 0xa0, 0x69, + 0xeb, 0x5c, 0xf9, 0xfc, 0xe8, 0xa5, 0x4b, 0x39, 0xfd, 0x36, 0x0b, 0x2d, 0x07, 0x49, 0xb4, 0xbb, + 0xf8, 0x88, 0xa8, 0x7a, 0x32, 0x83, 0xc5, 0xd9, 0x3a, 0xec, 0xbf, 0x51, 0x82, 0xd3, 0x0b, 0xef, + 0xb6, 0x23, 0x52, 0xf5, 0xe2, 0xbb, 0xd9, 0xa5, 0xe0, 0x7a, 0xf1, 0xdd, 0x1b, 0xe9, 0x60, 0xa8, + 0x39, 0x58, 0x15, 0x70, 0xac, 0x28, 0xd0, 0xf3, 0x30, 0x4c, 0x7f, 0xdf, 0xc2, 0xab, 0xa2, 0xf7, + 0x27, 0x05, 0xf1, 0x68, 0xd5, 0x49, 0x9c, 0x2a, 0x47, 0x61, 0x49, 0x83, 0xd6, 0x60, 0xb4, 0xc1, + 0x64, 0xc4, 0xd6, 0x5a, 0xe8, 0x12, 0xf6, 0x85, 0x2b, 0x8b, 0xcf, 0x51, 0xf2, 0xa5, 0x14, 0xfc, + 0x60, 0x6f, 0x76, 0x9a, 0xb7, 0x4d, 0xb0, 0xd0, 0x70, 0x58, 0x2f, 0x8f, 0x6c, 0xb5, 0x10, 0x07, + 0x18, 0x27, 0xe8, 0xb2, 0x08, 0xcf, 0x6b, 0x6b, 0x6a, 0x90, 0xad, 0xa9, 0xb1, 0x1e, 0xeb, 0xe9, + 0x1f, 0x58, 0x62, 0x4c, 0x56, 0x3c, 0xdf, 0x14, 0x0f, 0x97, 0x00, 0x62, 0xd2, 0x88, 0x48, 0xa2, + 0x8d, 0x8a, 0xfa, 0xcc, 0x75, 0x85, 0xc1, 0x1a, 0x15, 0x5d, 0xfc, 0xf1, 0xb6, 0x13, 0xb1, 0xd9, + 0x22, 0xc6, 0x46, 0x2d, 0xfe, 0xba, 0x44, 0xe0, 0x94, 0xc6, 0x58, 0xfc, 0xe5, 0xdc, 0xc5, 0xff, + 0xaf, 0x2d, 0x18, 0x5e, 0xf4, 0x02, 0xd7, 0x0b, 0xb6, 0xd0, 0x5b, 0x30, 0x42, 0xa5, 0xb9, 0xeb, + 0x24, 0x8e, 0x58, 0xf7, 0x9f, 0x90, 0x93, 0x47, 0x17, 0xca, 0x72, 0xfa, 0xc4, 0x73, 0x94, 0x9a, + 0x4e, 0xa2, 0x9b, 0x1b, 0x6f, 0x93, 0x46, 0xb2, 0x46, 0x12, 0x27, 0xed, 0x4e, 0x0a, 0xc3, 0x8a, + 0x2b, 0xba, 0x05, 0x43, 0x89, 0x13, 0x6d, 0x91, 0x44, 0x2c, 0xfb, 0x9c, 0x45, 0xc9, 0x79, 0x60, 0x3a, 0xe5, 0x48, 0xd0, 0x20, 0xa9, 0x80, 0x5c, 0x67, 0x4c, 0xb0, 0x60, 0x66, 0x37, 0x60, 0x6c, - 0xc9, 0x69, 0x39, 0x1b, 0x9e, 0xef, 0x25, 0x1e, 0x89, 0xd1, 0x47, 0xa0, 0xec, 0xb8, 0x2e, 0x5b, - 0x00, 0x95, 0xc5, 0xb3, 0xfb, 0x7b, 0xb3, 0xe5, 0x05, 0xd7, 0x3d, 0xd8, 0x9b, 0x05, 0x45, 0xb5, - 0x8b, 0x29, 0x05, 0x7a, 0x1e, 0x06, 0xdc, 0x28, 0x6c, 0x4d, 0x97, 0x18, 0xe5, 0x39, 0xba, 0x52, - 0xab, 0x51, 0xd8, 0xca, 0x90, 0x32, 0x1a, 0xfb, 0x77, 0x4b, 0x80, 0x96, 0x48, 0x6b, 0x7b, 0xa5, - 0x6e, 0x7c, 0xd3, 0x8b, 0x30, 0xd2, 0x0c, 0x03, 0x2f, 0x09, 0xa3, 0x58, 0x54, 0xc8, 0xe6, 0xc5, - 0x9a, 0x80, 0x61, 0x85, 0x45, 0x17, 0x60, 0xa0, 0x95, 0x2e, 0xef, 0x31, 0x29, 0x1a, 0xd8, 0xc2, - 0x66, 0x18, 0x4a, 0xd1, 0x8e, 0x49, 0x24, 0xe6, 0xb3, 0xa2, 0xb8, 0x13, 0x93, 0x08, 0x33, 0x4c, - 0x3a, 0x83, 0xe8, 0xdc, 0x12, 0xb3, 0x35, 0x33, 0x83, 0x28, 0x06, 0x6b, 0x54, 0xe8, 0x8b, 0x50, - 0xe1, 0xff, 0x30, 0xd9, 0x64, 0x53, 0x37, 0x57, 0x28, 0xdc, 0x0c, 0x1b, 0x8e, 0x9f, 0x1d, 0xfc, - 0x71, 0x36, 0xe3, 0x24, 0x23, 0x9c, 0xf2, 0x34, 0x66, 0xdc, 0x50, 0xee, 0x8c, 0xfb, 0xeb, 0x16, - 0xa0, 0x25, 0x2f, 0x70, 0x49, 0x74, 0x02, 0x5b, 0x67, 0x7f, 0x8b, 0xe1, 0xc7, 0xb4, 0x69, 0x61, - 0xb3, 0x15, 0x06, 0x24, 0x48, 0x96, 0xc2, 0xc0, 0xe5, 0xdb, 0xe9, 0x27, 0x60, 0x20, 0xa1, 0x55, - 0xf1, 0x66, 0x3d, 0x2b, 0x3f, 0x0b, 0xad, 0xe0, 0x60, 0x6f, 0xf6, 0x5c, 0x67, 0x09, 0xd6, 0x04, - 0x56, 0x06, 0x7d, 0x1c, 0x86, 0xe2, 0xc4, 0x49, 0xda, 0xb1, 0x68, 0xe8, 0x53, 0xb2, 0xa1, 0x75, - 0x06, 0x3d, 0xd8, 0x9b, 0x9d, 0x54, 0xc5, 0x38, 0x08, 0x8b, 0x02, 0xe8, 0x39, 0x18, 0x6e, 0x92, - 0x38, 0x76, 0xb6, 0xa4, 0x80, 0x9b, 0x14, 0x65, 0x87, 0xd7, 0x38, 0x18, 0x4b, 0x3c, 0x7a, 0x1a, - 0x06, 0x49, 0x14, 0x85, 0x91, 0x98, 0x11, 0xe3, 0x82, 0x70, 0x70, 0x99, 0x02, 0x31, 0xc7, 0xd9, - 0xff, 0xd9, 0x82, 0x49, 0xd5, 0x56, 0x5e, 0xd7, 0x09, 0x2c, 0x79, 0x17, 0xa0, 0x21, 0x3b, 0x18, - 0xb3, 0x85, 0xa6, 0xd5, 0xd1, 0x7d, 0xfa, 0x75, 0x0e, 0x68, 0x5a, 0x87, 0x02, 0xc5, 0x58, 0xe3, - 0x6b, 0xff, 0x1b, 0x0b, 0x4e, 0x67, 0xfa, 0x76, 0xd3, 0x8b, 0x13, 0xf4, 0x56, 0x47, 0xff, 0xe6, - 0x8a, 0xf5, 0x8f, 0x96, 0x66, 0xbd, 0x53, 0xf3, 0x45, 0x42, 0xb4, 0xbe, 0x61, 0x18, 0xf4, 0x12, - 0xd2, 0x94, 0xdd, 0x7a, 0xb1, 0x60, 0xb7, 0x78, 0xfb, 0xd2, 0xaf, 0xb4, 0x4a, 0x79, 0x60, 0xce, - 0xca, 0xfe, 0x5f, 0x16, 0x54, 0x96, 0xc2, 0x60, 0xd3, 0xdb, 0x5a, 0x73, 0x5a, 0x27, 0xf0, 0x7d, - 0xea, 0x30, 0xc0, 0xb8, 0xf3, 0x2e, 0x5c, 0xce, 0xeb, 0x82, 0x68, 0xd8, 0x1c, 0xdd, 0x53, 0xb9, - 0xb2, 0xa0, 0xc4, 0x14, 0x05, 0x61, 0xc6, 0x6c, 0xe6, 0x55, 0xa8, 0x28, 0x02, 0x34, 0x05, 0xe5, - 0xfb, 0x84, 0x6b, 0x92, 0x15, 0x4c, 0x7f, 0xa2, 0x33, 0x30, 0xb8, 0xe3, 0xf8, 0x6d, 0xb1, 0x78, - 0x31, 0xff, 0xf3, 0x89, 0xd2, 0x55, 0xcb, 0xfe, 0x65, 0xb6, 0x02, 0x45, 0x25, 0xcb, 0xc1, 0x8e, - 0x10, 0x0e, 0xef, 0x5a, 0x70, 0xc6, 0xef, 0x22, 0x94, 0xc4, 0x98, 0x1c, 0x45, 0x9c, 0x3d, 0x21, - 0x9a, 0x7d, 0xa6, 0x1b, 0x16, 0x77, 0xad, 0xcd, 0xfe, 0xbe, 0x05, 0x67, 0x54, 0xeb, 0x6e, 0x90, - 0xdd, 0x3a, 0xf1, 0x49, 0x23, 0x09, 0xa3, 0x0f, 0x48, 0xfb, 0xd0, 0x93, 0x7c, 0xa4, 0xb9, 0xa4, - 0x19, 0x15, 0x0c, 0xca, 0x37, 0xc8, 0x2e, 0x1b, 0x76, 0xfb, 0xb7, 0x2d, 0x18, 0x57, 0xcd, 0x3f, - 0x81, 0xe5, 0x71, 0xd3, 0x5c, 0x1e, 0x1f, 0x29, 0x38, 0xb7, 0x7a, 0x2c, 0x8c, 0x5f, 0x29, 0xc1, - 0x59, 0x45, 0x63, 0x6c, 0x1d, 0x1f, 0x90, 0xd1, 0xef, 0xaf, 0xbb, 0x37, 0xc8, 0xee, 0x7a, 0x48, - 0xf7, 0xfe, 0xee, 0xdd, 0x45, 0x97, 0x61, 0xd4, 0x25, 0x9b, 0x4e, 0xdb, 0x4f, 0x94, 0x8a, 0x3b, - 0xc8, 0x6d, 0x9f, 0x6a, 0x0a, 0xc6, 0x3a, 0x8d, 0xfd, 0x6b, 0xc0, 0x44, 0x47, 0xe2, 0xd0, 0x8f, - 0x46, 0x95, 0x09, 0xcd, 0x12, 0x19, 0xd3, 0x2d, 0x11, 0x61, 0x75, 0x3c, 0x0d, 0x83, 0x5e, 0x93, - 0x6e, 0x2f, 0x25, 0x73, 0xd7, 0x58, 0xa5, 0x40, 0xcc, 0x71, 0xe8, 0x19, 0x18, 0x6e, 0x84, 0xcd, - 0xa6, 0x13, 0xb8, 0xd3, 0x65, 0xa6, 0xde, 0x8c, 0xd2, 0x1d, 0x68, 0x89, 0x83, 0xb0, 0xc4, 0xa1, - 0x27, 0x60, 0xc0, 0x89, 0xb6, 0xe2, 0xe9, 0x01, 0x46, 0x33, 0x42, 0x6b, 0x5a, 0x88, 0xb6, 0x62, - 0xcc, 0xa0, 0x54, 0x6d, 0x79, 0x10, 0x46, 0xf7, 0xbd, 0x60, 0xab, 0xea, 0x45, 0x4c, 0x07, 0xd1, - 0xd4, 0x96, 0x7b, 0x0a, 0x83, 0x35, 0x2a, 0x54, 0x83, 0xc1, 0x56, 0x18, 0x25, 0xf1, 0xf4, 0x10, - 0x1b, 0xce, 0x17, 0x72, 0x67, 0x0f, 0xef, 0x77, 0x2d, 0x8c, 0x92, 0xb4, 0x2b, 0xf4, 0x5f, 0x8c, - 0x39, 0x23, 0xb4, 0x04, 0x65, 0x12, 0xec, 0x4c, 0x0f, 0x33, 0x7e, 0x1f, 0x3e, 0x9c, 0xdf, 0x72, - 0xb0, 0x73, 0xd7, 0x89, 0xd2, 0x45, 0xb4, 0x1c, 0xec, 0x60, 0x5a, 0x1a, 0x35, 0xa0, 0x22, 0xdd, - 0x0a, 0xf1, 0xf4, 0x48, 0x91, 0x09, 0x86, 0x05, 0x39, 0x26, 0xef, 0xb4, 0xbd, 0x88, 0x34, 0x49, - 0x90, 0xc4, 0xa9, 0x0e, 0x2f, 0xb1, 0x31, 0x4e, 0xf9, 0xa2, 0x06, 0x8c, 0x71, 0x55, 0x67, 0x2d, - 0x6c, 0x07, 0x49, 0x3c, 0x5d, 0x61, 0x4d, 0xce, 0x31, 0x92, 0xef, 0xa6, 0x25, 0x16, 0xcf, 0x08, - 0xf6, 0x63, 0x1a, 0x30, 0xc6, 0x06, 0x53, 0xf4, 0x16, 0x8c, 0xfb, 0xde, 0x0e, 0x09, 0x48, 0x1c, - 0xd7, 0xa2, 0x70, 0x83, 0x4c, 0x03, 0xeb, 0xcd, 0xd3, 0x79, 0x06, 0x63, 0xb8, 0x41, 0x16, 0x4f, - 0xed, 0xef, 0xcd, 0x8e, 0xdf, 0xd4, 0x4b, 0x63, 0x93, 0x19, 0xfa, 0x22, 0x4c, 0x50, 0xbd, 0xca, + 0xc9, 0x69, 0x39, 0x1b, 0x9e, 0xef, 0x25, 0x1e, 0x89, 0xd1, 0xc7, 0xa1, 0xec, 0xb8, 0x2e, 0x5b, + 0x00, 0x95, 0xc5, 0xd3, 0xfb, 0x7b, 0xb3, 0xe5, 0x05, 0xd7, 0x7d, 0xb0, 0x37, 0x0b, 0x8a, 0x6a, + 0x17, 0x53, 0x0a, 0xf4, 0x2c, 0x0c, 0xb8, 0x51, 0xd8, 0x9a, 0x2e, 0x31, 0xca, 0x33, 0x74, 0xa5, + 0x56, 0xa3, 0xb0, 0x95, 0x21, 0x65, 0x34, 0xf6, 0xef, 0x96, 0x00, 0x2d, 0x91, 0xd6, 0xf6, 0x4a, + 0xdd, 0xf8, 0xa6, 0xe7, 0x61, 0xa4, 0x19, 0x06, 0x5e, 0x12, 0x46, 0xb1, 0xa8, 0x90, 0xcd, 0x8b, + 0x35, 0x01, 0xc3, 0x0a, 0x8b, 0xce, 0xc1, 0x40, 0x2b, 0x5d, 0xde, 0x63, 0x52, 0x34, 0xb0, 0x85, + 0xcd, 0x30, 0x94, 0xa2, 0x1d, 0x93, 0x48, 0xcc, 0x67, 0x45, 0x71, 0x2b, 0x26, 0x11, 0x66, 0x98, + 0x74, 0x06, 0xd1, 0xb9, 0x25, 0x66, 0x6b, 0x66, 0x06, 0x51, 0x0c, 0xd6, 0xa8, 0xd0, 0x9b, 0x50, + 0xe1, 0xff, 0x30, 0xd9, 0x64, 0x53, 0x37, 0x57, 0x28, 0x5c, 0x0f, 0x1b, 0x8e, 0x9f, 0x1d, 0xfc, + 0x71, 0x36, 0xe3, 0x24, 0x23, 0x9c, 0xf2, 0x34, 0x66, 0xdc, 0x50, 0xee, 0x8c, 0xfb, 0x25, 0x0b, + 0xd0, 0x92, 0x17, 0xb8, 0x24, 0x3a, 0x86, 0xad, 0xb3, 0xbf, 0xc5, 0xf0, 0x63, 0xda, 0xb4, 0xb0, + 0xd9, 0x0a, 0x03, 0x12, 0x24, 0x4b, 0x61, 0xe0, 0xf2, 0xed, 0xf4, 0xd3, 0x30, 0x90, 0xd0, 0xaa, + 0x78, 0xb3, 0x9e, 0x96, 0x9f, 0x85, 0x56, 0xf0, 0x60, 0x6f, 0xf6, 0x4c, 0x67, 0x09, 0xd6, 0x04, + 0x56, 0x06, 0x7d, 0x0a, 0x86, 0xe2, 0xc4, 0x49, 0xda, 0xb1, 0x68, 0xe8, 0x13, 0xb2, 0xa1, 0x75, + 0x06, 0x7d, 0xb0, 0x37, 0x3b, 0xa9, 0x8a, 0x71, 0x10, 0x16, 0x05, 0xd0, 0x33, 0x30, 0xdc, 0x24, + 0x71, 0xec, 0x6c, 0x49, 0x01, 0x37, 0x29, 0xca, 0x0e, 0xaf, 0x71, 0x30, 0x96, 0x78, 0xf4, 0x24, + 0x0c, 0x92, 0x28, 0x0a, 0x23, 0x31, 0x23, 0xc6, 0x05, 0xe1, 0xe0, 0x32, 0x05, 0x62, 0x8e, 0xb3, + 0xff, 0x8b, 0x05, 0x93, 0xaa, 0xad, 0xbc, 0xae, 0x63, 0x58, 0xf2, 0x2e, 0x40, 0x43, 0x76, 0x30, + 0x66, 0x0b, 0x4d, 0xab, 0xa3, 0xfb, 0xf4, 0xeb, 0x1c, 0xd0, 0xb4, 0x0e, 0x05, 0x8a, 0xb1, 0xc6, + 0xd7, 0xfe, 0xb7, 0x16, 0x9c, 0xcc, 0xf4, 0xed, 0xba, 0x17, 0x27, 0xe8, 0x8d, 0x8e, 0xfe, 0xcd, + 0x15, 0xeb, 0x1f, 0x2d, 0xcd, 0x7a, 0xa7, 0xe6, 0x8b, 0x84, 0x68, 0x7d, 0xc3, 0x30, 0xe8, 0x25, + 0xa4, 0x29, 0xbb, 0xf5, 0x7c, 0xc1, 0x6e, 0xf1, 0xf6, 0xa5, 0x5f, 0x69, 0x95, 0xf2, 0xc0, 0x9c, + 0x95, 0xfd, 0xbf, 0x2d, 0xa8, 0x2c, 0x85, 0xc1, 0xa6, 0xb7, 0xb5, 0xe6, 0xb4, 0x8e, 0xe1, 0xfb, + 0xd4, 0x61, 0x80, 0x71, 0xe7, 0x5d, 0xb8, 0x98, 0xd7, 0x05, 0xd1, 0xb0, 0x39, 0xba, 0xa7, 0x72, + 0x65, 0x41, 0x89, 0x29, 0x0a, 0xc2, 0x8c, 0xd9, 0xcc, 0xcb, 0x50, 0x51, 0x04, 0x68, 0x0a, 0xca, + 0x77, 0x09, 0xd7, 0x24, 0x2b, 0x98, 0xfe, 0x44, 0xa7, 0x60, 0x70, 0xc7, 0xf1, 0xdb, 0x62, 0xf1, + 0x62, 0xfe, 0xe7, 0xd3, 0xa5, 0xcb, 0x96, 0xfd, 0xcb, 0x6c, 0x05, 0x8a, 0x4a, 0x96, 0x83, 0x1d, + 0x21, 0x1c, 0xde, 0xb3, 0xe0, 0x94, 0xdf, 0x45, 0x28, 0x89, 0x31, 0x39, 0x8c, 0x38, 0x7b, 0x4c, + 0x34, 0xfb, 0x54, 0x37, 0x2c, 0xee, 0x5a, 0x9b, 0xfd, 0x7d, 0x0b, 0x4e, 0xa9, 0xd6, 0x5d, 0x23, + 0xbb, 0x75, 0xe2, 0x93, 0x46, 0x12, 0x46, 0x1f, 0x92, 0xf6, 0xa1, 0xc7, 0xf9, 0x48, 0x73, 0x49, + 0x33, 0x2a, 0x18, 0x94, 0xaf, 0x91, 0x5d, 0x36, 0xec, 0xf6, 0x6f, 0x5b, 0x30, 0xae, 0x9a, 0x7f, + 0x0c, 0xcb, 0xe3, 0xba, 0xb9, 0x3c, 0x3e, 0x5e, 0x70, 0x6e, 0xf5, 0x58, 0x18, 0xbf, 0x52, 0x82, + 0xd3, 0x8a, 0xc6, 0xd8, 0x3a, 0x3e, 0x24, 0xa3, 0xdf, 0x5f, 0x77, 0xaf, 0x91, 0xdd, 0xf5, 0x90, + 0xee, 0xfd, 0xdd, 0xbb, 0x8b, 0x2e, 0xc2, 0xa8, 0x4b, 0x36, 0x9d, 0xb6, 0x9f, 0x28, 0x15, 0x77, + 0x90, 0xdb, 0x3e, 0xd5, 0x14, 0x8c, 0x75, 0x1a, 0xfb, 0xd7, 0x80, 0x89, 0x8e, 0xc4, 0xa1, 0x1f, + 0x8d, 0x2a, 0x13, 0x9a, 0x25, 0x32, 0xa6, 0x5b, 0x22, 0xc2, 0xea, 0x78, 0x12, 0x06, 0xbd, 0x26, + 0xdd, 0x5e, 0x4a, 0xe6, 0xae, 0xb1, 0x4a, 0x81, 0x98, 0xe3, 0xd0, 0x53, 0x30, 0xdc, 0x08, 0x9b, + 0x4d, 0x27, 0x70, 0xa7, 0xcb, 0x4c, 0xbd, 0x19, 0xa5, 0x3b, 0xd0, 0x12, 0x07, 0x61, 0x89, 0x43, + 0x8f, 0xc1, 0x80, 0x13, 0x6d, 0xc5, 0xd3, 0x03, 0x8c, 0x66, 0x84, 0xd6, 0xb4, 0x10, 0x6d, 0xc5, + 0x98, 0x41, 0xa9, 0xda, 0x72, 0x2f, 0x8c, 0xee, 0x7a, 0xc1, 0x56, 0xd5, 0x8b, 0x98, 0x0e, 0xa2, + 0xa9, 0x2d, 0x77, 0x14, 0x06, 0x6b, 0x54, 0xa8, 0x06, 0x83, 0xad, 0x30, 0x4a, 0xe2, 0xe9, 0x21, + 0x36, 0x9c, 0xcf, 0xe5, 0xce, 0x1e, 0xde, 0xef, 0x5a, 0x18, 0x25, 0x69, 0x57, 0xe8, 0xbf, 0x18, + 0x73, 0x46, 0x68, 0x09, 0xca, 0x24, 0xd8, 0x99, 0x1e, 0x66, 0xfc, 0x3e, 0x76, 0x30, 0xbf, 0xe5, + 0x60, 0xe7, 0xb6, 0x13, 0xa5, 0x8b, 0x68, 0x39, 0xd8, 0xc1, 0xb4, 0x34, 0x6a, 0x40, 0x45, 0xba, + 0x15, 0xe2, 0xe9, 0x91, 0x22, 0x13, 0x0c, 0x0b, 0x72, 0x4c, 0xde, 0x69, 0x7b, 0x11, 0x69, 0x92, + 0x20, 0x89, 0x53, 0x1d, 0x5e, 0x62, 0x63, 0x9c, 0xf2, 0x45, 0x0d, 0x18, 0xe3, 0xaa, 0xce, 0x5a, + 0xd8, 0x0e, 0x92, 0x78, 0xba, 0xc2, 0x9a, 0x9c, 0x63, 0x24, 0xdf, 0x4e, 0x4b, 0x2c, 0x9e, 0x12, + 0xec, 0xc7, 0x34, 0x60, 0x8c, 0x0d, 0xa6, 0xe8, 0x0d, 0x18, 0xf7, 0xbd, 0x1d, 0x12, 0x90, 0x38, + 0xae, 0x45, 0xe1, 0x06, 0x99, 0x06, 0xd6, 0x9b, 0x27, 0xf3, 0x0c, 0xc6, 0x70, 0x83, 0x2c, 0x9e, + 0xd8, 0xdf, 0x9b, 0x1d, 0xbf, 0xae, 0x97, 0xc6, 0x26, 0x33, 0xf4, 0x26, 0x4c, 0x50, 0xbd, 0xca, 0x4b, 0xd9, 0x8f, 0x16, 0x67, 0x8f, 0xf6, 0xf7, 0x66, 0x27, 0xb0, 0x51, 0x1c, 0x67, 0xd8, 0xa1, 0x75, 0xa8, 0xf8, 0xde, 0x26, 0x69, 0xec, 0x36, 0x7c, 0x32, 0x3d, 0xc6, 0x78, 0xe7, 0x2c, 0xb9, - 0x9b, 0x92, 0x9c, 0xeb, 0xb2, 0xea, 0x2f, 0x4e, 0x19, 0xa1, 0xbb, 0x70, 0x2e, 0x21, 0x51, 0xd3, - 0x0b, 0x1c, 0xaa, 0x58, 0x08, 0x45, 0x8b, 0x59, 0xe5, 0xe3, 0x6c, 0xd6, 0x9e, 0x17, 0x03, 0x7b, - 0x6e, 0xbd, 0x2b, 0x15, 0xee, 0x51, 0x1a, 0xdd, 0x86, 0x49, 0xb6, 0x9e, 0x6a, 0x6d, 0xdf, 0xaf, - 0x85, 0xbe, 0xd7, 0xd8, 0x9d, 0x9e, 0x60, 0x0c, 0x9f, 0x91, 0xb6, 0xf6, 0xaa, 0x89, 0xa6, 0x36, + 0xeb, 0x92, 0x9c, 0xeb, 0xb2, 0xea, 0x2f, 0x4e, 0x19, 0xa1, 0xdb, 0x70, 0x26, 0x21, 0x51, 0xd3, + 0x0b, 0x1c, 0xaa, 0x58, 0x08, 0x45, 0x8b, 0x59, 0xe5, 0xe3, 0x6c, 0xd6, 0x9e, 0x15, 0x03, 0x7b, + 0x66, 0xbd, 0x2b, 0x15, 0xee, 0x51, 0x1a, 0xdd, 0x84, 0x49, 0xb6, 0x9e, 0x6a, 0x6d, 0xdf, 0xaf, + 0x85, 0xbe, 0xd7, 0xd8, 0x9d, 0x9e, 0x60, 0x0c, 0x9f, 0x92, 0xb6, 0xf6, 0xaa, 0x89, 0xa6, 0x36, 0x48, 0xfa, 0x0f, 0x67, 0x4b, 0x23, 0x1f, 0x26, 0x63, 0xd2, 0x68, 0x47, 0x5e, 0xb2, 0x4b, 0xe7, - 0x3e, 0x79, 0x98, 0x4c, 0x4f, 0x16, 0xb1, 0xa9, 0xea, 0x66, 0x21, 0xee, 0xe8, 0xc8, 0x00, 0x71, + 0x3e, 0xb9, 0x9f, 0x4c, 0x4f, 0x16, 0xb1, 0xa9, 0xea, 0x66, 0x21, 0xee, 0xe8, 0xc8, 0x00, 0x71, 0x96, 0x35, 0x15, 0x15, 0x71, 0xe2, 0x7a, 0xc1, 0xf4, 0x14, 0x53, 0xa2, 0xd5, 0xfa, 0xaa, 0x53, - 0x20, 0xe6, 0x38, 0x66, 0xaa, 0xd2, 0x1f, 0xb7, 0xa9, 0xec, 0x3d, 0xc5, 0x08, 0x53, 0x53, 0x55, + 0x20, 0xe6, 0x38, 0x66, 0xaa, 0xd2, 0x1f, 0x37, 0xa9, 0xec, 0x3d, 0xc1, 0x08, 0x53, 0x53, 0x55, 0x22, 0x70, 0x4a, 0x43, 0xf7, 0xab, 0x24, 0xd9, 0x9d, 0x46, 0x8c, 0x54, 0x2d, 0xb5, 0xf5, 0xf5, - 0xcf, 0x62, 0x0a, 0x47, 0x77, 0x61, 0x98, 0x04, 0x3b, 0x2b, 0x51, 0xd8, 0x9c, 0x3e, 0x5d, 0x44, + 0x2f, 0x60, 0x0a, 0x47, 0xb7, 0x61, 0x98, 0x04, 0x3b, 0x2b, 0x51, 0xd8, 0x9c, 0x3e, 0x59, 0x44, 0x06, 0x2c, 0x73, 0x62, 0xbe, 0x2b, 0xa4, 0xda, 0xb2, 0x00, 0x63, 0xc9, 0xcc, 0xde, 0x80, 0x09, 0x25, 0x2e, 0xd8, 0xa8, 0xa3, 0x59, 0x18, 0xa4, 0x12, 0x51, 0x5a, 0x70, 0x15, 0xda, 0x35, 0x2a, - 0x28, 0x63, 0xcc, 0xe1, 0xac, 0x6b, 0xde, 0x97, 0xc9, 0xe2, 0x6e, 0x42, 0xb8, 0x26, 0x5f, 0xd6, - 0xba, 0x26, 0x11, 0x38, 0xa5, 0xb1, 0xff, 0x0f, 0xdf, 0x6b, 0x53, 0x99, 0x54, 0x40, 0x1e, 0x5f, - 0x82, 0x91, 0xed, 0x30, 0x4e, 0x28, 0x35, 0xab, 0x63, 0x30, 0xdd, 0x5d, 0xaf, 0x0b, 0x38, 0x56, - 0x14, 0xe8, 0x35, 0x18, 0x6f, 0xe8, 0x15, 0x88, 0x2d, 0xe2, 0xac, 0x28, 0x62, 0xd6, 0x8e, 0x4d, - 0x5a, 0x74, 0x15, 0x46, 0x98, 0x5b, 0xb3, 0x11, 0xfa, 0xc2, 0x66, 0x90, 0x3b, 0xde, 0x48, 0x4d, - 0xc0, 0x0f, 0xb4, 0xdf, 0x58, 0x51, 0x53, 0xcb, 0x8b, 0x36, 0x61, 0xb5, 0x26, 0xc4, 0xb8, 0xb2, - 0xbc, 0xae, 0x33, 0x28, 0x16, 0x58, 0xfb, 0x1f, 0x97, 0xb4, 0x51, 0xa6, 0x1a, 0x2f, 0x41, 0x9f, - 0x83, 0xe1, 0x07, 0x8e, 0x97, 0x78, 0xc1, 0x96, 0xd8, 0x99, 0x5f, 0x2a, 0x28, 0xd3, 0x59, 0xf1, - 0x7b, 0xbc, 0x28, 0xdf, 0x7f, 0xc4, 0x1f, 0x2c, 0x19, 0x52, 0xde, 0x51, 0x3b, 0x08, 0x28, 0xef, + 0x28, 0x63, 0xcc, 0xe1, 0xac, 0x6b, 0xde, 0xbb, 0x64, 0x71, 0x37, 0x21, 0x5c, 0x93, 0x2f, 0x6b, + 0x5d, 0x93, 0x08, 0x9c, 0xd2, 0xd8, 0xff, 0x97, 0xef, 0xb5, 0xa9, 0x4c, 0x2a, 0x20, 0x8f, 0x2f, + 0xc0, 0xc8, 0x76, 0x18, 0x27, 0x94, 0x9a, 0xd5, 0x31, 0x98, 0xee, 0xae, 0x57, 0x05, 0x1c, 0x2b, + 0x0a, 0xf4, 0x0a, 0x8c, 0x37, 0xf4, 0x0a, 0xc4, 0x16, 0x71, 0x5a, 0x14, 0x31, 0x6b, 0xc7, 0x26, + 0x2d, 0xba, 0x0c, 0x23, 0xcc, 0xad, 0xd9, 0x08, 0x7d, 0x61, 0x33, 0xc8, 0x1d, 0x6f, 0xa4, 0x26, + 0xe0, 0x0f, 0xb4, 0xdf, 0x58, 0x51, 0x53, 0xcb, 0x8b, 0x36, 0x61, 0xb5, 0x26, 0xc4, 0xb8, 0xb2, + 0xbc, 0xae, 0x32, 0x28, 0x16, 0x58, 0xfb, 0x9f, 0x94, 0xb4, 0x51, 0xa6, 0x1a, 0x2f, 0x41, 0x5f, + 0x84, 0xe1, 0x7b, 0x8e, 0x97, 0x78, 0xc1, 0x96, 0xd8, 0x99, 0x5f, 0x28, 0x28, 0xd3, 0x59, 0xf1, + 0x3b, 0xbc, 0x28, 0xdf, 0x7f, 0xc4, 0x1f, 0x2c, 0x19, 0x52, 0xde, 0x51, 0x3b, 0x08, 0x28, 0xef, 0x52, 0xff, 0xbc, 0x31, 0x2f, 0xca, 0x79, 0x8b, 0x3f, 0x58, 0x32, 0x44, 0x9b, 0x00, 0x72, 0x55, - 0x13, 0x57, 0xb8, 0x13, 0x3f, 0xd6, 0x0f, 0xfb, 0x75, 0x55, 0x7a, 0x71, 0x82, 0xee, 0x78, 0xe9, - 0x7f, 0xac, 0x71, 0xb6, 0x13, 0xa6, 0xe0, 0x74, 0x36, 0x0b, 0x7d, 0x9e, 0x2e, 0x2c, 0x27, 0x4a, - 0x88, 0xbb, 0x90, 0x64, 0x3d, 0xb2, 0x87, 0xeb, 0x69, 0xeb, 0x5e, 0x93, 0xe8, 0x8b, 0x50, 0x30, - 0xc1, 0x29, 0x3f, 0xfb, 0xbb, 0x65, 0x98, 0xee, 0xd5, 0x5c, 0x3a, 0x25, 0xc9, 0x43, 0x2f, 0x59, + 0x13, 0x57, 0xb8, 0x13, 0x3f, 0xd9, 0x0f, 0xfb, 0x75, 0x55, 0x7a, 0x71, 0x82, 0xee, 0x78, 0xe9, + 0x7f, 0xac, 0x71, 0xb6, 0x13, 0xa6, 0xe0, 0x74, 0x36, 0x0b, 0x7d, 0x89, 0x2e, 0x2c, 0x27, 0x4a, + 0x88, 0xbb, 0x90, 0x64, 0x3d, 0xb2, 0x07, 0xeb, 0x69, 0xeb, 0x5e, 0x93, 0xe8, 0x8b, 0x50, 0x30, + 0xc1, 0x29, 0x3f, 0xfb, 0xbb, 0x65, 0x98, 0xee, 0xd5, 0x5c, 0x3a, 0x25, 0xc9, 0x7d, 0x2f, 0x59, 0xa2, 0x2a, 0x88, 0x65, 0x4e, 0xc9, 0x65, 0x01, 0xc7, 0x8a, 0x82, 0xce, 0x8d, 0xd8, 0xdb, 0x0a, 0x1c, 0x5f, 0x4c, 0x5f, 0x35, 0x37, 0xea, 0x0c, 0x8a, 0x05, 0x96, 0xd2, 0x45, 0xc4, 0x89, 0x85, 0x37, 0x5b, 0x9b, 0x43, 0x98, 0x41, 0xb1, 0xc0, 0xea, 0x16, 0xf0, 0x40, 0x8e, 0x05, 0x6c, 0x0c, - 0xd1, 0xe0, 0xa3, 0x1d, 0x22, 0xf4, 0x05, 0x80, 0x4d, 0x2f, 0xf0, 0xe2, 0x6d, 0xc6, 0x7d, 0xa8, - 0x6f, 0xee, 0x4a, 0xd5, 0x59, 0x51, 0x5c, 0xb0, 0xc6, 0x11, 0xbd, 0x02, 0xa3, 0x6a, 0x79, 0xae, - 0x56, 0xa7, 0x87, 0x4d, 0x0f, 0x68, 0x2a, 0xab, 0xaa, 0x58, 0xa7, 0xb3, 0xbf, 0x94, 0x9d, 0x2f, - 0x62, 0x55, 0x68, 0xe3, 0x6b, 0x15, 0x1d, 0xdf, 0xd2, 0xe1, 0xe3, 0x6b, 0xff, 0xa7, 0x32, 0x4c, - 0x1a, 0x95, 0xb5, 0xe3, 0x02, 0x12, 0xed, 0x0d, 0xba, 0x6d, 0x38, 0x09, 0x11, 0x6b, 0xf2, 0x52, - 0x3f, 0x8b, 0x46, 0xdf, 0x64, 0xe8, 0x5a, 0xe0, 0x9c, 0xd0, 0x36, 0x54, 0x7c, 0x27, 0x66, 0x36, - 0x34, 0x11, 0x6b, 0xb1, 0x3f, 0xb6, 0xa9, 0x6a, 0xef, 0xc4, 0x89, 0xb6, 0x8b, 0xf3, 0x5a, 0x52, - 0xe6, 0x74, 0xcf, 0xa3, 0x2a, 0x87, 0x3c, 0x42, 0x51, 0xcd, 0xa1, 0x7a, 0xc9, 0x2e, 0xe6, 0x38, - 0x74, 0x15, 0xc6, 0x22, 0xc2, 0x66, 0xca, 0x12, 0xd5, 0xaa, 0xd8, 0xd4, 0x1b, 0x4c, 0xd5, 0x2f, - 0xac, 0xe1, 0xb0, 0x41, 0x99, 0x6a, 0xdf, 0x43, 0x87, 0x68, 0xdf, 0xcf, 0xc1, 0x30, 0xfb, 0xa1, - 0x66, 0x85, 0xfa, 0x42, 0xab, 0x1c, 0x8c, 0x25, 0x3e, 0x3b, 0x89, 0x46, 0x0a, 0x4e, 0xa2, 0xe7, - 0x61, 0xa2, 0xea, 0x90, 0x66, 0x18, 0x2c, 0x07, 0x6e, 0x2b, 0xf4, 0x82, 0x04, 0x4d, 0xc3, 0x00, - 0xdb, 0x4f, 0xf8, 0x7a, 0x1f, 0xa0, 0x1c, 0xf0, 0x00, 0xd5, 0xa0, 0xed, 0xff, 0x6b, 0xc1, 0x78, - 0x95, 0xf8, 0x24, 0x21, 0xb7, 0x5b, 0xcc, 0xef, 0x82, 0x56, 0x00, 0x6d, 0x45, 0x4e, 0x83, 0xd4, - 0x48, 0xe4, 0x85, 0x6e, 0x9d, 0x34, 0xc2, 0x80, 0x9d, 0x3c, 0xd0, 0x0d, 0xf2, 0xdc, 0xfe, 0xde, - 0x2c, 0xba, 0xd6, 0x81, 0xc5, 0x5d, 0x4a, 0x20, 0x17, 0xc6, 0x5b, 0x11, 0x31, 0x1c, 0x45, 0x56, - 0xfe, 0x86, 0x5f, 0xd3, 0x8b, 0x70, 0x9d, 0xd4, 0x00, 0x61, 0x93, 0x29, 0xfa, 0x34, 0x4c, 0x85, - 0x51, 0x6b, 0xdb, 0x09, 0xaa, 0xa4, 0x45, 0x02, 0x97, 0x2a, 0xe2, 0xc2, 0x2b, 0x78, 0x66, 0x7f, - 0x6f, 0x76, 0xea, 0x76, 0x06, 0x87, 0x3b, 0xa8, 0xed, 0x5f, 0x2f, 0xc1, 0xd9, 0x6a, 0xf8, 0x20, - 0x78, 0xe0, 0x44, 0xee, 0x42, 0x6d, 0x95, 0x6b, 0xd7, 0xcc, 0xcb, 0x2a, 0xbd, 0xbb, 0x56, 0x4f, - 0xef, 0xee, 0xe7, 0x61, 0x64, 0xd3, 0x23, 0xbe, 0x8b, 0xc9, 0xa6, 0xe8, 0xde, 0xe5, 0x22, 0xee, - 0xef, 0x15, 0x5a, 0x46, 0x7a, 0x1a, 0xb8, 0x73, 0x79, 0x45, 0xb0, 0xc1, 0x8a, 0x21, 0x6a, 0xc3, - 0x94, 0x34, 0x1f, 0x24, 0x56, 0xac, 0x8e, 0x97, 0x8a, 0x59, 0x27, 0x66, 0x35, 0x6c, 0x3c, 0x70, - 0x86, 0x21, 0xee, 0xa8, 0x82, 0x9a, 0x7d, 0x4d, 0xba, 0x37, 0x0c, 0xb0, 0xb9, 0xc2, 0xcc, 0x3e, - 0x66, 0x97, 0x32, 0xa8, 0xfd, 0x77, 0x2d, 0x78, 0xac, 0x63, 0xb4, 0x84, 0xd1, 0xfe, 0xa6, 0xb4, - 0x96, 0xf9, 0x31, 0x55, 0x4e, 0x2b, 0xbb, 0x8e, 0x79, 0x31, 0xcb, 0xb9, 0x54, 0xc0, 0x72, 0xbe, - 0x0d, 0x67, 0x96, 0x9b, 0xad, 0x64, 0xb7, 0xea, 0x99, 0x4e, 0xe9, 0x57, 0x61, 0xa8, 0x49, 0x5c, - 0xaf, 0xdd, 0x14, 0x9f, 0x75, 0x56, 0x0a, 0xd2, 0x35, 0x06, 0x3d, 0xd8, 0x9b, 0x1d, 0xaf, 0x27, - 0x61, 0xe4, 0x6c, 0x11, 0x0e, 0xc0, 0x82, 0xdc, 0x7e, 0xcf, 0x82, 0x49, 0xb9, 0xa0, 0x16, 0x5c, + 0xd1, 0xe0, 0xc3, 0x1d, 0x22, 0xf4, 0x65, 0x80, 0x4d, 0x2f, 0xf0, 0xe2, 0x6d, 0xc6, 0x7d, 0xa8, + 0x6f, 0xee, 0x4a, 0xd5, 0x59, 0x51, 0x5c, 0xb0, 0xc6, 0x11, 0xbd, 0x04, 0xa3, 0x6a, 0x79, 0xae, + 0x56, 0xa7, 0x87, 0x4d, 0x0f, 0x68, 0x2a, 0xab, 0xaa, 0x58, 0xa7, 0xb3, 0xdf, 0xce, 0xce, 0x17, + 0xb1, 0x2a, 0xb4, 0xf1, 0xb5, 0x8a, 0x8e, 0x6f, 0xe9, 0xe0, 0xf1, 0xb5, 0xff, 0x73, 0x19, 0x26, + 0x8d, 0xca, 0xda, 0x71, 0x01, 0x89, 0xf6, 0x1a, 0xdd, 0x36, 0x9c, 0x84, 0x88, 0x35, 0x79, 0xa1, + 0x9f, 0x45, 0xa3, 0x6f, 0x32, 0x74, 0x2d, 0x70, 0x4e, 0x68, 0x1b, 0x2a, 0xbe, 0x13, 0x33, 0x1b, + 0x9a, 0x88, 0xb5, 0xd8, 0x1f, 0xdb, 0x54, 0xb5, 0x77, 0xe2, 0x44, 0xdb, 0xc5, 0x79, 0x2d, 0x29, + 0x73, 0xba, 0xe7, 0x51, 0x95, 0x43, 0x1e, 0xa1, 0xa8, 0xe6, 0x50, 0xbd, 0x64, 0x17, 0x73, 0x1c, + 0xba, 0x0c, 0x63, 0x11, 0x61, 0x33, 0x65, 0x89, 0x6a, 0x55, 0x6c, 0xea, 0x0d, 0xa6, 0xea, 0x17, + 0xd6, 0x70, 0xd8, 0xa0, 0x4c, 0xb5, 0xef, 0xa1, 0x03, 0xb4, 0xef, 0x67, 0x60, 0x98, 0xfd, 0x50, + 0xb3, 0x42, 0x7d, 0xa1, 0x55, 0x0e, 0xc6, 0x12, 0x9f, 0x9d, 0x44, 0x23, 0x05, 0x27, 0xd1, 0xb3, + 0x30, 0x51, 0x75, 0x48, 0x33, 0x0c, 0x96, 0x03, 0xb7, 0x15, 0x7a, 0x41, 0x82, 0xa6, 0x61, 0x80, + 0xed, 0x27, 0x7c, 0xbd, 0x0f, 0x50, 0x0e, 0x78, 0x80, 0x6a, 0xd0, 0xf6, 0xff, 0xb3, 0x60, 0xbc, + 0x4a, 0x7c, 0x92, 0x90, 0x9b, 0x2d, 0xe6, 0x77, 0x41, 0x2b, 0x80, 0xb6, 0x22, 0xa7, 0x41, 0x6a, + 0x24, 0xf2, 0x42, 0xb7, 0x4e, 0x1a, 0x61, 0xc0, 0x4e, 0x1e, 0xe8, 0x06, 0x79, 0x66, 0x7f, 0x6f, + 0x16, 0x5d, 0xe9, 0xc0, 0xe2, 0x2e, 0x25, 0x90, 0x0b, 0xe3, 0xad, 0x88, 0x18, 0x8e, 0x22, 0x2b, + 0x7f, 0xc3, 0xaf, 0xe9, 0x45, 0xb8, 0x4e, 0x6a, 0x80, 0xb0, 0xc9, 0x14, 0x7d, 0x0e, 0xa6, 0xc2, + 0xa8, 0xb5, 0xed, 0x04, 0x55, 0xd2, 0x22, 0x81, 0x4b, 0x15, 0x71, 0xe1, 0x15, 0x3c, 0xb5, 0xbf, + 0x37, 0x3b, 0x75, 0x33, 0x83, 0xc3, 0x1d, 0xd4, 0xf6, 0xaf, 0x97, 0xe0, 0x74, 0x35, 0xbc, 0x17, + 0xdc, 0x73, 0x22, 0x77, 0xa1, 0xb6, 0xca, 0xb5, 0x6b, 0xe6, 0x65, 0x95, 0xde, 0x5d, 0xab, 0xa7, + 0x77, 0xf7, 0x4b, 0x30, 0xb2, 0xe9, 0x11, 0xdf, 0xc5, 0x64, 0x53, 0x74, 0xef, 0x62, 0x11, 0xf7, + 0xf7, 0x0a, 0x2d, 0x23, 0x3d, 0x0d, 0xdc, 0xb9, 0xbc, 0x22, 0xd8, 0x60, 0xc5, 0x10, 0xb5, 0x61, + 0x4a, 0x9a, 0x0f, 0x12, 0x2b, 0x56, 0xc7, 0x0b, 0xc5, 0xac, 0x13, 0xb3, 0x1a, 0x36, 0x1e, 0x38, + 0xc3, 0x10, 0x77, 0x54, 0x41, 0xcd, 0xbe, 0x26, 0xdd, 0x1b, 0x06, 0xd8, 0x5c, 0x61, 0x66, 0x1f, + 0xb3, 0x4b, 0x19, 0xd4, 0xfe, 0x7b, 0x16, 0x3c, 0xd2, 0x31, 0x5a, 0xc2, 0x68, 0x7f, 0x5d, 0x5a, + 0xcb, 0xfc, 0x98, 0x2a, 0xa7, 0x95, 0x5d, 0xc7, 0xbc, 0x98, 0xe5, 0x5c, 0x2a, 0x60, 0x39, 0xdf, + 0x84, 0x53, 0xcb, 0xcd, 0x56, 0xb2, 0x5b, 0xf5, 0x4c, 0xa7, 0xf4, 0xcb, 0x30, 0xd4, 0x24, 0xae, + 0xd7, 0x6e, 0x8a, 0xcf, 0x3a, 0x2b, 0x05, 0xe9, 0x1a, 0x83, 0x3e, 0xd8, 0x9b, 0x1d, 0xaf, 0x27, + 0x61, 0xe4, 0x6c, 0x11, 0x0e, 0xc0, 0x82, 0xdc, 0x7e, 0xdf, 0x82, 0x49, 0xb9, 0xa0, 0x16, 0x5c, 0x37, 0x22, 0x71, 0x8c, 0x66, 0xa0, 0xe4, 0xb5, 0x04, 0x23, 0x10, 0x8c, 0x4a, 0xab, 0x35, 0x5c, - 0xf2, 0x5a, 0xe8, 0x73, 0x50, 0xe1, 0x67, 0x19, 0xe9, 0xe4, 0xe8, 0xf3, 0x6c, 0x84, 0x99, 0x34, - 0xeb, 0x92, 0x07, 0x4e, 0xd9, 0x49, 0xb5, 0x92, 0x89, 0xea, 0xb2, 0xe9, 0x59, 0xbf, 0x2e, 0xe0, - 0x58, 0x51, 0xa0, 0x8b, 0x30, 0x12, 0x84, 0x2e, 0x3f, 0x6e, 0xe2, 0x9b, 0x2e, 0x9b, 0x72, 0xb7, + 0xf2, 0x5a, 0xe8, 0x8b, 0x50, 0xe1, 0x67, 0x19, 0xe9, 0xe4, 0xe8, 0xf3, 0x6c, 0x84, 0x99, 0x34, + 0xeb, 0x92, 0x07, 0x4e, 0xd9, 0x49, 0xb5, 0x92, 0x89, 0xea, 0xb2, 0xe9, 0x59, 0xbf, 0x2a, 0xe0, + 0x58, 0x51, 0xa0, 0xf3, 0x30, 0x12, 0x84, 0x2e, 0x3f, 0x6e, 0xe2, 0x9b, 0x2e, 0x9b, 0x72, 0x37, 0x04, 0x0c, 0x2b, 0xac, 0xfd, 0x75, 0x0b, 0xc6, 0x64, 0x1f, 0x0b, 0x6a, 0xb8, 0x74, 0x91, 0xa4, 0xda, 0x6d, 0xba, 0x48, 0xa8, 0x86, 0xca, 0x30, 0x86, 0x62, 0x5a, 0xee, 0x47, 0x31, 0xb5, 0x7f, 0xab, 0x04, 0x13, 0xb2, 0x39, 0xf5, 0xf6, 0x46, 0x4c, 0xe8, 0xbe, 0x5d, 0x71, 0xf8, 0xe0, 0x13, - 0x39, 0xcf, 0x5e, 0xcc, 0x33, 0x21, 0x8c, 0x6f, 0x96, 0xea, 0x05, 0x0b, 0x92, 0x0f, 0x4e, 0x59, - 0xa2, 0x1d, 0x38, 0x15, 0x84, 0x09, 0xdb, 0x0f, 0x14, 0xbe, 0x98, 0x2f, 0x38, 0x5b, 0xcf, 0xe3, - 0xa2, 0x9e, 0x53, 0xb7, 0xb2, 0xfc, 0x70, 0x67, 0x15, 0xe8, 0xb6, 0x74, 0x8d, 0x94, 0x59, 0x5d, - 0xcf, 0x17, 0xab, 0xab, 0xb7, 0x67, 0xc4, 0xfe, 0x81, 0x05, 0x15, 0x49, 0x76, 0x12, 0x87, 0x02, - 0xf7, 0x60, 0x38, 0x66, 0x9f, 0x48, 0x0e, 0xd7, 0xa5, 0x62, 0x5d, 0xe0, 0xdf, 0x35, 0xdd, 0x04, - 0xf9, 0xff, 0x18, 0x4b, 0x6e, 0xcc, 0xc5, 0xa9, 0x3a, 0xf2, 0x81, 0x73, 0x71, 0xaa, 0x96, 0xf5, - 0x72, 0x71, 0xb2, 0xd6, 0x6b, 0x46, 0x2c, 0xd5, 0xe4, 0x5a, 0x11, 0xd9, 0xf4, 0x1e, 0x66, 0x35, - 0xb9, 0x1a, 0x83, 0x62, 0x81, 0x45, 0x9b, 0x30, 0xd6, 0x90, 0xbe, 0xd1, 0x54, 0x84, 0x7c, 0xb4, - 0xa0, 0xc7, 0x55, 0x39, 0xda, 0x79, 0xf0, 0xc6, 0x92, 0xc6, 0x09, 0x1b, 0x7c, 0xed, 0x6f, 0x59, - 0x30, 0xc4, 0x5d, 0x63, 0xc5, 0xfc, 0x8b, 0x9a, 0x9b, 0x3f, 0xed, 0xf3, 0x5d, 0x0a, 0x14, 0x5e, - 0x7f, 0x74, 0x0f, 0x2a, 0xec, 0x07, 0x33, 0xf3, 0xcb, 0x45, 0xa2, 0x4d, 0x78, 0xfd, 0xa2, 0xc1, - 0x4c, 0xec, 0xdd, 0x95, 0x0c, 0x70, 0xca, 0xcb, 0xfe, 0x7e, 0x99, 0x8a, 0xa7, 0x94, 0xd4, 0xd8, - 0x7f, 0xad, 0x93, 0xd8, 0x7f, 0x4b, 0xc7, 0xbf, 0xff, 0xbe, 0x03, 0x93, 0x0d, 0xed, 0x40, 0x22, - 0xdd, 0xf5, 0xaf, 0x14, 0xfc, 0xf4, 0xda, 0x29, 0x06, 0x77, 0x05, 0x2d, 0x99, 0xec, 0x70, 0x96, - 0x3f, 0x22, 0x30, 0xc6, 0x8f, 0x7e, 0x45, 0x7d, 0x03, 0xac, 0xbe, 0xf9, 0x5c, 0xaf, 0x13, 0x2f, - 0xa1, 0x2a, 0x63, 0x33, 0xad, 0xae, 0x31, 0xc2, 0x06, 0x5b, 0xfb, 0x6f, 0x0c, 0xc2, 0xe0, 0xf2, - 0x0e, 0x09, 0x92, 0x13, 0x10, 0x47, 0x4d, 0x98, 0xf0, 0x82, 0x9d, 0xd0, 0xdf, 0x21, 0x2e, 0xc7, - 0x1f, 0x6d, 0x0b, 0x3e, 0x27, 0x2a, 0x99, 0x58, 0x35, 0x98, 0xe1, 0x0c, 0xf3, 0xe3, 0x30, 0x7f, - 0xdf, 0x80, 0x21, 0x3e, 0x33, 0x84, 0xed, 0x9b, 0xe3, 0x2a, 0x66, 0x03, 0x2b, 0x56, 0x50, 0x6a, - 0xa4, 0x73, 0x2f, 0xb5, 0x60, 0x84, 0xbe, 0x04, 0x13, 0x9b, 0x5e, 0x14, 0x27, 0xd4, 0x82, 0x8d, - 0x13, 0xa7, 0xd9, 0x3a, 0x82, 0xe1, 0xab, 0x46, 0x64, 0xc5, 0xe0, 0x84, 0x33, 0x9c, 0xd1, 0x16, - 0x8c, 0x53, 0xbb, 0x2b, 0xad, 0x6a, 0xb8, 0xef, 0xaa, 0x94, 0xdf, 0xeb, 0xa6, 0xce, 0x08, 0x9b, - 0x7c, 0xa9, 0x48, 0x6a, 0x30, 0x3b, 0x6d, 0x84, 0x69, 0x20, 0x4a, 0x24, 0x71, 0x03, 0x8d, 0xe3, - 0xa8, 0x64, 0x63, 0xe7, 0xfd, 0x15, 0x53, 0xb2, 0xa5, 0xa7, 0xfa, 0xf6, 0x77, 0xe8, 0x7e, 0x49, - 0xc7, 0xf0, 0x04, 0xb6, 0x98, 0xeb, 0xe6, 0x16, 0xf3, 0x74, 0x81, 0x2f, 0xdb, 0x63, 0x7b, 0x79, - 0x1b, 0x46, 0xb5, 0x0f, 0x8f, 0xe6, 0xa1, 0xd2, 0x90, 0x47, 0xd2, 0x42, 0x8a, 0x2b, 0x75, 0x47, - 0x9d, 0x55, 0xe3, 0x94, 0x86, 0x8e, 0x0b, 0x55, 0x13, 0xb3, 0x01, 0x2c, 0x54, 0x89, 0xc4, 0x0c, - 0x63, 0xbf, 0x04, 0xb0, 0xfc, 0x90, 0x34, 0x16, 0x1a, 0x2c, 0x6e, 0x42, 0x3b, 0x3a, 0xb2, 0x7a, - 0x1f, 0x1d, 0xd9, 0xdf, 0xb6, 0x60, 0x62, 0x65, 0xc9, 0xd0, 0xbb, 0xe7, 0x00, 0xb8, 0xfe, 0x7a, - 0xef, 0xde, 0x2d, 0xe9, 0x94, 0xe5, 0x9e, 0x33, 0x05, 0xc5, 0x1a, 0x05, 0x7a, 0x1c, 0xca, 0x7e, - 0x3b, 0x10, 0x6a, 0xe5, 0xf0, 0xfe, 0xde, 0x6c, 0xf9, 0x66, 0x3b, 0xc0, 0x14, 0xa6, 0x45, 0x8a, - 0x94, 0x0b, 0x47, 0x8a, 0xe4, 0xc7, 0x4c, 0x7e, 0xb3, 0x0c, 0x53, 0x2b, 0x3e, 0x79, 0x68, 0xb4, - 0xfa, 0x59, 0x18, 0x72, 0x23, 0x6f, 0x87, 0x44, 0xd9, 0xcd, 0xba, 0xca, 0xa0, 0x58, 0x60, 0x0b, - 0x07, 0xaf, 0x18, 0x81, 0x3b, 0xe5, 0x63, 0x0e, 0xdc, 0xc9, 0xed, 0x33, 0xda, 0x84, 0xe1, 0x90, - 0x9b, 0xfd, 0xd3, 0x83, 0x6c, 0x2a, 0xbe, 0x76, 0x78, 0x63, 0xb2, 0xe3, 0x33, 0x27, 0x9c, 0x06, - 0x3c, 0x6c, 0x40, 0xc9, 0x32, 0x01, 0xc5, 0x92, 0xf9, 0xcc, 0x27, 0x60, 0x4c, 0xa7, 0xec, 0x2b, - 0x7e, 0xe0, 0xe7, 0x2d, 0x38, 0xbd, 0xe2, 0x87, 0x8d, 0xfb, 0x99, 0xe8, 0xa2, 0x57, 0x60, 0x94, - 0x2e, 0xa6, 0xd8, 0x08, 0xbd, 0x33, 0x62, 0x0c, 0x05, 0x0a, 0xeb, 0x74, 0x5a, 0xb1, 0x3b, 0x77, - 0x56, 0xab, 0xdd, 0x42, 0x13, 0x05, 0x0a, 0xeb, 0x74, 0xf6, 0xef, 0x5b, 0xf0, 0xe4, 0xb5, 0xa5, - 0xe5, 0x1a, 0x89, 0x62, 0x2f, 0x4e, 0x48, 0x90, 0x74, 0x44, 0x47, 0x52, 0xbd, 0xce, 0xd5, 0x9a, - 0x92, 0xea, 0x75, 0x55, 0xd6, 0x0a, 0x81, 0xfd, 0xa0, 0x84, 0x08, 0x7f, 0xcb, 0x82, 0xd3, 0xd7, - 0xbc, 0x04, 0x93, 0x56, 0x98, 0x0d, 0x68, 0x8c, 0x48, 0x2b, 0x8c, 0xbd, 0x24, 0x8c, 0x76, 0xb3, - 0x01, 0x8d, 0x58, 0x61, 0xb0, 0x46, 0xc5, 0x6b, 0xde, 0xf1, 0x62, 0xda, 0xd2, 0x92, 0x69, 0x8e, - 0x62, 0x01, 0xc7, 0x8a, 0x82, 0x76, 0xcc, 0xf5, 0x22, 0xa6, 0x32, 0xec, 0x8a, 0x15, 0xac, 0x3a, - 0x56, 0x95, 0x08, 0x9c, 0xd2, 0xd8, 0x7f, 0xd3, 0x82, 0xb3, 0xd7, 0xfc, 0x76, 0x9c, 0x90, 0x68, - 0x33, 0x36, 0x1a, 0xfb, 0x12, 0x54, 0x88, 0x54, 0xc0, 0x45, 0x5b, 0xd5, 0xa6, 0xa1, 0x34, 0x73, - 0x1e, 0x4d, 0xa9, 0xe8, 0x0a, 0x04, 0xed, 0xf5, 0x17, 0x62, 0xf6, 0xdb, 0x25, 0x18, 0xbf, 0xbe, - 0xbe, 0x5e, 0xbb, 0x46, 0x12, 0x21, 0x25, 0xf3, 0x1d, 0x47, 0x35, 0xcd, 0x6a, 0xd6, 0xf6, 0x96, - 0xcc, 0xaa, 0x6b, 0x27, 0x9e, 0x3f, 0xc7, 0x83, 0xd7, 0xe7, 0x56, 0x83, 0xe4, 0x76, 0x54, 0x4f, - 0x22, 0x2f, 0xd8, 0xea, 0x6a, 0x65, 0x4b, 0x49, 0x5e, 0xee, 0x25, 0xc9, 0xd1, 0x4b, 0x30, 0xc4, - 0xe2, 0xed, 0xa5, 0xea, 0xf1, 0x33, 0x4a, 0x4b, 0x60, 0xd0, 0x83, 0xbd, 0xd9, 0xca, 0x1d, 0xbc, - 0xca, 0xff, 0x60, 0x41, 0x8a, 0xbe, 0x08, 0xa3, 0xdb, 0x49, 0xd2, 0xba, 0x4e, 0x1c, 0x97, 0x44, - 0x52, 0x4a, 0x5c, 0x3c, 0x5c, 0x4a, 0xd0, 0xc1, 0xe0, 0x05, 0xd2, 0x85, 0x95, 0xc2, 0x62, 0xac, - 0x73, 0xb4, 0xeb, 0x00, 0x29, 0xee, 0x11, 0x59, 0x20, 0xf6, 0xcf, 0x95, 0x60, 0xf8, 0xba, 0x13, - 0xb8, 0x3e, 0x89, 0xd0, 0x0a, 0x0c, 0x90, 0x87, 0xa4, 0x21, 0xb6, 0xf1, 0x9c, 0xa6, 0xa7, 0x5b, - 0x1d, 0xf7, 0x7c, 0xd1, 0xff, 0x98, 0x95, 0x47, 0x18, 0x86, 0x69, 0xbb, 0xaf, 0xa9, 0x48, 0xd7, - 0x17, 0xf2, 0x47, 0x41, 0x4d, 0x09, 0xbe, 0x4f, 0x0a, 0x10, 0x96, 0x8c, 0x98, 0x8f, 0xa8, 0xd1, - 0xaa, 0x53, 0xe1, 0x96, 0x14, 0x0b, 0x6a, 0x5f, 0x5f, 0xaa, 0x71, 0x72, 0xc1, 0x97, 0xfb, 0x88, - 0x24, 0x10, 0xa7, 0xec, 0xec, 0xab, 0x70, 0x86, 0x1d, 0x31, 0x3a, 0xc9, 0xb6, 0xb1, 0x66, 0x72, - 0x27, 0xa7, 0xfd, 0xb7, 0x4b, 0x70, 0x6a, 0xb5, 0xbe, 0x54, 0x37, 0xbd, 0x7b, 0x57, 0x61, 0x8c, - 0x6f, 0xcf, 0x74, 0xd2, 0x39, 0xbe, 0x28, 0xaf, 0xdc, 0xe2, 0xeb, 0x1a, 0x0e, 0x1b, 0x94, 0xe8, - 0x49, 0x28, 0x7b, 0xef, 0x04, 0xd9, 0x18, 0xa6, 0xd5, 0x37, 0x6e, 0x61, 0x0a, 0xa7, 0x68, 0xba, - 0xd3, 0x73, 0x11, 0xa7, 0xd0, 0x6a, 0xb7, 0x7f, 0x1d, 0x26, 0xbc, 0xb8, 0x11, 0x7b, 0xab, 0x01, - 0x5d, 0xff, 0x4e, 0x43, 0x4e, 0xdf, 0x54, 0x35, 0xa7, 0x4d, 0x55, 0x58, 0x9c, 0xa1, 0xd6, 0xe4, - 0xed, 0x60, 0x61, 0x6d, 0x21, 0x3f, 0xe4, 0xf5, 0x4b, 0x50, 0x51, 0xe1, 0x3e, 0x32, 0x48, 0xcb, - 0xea, 0x1e, 0xa4, 0x55, 0x40, 0xe0, 0x48, 0x9f, 0x6b, 0xb9, 0xab, 0xcf, 0xf5, 0x1f, 0x58, 0x90, - 0x46, 0x36, 0x20, 0x0c, 0x95, 0x56, 0xc8, 0x0e, 0x34, 0x22, 0x79, 0x72, 0xf8, 0x4c, 0xce, 0x4c, - 0xe4, 0x2b, 0x81, 0xcf, 0x95, 0x9a, 0x2c, 0x8b, 0x53, 0x36, 0xe8, 0x26, 0x0c, 0xb7, 0x22, 0x52, - 0x4f, 0x58, 0xdc, 0x74, 0x1f, 0x1c, 0xd9, 0xac, 0xae, 0xf1, 0x92, 0x58, 0xb2, 0xb0, 0xff, 0xb9, - 0x05, 0x70, 0xd3, 0x6b, 0x7a, 0x09, 0x76, 0x82, 0x2d, 0x72, 0x02, 0xc6, 0xde, 0x2d, 0x18, 0x88, - 0x5b, 0xa4, 0x51, 0xec, 0x48, 0x2a, 0x6d, 0x59, 0xbd, 0x45, 0x1a, 0xe9, 0xe7, 0xa0, 0xff, 0x30, - 0xe3, 0x63, 0xff, 0x43, 0x80, 0x89, 0x94, 0x8c, 0x2a, 0xdc, 0xe8, 0x45, 0x23, 0x60, 0xf8, 0xf1, - 0x4c, 0xc0, 0x70, 0x85, 0x51, 0x6b, 0x31, 0xc2, 0x09, 0x94, 0x9b, 0xce, 0x43, 0xa1, 0xdf, 0xbf, - 0x52, 0xb4, 0x41, 0xb4, 0xa6, 0xb9, 0x35, 0xe7, 0x21, 0x57, 0xa7, 0x5e, 0x90, 0x13, 0x69, 0xcd, - 0x79, 0x78, 0xc0, 0x0f, 0x9e, 0xd8, 0x4a, 0xa4, 0x06, 0xc5, 0xd7, 0xfe, 0x4b, 0xfa, 0x9f, 0x09, - 0x47, 0x5a, 0x1d, 0xab, 0xd5, 0x0b, 0x84, 0x0b, 0xb1, 0xcf, 0x5a, 0xbd, 0x20, 0x5b, 0xab, 0x17, - 0x14, 0xa8, 0xd5, 0x0b, 0xd0, 0xbb, 0x16, 0x0c, 0x0b, 0xcf, 0x3b, 0x8b, 0x15, 0x1b, 0xbd, 0xf2, - 0xf1, 0xbe, 0xaa, 0x16, 0x2e, 0x7c, 0x5e, 0xfd, 0xbc, 0xd4, 0x21, 0x05, 0x34, 0xb7, 0x09, 0xb2, - 0x6a, 0xf4, 0xab, 0x16, 0x4c, 0x88, 0xdf, 0x98, 0xbc, 0xd3, 0x26, 0x71, 0x22, 0x76, 0xab, 0x4f, - 0x1f, 0xa5, 0x35, 0x82, 0x05, 0x6f, 0xd4, 0xc7, 0xa4, 0xa8, 0x31, 0x91, 0xb9, 0x6d, 0xcb, 0xb4, - 0x07, 0x7d, 0xcf, 0x82, 0x33, 0x4d, 0xe7, 0x21, 0xaf, 0x91, 0xc3, 0xb0, 0x93, 0x78, 0xa1, 0x88, - 0x87, 0x5b, 0xe9, 0x77, 0x9e, 0x74, 0x30, 0xe2, 0xcd, 0xfd, 0xa4, 0x3c, 0x0e, 0xed, 0x46, 0x92, - 0xdb, 0xe8, 0xae, 0x2d, 0x9c, 0x71, 0x61, 0x44, 0x4e, 0xcc, 0x2e, 0xda, 0xfb, 0xa2, 0xbe, 0x29, - 0x1f, 0xbe, 0x02, 0xa5, 0xbf, 0x6b, 0xee, 0x8d, 0xb6, 0x13, 0x24, 0x5e, 0xb2, 0xab, 0xe9, 0xfa, - 0xac, 0x16, 0x31, 0x11, 0x8f, 0xb1, 0x96, 0x6d, 0x18, 0xd3, 0xe7, 0xdc, 0x31, 0xd6, 0x14, 0xc2, - 0xe9, 0x2e, 0xf3, 0xe9, 0x18, 0x2b, 0x6c, 0xc3, 0xe3, 0x3d, 0xe7, 0xc5, 0xf1, 0x55, 0x6b, 0xff, - 0x33, 0x4b, 0x17, 0x98, 0x27, 0xe0, 0x41, 0x59, 0x33, 0x3d, 0x28, 0x17, 0x8b, 0xae, 0x9c, 0x1e, - 0x6e, 0x94, 0x4d, 0xbd, 0xf9, 0x74, 0x23, 0x40, 0xeb, 0x30, 0xe4, 0x53, 0x88, 0x3c, 0x64, 0xba, - 0xd4, 0xcf, 0xda, 0x4c, 0x75, 0x0c, 0x06, 0x8f, 0xb1, 0xe0, 0x65, 0x7f, 0xcf, 0x82, 0x81, 0x9f, - 0xe0, 0x25, 0x86, 0x0e, 0xd6, 0xe2, 0x1e, 0xee, 0x1c, 0x76, 0x1e, 0x2c, 0x3f, 0x4c, 0x48, 0x10, - 0x33, 0x95, 0xb2, 0xeb, 0x10, 0xfd, 0x7a, 0x09, 0x46, 0x69, 0x55, 0x32, 0x4c, 0xe0, 0x35, 0x18, - 0xf7, 0x9d, 0x0d, 0xe2, 0x4b, 0xef, 0x6f, 0xd6, 0xfc, 0xba, 0xa9, 0x23, 0xb1, 0x49, 0x4b, 0x0b, - 0x6f, 0xea, 0xce, 0x71, 0xa1, 0x1a, 0xa9, 0xc2, 0x86, 0xe7, 0x1c, 0x9b, 0xb4, 0xd4, 0x02, 0x78, - 0xe0, 0x24, 0x8d, 0x6d, 0x61, 0x9a, 0xa9, 0xe6, 0xde, 0xa3, 0x40, 0xcc, 0x71, 0x68, 0x01, 0x26, - 0xe5, 0x8c, 0xbd, 0x4b, 0x6d, 0xf6, 0x30, 0x10, 0x6a, 0xa3, 0xba, 0x08, 0x89, 0x4d, 0x34, 0xce, - 0xd2, 0xa3, 0x4f, 0xc0, 0x04, 0x1d, 0x9c, 0xb0, 0x9d, 0xc8, 0x20, 0x88, 0x41, 0x16, 0x04, 0xc1, - 0x22, 0x59, 0xd7, 0x0d, 0x0c, 0xce, 0x50, 0xda, 0x5f, 0x84, 0xd3, 0x37, 0x43, 0xc7, 0x5d, 0x74, - 0x7c, 0x27, 0x68, 0x90, 0x68, 0x35, 0xd8, 0xca, 0x3d, 0x2f, 0xd6, 0xcf, 0x74, 0x4b, 0x79, 0x67, - 0xba, 0x76, 0x04, 0x48, 0xaf, 0x40, 0x84, 0xef, 0xbc, 0x05, 0xc3, 0x1e, 0xaf, 0x4a, 0x4c, 0xdb, - 0xcb, 0x79, 0xce, 0xa5, 0x8e, 0x36, 0x6a, 0xe1, 0x28, 0x1c, 0x80, 0x25, 0x4b, 0x6a, 0x51, 0x74, - 0xf3, 0x46, 0xe5, 0x1b, 0x6d, 0xf6, 0x5f, 0xb4, 0x60, 0xf2, 0x56, 0xe6, 0x96, 0xdd, 0xb3, 0x30, - 0x14, 0x93, 0xa8, 0x8b, 0x6b, 0xad, 0xce, 0xa0, 0x58, 0x60, 0x1f, 0xb9, 0xb9, 0xfe, 0x4b, 0x25, - 0xa8, 0xb0, 0x40, 0xd0, 0x16, 0xb5, 0x0e, 0x8e, 0x5f, 0x39, 0x5d, 0x33, 0x94, 0xd3, 0x1c, 0xa3, - 0x51, 0x35, 0xac, 0x97, 0x6e, 0x8a, 0xee, 0xa8, 0xdb, 0x67, 0x85, 0xec, 0xc5, 0x94, 0x21, 0xbf, - 0xa1, 0x34, 0x61, 0x5e, 0x56, 0x93, 0x37, 0xd3, 0xd8, 0x29, 0xab, 0xa2, 0xfd, 0xc0, 0x9d, 0xb2, - 0xaa, 0x96, 0xf5, 0x10, 0x4e, 0x35, 0xad, 0xf1, 0x4c, 0x7c, 0x7f, 0x8a, 0x85, 0xf7, 0x39, 0xbe, - 0xf7, 0x65, 0xa2, 0x2e, 0x71, 0xce, 0x8a, 0x70, 0x3d, 0x01, 0x3d, 0x60, 0x72, 0x46, 0xfc, 0xe3, - 0x77, 0x74, 0xd3, 0x22, 0xf6, 0x75, 0x98, 0xcc, 0x0c, 0x1d, 0x7a, 0x05, 0x06, 0x5b, 0xdb, 0x4e, - 0x4c, 0x32, 0x81, 0x23, 0x83, 0x35, 0x0a, 0x3c, 0xd8, 0x9b, 0x9d, 0x50, 0x05, 0x18, 0x04, 0x73, - 0x6a, 0xfb, 0xdd, 0x12, 0x0c, 0xdc, 0x0a, 0xdd, 0x93, 0x98, 0x6a, 0xd7, 0x8d, 0xa9, 0xf6, 0x6c, - 0xfe, 0x0d, 0xff, 0x9e, 0xb3, 0xac, 0x96, 0x99, 0x65, 0x17, 0x0b, 0xf0, 0x3a, 0x7c, 0x82, 0x35, - 0x61, 0x94, 0x65, 0x10, 0x10, 0x91, 0x33, 0x2f, 0x19, 0xf6, 0xd4, 0x6c, 0xc6, 0x9e, 0x9a, 0xd4, - 0x48, 0x35, 0xab, 0xea, 0x39, 0x18, 0x16, 0x91, 0x1a, 0xd9, 0xe0, 0x46, 0x41, 0x8b, 0x25, 0xde, - 0xfe, 0x27, 0x65, 0x30, 0x32, 0x16, 0xa0, 0x1f, 0x58, 0x30, 0x17, 0xf1, 0xeb, 0x1a, 0x6e, 0xb5, - 0x1d, 0x79, 0xc1, 0x56, 0xbd, 0xb1, 0x4d, 0xdc, 0xb6, 0xef, 0x05, 0x5b, 0xab, 0x5b, 0x41, 0xa8, - 0xc0, 0xcb, 0x0f, 0x49, 0xa3, 0xcd, 0x9c, 0xae, 0x85, 0x13, 0x25, 0xa8, 0x13, 0xd0, 0x2b, 0xfb, - 0x7b, 0xb3, 0x73, 0xb8, 0xaf, 0x5a, 0x70, 0x9f, 0xad, 0x42, 0x7f, 0x64, 0xc1, 0x3c, 0xbf, 0xb3, - 0x5f, 0xbc, 0x27, 0x85, 0xec, 0xd0, 0x9a, 0x64, 0x9a, 0xb2, 0x5b, 0x27, 0x51, 0x73, 0xf1, 0x55, - 0x31, 0xc8, 0xf3, 0xb5, 0xfe, 0x6a, 0xc5, 0xfd, 0x36, 0xd3, 0xfe, 0x97, 0x65, 0x18, 0xa7, 0xe3, - 0x99, 0xde, 0xd3, 0x7d, 0xc5, 0x98, 0x26, 0x4f, 0x65, 0xa6, 0xc9, 0x29, 0x83, 0xf8, 0xd1, 0x5c, - 0xd1, 0x8d, 0xe1, 0x94, 0xef, 0xc4, 0xc9, 0x75, 0xe2, 0x44, 0xc9, 0x06, 0x71, 0xd8, 0x41, 0x63, - 0x36, 0x88, 0xa1, 0xc0, 0xd9, 0xa5, 0x8a, 0xfe, 0xb9, 0x99, 0x65, 0x86, 0x3b, 0xf9, 0xa3, 0x1d, - 0x40, 0xec, 0x50, 0x33, 0x72, 0x82, 0x98, 0xf7, 0xc5, 0x13, 0x6e, 0xda, 0xfe, 0x6a, 0x9d, 0x11, - 0xb5, 0xa2, 0x9b, 0x1d, 0xdc, 0x70, 0x97, 0x1a, 0xb4, 0x63, 0xeb, 0xc1, 0xa2, 0xc7, 0xd6, 0x43, - 0x39, 0x51, 0xc5, 0xbf, 0x60, 0xc1, 0x69, 0xfa, 0x59, 0xcc, 0x08, 0xd4, 0x18, 0x85, 0x30, 0x49, - 0xa7, 0x9d, 0x4f, 0x12, 0x09, 0x13, 0xeb, 0x2b, 0x47, 0xb3, 0x36, 0xf9, 0xa4, 0xea, 0xdb, 0x0d, - 0x93, 0x19, 0xce, 0x72, 0xb7, 0xbf, 0x6d, 0x01, 0x0b, 0x71, 0x3b, 0x81, 0xcd, 0xec, 0x9a, 0xb9, - 0x99, 0xd9, 0xf9, 0x12, 0xa3, 0xc7, 0x3e, 0xf6, 0x32, 0x4c, 0x51, 0x6c, 0x2d, 0x0a, 0x1f, 0xee, - 0x4a, 0x45, 0x3b, 0xdf, 0x5f, 0xfb, 0x6e, 0x89, 0x2f, 0x1b, 0x75, 0xef, 0x0c, 0xfd, 0xa2, 0x05, - 0x23, 0x0d, 0xa7, 0xe5, 0x34, 0x78, 0xbe, 0x97, 0x02, 0x3e, 0x19, 0xa3, 0xfc, 0xdc, 0x92, 0x28, - 0xcb, 0xfd, 0x09, 0x1f, 0x95, 0x5d, 0x97, 0xe0, 0x5c, 0x1f, 0x82, 0xaa, 0x7c, 0xc6, 0x83, 0x71, - 0x83, 0xd9, 0x31, 0x1a, 0xa1, 0xbf, 0x68, 0x71, 0x91, 0xaf, 0x0c, 0x85, 0x07, 0x70, 0x2a, 0xd0, - 0xfe, 0x53, 0x61, 0x26, 0xf5, 0xe2, 0xb9, 0xe2, 0x42, 0x9d, 0xc9, 0x40, 0x2d, 0x98, 0x2f, 0xc3, - 0x10, 0x77, 0xd6, 0x61, 0xff, 0x1d, 0x0b, 0x1e, 0xd3, 0x09, 0xb5, 0x6b, 0x82, 0x79, 0xbe, 0xe2, - 0x2a, 0x8c, 0x84, 0x2d, 0x12, 0x39, 0xa9, 0x51, 0x74, 0x51, 0x8e, 0xfe, 0x6d, 0x01, 0x3f, 0xd8, - 0x9b, 0x3d, 0xa3, 0x73, 0x97, 0x70, 0xac, 0x4a, 0x22, 0x1b, 0x86, 0xd8, 0xb8, 0xc4, 0xe2, 0x82, - 0x27, 0xcb, 0x7e, 0xc2, 0x4e, 0x48, 0x62, 0x2c, 0x30, 0xf6, 0x5f, 0xb5, 0xf8, 0x64, 0xd3, 0x9b, - 0x8e, 0xbe, 0x02, 0x53, 0x4d, 0x6a, 0x3f, 0x2d, 0x3f, 0x6c, 0xd1, 0x6d, 0x94, 0x9d, 0x0c, 0x5b, - 0x45, 0x36, 0x8f, 0x1e, 0xdd, 0x5d, 0x9c, 0x16, 0xad, 0x9f, 0x5a, 0xcb, 0xb0, 0xc5, 0x1d, 0x15, - 0xd9, 0x7f, 0x2c, 0x56, 0x2c, 0xd3, 0xe0, 0x9e, 0x83, 0xe1, 0x56, 0xe8, 0x2e, 0xad, 0x56, 0xb1, - 0x18, 0x2b, 0x25, 0x72, 0x6a, 0x1c, 0x8c, 0x25, 0x1e, 0x5d, 0x01, 0x20, 0x0f, 0x13, 0x12, 0x05, - 0x8e, 0xaf, 0x4e, 0x74, 0x95, 0xa2, 0xb4, 0xac, 0x30, 0x58, 0xa3, 0xa2, 0x65, 0x5a, 0x51, 0xb8, - 0xe3, 0xb9, 0x2c, 0xb2, 0xbe, 0x6c, 0x96, 0xa9, 0x29, 0x0c, 0xd6, 0xa8, 0xa8, 0xd5, 0xda, 0x0e, - 0x62, 0xbe, 0x89, 0x39, 0x1b, 0x22, 0x59, 0xc7, 0x48, 0x6a, 0xb5, 0xde, 0xd1, 0x91, 0xd8, 0xa4, - 0xb5, 0xff, 0x63, 0x05, 0x20, 0x55, 0x93, 0xd0, 0xbb, 0x9d, 0x2b, 0xf4, 0x63, 0x45, 0x75, 0xac, - 0x47, 0xb7, 0x3c, 0xd1, 0x37, 0x2c, 0x18, 0x75, 0x7c, 0x3f, 0x6c, 0x38, 0x09, 0xeb, 0x51, 0xa9, - 0xa8, 0xac, 0x10, 0x2d, 0x59, 0x48, 0xcb, 0xf2, 0xc6, 0xbc, 0x24, 0x0f, 0xfc, 0x34, 0x4c, 0x6e, - 0x7b, 0xf4, 0x26, 0xa0, 0x8f, 0x4a, 0x35, 0x9b, 0x7f, 0x94, 0x99, 0xac, 0x9a, 0x5d, 0x61, 0x12, - 0x52, 0xd3, 0xb0, 0xd1, 0x17, 0x8d, 0x7c, 0x14, 0x03, 0x45, 0xee, 0x15, 0x1a, 0x8a, 0x43, 0x5e, - 0x2a, 0x0a, 0xf4, 0x39, 0x3d, 0xe8, 0x78, 0xb0, 0xc8, 0xc5, 0x5d, 0x4d, 0x7f, 0xcd, 0x09, 0x38, - 0x4e, 0x60, 0xd2, 0x35, 0xb7, 0x4a, 0x11, 0x94, 0x75, 0x39, 0xbf, 0x86, 0xcc, 0x1e, 0x9b, 0x6e, - 0x8e, 0x19, 0x04, 0xce, 0x56, 0x81, 0x3e, 0xc7, 0x43, 0xc2, 0x57, 0x83, 0xcd, 0x50, 0x04, 0x66, - 0x5d, 0x2a, 0xf0, 0xcd, 0x77, 0xe3, 0x84, 0x34, 0x69, 0x99, 0x74, 0x37, 0xbc, 0x25, 0xb8, 0x60, - 0xc5, 0x0f, 0xad, 0xc3, 0x10, 0xbb, 0xc0, 0x12, 0x4f, 0x8f, 0x14, 0x71, 0x9d, 0x99, 0xf7, 0x36, - 0x53, 0x15, 0x84, 0xfd, 0x8d, 0xb1, 0xe0, 0x85, 0xae, 0xcb, 0xfb, 0xd3, 0xf1, 0x6a, 0x70, 0x27, - 0x26, 0xec, 0xfe, 0x74, 0x65, 0xf1, 0xc3, 0xe9, 0x85, 0x68, 0x0e, 0xef, 0x9a, 0x91, 0xcb, 0x28, - 0x49, 0x35, 0x11, 0xf1, 0x5f, 0x26, 0xfa, 0x9a, 0x86, 0x22, 0x0d, 0x35, 0xd3, 0x82, 0xa5, 0x83, - 0x7d, 0xd7, 0x64, 0x86, 0xb3, 0xdc, 0x4f, 0x70, 0x0f, 0x9c, 0xf1, 0x61, 0x2a, 0xbb, 0x24, 0x8f, - 0x71, 0xc7, 0xfd, 0xd3, 0x01, 0x98, 0x30, 0x27, 0x06, 0x9a, 0x87, 0x8a, 0xd0, 0xa6, 0x54, 0xd2, - 0x1f, 0x35, 0xff, 0xd7, 0x24, 0x02, 0xa7, 0x34, 0x2c, 0xfd, 0x11, 0x2b, 0xae, 0x85, 0xe3, 0xa4, - 0xe9, 0x8f, 0x14, 0x06, 0x6b, 0x54, 0x54, 0x6d, 0xdd, 0x08, 0xc3, 0x44, 0x09, 0x6e, 0x35, 0x67, - 0x16, 0x19, 0x14, 0x0b, 0x2c, 0x15, 0xd8, 0xf7, 0x69, 0x87, 0x7c, 0xd3, 0x05, 0xa8, 0x04, 0xf6, - 0x0d, 0x1d, 0x89, 0x4d, 0x5a, 0xba, 0x01, 0x85, 0x31, 0x9b, 0x84, 0x42, 0x39, 0x4e, 0xc3, 0x9b, - 0xea, 0xfc, 0x42, 0x97, 0xc4, 0xa3, 0xcf, 0xc2, 0x63, 0xea, 0xfe, 0x15, 0xe6, 0x2e, 0x55, 0x59, - 0xe3, 0x90, 0x61, 0xdf, 0x3e, 0xb6, 0xd4, 0x9d, 0x0c, 0xf7, 0x2a, 0x8f, 0x5e, 0x87, 0x09, 0xa1, - 0xd8, 0x4a, 0x8e, 0xc3, 0xe6, 0xe9, 0xf7, 0x0d, 0x03, 0x8b, 0x33, 0xd4, 0xa8, 0x0a, 0x53, 0x14, - 0xc2, 0x34, 0x4a, 0xc9, 0x81, 0xdf, 0x23, 0x53, 0x3b, 0xf3, 0x8d, 0x0c, 0x1e, 0x77, 0x94, 0x40, - 0x0b, 0x30, 0xc9, 0x75, 0x0b, 0x6a, 0xc5, 0xb1, 0xef, 0x20, 0x22, 0x29, 0xd5, 0x22, 0xb8, 0x6d, - 0xa2, 0x71, 0x96, 0x1e, 0x5d, 0x85, 0x31, 0x27, 0x6a, 0x6c, 0x7b, 0x09, 0x69, 0x24, 0xed, 0x88, - 0x67, 0x26, 0xd0, 0xc2, 0x07, 0x16, 0x34, 0x1c, 0x36, 0x28, 0xed, 0x2f, 0xc3, 0xe9, 0x2e, 0x61, - 0xdb, 0x74, 0xe2, 0x38, 0x2d, 0x4f, 0xf6, 0x29, 0x13, 0xa8, 0xb4, 0x50, 0x5b, 0x95, 0xbd, 0xd1, - 0xa8, 0xe8, 0xec, 0x64, 0xbe, 0x64, 0x2d, 0x27, 0x9f, 0x9a, 0x9d, 0x2b, 0x12, 0x81, 0x53, 0x1a, - 0xfb, 0x7f, 0x56, 0x40, 0x73, 0xb5, 0x14, 0x08, 0x4f, 0xb9, 0x0a, 0x63, 0x32, 0xcd, 0xa4, 0x96, - 0xde, 0x4d, 0x75, 0xf3, 0x9a, 0x86, 0xc3, 0x06, 0x25, 0x6d, 0x5b, 0x20, 0x1d, 0x48, 0xd9, 0xb0, - 0x28, 0xe5, 0x59, 0xc2, 0x29, 0x0d, 0xba, 0x04, 0x23, 0x31, 0xf1, 0x37, 0x6f, 0x7a, 0xc1, 0x7d, - 0x31, 0xb1, 0x95, 0x54, 0xae, 0x0b, 0x38, 0x56, 0x14, 0x68, 0x11, 0xca, 0x6d, 0xcf, 0x15, 0x53, - 0x59, 0xaa, 0x0c, 0xe5, 0x3b, 0xab, 0xd5, 0x83, 0xbd, 0xd9, 0xa7, 0x7a, 0xe5, 0xe9, 0xa4, 0xc6, - 0x74, 0x3c, 0x47, 0x97, 0x1f, 0x2d, 0xdc, 0xcd, 0xa9, 0x3e, 0xd4, 0xa7, 0x53, 0xfd, 0x0a, 0x80, - 0xe8, 0xb5, 0x9c, 0xcb, 0xe5, 0xf4, 0xab, 0x5d, 0x53, 0x18, 0xac, 0x51, 0x51, 0x93, 0xbc, 0x11, - 0x11, 0x47, 0x5a, 0xad, 0x3c, 0x9c, 0x78, 0xe4, 0xe8, 0x26, 0xf9, 0x52, 0x96, 0x19, 0xee, 0xe4, - 0x8f, 0x42, 0x38, 0xe5, 0xd2, 0x85, 0x64, 0x54, 0x5a, 0xe9, 0x3f, 0x86, 0x99, 0x56, 0x58, 0xcd, - 0x32, 0xc2, 0x9d, 0xbc, 0xd1, 0x17, 0x60, 0x46, 0x02, 0x3b, 0x6f, 0x58, 0xb2, 0xe5, 0x52, 0x5e, - 0x3c, 0xbf, 0xbf, 0x37, 0x3b, 0x53, 0xed, 0x49, 0x85, 0x0f, 0xe1, 0x80, 0xde, 0x82, 0x21, 0x76, - 0x08, 0x13, 0x4f, 0x8f, 0xb2, 0xdd, 0xee, 0xe5, 0x22, 0x91, 0xf0, 0x74, 0xd6, 0xcf, 0xb1, 0xa3, - 0x1c, 0x11, 0xe3, 0x99, 0x9e, 0x6c, 0x31, 0x20, 0x16, 0x3c, 0x51, 0x0b, 0x46, 0x9d, 0x20, 0x08, - 0x13, 0x87, 0x2b, 0x61, 0x63, 0x45, 0xf4, 0x48, 0xad, 0x8a, 0x85, 0xb4, 0x2c, 0xaf, 0x47, 0x05, - 0x8e, 0x69, 0x18, 0xac, 0x57, 0x81, 0x1e, 0xc0, 0x64, 0xf8, 0x80, 0x0a, 0x4c, 0x79, 0x0e, 0x11, - 0x4f, 0x8f, 0x9b, 0x1d, 0xcb, 0xf1, 0xaa, 0x1a, 0x85, 0x35, 0x49, 0x66, 0x32, 0xc5, 0xd9, 0x5a, - 0xd0, 0x9c, 0xe1, 0x5b, 0x9e, 0x48, 0x23, 0x99, 0x53, 0xdf, 0xb2, 0xee, 0x4a, 0x66, 0xb7, 0x78, - 0x79, 0xf4, 0x22, 0x93, 0x08, 0x93, 0x99, 0x5b, 0xbc, 0x29, 0x0a, 0xeb, 0x74, 0x33, 0x1f, 0x87, - 0x51, 0x6d, 0xe0, 0xfb, 0x09, 0x99, 0x9d, 0x79, 0x1d, 0xa6, 0xb2, 0x03, 0xda, 0x57, 0xc8, 0xed, - 0xff, 0x28, 0xc1, 0x64, 0x97, 0x43, 0x9e, 0xfb, 0x1e, 0x0b, 0xfb, 0x36, 0x44, 0xdf, 0x0d, 0x2f, - 0x70, 0x31, 0xc3, 0x98, 0x02, 0xac, 0x54, 0x40, 0x80, 0x49, 0x69, 0x5a, 0xee, 0x29, 0x4d, 0x85, - 0xd0, 0x1a, 0x78, 0x3f, 0x42, 0xcb, 0xdc, 0x27, 0x06, 0x0b, 0xed, 0x13, 0x8f, 0x40, 0xd0, 0x19, - 0x5b, 0xcd, 0x70, 0x81, 0xad, 0xe6, 0x5b, 0x25, 0x98, 0x4a, 0xc3, 0x8b, 0x45, 0xee, 0xd9, 0xe3, - 0x3f, 0x33, 0x58, 0x37, 0xce, 0x0c, 0xf2, 0x52, 0xcb, 0x66, 0xda, 0xd7, 0xf3, 0xfc, 0xe0, 0xad, - 0xcc, 0xf9, 0xc1, 0xcb, 0x7d, 0xf2, 0x3d, 0xfc, 0x2c, 0xe1, 0xbb, 0x25, 0x38, 0x9b, 0x2d, 0xb2, - 0xe4, 0x3b, 0x5e, 0xf3, 0x04, 0xc6, 0xeb, 0xb3, 0xc6, 0x78, 0xbd, 0xda, 0x5f, 0xbf, 0x58, 0x23, - 0x7b, 0x0e, 0x9a, 0x93, 0x19, 0xb4, 0x8f, 0x1f, 0x85, 0xf9, 0xe1, 0x23, 0xf7, 0x07, 0x16, 0x3c, - 0xde, 0xb5, 0xdc, 0x09, 0x78, 0x49, 0xdf, 0x34, 0xbd, 0xa4, 0x2f, 0x1d, 0xa1, 0x77, 0x3d, 0xdc, - 0xa6, 0xff, 0xb5, 0xd4, 0xa3, 0x57, 0xcc, 0x93, 0x74, 0x1b, 0x46, 0x9d, 0x46, 0x83, 0xc4, 0xf1, - 0x5a, 0xe8, 0xaa, 0x7c, 0x40, 0x2f, 0xb2, 0xbd, 0x25, 0x05, 0x1f, 0xec, 0xcd, 0xce, 0x64, 0x59, - 0xa4, 0x68, 0xac, 0x73, 0x30, 0xf3, 0x85, 0x95, 0x8e, 0x29, 0x5f, 0xd8, 0x15, 0x80, 0x1d, 0x65, - 0xc1, 0x66, 0x1d, 0x54, 0x9a, 0x6d, 0xab, 0x51, 0xa1, 0x3f, 0xcf, 0x34, 0x42, 0x1e, 0x51, 0x31, - 0x60, 0xde, 0x54, 0xcc, 0xf9, 0x7e, 0x7a, 0x74, 0x06, 0xbf, 0x10, 0xa9, 0x9c, 0x79, 0x8a, 0xa5, - 0xfd, 0x4f, 0xcb, 0xf0, 0x33, 0x87, 0x4c, 0x3a, 0xb4, 0x60, 0x1e, 0x90, 0xbe, 0x90, 0xf5, 0xdc, - 0xcc, 0x74, 0x2d, 0x6c, 0xb8, 0x72, 0x32, 0xdf, 0xaa, 0xf4, 0xbe, 0xbf, 0xd5, 0x37, 0x75, 0x3f, - 0x1b, 0x0f, 0x8c, 0xbc, 0x76, 0xe4, 0x65, 0xf5, 0xd3, 0xe9, 0x17, 0xff, 0x9a, 0x05, 0x4f, 0x75, - 0xed, 0x94, 0x11, 0x8e, 0x31, 0x0f, 0x95, 0x06, 0x05, 0x6a, 0x37, 0x58, 0xd2, 0xab, 0x63, 0x12, - 0x81, 0x53, 0x1a, 0x23, 0xea, 0xa2, 0x94, 0x1b, 0x75, 0xf1, 0x7b, 0x16, 0x9c, 0xc9, 0x36, 0xe2, - 0x04, 0x64, 0x4e, 0xdd, 0x94, 0x39, 0x73, 0xfd, 0x7d, 0xfa, 0x1e, 0xe2, 0xe6, 0x57, 0xc7, 0xe1, - 0x5c, 0xc7, 0x8e, 0xc5, 0x47, 0xf1, 0x67, 0x2d, 0x38, 0xb5, 0xc5, 0x34, 0x6f, 0xed, 0x9a, 0x90, - 0xe8, 0x57, 0xce, 0xdd, 0xaa, 0x43, 0x6f, 0x17, 0x71, 0x3b, 0xa2, 0x83, 0x04, 0x77, 0x56, 0x86, - 0xbe, 0x6e, 0xc1, 0x19, 0xe7, 0x41, 0xdc, 0xf1, 0xaa, 0x81, 0x98, 0x46, 0xaf, 0xe7, 0x38, 0xb9, - 0x72, 0xde, 0x43, 0x58, 0x9c, 0xde, 0xdf, 0x9b, 0x3d, 0xd3, 0x8d, 0x0a, 0x77, 0xad, 0x95, 0x7e, - 0xdf, 0x6d, 0x71, 0x0d, 0xa1, 0xd8, 0x85, 0xb7, 0x6e, 0x97, 0x16, 0xb8, 0x48, 0x92, 0x18, 0xac, - 0x38, 0xa2, 0xb7, 0xa1, 0xb2, 0x25, 0x6f, 0x06, 0x65, 0x45, 0x5e, 0x8f, 0x61, 0xee, 0x76, 0x91, - 0x88, 0x87, 0xc6, 0x2b, 0x14, 0x4e, 0x99, 0xa2, 0xeb, 0x50, 0x0e, 0x36, 0x63, 0x71, 0x07, 0x37, - 0x2f, 0xd8, 0xc6, 0x0c, 0x71, 0xe2, 0xd7, 0x16, 0x6f, 0xad, 0xd4, 0x31, 0x65, 0x41, 0x39, 0x45, - 0x1b, 0xae, 0xf0, 0xee, 0xe6, 0x70, 0xc2, 0x8b, 0xd5, 0x4e, 0x4e, 0x78, 0xb1, 0x8a, 0x29, 0x0b, - 0x54, 0x83, 0x41, 0x76, 0xc9, 0x41, 0xb8, 0x6e, 0x73, 0x2e, 0x6a, 0x77, 0x5c, 0xe5, 0xe0, 0xc9, - 0xf0, 0x18, 0x18, 0x73, 0x46, 0x68, 0x1d, 0x86, 0x1a, 0x2c, 0x81, 0xb7, 0xb0, 0xab, 0xf3, 0xd2, - 0x0c, 0x74, 0x24, 0xfb, 0xe6, 0x47, 0x4c, 0x1c, 0x8e, 0x05, 0x2f, 0xc6, 0x95, 0xb4, 0xb6, 0x37, - 0x63, 0x61, 0x38, 0xe7, 0x71, 0xed, 0x48, 0xc5, 0x2e, 0xb8, 0x32, 0x38, 0x16, 0xbc, 0x50, 0x15, - 0x4a, 0x9b, 0x0d, 0x91, 0xd9, 0x32, 0xc7, 0x65, 0x6b, 0xde, 0x41, 0x5d, 0x1c, 0xda, 0xdf, 0x9b, - 0x2d, 0xad, 0x2c, 0xe1, 0xd2, 0x66, 0x03, 0xbd, 0x09, 0xc3, 0x9b, 0xfc, 0x56, 0xa1, 0xc8, 0x62, - 0x79, 0x39, 0xef, 0xea, 0x63, 0xc7, 0x15, 0x44, 0x7e, 0xfd, 0x41, 0x20, 0xb0, 0x64, 0xc7, 0x52, - 0x8b, 0xa9, 0x7b, 0x92, 0x22, 0x8d, 0xe5, 0x5c, 0x7f, 0xf7, 0x2a, 0x85, 0x3d, 0xa9, 0xa0, 0x58, - 0xe3, 0x48, 0xe7, 0xbc, 0x23, 0xdf, 0x22, 0x60, 0x29, 0x2c, 0x73, 0xe7, 0x7c, 0xd7, 0xa7, 0x0b, - 0xf8, 0x9c, 0x57, 0x28, 0x9c, 0x32, 0x45, 0x6d, 0x18, 0xdf, 0x89, 0x5b, 0xdb, 0x44, 0x2e, 0x7d, - 0x96, 0xd7, 0x72, 0xf4, 0xca, 0x27, 0x73, 0x92, 0x95, 0x8a, 0x22, 0x5e, 0x94, 0xb4, 0x1d, 0xbf, - 0x43, 0x82, 0xb1, 0x5c, 0x4e, 0x77, 0x75, 0xb6, 0xd8, 0xac, 0x85, 0x7e, 0x92, 0x77, 0xda, 0xe1, - 0xc6, 0x6e, 0x42, 0x44, 0xde, 0xcb, 0x9c, 0x4f, 0xf2, 0x06, 0x27, 0xee, 0xfc, 0x24, 0x02, 0x81, - 0x25, 0x3b, 0x35, 0x64, 0x4c, 0x1a, 0x4f, 0x15, 0x1e, 0xb2, 0x8e, 0x3e, 0xa4, 0x43, 0xc6, 0xa4, - 0x6f, 0xca, 0x94, 0x49, 0xdd, 0xd6, 0x76, 0x98, 0x84, 0x41, 0x46, 0xf6, 0x9f, 0x2a, 0x22, 0x75, - 0x6b, 0x5d, 0x4a, 0x76, 0x4a, 0xdd, 0x6e, 0x54, 0xb8, 0x6b, 0xad, 0xf6, 0x1f, 0x0f, 0x76, 0x6e, - 0xb7, 0x4c, 0x19, 0xfe, 0x2b, 0x9d, 0xe7, 0x8e, 0x9f, 0xee, 0xdf, 0xe6, 0x7b, 0x84, 0x27, 0x90, - 0x5f, 0xb7, 0xe0, 0x5c, 0xab, 0xeb, 0x66, 0x2a, 0x36, 0xac, 0x7e, 0x4d, 0x47, 0x3e, 0x60, 0x2a, - 0xa9, 0x6b, 0x77, 0x3c, 0xee, 0x51, 0x67, 0x56, 0x01, 0x2d, 0xbf, 0x6f, 0x05, 0xf4, 0x1e, 0x8c, - 0x30, 0x9d, 0x29, 0xcd, 0xab, 0xd1, 0x67, 0x0a, 0x0a, 0xb6, 0xf5, 0x2d, 0x09, 0x16, 0x58, 0x31, - 0xa3, 0x03, 0xf7, 0x64, 0xb6, 0x13, 0x98, 0x30, 0xb4, 0xc8, 0x46, 0xcb, 0x7d, 0x1d, 0x2b, 0x62, - 0x24, 0x9e, 0xac, 0x1d, 0x46, 0x7c, 0x90, 0x47, 0x80, 0x0f, 0xaf, 0xec, 0x24, 0x15, 0xda, 0xbf, - 0x67, 0x75, 0xd1, 0xbf, 0xb8, 0x09, 0xf2, 0x49, 0xd3, 0x04, 0x79, 0x36, 0x6b, 0x82, 0x74, 0xb8, - 0x0d, 0x0c, 0xeb, 0xa3, 0x78, 0xf2, 0xc4, 0xa2, 0x09, 0x3f, 0x6c, 0x1f, 0x2e, 0xe4, 0x2d, 0x6e, - 0x16, 0xe1, 0xe3, 0xaa, 0xe3, 0xb2, 0x34, 0xc2, 0xc7, 0x5d, 0xad, 0x62, 0x86, 0x29, 0x7a, 0x67, - 0xdc, 0xfe, 0xb9, 0x12, 0x94, 0x6b, 0xa1, 0x7b, 0x02, 0x6e, 0x90, 0x6b, 0x86, 0x1b, 0xe4, 0x99, - 0xdc, 0x97, 0x98, 0x7a, 0x3a, 0x3d, 0x6e, 0x67, 0x9c, 0x1e, 0x1f, 0xc9, 0x67, 0x75, 0xb8, 0x8b, - 0xe3, 0x7b, 0x65, 0xd0, 0xdf, 0x92, 0x42, 0xff, 0xe1, 0x28, 0x81, 0x9f, 0xe5, 0x62, 0xcf, 0x4b, - 0x89, 0x3a, 0x58, 0x88, 0x90, 0xbc, 0x24, 0xf6, 0x53, 0x1b, 0xff, 0x79, 0x8f, 0x78, 0x5b, 0xdb, - 0x09, 0x71, 0xb3, 0x1d, 0x3b, 0xb9, 0xf8, 0xcf, 0xff, 0x66, 0xc1, 0x64, 0xa6, 0x76, 0xe4, 0x77, - 0xbb, 0x67, 0x72, 0x44, 0xc7, 0xc6, 0xa9, 0xdc, 0x8b, 0x29, 0x73, 0x00, 0xca, 0x3f, 0x2d, 0xdd, - 0x0f, 0x4c, 0x17, 0x53, 0x0e, 0xec, 0x18, 0x6b, 0x14, 0xe8, 0x15, 0x18, 0x4d, 0xc2, 0x56, 0xe8, - 0x87, 0x5b, 0xbb, 0x37, 0x88, 0xcc, 0x66, 0xa0, 0x7c, 0xfb, 0xeb, 0x29, 0x0a, 0xeb, 0x74, 0xf6, - 0xf7, 0xcb, 0x90, 0x7d, 0x89, 0xec, 0xff, 0xcf, 0xd3, 0x9f, 0x9e, 0x79, 0xfa, 0x87, 0x16, 0x4c, - 0xd1, 0xda, 0x59, 0x80, 0x87, 0x8c, 0xd3, 0x54, 0xf9, 0xd4, 0xad, 0x43, 0xf2, 0xa9, 0x3f, 0x4b, - 0xa5, 0x9d, 0x1b, 0xb6, 0x13, 0xe1, 0x32, 0xd1, 0x84, 0x18, 0x85, 0x62, 0x81, 0x15, 0x74, 0x24, - 0x8a, 0xc4, 0x85, 0x16, 0x9d, 0x8e, 0x44, 0x11, 0x16, 0x58, 0x99, 0x6e, 0x7d, 0xa0, 0x47, 0xba, - 0x75, 0x96, 0x0f, 0x48, 0x04, 0x16, 0x08, 0x75, 0x40, 0xcb, 0x07, 0x24, 0x23, 0x0e, 0x52, 0x1a, - 0xfb, 0x3b, 0x65, 0x18, 0xab, 0x85, 0x6e, 0x1a, 0x80, 0xfd, 0xb2, 0x11, 0x80, 0x7d, 0x21, 0x13, - 0x80, 0x3d, 0xa5, 0xd3, 0x3e, 0x9a, 0xf8, 0x6b, 0x91, 0x37, 0x8a, 0x3d, 0x08, 0x70, 0xc4, 0xd8, - 0x6b, 0x23, 0x6f, 0x94, 0x62, 0x84, 0x4d, 0xbe, 0x7f, 0x96, 0x62, 0xae, 0xff, 0xb7, 0x05, 0x13, - 0xb5, 0xd0, 0xa5, 0x13, 0xf4, 0xcf, 0xd2, 0x6c, 0xd4, 0xb3, 0x4d, 0x0d, 0x1d, 0x92, 0x6d, 0xea, - 0x1f, 0x59, 0x30, 0x5c, 0x0b, 0xdd, 0x13, 0x70, 0x27, 0xae, 0x98, 0xee, 0xc4, 0xa7, 0x72, 0x25, - 0x6f, 0x0f, 0x0f, 0xe2, 0x6f, 0x96, 0x61, 0x9c, 0xb6, 0x38, 0xdc, 0x92, 0xdf, 0xcb, 0x18, 0x1b, - 0xab, 0xc0, 0xd8, 0x50, 0x95, 0x30, 0xf4, 0xfd, 0xf0, 0x41, 0xf6, 0xdb, 0xad, 0x30, 0x28, 0x16, - 0x58, 0x74, 0x09, 0x46, 0x5a, 0x11, 0xd9, 0xf1, 0xc2, 0x76, 0x9c, 0xbd, 0x1c, 0x57, 0x13, 0x70, - 0xac, 0x28, 0xd0, 0xcb, 0x30, 0x16, 0x7b, 0x41, 0x83, 0xc8, 0xb0, 0x83, 0x01, 0x16, 0x76, 0xc0, - 0x13, 0xfb, 0x69, 0x70, 0x6c, 0x50, 0xa1, 0x7b, 0x50, 0x61, 0xff, 0xd9, 0x0a, 0xea, 0x3f, 0x53, - 0x3b, 0xcf, 0x66, 0x25, 0x19, 0xe0, 0x94, 0x17, 0xba, 0x02, 0x90, 0xc8, 0x00, 0x89, 0x58, 0x64, - 0xe5, 0x50, 0x7a, 0xa9, 0x0a, 0x9d, 0x88, 0xb1, 0x46, 0x85, 0x5e, 0x80, 0x4a, 0xe2, 0x78, 0xfe, - 0x4d, 0x2f, 0x20, 0xb1, 0x08, 0x30, 0x11, 0x89, 0x74, 0x05, 0x10, 0xa7, 0x78, 0xba, 0xdf, 0xb3, - 0xab, 0xb9, 0xfc, 0x15, 0x88, 0x11, 0x46, 0xcd, 0xf6, 0xfb, 0x9b, 0x0a, 0x8a, 0x35, 0x0a, 0xfb, - 0x25, 0xb6, 0x6f, 0xf7, 0x19, 0x9f, 0xff, 0xa3, 0x12, 0xa0, 0x1a, 0x0b, 0xc4, 0x30, 0x1e, 0xe0, - 0xd8, 0x86, 0x89, 0x98, 0xdc, 0xf4, 0x82, 0xf6, 0x43, 0xc1, 0xaa, 0xd8, 0x85, 0x88, 0xfa, 0xb2, - 0x5e, 0x86, 0xdf, 0x46, 0x35, 0x61, 0x38, 0xc3, 0x97, 0x0e, 0x49, 0xd4, 0x0e, 0x16, 0xe2, 0x3b, - 0x31, 0x89, 0xc4, 0x53, 0x17, 0x6c, 0x48, 0xb0, 0x04, 0xe2, 0x14, 0x4f, 0xa7, 0x00, 0xfb, 0x73, - 0x2b, 0x0c, 0x70, 0x18, 0x26, 0x72, 0xd2, 0xb0, 0xd4, 0xe7, 0x1a, 0x1c, 0x1b, 0x54, 0x68, 0x05, - 0x50, 0xdc, 0x6e, 0xb5, 0x7c, 0x76, 0xb6, 0xe5, 0xf8, 0xd7, 0xa2, 0xb0, 0xdd, 0xe2, 0xb1, 0xb8, - 0x22, 0x6b, 0x78, 0xbd, 0x03, 0x8b, 0xbb, 0x94, 0xa0, 0x4b, 0x7e, 0x33, 0x66, 0xbf, 0xc5, 0x6d, - 0x5b, 0xee, 0x63, 0xab, 0x33, 0x10, 0x96, 0x38, 0xfb, 0xab, 0x6c, 0x9b, 0x62, 0x6f, 0x10, 0x24, - 0xed, 0x88, 0xa0, 0x26, 0x8c, 0xb7, 0xd8, 0x56, 0x94, 0x44, 0xa1, 0xef, 0x13, 0xa9, 0x25, 0x1e, - 0x2d, 0x14, 0x84, 0x67, 0x1d, 0xd7, 0xd9, 0x61, 0x93, 0xbb, 0xfd, 0xe3, 0x51, 0x26, 0x71, 0xc4, - 0xf1, 0xe2, 0xb0, 0x08, 0xf8, 0x14, 0xfa, 0xd8, 0x87, 0x8b, 0xbc, 0xe9, 0x93, 0x4a, 0x73, 0x11, - 0x3e, 0x8a, 0x25, 0x17, 0xf4, 0x79, 0x16, 0xce, 0xcc, 0x97, 0x79, 0xf1, 0x87, 0xb6, 0x38, 0xbd, - 0x11, 0xca, 0x2c, 0x58, 0x60, 0x8d, 0x1d, 0xba, 0x09, 0xe3, 0x22, 0x65, 0xbd, 0x70, 0x12, 0x94, - 0x0d, 0x43, 0x79, 0x1c, 0xeb, 0xc8, 0x83, 0x2c, 0x00, 0x9b, 0x85, 0xd1, 0x16, 0x3c, 0xa9, 0x3d, - 0x8e, 0xd3, 0x25, 0x6c, 0x89, 0xcb, 0x8f, 0xa7, 0xf6, 0xf7, 0x66, 0x9f, 0x5c, 0x3f, 0x8c, 0x10, - 0x1f, 0xce, 0x07, 0xdd, 0x86, 0xb3, 0x4e, 0x23, 0xf1, 0x76, 0x48, 0x95, 0x38, 0xae, 0xef, 0x05, - 0xc4, 0xbc, 0x92, 0xfd, 0xf8, 0xfe, 0xde, 0xec, 0xd9, 0x85, 0x6e, 0x04, 0xb8, 0x7b, 0x39, 0xf4, - 0x49, 0xa8, 0xb8, 0x41, 0x2c, 0xc6, 0x60, 0xc8, 0x78, 0x07, 0xa8, 0x52, 0xbd, 0x55, 0x57, 0xfd, - 0x4f, 0xff, 0xe0, 0xb4, 0x00, 0x7a, 0x87, 0x3f, 0xa9, 0xac, 0x6c, 0x12, 0xfe, 0xfe, 0xd4, 0xab, - 0x85, 0xac, 0x60, 0xe3, 0xaa, 0x04, 0xf7, 0x9f, 0xa9, 0xf0, 0x40, 0xe3, 0x16, 0x85, 0x51, 0x05, - 0xfa, 0x0c, 0xa0, 0x98, 0x44, 0x3b, 0x5e, 0x83, 0x2c, 0x34, 0x58, 0x4e, 0x4b, 0x76, 0x50, 0x37, - 0x62, 0xc4, 0xc8, 0xa3, 0x7a, 0x07, 0x05, 0xee, 0x52, 0x0a, 0x5d, 0xa7, 0x92, 0x47, 0x87, 0x8a, - 0x68, 0x4e, 0xa9, 0xde, 0x4d, 0x57, 0x49, 0x2b, 0x22, 0x0d, 0x27, 0x21, 0xae, 0xc9, 0x11, 0x67, - 0xca, 0xd1, 0xdd, 0x45, 0xa5, 0x16, 0x07, 0x33, 0x06, 0xb1, 0x33, 0xbd, 0x38, 0xb5, 0x96, 0xb6, - 0xc3, 0x38, 0xb9, 0x45, 0x92, 0x07, 0x61, 0x74, 0x9f, 0xf9, 0xdd, 0x47, 0xb4, 0x14, 0x61, 0x29, - 0x0a, 0xeb, 0x74, 0x54, 0x13, 0x62, 0x07, 0x3e, 0xab, 0x55, 0xe6, 0x4d, 0x1f, 0x49, 0xd7, 0xce, - 0x75, 0x0e, 0xc6, 0x12, 0x2f, 0x49, 0x57, 0x6b, 0x4b, 0xcc, 0x33, 0x9e, 0x21, 0x5d, 0xad, 0x2d, - 0x61, 0x89, 0x47, 0x61, 0xe7, 0x6b, 0x4b, 0x13, 0x45, 0x4e, 0x29, 0x3a, 0x25, 0x79, 0xc1, 0x07, - 0x97, 0x1e, 0xc2, 0x94, 0x7a, 0xf1, 0x89, 0xe7, 0x6e, 0x8c, 0xa7, 0x27, 0x8b, 0x3c, 0xe8, 0xdc, - 0x35, 0x05, 0xa4, 0x0a, 0xdf, 0x5d, 0xcd, 0xf0, 0xc4, 0x1d, 0xb5, 0x18, 0xa9, 0x05, 0xa6, 0x72, - 0xd3, 0xc5, 0xcf, 0x43, 0x25, 0x6e, 0x6f, 0xb8, 0x61, 0xd3, 0xf1, 0x02, 0xe6, 0xbe, 0xd6, 0x9f, - 0x27, 0x96, 0x08, 0x9c, 0xd2, 0xa0, 0x1a, 0x8c, 0x38, 0xf2, 0x65, 0x6e, 0x54, 0xe4, 0xea, 0xb1, - 0x7a, 0x92, 0x9b, 0xf9, 0x36, 0xd5, 0x5b, 0xdc, 0x8a, 0x0b, 0x7a, 0x0d, 0xc6, 0xc5, 0xdd, 0x19, - 0x12, 0xb1, 0x56, 0x9f, 0x36, 0x03, 0xb7, 0xeb, 0x12, 0xc9, 0x26, 0x98, 0x49, 0x3b, 0xf3, 0x29, - 0x38, 0xd5, 0xb1, 0xc4, 0xfa, 0x0a, 0x7f, 0xfb, 0xb7, 0x03, 0x50, 0x51, 0x7e, 0x26, 0x34, 0x6f, - 0xba, 0x14, 0x1f, 0xcf, 0xba, 0x14, 0x47, 0xa8, 0x42, 0xa0, 0x7b, 0x11, 0xbf, 0xd0, 0xe5, 0x79, - 0xd4, 0xe7, 0x73, 0xe7, 0x54, 0xf1, 0xdb, 0x28, 0x7d, 0x3c, 0x22, 0x9b, 0xda, 0x1a, 0x03, 0x87, - 0xda, 0x1a, 0x05, 0x5f, 0x80, 0xa2, 0x56, 0x45, 0x2b, 0x74, 0x57, 0x6b, 0xd9, 0x07, 0x4e, 0x6a, - 0x14, 0x88, 0x39, 0x8e, 0x69, 0x83, 0x74, 0x8f, 0x60, 0xda, 0xe0, 0xf0, 0x11, 0xb5, 0x41, 0xc9, - 0x00, 0xa7, 0xbc, 0xd0, 0x0e, 0x9c, 0x6a, 0x98, 0xef, 0xd5, 0xa8, 0x3b, 0x26, 0x2f, 0xf6, 0xf1, - 0x5e, 0x4c, 0x5b, 0xcb, 0xcd, 0xbf, 0x94, 0xe5, 0x87, 0x3b, 0xab, 0x40, 0xaf, 0xc1, 0xc8, 0x3b, - 0x61, 0xbc, 0xe4, 0x3b, 0x71, 0x2c, 0x04, 0xa5, 0x8c, 0xe7, 0x1f, 0x79, 0xe3, 0x76, 0x9d, 0xc1, - 0x0f, 0xf8, 0x03, 0xf6, 0xf2, 0x2f, 0x56, 0x05, 0xec, 0xdf, 0xe1, 0x3e, 0x2d, 0x61, 0xe5, 0x92, - 0xb8, 0xed, 0x9f, 0x44, 0xfa, 0xeb, 0xdb, 0x86, 0x01, 0xfe, 0x08, 0xbc, 0xaa, 0xff, 0xde, 0x62, - 0x5e, 0xd5, 0x75, 0xd2, 0x6c, 0xf9, 0x4e, 0x72, 0x12, 0x81, 0x89, 0x9f, 0x87, 0x91, 0x44, 0xd4, - 0x56, 0x2c, 0x77, 0xb7, 0xd6, 0x3c, 0xe6, 0x6d, 0x56, 0x32, 0x4e, 0x42, 0xb1, 0x62, 0x68, 0xff, - 0x0b, 0xfe, 0x55, 0x24, 0xe6, 0x04, 0x4c, 0xc7, 0x5b, 0xa6, 0xe9, 0xf8, 0x5c, 0xe1, 0xbe, 0xf4, - 0x30, 0x21, 0xbf, 0x6f, 0xf6, 0x80, 0xa9, 0xa2, 0x3f, 0x3d, 0x6e, 0x7f, 0xfb, 0x36, 0x98, 0xef, - 0xfa, 0xa0, 0xd7, 0x79, 0xa8, 0x2f, 0x17, 0xb2, 0x97, 0xfa, 0x0e, 0xf3, 0xb5, 0x7f, 0xa3, 0x04, - 0x67, 0xb8, 0xe3, 0x6f, 0x61, 0x27, 0xf4, 0xdc, 0x5a, 0xe8, 0x8a, 0xc0, 0x67, 0x17, 0xc6, 0x5a, - 0x9a, 0xa9, 0x50, 0x2c, 0xab, 0x83, 0x6e, 0x5c, 0xa4, 0xea, 0x99, 0x0e, 0xc5, 0x06, 0x57, 0x5a, - 0x0b, 0xd9, 0xf1, 0x1a, 0xca, 0x8f, 0x54, 0xea, 0x5b, 0xee, 0xa9, 0x5a, 0x96, 0x35, 0x3e, 0xd8, - 0xe0, 0x7a, 0x0c, 0x69, 0xe6, 0xed, 0x5f, 0xb3, 0xe0, 0xb1, 0x1e, 0x99, 0x1f, 0x68, 0x75, 0x0f, - 0x98, 0xb3, 0x55, 0x3c, 0x1c, 0xa5, 0xaa, 0xe3, 0x2e, 0x58, 0x2c, 0xb0, 0x68, 0x03, 0x80, 0xbb, - 0x50, 0xd9, 0x13, 0xbd, 0xa5, 0x22, 0x11, 0x0f, 0x1d, 0x37, 0xac, 0xb5, 0xcb, 0xb7, 0xea, 0x51, - 0x5e, 0x8d, 0xab, 0xfd, 0xed, 0x32, 0x0c, 0xf2, 0x57, 0x42, 0x6b, 0x30, 0xbc, 0xcd, 0xf3, 0x4f, - 0xf6, 0x97, 0xfe, 0x32, 0x55, 0x05, 0x39, 0x00, 0x4b, 0x36, 0x68, 0x0d, 0x4e, 0x53, 0xbd, 0xc3, - 0x73, 0xfc, 0x2a, 0xf1, 0x9d, 0x5d, 0x69, 0x5b, 0xf0, 0xdc, 0xe3, 0x32, 0x4d, 0xee, 0xe9, 0xd5, - 0x4e, 0x12, 0xdc, 0xad, 0x1c, 0x7a, 0xbd, 0x23, 0x71, 0x14, 0xcf, 0xeb, 0xa9, 0xee, 0x6c, 0x1d, - 0x9e, 0x3c, 0x8a, 0x6a, 0x3f, 0xad, 0x0e, 0x2b, 0x4a, 0x7b, 0x06, 0xd2, 0xb4, 0x9c, 0x4c, 0x5a, - 0x54, 0x85, 0xa9, 0xb8, 0xcd, 0xce, 0x9f, 0xd7, 0xb7, 0x23, 0x12, 0x6f, 0x87, 0xbe, 0x2b, 0x5e, - 0x30, 0x53, 0x1a, 0x63, 0x3d, 0x83, 0xc7, 0x1d, 0x25, 0x28, 0x97, 0x4d, 0xc7, 0xf3, 0xdb, 0x11, - 0x49, 0xb9, 0x0c, 0x99, 0x5c, 0x56, 0x32, 0x78, 0xdc, 0x51, 0xc2, 0xfe, 0x13, 0x0b, 0x4e, 0x77, - 0x09, 0xd2, 0xe0, 0xa1, 0x83, 0x5b, 0x5e, 0x9c, 0xa8, 0x0c, 0xd3, 0x5a, 0xe8, 0x20, 0x87, 0x63, - 0x45, 0x41, 0x67, 0x21, 0x37, 0x8d, 0xb3, 0x87, 0x9f, 0xe2, 0x18, 0x5a, 0x60, 0xfb, 0x4b, 0x03, - 0x85, 0x2e, 0xc0, 0x40, 0x3b, 0x26, 0xf2, 0x79, 0x7d, 0x25, 0xa2, 0x98, 0x37, 0x84, 0x61, 0xa8, - 0xb2, 0xb3, 0xa5, 0x1c, 0x11, 0x9a, 0xb2, 0xc3, 0x5d, 0x11, 0x1c, 0x67, 0x7f, 0xb3, 0x0c, 0x93, - 0x99, 0x60, 0x2d, 0xda, 0x90, 0x66, 0x18, 0x78, 0x49, 0xa8, 0x52, 0x0f, 0xf1, 0x37, 0x58, 0x48, - 0x6b, 0x7b, 0x4d, 0xc0, 0xb1, 0xa2, 0x40, 0xcf, 0x9a, 0x4f, 0x36, 0xa7, 0x6d, 0x5e, 0xac, 0x1a, - 0xef, 0xc6, 0x15, 0xcd, 0x7a, 0xff, 0x34, 0x0c, 0xb4, 0x42, 0xf5, 0x06, 0xa8, 0x9a, 0xf4, 0x78, - 0xb1, 0x5a, 0x0b, 0x43, 0x1f, 0x33, 0x24, 0x7a, 0x46, 0xf4, 0x3e, 0xe3, 0x85, 0xc5, 0x8e, 0x1b, - 0xc6, 0xda, 0x10, 0x3c, 0x07, 0xc3, 0xf7, 0xc9, 0x6e, 0xe4, 0x05, 0x5b, 0x59, 0x1f, 0xf4, 0x0d, - 0x0e, 0xc6, 0x12, 0x6f, 0x66, 0xb6, 0x1f, 0x3e, 0xe6, 0xcc, 0xf6, 0x23, 0xb9, 0xf1, 0xa6, 0xbf, - 0x69, 0xc1, 0x24, 0xcb, 0xc7, 0x27, 0xae, 0xc3, 0x7a, 0x61, 0x70, 0x02, 0xdb, 0xe3, 0xd3, 0x30, - 0x18, 0xd1, 0x4a, 0xb3, 0xc9, 0xa9, 0x59, 0x4b, 0x30, 0xc7, 0xa1, 0x27, 0xc4, 0xf3, 0xfc, 0xf4, - 0x33, 0x8e, 0xf1, 0x64, 0xbf, 0xe9, 0x3b, 0xfb, 0xec, 0x6e, 0x03, 0x26, 0x2d, 0xdf, 0xe3, 0x8d, - 0x4e, 0x9d, 0x4e, 0x1f, 0xb4, 0xbb, 0x0d, 0x5d, 0x1b, 0xf9, 0xa8, 0xee, 0x36, 0x74, 0x67, 0x7e, - 0xb8, 0x8a, 0xfa, 0xdf, 0x4b, 0x70, 0xbe, 0x6b, 0xb9, 0xf4, 0x34, 0x6b, 0xc5, 0x38, 0xcd, 0xba, - 0x92, 0x39, 0xcd, 0xb2, 0x0f, 0x2f, 0xfd, 0x68, 0xce, 0xb7, 0xba, 0x1f, 0x3b, 0x95, 0x4f, 0xf0, - 0xd8, 0x69, 0xa0, 0xa8, 0xea, 0x30, 0x98, 0xa3, 0x3a, 0xfc, 0x81, 0x05, 0x8f, 0x77, 0x1d, 0xb2, - 0x0f, 0xdc, 0x65, 0x92, 0xae, 0xad, 0xec, 0xa1, 0x58, 0xff, 0x52, 0xb9, 0x47, 0xaf, 0x98, 0x8a, - 0x7d, 0x91, 0x4a, 0x21, 0x86, 0x8c, 0x85, 0x52, 0x34, 0xc6, 0x25, 0x10, 0x87, 0x61, 0x85, 0x45, - 0xb1, 0x76, 0x19, 0x83, 0x37, 0x72, 0xf9, 0x88, 0x0b, 0x6a, 0xce, 0xf4, 0x16, 0xea, 0xb7, 0x7c, - 0x33, 0x57, 0x34, 0xd0, 0x3d, 0xcd, 0x68, 0x2a, 0x1f, 0xc5, 0x68, 0x1a, 0xeb, 0x6e, 0x30, 0xa1, - 0x05, 0x98, 0x6c, 0x7a, 0x01, 0x7b, 0xb4, 0xce, 0xd4, 0x4a, 0xd4, 0x8d, 0xb8, 0x35, 0x13, 0x8d, - 0xb3, 0xf4, 0x33, 0xaf, 0xc1, 0xf8, 0xd1, 0x7d, 0x32, 0xef, 0x95, 0xe1, 0x67, 0x0e, 0x11, 0x0a, - 0x7c, 0x77, 0x30, 0xbe, 0x8b, 0xb6, 0x3b, 0x74, 0x7c, 0x9b, 0x1a, 0x9c, 0xd9, 0x6c, 0xfb, 0xfe, - 0x2e, 0x8b, 0x05, 0x21, 0xae, 0xa4, 0x10, 0x1a, 0x9f, 0x7a, 0x4e, 0x76, 0xa5, 0x0b, 0x0d, 0xee, - 0x5a, 0x12, 0x7d, 0x06, 0x50, 0xb8, 0xc1, 0x32, 0x56, 0xba, 0xe9, 0x2d, 0x66, 0xf6, 0x09, 0xca, - 0xe9, 0x52, 0xbd, 0xdd, 0x41, 0x81, 0xbb, 0x94, 0xa2, 0xfa, 0x1f, 0x7b, 0x89, 0x56, 0x35, 0x2b, - 0xa3, 0xff, 0x61, 0x1d, 0x89, 0x4d, 0x5a, 0x74, 0x0d, 0x4e, 0x39, 0x3b, 0x8e, 0xc7, 0x73, 0xd0, - 0x48, 0x06, 0x5c, 0x01, 0x54, 0x5e, 0x8f, 0x85, 0x2c, 0x01, 0xee, 0x2c, 0x83, 0x5a, 0x86, 0x1b, - 0x8b, 0x67, 0xa8, 0xfe, 0xe4, 0x11, 0x66, 0x70, 0x61, 0xc7, 0x96, 0xfd, 0x63, 0x8b, 0x6e, 0x7d, - 0x5d, 0xde, 0x4e, 0x33, 0x1e, 0x46, 0xd7, 0x2e, 0xa8, 0x74, 0x3e, 0x8c, 0xce, 0xfd, 0x81, 0x06, - 0x2d, 0x9f, 0x1a, 0x71, 0x1a, 0x52, 0x6a, 0x68, 0x9b, 0xe2, 0x5e, 0x96, 0xa2, 0x40, 0xf7, 0x60, - 0xd8, 0xf5, 0x76, 0xbc, 0x38, 0x8c, 0x0a, 0x3c, 0x45, 0xdc, 0x11, 0xa6, 0x98, 0x4a, 0xcb, 0x2a, - 0x67, 0x82, 0x25, 0x37, 0xfb, 0x57, 0x4a, 0x30, 0x2e, 0xeb, 0x7b, 0xa3, 0x1d, 0x26, 0xce, 0x09, - 0x6c, 0xe8, 0x6f, 0x18, 0x1b, 0xfa, 0x7c, 0xb1, 0x4b, 0x6a, 0xac, 0x71, 0x3d, 0x37, 0xf2, 0xcf, - 0x66, 0x36, 0xf2, 0xcb, 0xfd, 0x30, 0x3d, 0x7c, 0x03, 0xff, 0xd7, 0x16, 0x9c, 0x32, 0xe8, 0x4f, - 0x60, 0x1f, 0xa9, 0x99, 0xfb, 0xc8, 0x0b, 0x7d, 0xf4, 0xa6, 0xc7, 0xfe, 0xf1, 0xed, 0x52, 0xa6, - 0x17, 0x6c, 0xdf, 0xf8, 0x0a, 0x0c, 0x6c, 0x3b, 0x91, 0x5b, 0x2c, 0x19, 0x5b, 0x47, 0xf1, 0xb9, - 0xeb, 0x4e, 0xe4, 0x72, 0xe9, 0x7f, 0x49, 0xbd, 0xec, 0xe2, 0x44, 0x6e, 0x6e, 0x9c, 0x35, 0xab, - 0x14, 0x5d, 0x85, 0xa1, 0xb8, 0x11, 0xb6, 0x54, 0x44, 0xdb, 0x05, 0xfe, 0xea, 0x0b, 0x85, 0x1c, - 0xec, 0xcd, 0x22, 0xb3, 0x3a, 0x0a, 0xc6, 0x82, 0x7e, 0x86, 0x40, 0x45, 0x55, 0x7d, 0x8c, 0x11, - 0xbd, 0xef, 0x95, 0xe1, 0x74, 0x97, 0x99, 0x82, 0xbe, 0x6a, 0x8c, 0xda, 0x6b, 0x7d, 0x4f, 0xb5, - 0xf7, 0x39, 0x6e, 0x5f, 0x65, 0x56, 0x92, 0x2b, 0xe6, 0xc6, 0x11, 0xaa, 0xbf, 0x13, 0x93, 0x6c, - 0xf5, 0x14, 0x94, 0x5f, 0x3d, 0xad, 0xf6, 0x84, 0x06, 0x9f, 0x56, 0xa3, 0xda, 0x79, 0x8c, 0xdf, - 0xf8, 0xdd, 0x01, 0x38, 0xd3, 0xed, 0x1e, 0x2c, 0xfa, 0x05, 0x2b, 0x93, 0x6b, 0xfd, 0xf5, 0xfe, - 0x2f, 0xd3, 0xf2, 0x04, 0xec, 0x22, 0x77, 0xc4, 0x9c, 0x99, 0x7d, 0x3d, 0x77, 0xb4, 0x45, 0xed, - 0xec, 0x6e, 0x44, 0xc4, 0xb3, 0xe6, 0x4b, 0x79, 0xf0, 0xe9, 0x23, 0x34, 0x45, 0x24, 0xde, 0x8f, - 0x33, 0x77, 0x23, 0x24, 0x38, 0xff, 0x6e, 0x84, 0x6c, 0xc3, 0xcc, 0x16, 0x8c, 0x6a, 0xfd, 0x3a, - 0xc6, 0x29, 0xe0, 0xd1, 0xad, 0x49, 0x6b, 0xf5, 0x31, 0x4e, 0x83, 0x5f, 0xb6, 0x20, 0x13, 0xae, - 0xa2, 0x5c, 0x31, 0x56, 0x4f, 0x57, 0xcc, 0x05, 0x18, 0x88, 0x42, 0x9f, 0x64, 0x73, 0x80, 0xe3, - 0xd0, 0x27, 0x98, 0x61, 0xd4, 0x03, 0x8f, 0xe5, 0x5e, 0x0f, 0x3c, 0x52, 0xdb, 0xdc, 0x27, 0x3b, - 0x44, 0x3a, 0x46, 0x94, 0xf0, 0xbe, 0x49, 0x81, 0x98, 0xe3, 0xec, 0xdf, 0x2f, 0xc3, 0x10, 0xf7, - 0x3e, 0x9c, 0xc0, 0xee, 0x5c, 0x13, 0x8e, 0x80, 0x42, 0x77, 0x53, 0x79, 0xab, 0xe6, 0xaa, 0x4e, - 0xe2, 0xf0, 0x89, 0xa5, 0xfa, 0x98, 0x3a, 0x0f, 0xd0, 0x9c, 0x31, 0x0a, 0x33, 0x19, 0xfb, 0x16, - 0x38, 0x0f, 0x6d, 0x4c, 0xb6, 0x01, 0x62, 0xf6, 0xa4, 0x18, 0xe5, 0x21, 0x32, 0xe7, 0xbd, 0x5c, - 0xa8, 0x1d, 0x75, 0x55, 0x8c, 0xb7, 0x26, 0x4d, 0xd9, 0xa5, 0x10, 0x58, 0xe3, 0x3d, 0xf3, 0x2a, - 0x54, 0x14, 0x71, 0x9e, 0xe2, 0x3f, 0xa6, 0x4f, 0xcd, 0x3f, 0x07, 0x93, 0x99, 0xba, 0xfa, 0xb2, - 0x1b, 0x7e, 0xcb, 0x82, 0x53, 0x1d, 0x2f, 0xd5, 0xa2, 0x77, 0x2d, 0x38, 0xe3, 0x77, 0x71, 0x3f, - 0x89, 0x0f, 0x7d, 0x14, 0xc7, 0x95, 0x32, 0x1a, 0xba, 0x61, 0x71, 0xd7, 0xda, 0x64, 0x2e, 0xd0, - 0x52, 0xf7, 0x5c, 0xa0, 0xf6, 0x6f, 0x58, 0x20, 0x3e, 0xd9, 0x09, 0x28, 0x42, 0xab, 0xa6, 0x22, - 0xf4, 0xe1, 0x22, 0xb3, 0xa0, 0x87, 0x06, 0xf4, 0x7b, 0x16, 0x20, 0x4e, 0x90, 0x7d, 0x59, 0x90, - 0x7b, 0xf3, 0x34, 0x0d, 0x3e, 0x9d, 0x36, 0x0a, 0x83, 0x35, 0xaa, 0x3e, 0xd3, 0xc4, 0xab, 0x17, - 0xb9, 0xba, 0x37, 0x0c, 0x5d, 0x86, 0x51, 0xf1, 0x22, 0xcf, 0x5a, 0xfa, 0xda, 0xd6, 0x24, 0x7b, - 0xf7, 0x31, 0x05, 0x63, 0x9d, 0xc6, 0xfe, 0x9d, 0x32, 0x64, 0x23, 0x3b, 0xd0, 0xdb, 0x30, 0xd6, - 0x70, 0x5a, 0xce, 0x86, 0xe7, 0x7b, 0x89, 0x47, 0xe2, 0x62, 0x27, 0x4a, 0x4b, 0x5a, 0x09, 0xe1, - 0x0f, 0xd6, 0x20, 0xd8, 0xe0, 0x88, 0xe6, 0x00, 0x5a, 0x91, 0xb7, 0xe3, 0xf9, 0x64, 0x8b, 0xa9, - 0x1f, 0x2c, 0xc0, 0x93, 0x1f, 0x8e, 0x48, 0x28, 0xd6, 0x28, 0xba, 0x84, 0x12, 0x96, 0x4f, 0x22, - 0x94, 0x70, 0xa0, 0xcf, 0x50, 0xc2, 0xc1, 0x42, 0xa1, 0x84, 0x18, 0xce, 0x49, 0x37, 0x2e, 0xfd, - 0xbf, 0xe2, 0xf9, 0x84, 0xe7, 0xfe, 0x13, 0x01, 0xa0, 0x33, 0xfb, 0x7b, 0xb3, 0xe7, 0x70, 0x57, - 0x0a, 0xdc, 0xa3, 0xa4, 0xdd, 0x86, 0xd3, 0x75, 0x12, 0x79, 0x2c, 0x25, 0x93, 0x9b, 0x2e, 0xc0, - 0x2f, 0x40, 0x25, 0xca, 0xac, 0xfd, 0x3e, 0x6f, 0xe7, 0x69, 0x49, 0x3c, 0xe4, 0x5a, 0x4f, 0x59, - 0xda, 0x7f, 0xb9, 0x04, 0xc3, 0x22, 0x82, 0xea, 0x04, 0xf6, 0x93, 0x1b, 0x86, 0xb5, 0xf7, 0x5c, - 0xde, 0x0a, 0x66, 0xcd, 0xea, 0x69, 0xe7, 0xd5, 0x33, 0x76, 0xde, 0x0b, 0xc5, 0xd8, 0x1d, 0x6e, - 0xe1, 0xfd, 0xa0, 0x04, 0x13, 0x66, 0x44, 0xd9, 0x09, 0x0c, 0xcb, 0x9b, 0x30, 0x1c, 0x8b, 0x70, - 0xab, 0x52, 0x91, 0x60, 0x91, 0xec, 0x27, 0x56, 0x26, 0xbd, 0x0c, 0xb0, 0x92, 0xec, 0xba, 0x46, - 0x74, 0x95, 0x4f, 0x22, 0xa2, 0xcb, 0xfe, 0x5d, 0x26, 0x62, 0xf5, 0x81, 0x3c, 0x81, 0x2d, 0xe2, - 0x0d, 0x53, 0x18, 0x5f, 0x2a, 0x34, 0x23, 0x44, 0xf3, 0x7a, 0x6c, 0x15, 0xdf, 0xb5, 0x60, 0x54, - 0x10, 0x9e, 0x40, 0x07, 0x3e, 0x63, 0x76, 0xe0, 0x99, 0x42, 0x1d, 0xe8, 0xd1, 0xf2, 0xbf, 0x55, - 0x52, 0x2d, 0xaf, 0x89, 0xf7, 0x57, 0x73, 0x53, 0x43, 0x8e, 0xb4, 0xa2, 0x30, 0x09, 0x1b, 0xa1, - 0x2f, 0xb6, 0xfc, 0x27, 0xd2, 0x48, 0x7c, 0x0e, 0x3f, 0xd0, 0x7e, 0x63, 0x45, 0xcd, 0x42, 0xcc, - 0xc3, 0x28, 0x11, 0x1b, 0x56, 0xb7, 0xd7, 0x5f, 0x37, 0xe4, 0xeb, 0xda, 0x14, 0x26, 0x2e, 0xb1, - 0xf4, 0xfb, 0xaa, 0x6c, 0x1a, 0x58, 0xaf, 0x38, 0x61, 0x8d, 0xab, 0x8c, 0xf5, 0x64, 0x35, 0x0c, - 0x9a, 0x2e, 0xd6, 0x5b, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0x2a, 0x93, 0xb8, 0x6c, 0x78, 0xfa, 0x8b, - 0x96, 0xff, 0x4b, 0x43, 0x6a, 0x60, 0x99, 0xe7, 0xe4, 0x16, 0x0c, 0xd2, 0x2e, 0x4a, 0xe3, 0xb0, - 0x98, 0x58, 0xa3, 0x4d, 0xd0, 0xc3, 0xd3, 0xa2, 0x24, 0xc6, 0x9c, 0x0d, 0x22, 0x1d, 0x7e, 0xf9, - 0x57, 0x0b, 0x4b, 0xca, 0x3e, 0x3c, 0xf1, 0x2c, 0x9f, 0x0e, 0x4b, 0x22, 0xb2, 0x5a, 0xcb, 0xa6, - 0xf3, 0x5c, 0x92, 0x08, 0x9c, 0xd2, 0xa0, 0x79, 0xa1, 0xbb, 0x9b, 0x8f, 0xf3, 0x4a, 0xdd, 0x5d, - 0x0e, 0x89, 0xa6, 0xbc, 0x5f, 0x86, 0x51, 0x95, 0xd0, 0xbc, 0xc6, 0xf3, 0x52, 0x57, 0xb8, 0x36, - 0xb3, 0x9c, 0x82, 0xb1, 0x4e, 0x83, 0x56, 0xe1, 0xb4, 0xab, 0x42, 0x7b, 0x6b, 0xed, 0x0d, 0xdf, - 0x6b, 0xd0, 0xa2, 0xfc, 0x72, 0xcd, 0x63, 0xfb, 0x7b, 0xb3, 0xa7, 0xab, 0x9d, 0x68, 0xdc, 0xad, - 0x0c, 0x5a, 0x87, 0xc9, 0x98, 0x27, 0x6e, 0x97, 0xf1, 0x9b, 0x22, 0xcb, 0xdd, 0xf3, 0xf2, 0x40, - 0xa0, 0x6e, 0xa2, 0x0f, 0x18, 0x88, 0xcb, 0x04, 0x19, 0xf1, 0x99, 0x65, 0x81, 0x5e, 0x87, 0x09, - 0x5f, 0x7f, 0x93, 0xaa, 0x26, 0x22, 0x9c, 0x55, 0xe8, 0x84, 0xf1, 0x62, 0x55, 0x0d, 0x67, 0xa8, - 0xd1, 0x9b, 0x30, 0xad, 0x43, 0xc4, 0x65, 0x7f, 0x27, 0xd8, 0x22, 0xb1, 0xc8, 0x18, 0xfd, 0xc4, - 0xfe, 0xde, 0xec, 0xf4, 0xcd, 0x1e, 0x34, 0xb8, 0x67, 0x69, 0x74, 0x15, 0xc6, 0xe4, 0x48, 0x6a, - 0xd1, 0xce, 0x69, 0xd0, 0x8e, 0x86, 0xc3, 0x06, 0xe5, 0xfb, 0x3b, 0xf7, 0xf8, 0x0a, 0x2d, 0xac, - 0x6d, 0xad, 0xe8, 0x4b, 0x30, 0xa6, 0xb7, 0x31, 0xbb, 0x67, 0xe6, 0xbf, 0xf3, 0x25, 0xb6, 0x68, - 0xd5, 0x72, 0x1d, 0x87, 0x0d, 0xde, 0xf6, 0x6d, 0x18, 0xaa, 0xef, 0xc6, 0x8d, 0xc4, 0x7f, 0x54, - 0xef, 0x32, 0x37, 0x60, 0x32, 0xf3, 0x80, 0xb1, 0x7a, 0x09, 0xdb, 0x7a, 0x54, 0x2f, 0x61, 0xdb, - 0x5f, 0xb3, 0x60, 0x70, 0xdd, 0xf1, 0xf2, 0xdf, 0x5a, 0x28, 0xd2, 0x64, 0xf4, 0x0a, 0x0c, 0x91, - 0xcd, 0x4d, 0xd2, 0x90, 0x2f, 0x6b, 0x3f, 0x29, 0x55, 0x9b, 0x65, 0x06, 0xa5, 0x4b, 0x93, 0x55, - 0xc6, 0xff, 0x62, 0x41, 0x6c, 0xff, 0x3b, 0x0b, 0x60, 0x3d, 0xf4, 0xe5, 0x91, 0x4e, 0x4e, 0x4b, - 0x16, 0x3b, 0x5e, 0x7d, 0x78, 0xb6, 0xcb, 0xab, 0x0f, 0x28, 0x65, 0xd8, 0xe5, 0xcd, 0x07, 0xd5, - 0x9b, 0x72, 0xa1, 0xde, 0x0c, 0xf4, 0xd3, 0x9b, 0x6f, 0x58, 0x20, 0xa2, 0x6d, 0x0a, 0xcc, 0x04, - 0x57, 0x66, 0x6a, 0x37, 0xd2, 0x78, 0x3c, 0x5f, 0xe4, 0x56, 0x8c, 0x48, 0xde, 0xa1, 0xe6, 0xa6, - 0x91, 0xb2, 0xc3, 0xe0, 0x4a, 0x0d, 0xfb, 0x51, 0x8e, 0x5e, 0x63, 0x7a, 0x64, 0x7e, 0xbb, 0xfa, - 0x4a, 0x58, 0xc6, 0x12, 0x99, 0x53, 0xc6, 0x2a, 0x71, 0x95, 0x9e, 0xc8, 0x5c, 0x22, 0x70, 0x4a, - 0x83, 0x9e, 0x83, 0xe1, 0xb8, 0xbd, 0xc1, 0xc8, 0x33, 0xa1, 0x37, 0x75, 0x0e, 0xc6, 0x12, 0x6f, - 0xff, 0x3c, 0x02, 0xa3, 0x6b, 0x46, 0x92, 0x2c, 0xeb, 0x91, 0x27, 0xc9, 0x7a, 0x0b, 0x46, 0x48, - 0xb3, 0x95, 0xec, 0x56, 0xbd, 0xa8, 0x58, 0xba, 0xc2, 0x65, 0x41, 0xdd, 0xc9, 0x5d, 0x62, 0xb0, - 0xe2, 0xd8, 0x23, 0xe5, 0x59, 0xf9, 0x03, 0x91, 0xf2, 0x6c, 0xe0, 0x27, 0x92, 0xf2, 0xec, 0x4d, - 0x18, 0xde, 0xf2, 0x12, 0x4c, 0x5a, 0xa1, 0xb8, 0x0c, 0x99, 0x73, 0x46, 0x76, 0x8d, 0x13, 0x77, - 0xe6, 0x31, 0x12, 0x08, 0x2c, 0xd9, 0xa1, 0x75, 0x18, 0xe2, 0xb6, 0x87, 0xc8, 0x22, 0xf6, 0xd1, - 0x22, 0x5e, 0x9a, 0xce, 0x84, 0x5a, 0x22, 0xbe, 0x4a, 0xf0, 0x92, 0x29, 0xce, 0x86, 0xdf, 0x7f, - 0x8a, 0x33, 0x95, 0x98, 0x6c, 0xe4, 0x51, 0x25, 0x26, 0x33, 0x12, 0xbc, 0x55, 0x8e, 0x23, 0xc1, - 0xdb, 0x37, 0x2c, 0x38, 0xdb, 0xea, 0x96, 0x1e, 0x51, 0xa4, 0x18, 0xfb, 0xd4, 0x11, 0xd2, 0x45, - 0x1a, 0x55, 0xb3, 0xcb, 0x69, 0x5d, 0xc9, 0x70, 0xf7, 0x8a, 0x65, 0xa6, 0xb8, 0xd1, 0xf7, 0x9f, - 0x29, 0xee, 0xb8, 0x73, 0x91, 0xa5, 0x79, 0xe3, 0xc6, 0x8f, 0x25, 0x6f, 0xdc, 0xc4, 0x23, 0xcc, - 0x1b, 0xa7, 0x65, 0x7c, 0x9b, 0x7c, 0xb4, 0x19, 0xdf, 0xb6, 0x61, 0xd4, 0x0d, 0x1f, 0x04, 0x0f, - 0x9c, 0xc8, 0x5d, 0xa8, 0xad, 0x8a, 0x04, 0x63, 0x39, 0x59, 0x2c, 0xaa, 0x69, 0x01, 0xa3, 0x06, - 0xee, 0x8e, 0x4c, 0x91, 0x58, 0x67, 0x2d, 0x72, 0xdf, 0x9d, 0x7a, 0x9f, 0xb9, 0xef, 0x8c, 0x0c, - 0x72, 0xe8, 0x38, 0x32, 0xc8, 0xbd, 0xcd, 0xae, 0xb3, 0x6f, 0x7a, 0x5b, 0x6b, 0x4e, 0x8b, 0x5d, - 0xde, 0xca, 0xad, 0x61, 0x49, 0x92, 0x77, 0xd6, 0xa0, 0x50, 0x38, 0x65, 0xda, 0x99, 0xa3, 0xee, - 0xcc, 0x49, 0xe7, 0xa8, 0x3b, 0x7b, 0x8c, 0x39, 0xea, 0xce, 0x9d, 0x68, 0x8e, 0xba, 0xc7, 0x7e, - 0x22, 0x39, 0xea, 0xfe, 0x02, 0x9c, 0x3f, 0xfc, 0x73, 0xa4, 0x39, 0x90, 0x6b, 0xa9, 0xcb, 0x20, - 0x93, 0x03, 0x99, 0xa9, 0x3a, 0x1a, 0x55, 0xe1, 0x54, 0x59, 0xdf, 0xb1, 0xe0, 0xb1, 0x1e, 0x99, - 0x64, 0x0a, 0xdf, 0x7b, 0x68, 0xc1, 0x64, 0xcb, 0x2c, 0x5a, 0xf8, 0xa6, 0x92, 0x91, 0xb9, 0x46, - 0xc5, 0xd0, 0x65, 0x10, 0x38, 0xcb, 0x7e, 0xf1, 0xc3, 0x3f, 0x7c, 0xef, 0xfc, 0x87, 0x7e, 0xf4, - 0xde, 0xf9, 0x0f, 0xfd, 0xd1, 0x7b, 0xe7, 0x3f, 0xf4, 0xb3, 0xfb, 0xe7, 0xad, 0x1f, 0xee, 0x9f, - 0xb7, 0x7e, 0xb4, 0x7f, 0xde, 0xfa, 0x93, 0xfd, 0xf3, 0xd6, 0x37, 0xfe, 0xf4, 0xfc, 0x87, 0x3e, - 0x57, 0xda, 0xb9, 0xfc, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x75, 0x32, 0x32, 0x5a, 0xb8, + 0x39, 0xcf, 0x9e, 0xcf, 0x33, 0x21, 0x8c, 0x6f, 0x96, 0xea, 0x05, 0x0b, 0x92, 0x0f, 0x4e, 0x59, + 0xa2, 0x1d, 0x38, 0x11, 0x84, 0x09, 0xdb, 0x0f, 0x14, 0xbe, 0x98, 0x2f, 0x38, 0x5b, 0xcf, 0xa3, + 0xa2, 0x9e, 0x13, 0x37, 0xb2, 0xfc, 0x70, 0x67, 0x15, 0xe8, 0xa6, 0x74, 0x8d, 0x94, 0x59, 0x5d, + 0xcf, 0x16, 0xab, 0xab, 0xb7, 0x67, 0xc4, 0xfe, 0x81, 0x05, 0x15, 0x49, 0x76, 0x1c, 0x87, 0x02, + 0x77, 0x60, 0x38, 0x66, 0x9f, 0x48, 0x0e, 0xd7, 0x85, 0x62, 0x5d, 0xe0, 0xdf, 0x35, 0xdd, 0x04, + 0xf9, 0xff, 0x18, 0x4b, 0x6e, 0xcc, 0xc5, 0xa9, 0x3a, 0xf2, 0xa1, 0x73, 0x71, 0xaa, 0x96, 0xf5, + 0xf6, 0xfd, 0x8f, 0x1b, 0x46, 0x2c, 0xd5, 0xe4, 0x5a, 0x11, 0xd9, 0xf4, 0xee, 0x67, 0x35, 0xb9, + 0x1a, 0x83, 0x62, 0x81, 0x45, 0x9b, 0x30, 0xd6, 0x90, 0xbe, 0xd1, 0x54, 0x84, 0x7c, 0xa2, 0xa0, + 0xc7, 0x55, 0x39, 0xda, 0x79, 0xf0, 0xc6, 0x92, 0xc6, 0x09, 0x1b, 0x7c, 0xa9, 0x9c, 0x4a, 0xcf, + 0x12, 0xcb, 0x05, 0xfd, 0x0d, 0x11, 0x49, 0xd2, 0x1a, 0x7a, 0x1e, 0x23, 0xda, 0xdf, 0xb2, 0x60, + 0x88, 0xbb, 0xdd, 0x8a, 0xf9, 0x2e, 0xb5, 0x23, 0x84, 0x74, 0x3c, 0x6f, 0x53, 0xa0, 0x38, 0x51, + 0x40, 0x77, 0xa0, 0xc2, 0x7e, 0x30, 0x17, 0x42, 0xb9, 0x48, 0x24, 0x0b, 0xaf, 0x5f, 0x6f, 0xea, + 0x6d, 0xc9, 0x00, 0xa7, 0xbc, 0xec, 0xef, 0x97, 0xa9, 0xe8, 0x4b, 0x49, 0x8d, 0xbd, 0xdd, 0x3a, + 0x8e, 0xbd, 0xbd, 0x74, 0xf4, 0x7b, 0xfb, 0x3b, 0x30, 0xd9, 0xd0, 0x0e, 0x3b, 0xd2, 0x2f, 0x7e, + 0xa9, 0xe0, 0xb4, 0xd2, 0x4e, 0x48, 0xb8, 0x9b, 0x69, 0xc9, 0x64, 0x87, 0xb3, 0xfc, 0x11, 0x81, + 0x31, 0x3e, 0x1f, 0x44, 0x7d, 0x03, 0xac, 0xbe, 0xf9, 0x22, 0x33, 0x4c, 0xaf, 0x8c, 0xcd, 0xe2, + 0xba, 0xc6, 0x08, 0x1b, 0x6c, 0xed, 0xbf, 0x39, 0x08, 0x83, 0xcb, 0x3b, 0x24, 0x48, 0x8e, 0x41, + 0xd4, 0x35, 0x61, 0xc2, 0x0b, 0x76, 0x42, 0x7f, 0x87, 0xb8, 0x1c, 0x7f, 0xb8, 0xed, 0xfd, 0x8c, + 0xa8, 0x64, 0x62, 0xd5, 0x60, 0x86, 0x33, 0xcc, 0x8f, 0xc2, 0xb4, 0x7e, 0x0d, 0x86, 0xf8, 0xcc, + 0x10, 0x76, 0x75, 0x8e, 0x1b, 0x9a, 0x0d, 0xac, 0x58, 0x41, 0xa9, 0x03, 0x80, 0x7b, 0xc0, 0x05, + 0x23, 0xf4, 0x36, 0x4c, 0x6c, 0x7a, 0x51, 0x9c, 0x50, 0xeb, 0x38, 0x4e, 0x9c, 0x66, 0xeb, 0x10, + 0x46, 0xb5, 0x1a, 0x91, 0x15, 0x83, 0x13, 0xce, 0x70, 0x46, 0x5b, 0x30, 0x4e, 0x6d, 0xba, 0xb4, + 0xaa, 0xe1, 0xbe, 0xab, 0x52, 0x3e, 0xb5, 0xeb, 0x3a, 0x23, 0x6c, 0xf2, 0xa5, 0x22, 0xa9, 0xc1, + 0x6c, 0xc0, 0x11, 0xa6, 0xdd, 0x28, 0x91, 0xc4, 0x8d, 0x3f, 0x8e, 0xa3, 0x92, 0x8d, 0xc5, 0x12, + 0x54, 0x4c, 0xc9, 0x96, 0x46, 0x0c, 0xd8, 0xdf, 0xa1, 0x7b, 0x31, 0x1d, 0xc3, 0x63, 0xd8, 0xbe, + 0xae, 0x9a, 0xdb, 0xd7, 0x93, 0x05, 0xbe, 0x6c, 0x8f, 0xad, 0xeb, 0x2d, 0x18, 0xd5, 0x3e, 0x3c, + 0x9a, 0x87, 0x4a, 0x43, 0x1e, 0x77, 0x0b, 0x29, 0xae, 0x54, 0x29, 0x75, 0x0e, 0x8e, 0x53, 0x1a, + 0x3a, 0x2e, 0x54, 0x05, 0xcd, 0x06, 0xc7, 0x50, 0x05, 0x15, 0x33, 0x8c, 0xfd, 0x02, 0xc0, 0xf2, + 0x7d, 0xd2, 0x58, 0x68, 0xb0, 0x98, 0x0c, 0xed, 0x58, 0xca, 0xea, 0x7d, 0x2c, 0x65, 0x7f, 0xdb, + 0x82, 0x89, 0x95, 0x25, 0x43, 0xa7, 0x9f, 0x03, 0xe0, 0xba, 0xf1, 0x9d, 0x3b, 0x37, 0xa4, 0xc3, + 0x97, 0x7b, 0xe5, 0x14, 0x14, 0x6b, 0x14, 0xe8, 0x51, 0x28, 0xfb, 0xed, 0x40, 0xa8, 0xac, 0xc3, + 0xfb, 0x7b, 0xb3, 0xe5, 0xeb, 0xed, 0x00, 0x53, 0x98, 0x16, 0x85, 0x52, 0x2e, 0x1c, 0x85, 0x92, + 0x1f, 0x8f, 0xf9, 0xcd, 0x32, 0x4c, 0xad, 0xf8, 0xe4, 0xbe, 0xd1, 0xea, 0xa7, 0x61, 0xc8, 0x8d, + 0xbc, 0x1d, 0x12, 0x65, 0x15, 0x81, 0x2a, 0x83, 0x62, 0x81, 0x2d, 0x1c, 0x18, 0xf3, 0x66, 0xe7, + 0x46, 0x7e, 0x74, 0x41, 0x41, 0xb9, 0x7d, 0x46, 0x9b, 0x30, 0x1c, 0x72, 0x97, 0xc2, 0xf4, 0x20, + 0x9b, 0x8a, 0xaf, 0x1c, 0xdc, 0x98, 0xec, 0xf8, 0xcc, 0x09, 0x87, 0x04, 0x0f, 0x49, 0x50, 0xb2, + 0x4c, 0x40, 0xb1, 0x64, 0x3e, 0xf3, 0x69, 0x18, 0xd3, 0x29, 0xfb, 0x8a, 0x4d, 0xf8, 0x39, 0x0b, + 0x4e, 0xae, 0xf8, 0x61, 0xe3, 0x6e, 0x26, 0x72, 0xe9, 0x25, 0x18, 0xa5, 0x8b, 0x29, 0x36, 0xc2, + 0xfa, 0x8c, 0xf8, 0x45, 0x81, 0xc2, 0x3a, 0x9d, 0x56, 0xec, 0xd6, 0xad, 0xd5, 0x6a, 0xb7, 0xb0, + 0x47, 0x81, 0xc2, 0x3a, 0x9d, 0xfd, 0xfb, 0x16, 0x3c, 0x7e, 0x65, 0x69, 0xb9, 0x46, 0xa2, 0xd8, + 0x8b, 0x13, 0x12, 0x24, 0x1d, 0x91, 0x97, 0x54, 0x67, 0x74, 0xb5, 0xa6, 0xa4, 0x3a, 0x63, 0x95, + 0xb5, 0x42, 0x60, 0x3f, 0x2c, 0xe1, 0xc7, 0xdf, 0xb2, 0xe0, 0xe4, 0x15, 0x2f, 0xc1, 0xa4, 0x15, + 0x66, 0x83, 0x25, 0x23, 0xd2, 0x0a, 0x63, 0x2f, 0x09, 0xa3, 0xdd, 0x6c, 0xb0, 0x24, 0x56, 0x18, + 0xac, 0x51, 0xf1, 0x9a, 0x77, 0xbc, 0x98, 0xb6, 0xb4, 0x64, 0x9a, 0xba, 0x58, 0xc0, 0xb1, 0xa2, + 0xa0, 0x1d, 0x73, 0xbd, 0x88, 0xa9, 0x0c, 0xbb, 0x62, 0x05, 0xab, 0x8e, 0x55, 0x25, 0x02, 0xa7, + 0x34, 0xf6, 0xdf, 0xb2, 0xe0, 0xf4, 0x15, 0xbf, 0x1d, 0x27, 0x24, 0xda, 0x8c, 0x8d, 0xc6, 0xbe, + 0x00, 0x15, 0x22, 0x95, 0x7b, 0xd1, 0x56, 0xb5, 0x69, 0x28, 0xad, 0x9f, 0x47, 0x6a, 0x2a, 0xba, + 0x02, 0x01, 0x81, 0xfd, 0x85, 0xaf, 0xfd, 0x76, 0x09, 0xc6, 0xaf, 0xae, 0xaf, 0xd7, 0xae, 0x90, + 0x44, 0x48, 0xc9, 0x7c, 0xa7, 0x54, 0x4d, 0xb3, 0xc8, 0xb5, 0xbd, 0x25, 0xb3, 0xea, 0xda, 0x89, + 0xe7, 0xcf, 0xf1, 0xc0, 0xf8, 0xb9, 0xd5, 0x20, 0xb9, 0x19, 0xd5, 0x93, 0xc8, 0x0b, 0xb6, 0xba, + 0x5a, 0xf0, 0x52, 0x92, 0x97, 0x7b, 0x49, 0x72, 0xf4, 0x02, 0x0c, 0xb1, 0x58, 0x7e, 0xa9, 0x7a, + 0x7c, 0x54, 0x69, 0x09, 0x0c, 0xfa, 0x60, 0x6f, 0xb6, 0x72, 0x0b, 0xaf, 0xf2, 0x3f, 0x58, 0x90, + 0xa2, 0x37, 0x61, 0x74, 0x3b, 0x49, 0x5a, 0x57, 0x89, 0xe3, 0x92, 0x48, 0x4a, 0x89, 0xf3, 0x07, + 0x4b, 0x09, 0x3a, 0x18, 0xbc, 0x40, 0xba, 0xb0, 0x52, 0x58, 0x8c, 0x75, 0x8e, 0x76, 0x1d, 0x20, + 0xc5, 0x3d, 0x24, 0x0b, 0xc4, 0xfe, 0xd9, 0x12, 0x0c, 0x5f, 0x75, 0x02, 0xd7, 0x27, 0x11, 0x5a, + 0x81, 0x01, 0x72, 0x9f, 0x34, 0xc4, 0x36, 0x9e, 0xd3, 0xf4, 0x74, 0xab, 0xe3, 0x5e, 0x35, 0xfa, + 0x1f, 0xb3, 0xf2, 0x08, 0xc3, 0x30, 0x6d, 0xf7, 0x15, 0x15, 0x45, 0xfb, 0x5c, 0xfe, 0x28, 0xa8, + 0x29, 0xc1, 0xf7, 0x49, 0x01, 0xc2, 0x92, 0x11, 0xf3, 0x3f, 0x35, 0x5a, 0x75, 0x2a, 0xdc, 0x92, + 0x62, 0x76, 0xdd, 0xfa, 0x52, 0x8d, 0x93, 0x0b, 0xbe, 0xdc, 0xff, 0x24, 0x81, 0x38, 0x65, 0x67, + 0x5f, 0x86, 0x53, 0xec, 0xf8, 0xd2, 0x49, 0xb6, 0x8d, 0x35, 0x93, 0x3b, 0x39, 0xed, 0xbf, 0x53, + 0x82, 0x13, 0xab, 0xf5, 0xa5, 0xba, 0xe9, 0x39, 0xbc, 0x0c, 0x63, 0x7c, 0x7b, 0xa6, 0x93, 0xce, + 0xf1, 0x45, 0x79, 0xe5, 0x72, 0x5f, 0xd7, 0x70, 0xd8, 0xa0, 0x44, 0x8f, 0x43, 0xd9, 0x7b, 0x27, + 0xc8, 0xc6, 0x47, 0xad, 0xbe, 0x76, 0x03, 0x53, 0x38, 0x45, 0xd3, 0x9d, 0x9e, 0x8b, 0x38, 0x85, + 0x56, 0xbb, 0xfd, 0xab, 0x30, 0xe1, 0xc5, 0x8d, 0xd8, 0x5b, 0x0d, 0xe8, 0xfa, 0x77, 0x1a, 0x72, + 0xfa, 0xa6, 0xaa, 0x39, 0x6d, 0xaa, 0xc2, 0xe2, 0x0c, 0xb5, 0x26, 0x6f, 0x07, 0x0b, 0x6b, 0x0b, + 0xf9, 0xe1, 0xb4, 0x6f, 0x43, 0x45, 0x85, 0x12, 0xc9, 0x00, 0x30, 0xab, 0x7b, 0x00, 0x58, 0x01, + 0x81, 0x23, 0xfd, 0xb9, 0xe5, 0xae, 0xfe, 0xdc, 0x7f, 0x68, 0x41, 0x1a, 0x35, 0x81, 0x30, 0x54, + 0x5a, 0x21, 0x3b, 0x2c, 0x89, 0xe4, 0xa9, 0xe4, 0x53, 0x39, 0x33, 0x91, 0xaf, 0x04, 0x3e, 0x57, + 0x6a, 0xb2, 0x2c, 0x4e, 0xd9, 0xa0, 0xeb, 0x30, 0xdc, 0x8a, 0x48, 0x3d, 0x61, 0x31, 0xd9, 0x7d, + 0x70, 0x64, 0xb3, 0xba, 0xc6, 0x4b, 0x62, 0xc9, 0xc2, 0xfe, 0x17, 0x16, 0xc0, 0x75, 0xaf, 0xe9, + 0x25, 0xd8, 0x09, 0xb6, 0xc8, 0x31, 0x18, 0x7b, 0x37, 0x60, 0x20, 0x6e, 0x91, 0x46, 0xb1, 0xe3, + 0xae, 0xb4, 0x65, 0xf5, 0x16, 0x69, 0xa4, 0x9f, 0x83, 0xfe, 0xc3, 0x8c, 0x8f, 0xfd, 0x8f, 0x00, + 0x26, 0x52, 0x32, 0xaa, 0x70, 0xa3, 0xe7, 0x8d, 0x60, 0xe4, 0x47, 0x33, 0xc1, 0xc8, 0x15, 0x46, + 0xad, 0xc5, 0x1f, 0x27, 0x50, 0x6e, 0x3a, 0xf7, 0x85, 0x7e, 0xff, 0x52, 0xd1, 0x06, 0xd1, 0x9a, + 0xe6, 0xd6, 0x9c, 0xfb, 0x5c, 0x9d, 0x7a, 0x4e, 0x4e, 0xa4, 0x35, 0xe7, 0xfe, 0x03, 0x7e, 0xa8, + 0xc5, 0x56, 0x22, 0x35, 0x28, 0xbe, 0xf6, 0x5f, 0xd3, 0xff, 0x4c, 0x38, 0xd2, 0xea, 0x58, 0xad, + 0x5e, 0x20, 0xdc, 0x93, 0x7d, 0xd6, 0xea, 0x05, 0xd9, 0x5a, 0xbd, 0xa0, 0x40, 0xad, 0x5e, 0x80, + 0xde, 0xb3, 0x60, 0x58, 0x78, 0xf5, 0x59, 0x1c, 0xda, 0xe8, 0xa5, 0x4f, 0xf5, 0x55, 0xb5, 0x38, + 0x1e, 0xe0, 0xd5, 0xcf, 0x4b, 0x1d, 0x52, 0x40, 0x73, 0x9b, 0x20, 0xab, 0x46, 0xbf, 0x6a, 0xc1, + 0x84, 0xf8, 0x8d, 0xc9, 0x3b, 0x6d, 0x12, 0x27, 0x62, 0xb7, 0xfa, 0xdc, 0x61, 0x5a, 0x23, 0x58, + 0xf0, 0x46, 0x7d, 0x52, 0x8a, 0x1a, 0x13, 0x99, 0xdb, 0xb6, 0x4c, 0x7b, 0xd0, 0xf7, 0x2c, 0x38, + 0xd5, 0x74, 0xee, 0xf3, 0x1a, 0x39, 0x0c, 0x3b, 0x89, 0x17, 0x8a, 0x58, 0xbb, 0x95, 0x7e, 0xe7, + 0x49, 0x07, 0x23, 0xde, 0xdc, 0xcf, 0xc8, 0xa3, 0xd6, 0x6e, 0x24, 0xb9, 0x8d, 0xee, 0xda, 0xc2, + 0x19, 0x17, 0x46, 0xe4, 0xc4, 0xec, 0xa2, 0xbd, 0x2f, 0xea, 0x9b, 0xf2, 0xc1, 0x2b, 0x50, 0xfa, + 0xbb, 0xe6, 0x5e, 0x6b, 0x3b, 0x41, 0xe2, 0x25, 0xbb, 0x9a, 0xae, 0xcf, 0x6a, 0x11, 0x13, 0xf1, + 0x08, 0x6b, 0xd9, 0x86, 0x31, 0x7d, 0xce, 0x1d, 0x61, 0x4d, 0x21, 0x9c, 0xec, 0x32, 0x9f, 0x8e, + 0xb0, 0xc2, 0x36, 0x3c, 0xda, 0x73, 0x5e, 0x1c, 0x5d, 0xb5, 0xf6, 0x3f, 0xb7, 0x74, 0x81, 0x79, + 0x0c, 0x1e, 0x94, 0x35, 0xd3, 0x83, 0x72, 0xbe, 0xe8, 0xca, 0xe9, 0xe1, 0x46, 0xd9, 0xd4, 0x9b, + 0x4f, 0x37, 0x02, 0xb4, 0x0e, 0x43, 0x3e, 0x85, 0xc8, 0x03, 0xac, 0x0b, 0xfd, 0xac, 0xcd, 0x54, + 0xc7, 0x60, 0xf0, 0x18, 0x0b, 0x5e, 0xf6, 0xf7, 0x2c, 0x18, 0xf8, 0x09, 0x5e, 0x90, 0xe8, 0x60, + 0x2d, 0xee, 0xf8, 0xce, 0x61, 0xe7, 0xde, 0xf2, 0xfd, 0x84, 0x04, 0x31, 0x53, 0x29, 0xbb, 0x0e, + 0xd1, 0xaf, 0x97, 0x60, 0x94, 0x56, 0x25, 0x43, 0x10, 0x5e, 0x81, 0x71, 0xdf, 0xd9, 0x20, 0xbe, + 0xf4, 0xfe, 0x66, 0xcd, 0xaf, 0xeb, 0x3a, 0x12, 0x9b, 0xb4, 0xb4, 0xf0, 0xa6, 0xee, 0x1c, 0x17, + 0xaa, 0x91, 0x2a, 0x6c, 0x78, 0xce, 0xb1, 0x49, 0x4b, 0x2d, 0x80, 0x7b, 0x4e, 0xd2, 0xd8, 0x16, + 0xa6, 0x99, 0x6a, 0xee, 0x1d, 0x0a, 0xc4, 0x1c, 0x87, 0x16, 0x60, 0x52, 0xce, 0xd8, 0xdb, 0xd4, + 0x66, 0x0f, 0x03, 0xa1, 0x36, 0xaa, 0x4b, 0x96, 0xd8, 0x44, 0xe3, 0x2c, 0x3d, 0xfa, 0x34, 0x4c, + 0xd0, 0xc1, 0x09, 0xdb, 0x89, 0x0c, 0xb0, 0x18, 0x64, 0x01, 0x16, 0x2c, 0x4a, 0x76, 0xdd, 0xc0, + 0xe0, 0x0c, 0xa5, 0xfd, 0x26, 0x9c, 0xbc, 0x1e, 0x3a, 0xee, 0xa2, 0xe3, 0x3b, 0x41, 0x83, 0x44, + 0xab, 0xc1, 0x56, 0xee, 0x59, 0xb4, 0x7e, 0x5e, 0x5c, 0xca, 0x3b, 0x2f, 0xb6, 0x23, 0x40, 0x7a, + 0x05, 0x22, 0x34, 0xe8, 0x0d, 0x18, 0xf6, 0x78, 0x55, 0x62, 0xda, 0x5e, 0xcc, 0x73, 0x2e, 0x75, + 0xb4, 0x51, 0x0b, 0x75, 0xe1, 0x00, 0x2c, 0x59, 0x52, 0x8b, 0xa2, 0x9b, 0x37, 0x2a, 0xdf, 0x68, + 0xb3, 0xff, 0xb2, 0x05, 0x93, 0x37, 0x32, 0x37, 0xf8, 0x9e, 0x86, 0xa1, 0x98, 0x44, 0x5d, 0x5c, + 0x6b, 0x75, 0x06, 0xc5, 0x02, 0xfb, 0xd0, 0xcd, 0xf5, 0x5f, 0x2c, 0x41, 0x85, 0x05, 0x99, 0xb6, + 0xa8, 0x75, 0x70, 0xf4, 0xca, 0xe9, 0x9a, 0xa1, 0x9c, 0xe6, 0x18, 0x8d, 0xaa, 0x61, 0xbd, 0x74, + 0x53, 0x74, 0x4b, 0xdd, 0x6c, 0x2b, 0x64, 0x2f, 0xa6, 0x0c, 0xf9, 0xed, 0xa7, 0x09, 0xf3, 0x22, + 0x9c, 0xbc, 0xf5, 0xc6, 0x4e, 0x70, 0x15, 0xed, 0x87, 0xee, 0x04, 0x57, 0xb5, 0xac, 0x87, 0x70, + 0xaa, 0x69, 0x8d, 0x67, 0xe2, 0xfb, 0xb3, 0x2c, 0x74, 0xd0, 0xf1, 0xbd, 0x77, 0x89, 0xba, 0x20, + 0x3a, 0x2b, 0x42, 0x01, 0x05, 0xf4, 0x01, 0x93, 0x33, 0xe2, 0x1f, 0xbf, 0xff, 0x9b, 0x16, 0xb1, + 0xaf, 0xc2, 0x64, 0x66, 0xe8, 0xd0, 0x4b, 0x30, 0xd8, 0xda, 0x76, 0x62, 0x92, 0x09, 0x4a, 0x19, + 0xac, 0x51, 0xe0, 0x83, 0xbd, 0xd9, 0x09, 0x55, 0x80, 0x41, 0x30, 0xa7, 0xb6, 0xdf, 0x2b, 0xc1, + 0xc0, 0x8d, 0xd0, 0x3d, 0x8e, 0xa9, 0x76, 0xd5, 0x98, 0x6a, 0x4f, 0xe7, 0x67, 0x0f, 0xe8, 0x39, + 0xcb, 0x6a, 0x99, 0x59, 0x76, 0xbe, 0x00, 0xaf, 0x83, 0x27, 0x58, 0x13, 0x46, 0x59, 0x76, 0x02, + 0x11, 0x95, 0xf3, 0x82, 0x61, 0x4f, 0xcd, 0x66, 0xec, 0xa9, 0x49, 0x8d, 0x54, 0xb3, 0xaa, 0x9e, + 0x81, 0x61, 0x11, 0x05, 0x92, 0x0d, 0x9c, 0x14, 0xb4, 0x58, 0xe2, 0xed, 0x7f, 0x5a, 0x06, 0x23, + 0x1b, 0x02, 0xfa, 0x81, 0x05, 0x73, 0x11, 0xbf, 0x0a, 0xe2, 0x56, 0xdb, 0x91, 0x17, 0x6c, 0xd5, + 0x1b, 0xdb, 0xc4, 0x6d, 0xfb, 0x5e, 0xb0, 0xb5, 0xba, 0x15, 0x84, 0x0a, 0xbc, 0x7c, 0x9f, 0x34, + 0xda, 0xcc, 0xe9, 0x5a, 0x38, 0x09, 0x83, 0x3a, 0x01, 0xbd, 0xb4, 0xbf, 0x37, 0x3b, 0x87, 0xfb, + 0xaa, 0x05, 0xf7, 0xd9, 0x2a, 0xf4, 0x47, 0x16, 0xcc, 0xf3, 0x7c, 0x00, 0xc5, 0x7b, 0x52, 0xc8, + 0x0e, 0xad, 0x49, 0xa6, 0x29, 0xbb, 0x75, 0x12, 0x35, 0x17, 0x5f, 0x16, 0x83, 0x3c, 0x5f, 0xeb, + 0xaf, 0x56, 0xdc, 0x6f, 0x33, 0xed, 0x7f, 0x55, 0x86, 0x71, 0x3a, 0x9e, 0xe9, 0x1d, 0xe0, 0x97, + 0x8c, 0x69, 0xf2, 0x44, 0x66, 0x9a, 0x9c, 0x30, 0x88, 0x1f, 0xce, 0xf5, 0xdf, 0x18, 0x4e, 0xf8, + 0x4e, 0x9c, 0x5c, 0x25, 0x4e, 0x94, 0x6c, 0x10, 0x87, 0x1d, 0x34, 0x66, 0x83, 0x18, 0x0a, 0x9c, + 0x5d, 0xaa, 0xc8, 0xa2, 0xeb, 0x59, 0x66, 0xb8, 0x93, 0x3f, 0xda, 0x01, 0xc4, 0x0e, 0x35, 0x23, + 0x27, 0x88, 0x79, 0x5f, 0x3c, 0xe1, 0xa6, 0xed, 0xaf, 0xd6, 0x19, 0x51, 0x2b, 0xba, 0xde, 0xc1, + 0x0d, 0x77, 0xa9, 0x41, 0x3b, 0xb6, 0x1e, 0x2c, 0x7a, 0x6c, 0x3d, 0x94, 0x13, 0xb1, 0xfc, 0xf3, + 0x16, 0x9c, 0xa4, 0x9f, 0xc5, 0x8c, 0x6e, 0x8d, 0x51, 0x08, 0x93, 0x74, 0xda, 0xf9, 0x24, 0x91, + 0x30, 0xb1, 0xbe, 0x72, 0x34, 0x6b, 0x93, 0x4f, 0xaa, 0xbe, 0x5d, 0x33, 0x99, 0xe1, 0x2c, 0x77, + 0xfb, 0xdb, 0x16, 0xb0, 0xf0, 0xb9, 0x63, 0xd8, 0xcc, 0xae, 0x98, 0x9b, 0x99, 0x9d, 0x2f, 0x31, + 0x7a, 0xec, 0x63, 0x2f, 0xc2, 0x14, 0xc5, 0xd6, 0xa2, 0xf0, 0xfe, 0xae, 0x54, 0xb4, 0xf3, 0xfd, + 0xb5, 0xef, 0x95, 0xf8, 0xb2, 0x51, 0x77, 0xda, 0xd0, 0x2f, 0x58, 0x30, 0xd2, 0x70, 0x5a, 0x4e, + 0x83, 0xe7, 0x92, 0x29, 0xe0, 0x93, 0x31, 0xca, 0xcf, 0x2d, 0x89, 0xb2, 0xdc, 0x9f, 0xf0, 0x09, + 0xd9, 0x75, 0x09, 0xce, 0xf5, 0x21, 0xa8, 0xca, 0x67, 0x3c, 0x18, 0x37, 0x98, 0x1d, 0xa1, 0x11, + 0xfa, 0x0b, 0x16, 0x17, 0xf9, 0xca, 0x50, 0xb8, 0x07, 0x27, 0x02, 0xed, 0x3f, 0x15, 0x66, 0x52, + 0x2f, 0x9e, 0x2b, 0x2e, 0xd4, 0x99, 0x0c, 0xd4, 0x02, 0x05, 0x33, 0x0c, 0x71, 0x67, 0x1d, 0xf6, + 0xdf, 0xb5, 0xe0, 0x11, 0x9d, 0x50, 0xbb, 0x82, 0x98, 0xe7, 0x2b, 0xae, 0xc2, 0x48, 0xd8, 0x22, + 0x91, 0x93, 0x1a, 0x45, 0xe7, 0xe5, 0xe8, 0xdf, 0x14, 0xf0, 0x07, 0x7b, 0xb3, 0xa7, 0x74, 0xee, + 0x12, 0x8e, 0x55, 0x49, 0x64, 0xc3, 0x10, 0x1b, 0x97, 0x58, 0x5c, 0x1e, 0x65, 0x99, 0x55, 0xd8, + 0x09, 0x49, 0x8c, 0x05, 0xc6, 0xfe, 0xeb, 0x16, 0x9f, 0x6c, 0x7a, 0xd3, 0xd1, 0x57, 0x60, 0xaa, + 0x49, 0xed, 0xa7, 0xe5, 0xfb, 0x2d, 0xba, 0x8d, 0xb2, 0x93, 0x61, 0xab, 0xc8, 0xe6, 0xd1, 0xa3, + 0xbb, 0x8b, 0xd3, 0xa2, 0xf5, 0x53, 0x6b, 0x19, 0xb6, 0xb8, 0xa3, 0x22, 0xfb, 0x8f, 0xc5, 0x8a, + 0x65, 0x1a, 0xdc, 0x33, 0x30, 0xdc, 0x0a, 0xdd, 0xa5, 0xd5, 0x2a, 0x16, 0x63, 0xa5, 0x44, 0x4e, + 0x8d, 0x83, 0xb1, 0xc4, 0xa3, 0x4b, 0x00, 0xe4, 0x7e, 0x42, 0xa2, 0xc0, 0xf1, 0xd5, 0x89, 0xae, + 0x52, 0x94, 0x96, 0x15, 0x06, 0x6b, 0x54, 0xb4, 0x4c, 0x2b, 0x0a, 0x77, 0x3c, 0x97, 0x45, 0xed, + 0x97, 0xcd, 0x32, 0x35, 0x85, 0xc1, 0x1a, 0x15, 0xb5, 0x5a, 0xdb, 0x41, 0xcc, 0x37, 0x31, 0x67, + 0x43, 0x24, 0x02, 0x19, 0x49, 0xad, 0xd6, 0x5b, 0x3a, 0x12, 0x9b, 0xb4, 0xf6, 0x7f, 0xaa, 0x00, + 0xa4, 0x6a, 0x12, 0x7a, 0xaf, 0x73, 0x85, 0x7e, 0xb2, 0xa8, 0x8e, 0xf5, 0xf0, 0x96, 0x27, 0xfa, + 0x86, 0x05, 0xa3, 0x8e, 0xef, 0x87, 0x0d, 0x27, 0x61, 0x3d, 0x2a, 0x15, 0x95, 0x15, 0xa2, 0x25, + 0x0b, 0x69, 0x59, 0xde, 0x98, 0x17, 0xe4, 0x81, 0x9f, 0x86, 0xc9, 0x6d, 0x8f, 0xde, 0x04, 0xf4, + 0x09, 0xa9, 0x66, 0xf3, 0x8f, 0x32, 0x93, 0x55, 0xb3, 0x2b, 0x4c, 0x42, 0x6a, 0x1a, 0x36, 0x7a, + 0xd3, 0xc8, 0x75, 0x31, 0x50, 0xe4, 0xce, 0xa2, 0xa1, 0x38, 0xe4, 0xa5, 0xb9, 0x40, 0x5f, 0xd4, + 0x03, 0x9a, 0x07, 0x8b, 0x5c, 0x0a, 0xd6, 0xf4, 0xd7, 0x9c, 0x60, 0xe6, 0x04, 0x26, 0x5d, 0x73, + 0xab, 0x14, 0x41, 0x59, 0x17, 0xf3, 0x6b, 0xc8, 0xec, 0xb1, 0xe9, 0xe6, 0x98, 0x41, 0xe0, 0x6c, + 0x15, 0xe8, 0x8b, 0x3c, 0xdc, 0x7c, 0x35, 0xd8, 0x0c, 0x45, 0x60, 0xd6, 0x85, 0x02, 0xdf, 0x7c, + 0x37, 0x4e, 0x48, 0x93, 0x96, 0x49, 0x77, 0xc3, 0x1b, 0x82, 0x0b, 0x56, 0xfc, 0xd0, 0x3a, 0x0c, + 0xb1, 0xcb, 0x31, 0xf1, 0xf4, 0x48, 0x11, 0xd7, 0x99, 0x79, 0x27, 0x34, 0x55, 0x41, 0xd8, 0xdf, + 0x18, 0x0b, 0x5e, 0xe8, 0xaa, 0xbc, 0x9b, 0x1d, 0xaf, 0x06, 0xb7, 0x62, 0xc2, 0xee, 0x66, 0x57, + 0x16, 0x3f, 0x96, 0x5e, 0xb6, 0xe6, 0xf0, 0xae, 0xd9, 0xbe, 0x8c, 0x92, 0x54, 0x13, 0x11, 0xff, + 0x65, 0x12, 0xb1, 0x69, 0x28, 0xd2, 0x50, 0x33, 0xe5, 0x58, 0x3a, 0xd8, 0xb7, 0x4d, 0x66, 0x38, + 0xcb, 0xfd, 0x18, 0xf7, 0xc0, 0x19, 0x1f, 0xa6, 0xb2, 0x4b, 0xf2, 0x08, 0x77, 0xdc, 0x3f, 0x1d, + 0x80, 0x09, 0x73, 0x62, 0xa0, 0x79, 0xa8, 0x08, 0x6d, 0x4a, 0x25, 0x14, 0x52, 0xf3, 0x7f, 0x4d, + 0x22, 0x70, 0x4a, 0xc3, 0x52, 0x2b, 0xb1, 0xe2, 0x5a, 0x38, 0x4e, 0x9a, 0x5a, 0x49, 0x61, 0xb0, + 0x46, 0x45, 0xd5, 0xd6, 0x8d, 0x30, 0x4c, 0x94, 0xe0, 0x56, 0x73, 0x66, 0x91, 0x41, 0xb1, 0xc0, + 0x52, 0x81, 0x7d, 0x97, 0x76, 0xc8, 0x37, 0x5d, 0x80, 0x4a, 0x60, 0x5f, 0xd3, 0x91, 0xd8, 0xa4, + 0xa5, 0x1b, 0x50, 0x18, 0xb3, 0x49, 0x28, 0x94, 0xe3, 0x34, 0xbc, 0xa9, 0xce, 0x2f, 0x8b, 0x49, + 0x3c, 0xfa, 0x02, 0x3c, 0xa2, 0xee, 0x76, 0x61, 0xee, 0x52, 0x95, 0x35, 0x0e, 0x19, 0xf6, 0xed, + 0x23, 0x4b, 0xdd, 0xc9, 0x70, 0xaf, 0xf2, 0xe8, 0x55, 0x98, 0x10, 0x8a, 0xad, 0xe4, 0x38, 0x6c, + 0x9e, 0x7e, 0x5f, 0x33, 0xb0, 0x38, 0x43, 0x8d, 0xaa, 0x30, 0x45, 0x21, 0x4c, 0xa3, 0x94, 0x1c, + 0xf8, 0x1d, 0x35, 0xb5, 0x33, 0x5f, 0xcb, 0xe0, 0x71, 0x47, 0x09, 0xb4, 0x00, 0x93, 0x5c, 0xb7, + 0xa0, 0x56, 0x1c, 0xfb, 0x0e, 0x22, 0x92, 0x52, 0x2d, 0x82, 0x9b, 0x26, 0x1a, 0x67, 0xe9, 0xd1, + 0x65, 0x18, 0x73, 0xa2, 0xc6, 0xb6, 0x97, 0x90, 0x46, 0xd2, 0x8e, 0x78, 0xd6, 0x03, 0x2d, 0x7c, + 0x60, 0x41, 0xc3, 0x61, 0x83, 0xd2, 0x7e, 0x17, 0x4e, 0x76, 0x09, 0xdb, 0xa6, 0x13, 0xc7, 0x69, + 0x79, 0xb2, 0x4f, 0x99, 0x40, 0xa5, 0x85, 0xda, 0xaa, 0xec, 0x8d, 0x46, 0x45, 0x67, 0x27, 0xf3, + 0x25, 0x6b, 0xf9, 0xfe, 0xd4, 0xec, 0x5c, 0x91, 0x08, 0x9c, 0xd2, 0xd8, 0xff, 0xab, 0x02, 0x9a, + 0xab, 0xa5, 0x40, 0x78, 0xca, 0x65, 0x18, 0x93, 0x29, 0x2c, 0xb5, 0xd4, 0x71, 0xaa, 0x9b, 0x57, + 0x34, 0x1c, 0x36, 0x28, 0x69, 0xdb, 0x02, 0xe9, 0x40, 0xca, 0x86, 0x45, 0x29, 0xcf, 0x12, 0x4e, + 0x69, 0xd0, 0x05, 0x18, 0x89, 0x89, 0xbf, 0x79, 0xdd, 0x0b, 0xee, 0x8a, 0x89, 0xad, 0xa4, 0x72, + 0x5d, 0xc0, 0xb1, 0xa2, 0x40, 0x8b, 0x50, 0x6e, 0x7b, 0xae, 0x98, 0xca, 0x52, 0x65, 0x28, 0xdf, + 0x5a, 0xad, 0x3e, 0xd8, 0x9b, 0x7d, 0xa2, 0x57, 0x0e, 0x50, 0x6a, 0x4c, 0xc7, 0x73, 0x74, 0xf9, + 0xd1, 0xc2, 0xdd, 0x9c, 0xea, 0x43, 0x7d, 0x3a, 0xd5, 0x2f, 0x01, 0x88, 0x5e, 0xcb, 0xb9, 0x5c, + 0x4e, 0xbf, 0xda, 0x15, 0x85, 0xc1, 0x1a, 0x15, 0x35, 0xc9, 0x1b, 0x11, 0x71, 0xa4, 0xd5, 0xca, + 0xc3, 0x89, 0x47, 0x0e, 0x6f, 0x92, 0x2f, 0x65, 0x99, 0xe1, 0x4e, 0xfe, 0x28, 0x84, 0x13, 0x2e, + 0x5d, 0x48, 0x46, 0xa5, 0x95, 0xfe, 0x63, 0x98, 0x69, 0x85, 0xd5, 0x2c, 0x23, 0xdc, 0xc9, 0x1b, + 0x7d, 0x19, 0x66, 0x24, 0xb0, 0xf3, 0xf6, 0x26, 0x5b, 0x2e, 0xe5, 0xc5, 0xb3, 0xfb, 0x7b, 0xb3, + 0x33, 0xd5, 0x9e, 0x54, 0xf8, 0x00, 0x0e, 0xe8, 0x0d, 0x18, 0x62, 0x87, 0x30, 0xf1, 0xf4, 0x28, + 0xdb, 0xed, 0x5e, 0x2c, 0x12, 0x09, 0x4f, 0x67, 0xfd, 0x1c, 0x3b, 0xca, 0x11, 0x31, 0x9e, 0xe9, + 0xc9, 0x16, 0x03, 0x62, 0xc1, 0x13, 0xb5, 0x60, 0xd4, 0x09, 0x82, 0x30, 0x71, 0xb8, 0x12, 0x36, + 0x56, 0x44, 0x8f, 0xd4, 0xaa, 0x58, 0x48, 0xcb, 0xf2, 0x7a, 0x54, 0xe0, 0x98, 0x86, 0xc1, 0x7a, + 0x15, 0xe8, 0x1e, 0x4c, 0x86, 0xf7, 0xa8, 0xc0, 0x94, 0xe7, 0x10, 0xf1, 0xf4, 0xb8, 0xd9, 0xb1, + 0x1c, 0xaf, 0xaa, 0x51, 0x58, 0x93, 0x64, 0x26, 0x53, 0x9c, 0xad, 0x05, 0xcd, 0x19, 0xbe, 0xe5, + 0x89, 0x34, 0x92, 0x39, 0xf5, 0x2d, 0xeb, 0xae, 0x64, 0x76, 0x43, 0x98, 0x47, 0x2f, 0x32, 0x89, + 0x30, 0x99, 0xb9, 0x21, 0x9c, 0xa2, 0xb0, 0x4e, 0x37, 0xf3, 0x29, 0x18, 0xd5, 0x06, 0xbe, 0x9f, + 0x90, 0xd9, 0x99, 0x57, 0x61, 0x2a, 0x3b, 0xa0, 0x7d, 0x85, 0xdc, 0xfe, 0xcf, 0x12, 0x4c, 0x76, + 0x39, 0xe4, 0xb9, 0xeb, 0xb1, 0xb0, 0x6f, 0x43, 0xf4, 0x5d, 0xf3, 0x02, 0x17, 0x33, 0x8c, 0x29, + 0xc0, 0x4a, 0x05, 0x04, 0x98, 0x94, 0xa6, 0xe5, 0x9e, 0xd2, 0x54, 0x08, 0xad, 0x81, 0x0f, 0x22, + 0xb4, 0xcc, 0x7d, 0x62, 0xb0, 0xd0, 0x3e, 0xf1, 0x10, 0x04, 0x9d, 0xb1, 0xd5, 0x0c, 0x17, 0xd8, + 0x6a, 0xbe, 0x55, 0x82, 0xa9, 0x34, 0xbc, 0x58, 0xe4, 0xb5, 0x3d, 0xfa, 0x33, 0x83, 0x75, 0xe3, + 0xcc, 0x20, 0x2f, 0x6d, 0x6d, 0xa6, 0x7d, 0x3d, 0xcf, 0x0f, 0xde, 0xc8, 0x9c, 0x1f, 0xbc, 0xd8, + 0x27, 0xdf, 0x83, 0xcf, 0x12, 0xbe, 0x5b, 0x82, 0xd3, 0xd9, 0x22, 0x4b, 0xbe, 0xe3, 0x35, 0x8f, + 0x61, 0xbc, 0xbe, 0x60, 0x8c, 0xd7, 0xcb, 0xfd, 0xf5, 0x8b, 0x35, 0xb2, 0xe7, 0xa0, 0x39, 0x99, + 0x41, 0xfb, 0xd4, 0x61, 0x98, 0x1f, 0x3c, 0x72, 0x7f, 0x60, 0xc1, 0xa3, 0x5d, 0xcb, 0x1d, 0x83, + 0x97, 0xf4, 0x75, 0xd3, 0x4b, 0xfa, 0xc2, 0x21, 0x7a, 0xd7, 0xc3, 0x6d, 0xfa, 0xdf, 0x4a, 0x3d, + 0x7a, 0xc5, 0x3c, 0x49, 0x37, 0x61, 0xd4, 0x69, 0x34, 0x48, 0x1c, 0xaf, 0x85, 0xae, 0xca, 0x35, + 0xf4, 0x3c, 0xdb, 0x5b, 0x52, 0xf0, 0x83, 0xbd, 0xd9, 0x99, 0x2c, 0x8b, 0x14, 0x8d, 0x75, 0x0e, + 0x66, 0x2e, 0xb2, 0xd2, 0x11, 0xe5, 0x22, 0xbb, 0x04, 0xb0, 0xa3, 0x2c, 0xd8, 0xac, 0x83, 0x4a, + 0xb3, 0x6d, 0x35, 0x2a, 0xf4, 0x17, 0x99, 0x46, 0xc8, 0x23, 0x2a, 0x06, 0xcc, 0x9b, 0x8a, 0x39, + 0xdf, 0x4f, 0x8f, 0xce, 0xe0, 0x17, 0x22, 0x95, 0x33, 0x4f, 0xb1, 0xb4, 0xff, 0x59, 0x19, 0x3e, + 0x7a, 0xc0, 0xa4, 0x43, 0x0b, 0xe6, 0x01, 0xe9, 0x73, 0x59, 0xcf, 0xcd, 0x4c, 0xd7, 0xc2, 0x86, + 0x2b, 0x27, 0xf3, 0xad, 0x4a, 0x1f, 0xf8, 0x5b, 0x7d, 0x53, 0xf7, 0xb3, 0xf1, 0xc0, 0xc8, 0x2b, + 0x87, 0x5e, 0x56, 0x3f, 0x9d, 0x7e, 0xf1, 0xaf, 0x59, 0xf0, 0x44, 0xd7, 0x4e, 0x19, 0xe1, 0x18, + 0xf3, 0x50, 0x69, 0x50, 0xa0, 0x76, 0x83, 0x25, 0xbd, 0x3a, 0x26, 0x11, 0x38, 0xa5, 0x31, 0xa2, + 0x2e, 0x4a, 0xb9, 0x51, 0x17, 0xbf, 0x67, 0xc1, 0xa9, 0x6c, 0x23, 0x8e, 0x41, 0xe6, 0xd4, 0x4d, + 0x99, 0x33, 0xd7, 0xdf, 0xa7, 0xef, 0x21, 0x6e, 0x7e, 0x75, 0x1c, 0xce, 0x74, 0xec, 0x58, 0x7c, + 0x14, 0x7f, 0xc6, 0x82, 0x13, 0x5b, 0x4c, 0xf3, 0xd6, 0xae, 0x09, 0x89, 0x7e, 0xe5, 0xdc, 0xad, + 0x3a, 0xf0, 0x76, 0x11, 0xb7, 0x23, 0x3a, 0x48, 0x70, 0x67, 0x65, 0xe8, 0xeb, 0x16, 0x9c, 0x72, + 0xee, 0xc5, 0x1d, 0x2f, 0x26, 0x88, 0x69, 0xf4, 0x6a, 0x8e, 0x93, 0x2b, 0xe7, 0xad, 0x85, 0xc5, + 0xe9, 0xfd, 0xbd, 0xd9, 0x53, 0xdd, 0xa8, 0x70, 0xd7, 0x5a, 0xe9, 0xf7, 0xdd, 0x16, 0xd7, 0x10, + 0x8a, 0x5d, 0x78, 0xeb, 0x76, 0x69, 0x81, 0x8b, 0x24, 0x89, 0xc1, 0x8a, 0x23, 0x7a, 0x0b, 0x2a, + 0x5b, 0xf2, 0x66, 0x50, 0x56, 0xe4, 0xf5, 0x18, 0xe6, 0x6e, 0x17, 0x89, 0x78, 0x68, 0xbc, 0x42, + 0xe1, 0x94, 0x29, 0xba, 0x0a, 0xe5, 0x60, 0x33, 0x16, 0x77, 0x70, 0xf3, 0x82, 0x6d, 0xcc, 0x10, + 0x27, 0x7e, 0x6d, 0xf1, 0xc6, 0x4a, 0x1d, 0x53, 0x16, 0x94, 0x53, 0xb4, 0xe1, 0x0a, 0xef, 0x6e, + 0x0e, 0x27, 0xbc, 0x58, 0xed, 0xe4, 0x84, 0x17, 0xab, 0x98, 0xb2, 0x40, 0x35, 0x18, 0x64, 0x97, + 0x1c, 0x84, 0xeb, 0x36, 0xe7, 0xa2, 0x76, 0xc7, 0x55, 0x0e, 0x9e, 0x68, 0x8f, 0x81, 0x31, 0x67, + 0x84, 0xd6, 0x61, 0xa8, 0xc1, 0x92, 0x83, 0x0b, 0xbb, 0x3a, 0x2f, 0x85, 0x41, 0x47, 0x22, 0x71, + 0x7e, 0xc4, 0xc4, 0xe1, 0x58, 0xf0, 0x62, 0x5c, 0x49, 0x6b, 0x7b, 0x33, 0x16, 0x86, 0x73, 0x1e, + 0xd7, 0x8e, 0x34, 0xef, 0x82, 0x2b, 0x83, 0x63, 0xc1, 0x0b, 0x55, 0xa1, 0xb4, 0xd9, 0x10, 0x59, + 0x33, 0x73, 0x5c, 0xb6, 0xe6, 0x1d, 0xd4, 0xc5, 0xa1, 0xfd, 0xbd, 0xd9, 0xd2, 0xca, 0x12, 0x2e, + 0x6d, 0x36, 0xd0, 0xeb, 0x30, 0xbc, 0xc9, 0x6f, 0x15, 0x8a, 0x0c, 0x99, 0x17, 0xf3, 0xae, 0x3e, + 0x76, 0x5c, 0x41, 0xe4, 0xd7, 0x1f, 0x04, 0x02, 0x4b, 0x76, 0x2c, 0x6d, 0x99, 0xba, 0x27, 0x29, + 0x52, 0x64, 0xce, 0xf5, 0x77, 0xaf, 0x52, 0xd8, 0x93, 0x0a, 0x8a, 0x35, 0x8e, 0x74, 0xce, 0x3b, + 0xf2, 0x9d, 0x03, 0x96, 0x1e, 0x33, 0x77, 0xce, 0x77, 0x7d, 0x16, 0x81, 0xcf, 0x79, 0x85, 0xc2, + 0x29, 0x53, 0xd4, 0x86, 0xf1, 0x9d, 0xb8, 0xb5, 0x4d, 0xe4, 0xd2, 0x67, 0x39, 0x33, 0x47, 0x2f, + 0x7d, 0x26, 0x27, 0x11, 0xaa, 0x28, 0xe2, 0x45, 0x49, 0xdb, 0xf1, 0x3b, 0x24, 0x18, 0xcb, 0x13, + 0x75, 0x5b, 0x67, 0x8b, 0xcd, 0x5a, 0xe8, 0x27, 0x79, 0xa7, 0x1d, 0x6e, 0xec, 0x26, 0x44, 0xe4, + 0xd4, 0xcc, 0xf9, 0x24, 0xaf, 0x71, 0xe2, 0xce, 0x4f, 0x22, 0x10, 0x58, 0xb2, 0x53, 0x43, 0xc6, + 0xa4, 0xf1, 0x54, 0xe1, 0x21, 0xeb, 0xe8, 0x43, 0x3a, 0x64, 0x4c, 0xfa, 0xa6, 0x4c, 0x99, 0xd4, + 0x6d, 0x6d, 0x87, 0x49, 0x18, 0x64, 0x64, 0xff, 0x89, 0x22, 0x52, 0xb7, 0xd6, 0xa5, 0x64, 0xa7, + 0xd4, 0xed, 0x46, 0x85, 0xbb, 0xd6, 0x6a, 0xff, 0xf1, 0x60, 0xe7, 0x76, 0xcb, 0x94, 0xe1, 0xbf, + 0xd6, 0x79, 0xee, 0xf8, 0xb9, 0xfe, 0x6d, 0xbe, 0x87, 0x78, 0x02, 0xf9, 0x75, 0x0b, 0xce, 0xb4, + 0xba, 0x6e, 0xa6, 0x62, 0xc3, 0xea, 0xd7, 0x74, 0xe4, 0x03, 0xa6, 0x12, 0xc6, 0x76, 0xc7, 0xe3, + 0x1e, 0x75, 0x66, 0x15, 0xd0, 0xf2, 0x07, 0x56, 0x40, 0xef, 0xc0, 0x08, 0xd3, 0x99, 0xd2, 0xbc, + 0x1a, 0x7d, 0xa6, 0xa0, 0x60, 0x5b, 0xdf, 0x92, 0x60, 0x81, 0x15, 0x33, 0x3a, 0x70, 0x8f, 0x67, + 0x3b, 0x81, 0x09, 0x43, 0x8b, 0x4c, 0xb7, 0xdc, 0xd7, 0xb1, 0x22, 0x46, 0xe2, 0xf1, 0xda, 0x41, + 0xc4, 0x0f, 0xf2, 0x08, 0xf0, 0xc1, 0x95, 0x1d, 0xa7, 0x42, 0xfb, 0xf7, 0xad, 0x2e, 0xfa, 0x17, + 0x37, 0x41, 0x3e, 0x63, 0x9a, 0x20, 0x4f, 0x67, 0x4d, 0x90, 0x0e, 0xb7, 0x81, 0x61, 0x7d, 0x14, + 0x4f, 0xcc, 0x58, 0x34, 0xe1, 0x87, 0xed, 0xc3, 0xb9, 0xbc, 0xc5, 0xcd, 0x22, 0x7c, 0x5c, 0x75, + 0x5c, 0x96, 0x46, 0xf8, 0xb8, 0xab, 0x55, 0xcc, 0x30, 0x45, 0xef, 0x8c, 0xdb, 0x3f, 0x5b, 0x82, + 0x72, 0x2d, 0x74, 0x8f, 0xc1, 0x0d, 0x72, 0xc5, 0x70, 0x83, 0x3c, 0x95, 0xfb, 0xca, 0x53, 0x4f, + 0xa7, 0xc7, 0xcd, 0x8c, 0xd3, 0xe3, 0xe3, 0xf9, 0xac, 0x0e, 0x76, 0x71, 0x7c, 0xaf, 0x0c, 0xfa, + 0x3b, 0x55, 0xe8, 0x3f, 0x1e, 0x26, 0xf0, 0xb3, 0x5c, 0xec, 0xe9, 0x2a, 0x51, 0x07, 0x0b, 0x11, + 0x92, 0x97, 0xc4, 0x7e, 0x6a, 0xe3, 0x3f, 0xef, 0x10, 0x6f, 0x6b, 0x3b, 0x21, 0x6e, 0xb6, 0x63, + 0xc7, 0x17, 0xff, 0xf9, 0xdf, 0x2d, 0x98, 0xcc, 0xd4, 0x8e, 0xfc, 0x6e, 0xf7, 0x4c, 0x0e, 0xe9, + 0xd8, 0x38, 0x91, 0x7b, 0x31, 0x65, 0x0e, 0x40, 0xf9, 0xa7, 0xa5, 0xfb, 0x81, 0xe9, 0x62, 0xca, + 0x81, 0x1d, 0x63, 0x8d, 0x02, 0xbd, 0x04, 0xa3, 0x49, 0xd8, 0x0a, 0xfd, 0x70, 0x6b, 0xf7, 0x1a, + 0x91, 0xd9, 0x0c, 0x94, 0x6f, 0x7f, 0x3d, 0x45, 0x61, 0x9d, 0xce, 0xfe, 0x7e, 0x19, 0xb2, 0xaf, + 0x9c, 0xfd, 0xf9, 0x3c, 0xfd, 0xe9, 0x99, 0xa7, 0x7f, 0x68, 0xc1, 0x14, 0xad, 0x9d, 0x05, 0x78, + 0xc8, 0x38, 0x4d, 0x95, 0xab, 0xdd, 0x3a, 0x20, 0x57, 0xfb, 0xd3, 0x54, 0xda, 0xb9, 0x61, 0x3b, + 0x11, 0x2e, 0x13, 0x4d, 0x88, 0x51, 0x28, 0x16, 0x58, 0x41, 0x47, 0xa2, 0x48, 0x5c, 0x68, 0xd1, + 0xe9, 0x48, 0x14, 0x61, 0x81, 0x95, 0xa9, 0xdc, 0x07, 0x7a, 0xa4, 0x72, 0x67, 0xf9, 0x80, 0x44, + 0x60, 0x81, 0x50, 0x07, 0xb4, 0x7c, 0x40, 0x32, 0xe2, 0x20, 0xa5, 0xb1, 0xbf, 0x53, 0x86, 0xb1, + 0x5a, 0xe8, 0xa6, 0x01, 0xd8, 0x2f, 0x1a, 0x01, 0xd8, 0xe7, 0x32, 0x01, 0xd8, 0x53, 0x3a, 0xed, + 0xc3, 0x89, 0xbf, 0x16, 0x79, 0xa3, 0xd8, 0x63, 0x03, 0x87, 0x8c, 0xbd, 0x36, 0xf2, 0x46, 0x29, + 0x46, 0xd8, 0xe4, 0xfb, 0x67, 0x29, 0xe6, 0xfa, 0xff, 0x58, 0x30, 0x51, 0x0b, 0x5d, 0x3a, 0x41, + 0xff, 0x2c, 0xcd, 0x46, 0x3d, 0xdb, 0xd4, 0xd0, 0x01, 0xd9, 0xa6, 0xfe, 0xb1, 0x05, 0xc3, 0xb5, + 0xd0, 0x3d, 0x06, 0x77, 0xe2, 0x8a, 0xe9, 0x4e, 0x7c, 0x22, 0x57, 0xf2, 0xf6, 0xf0, 0x20, 0xfe, + 0x66, 0x19, 0xc6, 0x69, 0x8b, 0xc3, 0x2d, 0xf9, 0xbd, 0x8c, 0xb1, 0xb1, 0x0a, 0x8c, 0x0d, 0x55, + 0x09, 0x43, 0xdf, 0x0f, 0xef, 0x65, 0xbf, 0xdd, 0x0a, 0x83, 0x62, 0x81, 0x45, 0x17, 0x60, 0xa4, + 0x15, 0x91, 0x1d, 0x2f, 0x6c, 0xc7, 0xd9, 0xcb, 0x71, 0x35, 0x01, 0xc7, 0x8a, 0x02, 0xbd, 0x08, + 0x63, 0xb1, 0x17, 0x34, 0x88, 0x0c, 0x3b, 0x18, 0x60, 0x61, 0x07, 0x3c, 0xb1, 0x9f, 0x06, 0xc7, + 0x06, 0x15, 0xba, 0x03, 0x15, 0xf6, 0x9f, 0xad, 0xa0, 0xfe, 0xb3, 0xc0, 0xf3, 0x6c, 0x56, 0x92, + 0x01, 0x4e, 0x79, 0xa1, 0x4b, 0x00, 0x89, 0x0c, 0x90, 0x88, 0x45, 0x56, 0x0e, 0xa5, 0x97, 0xaa, + 0xd0, 0x89, 0x18, 0x6b, 0x54, 0xe8, 0x39, 0xa8, 0x24, 0x8e, 0xe7, 0x5f, 0xf7, 0x02, 0x12, 0x8b, + 0x00, 0x13, 0x91, 0xa4, 0x57, 0x00, 0x71, 0x8a, 0xa7, 0xfb, 0x3d, 0xbb, 0x9a, 0xcb, 0x5f, 0x98, + 0x18, 0x61, 0xd4, 0x6c, 0xbf, 0xbf, 0xae, 0xa0, 0x58, 0xa3, 0xb0, 0x2f, 0xc3, 0xe9, 0x5a, 0xe8, + 0xd6, 0xc2, 0x28, 0x59, 0x09, 0xa3, 0x7b, 0x4e, 0xe4, 0xca, 0xef, 0x37, 0x2b, 0x73, 0xc3, 0xd2, + 0x3d, 0x79, 0x90, 0x7b, 0xd8, 0x8c, 0x5c, 0xaf, 0x2f, 0xb0, 0x1d, 0xbf, 0xcf, 0xc8, 0xfe, 0x1f, + 0x95, 0x00, 0xd5, 0x58, 0x08, 0x87, 0xf1, 0x2c, 0xc8, 0x36, 0x4c, 0xc4, 0xe4, 0xba, 0x17, 0xb4, + 0xef, 0x0b, 0x56, 0xc5, 0xae, 0x52, 0xd4, 0x97, 0xf5, 0x32, 0xfc, 0x1e, 0xab, 0x09, 0xc3, 0x19, + 0xbe, 0x74, 0x30, 0xa3, 0x76, 0xb0, 0x10, 0xdf, 0x8a, 0x49, 0x24, 0x1e, 0xe0, 0x60, 0x83, 0x89, + 0x25, 0x10, 0xa7, 0x78, 0x3a, 0x79, 0xd8, 0x9f, 0x1b, 0x61, 0x80, 0xc3, 0x30, 0x91, 0xd3, 0x8d, + 0x25, 0x64, 0xd7, 0xe0, 0xd8, 0xa0, 0x42, 0x2b, 0x80, 0xe2, 0x76, 0xab, 0xe5, 0xb3, 0x53, 0x31, + 0xc7, 0xbf, 0x12, 0x85, 0xed, 0x16, 0x8f, 0xe2, 0x15, 0xb9, 0xcc, 0xeb, 0x1d, 0x58, 0xdc, 0xa5, + 0x04, 0x15, 0x16, 0x9b, 0x31, 0xfb, 0x2d, 0xee, 0xe9, 0x72, 0xef, 0x5c, 0x9d, 0x81, 0xb0, 0xc4, + 0xd9, 0x5f, 0x65, 0x1b, 0x1c, 0x7b, 0x19, 0x21, 0x69, 0x47, 0x04, 0x35, 0x61, 0xbc, 0xc5, 0x36, + 0xb1, 0x24, 0x0a, 0x7d, 0x9f, 0x48, 0xfd, 0xf2, 0x70, 0x41, 0x24, 0x3c, 0x17, 0xba, 0xce, 0x0e, + 0x9b, 0xdc, 0xed, 0x1f, 0x8f, 0x32, 0x59, 0x25, 0x0e, 0x26, 0x87, 0x45, 0xa8, 0xa8, 0xd0, 0xe4, + 0x3e, 0x56, 0xe4, 0xa5, 0xa1, 0x74, 0x1f, 0x10, 0x81, 0xa7, 0x58, 0x72, 0x41, 0x5f, 0x62, 0x81, + 0xd0, 0x5c, 0x40, 0x14, 0x7f, 0xfe, 0x8b, 0xd3, 0x1b, 0x41, 0xd0, 0x82, 0x05, 0xd6, 0xd8, 0xa1, + 0xeb, 0x30, 0x2e, 0x12, 0xe9, 0x0b, 0xf7, 0x42, 0xd9, 0x30, 0xb1, 0xc7, 0xb1, 0x8e, 0x7c, 0x90, + 0x05, 0x60, 0xb3, 0x30, 0xda, 0x82, 0xc7, 0xb5, 0x27, 0x7b, 0xba, 0x04, 0x3c, 0x71, 0xc9, 0xf3, + 0xc4, 0xfe, 0xde, 0xec, 0xe3, 0xeb, 0x07, 0x11, 0xe2, 0x83, 0xf9, 0xa0, 0x9b, 0x70, 0xda, 0x69, + 0x24, 0xde, 0x0e, 0xa9, 0x12, 0xc7, 0xf5, 0xbd, 0x80, 0x98, 0x97, 0xb9, 0x1f, 0xdd, 0xdf, 0x9b, + 0x3d, 0xbd, 0xd0, 0x8d, 0x00, 0x77, 0x2f, 0x87, 0x3e, 0x03, 0x15, 0x37, 0x88, 0xc5, 0x18, 0x0c, + 0x19, 0xaf, 0x13, 0x55, 0xaa, 0x37, 0xea, 0xaa, 0xff, 0xe9, 0x1f, 0x9c, 0x16, 0x40, 0xef, 0xf0, + 0x87, 0x9e, 0x95, 0x35, 0xc3, 0x5f, 0xc5, 0x7a, 0xb9, 0x90, 0xfd, 0x6c, 0x5c, 0xb2, 0xe0, 0x9e, + 0x37, 0x15, 0x58, 0x68, 0xdc, 0xbf, 0x30, 0xaa, 0x40, 0x9f, 0x07, 0x14, 0x93, 0x68, 0xc7, 0x6b, + 0x90, 0x85, 0x06, 0xcb, 0x86, 0xc9, 0x8e, 0xf8, 0x46, 0x8c, 0xe8, 0x7a, 0x54, 0xef, 0xa0, 0xc0, + 0x5d, 0x4a, 0xa1, 0xab, 0x54, 0xf2, 0xe8, 0x50, 0x11, 0x07, 0x2a, 0x15, 0xc3, 0xe9, 0x2a, 0x69, + 0x45, 0xa4, 0xe1, 0x24, 0xc4, 0x35, 0x39, 0xe2, 0x4c, 0x39, 0xba, 0x2f, 0xa9, 0x84, 0xe7, 0x60, + 0x46, 0x2f, 0x76, 0x26, 0x3d, 0xa7, 0x76, 0xd6, 0x76, 0x18, 0x27, 0x37, 0x48, 0x72, 0x2f, 0x8c, + 0xee, 0x32, 0x8f, 0xfd, 0x88, 0x96, 0x5c, 0x2c, 0x45, 0x61, 0x9d, 0x8e, 0xea, 0x50, 0xec, 0xa8, + 0x68, 0xb5, 0xca, 0xfc, 0xf0, 0x23, 0xe9, 0xda, 0xb9, 0xca, 0xc1, 0x58, 0xe2, 0x25, 0xe9, 0x6a, + 0x6d, 0x89, 0xf9, 0xd4, 0x33, 0xa4, 0xab, 0xb5, 0x25, 0x2c, 0xf1, 0x28, 0xec, 0x7c, 0x03, 0x6a, + 0xa2, 0xc8, 0xf9, 0x46, 0xa7, 0x24, 0x2f, 0xf8, 0x0c, 0xd4, 0x7d, 0x98, 0x52, 0xef, 0x50, 0xf1, + 0xac, 0x8f, 0xf1, 0xf4, 0x64, 0x91, 0x67, 0xa6, 0xbb, 0x26, 0x8f, 0x54, 0x81, 0xbf, 0xab, 0x19, + 0x9e, 0xb8, 0xa3, 0x16, 0x23, 0x29, 0xc1, 0x54, 0x6e, 0x12, 0xfb, 0x79, 0xa8, 0xc4, 0xed, 0x0d, + 0x37, 0x6c, 0x3a, 0x5e, 0xc0, 0x1c, 0xdf, 0xfa, 0xa3, 0xc9, 0x12, 0x81, 0x53, 0x1a, 0x54, 0x83, + 0x11, 0x47, 0xbe, 0x17, 0x8e, 0x8a, 0x5c, 0x5a, 0x56, 0x0f, 0x85, 0x33, 0xaf, 0xa8, 0x7a, 0x21, + 0x5c, 0x71, 0x41, 0xaf, 0xc0, 0xb8, 0xb8, 0x75, 0x43, 0x22, 0xd6, 0xea, 0x93, 0x66, 0xc8, 0x77, + 0x5d, 0x22, 0xd9, 0x04, 0x33, 0x69, 0x67, 0x3e, 0x0b, 0x27, 0x3a, 0x96, 0x58, 0x5f, 0x81, 0x73, + 0xff, 0x6e, 0x00, 0x2a, 0xca, 0x43, 0x85, 0xe6, 0x4d, 0x67, 0xe4, 0xa3, 0x59, 0x67, 0xe4, 0x08, + 0x55, 0x08, 0x74, 0xff, 0xe3, 0x97, 0xbb, 0x3c, 0xda, 0xfa, 0x6c, 0xee, 0x9c, 0x2a, 0x7e, 0x8f, + 0xa5, 0x8f, 0xa7, 0x6d, 0x53, 0x2b, 0x65, 0xe0, 0x40, 0x2b, 0xa5, 0xe0, 0xbb, 0x54, 0xd4, 0x1e, + 0x69, 0x85, 0xee, 0x6a, 0x2d, 0xfb, 0xec, 0x4a, 0x8d, 0x02, 0x31, 0xc7, 0x31, 0x3d, 0x92, 0xee, + 0x11, 0x4c, 0x8f, 0x1c, 0x3e, 0xa4, 0x1e, 0x29, 0x19, 0xe0, 0x94, 0x17, 0xda, 0x81, 0x13, 0x0d, + 0xf3, 0x15, 0x1d, 0x75, 0x3b, 0xe5, 0xf9, 0x3e, 0x5e, 0xb1, 0x69, 0x6b, 0x2f, 0x06, 0x2c, 0x65, + 0xf9, 0xe1, 0xce, 0x2a, 0xd0, 0x2b, 0x30, 0xf2, 0x4e, 0x18, 0x2f, 0xf9, 0x4e, 0x1c, 0x0b, 0x41, + 0x29, 0x6f, 0x02, 0x8c, 0xbc, 0x76, 0xb3, 0xce, 0xe0, 0x0f, 0xf8, 0xb3, 0xfa, 0xf2, 0x2f, 0x56, + 0x05, 0xec, 0xdf, 0xe1, 0xde, 0x30, 0x61, 0x1f, 0x93, 0xb8, 0xed, 0x1f, 0x47, 0xe2, 0xec, 0x9b, + 0x86, 0xe9, 0xfe, 0x10, 0xfc, 0xb1, 0xff, 0xc1, 0x62, 0xfe, 0xd8, 0x75, 0xd2, 0x6c, 0xf9, 0x4e, + 0x72, 0x1c, 0x21, 0x8d, 0x5f, 0x82, 0x91, 0x44, 0xd4, 0x56, 0x2c, 0xeb, 0xb7, 0xd6, 0x3c, 0xe6, + 0xa7, 0x56, 0x32, 0x4e, 0x42, 0xb1, 0x62, 0x68, 0xff, 0x4b, 0xfe, 0x55, 0x24, 0xe6, 0x18, 0x8c, + 0xce, 0x1b, 0xa6, 0xd1, 0xf9, 0x4c, 0xe1, 0xbe, 0xf4, 0x30, 0x3e, 0xbf, 0x6f, 0xf6, 0x80, 0xa9, + 0xa2, 0x3f, 0x3d, 0x07, 0x06, 0xf6, 0x4d, 0x30, 0x5f, 0x1b, 0x42, 0xaf, 0xf2, 0x20, 0x61, 0x2e, + 0x64, 0x2f, 0xf4, 0x1d, 0x20, 0x6c, 0xff, 0x46, 0x09, 0x4e, 0x71, 0x97, 0xe1, 0xc2, 0x4e, 0xe8, + 0xb9, 0xb5, 0xd0, 0x15, 0x21, 0xd3, 0x2e, 0x8c, 0xb5, 0x34, 0x53, 0xa1, 0x58, 0x3e, 0x08, 0xdd, + 0xb8, 0x48, 0xd5, 0x33, 0x1d, 0x8a, 0x0d, 0xae, 0xb4, 0x16, 0xb2, 0xe3, 0x35, 0x94, 0x07, 0xaa, + 0xd4, 0xb7, 0xdc, 0x53, 0xb5, 0x2c, 0x6b, 0x7c, 0xb0, 0xc1, 0xf5, 0x08, 0x12, 0xd4, 0xdb, 0xbf, + 0x66, 0xc1, 0x23, 0x3d, 0x72, 0x46, 0xd0, 0xea, 0xee, 0x31, 0x37, 0xad, 0x78, 0xce, 0x4a, 0x55, + 0xc7, 0x9d, 0xb7, 0x58, 0x60, 0xd1, 0x06, 0x00, 0x77, 0xbe, 0xb2, 0x87, 0x83, 0x4b, 0x45, 0x62, + 0x25, 0x3a, 0xee, 0x66, 0x6b, 0xd7, 0x76, 0xd5, 0x53, 0xc1, 0x1a, 0x57, 0xfb, 0xdb, 0x65, 0x18, + 0xe4, 0x6f, 0x97, 0xd6, 0x60, 0x78, 0x9b, 0x67, 0xae, 0xec, 0x2f, 0x71, 0x66, 0xaa, 0x0a, 0x72, + 0x00, 0x96, 0x6c, 0xd0, 0x1a, 0x9c, 0xa4, 0x7a, 0x87, 0xe7, 0xf8, 0x55, 0xe2, 0x3b, 0xbb, 0xd2, + 0xb6, 0xe0, 0x59, 0xcb, 0x65, 0x82, 0xdd, 0x93, 0xab, 0x9d, 0x24, 0xb8, 0x5b, 0x39, 0xf4, 0x6a, + 0x47, 0xca, 0x29, 0x9e, 0x11, 0x54, 0xdd, 0xf6, 0x3a, 0x38, 0xed, 0x14, 0xd5, 0x7e, 0x5a, 0x1d, + 0x56, 0x94, 0xf6, 0x38, 0xa5, 0x69, 0x39, 0x99, 0xb4, 0xa8, 0x0a, 0x53, 0x71, 0x9b, 0x9d, 0x5c, + 0xaf, 0x6f, 0x47, 0x24, 0xde, 0x0e, 0x7d, 0x57, 0xbc, 0xab, 0xa6, 0x34, 0xc6, 0x7a, 0x06, 0x8f, + 0x3b, 0x4a, 0x50, 0x2e, 0x9b, 0x8e, 0xe7, 0xb7, 0x23, 0x92, 0x72, 0x19, 0x32, 0xb9, 0xac, 0x64, + 0xf0, 0xb8, 0xa3, 0x84, 0xfd, 0x27, 0x16, 0x9c, 0xec, 0x12, 0xde, 0xc1, 0x83, 0x0e, 0xb7, 0xbc, + 0x38, 0x51, 0xb9, 0xa9, 0xb5, 0xa0, 0x43, 0x0e, 0xc7, 0x8a, 0x82, 0xce, 0x42, 0x6e, 0x1a, 0x67, + 0x8f, 0x4d, 0xc5, 0x01, 0xb6, 0xc0, 0xf6, 0x97, 0x40, 0x0a, 0x9d, 0x83, 0x81, 0x76, 0x4c, 0xe4, + 0xa3, 0xff, 0x4a, 0x44, 0x31, 0x6f, 0x08, 0xc3, 0x50, 0x65, 0x67, 0x4b, 0x39, 0x22, 0x34, 0x65, + 0x87, 0xbb, 0x22, 0x38, 0xce, 0xfe, 0x66, 0x19, 0x26, 0x33, 0x61, 0x5e, 0xb4, 0x21, 0xcd, 0x30, + 0xf0, 0x92, 0x50, 0x25, 0x2d, 0xe2, 0x2f, 0xc3, 0x90, 0xd6, 0xf6, 0x9a, 0x80, 0x63, 0x45, 0x81, + 0x9e, 0x36, 0x1f, 0x92, 0x4e, 0xdb, 0xbc, 0x58, 0x35, 0x5e, 0xb3, 0x2b, 0x9a, 0x2f, 0xff, 0x49, + 0x18, 0x68, 0x85, 0xea, 0x65, 0x52, 0x35, 0xe9, 0xf1, 0x62, 0xb5, 0x16, 0x86, 0x3e, 0x66, 0x48, + 0xf4, 0x94, 0xe8, 0x7d, 0xc6, 0x7f, 0x8b, 0x1d, 0x37, 0x8c, 0xb5, 0x21, 0x78, 0x06, 0x86, 0xef, + 0x92, 0xdd, 0xc8, 0x0b, 0xb6, 0xb2, 0xde, 0xeb, 0x6b, 0x1c, 0x8c, 0x25, 0xde, 0xcc, 0x89, 0x3f, + 0x7c, 0xc4, 0x39, 0xf1, 0x47, 0x72, 0x23, 0x55, 0x7f, 0xd3, 0x82, 0x49, 0x96, 0xc9, 0x4f, 0x5c, + 0xa4, 0xf5, 0xc2, 0xe0, 0x18, 0xb6, 0xc7, 0x27, 0x61, 0x30, 0xa2, 0x95, 0x66, 0xd3, 0x5a, 0xb3, + 0x96, 0x60, 0x8e, 0x43, 0x8f, 0x01, 0x7b, 0xe7, 0x9f, 0x7d, 0xc6, 0x31, 0x9e, 0x26, 0x38, 0x7d, + 0xfd, 0x9f, 0xdd, 0x8a, 0xc0, 0xa4, 0xe5, 0x7b, 0xbc, 0xd1, 0xa9, 0xd3, 0xe9, 0xc3, 0x76, 0x2b, + 0xa2, 0x6b, 0x23, 0x1f, 0xd6, 0xad, 0x88, 0xee, 0xcc, 0x0f, 0x56, 0x51, 0xff, 0x47, 0x09, 0xce, + 0x76, 0x2d, 0x97, 0x9e, 0x83, 0xad, 0x18, 0xe7, 0x60, 0x97, 0x32, 0xe7, 0x60, 0xf6, 0xc1, 0xa5, + 0x1f, 0xce, 0xc9, 0x58, 0xf7, 0x03, 0xab, 0xf2, 0x31, 0x1e, 0x58, 0x0d, 0x14, 0x55, 0x1d, 0x06, + 0x73, 0x54, 0x87, 0x3f, 0xb0, 0xe0, 0xd1, 0xae, 0x43, 0xf6, 0xa1, 0xbb, 0x86, 0xd2, 0xb5, 0x95, + 0x3d, 0x14, 0xeb, 0x5f, 0x2c, 0xf7, 0xe8, 0x15, 0x53, 0xb1, 0xcf, 0x53, 0x29, 0xc4, 0x90, 0xb1, + 0x50, 0x8a, 0xc6, 0xb8, 0x04, 0xe2, 0x30, 0xac, 0xb0, 0x28, 0xd6, 0xae, 0x71, 0xf0, 0x46, 0x2e, + 0x1f, 0x72, 0x41, 0xcd, 0x99, 0xde, 0x42, 0xfd, 0x7e, 0x70, 0xe6, 0x72, 0x07, 0xba, 0xa3, 0x19, + 0x4d, 0xe5, 0xc3, 0x18, 0x4d, 0x63, 0xdd, 0x0d, 0x26, 0xb4, 0x00, 0x93, 0x4d, 0x2f, 0x60, 0x4f, + 0xe9, 0x99, 0x5a, 0x89, 0xba, 0x4b, 0xb7, 0x66, 0xa2, 0x71, 0x96, 0x7e, 0xe6, 0x15, 0x18, 0x3f, + 0xbc, 0x4f, 0xe6, 0xfd, 0x32, 0x7c, 0xf4, 0x00, 0xa1, 0xc0, 0x77, 0x07, 0xe3, 0xbb, 0x68, 0xbb, + 0x43, 0xc7, 0xb7, 0xa9, 0xc1, 0xa9, 0xcd, 0xb6, 0xef, 0xef, 0xb2, 0x28, 0x12, 0xe2, 0x4a, 0x0a, + 0xa1, 0xf1, 0xa9, 0x47, 0x6e, 0x57, 0xba, 0xd0, 0xe0, 0xae, 0x25, 0xd1, 0xe7, 0x01, 0x85, 0x1b, + 0x2c, 0xd7, 0xa5, 0x9b, 0xde, 0x7f, 0x66, 0x9f, 0xa0, 0x9c, 0x2e, 0xd5, 0x9b, 0x1d, 0x14, 0xb8, + 0x4b, 0x29, 0xaa, 0xff, 0xb1, 0xf7, 0x71, 0x55, 0xb3, 0x32, 0xfa, 0x1f, 0xd6, 0x91, 0xd8, 0xa4, + 0x45, 0x57, 0xe0, 0x84, 0xb3, 0xe3, 0x78, 0x3c, 0x7b, 0x8d, 0x64, 0xc0, 0x15, 0x40, 0xe5, 0xf5, + 0x58, 0xc8, 0x12, 0xe0, 0xce, 0x32, 0xa8, 0x65, 0xb8, 0xb1, 0x78, 0x6e, 0xeb, 0xcf, 0x1c, 0x62, + 0x06, 0x17, 0x76, 0x6c, 0xd9, 0x3f, 0xb6, 0xe8, 0xd6, 0xd7, 0xe5, 0xd5, 0x35, 0xe3, 0xb9, 0x76, + 0xed, 0x6a, 0x4b, 0xe7, 0x73, 0xed, 0xdc, 0x1f, 0x68, 0xd0, 0xf2, 0xa9, 0x11, 0xa7, 0xc1, 0xa8, + 0x86, 0xb6, 0x29, 0x6e, 0x74, 0x29, 0x0a, 0x74, 0x07, 0x86, 0x5d, 0x6f, 0xc7, 0x8b, 0xc3, 0xa8, + 0xc0, 0x03, 0xc9, 0x1d, 0x01, 0x8e, 0xa9, 0xb4, 0xac, 0x72, 0x26, 0x58, 0x72, 0xb3, 0x7f, 0xa5, + 0x04, 0xe3, 0xb2, 0xbe, 0xd7, 0xda, 0x61, 0xe2, 0x1c, 0xc3, 0x86, 0xfe, 0x9a, 0xb1, 0xa1, 0xcf, + 0x17, 0xbb, 0xde, 0xc6, 0x1a, 0xd7, 0x73, 0x23, 0xff, 0x42, 0x66, 0x23, 0xbf, 0xd8, 0x0f, 0xd3, + 0x83, 0x37, 0xf0, 0x7f, 0x63, 0xc1, 0x09, 0x83, 0xfe, 0x18, 0xf6, 0x91, 0x9a, 0xb9, 0x8f, 0x3c, + 0xd7, 0x47, 0x6f, 0x7a, 0xec, 0x1f, 0xdf, 0x2e, 0x65, 0x7a, 0xc1, 0xf6, 0x8d, 0xaf, 0xc0, 0xc0, + 0xb6, 0x13, 0xb9, 0xc5, 0xd2, 0xb8, 0x75, 0x14, 0x9f, 0xbb, 0xea, 0x44, 0x2e, 0x97, 0xfe, 0x17, + 0xd4, 0x9b, 0x30, 0x4e, 0xe4, 0xe6, 0x46, 0x68, 0xb3, 0x4a, 0xd1, 0x65, 0x18, 0x8a, 0x1b, 0x61, + 0x4b, 0xc5, 0xc2, 0x9d, 0xe3, 0xef, 0xc5, 0x50, 0xc8, 0x83, 0xbd, 0x59, 0x64, 0x56, 0x47, 0xc1, + 0x58, 0xd0, 0xcf, 0x10, 0xa8, 0xa8, 0xaa, 0x8f, 0x30, 0x16, 0xf8, 0xfd, 0x32, 0x9c, 0xec, 0x32, + 0x53, 0xd0, 0x57, 0x8d, 0x51, 0x7b, 0xa5, 0xef, 0xa9, 0xf6, 0x01, 0xc7, 0xed, 0xab, 0xcc, 0x4a, + 0x72, 0xc5, 0xdc, 0x38, 0x44, 0xf5, 0xb7, 0x62, 0x92, 0xad, 0x9e, 0x82, 0xf2, 0xab, 0xa7, 0xd5, + 0x1e, 0xd3, 0xe0, 0xd3, 0x6a, 0x54, 0x3b, 0x8f, 0xf0, 0x1b, 0xbf, 0x37, 0x00, 0xa7, 0xba, 0xdd, + 0xa0, 0x45, 0x3f, 0x6f, 0x65, 0xb2, 0xb4, 0xbf, 0xda, 0xff, 0x35, 0x5c, 0x9e, 0xba, 0x5d, 0x64, + 0x9d, 0x98, 0x33, 0xf3, 0xb6, 0xe7, 0x8e, 0xb6, 0xa8, 0x9d, 0xdd, 0xaa, 0x88, 0x78, 0xbe, 0x7d, + 0x29, 0x0f, 0x3e, 0x77, 0x88, 0xa6, 0x88, 0x94, 0xfd, 0x71, 0xe6, 0x56, 0x85, 0x04, 0xe7, 0xdf, + 0xaa, 0x90, 0x6d, 0x98, 0xd9, 0x82, 0x51, 0xad, 0x5f, 0x47, 0x38, 0x05, 0x3c, 0xba, 0x35, 0x69, + 0xad, 0x3e, 0xc2, 0x69, 0xf0, 0xcb, 0x16, 0x64, 0xc2, 0x55, 0x94, 0x2b, 0xc6, 0xea, 0xe9, 0x8a, + 0x39, 0x07, 0x03, 0x51, 0xe8, 0x93, 0x6c, 0xf6, 0x70, 0x1c, 0xfa, 0x04, 0x33, 0x8c, 0x7a, 0x1a, + 0xb2, 0xdc, 0xeb, 0x69, 0x48, 0x6a, 0x9b, 0xfb, 0x64, 0x87, 0x48, 0xc7, 0x88, 0x12, 0xde, 0xd7, + 0x29, 0x10, 0x73, 0x9c, 0xfd, 0xfb, 0x65, 0x18, 0xe2, 0xde, 0x87, 0x63, 0xd8, 0x9d, 0x6b, 0xc2, + 0x11, 0x50, 0xe8, 0x56, 0x2b, 0x6f, 0xd5, 0x5c, 0xd5, 0x49, 0x1c, 0x3e, 0xb1, 0x54, 0x1f, 0x53, + 0xe7, 0x01, 0x9a, 0x33, 0x46, 0x61, 0x26, 0x63, 0xdf, 0x02, 0xe7, 0xa1, 0x8d, 0xc9, 0x36, 0x40, + 0xcc, 0x1e, 0x23, 0xa3, 0x3c, 0x44, 0xce, 0xbd, 0x17, 0x0b, 0xb5, 0xa3, 0xae, 0x8a, 0xf1, 0xd6, + 0xa4, 0xc9, 0xbe, 0x14, 0x02, 0x6b, 0xbc, 0x67, 0x5e, 0x86, 0x8a, 0x22, 0xce, 0x53, 0xfc, 0xc7, + 0xf4, 0xa9, 0xf9, 0x17, 0x60, 0x32, 0x53, 0x57, 0x5f, 0x76, 0xc3, 0x2f, 0x59, 0x30, 0x99, 0x79, + 0x45, 0x19, 0xbd, 0x67, 0xc1, 0x29, 0xbf, 0x8b, 0xf3, 0x49, 0x7c, 0xe6, 0xc3, 0xb8, 0xad, 0x94, + 0xc9, 0xd0, 0x0d, 0x8b, 0xbb, 0xd6, 0x66, 0xff, 0x96, 0x05, 0x27, 0x3a, 0x9e, 0xdf, 0xfd, 0x90, + 0x34, 0x4e, 0x26, 0x38, 0x2d, 0x75, 0x4f, 0x70, 0x6a, 0xff, 0x86, 0x05, 0x62, 0x36, 0x1d, 0x83, + 0x8e, 0xb6, 0x6a, 0xea, 0x68, 0x1f, 0x2b, 0x32, 0x41, 0x7b, 0x28, 0x67, 0xbf, 0x67, 0x01, 0xe2, + 0x04, 0xd9, 0xe7, 0x12, 0xb9, 0xa3, 0x51, 0x33, 0x2e, 0xd2, 0x19, 0xad, 0x30, 0x58, 0xa3, 0xea, + 0x33, 0xf7, 0xbd, 0x7a, 0x66, 0xac, 0x7b, 0xc3, 0xd0, 0x45, 0x18, 0x15, 0xcf, 0x0c, 0xad, 0xa5, + 0x4f, 0x88, 0x4d, 0xb2, 0xc7, 0x2c, 0x53, 0x30, 0xd6, 0x69, 0xec, 0xdf, 0x29, 0x43, 0x36, 0xe8, + 0x04, 0xbd, 0x05, 0x63, 0x0d, 0xa7, 0xe5, 0x6c, 0x78, 0xbe, 0x97, 0x78, 0x24, 0x2e, 0x76, 0xd8, + 0xb5, 0xa4, 0x95, 0x10, 0xae, 0x6a, 0x0d, 0x82, 0x0d, 0x8e, 0x68, 0x0e, 0xa0, 0x15, 0x79, 0x3b, + 0x9e, 0x4f, 0xb6, 0x98, 0x66, 0xc4, 0xa2, 0x56, 0xf9, 0xb9, 0x8d, 0x84, 0x62, 0x8d, 0xa2, 0x4b, + 0x94, 0x63, 0xf9, 0x38, 0xa2, 0x1c, 0x07, 0xfa, 0x8c, 0x72, 0x1c, 0x2c, 0x14, 0xe5, 0x88, 0xe1, + 0x8c, 0xf4, 0x30, 0xd3, 0xff, 0x2b, 0x9e, 0x4f, 0x78, 0x42, 0x43, 0x11, 0xd5, 0x3a, 0xb3, 0xbf, + 0x37, 0x7b, 0x06, 0x77, 0xa5, 0xc0, 0x3d, 0x4a, 0xda, 0x6d, 0x38, 0x59, 0x27, 0x91, 0xc7, 0xf2, + 0x4c, 0xb9, 0xe9, 0x02, 0xfc, 0x32, 0x54, 0xa2, 0xcc, 0xda, 0xef, 0xf3, 0xca, 0xa1, 0x96, 0x99, + 0x44, 0xae, 0xf5, 0x94, 0xa5, 0xfd, 0x57, 0x4b, 0x30, 0x2c, 0x82, 0xbb, 0x8e, 0x61, 0xab, 0xbb, + 0x66, 0x18, 0xa2, 0xcf, 0xe4, 0xad, 0x60, 0xd6, 0xac, 0x9e, 0x26, 0x68, 0x3d, 0x63, 0x82, 0x3e, + 0x57, 0x8c, 0xdd, 0xc1, 0xc6, 0xe7, 0x0f, 0x4a, 0x30, 0x61, 0x06, 0xbb, 0x1d, 0xc3, 0xb0, 0xbc, + 0x0e, 0xc3, 0xb1, 0x88, 0x04, 0x2b, 0x15, 0x89, 0x63, 0xc9, 0x7e, 0x62, 0xe5, 0x6d, 0x90, 0xb1, + 0x5f, 0x92, 0x5d, 0xd7, 0x60, 0xb3, 0xf2, 0x71, 0x04, 0x9b, 0xd9, 0xbf, 0xcb, 0x44, 0xac, 0x3e, + 0x90, 0xc7, 0xb0, 0x45, 0xbc, 0x66, 0x0a, 0xe3, 0x0b, 0x85, 0x66, 0x84, 0x68, 0x5e, 0x8f, 0xad, + 0xe2, 0xbb, 0x16, 0x8c, 0x0a, 0xc2, 0x63, 0xe8, 0xc0, 0xe7, 0xcd, 0x0e, 0x3c, 0x55, 0xa8, 0x03, + 0x3d, 0x5a, 0xfe, 0xb7, 0x4b, 0xaa, 0xe5, 0x35, 0xf1, 0xa8, 0x6c, 0x6e, 0xbe, 0xcb, 0x91, 0x56, + 0x14, 0x26, 0x61, 0x23, 0xf4, 0xc5, 0x96, 0xff, 0x58, 0x7a, 0xbd, 0x80, 0xc3, 0x1f, 0x68, 0xbf, + 0xb1, 0xa2, 0x66, 0xd1, 0xef, 0x61, 0x94, 0x88, 0x0d, 0xab, 0xdb, 0x93, 0xb6, 0x1b, 0xf2, 0xc9, + 0x70, 0x0a, 0x13, 0x37, 0x73, 0xfa, 0x7d, 0x2a, 0x37, 0xbd, 0x2d, 0xa0, 0x38, 0x61, 0x8d, 0xab, + 0x0c, 0x43, 0x65, 0x35, 0x0c, 0x9a, 0xde, 0xdf, 0x1b, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0x32, 0x93, + 0xb8, 0x6c, 0x78, 0xfa, 0x0b, 0xe4, 0xff, 0x2b, 0x43, 0x6a, 0x60, 0x99, 0x53, 0xe7, 0x86, 0x7e, + 0x5d, 0xa0, 0xa8, 0x58, 0xa3, 0x4d, 0xd0, 0x23, 0xe7, 0xd2, 0xdb, 0x05, 0x88, 0x74, 0x1c, 0x19, + 0xbc, 0x5c, 0x58, 0x52, 0xf6, 0x71, 0x48, 0xc0, 0x92, 0x04, 0xb1, 0xcc, 0x28, 0xab, 0xb5, 0x6c, + 0x8e, 0xd2, 0x25, 0x89, 0xc0, 0x29, 0x0d, 0x9a, 0x17, 0x66, 0x85, 0xf9, 0xe2, 0xb0, 0x34, 0x2b, + 0xe4, 0x90, 0x68, 0x76, 0xc5, 0x45, 0x18, 0x55, 0x59, 0xda, 0x6b, 0x3c, 0xd9, 0x76, 0x85, 0x6b, + 0x33, 0xcb, 0x29, 0x18, 0xeb, 0x34, 0x68, 0x15, 0x4e, 0xba, 0x2a, 0xea, 0xb8, 0xd6, 0xde, 0xf0, + 0xbd, 0x06, 0x2d, 0xca, 0x6f, 0x0c, 0x3d, 0xb2, 0xbf, 0x37, 0x7b, 0xb2, 0xda, 0x89, 0xc6, 0xdd, + 0xca, 0xa0, 0x75, 0x98, 0x8c, 0x79, 0x36, 0x7a, 0x19, 0x5a, 0x2a, 0x52, 0xf7, 0x3d, 0x2b, 0xcf, + 0x2a, 0xea, 0x26, 0xfa, 0x01, 0x03, 0x71, 0x99, 0x20, 0x83, 0x51, 0xb3, 0x2c, 0xd0, 0xab, 0x30, + 0xe1, 0xeb, 0x0f, 0x6d, 0xd5, 0x44, 0xf0, 0xb5, 0x8a, 0xea, 0x30, 0x9e, 0xe1, 0xaa, 0xe1, 0x0c, + 0x35, 0x7a, 0x1d, 0xa6, 0x75, 0x88, 0xc8, 0x60, 0xe0, 0x04, 0x5b, 0x24, 0x16, 0x69, 0xb0, 0x1f, + 0xdb, 0xdf, 0x9b, 0x9d, 0xbe, 0xde, 0x83, 0x06, 0xf7, 0x2c, 0x8d, 0x2e, 0xc3, 0x98, 0x1c, 0x49, + 0x2d, 0x10, 0x3b, 0x8d, 0x27, 0xd2, 0x70, 0xd8, 0xa0, 0xfc, 0x60, 0x47, 0x32, 0x5f, 0xa1, 0x85, + 0xb5, 0xad, 0x15, 0xbd, 0x0d, 0x63, 0x7a, 0x1b, 0xb3, 0x7b, 0x66, 0xfe, 0xe3, 0x65, 0x62, 0x8b, + 0x56, 0x2d, 0xd7, 0x71, 0xd8, 0xe0, 0x6d, 0xdf, 0x84, 0xa1, 0xfa, 0x6e, 0xdc, 0x48, 0xfc, 0x87, + 0xf5, 0xd8, 0x74, 0x03, 0x26, 0x33, 0xaf, 0x32, 0xab, 0xe7, 0xbd, 0xad, 0x87, 0xf5, 0xbc, 0xb7, + 0xfd, 0x35, 0x0b, 0x06, 0xd7, 0x1d, 0x2f, 0xff, 0x01, 0x89, 0x22, 0x4d, 0x46, 0x2f, 0xc1, 0x10, + 0xd9, 0xdc, 0x24, 0x0d, 0xf9, 0x5c, 0xf8, 0xe3, 0x52, 0xb5, 0x59, 0x66, 0x50, 0xba, 0x34, 0x59, + 0x65, 0xfc, 0x2f, 0x16, 0xc4, 0xf6, 0xbf, 0xb7, 0x00, 0xd6, 0x43, 0x5f, 0x9e, 0x36, 0xe5, 0xb4, + 0x64, 0xb1, 0xe3, 0x29, 0x8b, 0xa7, 0xbb, 0x3c, 0x65, 0x81, 0x52, 0x86, 0x5d, 0x1e, 0xb2, 0x50, + 0xbd, 0x29, 0x17, 0xea, 0xcd, 0x40, 0x3f, 0xbd, 0xf9, 0x86, 0x05, 0x22, 0x10, 0xa8, 0xc0, 0x4c, + 0x70, 0x65, 0xfa, 0x79, 0x23, 0x37, 0xc9, 0xb3, 0x45, 0x2e, 0xec, 0x88, 0x8c, 0x24, 0x6a, 0x6e, + 0x1a, 0x79, 0x48, 0x0c, 0xae, 0xd4, 0xb0, 0x1f, 0xe5, 0xe8, 0x35, 0xa6, 0x47, 0xe6, 0xb7, 0xab, + 0xaf, 0x2c, 0x6c, 0x2c, 0x3b, 0x3b, 0x65, 0xac, 0xb2, 0x71, 0xe9, 0xd9, 0xd9, 0x25, 0x02, 0xa7, + 0x34, 0xe8, 0x19, 0x18, 0x8e, 0xdb, 0x1b, 0x8c, 0x3c, 0x13, 0x15, 0x54, 0xe7, 0x60, 0x2c, 0xf1, + 0xf6, 0xcf, 0x21, 0x30, 0xba, 0x66, 0x64, 0xfe, 0xb2, 0x1e, 0x7a, 0xe6, 0xaf, 0x37, 0x60, 0x84, + 0x34, 0x5b, 0xc9, 0x6e, 0xd5, 0x8b, 0x8a, 0xe5, 0x60, 0x5c, 0x16, 0xd4, 0x9d, 0xdc, 0x25, 0x06, + 0x2b, 0x8e, 0x3d, 0xf2, 0xb8, 0x95, 0x3f, 0x14, 0x79, 0xdc, 0x06, 0x7e, 0x22, 0x79, 0xdc, 0x5e, + 0x87, 0xe1, 0x2d, 0x2f, 0xc1, 0xa4, 0x15, 0x8a, 0x1b, 0x9e, 0x39, 0xc7, 0x77, 0x57, 0x38, 0x71, + 0x67, 0x72, 0x26, 0x81, 0xc0, 0x92, 0x1d, 0x5a, 0x87, 0x21, 0x6e, 0x7b, 0x88, 0xd4, 0x68, 0x9f, + 0x28, 0xe2, 0xa5, 0xe9, 0xcc, 0x12, 0x26, 0x42, 0xbf, 0x04, 0x2f, 0x99, 0xb7, 0x6d, 0xf8, 0x83, + 0xe7, 0x6d, 0x53, 0xd9, 0xd6, 0x46, 0x1e, 0x56, 0xb6, 0x35, 0x23, 0x6b, 0x5d, 0xe5, 0x28, 0xb2, + 0xd6, 0x7d, 0xc3, 0x82, 0xd3, 0xad, 0x6e, 0x39, 0x1f, 0x45, 0xde, 0xb4, 0xcf, 0x1e, 0x22, 0x07, + 0xa6, 0x51, 0x35, 0xbb, 0x37, 0xd7, 0x95, 0x0c, 0x77, 0xaf, 0x58, 0xa6, 0xbf, 0x1b, 0xfd, 0xe0, + 0xe9, 0xef, 0x8e, 0x3a, 0xc1, 0x5a, 0x9a, 0x0c, 0x6f, 0xfc, 0x48, 0x92, 0xe1, 0x4d, 0x3c, 0xc4, + 0x64, 0x78, 0x5a, 0x1a, 0xbb, 0xc9, 0x87, 0x9b, 0xc6, 0x6e, 0x1b, 0x46, 0xdd, 0xf0, 0x5e, 0x70, + 0xcf, 0x89, 0xdc, 0x85, 0xda, 0xaa, 0xc8, 0x9a, 0x96, 0x93, 0x9a, 0xa3, 0x9a, 0x16, 0x30, 0x6a, + 0xe0, 0xee, 0xc8, 0x14, 0x89, 0x75, 0xd6, 0x22, 0xa1, 0xdf, 0x89, 0x0f, 0x98, 0xd0, 0xcf, 0x48, + 0x8b, 0x87, 0x8e, 0x22, 0x2d, 0xde, 0x5b, 0xec, 0x8e, 0xfe, 0xa6, 0xb7, 0xb5, 0xe6, 0xb4, 0xd8, + 0xbd, 0xb2, 0xdc, 0x1a, 0x96, 0x24, 0x79, 0x67, 0x0d, 0x0a, 0x85, 0x53, 0xa6, 0x9d, 0x89, 0xf7, + 0x4e, 0x1d, 0x77, 0xe2, 0xbd, 0xd3, 0x47, 0x98, 0x78, 0xef, 0xcc, 0xb1, 0x26, 0xde, 0x7b, 0xe4, + 0x27, 0x92, 0x78, 0xef, 0x2f, 0xc1, 0xd9, 0x83, 0x3f, 0x47, 0x9a, 0xd8, 0xb9, 0x96, 0xba, 0x0c, + 0x32, 0x89, 0x9d, 0x99, 0xaa, 0xa3, 0x51, 0x15, 0xce, 0xff, 0xf5, 0x1d, 0x0b, 0x1e, 0xe9, 0x91, + 0x1e, 0xa7, 0xf0, 0x95, 0x8c, 0x16, 0x4c, 0xb6, 0xcc, 0xa2, 0x85, 0x2f, 0x51, 0x19, 0xe9, 0x78, + 0x54, 0x78, 0x5f, 0x06, 0x81, 0xb3, 0xec, 0x17, 0x3f, 0xf6, 0xc3, 0xf7, 0xcf, 0x7e, 0xe4, 0x47, + 0xef, 0x9f, 0xfd, 0xc8, 0x1f, 0xbd, 0x7f, 0xf6, 0x23, 0x3f, 0xb3, 0x7f, 0xd6, 0xfa, 0xe1, 0xfe, + 0x59, 0xeb, 0x47, 0xfb, 0x67, 0xad, 0x3f, 0xd9, 0x3f, 0x6b, 0x7d, 0xe3, 0x4f, 0xcf, 0x7e, 0xe4, + 0x8b, 0xa5, 0x9d, 0x8b, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xab, 0xdd, 0x46, 0x9b, 0x8b, 0xb9, 0x00, 0x00, } diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto b/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto index 4693f988cd5..a7f0bd64d2f 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto +++ b/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto @@ -799,6 +799,10 @@ message EnvFromSource { // The ConfigMap to select from // +optional optional ConfigMapEnvSource configMapRef = 2; + + // The Secret to select from + // +optional + optional SecretEnvSource secretRef = 3; } // EnvVar represents an environment variable present in a Container. @@ -2380,6 +2384,19 @@ message PodLogOptions { optional int64 limitBytes = 8; } +// PodPortForwardOptions is the query options to a Pod's port forward call +// when using WebSockets. +// The `port` query parameter must specify the port or +// ports (comma separated) to forward over. +// Port forwarding over SPDY does not use these options. It requires the port +// to be passed in the `port` header as part of request. +message PodPortForwardOptions { + // List of ports to forward + // Required when using WebSockets + // +optional + repeated int32 ports = 1; +} + // PodProxyOptions is the query options to a Pod's proxy call. message PodProxyOptions { // Path is the URL path to use for the current proxy request to pod. @@ -3067,6 +3084,16 @@ message Secret { optional string type = 3; } +// SecretEnvSource selects a Secret to populate the environment +// variables with. +// +// The contents of the target Secret's Data field will represent the +// key-value pairs as environment variables. +message SecretEnvSource { + // The Secret to select from. + optional LocalObjectReference localObjectReference = 1; +} + // SecretKeySelector selects a key of a Secret. message SecretKeySelector { // The name of the secret in the pod's namespace to select from. diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/register.go b/staging/src/k8s.io/client-go/pkg/api/v1/register.go index 915a66f6f15..2ad0c4a975f 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/register.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/register.go @@ -81,6 +81,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &PodAttachOptions{}, &PodLogOptions{}, &PodExecOptions{}, + &PodPortForwardOptions{}, &PodProxyOptions{}, &ComponentStatus{}, &ComponentStatusList{}, diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go b/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go index f1edbef6b42..2ec0d415b96 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go @@ -19828,14 +19828,15 @@ func (x *EnvFromSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [2]bool + var yyq2 [3]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.Prefix != "" yyq2[1] = x.ConfigMapRef != nil + yyq2[2] = x.SecretRef != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(2) + r.EncodeArrayStart(3) } else { yynn2 = 0 for _, b := range yyq2 { @@ -19894,6 +19895,29 @@ func (x *EnvFromSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -19978,6 +20002,17 @@ func (x *EnvFromSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } x.ConfigMapRef.CodecDecodeSelf(d) } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(SecretEnvSource) + } + x.SecretRef.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -19989,16 +20024,16 @@ func (x *EnvFromSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj7 int - var yyb7 bool - var yyhl7 bool = l >= 0 - yyj7++ - if yyhl7 { - yyb7 = yyj7 > l + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l } else { - yyb7 = r.CheckBreak() + yyb8 = r.CheckBreak() } - if yyb7 { + if yyb8 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -20006,21 +20041,21 @@ func (x *EnvFromSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if r.TryDecodeAsNil() { x.Prefix = "" } else { - yyv8 := &x.Prefix - yym9 := z.DecBinary() - _ = yym9 + yyv9 := &x.Prefix + yym10 := z.DecBinary() + _ = yym10 if false { } else { - *((*string)(yyv8)) = r.DecodeString() + *((*string)(yyv9)) = r.DecodeString() } } - yyj7++ - if yyhl7 { - yyb7 = yyj7 > l + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l } else { - yyb7 = r.CheckBreak() + yyb8 = r.CheckBreak() } - if yyb7 { + if yyb8 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -20035,18 +20070,39 @@ func (x *EnvFromSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.ConfigMapRef.CodecDecodeSelf(d) } - for { - yyj7++ - if yyhl7 { - yyb7 = yyj7 > l - } else { - yyb7 = r.CheckBreak() + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil } - if yyb7 { + } else { + if x.SecretRef == nil { + x.SecretRef = new(SecretEnvSource) + } + x.SecretRef.CodecDecodeSelf(d) + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj7-1, "") + z.DecStructFieldNotFound(yyj8-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -20232,6 +20288,187 @@ func (x *ConfigMapEnvSource) codecDecodeSelfFromArray(l int, d *codec1978.Decode z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } +func (x *SecretEnvSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [1]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Name != "" + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(1) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretEnvSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap1234 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray1234 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretEnvSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3 := string(yys3Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + yyv4 := &x.Name + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretEnvSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj6 int + var yyb6 bool + var yyhl6 bool = l >= 0 + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + yyv7 := &x.Name + yym8 := z.DecBinary() + _ = yym8 + if false { + } else { + *((*string)(yyv7)) = r.DecodeString() + } + } + for { + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj6-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + func (x *HTTPHeader) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) @@ -50846,6 +51083,315 @@ func (x *PodExecOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } +func (x *PodPortForwardOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Kind != "" + yyq2[1] = x.APIVersion != "" + yyq2[2] = len(x.Ports) != 0 + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + if x.Ports == nil { + r.EncodeNil() + } else { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + z.F.EncSliceInt32V(x.Ports, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + z.F.EncSliceInt32V(x.Ports, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodPortForwardOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap1234 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray1234 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodPortForwardOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3 := string(yys3Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + yyv4 := &x.Kind + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + yyv6 := &x.APIVersion + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyv6)) = r.DecodeString() + } + } + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv8 := &x.Ports + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + z.F.DecSliceInt32X(yyv8, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodPortForwardOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + yyv11 := &x.Kind + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*string)(yyv11)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + yyv13 := &x.APIVersion + yym14 := z.DecBinary() + _ = yym14 + if false { + } else { + *((*string)(yyv13)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv15 := &x.Ports + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + z.F.DecSliceInt32X(yyv15, false, d) + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj10-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + func (x *PodProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) @@ -62738,7 +63284,7 @@ func (x codecSelfer1234) decSliceEnvFromSource(v *[]EnvFromSource, d *codec1978. yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 24) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 32) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types.go b/staging/src/k8s.io/client-go/pkg/api/v1/types.go index 25c7b41033f..ca252e7a80e 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types.go @@ -1243,6 +1243,9 @@ type EnvFromSource struct { // The ConfigMap to select from // +optional ConfigMapRef *ConfigMapEnvSource `json:"configMapRef,omitempty" protobuf:"bytes,2,opt,name=configMapRef"` + // The Secret to select from + // +optional + SecretRef *SecretEnvSource `json:"secretRef,omitempty" protobuf:"bytes,3,opt,name=secretRef"` } // ConfigMapEnvSource selects a ConfigMap to populate the environment @@ -1255,6 +1258,16 @@ type ConfigMapEnvSource struct { LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` } +// SecretEnvSource selects a Secret to populate the environment +// variables with. +// +// The contents of the target Secret's Data field will represent the +// key-value pairs as environment variables. +type SecretEnvSource struct { + // The Secret to select from. + LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` +} + // HTTPHeader describes a custom header to be used in HTTP probes type HTTPHeader struct { // The header field name @@ -3410,6 +3423,21 @@ type PodExecOptions struct { Command []string `json:"command" protobuf:"bytes,6,rep,name=command"` } +// PodPortForwardOptions is the query options to a Pod's port forward call +// when using WebSockets. +// The `port` query parameter must specify the port or +// ports (comma separated) to forward over. +// Port forwarding over SPDY does not use these options. It requires the port +// to be passed in the `port` header as part of request. +type PodPortForwardOptions struct { + metav1.TypeMeta `json:",inline"` + + // List of ports to forward + // Required when using WebSockets + // +optional + Ports []int32 `json:"ports,omitempty" protobuf:"varint,1,rep,name=ports"` +} + // PodProxyOptions is the query options to a Pod's proxy call. type PodProxyOptions struct { metav1.TypeMeta `json:",inline"` diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go index 36c9ced8c5f..cc1a7071d6d 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go @@ -437,6 +437,7 @@ var map_EnvFromSource = map[string]string{ "": "EnvFromSource represents the source of a set of ConfigMaps", "prefix": "An optional identifer to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.", "configMapRef": "The ConfigMap to select from", + "secretRef": "The Secret to select from", } func (EnvFromSource) SwaggerDoc() map[string]string { @@ -1243,6 +1244,15 @@ func (PodLogOptions) SwaggerDoc() map[string]string { return map_PodLogOptions } +var map_PodPortForwardOptions = map[string]string{ + "": "PodPortForwardOptions is the query options to a Pod's port forward call when using WebSockets. The `port` query parameter must specify the port or ports (comma separated) to forward over. Port forwarding over SPDY does not use these options. It requires the port to be passed in the `port` header as part of request.", + "ports": "List of ports to forward Required when using WebSockets", +} + +func (PodPortForwardOptions) SwaggerDoc() map[string]string { + return map_PodPortForwardOptions +} + var map_PodProxyOptions = map[string]string{ "": "PodProxyOptions is the query options to a Pod's proxy call.", "path": "Path is the URL path to use for the current proxy request to pod.", @@ -1588,6 +1598,14 @@ func (Secret) SwaggerDoc() map[string]string { return map_Secret } +var map_SecretEnvSource = map[string]string{ + "": "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", +} + +func (SecretEnvSource) SwaggerDoc() map[string]string { + return map_SecretEnvSource +} + var map_SecretKeySelector = map[string]string{ "": "SecretKeySelector selects a key of a Secret.", "key": "The key of the secret to select from. Must be a valid secret key.", diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go index aa7aabae2e0..a33820e49c2 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go @@ -251,6 +251,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_api_PodList_To_v1_PodList, Convert_v1_PodLogOptions_To_api_PodLogOptions, Convert_api_PodLogOptions_To_v1_PodLogOptions, + Convert_v1_PodPortForwardOptions_To_api_PodPortForwardOptions, + Convert_api_PodPortForwardOptions_To_v1_PodPortForwardOptions, Convert_v1_PodProxyOptions_To_api_PodProxyOptions, Convert_api_PodProxyOptions_To_v1_PodProxyOptions, Convert_v1_PodSecurityContext_To_api_PodSecurityContext, @@ -309,6 +311,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_api_SELinuxOptions_To_v1_SELinuxOptions, Convert_v1_Secret_To_api_Secret, Convert_api_Secret_To_v1_Secret, + Convert_v1_SecretEnvSource_To_api_SecretEnvSource, + Convert_api_SecretEnvSource_To_v1_SecretEnvSource, Convert_v1_SecretKeySelector_To_api_SecretKeySelector, Convert_api_SecretKeySelector_To_v1_SecretKeySelector, Convert_v1_SecretList_To_api_SecretList, @@ -1205,6 +1209,7 @@ func Convert_api_EndpointsList_To_v1_EndpointsList(in *api.EndpointsList, out *E func autoConvert_v1_EnvFromSource_To_api_EnvFromSource(in *EnvFromSource, out *api.EnvFromSource, s conversion.Scope) error { out.Prefix = in.Prefix out.ConfigMapRef = (*api.ConfigMapEnvSource)(unsafe.Pointer(in.ConfigMapRef)) + out.SecretRef = (*api.SecretEnvSource)(unsafe.Pointer(in.SecretRef)) return nil } @@ -1215,6 +1220,7 @@ func Convert_v1_EnvFromSource_To_api_EnvFromSource(in *EnvFromSource, out *api.E func autoConvert_api_EnvFromSource_To_v1_EnvFromSource(in *api.EnvFromSource, out *EnvFromSource, s conversion.Scope) error { out.Prefix = in.Prefix out.ConfigMapRef = (*ConfigMapEnvSource)(unsafe.Pointer(in.ConfigMapRef)) + out.SecretRef = (*SecretEnvSource)(unsafe.Pointer(in.SecretRef)) return nil } @@ -2974,6 +2980,24 @@ func Convert_api_PodLogOptions_To_v1_PodLogOptions(in *api.PodLogOptions, out *P return autoConvert_api_PodLogOptions_To_v1_PodLogOptions(in, out, s) } +func autoConvert_v1_PodPortForwardOptions_To_api_PodPortForwardOptions(in *PodPortForwardOptions, out *api.PodPortForwardOptions, s conversion.Scope) error { + out.Ports = *(*[]int32)(unsafe.Pointer(&in.Ports)) + return nil +} + +func Convert_v1_PodPortForwardOptions_To_api_PodPortForwardOptions(in *PodPortForwardOptions, out *api.PodPortForwardOptions, s conversion.Scope) error { + return autoConvert_v1_PodPortForwardOptions_To_api_PodPortForwardOptions(in, out, s) +} + +func autoConvert_api_PodPortForwardOptions_To_v1_PodPortForwardOptions(in *api.PodPortForwardOptions, out *PodPortForwardOptions, s conversion.Scope) error { + out.Ports = *(*[]int32)(unsafe.Pointer(&in.Ports)) + return nil +} + +func Convert_api_PodPortForwardOptions_To_v1_PodPortForwardOptions(in *api.PodPortForwardOptions, out *PodPortForwardOptions, s conversion.Scope) error { + return autoConvert_api_PodPortForwardOptions_To_v1_PodPortForwardOptions(in, out, s) +} + func autoConvert_v1_PodProxyOptions_To_api_PodProxyOptions(in *PodProxyOptions, out *api.PodProxyOptions, s conversion.Scope) error { out.Path = in.Path return nil @@ -3760,6 +3784,28 @@ func Convert_api_Secret_To_v1_Secret(in *api.Secret, out *Secret, s conversion.S return autoConvert_api_Secret_To_v1_Secret(in, out, s) } +func autoConvert_v1_SecretEnvSource_To_api_SecretEnvSource(in *SecretEnvSource, out *api.SecretEnvSource, s conversion.Scope) error { + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + return nil +} + +func Convert_v1_SecretEnvSource_To_api_SecretEnvSource(in *SecretEnvSource, out *api.SecretEnvSource, s conversion.Scope) error { + return autoConvert_v1_SecretEnvSource_To_api_SecretEnvSource(in, out, s) +} + +func autoConvert_api_SecretEnvSource_To_v1_SecretEnvSource(in *api.SecretEnvSource, out *SecretEnvSource, s conversion.Scope) error { + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + return nil +} + +func Convert_api_SecretEnvSource_To_v1_SecretEnvSource(in *api.SecretEnvSource, out *SecretEnvSource, s conversion.Scope) error { + return autoConvert_api_SecretEnvSource_To_v1_SecretEnvSource(in, out, s) +} + func autoConvert_v1_SecretKeySelector_To_api_SecretKeySelector(in *SecretKeySelector, out *api.SecretKeySelector, s conversion.Scope) error { if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go index e666f2516f8..f25d325aa20 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go @@ -143,6 +143,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodExecOptions, InType: reflect.TypeOf(&PodExecOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodList, InType: reflect.TypeOf(&PodList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodLogOptions, InType: reflect.TypeOf(&PodLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodPortForwardOptions, InType: reflect.TypeOf(&PodPortForwardOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodProxyOptions, InType: reflect.TypeOf(&PodProxyOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSecurityContext, InType: reflect.TypeOf(&PodSecurityContext{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSignature, InType: reflect.TypeOf(&PodSignature{})}, @@ -172,6 +173,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceRequirements, InType: reflect.TypeOf(&ResourceRequirements{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SELinuxOptions, InType: reflect.TypeOf(&SELinuxOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Secret, InType: reflect.TypeOf(&Secret{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretEnvSource, InType: reflect.TypeOf(&SecretEnvSource{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretKeySelector, InType: reflect.TypeOf(&SecretKeySelector{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretList, InType: reflect.TypeOf(&SecretList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretVolumeSource, InType: reflect.TypeOf(&SecretVolumeSource{})}, @@ -873,6 +875,11 @@ func DeepCopy_v1_EnvFromSource(in interface{}, out interface{}, c *conversion.Cl *out = new(ConfigMapEnvSource) **out = **in } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(SecretEnvSource) + **out = **in + } return nil } } @@ -2173,6 +2180,20 @@ func DeepCopy_v1_PodLogOptions(in interface{}, out interface{}, c *conversion.Cl } } +func DeepCopy_v1_PodPortForwardOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodPortForwardOptions) + out := out.(*PodPortForwardOptions) + *out = *in + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]int32, len(*in)) + copy(*out, *in) + } + return nil + } +} + func DeepCopy_v1_PodProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*PodProxyOptions) @@ -2767,6 +2788,15 @@ func DeepCopy_v1_Secret(in interface{}, out interface{}, c *conversion.Cloner) e } } +func DeepCopy_v1_SecretEnvSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretEnvSource) + out := out.(*SecretEnvSource) + *out = *in + return nil + } +} + func DeepCopy_v1_SecretKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*SecretKeySelector) diff --git a/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go index 59a75f26d55..cd5df234e27 100644 --- a/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go @@ -146,6 +146,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodExecOptions, InType: reflect.TypeOf(&PodExecOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodList, InType: reflect.TypeOf(&PodList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodLogOptions, InType: reflect.TypeOf(&PodLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodPortForwardOptions, InType: reflect.TypeOf(&PodPortForwardOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodProxyOptions, InType: reflect.TypeOf(&PodProxyOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityContext, InType: reflect.TypeOf(&PodSecurityContext{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSignature, InType: reflect.TypeOf(&PodSignature{})}, @@ -175,6 +176,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceRequirements, InType: reflect.TypeOf(&ResourceRequirements{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SELinuxOptions, InType: reflect.TypeOf(&SELinuxOptions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Secret, InType: reflect.TypeOf(&Secret{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretEnvSource, InType: reflect.TypeOf(&SecretEnvSource{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretKeySelector, InType: reflect.TypeOf(&SecretKeySelector{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretList, InType: reflect.TypeOf(&SecretList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretVolumeSource, InType: reflect.TypeOf(&SecretVolumeSource{})}, @@ -901,6 +903,11 @@ func DeepCopy_api_EnvFromSource(in interface{}, out interface{}, c *conversion.C *out = new(ConfigMapEnvSource) **out = **in } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(SecretEnvSource) + **out = **in + } return nil } } @@ -2217,6 +2224,20 @@ func DeepCopy_api_PodLogOptions(in interface{}, out interface{}, c *conversion.C } } +func DeepCopy_api_PodPortForwardOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodPortForwardOptions) + out := out.(*PodPortForwardOptions) + *out = *in + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]int32, len(*in)) + copy(*out, *in) + } + return nil + } +} + func DeepCopy_api_PodProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*PodProxyOptions) @@ -2799,6 +2820,15 @@ func DeepCopy_api_Secret(in interface{}, out interface{}, c *conversion.Cloner) } } +func DeepCopy_api_SecretEnvSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretEnvSource) + out := out.(*SecretEnvSource) + *out = *in + return nil + } +} + func DeepCopy_api_SecretKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*SecretKeySelector) diff --git a/staging/src/k8s.io/client-go/pkg/apis/apps/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/apps/install/install.go index 3a9263d607a..ca50f3ea44f 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/apps/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/apps/install/install.go @@ -19,12 +19,20 @@ limitations under the License. package install import ( - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/apps" "k8s.io/client-go/pkg/apis/apps/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: apps.GroupName, @@ -35,7 +43,7 @@ func init() { announced.VersionToSchemeFunc{ v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/authentication/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/authentication/install/install.go index 6af56b3b11a..7180e05dc41 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/authentication/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/authentication/install/install.go @@ -19,13 +19,21 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/authentication" "k8s.io/client-go/pkg/apis/authentication/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: authentication.GroupName, @@ -37,7 +45,7 @@ func init() { announced.VersionToSchemeFunc{ v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/authorization/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/authorization/install/install.go index 8554cc7e769..be65ff7d204 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/authorization/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/authorization/install/install.go @@ -19,13 +19,21 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/authorization" "k8s.io/client-go/pkg/apis/authorization/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: authorization.GroupName, @@ -37,7 +45,7 @@ func init() { announced.VersionToSchemeFunc{ v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/autoscaling/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/autoscaling/install/install.go index 060aa07747d..9cfbd2a740f 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/autoscaling/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/autoscaling/install/install.go @@ -19,12 +19,20 @@ limitations under the License. package install import ( - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/autoscaling" "k8s.io/client-go/pkg/apis/autoscaling/v1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: autoscaling.GroupName, @@ -35,7 +43,7 @@ func init() { announced.VersionToSchemeFunc{ v1.SchemeGroupVersion.Version: v1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/batch/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/batch/install/install.go index 6d511f6d5e3..d37f31820df 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/batch/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/batch/install/install.go @@ -19,13 +19,21 @@ limitations under the License. package install import ( - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/batch" "k8s.io/client-go/pkg/apis/batch/v1" "k8s.io/client-go/pkg/apis/batch/v2alpha1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: batch.GroupName, @@ -37,7 +45,7 @@ func init() { v1.SchemeGroupVersion.Version: v1.AddToScheme, v2alpha1.SchemeGroupVersion.Version: v2alpha1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/install/install.go index 140f8e8824b..8850e07aa00 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/install/install.go @@ -19,25 +19,33 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/certificates" - "k8s.io/client-go/pkg/apis/certificates/v1alpha1" + "k8s.io/client-go/pkg/apis/certificates/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: certificates.GroupName, - VersionPreferenceOrder: []string{v1alpha1.SchemeGroupVersion.Version}, + VersionPreferenceOrder: []string{v1beta1.SchemeGroupVersion.Version}, ImportPrefix: "k8s.io/client-go/pkg/apis/certificates", RootScopedKinds: sets.NewString("CertificateSigningRequest"), AddInternalObjectsToScheme: certificates.AddToScheme, }, announced.VersionToSchemeFunc{ - v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, + v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go deleted file mode 100644 index 44718349bd8..00000000000 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go +++ /dev/null @@ -1,169 +0,0 @@ -// +build !ignore_autogenerated - -/* -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. -*/ - -// This file was autogenerated by conversion-gen. Do not edit it manually! - -package v1alpha1 - -import ( - conversion "k8s.io/apimachinery/pkg/conversion" - runtime "k8s.io/apimachinery/pkg/runtime" - certificates "k8s.io/client-go/pkg/apis/certificates" - unsafe "unsafe" -) - -func init() { - SchemeBuilder.Register(RegisterConversions) -} - -// RegisterConversions adds conversion functions to the given scheme. -// Public to allow building arbitrary schemes. -func RegisterConversions(scheme *runtime.Scheme) error { - return scheme.AddGeneratedConversionFuncs( - Convert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest, - Convert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest, - Convert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition, - Convert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition, - Convert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList, - Convert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList, - Convert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec, - Convert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec, - Convert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus, - Convert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus, - ) -} - -func autoConvert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in *CertificateSigningRequest, out *certificates.CertificateSigningRequest, s conversion.Scope) error { - out.ObjectMeta = in.ObjectMeta - if err := Convert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(&in.Spec, &out.Spec, s); err != nil { - return err - } - if err := Convert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(&in.Status, &out.Status, s); err != nil { - return err - } - return nil -} - -func Convert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in *CertificateSigningRequest, out *certificates.CertificateSigningRequest, s conversion.Scope) error { - return autoConvert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in, out, s) -} - -func autoConvert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(in *certificates.CertificateSigningRequest, out *CertificateSigningRequest, s conversion.Scope) error { - out.ObjectMeta = in.ObjectMeta - if err := Convert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(&in.Spec, &out.Spec, s); err != nil { - return err - } - if err := Convert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(&in.Status, &out.Status, s); err != nil { - return err - } - return nil -} - -func Convert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(in *certificates.CertificateSigningRequest, out *CertificateSigningRequest, s conversion.Scope) error { - return autoConvert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(in, out, s) -} - -func autoConvert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in *CertificateSigningRequestCondition, out *certificates.CertificateSigningRequestCondition, s conversion.Scope) error { - out.Type = certificates.RequestConditionType(in.Type) - out.Reason = in.Reason - out.Message = in.Message - out.LastUpdateTime = in.LastUpdateTime - return nil -} - -func Convert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in *CertificateSigningRequestCondition, out *certificates.CertificateSigningRequestCondition, s conversion.Scope) error { - return autoConvert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in, out, s) -} - -func autoConvert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(in *certificates.CertificateSigningRequestCondition, out *CertificateSigningRequestCondition, s conversion.Scope) error { - out.Type = RequestConditionType(in.Type) - out.Reason = in.Reason - out.Message = in.Message - out.LastUpdateTime = in.LastUpdateTime - return nil -} - -func Convert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(in *certificates.CertificateSigningRequestCondition, out *CertificateSigningRequestCondition, s conversion.Scope) error { - return autoConvert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(in, out, s) -} - -func autoConvert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in *CertificateSigningRequestList, out *certificates.CertificateSigningRequestList, s conversion.Scope) error { - out.ListMeta = in.ListMeta - out.Items = *(*[]certificates.CertificateSigningRequest)(unsafe.Pointer(&in.Items)) - return nil -} - -func Convert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in *CertificateSigningRequestList, out *certificates.CertificateSigningRequestList, s conversion.Scope) error { - return autoConvert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in, out, s) -} - -func autoConvert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList(in *certificates.CertificateSigningRequestList, out *CertificateSigningRequestList, s conversion.Scope) error { - out.ListMeta = in.ListMeta - out.Items = *(*[]CertificateSigningRequest)(unsafe.Pointer(&in.Items)) - return nil -} - -func Convert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList(in *certificates.CertificateSigningRequestList, out *CertificateSigningRequestList, s conversion.Scope) error { - return autoConvert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList(in, out, s) -} - -func autoConvert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in *CertificateSigningRequestSpec, out *certificates.CertificateSigningRequestSpec, s conversion.Scope) error { - out.Request = *(*[]byte)(unsafe.Pointer(&in.Request)) - out.Usages = *(*[]certificates.KeyUsage)(unsafe.Pointer(&in.Usages)) - out.Username = in.Username - out.UID = in.UID - out.Groups = *(*[]string)(unsafe.Pointer(&in.Groups)) - return nil -} - -func Convert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in *CertificateSigningRequestSpec, out *certificates.CertificateSigningRequestSpec, s conversion.Scope) error { - return autoConvert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in, out, s) -} - -func autoConvert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(in *certificates.CertificateSigningRequestSpec, out *CertificateSigningRequestSpec, s conversion.Scope) error { - out.Request = *(*[]byte)(unsafe.Pointer(&in.Request)) - out.Usages = *(*[]KeyUsage)(unsafe.Pointer(&in.Usages)) - out.Username = in.Username - out.UID = in.UID - out.Groups = *(*[]string)(unsafe.Pointer(&in.Groups)) - return nil -} - -func Convert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(in *certificates.CertificateSigningRequestSpec, out *CertificateSigningRequestSpec, s conversion.Scope) error { - return autoConvert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(in, out, s) -} - -func autoConvert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in *CertificateSigningRequestStatus, out *certificates.CertificateSigningRequestStatus, s conversion.Scope) error { - out.Conditions = *(*[]certificates.CertificateSigningRequestCondition)(unsafe.Pointer(&in.Conditions)) - out.Certificate = *(*[]byte)(unsafe.Pointer(&in.Certificate)) - return nil -} - -func Convert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in *CertificateSigningRequestStatus, out *certificates.CertificateSigningRequestStatus, s conversion.Scope) error { - return autoConvert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in, out, s) -} - -func autoConvert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(in *certificates.CertificateSigningRequestStatus, out *CertificateSigningRequestStatus, s conversion.Scope) error { - out.Conditions = *(*[]CertificateSigningRequestCondition)(unsafe.Pointer(&in.Conditions)) - out.Certificate = *(*[]byte)(unsafe.Pointer(&in.Certificate)) - return nil -} - -func Convert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(in *certificates.CertificateSigningRequestStatus, out *CertificateSigningRequestStatus, s conversion.Scope) error { - return autoConvert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(in, out, s) -} diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/conversion.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/conversion.go similarity index 98% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/conversion.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/conversion.go index df9f7b0ef39..a51b37ae69d 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/conversion.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/conversion.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( "fmt" diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/defaults.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/defaults.go similarity index 98% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/defaults.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/defaults.go index d4bea72072d..cd6a29d339e 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/defaults.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/defaults.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import "k8s.io/apimachinery/pkg/runtime" diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/doc.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/doc.go similarity index 97% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/doc.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/doc.go index 260dc11bdc0..6f257909deb 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/doc.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // +groupName=certificates.k8s.io -package v1alpha1 +package v1beta1 diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.pb.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.pb.go similarity index 86% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.pb.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.pb.go index 8433180eb16..92937f2c4ee 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.pb.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.pb.go @@ -15,14 +15,14 @@ limitations under the License. */ // Code generated by protoc-gen-gogo. -// source: k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto +// source: k8s.io/kubernetes/pkg/apis/certificates/v1beta1/generated.proto // DO NOT EDIT! /* - Package v1alpha1 is a generated protocol buffer package. + Package v1beta1 is a generated protocol buffer package. It is generated from these files: - k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto + k8s.io/kubernetes/pkg/apis/certificates/v1beta1/generated.proto It has these top-level messages: CertificateSigningRequest @@ -31,7 +31,7 @@ limitations under the License. CertificateSigningRequestSpec CertificateSigningRequestStatus */ -package v1alpha1 +package v1beta1 import proto "github.com/gogo/protobuf/proto" import fmt "fmt" @@ -82,11 +82,11 @@ func (*CertificateSigningRequestStatus) Descriptor() ([]byte, []int) { } func init() { - proto.RegisterType((*CertificateSigningRequest)(nil), "k8s.io.client-go.pkg.apis.certificates.v1alpha1.CertificateSigningRequest") - proto.RegisterType((*CertificateSigningRequestCondition)(nil), "k8s.io.client-go.pkg.apis.certificates.v1alpha1.CertificateSigningRequestCondition") - proto.RegisterType((*CertificateSigningRequestList)(nil), "k8s.io.client-go.pkg.apis.certificates.v1alpha1.CertificateSigningRequestList") - proto.RegisterType((*CertificateSigningRequestSpec)(nil), "k8s.io.client-go.pkg.apis.certificates.v1alpha1.CertificateSigningRequestSpec") - proto.RegisterType((*CertificateSigningRequestStatus)(nil), "k8s.io.client-go.pkg.apis.certificates.v1alpha1.CertificateSigningRequestStatus") + proto.RegisterType((*CertificateSigningRequest)(nil), "k8s.io.client-go.pkg.apis.certificates.v1beta1.CertificateSigningRequest") + proto.RegisterType((*CertificateSigningRequestCondition)(nil), "k8s.io.client-go.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition") + proto.RegisterType((*CertificateSigningRequestList)(nil), "k8s.io.client-go.pkg.apis.certificates.v1beta1.CertificateSigningRequestList") + proto.RegisterType((*CertificateSigningRequestSpec)(nil), "k8s.io.client-go.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec") + proto.RegisterType((*CertificateSigningRequestStatus)(nil), "k8s.io.client-go.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus") } func (m *CertificateSigningRequest) Marshal() (data []byte, err error) { size := m.Size() @@ -1328,51 +1328,51 @@ var ( ) var fileDescriptorGenerated = []byte{ - // 729 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x4f, 0x13, 0x4f, - 0x18, 0xee, 0xb6, 0xa5, 0xb4, 0x53, 0x7e, 0xf0, 0xcb, 0xc4, 0x90, 0x4a, 0xc2, 0x96, 0x34, 0x6a, - 0x90, 0xe0, 0x2e, 0x6d, 0x8c, 0xe1, 0x68, 0x16, 0x13, 0x43, 0x80, 0x10, 0x07, 0x7a, 0x31, 0x1e, - 0x9c, 0x6e, 0x5f, 0xb6, 0x43, 0xd9, 0x0f, 0x76, 0x66, 0x49, 0x7a, 0xf3, 0xe8, 0xd1, 0x7f, 0xc0, - 0xff, 0x87, 0x23, 0x47, 0x4f, 0x55, 0xea, 0x91, 0x83, 0x77, 0x4e, 0x66, 0xa6, 0xd3, 0x0f, 0x29, - 0x15, 0x4c, 0xb8, 0x75, 0x9e, 0xf7, 0x79, 0x9f, 0xe7, 0xfd, 0xda, 0xa2, 0xd7, 0xed, 0x4d, 0x6e, - 0xb1, 0xd0, 0x6e, 0x27, 0x0d, 0x88, 0x03, 0x10, 0xc0, 0xed, 0xa8, 0xed, 0xd9, 0x34, 0x62, 0xdc, - 0x76, 0x21, 0x16, 0xec, 0x88, 0xb9, 0x54, 0xa2, 0x67, 0x55, 0x7a, 0x12, 0xb5, 0x68, 0xd5, 0xf6, - 0x20, 0x80, 0x98, 0x0a, 0x68, 0x5a, 0x51, 0x1c, 0x8a, 0x10, 0x6f, 0xf4, 0x15, 0xac, 0x91, 0x82, - 0x15, 0xb5, 0x3d, 0x4b, 0x2a, 0x58, 0xe3, 0x0a, 0xd6, 0x40, 0x61, 0xe9, 0x85, 0xc7, 0x44, 0x2b, - 0x69, 0x58, 0x6e, 0xe8, 0xdb, 0x5e, 0xe8, 0x85, 0xb6, 0x12, 0x6a, 0x24, 0x47, 0xea, 0xa5, 0x1e, - 0xea, 0x57, 0xdf, 0x60, 0xe9, 0xa5, 0x2e, 0x91, 0x46, 0xcc, 0xa7, 0x6e, 0x8b, 0x05, 0x10, 0x77, - 0x46, 0x45, 0xfa, 0x20, 0xa8, 0x7d, 0x36, 0x51, 0xd6, 0x92, 0x3d, 0x2d, 0x2b, 0x4e, 0x02, 0xc1, - 0x7c, 0x98, 0x48, 0x78, 0x75, 0x57, 0x02, 0x77, 0x5b, 0xe0, 0xd3, 0x89, 0xbc, 0xda, 0xd4, 0x09, - 0xda, 0x31, 0xf0, 0x30, 0x89, 0xdd, 0x49, 0xaf, 0xf5, 0xe9, 0x39, 0xb7, 0xb4, 0x52, 0xbd, 0x9d, - 0x9d, 0x08, 0x76, 0x62, 0xb3, 0x40, 0x70, 0x11, 0xdf, 0x4c, 0xa9, 0x5c, 0xa5, 0xd1, 0xe3, 0xad, - 0xd1, 0xf0, 0x0f, 0x98, 0x17, 0xb0, 0xc0, 0x23, 0x70, 0x9a, 0x00, 0x17, 0xf8, 0x23, 0xca, 0xcb, - 0xb1, 0x35, 0xa9, 0xa0, 0x25, 0x63, 0xc5, 0x58, 0x2d, 0xd6, 0x36, 0x2c, 0xbd, 0xc5, 0xf1, 0xee, - 0x47, 0x7b, 0x94, 0x6c, 0xeb, 0xac, 0x6a, 0xed, 0x37, 0x8e, 0xc1, 0x15, 0x7b, 0x20, 0xa8, 0x83, - 0xcf, 0xbb, 0xe5, 0x54, 0xaf, 0x5b, 0x46, 0x23, 0x8c, 0x0c, 0x55, 0xf1, 0x29, 0xca, 0xf2, 0x08, - 0xdc, 0x52, 0x5a, 0xa9, 0xef, 0x5b, 0xff, 0x7a, 0x23, 0xd6, 0xd4, 0xe2, 0x0f, 0x22, 0x70, 0x9d, - 0x39, 0x6d, 0x9e, 0x95, 0x2f, 0xa2, 0xac, 0x70, 0x07, 0xe5, 0xb8, 0xa0, 0x22, 0xe1, 0xa5, 0x8c, - 0x32, 0x7d, 0xf7, 0x90, 0xa6, 0x4a, 0xd8, 0x99, 0xd7, 0xb6, 0xb9, 0xfe, 0x9b, 0x68, 0xc3, 0xca, - 0xd7, 0x34, 0xaa, 0x4c, 0xcd, 0xdd, 0x0a, 0x83, 0x26, 0x13, 0x2c, 0x0c, 0xf0, 0x26, 0xca, 0x8a, - 0x4e, 0x04, 0x6a, 0xe4, 0x05, 0xe7, 0xc9, 0xa0, 0x87, 0xc3, 0x4e, 0x04, 0xd7, 0xdd, 0xf2, 0xa3, - 0x9b, 0x7c, 0x89, 0x13, 0x95, 0x81, 0x9f, 0xa1, 0x5c, 0x0c, 0x94, 0x87, 0x81, 0x1a, 0x68, 0x61, - 0x54, 0x08, 0x51, 0x28, 0xd1, 0x51, 0xfc, 0x1c, 0xcd, 0xfa, 0xc0, 0x39, 0xf5, 0x40, 0x0d, 0xa1, - 0xe0, 0x2c, 0x68, 0xe2, 0xec, 0x5e, 0x1f, 0x26, 0x83, 0x38, 0x3e, 0x46, 0xf3, 0x27, 0x94, 0x8b, - 0x7a, 0xd4, 0xa4, 0x02, 0x0e, 0x99, 0x0f, 0xa5, 0xac, 0x1a, 0xdb, 0xda, 0xfd, 0x2e, 0x41, 0x66, - 0x38, 0x8b, 0x5a, 0x7d, 0x7e, 0xf7, 0x0f, 0x25, 0x72, 0x43, 0xb9, 0xf2, 0xcb, 0x40, 0xcb, 0x53, - 0xe7, 0xb3, 0xcb, 0xb8, 0xc0, 0x1f, 0x26, 0x2e, 0xd2, 0xba, 0x5f, 0x1d, 0x32, 0x5b, 0xdd, 0xe3, - 0xff, 0xba, 0x96, 0xfc, 0x00, 0x19, 0xbb, 0xc6, 0x08, 0xcd, 0x30, 0x01, 0x3e, 0x2f, 0xa5, 0x57, - 0x32, 0xab, 0xc5, 0xda, 0xce, 0x03, 0x5e, 0x86, 0xf3, 0x9f, 0xf6, 0x9d, 0xd9, 0x96, 0x0e, 0xa4, - 0x6f, 0x54, 0xb9, 0xfa, 0x5b, 0xc7, 0xf2, 0x68, 0xf1, 0x53, 0x34, 0x1b, 0xf7, 0x9f, 0xaa, 0xe1, - 0x39, 0xa7, 0x28, 0xd7, 0xa4, 0x19, 0x64, 0x10, 0xc3, 0xeb, 0x28, 0x9f, 0x70, 0x88, 0x03, 0xea, - 0x83, 0xde, 0xfd, 0xb0, 0xd1, 0xba, 0xc6, 0xc9, 0x90, 0x81, 0x97, 0x51, 0x26, 0x61, 0x4d, 0xbd, - 0xfb, 0xa2, 0x26, 0x66, 0xea, 0xdb, 0x6f, 0x88, 0xc4, 0x71, 0x05, 0xe5, 0xbc, 0x38, 0x4c, 0x22, - 0x5e, 0xca, 0xae, 0x64, 0x56, 0x0b, 0x0e, 0x92, 0x27, 0xf4, 0x56, 0x21, 0x44, 0x47, 0x70, 0x0d, - 0xe5, 0xdb, 0xd0, 0xa9, 0xab, 0x1b, 0x9a, 0x51, 0xac, 0x45, 0xc9, 0x52, 0x00, 0xbf, 0xee, 0x96, - 0xf3, 0x3b, 0x3a, 0x4a, 0x86, 0xbc, 0xca, 0x77, 0x03, 0x95, 0xef, 0xf8, 0x76, 0xf0, 0x67, 0x03, - 0x21, 0x77, 0x70, 0xda, 0xbc, 0x64, 0xa8, 0x4d, 0x1c, 0x3e, 0xe0, 0x26, 0x86, 0xdf, 0xcd, 0xe8, - 0xaf, 0x69, 0x08, 0x71, 0x32, 0xe6, 0x8d, 0xab, 0xa8, 0x38, 0xa6, 0xad, 0xc6, 0x3a, 0xe7, 0x2c, - 0xf4, 0xba, 0xe5, 0xe2, 0x98, 0x38, 0x19, 0xe7, 0x38, 0x6b, 0xe7, 0x97, 0x66, 0xea, 0xe2, 0xd2, - 0x4c, 0x7d, 0xbb, 0x34, 0x53, 0x9f, 0x7a, 0xa6, 0x71, 0xde, 0x33, 0x8d, 0x8b, 0x9e, 0x69, 0xfc, - 0xe8, 0x99, 0xc6, 0x97, 0x9f, 0x66, 0xea, 0x7d, 0x7e, 0x50, 0xe1, 0xef, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x5d, 0xda, 0xe2, 0x20, 0x53, 0x07, 0x00, 0x00, + // 731 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x54, 0x4d, 0x4f, 0x13, 0x5b, + 0x18, 0xee, 0xb4, 0xa5, 0x1f, 0xa7, 0x5c, 0xb8, 0x39, 0xb9, 0x21, 0xbd, 0x24, 0x4c, 0x49, 0x73, + 0xaf, 0x01, 0x83, 0x33, 0xb6, 0x31, 0x86, 0x9d, 0xc9, 0x60, 0x62, 0x50, 0x50, 0x73, 0xa0, 0x1b, + 0xe3, 0xc2, 0xd3, 0xe9, 0xcb, 0x70, 0x28, 0xf3, 0xe1, 0x9c, 0x33, 0xc4, 0xee, 0xdc, 0xb9, 0xf5, + 0x0f, 0xf8, 0x7f, 0x58, 0xb2, 0x74, 0xd5, 0x48, 0x5d, 0x19, 0x13, 0x7f, 0x00, 0x2b, 0x73, 0x4e, + 0x4f, 0xdb, 0x91, 0x52, 0xc1, 0x84, 0x5d, 0xcf, 0xf3, 0x3e, 0xef, 0xf3, 0xbc, 0x5f, 0x53, 0xf4, + 0xa8, 0xbb, 0xc9, 0x2d, 0x16, 0xda, 0xdd, 0xa4, 0x0d, 0x71, 0x00, 0x02, 0xb8, 0x1d, 0x75, 0x3d, + 0x9b, 0x46, 0x8c, 0xdb, 0x2e, 0xc4, 0x82, 0x1d, 0x30, 0x97, 0x4a, 0xf4, 0xa4, 0xd1, 0x06, 0x41, + 0x1b, 0xb6, 0x07, 0x01, 0xc4, 0x54, 0x40, 0xc7, 0x8a, 0xe2, 0x50, 0x84, 0xd8, 0x1e, 0x0a, 0x58, + 0x13, 0x01, 0x2b, 0xea, 0x7a, 0x96, 0x14, 0xb0, 0xd2, 0x02, 0x96, 0x16, 0x58, 0xbe, 0xe7, 0x31, + 0x71, 0x98, 0xb4, 0x2d, 0x37, 0xf4, 0x6d, 0x2f, 0xf4, 0x42, 0x5b, 0xe9, 0xb4, 0x93, 0x03, 0xf5, + 0x52, 0x0f, 0xf5, 0x6b, 0xa8, 0xbf, 0xfc, 0x40, 0x17, 0x48, 0x23, 0xe6, 0x53, 0xf7, 0x90, 0x05, + 0x10, 0xf7, 0x26, 0x25, 0xfa, 0x20, 0xa8, 0x7d, 0x32, 0x55, 0xd5, 0xb2, 0x3d, 0x2b, 0x2b, 0x4e, + 0x02, 0xc1, 0x7c, 0x98, 0x4a, 0x78, 0x78, 0x5d, 0x02, 0x77, 0x0f, 0xc1, 0xa7, 0x53, 0x79, 0xcd, + 0x99, 0xf3, 0xb3, 0x63, 0xe0, 0x61, 0x12, 0xbb, 0xd3, 0x5e, 0x1b, 0xb3, 0x73, 0xae, 0x68, 0xa5, + 0x71, 0x35, 0x3b, 0x11, 0xec, 0xd8, 0x66, 0x81, 0xe0, 0x22, 0xbe, 0x9c, 0x52, 0xff, 0x96, 0x45, + 0xff, 0x6e, 0x4d, 0x66, 0xbf, 0xc7, 0xbc, 0x80, 0x05, 0x1e, 0x81, 0xb7, 0x09, 0x70, 0x81, 0xdf, + 0xa0, 0x92, 0x1c, 0x5b, 0x87, 0x0a, 0x5a, 0x35, 0x56, 0x8d, 0xb5, 0x4a, 0xf3, 0xbe, 0xa5, 0x97, + 0x98, 0xee, 0x7e, 0xb2, 0x46, 0xc9, 0xb6, 0x4e, 0x1a, 0xd6, 0x8b, 0xf6, 0x11, 0xb8, 0x62, 0x17, + 0x04, 0x75, 0xf0, 0x69, 0xbf, 0x96, 0x19, 0xf4, 0x6b, 0x68, 0x82, 0x91, 0xb1, 0x2a, 0x8e, 0x50, + 0x9e, 0x47, 0xe0, 0x56, 0xb3, 0x4a, 0xfd, 0xb9, 0xf5, 0x87, 0x27, 0x62, 0xcd, 0xac, 0x7d, 0x2f, + 0x02, 0xd7, 0x99, 0xd7, 0xde, 0x79, 0xf9, 0x22, 0xca, 0x09, 0xbf, 0x43, 0x05, 0x2e, 0xa8, 0x48, + 0x78, 0x35, 0xa7, 0x3c, 0x5f, 0xde, 0xa2, 0xa7, 0xd2, 0x75, 0x16, 0xb4, 0x6b, 0x61, 0xf8, 0x26, + 0xda, 0xaf, 0xfe, 0x29, 0x8b, 0xea, 0x33, 0x73, 0xb7, 0xc2, 0xa0, 0xc3, 0x04, 0x0b, 0x03, 0xbc, + 0x89, 0xf2, 0xa2, 0x17, 0x81, 0x1a, 0x78, 0xd9, 0xf9, 0x6f, 0xd4, 0xc2, 0x7e, 0x2f, 0x82, 0x8b, + 0x7e, 0xed, 0x9f, 0xcb, 0x7c, 0x89, 0x13, 0x95, 0x81, 0xef, 0xa0, 0x42, 0x0c, 0x94, 0x87, 0x81, + 0x1a, 0x67, 0x79, 0x52, 0x08, 0x51, 0x28, 0xd1, 0x51, 0xbc, 0x8e, 0x8a, 0x3e, 0x70, 0x4e, 0x3d, + 0x50, 0x33, 0x28, 0x3b, 0x8b, 0x9a, 0x58, 0xdc, 0x1d, 0xc2, 0x64, 0x14, 0xc7, 0x47, 0x68, 0xe1, + 0x98, 0x72, 0xd1, 0x8a, 0x3a, 0x54, 0xc0, 0x3e, 0xf3, 0xa1, 0x9a, 0x57, 0x53, 0xbb, 0x7b, 0xb3, + 0x3b, 0x90, 0x19, 0xce, 0x92, 0x56, 0x5f, 0xd8, 0xf9, 0x45, 0x89, 0x5c, 0x52, 0xae, 0xff, 0x30, + 0xd0, 0xca, 0xcc, 0xf9, 0xec, 0x30, 0x2e, 0xf0, 0xeb, 0xa9, 0x7b, 0xb4, 0x6e, 0x56, 0x87, 0xcc, + 0x56, 0xd7, 0xf8, 0xb7, 0xae, 0xa5, 0x34, 0x42, 0x52, 0xb7, 0x18, 0xa2, 0x39, 0x26, 0xc0, 0xe7, + 0xd5, 0xec, 0x6a, 0x6e, 0xad, 0xd2, 0x7c, 0x7a, 0x7b, 0x87, 0xe1, 0xfc, 0xa5, 0x6d, 0xe7, 0xb6, + 0xa5, 0x01, 0x19, 0xfa, 0xd4, 0xbf, 0xff, 0xae, 0x61, 0x79, 0xb2, 0xf8, 0x7f, 0x54, 0x8c, 0x87, + 0x4f, 0xd5, 0xef, 0xbc, 0x53, 0x91, 0x5b, 0xd2, 0x0c, 0x32, 0x8a, 0xe1, 0x0d, 0x54, 0x4a, 0x38, + 0xc4, 0x01, 0xf5, 0x41, 0xaf, 0x7e, 0xdc, 0x67, 0x4b, 0xe3, 0x64, 0xcc, 0xc0, 0x2b, 0x28, 0x97, + 0xb0, 0x8e, 0x5e, 0x7d, 0x45, 0x13, 0x73, 0xad, 0xed, 0xc7, 0x44, 0xe2, 0xb8, 0x8e, 0x0a, 0x5e, + 0x1c, 0x26, 0x11, 0xaf, 0xe6, 0x57, 0x73, 0x6b, 0x65, 0x07, 0xc9, 0x0b, 0x7a, 0xa2, 0x10, 0xa2, + 0x23, 0xb8, 0x89, 0x4a, 0x5d, 0xe8, 0xb5, 0xd4, 0x09, 0xcd, 0x29, 0xd6, 0x92, 0x64, 0x29, 0x80, + 0x5f, 0xf4, 0x6b, 0xa5, 0x67, 0x3a, 0x4a, 0xc6, 0xbc, 0x7a, 0xdf, 0x40, 0xb5, 0x6b, 0x3e, 0x1d, + 0xfc, 0xc1, 0x40, 0xc8, 0x1d, 0x5d, 0x36, 0xaf, 0x1a, 0x6a, 0x11, 0x7b, 0xb7, 0xb7, 0x88, 0xf1, + 0x57, 0x33, 0xf9, 0x5b, 0x1a, 0x43, 0x9c, 0xa4, 0xac, 0x71, 0x03, 0x55, 0x52, 0xd2, 0x6a, 0xaa, + 0xf3, 0xce, 0xe2, 0xa0, 0x5f, 0xab, 0xa4, 0xc4, 0x49, 0x9a, 0xe3, 0xac, 0x9f, 0x9e, 0x9b, 0x99, + 0xb3, 0x73, 0x33, 0xf3, 0xf9, 0xdc, 0xcc, 0xbc, 0x1f, 0x98, 0xc6, 0xe9, 0xc0, 0x34, 0xce, 0x06, + 0xa6, 0xf1, 0x65, 0x60, 0x1a, 0x1f, 0xbf, 0x9a, 0x99, 0x57, 0x45, 0x5d, 0xe0, 0xcf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xa8, 0x84, 0xfa, 0xbc, 0x4c, 0x07, 0x00, 0x00, } diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.proto b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.proto similarity index 97% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.proto rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.proto index f8bb067ff43..cb432875f50 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.proto +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.proto @@ -19,7 +19,7 @@ limitations under the License. syntax = 'proto2'; -package k8s.io.kubernetes.pkg.apis.certificates.v1alpha1; +package k8s.io.kubernetes.pkg.apis.certificates.v1beta1; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; @@ -29,7 +29,7 @@ import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". -option go_package = "v1alpha1"; +option go_package = "v1beta1"; // Describes a certificate signing request message CertificateSigningRequest { diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/helpers.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/helpers.go similarity index 98% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/helpers.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/helpers.go index 6c89ed09df7..1375063c102 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/helpers.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/helpers.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( "crypto/x509" diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/register.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/register.go similarity index 98% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/register.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/register.go index 81312ee60bf..c99127b800d 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/register.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/register.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -27,7 +27,7 @@ import ( const GroupName = "certificates.k8s.io" // SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} // Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) schema.GroupKind { diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.generated.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types.generated.go similarity index 99% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.generated.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types.generated.go index a8e21162ca6..b2741033757 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.generated.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types.generated.go @@ -19,7 +19,7 @@ limitations under the License. // THIS FILE IS AUTO-GENERATED BY codecgen. // ************************************************************ -package v1alpha1 +package v1beta1 import ( "errors" diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types.go similarity index 99% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types.go index dda7d20e8c0..bdbb6cbfcfc 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types_swagger_doc_generated.go similarity index 99% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types_swagger_doc_generated.go index 26a9dceba1c..4689209838a 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/types_swagger_doc_generated.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package v1beta1 // This file contains a collection of methods that can be used from go-restful to // generate Swagger API documentation for its models. Please read this PR for more diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.conversion.go new file mode 100644 index 00000000000..d6ad5a61bcb --- /dev/null +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.conversion.go @@ -0,0 +1,169 @@ +// +build !ignore_autogenerated + +/* +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. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package v1beta1 + +import ( + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + certificates "k8s.io/client-go/pkg/apis/certificates" + unsafe "unsafe" +) + +func init() { + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1beta1_CertificateSigningRequest_To_certificates_CertificateSigningRequest, + Convert_certificates_CertificateSigningRequest_To_v1beta1_CertificateSigningRequest, + Convert_v1beta1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition, + Convert_certificates_CertificateSigningRequestCondition_To_v1beta1_CertificateSigningRequestCondition, + Convert_v1beta1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList, + Convert_certificates_CertificateSigningRequestList_To_v1beta1_CertificateSigningRequestList, + Convert_v1beta1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec, + Convert_certificates_CertificateSigningRequestSpec_To_v1beta1_CertificateSigningRequestSpec, + Convert_v1beta1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus, + Convert_certificates_CertificateSigningRequestStatus_To_v1beta1_CertificateSigningRequestStatus, + ) +} + +func autoConvert_v1beta1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in *CertificateSigningRequest, out *certificates.CertificateSigningRequest, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_v1beta1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1beta1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in *CertificateSigningRequest, out *certificates.CertificateSigningRequest, s conversion.Scope) error { + return autoConvert_v1beta1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequest_To_v1beta1_CertificateSigningRequest(in *certificates.CertificateSigningRequest, out *CertificateSigningRequest, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + if err := Convert_certificates_CertificateSigningRequestSpec_To_v1beta1_CertificateSigningRequestSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_certificates_CertificateSigningRequestStatus_To_v1beta1_CertificateSigningRequestStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_certificates_CertificateSigningRequest_To_v1beta1_CertificateSigningRequest(in *certificates.CertificateSigningRequest, out *CertificateSigningRequest, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequest_To_v1beta1_CertificateSigningRequest(in, out, s) +} + +func autoConvert_v1beta1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in *CertificateSigningRequestCondition, out *certificates.CertificateSigningRequestCondition, s conversion.Scope) error { + out.Type = certificates.RequestConditionType(in.Type) + out.Reason = in.Reason + out.Message = in.Message + out.LastUpdateTime = in.LastUpdateTime + return nil +} + +func Convert_v1beta1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in *CertificateSigningRequestCondition, out *certificates.CertificateSigningRequestCondition, s conversion.Scope) error { + return autoConvert_v1beta1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestCondition_To_v1beta1_CertificateSigningRequestCondition(in *certificates.CertificateSigningRequestCondition, out *CertificateSigningRequestCondition, s conversion.Scope) error { + out.Type = RequestConditionType(in.Type) + out.Reason = in.Reason + out.Message = in.Message + out.LastUpdateTime = in.LastUpdateTime + return nil +} + +func Convert_certificates_CertificateSigningRequestCondition_To_v1beta1_CertificateSigningRequestCondition(in *certificates.CertificateSigningRequestCondition, out *CertificateSigningRequestCondition, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestCondition_To_v1beta1_CertificateSigningRequestCondition(in, out, s) +} + +func autoConvert_v1beta1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in *CertificateSigningRequestList, out *certificates.CertificateSigningRequestList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]certificates.CertificateSigningRequest)(unsafe.Pointer(&in.Items)) + return nil +} + +func Convert_v1beta1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in *CertificateSigningRequestList, out *certificates.CertificateSigningRequestList, s conversion.Scope) error { + return autoConvert_v1beta1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestList_To_v1beta1_CertificateSigningRequestList(in *certificates.CertificateSigningRequestList, out *CertificateSigningRequestList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]CertificateSigningRequest)(unsafe.Pointer(&in.Items)) + return nil +} + +func Convert_certificates_CertificateSigningRequestList_To_v1beta1_CertificateSigningRequestList(in *certificates.CertificateSigningRequestList, out *CertificateSigningRequestList, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestList_To_v1beta1_CertificateSigningRequestList(in, out, s) +} + +func autoConvert_v1beta1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in *CertificateSigningRequestSpec, out *certificates.CertificateSigningRequestSpec, s conversion.Scope) error { + out.Request = *(*[]byte)(unsafe.Pointer(&in.Request)) + out.Usages = *(*[]certificates.KeyUsage)(unsafe.Pointer(&in.Usages)) + out.Username = in.Username + out.UID = in.UID + out.Groups = *(*[]string)(unsafe.Pointer(&in.Groups)) + return nil +} + +func Convert_v1beta1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in *CertificateSigningRequestSpec, out *certificates.CertificateSigningRequestSpec, s conversion.Scope) error { + return autoConvert_v1beta1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestSpec_To_v1beta1_CertificateSigningRequestSpec(in *certificates.CertificateSigningRequestSpec, out *CertificateSigningRequestSpec, s conversion.Scope) error { + out.Request = *(*[]byte)(unsafe.Pointer(&in.Request)) + out.Usages = *(*[]KeyUsage)(unsafe.Pointer(&in.Usages)) + out.Username = in.Username + out.UID = in.UID + out.Groups = *(*[]string)(unsafe.Pointer(&in.Groups)) + return nil +} + +func Convert_certificates_CertificateSigningRequestSpec_To_v1beta1_CertificateSigningRequestSpec(in *certificates.CertificateSigningRequestSpec, out *CertificateSigningRequestSpec, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestSpec_To_v1beta1_CertificateSigningRequestSpec(in, out, s) +} + +func autoConvert_v1beta1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in *CertificateSigningRequestStatus, out *certificates.CertificateSigningRequestStatus, s conversion.Scope) error { + out.Conditions = *(*[]certificates.CertificateSigningRequestCondition)(unsafe.Pointer(&in.Conditions)) + out.Certificate = *(*[]byte)(unsafe.Pointer(&in.Certificate)) + return nil +} + +func Convert_v1beta1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in *CertificateSigningRequestStatus, out *certificates.CertificateSigningRequestStatus, s conversion.Scope) error { + return autoConvert_v1beta1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestStatus_To_v1beta1_CertificateSigningRequestStatus(in *certificates.CertificateSigningRequestStatus, out *CertificateSigningRequestStatus, s conversion.Scope) error { + out.Conditions = *(*[]CertificateSigningRequestCondition)(unsafe.Pointer(&in.Conditions)) + out.Certificate = *(*[]byte)(unsafe.Pointer(&in.Certificate)) + return nil +} + +func Convert_certificates_CertificateSigningRequestStatus_To_v1beta1_CertificateSigningRequestStatus(in *certificates.CertificateSigningRequestStatus, out *CertificateSigningRequestStatus, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestStatus_To_v1beta1_CertificateSigningRequestStatus(in, out, s) +} diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.deepcopy.go similarity index 62% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.deepcopy.go index 5f8b4de7213..ea6a5a23f35 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.deepcopy.go @@ -18,7 +18,7 @@ limitations under the License. // This file was autogenerated by deepcopy-gen. Do not edit it manually! -package v1alpha1 +package v1beta1 import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -35,15 +35,15 @@ func init() { // to allow building arbitrary schemes. func RegisterDeepCopies(scheme *runtime.Scheme) error { return scheme.AddGeneratedDeepCopyFuncs( - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequest, InType: reflect.TypeOf(&CertificateSigningRequest{})}, - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestCondition, InType: reflect.TypeOf(&CertificateSigningRequestCondition{})}, - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestList, InType: reflect.TypeOf(&CertificateSigningRequestList{})}, - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestSpec, InType: reflect.TypeOf(&CertificateSigningRequestSpec{})}, - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestStatus, InType: reflect.TypeOf(&CertificateSigningRequestStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CertificateSigningRequest, InType: reflect.TypeOf(&CertificateSigningRequest{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CertificateSigningRequestCondition, InType: reflect.TypeOf(&CertificateSigningRequestCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CertificateSigningRequestList, InType: reflect.TypeOf(&CertificateSigningRequestList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CertificateSigningRequestSpec, InType: reflect.TypeOf(&CertificateSigningRequestSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CertificateSigningRequestStatus, InType: reflect.TypeOf(&CertificateSigningRequestStatus{})}, ) } -func DeepCopy_v1alpha1_CertificateSigningRequest(in interface{}, out interface{}, c *conversion.Cloner) error { +func DeepCopy_v1beta1_CertificateSigningRequest(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*CertificateSigningRequest) out := out.(*CertificateSigningRequest) @@ -53,17 +53,17 @@ func DeepCopy_v1alpha1_CertificateSigningRequest(in interface{}, out interface{} } else { out.ObjectMeta = *newVal.(*v1.ObjectMeta) } - if err := DeepCopy_v1alpha1_CertificateSigningRequestSpec(&in.Spec, &out.Spec, c); err != nil { + if err := DeepCopy_v1beta1_CertificateSigningRequestSpec(&in.Spec, &out.Spec, c); err != nil { return err } - if err := DeepCopy_v1alpha1_CertificateSigningRequestStatus(&in.Status, &out.Status, c); err != nil { + if err := DeepCopy_v1beta1_CertificateSigningRequestStatus(&in.Status, &out.Status, c); err != nil { return err } return nil } } -func DeepCopy_v1alpha1_CertificateSigningRequestCondition(in interface{}, out interface{}, c *conversion.Cloner) error { +func DeepCopy_v1beta1_CertificateSigningRequestCondition(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*CertificateSigningRequestCondition) out := out.(*CertificateSigningRequestCondition) @@ -73,7 +73,7 @@ func DeepCopy_v1alpha1_CertificateSigningRequestCondition(in interface{}, out in } } -func DeepCopy_v1alpha1_CertificateSigningRequestList(in interface{}, out interface{}, c *conversion.Cloner) error { +func DeepCopy_v1beta1_CertificateSigningRequestList(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*CertificateSigningRequestList) out := out.(*CertificateSigningRequestList) @@ -82,7 +82,7 @@ func DeepCopy_v1alpha1_CertificateSigningRequestList(in interface{}, out interfa in, out := &in.Items, &out.Items *out = make([]CertificateSigningRequest, len(*in)) for i := range *in { - if err := DeepCopy_v1alpha1_CertificateSigningRequest(&(*in)[i], &(*out)[i], c); err != nil { + if err := DeepCopy_v1beta1_CertificateSigningRequest(&(*in)[i], &(*out)[i], c); err != nil { return err } } @@ -91,7 +91,7 @@ func DeepCopy_v1alpha1_CertificateSigningRequestList(in interface{}, out interfa } } -func DeepCopy_v1alpha1_CertificateSigningRequestSpec(in interface{}, out interface{}, c *conversion.Cloner) error { +func DeepCopy_v1beta1_CertificateSigningRequestSpec(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*CertificateSigningRequestSpec) out := out.(*CertificateSigningRequestSpec) @@ -117,7 +117,7 @@ func DeepCopy_v1alpha1_CertificateSigningRequestSpec(in interface{}, out interfa } } -func DeepCopy_v1alpha1_CertificateSigningRequestStatus(in interface{}, out interface{}, c *conversion.Cloner) error { +func DeepCopy_v1beta1_CertificateSigningRequestStatus(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*CertificateSigningRequestStatus) out := out.(*CertificateSigningRequestStatus) @@ -126,7 +126,7 @@ func DeepCopy_v1alpha1_CertificateSigningRequestStatus(in interface{}, out inter in, out := &in.Conditions, &out.Conditions *out = make([]CertificateSigningRequestCondition, len(*in)) for i := range *in { - if err := DeepCopy_v1alpha1_CertificateSigningRequestCondition(&(*in)[i], &(*out)[i], c); err != nil { + if err := DeepCopy_v1beta1_CertificateSigningRequestCondition(&(*in)[i], &(*out)[i], c); err != nil { return err } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.defaults.go b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.defaults.go similarity index 98% rename from staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.defaults.go rename to staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.defaults.go index d3403d1d81f..3c5ae03627f 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.defaults.go +++ b/staging/src/k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.defaults.go @@ -18,7 +18,7 @@ limitations under the License. // This file was autogenerated by defaulter-gen. Do not edit it manually! -package v1alpha1 +package v1beta1 import ( runtime "k8s.io/apimachinery/pkg/runtime" diff --git a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/install/install.go index 38e9c02fc2f..3861d6b5b85 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/install/install.go @@ -19,12 +19,20 @@ limitations under the License. package install import ( - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/componentconfig" "k8s.io/client-go/pkg/apis/componentconfig/v1alpha1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: componentconfig.GroupName, @@ -35,7 +43,7 @@ func init() { announced.VersionToSchemeFunc{ v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/types.go b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/types.go index 0a39e0828a7..70cf601bc7a 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/types.go @@ -481,6 +481,9 @@ type KubeletConfiguration struct { // (binaries, etc.) to mount the volume are available on the underlying node. If the check is enabled // and fails the mount operation fails. ExperimentalCheckNodeCapabilitiesBeforeMount bool + // This flag, if set, instructs the kubelet to keep volumes from terminated pods mounted to the node. + // This can be useful for debugging volume related issues. + KeepTerminatedPodVolumes bool } type KubeletAuthorizationMode string diff --git a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/types.go b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/types.go index fac5c0c0048..4b2734c9a2d 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/types.go @@ -521,6 +521,9 @@ type KubeletConfiguration struct { // (binaries, etc.) to mount the volume are available on the underlying node. If the check is enabled // and fails the mount operation fails. ExperimentalCheckNodeCapabilitiesBeforeMount bool `json:"experimentalCheckNodeCapabilitiesBeforeMount,omitempty"` + // This flag, if set, instructs the kubelet to keep volumes from terminated pods mounted to the node. + // This can be useful for debugging volume related issues. + KeepTerminatedPodVolumes bool `json:"keepTerminatedPodVolumes,omitempty"` } type KubeletAuthorizationMode string diff --git a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go index faec669feb1..a413b81caf1 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go +++ b/staging/src/k8s.io/client-go/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go @@ -481,6 +481,7 @@ func autoConvert_v1alpha1_KubeletConfiguration_To_componentconfig_KubeletConfigu out.EnableCRI = in.EnableCRI out.ExperimentalFailSwapOn = in.ExperimentalFailSwapOn out.ExperimentalCheckNodeCapabilitiesBeforeMount = in.ExperimentalCheckNodeCapabilitiesBeforeMount + out.KeepTerminatedPodVolumes = in.KeepTerminatedPodVolumes return nil } @@ -652,6 +653,7 @@ func autoConvert_componentconfig_KubeletConfiguration_To_v1alpha1_KubeletConfigu out.EnableCRI = in.EnableCRI out.ExperimentalFailSwapOn = in.ExperimentalFailSwapOn out.ExperimentalCheckNodeCapabilitiesBeforeMount = in.ExperimentalCheckNodeCapabilitiesBeforeMount + out.KeepTerminatedPodVolumes = in.KeepTerminatedPodVolumes return nil } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/install/install.go index 57c98b4b4fc..1f968e861c6 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/install/install.go @@ -19,13 +19,21 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/extensions" "k8s.io/client-go/pkg/apis/extensions/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: extensions.GroupName, @@ -37,7 +45,7 @@ func init() { announced.VersionToSchemeFunc{ v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/imagepolicy/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/imagepolicy/install/install.go index c1232e0ccfc..67a857a5fc3 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/imagepolicy/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/imagepolicy/install/install.go @@ -19,13 +19,21 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/imagepolicy" "k8s.io/client-go/pkg/apis/imagepolicy/v1alpha1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: imagepolicy.GroupName, @@ -37,7 +45,7 @@ func init() { announced.VersionToSchemeFunc{ v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/kubeadm/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/kubeadm/install/install.go index 88ff7b7f3bc..b8178644833 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/kubeadm/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/kubeadm/install/install.go @@ -17,12 +17,20 @@ limitations under the License. package install import ( - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/kubeadm" "k8s.io/client-go/pkg/apis/kubeadm/v1alpha1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: kubeadm.GroupName, @@ -33,7 +41,7 @@ func init() { announced.VersionToSchemeFunc{ v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/kubeadm/v1alpha1/defaults.go b/staging/src/k8s.io/client-go/pkg/apis/kubeadm/v1alpha1/defaults.go index 2d5c0d27303..23785f3abc7 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/kubeadm/v1alpha1/defaults.go +++ b/staging/src/k8s.io/client-go/pkg/apis/kubeadm/v1alpha1/defaults.go @@ -19,13 +19,15 @@ package v1alpha1 import "k8s.io/apimachinery/pkg/runtime" const ( - DefaultServiceDNSDomain = "cluster.local" - DefaultServicesSubnet = "10.96.0.0/12" - DefaultKubernetesVersion = "stable" - DefaultKubernetesFallbackVersion = "v1.5.0" + DefaultServiceDNSDomain = "cluster.local" + DefaultServicesSubnet = "10.96.0.0/12" + DefaultKubernetesVersion = "stable" + // This is only for clusters without internet, were the latest stable version can't be determined + DefaultKubernetesFallbackVersion = "v1.5.2" DefaultAPIBindPort = 6443 DefaultDiscoveryBindPort = 9898 - DefaultAuthorizationMode = "RBAC" + // TODO: Default this to RBAC when DefaultKubernetesFallbackVersion is v1.6-something + DefaultAuthorizationMode = "AlwaysAllow" ) func addDefaultingFuncs(scheme *runtime.Scheme) error { diff --git a/staging/src/k8s.io/client-go/pkg/apis/policy/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/policy/install/install.go index 674b9043336..6253d5bc295 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/policy/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/policy/install/install.go @@ -19,12 +19,20 @@ limitations under the License. package install import ( - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/policy" "k8s.io/client-go/pkg/apis/policy/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: policy.GroupName, @@ -35,7 +43,7 @@ func init() { announced.VersionToSchemeFunc{ v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/rbac/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/rbac/install/install.go index cb1f1568e72..f92c11e06c1 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/rbac/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/rbac/install/install.go @@ -19,14 +19,22 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/rbac" "k8s.io/client-go/pkg/apis/rbac/v1alpha1" "k8s.io/client-go/pkg/apis/rbac/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: rbac.GroupName, @@ -39,7 +47,7 @@ func init() { v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, v1alpha1.SchemeGroupVersion.Version: v1alpha1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/storage/install/install.go b/staging/src/k8s.io/client-go/pkg/apis/storage/install/install.go index ef28f6edf03..907e3faf3f6 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/storage/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/apis/storage/install/install.go @@ -19,13 +19,21 @@ limitations under the License. package install import ( + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/apimachinery/announced" + "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/apis/storage" "k8s.io/client-go/pkg/apis/storage/v1beta1" ) func init() { + Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) +} + +// Install registers the API group and adds types to a scheme +func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { if err := announced.NewGroupMetaFactory( &announced.GroupMetaFactoryArgs{ GroupName: storage.GroupName, @@ -37,7 +45,7 @@ func init() { announced.VersionToSchemeFunc{ v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, }, - ).Announce().RegisterAndEnable(); err != nil { + ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { panic(err) } } diff --git a/staging/src/k8s.io/client-go/pkg/federation/apis/federation/install/install.go b/staging/src/k8s.io/client-go/pkg/federation/apis/federation/install/install.go index bffc2a62751..2590d2eb8d0 100644 --- a/staging/src/k8s.io/client-go/pkg/federation/apis/federation/install/install.go +++ b/staging/src/k8s.io/client-go/pkg/federation/apis/federation/install/install.go @@ -92,7 +92,7 @@ func newRESTMapper(externalVersions []schema.GroupVersion) meta.RESTMapper { ignoredKinds := sets.NewString() - return api.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped) + return meta.NewDefaultRESTMapperFromScheme(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped, api.Scheme) } // interfacesFor returns the default Codec and ResourceVersioner for a given version diff --git a/staging/src/k8s.io/client-go/pkg/util/httpstream/spdy/roundtripper.go b/staging/src/k8s.io/client-go/pkg/util/httpstream/spdy/roundtripper.go index 9783f526972..dc5ad13c009 100644 --- a/staging/src/k8s.io/client-go/pkg/util/httpstream/spdy/roundtripper.go +++ b/staging/src/k8s.io/client-go/pkg/util/httpstream/spdy/roundtripper.go @@ -31,8 +31,8 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/pkg/api" - "k8s.io/client-go/pkg/third_party/forked/golang/netutil" "k8s.io/client-go/pkg/util/httpstream" + "k8s.io/client-go/third_party/forked/golang/netutil" ) // SpdyRoundTripper knows how to upgrade an HTTP request to one that supports diff --git a/staging/src/k8s.io/client-go/pkg/util/strategicpatch/patch.go b/staging/src/k8s.io/client-go/pkg/util/strategicpatch/patch.go index 1c1319ea446..31b66c3650a 100644 --- a/staging/src/k8s.io/client-go/pkg/util/strategicpatch/patch.go +++ b/staging/src/k8s.io/client-go/pkg/util/strategicpatch/patch.go @@ -23,7 +23,7 @@ import ( "strings" "k8s.io/apimachinery/pkg/util/json" - forkedjson "k8s.io/client-go/pkg/third_party/forked/golang/json" + forkedjson "k8s.io/client-go/third_party/forked/golang/json" "github.com/davecgh/go-spew/spew" "github.com/ghodss/yaml" diff --git a/staging/src/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc_test.go b/staging/src/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc_test.go index 16e11492818..7ef319b277d 100644 --- a/staging/src/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc_test.go +++ b/staging/src/k8s.io/client-go/plugin/pkg/client/auth/oidc/oidc_test.go @@ -30,7 +30,7 @@ import ( "github.com/coreos/go-oidc/key" "github.com/coreos/go-oidc/oauth2" - oidctesting "k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/oidc/testing" + oidctesting "k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing" ) func clearCache() { diff --git a/staging/src/k8s.io/client-go/third_party/forked/golang/json/fields.go b/staging/src/k8s.io/client-go/third_party/forked/golang/json/fields.go new file mode 100644 index 00000000000..1d17270ee46 --- /dev/null +++ b/staging/src/k8s.io/client-go/third_party/forked/golang/json/fields.go @@ -0,0 +1,501 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package json is forked from the Go standard library to enable us to find the +// field of a struct that a given JSON key maps to. +package json + +import ( + "bytes" + "fmt" + "reflect" + "sort" + "strings" + "sync" + "unicode" + "unicode/utf8" +) + +// Finds the patchStrategy and patchMergeKey struct tag fields on a given +// struct field given the struct type and the JSON name of the field. +// TODO: fix the returned errors to be introspectable. +func LookupPatchMetadata(t reflect.Type, jsonField string) (reflect.Type, string, string, error) { + if t.Kind() == reflect.Map { + return t.Elem(), "", "", nil + } + if t.Kind() != reflect.Struct { + return nil, "", "", fmt.Errorf("merging an object in json but data type is not map or struct, instead is: %s", + t.Kind().String()) + } + jf := []byte(jsonField) + // Find the field that the JSON library would use. + var f *field + fields := cachedTypeFields(t) + for i := range fields { + ff := &fields[i] + if bytes.Equal(ff.nameBytes, jf) { + f = ff + break + } + // Do case-insensitive comparison. + if f == nil && ff.equalFold(ff.nameBytes, jf) { + f = ff + } + } + if f != nil { + // Find the reflect.Value of the most preferential struct field. + tjf := t.Field(f.index[0]) + // we must navigate down all the anonymously included structs in the chain + for i := 1; i < len(f.index); i++ { + tjf = tjf.Type.Field(f.index[i]) + } + patchStrategy := tjf.Tag.Get("patchStrategy") + patchMergeKey := tjf.Tag.Get("patchMergeKey") + return tjf.Type, patchStrategy, patchMergeKey, nil + } + return nil, "", "", fmt.Errorf("unable to find api field in struct %s for the json field %q", t.Name(), jsonField) +} + +// A field represents a single field found in a struct. +type field struct { + name string + nameBytes []byte // []byte(name) + equalFold func(s, t []byte) bool // bytes.EqualFold or equivalent + + tag bool + // index is the sequence of indexes from the containing type fields to this field. + // it is a slice because anonymous structs will need multiple navigation steps to correctly + // resolve the proper fields + index []int + typ reflect.Type + omitEmpty bool + quoted bool +} + +func (f field) String() string { + return fmt.Sprintf("{name: %s, type: %v, tag: %v, index: %v, omitEmpty: %v, quoted: %v}", f.name, f.typ, f.tag, f.index, f.omitEmpty, f.quoted) +} + +func fillField(f field) field { + f.nameBytes = []byte(f.name) + f.equalFold = foldFunc(f.nameBytes) + return f +} + +// byName sorts field by name, breaking ties with depth, +// then breaking ties with "name came from json tag", then +// breaking ties with index sequence. +type byName []field + +func (x byName) Len() int { return len(x) } + +func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } + +func (x byName) Less(i, j int) bool { + if x[i].name != x[j].name { + return x[i].name < x[j].name + } + if len(x[i].index) != len(x[j].index) { + return len(x[i].index) < len(x[j].index) + } + if x[i].tag != x[j].tag { + return x[i].tag + } + return byIndex(x).Less(i, j) +} + +// byIndex sorts field by index sequence. +type byIndex []field + +func (x byIndex) Len() int { return len(x) } + +func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } + +func (x byIndex) Less(i, j int) bool { + for k, xik := range x[i].index { + if k >= len(x[j].index) { + return false + } + if xik != x[j].index[k] { + return xik < x[j].index[k] + } + } + return len(x[i].index) < len(x[j].index) +} + +// typeFields returns a list of fields that JSON should recognize for the given type. +// The algorithm is breadth-first search over the set of structs to include - the top struct +// and then any reachable anonymous structs. +func typeFields(t reflect.Type) []field { + // Anonymous fields to explore at the current level and the next. + current := []field{} + next := []field{{typ: t}} + + // Count of queued names for current level and the next. + count := map[reflect.Type]int{} + nextCount := map[reflect.Type]int{} + + // Types already visited at an earlier level. + visited := map[reflect.Type]bool{} + + // Fields found. + var fields []field + + for len(next) > 0 { + current, next = next, current[:0] + count, nextCount = nextCount, map[reflect.Type]int{} + + for _, f := range current { + if visited[f.typ] { + continue + } + visited[f.typ] = true + + // Scan f.typ for fields to include. + for i := 0; i < f.typ.NumField(); i++ { + sf := f.typ.Field(i) + if sf.PkgPath != "" { // unexported + continue + } + tag := sf.Tag.Get("json") + if tag == "-" { + continue + } + name, opts := parseTag(tag) + if !isValidTag(name) { + name = "" + } + index := make([]int, len(f.index)+1) + copy(index, f.index) + index[len(f.index)] = i + + ft := sf.Type + if ft.Name() == "" && ft.Kind() == reflect.Ptr { + // Follow pointer. + ft = ft.Elem() + } + + // Record found field and index sequence. + if name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct { + tagged := name != "" + if name == "" { + name = sf.Name + } + fields = append(fields, fillField(field{ + name: name, + tag: tagged, + index: index, + typ: ft, + omitEmpty: opts.Contains("omitempty"), + quoted: opts.Contains("string"), + })) + if count[f.typ] > 1 { + // If there were multiple instances, add a second, + // so that the annihilation code will see a duplicate. + // It only cares about the distinction between 1 or 2, + // so don't bother generating any more copies. + fields = append(fields, fields[len(fields)-1]) + } + continue + } + + // Record new anonymous struct to explore in next round. + nextCount[ft]++ + if nextCount[ft] == 1 { + next = append(next, fillField(field{name: ft.Name(), index: index, typ: ft})) + } + } + } + } + + sort.Sort(byName(fields)) + + // Delete all fields that are hidden by the Go rules for embedded fields, + // except that fields with JSON tags are promoted. + + // The fields are sorted in primary order of name, secondary order + // of field index length. Loop over names; for each name, delete + // hidden fields by choosing the one dominant field that survives. + out := fields[:0] + for advance, i := 0, 0; i < len(fields); i += advance { + // One iteration per name. + // Find the sequence of fields with the name of this first field. + fi := fields[i] + name := fi.name + for advance = 1; i+advance < len(fields); advance++ { + fj := fields[i+advance] + if fj.name != name { + break + } + } + if advance == 1 { // Only one field with this name + out = append(out, fi) + continue + } + dominant, ok := dominantField(fields[i : i+advance]) + if ok { + out = append(out, dominant) + } + } + + fields = out + sort.Sort(byIndex(fields)) + + return fields +} + +// dominantField looks through the fields, all of which are known to +// have the same name, to find the single field that dominates the +// others using Go's embedding rules, modified by the presence of +// JSON tags. If there are multiple top-level fields, the boolean +// will be false: This condition is an error in Go and we skip all +// the fields. +func dominantField(fields []field) (field, bool) { + // The fields are sorted in increasing index-length order. The winner + // must therefore be one with the shortest index length. Drop all + // longer entries, which is easy: just truncate the slice. + length := len(fields[0].index) + tagged := -1 // Index of first tagged field. + for i, f := range fields { + if len(f.index) > length { + fields = fields[:i] + break + } + if f.tag { + if tagged >= 0 { + // Multiple tagged fields at the same level: conflict. + // Return no field. + return field{}, false + } + tagged = i + } + } + if tagged >= 0 { + return fields[tagged], true + } + // All remaining fields have the same length. If there's more than one, + // we have a conflict (two fields named "X" at the same level) and we + // return no field. + if len(fields) > 1 { + return field{}, false + } + return fields[0], true +} + +var fieldCache struct { + sync.RWMutex + m map[reflect.Type][]field +} + +// cachedTypeFields is like typeFields but uses a cache to avoid repeated work. +func cachedTypeFields(t reflect.Type) []field { + fieldCache.RLock() + f := fieldCache.m[t] + fieldCache.RUnlock() + if f != nil { + return f + } + + // Compute fields without lock. + // Might duplicate effort but won't hold other computations back. + f = typeFields(t) + if f == nil { + f = []field{} + } + + fieldCache.Lock() + if fieldCache.m == nil { + fieldCache.m = map[reflect.Type][]field{} + } + fieldCache.m[t] = f + fieldCache.Unlock() + return f +} + +func isValidTag(s string) bool { + if s == "" { + return false + } + for _, c := range s { + switch { + case strings.ContainsRune("!#$%&()*+-./:<=>?@[]^_{|}~ ", c): + // Backslash and quote chars are reserved, but + // otherwise any punctuation chars are allowed + // in a tag name. + default: + if !unicode.IsLetter(c) && !unicode.IsDigit(c) { + return false + } + } + } + return true +} + +const ( + caseMask = ^byte(0x20) // Mask to ignore case in ASCII. + kelvin = '\u212a' + smallLongEss = '\u017f' +) + +// foldFunc returns one of four different case folding equivalence +// functions, from most general (and slow) to fastest: +// +// 1) bytes.EqualFold, if the key s contains any non-ASCII UTF-8 +// 2) equalFoldRight, if s contains special folding ASCII ('k', 'K', 's', 'S') +// 3) asciiEqualFold, no special, but includes non-letters (including _) +// 4) simpleLetterEqualFold, no specials, no non-letters. +// +// The letters S and K are special because they map to 3 runes, not just 2: +// * S maps to s and to U+017F 'ſ' Latin small letter long s +// * k maps to K and to U+212A 'K' Kelvin sign +// See http://play.golang.org/p/tTxjOc0OGo +// +// The returned function is specialized for matching against s and +// should only be given s. It's not curried for performance reasons. +func foldFunc(s []byte) func(s, t []byte) bool { + nonLetter := false + special := false // special letter + for _, b := range s { + if b >= utf8.RuneSelf { + return bytes.EqualFold + } + upper := b & caseMask + if upper < 'A' || upper > 'Z' { + nonLetter = true + } else if upper == 'K' || upper == 'S' { + // See above for why these letters are special. + special = true + } + } + if special { + return equalFoldRight + } + if nonLetter { + return asciiEqualFold + } + return simpleLetterEqualFold +} + +// equalFoldRight is a specialization of bytes.EqualFold when s is +// known to be all ASCII (including punctuation), but contains an 's', +// 'S', 'k', or 'K', requiring a Unicode fold on the bytes in t. +// See comments on foldFunc. +func equalFoldRight(s, t []byte) bool { + for _, sb := range s { + if len(t) == 0 { + return false + } + tb := t[0] + if tb < utf8.RuneSelf { + if sb != tb { + sbUpper := sb & caseMask + if 'A' <= sbUpper && sbUpper <= 'Z' { + if sbUpper != tb&caseMask { + return false + } + } else { + return false + } + } + t = t[1:] + continue + } + // sb is ASCII and t is not. t must be either kelvin + // sign or long s; sb must be s, S, k, or K. + tr, size := utf8.DecodeRune(t) + switch sb { + case 's', 'S': + if tr != smallLongEss { + return false + } + case 'k', 'K': + if tr != kelvin { + return false + } + default: + return false + } + t = t[size:] + + } + if len(t) > 0 { + return false + } + return true +} + +// asciiEqualFold is a specialization of bytes.EqualFold for use when +// s is all ASCII (but may contain non-letters) and contains no +// special-folding letters. +// See comments on foldFunc. +func asciiEqualFold(s, t []byte) bool { + if len(s) != len(t) { + return false + } + for i, sb := range s { + tb := t[i] + if sb == tb { + continue + } + if ('a' <= sb && sb <= 'z') || ('A' <= sb && sb <= 'Z') { + if sb&caseMask != tb&caseMask { + return false + } + } else { + return false + } + } + return true +} + +// simpleLetterEqualFold is a specialization of bytes.EqualFold for +// use when s is all ASCII letters (no underscores, etc) and also +// doesn't contain 'k', 'K', 's', or 'S'. +// See comments on foldFunc. +func simpleLetterEqualFold(s, t []byte) bool { + if len(s) != len(t) { + return false + } + for i, b := range s { + if b&caseMask != t[i]&caseMask { + return false + } + } + return true +} + +// tagOptions is the string following a comma in a struct field's "json" +// tag, or the empty string. It does not include the leading comma. +type tagOptions string + +// parseTag splits a struct field's json tag into its name and +// comma-separated options. +func parseTag(tag string) (string, tagOptions) { + if idx := strings.Index(tag, ","); idx != -1 { + return tag[:idx], tagOptions(tag[idx+1:]) + } + return tag, tagOptions("") +} + +// Contains reports whether a comma-separated list of options +// contains a particular substr flag. substr must be surrounded by a +// string boundary or commas. +func (o tagOptions) Contains(optionName string) bool { + if len(o) == 0 { + return false + } + s := string(o) + for s != "" { + var next string + i := strings.Index(s, ",") + if i >= 0 { + s, next = s[:i], s[i+1:] + } + if s == optionName { + return true + } + s = next + } + return false +} diff --git a/staging/src/k8s.io/client-go/third_party/forked/golang/netutil/addr.go b/staging/src/k8s.io/client-go/third_party/forked/golang/netutil/addr.go new file mode 100644 index 00000000000..c70f431c272 --- /dev/null +++ b/staging/src/k8s.io/client-go/third_party/forked/golang/netutil/addr.go @@ -0,0 +1,27 @@ +package netutil + +import ( + "net/url" + "strings" +) + +// FROM: http://golang.org/src/net/http/client.go +// Given a string of the form "host", "host:port", or "[ipv6::address]:port", +// return true if the string includes a port. +func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") } + +// FROM: http://golang.org/src/net/http/transport.go +var portMap = map[string]string{ + "http": "80", + "https": "443", +} + +// FROM: http://golang.org/src/net/http/transport.go +// canonicalAddr returns url.Host but always with a ":port" suffix +func CanonicalAddr(url *url.URL) string { + addr := url.Host + if !hasPort(addr) { + return addr + ":" + portMap[url.Scheme] + } + return addr +} diff --git a/staging/src/k8s.io/client-go/tools/cache/listers.go b/staging/src/k8s.io/client-go/tools/cache/listers.go index 006d3ec47ce..482480ed2ad 100644 --- a/staging/src/k8s.io/client-go/tools/cache/listers.go +++ b/staging/src/k8s.io/client-go/tools/cache/listers.go @@ -17,9 +17,8 @@ limitations under the License. package cache import ( - "fmt" - "github.com/golang/glog" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -27,12 +26,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/pkg/api/v1" - apps "k8s.io/client-go/pkg/apis/apps/v1beta1" - certificates "k8s.io/client-go/pkg/apis/certificates/v1alpha1" - extensions "k8s.io/client-go/pkg/apis/extensions/v1beta1" - policy "k8s.io/client-go/pkg/apis/policy/v1beta1" - storageinternal "k8s.io/client-go/pkg/apis/storage" - storage "k8s.io/client-go/pkg/apis/storage/v1beta1" ) // AppendFunc is used to add a matching item to whatever list the caller is using @@ -166,315 +159,3 @@ func (s *genericNamespaceLister) Get(name string) (runtime.Object, error) { } return obj.(runtime.Object), nil } - -// TODO: generate these classes and methods for all resources of interest using -// a script. Can use "go generate" once 1.4 is supported by all users. - -// NodeConditionPredicate is a function that indicates whether the given node's conditions meet -// some set of criteria defined by the function. -type NodeConditionPredicate func(node *v1.Node) bool - -// StoreToNodeLister makes a Store have the List method of the client.NodeInterface -// The Store must contain (only) Nodes. -type StoreToNodeLister struct { - Store -} - -func (s *StoreToNodeLister) List() (machines v1.NodeList, err error) { - for _, m := range s.Store.List() { - machines.Items = append(machines.Items, *(m.(*v1.Node))) - } - return machines, nil -} - -// NodeCondition returns a storeToNodeConditionLister -func (s *StoreToNodeLister) NodeCondition(predicate NodeConditionPredicate) storeToNodeConditionLister { - // TODO: Move this filtering server side. Currently our selectors don't facilitate searching through a list so we - // have the reflector filter out the Unschedulable field and sift through node conditions in the lister. - return storeToNodeConditionLister{s.Store, predicate} -} - -// storeToNodeConditionLister filters and returns nodes matching the given type and status from the store. -type storeToNodeConditionLister struct { - store Store - predicate NodeConditionPredicate -} - -// List returns a list of nodes that match the conditions defined by the predicate functions in the storeToNodeConditionLister. -func (s storeToNodeConditionLister) List() (nodes []*v1.Node, err error) { - for _, m := range s.store.List() { - node := m.(*v1.Node) - if s.predicate(node) { - nodes = append(nodes, node) - } else { - glog.V(5).Infof("Node %s matches none of the conditions", node.Name) - } - } - return -} - -// StoreToDaemonSetLister gives a store List and Exists methods. The store must contain only DaemonSets. -type StoreToDaemonSetLister struct { - Store -} - -// Exists checks if the given daemon set exists in the store. -func (s *StoreToDaemonSetLister) Exists(ds *extensions.DaemonSet) (bool, error) { - _, exists, err := s.Store.Get(ds) - if err != nil { - return false, err - } - return exists, nil -} - -// List lists all daemon sets in the store. -// TODO: converge on the interface in pkg/client -func (s *StoreToDaemonSetLister) List() (dss extensions.DaemonSetList, err error) { - for _, c := range s.Store.List() { - dss.Items = append(dss.Items, *(c.(*extensions.DaemonSet))) - } - return dss, nil -} - -// GetPodDaemonSets returns a list of daemon sets managing a pod. -// Returns an error if and only if no matching daemon sets are found. -func (s *StoreToDaemonSetLister) GetPodDaemonSets(pod *v1.Pod) (daemonSets []extensions.DaemonSet, err error) { - var selector labels.Selector - var daemonSet extensions.DaemonSet - - if len(pod.Labels) == 0 { - err = fmt.Errorf("no daemon sets found for pod %v because it has no labels", pod.Name) - return - } - - for _, m := range s.Store.List() { - daemonSet = *m.(*extensions.DaemonSet) - if daemonSet.Namespace != pod.Namespace { - continue - } - selector, err = metav1.LabelSelectorAsSelector(daemonSet.Spec.Selector) - if err != nil { - // this should not happen if the DaemonSet passed validation - return nil, err - } - - // If a daemonSet with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { - continue - } - daemonSets = append(daemonSets, daemonSet) - } - if len(daemonSets) == 0 { - err = fmt.Errorf("could not find daemon set for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) - } - return -} - -// StoreToEndpointsLister makes a Store that lists endpoints. -type StoreToEndpointsLister struct { - Store -} - -// List lists all endpoints in the store. -func (s *StoreToEndpointsLister) List() (services v1.EndpointsList, err error) { - for _, m := range s.Store.List() { - services.Items = append(services.Items, *(m.(*v1.Endpoints))) - } - return services, nil -} - -// GetServiceEndpoints returns the endpoints of a service, matched on service name. -func (s *StoreToEndpointsLister) GetServiceEndpoints(svc *v1.Service) (ep v1.Endpoints, err error) { - for _, m := range s.Store.List() { - ep = *m.(*v1.Endpoints) - if svc.Name == ep.Name && svc.Namespace == ep.Namespace { - return ep, nil - } - } - err = fmt.Errorf("could not find endpoints for service: %v", svc.Name) - return -} - -// Typed wrapper around a store of PersistentVolumes -type StoreToPVFetcher struct { - Store -} - -// GetPersistentVolumeInfo returns cached data for the PersistentVolume 'id'. -func (s *StoreToPVFetcher) GetPersistentVolumeInfo(id string) (*v1.PersistentVolume, error) { - o, exists, err := s.Get(&v1.PersistentVolume{ObjectMeta: metav1.ObjectMeta{Name: id}}) - - if err != nil { - return nil, fmt.Errorf("error retrieving PersistentVolume '%v' from cache: %v", id, err) - } - - if !exists { - return nil, fmt.Errorf("PersistentVolume '%v' not found", id) - } - - return o.(*v1.PersistentVolume), nil -} - -// StoreToStatefulSetLister gives a store List and Exists methods. The store must contain only StatefulSets. -type StoreToStatefulSetLister struct { - Store -} - -// Exists checks if the given StatefulSet exists in the store. -func (s *StoreToStatefulSetLister) Exists(ps *apps.StatefulSet) (bool, error) { - _, exists, err := s.Store.Get(ps) - if err != nil { - return false, err - } - return exists, nil -} - -// List lists all StatefulSets in the store. -func (s *StoreToStatefulSetLister) List() (psList []apps.StatefulSet, err error) { - for _, ps := range s.Store.List() { - psList = append(psList, *(ps.(*apps.StatefulSet))) - } - return psList, nil -} - -type storeStatefulSetsNamespacer struct { - store Store - namespace string -} - -func (s *StoreToStatefulSetLister) StatefulSets(namespace string) storeStatefulSetsNamespacer { - return storeStatefulSetsNamespacer{s.Store, namespace} -} - -// GetPodStatefulSets returns a list of StatefulSets managing a pod. Returns an error only if no matching StatefulSets are found. -func (s *StoreToStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (psList []apps.StatefulSet, err error) { - var selector labels.Selector - var ps apps.StatefulSet - - if len(pod.Labels) == 0 { - err = fmt.Errorf("no StatefulSets found for pod %v because it has no labels", pod.Name) - return - } - - for _, m := range s.Store.List() { - ps = *m.(*apps.StatefulSet) - if ps.Namespace != pod.Namespace { - continue - } - selector, err = metav1.LabelSelectorAsSelector(ps.Spec.Selector) - if err != nil { - err = fmt.Errorf("invalid selector: %v", err) - return - } - - // If a StatefulSet with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { - continue - } - psList = append(psList, ps) - } - if len(psList) == 0 { - err = fmt.Errorf("could not find StatefulSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) - } - return -} - -// StoreToCertificateRequestLister gives a store List and Exists methods. The store must contain only CertificateRequests. -type StoreToCertificateRequestLister struct { - Store -} - -// Exists checks if the given csr exists in the store. -func (s *StoreToCertificateRequestLister) Exists(csr *certificates.CertificateSigningRequest) (bool, error) { - _, exists, err := s.Store.Get(csr) - if err != nil { - return false, err - } - return exists, nil -} - -// StoreToCertificateRequestLister lists all csrs in the store. -func (s *StoreToCertificateRequestLister) List() (csrs certificates.CertificateSigningRequestList, err error) { - for _, c := range s.Store.List() { - csrs.Items = append(csrs.Items, *(c.(*certificates.CertificateSigningRequest))) - } - return csrs, nil -} - -type StoreToPodDisruptionBudgetLister struct { - Store -} - -// GetPodPodDisruptionBudgets returns a list of PodDisruptionBudgets matching a pod. Returns an error only if no matching PodDisruptionBudgets are found. -func (s *StoreToPodDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *v1.Pod) (pdbList []policy.PodDisruptionBudget, err error) { - var selector labels.Selector - - if len(pod.Labels) == 0 { - err = fmt.Errorf("no PodDisruptionBudgets found for pod %v because it has no labels", pod.Name) - return - } - - for _, m := range s.Store.List() { - pdb, ok := m.(*policy.PodDisruptionBudget) - if !ok { - glog.Errorf("Unexpected: %v is not a PodDisruptionBudget", m) - continue - } - if pdb.Namespace != pod.Namespace { - continue - } - selector, err = metav1.LabelSelectorAsSelector(pdb.Spec.Selector) - if err != nil { - glog.Warningf("invalid selector: %v", err) - // TODO(mml): add an event to the PDB - continue - } - - // If a PDB with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { - continue - } - pdbList = append(pdbList, *pdb) - } - if len(pdbList) == 0 { - err = fmt.Errorf("could not find PodDisruptionBudget for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) - } - return -} - -// StorageClassLister knows how to list storage classes -type StorageClassLister interface { - List(selector labels.Selector) (ret []*storage.StorageClass, err error) - Get(name string) (*storage.StorageClass, error) -} - -// storageClassLister implements StorageClassLister -type storageClassLister struct { - indexer Indexer -} - -// NewStorageClassLister returns a new lister. -func NewStorageClassLister(indexer Indexer) StorageClassLister { - return &storageClassLister{indexer: indexer} -} - -// List returns a list of storage classes -func (s *storageClassLister) List(selector labels.Selector) (ret []*storage.StorageClass, err error) { - err = ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*storage.StorageClass)) - }) - return ret, err -} - -// Get returns storage class with name 'name'. -func (s *storageClassLister) Get(name string) (*storage.StorageClass, error) { - key := &storage.StorageClass{ObjectMeta: metav1.ObjectMeta{Name: name}} - obj, exists, err := s.indexer.Get(key) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(storageinternal.Resource("storageclass"), name) - } - return obj.(*storage.StorageClass), nil -} diff --git a/staging/src/k8s.io/client-go/tools/cache/listers_core.go b/staging/src/k8s.io/client-go/tools/cache/listers_core.go deleted file mode 100644 index ba736ce9af7..00000000000 --- a/staging/src/k8s.io/client-go/tools/cache/listers_core.go +++ /dev/null @@ -1,350 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package cache - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/pkg/api" - "k8s.io/client-go/pkg/api/v1" -) - -// TODO: generate these classes and methods for all resources of interest using -// a script. Can use "go generate" once 1.4 is supported by all users. - -// Lister makes an Index have the List method. The Stores must contain only the expected type -// Example: -// s := cache.NewStore() -// lw := cache.ListWatch{Client: c, FieldSelector: sel, Resource: "pods"} -// r := cache.NewReflector(lw, &api.Pod{}, s).Run() -// l := StoreToPodLister{s} -// l.List() - -// StoreToPodLister helps list pods -type StoreToPodLister struct { - Indexer Indexer -} - -func (s *StoreToPodLister) List(selector labels.Selector) (ret []*v1.Pod, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.Pod)) - }) - return ret, err -} - -func (s *StoreToPodLister) Pods(namespace string) storePodsNamespacer { - return storePodsNamespacer{Indexer: s.Indexer, namespace: namespace} -} - -type storePodsNamespacer struct { - Indexer Indexer - namespace string -} - -func (s storePodsNamespacer) List(selector labels.Selector) (ret []*v1.Pod, err error) { - err = ListAllByNamespace(s.Indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.Pod)) - }) - return ret, err -} - -func (s storePodsNamespacer) Get(name string) (*v1.Pod, error) { - obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("pod"), name) - } - return obj.(*v1.Pod), nil -} - -// StoreToServiceLister helps list services -type StoreToServiceLister struct { - Indexer Indexer -} - -func (s *StoreToServiceLister) List(selector labels.Selector) (ret []*v1.Service, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.Service)) - }) - return ret, err -} - -func (s *StoreToServiceLister) Services(namespace string) storeServicesNamespacer { - return storeServicesNamespacer{s.Indexer, namespace} -} - -type storeServicesNamespacer struct { - indexer Indexer - namespace string -} - -func (s storeServicesNamespacer) List(selector labels.Selector) (ret []*v1.Service, err error) { - err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.Service)) - }) - return ret, err -} - -func (s storeServicesNamespacer) Get(name string) (*v1.Service, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("service"), name) - } - return obj.(*v1.Service), nil -} - -// TODO: Move this back to scheduler as a helper function that takes a Store, -// rather than a method of StoreToServiceLister. -func (s *StoreToServiceLister) GetPodServices(pod *v1.Pod) (services []*v1.Service, err error) { - allServices, err := s.Services(pod.Namespace).List(labels.Everything()) - if err != nil { - return nil, err - } - - for i := range allServices { - service := allServices[i] - if service.Spec.Selector == nil { - // services with nil selectors match nothing, not everything. - continue - } - selector := labels.Set(service.Spec.Selector).AsSelectorPreValidated() - if selector.Matches(labels.Set(pod.Labels)) { - services = append(services, service) - } - } - - return services, nil -} - -// StoreToReplicationControllerLister helps list rcs -type StoreToReplicationControllerLister struct { - Indexer Indexer -} - -func (s *StoreToReplicationControllerLister) List(selector labels.Selector) (ret []*v1.ReplicationController, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ReplicationController)) - }) - return ret, err -} - -func (s *StoreToReplicationControllerLister) ReplicationControllers(namespace string) storeReplicationControllersNamespacer { - return storeReplicationControllersNamespacer{s.Indexer, namespace} -} - -type storeReplicationControllersNamespacer struct { - indexer Indexer - namespace string -} - -func (s storeReplicationControllersNamespacer) List(selector labels.Selector) (ret []*v1.ReplicationController, err error) { - err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ReplicationController)) - }) - return ret, err -} - -func (s storeReplicationControllersNamespacer) Get(name string) (*v1.ReplicationController, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("replicationcontroller"), name) - } - return obj.(*v1.ReplicationController), nil -} - -// GetPodControllers returns a list of replication controllers managing a pod. Returns an error only if no matching controllers are found. -func (s *StoreToReplicationControllerLister) GetPodControllers(pod *v1.Pod) (controllers []*v1.ReplicationController, err error) { - if len(pod.Labels) == 0 { - err = fmt.Errorf("no controllers found for pod %v because it has no labels", pod.Name) - return - } - - key := &v1.ReplicationController{ObjectMeta: metav1.ObjectMeta{Namespace: pod.Namespace}} - items, err := s.Indexer.Index(NamespaceIndex, key) - if err != nil { - return - } - - for _, m := range items { - rc := m.(*v1.ReplicationController) - selector := labels.Set(rc.Spec.Selector).AsSelectorPreValidated() - - // If an rc with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { - continue - } - controllers = append(controllers, rc) - } - if len(controllers) == 0 { - err = fmt.Errorf("could not find controller for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) - } - return -} - -// StoreToServiceAccountLister helps list service accounts -type StoreToServiceAccountLister struct { - Indexer Indexer -} - -func (s *StoreToServiceAccountLister) List(selector labels.Selector) (ret []*v1.ServiceAccount, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ServiceAccount)) - }) - return ret, err -} - -func (s *StoreToServiceAccountLister) ServiceAccounts(namespace string) storeServiceAccountsNamespacer { - return storeServiceAccountsNamespacer{s.Indexer, namespace} -} - -type storeServiceAccountsNamespacer struct { - indexer Indexer - namespace string -} - -func (s storeServiceAccountsNamespacer) List(selector labels.Selector) (ret []*v1.ServiceAccount, err error) { - err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ServiceAccount)) - }) - return ret, err -} - -func (s storeServiceAccountsNamespacer) Get(name string) (*v1.ServiceAccount, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("serviceaccount"), name) - } - return obj.(*v1.ServiceAccount), nil -} - -// StoreToLimitRangeLister helps list limit ranges -type StoreToLimitRangeLister struct { - Indexer Indexer -} - -func (s *StoreToLimitRangeLister) List(selector labels.Selector) (ret []*v1.LimitRange, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.LimitRange)) - }) - return ret, err -} - -// StoreToPersistentVolumeClaimLister helps list pvcs -type StoreToPersistentVolumeClaimLister struct { - Indexer Indexer -} - -// List returns all persistentvolumeclaims that match the specified selector -func (s *StoreToPersistentVolumeClaimLister) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.PersistentVolumeClaim)) - }) - return ret, err -} - -func (s *StoreToLimitRangeLister) LimitRanges(namespace string) storeLimitRangesNamespacer { - return storeLimitRangesNamespacer{s.Indexer, namespace} -} - -type storeLimitRangesNamespacer struct { - indexer Indexer - namespace string -} - -func (s storeLimitRangesNamespacer) List(selector labels.Selector) (ret []*v1.LimitRange, err error) { - err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.LimitRange)) - }) - return ret, err -} - -func (s storeLimitRangesNamespacer) Get(name string) (*v1.LimitRange, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("limitrange"), name) - } - return obj.(*v1.LimitRange), nil -} - -// PersistentVolumeClaims returns all claims in a specified namespace. -func (s *StoreToPersistentVolumeClaimLister) PersistentVolumeClaims(namespace string) storePersistentVolumeClaimsNamespacer { - return storePersistentVolumeClaimsNamespacer{Indexer: s.Indexer, namespace: namespace} -} - -type storePersistentVolumeClaimsNamespacer struct { - Indexer Indexer - namespace string -} - -func (s storePersistentVolumeClaimsNamespacer) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) { - err = ListAllByNamespace(s.Indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.PersistentVolumeClaim)) - }) - return ret, err -} - -func (s storePersistentVolumeClaimsNamespacer) Get(name string) (*v1.PersistentVolumeClaim, error) { - obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("persistentvolumeclaims"), name) - } - return obj.(*v1.PersistentVolumeClaim), nil -} - -// IndexerToNamespaceLister gives an Indexer List method -type IndexerToNamespaceLister struct { - Indexer -} - -// List returns a list of namespaces -func (i *IndexerToNamespaceLister) List(selector labels.Selector) (ret []*v1.Namespace, err error) { - err = ListAll(i.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.Namespace)) - }) - return ret, err -} - -func (i *IndexerToNamespaceLister) Get(name string) (*v1.Namespace, error) { - obj, exists, err := i.Indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(api.Resource("namespace"), name) - } - return obj.(*v1.Namespace), nil -} diff --git a/staging/src/k8s.io/client-go/tools/cache/listers_extensions.go b/staging/src/k8s.io/client-go/tools/cache/listers_extensions.go deleted file mode 100644 index e15cf568cc1..00000000000 --- a/staging/src/k8s.io/client-go/tools/cache/listers_extensions.go +++ /dev/null @@ -1,211 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package cache - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/pkg/api/v1" - extensionsinternal "k8s.io/client-go/pkg/apis/extensions" - extensions "k8s.io/client-go/pkg/apis/extensions/v1beta1" -) - -// TODO: generate these classes and methods for all resources of interest using -// a script. Can use "go generate" once 1.4 is supported by all users. - -// Lister makes an Index have the List method. The Stores must contain only the expected type -// Example: -// s := cache.NewStore() -// lw := cache.ListWatch{Client: c, FieldSelector: sel, Resource: "pods"} -// r := cache.NewReflector(lw, &extensions.Deployment{}, s).Run() -// l := StoreToDeploymentLister{s} -// l.List() - -// StoreToDeploymentLister helps list deployments -type StoreToDeploymentLister struct { - Indexer Indexer -} - -func (s *StoreToDeploymentLister) List(selector labels.Selector) (ret []*extensions.Deployment, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*extensions.Deployment)) - }) - return ret, err -} - -func (s *StoreToDeploymentLister) Deployments(namespace string) storeDeploymentsNamespacer { - return storeDeploymentsNamespacer{Indexer: s.Indexer, namespace: namespace} -} - -type storeDeploymentsNamespacer struct { - Indexer Indexer - namespace string -} - -func (s storeDeploymentsNamespacer) List(selector labels.Selector) (ret []*extensions.Deployment, err error) { - err = ListAllByNamespace(s.Indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*extensions.Deployment)) - }) - return ret, err -} - -func (s storeDeploymentsNamespacer) Get(name string) (*extensions.Deployment, error) { - obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(extensionsinternal.Resource("deployment"), name) - } - return obj.(*extensions.Deployment), nil -} - -// GetDeploymentsForReplicaSet returns a list of deployments managing a replica set. Returns an error only if no matching deployments are found. -func (s *StoreToDeploymentLister) GetDeploymentsForReplicaSet(rs *extensions.ReplicaSet) (deployments []*extensions.Deployment, err error) { - if len(rs.Labels) == 0 { - err = fmt.Errorf("no deployments found for ReplicaSet %v because it has no labels", rs.Name) - return - } - - // TODO: MODIFY THIS METHOD so that it checks for the podTemplateSpecHash label - dList, err := s.Deployments(rs.Namespace).List(labels.Everything()) - if err != nil { - return - } - for _, d := range dList { - selector, err := metav1.LabelSelectorAsSelector(d.Spec.Selector) - if err != nil { - return nil, fmt.Errorf("invalid label selector: %v", err) - } - // If a deployment with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(rs.Labels)) { - continue - } - deployments = append(deployments, d) - } - if len(deployments) == 0 { - err = fmt.Errorf("could not find deployments set for ReplicaSet %s in namespace %s with labels: %v", rs.Name, rs.Namespace, rs.Labels) - } - return -} - -// GetDeploymentsForDeployments returns a list of deployments managing a pod. Returns an error only if no matching deployments are found. -// TODO eliminate shallow copies -func (s *StoreToDeploymentLister) GetDeploymentsForPod(pod *v1.Pod) (deployments []*extensions.Deployment, err error) { - if len(pod.Labels) == 0 { - err = fmt.Errorf("no deployments found for Pod %v because it has no labels", pod.Name) - return - } - - if len(pod.Labels[extensions.DefaultDeploymentUniqueLabelKey]) == 0 { - return - } - - dList, err := s.Deployments(pod.Namespace).List(labels.Everything()) - if err != nil { - return - } - for _, d := range dList { - selector, err := metav1.LabelSelectorAsSelector(d.Spec.Selector) - if err != nil { - return nil, fmt.Errorf("invalid label selector: %v", err) - } - // If a deployment with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { - continue - } - deployments = append(deployments, d) - } - if len(deployments) == 0 { - err = fmt.Errorf("could not find deployments set for Pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) - } - return -} - -// StoreToReplicaSetLister helps list replicasets -type StoreToReplicaSetLister struct { - Indexer Indexer -} - -func (s *StoreToReplicaSetLister) List(selector labels.Selector) (ret []*extensions.ReplicaSet, err error) { - err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*extensions.ReplicaSet)) - }) - return ret, err -} - -func (s *StoreToReplicaSetLister) ReplicaSets(namespace string) storeReplicaSetsNamespacer { - return storeReplicaSetsNamespacer{Indexer: s.Indexer, namespace: namespace} -} - -type storeReplicaSetsNamespacer struct { - Indexer Indexer - namespace string -} - -func (s storeReplicaSetsNamespacer) List(selector labels.Selector) (ret []*extensions.ReplicaSet, err error) { - err = ListAllByNamespace(s.Indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*extensions.ReplicaSet)) - }) - return ret, err -} - -func (s storeReplicaSetsNamespacer) Get(name string) (*extensions.ReplicaSet, error) { - obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(extensionsinternal.Resource("replicaset"), name) - } - return obj.(*extensions.ReplicaSet), nil -} - -// GetPodReplicaSets returns a list of ReplicaSets managing a pod. Returns an error only if no matching ReplicaSets are found. -func (s *StoreToReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*extensions.ReplicaSet, err error) { - if len(pod.Labels) == 0 { - err = fmt.Errorf("no ReplicaSets found for pod %v because it has no labels", pod.Name) - return - } - - list, err := s.ReplicaSets(pod.Namespace).List(labels.Everything()) - if err != nil { - return - } - for _, rs := range list { - if rs.Namespace != pod.Namespace { - continue - } - selector, err := metav1.LabelSelectorAsSelector(rs.Spec.Selector) - if err != nil { - return nil, fmt.Errorf("invalid selector: %v", err) - } - - // If a ReplicaSet with a nil or empty selector creeps in, it should match nothing, not everything. - if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { - continue - } - rss = append(rss, rs) - } - if len(rss) == 0 { - err = fmt.Errorf("could not find ReplicaSet for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) - } - return -} diff --git a/staging/src/k8s.io/client-go/tools/cache/listers_rbac.go b/staging/src/k8s.io/client-go/tools/cache/listers_rbac.go deleted file mode 100644 index 1462e4f60b2..00000000000 --- a/staging/src/k8s.io/client-go/tools/cache/listers_rbac.go +++ /dev/null @@ -1,234 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package cache - -import ( - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - rbac "k8s.io/client-go/pkg/apis/rbac" -) - -// TODO: generate these classes and methods for all resources of interest using -// a script. Can use "go generate" once 1.4 is supported by all users. - -// Lister makes an Index have the List method. The Stores must contain only the expected type -// Example: -// s := cache.NewStore() -// lw := cache.ListWatch{Client: c, FieldSelector: sel, Resource: "pods"} -// r := cache.NewReflector(lw, &rbac.ClusterRole{}, s).Run() -// l := clusterRoleLister{s} -// l.List() - -func NewClusterRoleLister(indexer Indexer) ClusterRoleLister { - return &clusterRoleLister{indexer: indexer} -} -func NewClusterRoleBindingLister(indexer Indexer) ClusterRoleBindingLister { - return &clusterRoleBindingLister{indexer: indexer} -} -func NewRoleLister(indexer Indexer) RoleLister { - return &roleLister{indexer: indexer} -} -func NewRoleBindingLister(indexer Indexer) RoleBindingLister { - return &roleBindingLister{indexer: indexer} -} - -// these interfaces are used by the rbac authorizer -type authorizerClusterRoleGetter interface { - GetClusterRole(name string) (*rbac.ClusterRole, error) -} - -type authorizerClusterRoleBindingLister interface { - ListClusterRoleBindings() ([]*rbac.ClusterRoleBinding, error) -} - -type authorizerRoleGetter interface { - GetRole(namespace, name string) (*rbac.Role, error) -} - -type authorizerRoleBindingLister interface { - ListRoleBindings(namespace string) ([]*rbac.RoleBinding, error) -} - -type ClusterRoleLister interface { - authorizerClusterRoleGetter - List(selector labels.Selector) (ret []*rbac.ClusterRole, err error) - Get(name string) (*rbac.ClusterRole, error) -} - -type clusterRoleLister struct { - indexer Indexer -} - -func (s *clusterRoleLister) List(selector labels.Selector) (ret []*rbac.ClusterRole, err error) { - err = ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*rbac.ClusterRole)) - }) - return ret, err -} - -func (s clusterRoleLister) Get(name string) (*rbac.ClusterRole, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(rbac.Resource("clusterrole"), name) - } - return obj.(*rbac.ClusterRole), nil -} - -func (s clusterRoleLister) GetClusterRole(name string) (*rbac.ClusterRole, error) { - return s.Get(name) -} - -type ClusterRoleBindingLister interface { - authorizerClusterRoleBindingLister - List(selector labels.Selector) (ret []*rbac.ClusterRoleBinding, err error) - Get(name string) (*rbac.ClusterRoleBinding, error) -} - -type clusterRoleBindingLister struct { - indexer Indexer -} - -func (s *clusterRoleBindingLister) List(selector labels.Selector) (ret []*rbac.ClusterRoleBinding, err error) { - err = ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*rbac.ClusterRoleBinding)) - }) - return ret, err -} - -func (s clusterRoleBindingLister) Get(name string) (*rbac.ClusterRoleBinding, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(rbac.Resource("clusterrolebinding"), name) - } - return obj.(*rbac.ClusterRoleBinding), nil -} - -func (s clusterRoleBindingLister) ListClusterRoleBindings() ([]*rbac.ClusterRoleBinding, error) { - return s.List(labels.Everything()) -} - -type RoleLister interface { - authorizerRoleGetter - List(selector labels.Selector) (ret []*rbac.Role, err error) - Roles(namespace string) RoleNamespaceLister -} - -type RoleNamespaceLister interface { - List(selector labels.Selector) (ret []*rbac.Role, err error) - Get(name string) (*rbac.Role, error) -} - -type roleLister struct { - indexer Indexer -} - -func (s *roleLister) List(selector labels.Selector) (ret []*rbac.Role, err error) { - err = ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*rbac.Role)) - }) - return ret, err -} - -func (s *roleLister) Roles(namespace string) RoleNamespaceLister { - return roleNamespaceLister{indexer: s.indexer, namespace: namespace} -} - -func (s roleLister) GetRole(namespace, name string) (*rbac.Role, error) { - return s.Roles(namespace).Get(name) -} - -type roleNamespaceLister struct { - indexer Indexer - namespace string -} - -func (s roleNamespaceLister) List(selector labels.Selector) (ret []*rbac.Role, err error) { - err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*rbac.Role)) - }) - return ret, err -} - -func (s roleNamespaceLister) Get(name string) (*rbac.Role, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(rbac.Resource("role"), name) - } - return obj.(*rbac.Role), nil -} - -type RoleBindingLister interface { - authorizerRoleBindingLister - List(selector labels.Selector) (ret []*rbac.RoleBinding, err error) - RoleBindings(namespace string) RoleBindingNamespaceLister -} - -type RoleBindingNamespaceLister interface { - List(selector labels.Selector) (ret []*rbac.RoleBinding, err error) - Get(name string) (*rbac.RoleBinding, error) -} - -type roleBindingLister struct { - indexer Indexer -} - -func (s *roleBindingLister) List(selector labels.Selector) (ret []*rbac.RoleBinding, err error) { - err = ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*rbac.RoleBinding)) - }) - return ret, err -} - -func (s *roleBindingLister) RoleBindings(namespace string) RoleBindingNamespaceLister { - return roleBindingNamespaceLister{indexer: s.indexer, namespace: namespace} -} - -func (s roleBindingLister) ListRoleBindings(namespace string) ([]*rbac.RoleBinding, error) { - return s.RoleBindings(namespace).List(labels.Everything()) -} - -type roleBindingNamespaceLister struct { - indexer Indexer - namespace string -} - -func (s roleBindingNamespaceLister) List(selector labels.Selector) (ret []*rbac.RoleBinding, err error) { - err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*rbac.RoleBinding)) - }) - return ret, err -} - -func (s roleBindingNamespaceLister) Get(name string) (*rbac.RoleBinding, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(rbac.Resource("rolebinding"), name) - } - return obj.(*rbac.RoleBinding), nil -} diff --git a/staging/src/k8s.io/client-go/tools/cache/listers_test.go b/staging/src/k8s.io/client-go/tools/cache/listers_test.go deleted file mode 100644 index 98b331b9c94..00000000000 --- a/staging/src/k8s.io/client-go/tools/cache/listers_test.go +++ /dev/null @@ -1,613 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package cache - -import ( - "testing" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/pkg/api/v1" - extensions "k8s.io/client-go/pkg/apis/extensions/v1beta1" -) - -func TestStoreToNodeLister(t *testing.T) { - store := NewStore(MetaNamespaceKeyFunc) - ids := sets.NewString("foo", "bar", "baz") - for id := range ids { - store.Add(&v1.Node{ObjectMeta: metav1.ObjectMeta{Name: id}}) - } - sml := StoreToNodeLister{store} - - gotNodes, err := sml.List() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - got := make([]string, len(gotNodes.Items)) - for ix := range gotNodes.Items { - got[ix] = gotNodes.Items[ix].Name - } - if !ids.HasAll(got...) || len(got) != len(ids) { - t.Errorf("Expected %v, got %v", ids, got) - } -} - -func TestStoreToNodeConditionLister(t *testing.T) { - store := NewStore(MetaNamespaceKeyFunc) - nodes := []*v1.Node{ - { - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - Status: v1.NodeStatus{ - Conditions: []v1.NodeCondition{ - { - Type: v1.NodeReady, - Status: v1.ConditionTrue, - }, - { - Type: v1.NodeOutOfDisk, - Status: v1.ConditionFalse, - }, - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "bar"}, - Status: v1.NodeStatus{ - Conditions: []v1.NodeCondition{ - { - Type: v1.NodeOutOfDisk, - Status: v1.ConditionTrue, - }, - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "baz"}, - Status: v1.NodeStatus{ - Conditions: []v1.NodeCondition{ - { - Type: v1.NodeReady, - Status: v1.ConditionFalse, - }, - { - Type: v1.NodeOutOfDisk, - Status: v1.ConditionUnknown, - }, - }, - }, - }, - } - for _, n := range nodes { - store.Add(n) - } - - predicate := func(node *v1.Node) bool { - for _, cond := range node.Status.Conditions { - if cond.Type == v1.NodeOutOfDisk && cond.Status == v1.ConditionTrue { - return false - } - } - return true - } - - snl := StoreToNodeLister{store} - sncl := snl.NodeCondition(predicate) - - want := sets.NewString("foo", "baz") - gotNodes, err := sncl.List() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - got := make([]string, len(gotNodes)) - for ix := range gotNodes { - got[ix] = gotNodes[ix].Name - } - if !want.HasAll(got...) || len(got) != len(want) { - t.Errorf("Expected %v, got %v", want, got) - } -} - -func TestStoreToReplicationControllerLister(t *testing.T) { - testCases := []struct { - description string - inRCs []*v1.ReplicationController - list func(StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) - outRCNames sets.String - expectErr bool - onlyIfIndexedByNamespace bool - }{ - { - description: "Verify we can search all namespaces", - inRCs: []*v1.ReplicationController{ - { - ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "hmm", Namespace: "hmm"}, - }, - }, - list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { - return lister.ReplicationControllers(v1.NamespaceAll).List(labels.Set{}.AsSelectorPreValidated()) - }, - outRCNames: sets.NewString("hmm", "foo"), - }, - { - description: "Verify we can search a specific namespace", - inRCs: []*v1.ReplicationController{ - { - ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "bar"}, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "hmm", Namespace: "hmm"}, - }, - }, - list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { - return lister.ReplicationControllers("hmm").List(labels.Set{}.AsSelectorPreValidated()) - }, - outRCNames: sets.NewString("hmm"), - }, - { - description: "Basic listing with all labels and no selectors", - inRCs: []*v1.ReplicationController{ - {ObjectMeta: metav1.ObjectMeta{Name: "basic"}}, - }, - list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { - return lister.List(labels.Everything()) - }, - outRCNames: sets.NewString("basic"), - }, - { - description: "No pod labels", - inRCs: []*v1.ReplicationController{ - { - ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"}, - Spec: v1.ReplicationControllerSpec{ - Selector: map[string]string{"foo": "baz"}, - }, - }, - }, - list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{Name: "pod1", Namespace: "ns"}, - } - return lister.GetPodControllers(pod) - }, - outRCNames: sets.NewString(), - expectErr: true, - }, - { - description: "No RC selectors", - inRCs: []*v1.ReplicationController{ - { - ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"}, - }, - }, - list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Namespace: "ns", - Labels: map[string]string{"foo": "bar"}, - }, - } - return lister.GetPodControllers(pod) - }, - outRCNames: sets.NewString(), - expectErr: true, - }, - { - description: "Matching labels to selectors and namespace", - inRCs: []*v1.ReplicationController{ - { - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - Spec: v1.ReplicationControllerSpec{ - Selector: map[string]string{"foo": "bar"}, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "bar", Namespace: "ns"}, - Spec: v1.ReplicationControllerSpec{ - Selector: map[string]string{"foo": "bar"}, - }, - }, - }, - list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Labels: map[string]string{"foo": "bar"}, - Namespace: "ns", - }, - } - return lister.GetPodControllers(pod) - }, - outRCNames: sets.NewString("bar"), - onlyIfIndexedByNamespace: true, - }, - } - for _, c := range testCases { - for _, withIndex := range []bool{true, false} { - if c.onlyIfIndexedByNamespace && !withIndex { - continue - } - var store Indexer - if withIndex { - store = NewIndexer(MetaNamespaceKeyFunc, Indexers{NamespaceIndex: MetaNamespaceIndexFunc}) - } else { - store = NewIndexer(MetaNamespaceKeyFunc, Indexers{}) - } - - for _, r := range c.inRCs { - store.Add(r) - } - - gotControllers, err := c.list(StoreToReplicationControllerLister{store}) - if err != nil && c.expectErr { - continue - } else if c.expectErr { - t.Errorf("(%q, withIndex=%v) Expected error, got none", c.description, withIndex) - continue - } else if err != nil { - t.Errorf("(%q, withIndex=%v) Unexpected error %#v", c.description, withIndex, err) - continue - } - gotNames := make([]string, len(gotControllers)) - for ix := range gotControllers { - gotNames[ix] = gotControllers[ix].Name - } - if !c.outRCNames.HasAll(gotNames...) || len(gotNames) != len(c.outRCNames) { - t.Errorf("(%q, withIndex=%v) Unexpected got controllers %+v expected %+v", c.description, withIndex, gotNames, c.outRCNames) - } - } - } -} - -func TestStoreToReplicaSetLister(t *testing.T) { - store := NewIndexer(MetaNamespaceKeyFunc, Indexers{NamespaceIndex: MetaNamespaceIndexFunc}) - lister := StoreToReplicaSetLister{store} - testCases := []struct { - inRSs []*extensions.ReplicaSet - list func() ([]*extensions.ReplicaSet, error) - outRSNames sets.String - expectErr bool - }{ - // Basic listing with all labels and no selectors - { - inRSs: []*extensions.ReplicaSet{ - {ObjectMeta: metav1.ObjectMeta{Name: "basic"}}, - }, - list: func() ([]*extensions.ReplicaSet, error) { - return lister.List(labels.Everything()) - }, - outRSNames: sets.NewString("basic"), - }, - // No pod labels - { - inRSs: []*extensions.ReplicaSet{ - { - ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"}, - Spec: extensions.ReplicaSetSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, - }, - }, - }, - list: func() ([]*extensions.ReplicaSet, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{Name: "pod1", Namespace: "ns"}, - } - return lister.GetPodReplicaSets(pod) - }, - outRSNames: sets.NewString(), - expectErr: true, - }, - // No ReplicaSet selectors - { - inRSs: []*extensions.ReplicaSet{ - { - ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"}, - }, - }, - list: func() ([]*extensions.ReplicaSet, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Namespace: "ns", - Labels: map[string]string{"foo": "bar"}, - }, - } - return lister.GetPodReplicaSets(pod) - }, - outRSNames: sets.NewString(), - expectErr: true, - }, - // Matching labels to selectors and namespace - { - inRSs: []*extensions.ReplicaSet{ - { - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - Spec: extensions.ReplicaSetSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "bar", Namespace: "ns"}, - Spec: extensions.ReplicaSetSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, - }, - }, - }, - list: func() ([]*extensions.ReplicaSet, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Labels: map[string]string{"foo": "bar"}, - Namespace: "ns", - }, - } - return lister.GetPodReplicaSets(pod) - }, - outRSNames: sets.NewString("bar"), - }, - } - for _, c := range testCases { - for _, r := range c.inRSs { - store.Add(r) - } - - gotRSs, err := c.list() - if err != nil && c.expectErr { - continue - } else if c.expectErr { - t.Error("Expected error, got none") - continue - } else if err != nil { - t.Errorf("Unexpected error %#v", err) - continue - } - gotNames := make([]string, len(gotRSs)) - for ix := range gotRSs { - gotNames[ix] = gotRSs[ix].Name - } - if !c.outRSNames.HasAll(gotNames...) || len(gotNames) != len(c.outRSNames) { - t.Errorf("Unexpected got ReplicaSets %+v expected %+v", gotNames, c.outRSNames) - } - } -} - -func TestStoreToDaemonSetLister(t *testing.T) { - store := NewStore(MetaNamespaceKeyFunc) - lister := StoreToDaemonSetLister{store} - testCases := []struct { - inDSs []*extensions.DaemonSet - list func() ([]extensions.DaemonSet, error) - outDaemonSetNames sets.String - expectErr bool - }{ - // Basic listing - { - inDSs: []*extensions.DaemonSet{ - {ObjectMeta: metav1.ObjectMeta{Name: "basic"}}, - }, - list: func() ([]extensions.DaemonSet, error) { - list, err := lister.List() - return list.Items, err - }, - outDaemonSetNames: sets.NewString("basic"), - }, - // Listing multiple daemon sets - { - inDSs: []*extensions.DaemonSet{ - {ObjectMeta: metav1.ObjectMeta{Name: "basic"}}, - {ObjectMeta: metav1.ObjectMeta{Name: "complex"}}, - {ObjectMeta: metav1.ObjectMeta{Name: "complex2"}}, - }, - list: func() ([]extensions.DaemonSet, error) { - list, err := lister.List() - return list.Items, err - }, - outDaemonSetNames: sets.NewString("basic", "complex", "complex2"), - }, - // No pod labels - { - inDSs: []*extensions.DaemonSet{ - { - ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"}, - Spec: extensions.DaemonSetSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, - }, - }, - }, - list: func() ([]extensions.DaemonSet, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{Name: "pod1", Namespace: "ns"}, - } - return lister.GetPodDaemonSets(pod) - }, - outDaemonSetNames: sets.NewString(), - expectErr: true, - }, - // No DS selectors - { - inDSs: []*extensions.DaemonSet{ - { - ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"}, - }, - }, - list: func() ([]extensions.DaemonSet, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Namespace: "ns", - Labels: map[string]string{"foo": "bar"}, - }, - } - return lister.GetPodDaemonSets(pod) - }, - outDaemonSetNames: sets.NewString(), - expectErr: true, - }, - // Matching labels to selectors and namespace - { - inDSs: []*extensions.DaemonSet{ - { - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - Spec: extensions.DaemonSetSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "bar", Namespace: "ns"}, - Spec: extensions.DaemonSetSpec{ - Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, - }, - }, - }, - list: func() ([]extensions.DaemonSet, error) { - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod1", - Labels: map[string]string{"foo": "bar"}, - Namespace: "ns", - }, - } - return lister.GetPodDaemonSets(pod) - }, - outDaemonSetNames: sets.NewString("bar"), - }, - } - for _, c := range testCases { - for _, r := range c.inDSs { - store.Add(r) - } - - daemonSets, err := c.list() - if err != nil && c.expectErr { - continue - } else if c.expectErr { - t.Error("Expected error, got none") - continue - } else if err != nil { - t.Errorf("Unexpected error %#v", err) - continue - } - daemonSetNames := make([]string, len(daemonSets)) - for ix := range daemonSets { - daemonSetNames[ix] = daemonSets[ix].Name - } - if !c.outDaemonSetNames.HasAll(daemonSetNames...) || len(daemonSetNames) != len(c.outDaemonSetNames) { - t.Errorf("Unexpected got controllers %+v expected %+v", daemonSetNames, c.outDaemonSetNames) - } - } -} - -func TestStoreToPodLister(t *testing.T) { - // We test with and without a namespace index, because StoreToPodLister has - // special logic to work on namespaces even when no namespace index is - // present. - stores := []Indexer{ - NewIndexer(MetaNamespaceKeyFunc, Indexers{NamespaceIndex: MetaNamespaceIndexFunc}), - NewIndexer(MetaNamespaceKeyFunc, Indexers{}), - } - for _, store := range stores { - ids := []string{"foo", "bar", "baz"} - for _, id := range ids { - store.Add(&v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "other", - Name: id, - Labels: map[string]string{"name": id}, - }, - }) - } - store.Add(&v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "quux", - Namespace: v1.NamespaceDefault, - Labels: map[string]string{"name": "quux"}, - }, - }) - spl := StoreToPodLister{store} - - // Verify that we can always look up by Namespace. - defaultPods, err := spl.Pods(v1.NamespaceDefault).List(labels.Set{}.AsSelectorPreValidated()) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } else if e, a := 1, len(defaultPods); e != a { - t.Errorf("Expected %v, got %v", e, a) - } else if e, a := "quux", defaultPods[0].Name; e != a { - t.Errorf("Expected %v, got %v", e, a) - } - - for _, id := range ids { - got, err := spl.List(labels.Set{"name": id}.AsSelectorPreValidated()) - if err != nil { - t.Errorf("Unexpected error: %v", err) - continue - } - if e, a := 1, len(got); e != a { - t.Errorf("Expected %v, got %v", e, a) - continue - } - if e, a := id, got[0].Name; e != a { - t.Errorf("Expected %v, got %v", e, a) - continue - } - - _, err = spl.Pods("other").Get(id) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - } - - if _, err := spl.Pods("").Get("qux"); !apierrors.IsNotFound(err) { - t.Error("Unexpected pod exists") - } - } -} - -func TestStoreToServiceLister(t *testing.T) { - store := NewIndexer(MetaNamespaceKeyFunc, Indexers{NamespaceIndex: MetaNamespaceIndexFunc}) - store.Add(&v1.Service{ - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - Spec: v1.ServiceSpec{ - Selector: map[string]string{}, - }, - }) - store.Add(&v1.Service{ObjectMeta: metav1.ObjectMeta{Name: "bar"}}) - ssl := StoreToServiceLister{store} - - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foopod", - Labels: map[string]string{"role": "foo"}, - }, - } - - services, err := ssl.GetPodServices(pod) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if len(services) != 1 { - t.Fatalf("Expected 1 service, got %v", len(services)) - } - if e, a := "foo", services[0].Name; e != a { - t.Errorf("Expected service %q, got %q", e, a) - } -} diff --git a/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go b/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go index 2558243da55..74319788aba 100644 --- a/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go +++ b/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go @@ -129,7 +129,7 @@ func TestErrorReadingNonFile(t *testing.T) { if err != nil { t.Fatalf("Couldn't create tmpdir") } - defer os.Remove(tmpdir) + defer os.RemoveAll(tmpdir) loadingRules := ClientConfigLoadingRules{ ExplicitPath: tmpdir, @@ -224,14 +224,15 @@ func TestResolveRelativePaths(t *testing.T) { } configDir1, _ := ioutil.TempDir("", "") + defer os.RemoveAll(configDir1) configFile1 := path.Join(configDir1, ".kubeconfig") configDir1, _ = filepath.Abs(configDir1) - defer os.Remove(configFile1) + configDir2, _ := ioutil.TempDir("", "") + defer os.RemoveAll(configDir2) configDir2, _ = ioutil.TempDir(configDir2, "") configFile2 := path.Join(configDir2, ".kubeconfig") configDir2, _ = filepath.Abs(configDir2) - defer os.Remove(configFile2) WriteToFile(pathResolutionConfig1, configFile1) WriteToFile(pathResolutionConfig2, configFile2) diff --git a/vendor/BUILD b/vendor/BUILD index 787921bb552..cadadb315d5 100644 --- a/vendor/BUILD +++ b/vendor/BUILD @@ -10149,6 +10149,7 @@ go_library( go_library( name = "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta", srcs = [ + "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/default.go", "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/doc.go", "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/errors.go", "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/api/meta/firsthit_restmapper.go", @@ -10746,7 +10747,7 @@ go_library( "//vendor:k8s.io/client-go/kubernetes/typed/autoscaling/v1", "//vendor:k8s.io/client-go/kubernetes/typed/batch/v1", "//vendor:k8s.io/client-go/kubernetes/typed/batch/v2alpha1", - "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1alpha1", + "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1beta1", "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", "//vendor:k8s.io/client-go/kubernetes/typed/extensions/v1beta1", "//vendor:k8s.io/client-go/kubernetes/typed/policy/v1beta1", @@ -10796,8 +10797,8 @@ go_library( "//vendor:k8s.io/client-go/kubernetes/typed/batch/v1/fake", "//vendor:k8s.io/client-go/kubernetes/typed/batch/v2alpha1", "//vendor:k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake", - "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1alpha1", - "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake", + "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1beta1", + "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake", "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", "//vendor:k8s.io/client-go/kubernetes/typed/core/v1/fake", "//vendor:k8s.io/client-go/kubernetes/typed/extensions/v1beta1", @@ -11074,52 +11075,6 @@ go_library( ], ) -go_library( - name = "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1", - srcs = [ - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificates_client.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/certificatesigningrequest_expansion.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/doc.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/generated_expansion.go", - ], - tags = ["automanaged"], - deps = [ - "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/runtime/schema", - "//vendor:k8s.io/apimachinery/pkg/runtime/serializer", - "//vendor:k8s.io/apimachinery/pkg/types", - "//vendor:k8s.io/apimachinery/pkg/watch", - "//vendor:k8s.io/client-go/pkg/api", - "//vendor:k8s.io/client-go/pkg/api/v1", - "//vendor:k8s.io/client-go/pkg/apis/certificates/v1alpha1", - "//vendor:k8s.io/client-go/rest", - ], -) - -go_library( - name = "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake", - srcs = [ - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/doc.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificates_client.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest.go", - "k8s.io/client-go/kubernetes/typed/certificates/v1alpha1/fake/fake_certificatesigningrequest_expansion.go", - ], - tags = ["automanaged"], - deps = [ - "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/labels", - "//vendor:k8s.io/apimachinery/pkg/runtime/schema", - "//vendor:k8s.io/apimachinery/pkg/types", - "//vendor:k8s.io/apimachinery/pkg/watch", - "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1alpha1", - "//vendor:k8s.io/client-go/pkg/api/v1", - "//vendor:k8s.io/client-go/pkg/apis/certificates/v1alpha1", - "//vendor:k8s.io/client-go/rest", - "//vendor:k8s.io/client-go/testing", - ], -) - go_library( name = "k8s.io/client-go/kubernetes/typed/core/v1", srcs = [ @@ -11422,7 +11377,6 @@ go_library( "k8s.io/client-go/pkg/api/field_constants.go", "k8s.io/client-go/pkg/api/helpers.go", "k8s.io/client-go/pkg/api/json.go", - "k8s.io/client-go/pkg/api/mapper.go", "k8s.io/client-go/pkg/api/meta.go", "k8s.io/client-go/pkg/api/ref.go", "k8s.io/client-go/pkg/api/register.go", @@ -11434,6 +11388,7 @@ go_library( deps = [ "//vendor:github.com/davecgh/go-spew/spew", "//vendor:k8s.io/apimachinery/pkg/api/meta", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/conversion", @@ -11445,7 +11400,6 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/selection", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/apimachinery/pkg/util/validation/field", "//vendor:k8s.io/client-go/pkg/api/resource", "//vendor:k8s.io/client-go/pkg/util/intstr", "//vendor:k8s.io/client-go/pkg/util/labels", @@ -11575,25 +11529,6 @@ go_library( ], ) -go_library( - name = "k8s.io/client-go/pkg/apimachinery/announced", - srcs = [ - "k8s.io/client-go/pkg/apimachinery/announced/announced.go", - "k8s.io/client-go/pkg/apimachinery/announced/group_factory.go", - ], - tags = ["automanaged"], - deps = [ - "//vendor:github.com/golang/glog", - "//vendor:k8s.io/apimachinery/pkg/api/meta", - "//vendor:k8s.io/apimachinery/pkg/apimachinery", - "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", - "//vendor:k8s.io/apimachinery/pkg/runtime", - "//vendor:k8s.io/apimachinery/pkg/runtime/schema", - "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/api", - ], -) - go_library( name = "k8s.io/client-go/pkg/apis/apps", srcs = [ @@ -11617,7 +11552,10 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/apps/install/install.go"], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/apps", "//vendor:k8s.io/client-go/pkg/apis/apps/v1beta1", ], @@ -11678,8 +11616,11 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/authentication/install/install.go"], tags = ["automanaged"], deps = [ + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/authentication", "//vendor:k8s.io/client-go/pkg/apis/authentication/v1beta1", ], @@ -11738,8 +11679,11 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/authorization/install/install.go"], tags = ["automanaged"], deps = [ + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/authorization", "//vendor:k8s.io/client-go/pkg/apis/authorization/v1beta1", ], @@ -11798,7 +11742,10 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/autoscaling/install/install.go"], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/autoscaling", "//vendor:k8s.io/client-go/pkg/apis/autoscaling/v1", ], @@ -11855,7 +11802,10 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/batch/install/install.go"], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/batch", "//vendor:k8s.io/client-go/pkg/apis/batch/v1", "//vendor:k8s.io/client-go/pkg/apis/batch/v2alpha1", @@ -11950,41 +11900,13 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/certificates/install/install.go"], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", - "//vendor:k8s.io/client-go/pkg/apis/certificates", - "//vendor:k8s.io/client-go/pkg/apis/certificates/v1alpha1", - ], -) - -go_library( - name = "k8s.io/client-go/pkg/apis/certificates/v1alpha1", - srcs = [ - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/conversion.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/defaults.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/doc.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/generated.pb.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/helpers.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/register.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.generated.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/types.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go", - "k8s.io/client-go/pkg/apis/certificates/v1alpha1/zz_generated.defaults.go", - ], - tags = ["automanaged"], - deps = [ - "//vendor:github.com/gogo/protobuf/proto", - "//vendor:github.com/ugorji/go/codec", - "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/conversion", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", "//vendor:k8s.io/apimachinery/pkg/runtime", - "//vendor:k8s.io/apimachinery/pkg/runtime/schema", - "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/client-go/pkg/api", - "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/pkg/apis/certificates", + "//vendor:k8s.io/client-go/pkg/apis/certificates/v1beta1", ], ) @@ -12014,7 +11936,10 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/componentconfig/install/install.go"], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/componentconfig", "//vendor:k8s.io/client-go/pkg/apis/componentconfig/v1alpha1", ], @@ -12074,8 +11999,11 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/extensions/install/install.go"], tags = ["automanaged"], deps = [ + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/extensions", "//vendor:k8s.io/client-go/pkg/apis/extensions/v1beta1", ], @@ -12138,8 +12066,11 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/imagepolicy/install/install.go"], tags = ["automanaged"], deps = [ + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/imagepolicy", "//vendor:k8s.io/client-go/pkg/apis/imagepolicy/v1alpha1", ], @@ -12198,7 +12129,10 @@ go_library( ], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/kubeadm", "//vendor:k8s.io/client-go/pkg/apis/kubeadm/v1alpha1", ], @@ -12246,7 +12180,10 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/policy/install/install.go"], tags = ["automanaged"], deps = [ - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/policy", "//vendor:k8s.io/client-go/pkg/apis/policy/v1beta1", ], @@ -12306,8 +12243,11 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/rbac/install/install.go"], tags = ["automanaged"], deps = [ + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/rbac", "//vendor:k8s.io/client-go/pkg/apis/rbac/v1alpha1", "//vendor:k8s.io/client-go/pkg/apis/rbac/v1beta1", @@ -12367,8 +12307,11 @@ go_library( srcs = ["k8s.io/client-go/pkg/apis/storage/install/install.go"], tags = ["automanaged"], deps = [ + "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/client-go/pkg/apimachinery/announced", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/apis/storage", "//vendor:k8s.io/client-go/pkg/apis/storage/v1beta1", ], @@ -12636,8 +12579,8 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/client-go/pkg/api", - "//vendor:k8s.io/client-go/pkg/third_party/forked/golang/netutil", "//vendor:k8s.io/client-go/pkg/util/httpstream", + "//vendor:k8s.io/client-go/third_party/forked/golang/netutil", ], ) @@ -12700,7 +12643,7 @@ go_library( "//vendor:github.com/davecgh/go-spew/spew", "//vendor:github.com/ghodss/yaml", "//vendor:k8s.io/apimachinery/pkg/util/json", - "//vendor:k8s.io/client-go/pkg/third_party/forked/golang/json", + "//vendor:k8s.io/client-go/third_party/forked/golang/json", ], ) @@ -12818,10 +12761,10 @@ go_test( library = ":k8s.io/client-go/plugin/pkg/client/auth/oidc", tags = ["automanaged"], deps = [ - "//plugin/pkg/auth/authenticator/token/oidc/testing:go_default_library", "//vendor:github.com/coreos/go-oidc/jose", "//vendor:github.com/coreos/go-oidc/key", "//vendor:github.com/coreos/go-oidc/oauth2", + "//vendor:k8s.io/client-go/plugin/pkg/auth/authenticator/token/oidc/testing", ], ) @@ -13008,7 +12951,6 @@ go_test( "k8s.io/client-go/tools/cache/expiration_cache_test.go", "k8s.io/client-go/tools/cache/fifo_test.go", "k8s.io/client-go/tools/cache/index_test.go", - "k8s.io/client-go/tools/cache/listers_test.go", "k8s.io/client-go/tools/cache/mutation_detector_test.go", "k8s.io/client-go/tools/cache/processor_listener_test.go", "k8s.io/client-go/tools/cache/reflector_test.go", @@ -13019,16 +12961,13 @@ go_test( tags = ["automanaged"], deps = [ "//vendor:github.com/google/gofuzz", - "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/labels", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/api/v1", - "//vendor:k8s.io/client-go/pkg/apis/extensions/v1beta1", "//vendor:k8s.io/client-go/pkg/util/clock", "//vendor:k8s.io/client-go/tools/cache/testing", ], @@ -13046,9 +12985,6 @@ go_library( "k8s.io/client-go/tools/cache/fifo.go", "k8s.io/client-go/tools/cache/index.go", "k8s.io/client-go/tools/cache/listers.go", - "k8s.io/client-go/tools/cache/listers_core.go", - "k8s.io/client-go/tools/cache/listers_extensions.go", - "k8s.io/client-go/tools/cache/listers_rbac.go", "k8s.io/client-go/tools/cache/listwatch.go", "k8s.io/client-go/tools/cache/mutation_detector.go", "k8s.io/client-go/tools/cache/reflector.go", @@ -13074,14 +13010,6 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/api/v1", - "//vendor:k8s.io/client-go/pkg/apis/apps/v1beta1", - "//vendor:k8s.io/client-go/pkg/apis/certificates/v1alpha1", - "//vendor:k8s.io/client-go/pkg/apis/extensions", - "//vendor:k8s.io/client-go/pkg/apis/extensions/v1beta1", - "//vendor:k8s.io/client-go/pkg/apis/policy/v1beta1", - "//vendor:k8s.io/client-go/pkg/apis/rbac", - "//vendor:k8s.io/client-go/pkg/apis/storage", - "//vendor:k8s.io/client-go/pkg/apis/storage/v1beta1", "//vendor:k8s.io/client-go/pkg/util/clock", "//vendor:k8s.io/client-go/rest", ], @@ -13683,3 +13611,110 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/sets", ], ) + +go_library( + name = "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced", + srcs = [ + "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/announced.go", + "k8s.io/client-go/_vendor/k8s.io/apimachinery/pkg/apimachinery/announced/group_factory.go", + ], + tags = ["automanaged"], + deps = [ + "//vendor:github.com/golang/glog", + "//vendor:k8s.io/apimachinery/pkg/api/meta", + "//vendor:k8s.io/apimachinery/pkg/apimachinery", + "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/apimachinery/pkg/runtime/schema", + "//vendor:k8s.io/apimachinery/pkg/util/sets", + ], +) + +go_library( + name = "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", + srcs = [ + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificates_client.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/certificatesigningrequest_expansion.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/generated_expansion.go", + ], + tags = ["automanaged"], + deps = [ + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/runtime/schema", + "//vendor:k8s.io/apimachinery/pkg/runtime/serializer", + "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/pkg/apis/certificates/v1beta1", + "//vendor:k8s.io/client-go/rest", + ], +) + +go_library( + name = "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake", + srcs = [ + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/doc.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificates_client.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest.go", + "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake/fake_certificatesigningrequest_expansion.go", + ], + tags = ["automanaged"], + deps = [ + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/labels", + "//vendor:k8s.io/apimachinery/pkg/runtime/schema", + "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/certificates/v1beta1", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/pkg/apis/certificates/v1beta1", + "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/testing", + ], +) + +go_library( + name = "k8s.io/client-go/pkg/apis/certificates/v1beta1", + srcs = [ + "k8s.io/client-go/pkg/apis/certificates/v1beta1/conversion.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/defaults.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/doc.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/generated.pb.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/helpers.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/register.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/types.generated.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/types.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/types_swagger_doc_generated.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.conversion.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.deepcopy.go", + "k8s.io/client-go/pkg/apis/certificates/v1beta1/zz_generated.defaults.go", + ], + tags = ["automanaged"], + deps = [ + "//vendor:github.com/gogo/protobuf/proto", + "//vendor:github.com/ugorji/go/codec", + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/conversion", + "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/apimachinery/pkg/runtime/schema", + "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/pkg/api", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/pkg/apis/certificates", + ], +) + +go_library( + name = "k8s.io/client-go/third_party/forked/golang/json", + srcs = ["k8s.io/client-go/third_party/forked/golang/json/fields.go"], + tags = ["automanaged"], +) + +go_library( + name = "k8s.io/client-go/third_party/forked/golang/netutil", + srcs = ["k8s.io/client-go/third_party/forked/golang/netutil/addr.go"], + tags = ["automanaged"], +) From 0fed47b27f49aa8c2b062e8eda9d328a350c8ab4 Mon Sep 17 00:00:00 2001 From: deads2k Date: Fri, 20 Jan 2017 12:54:43 -0500 Subject: [PATCH 2/3] script --- staging/copy.sh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/staging/copy.sh b/staging/copy.sh index fea5e965813..4edc341cbe4 100755 --- a/staging/copy.sh +++ b/staging/copy.sh @@ -69,16 +69,18 @@ function save() { } # save everything for which the staging directory is the source of truth -save "transport" -save "tools/metrics" -save "tools/clientcmd/api" save "rest" # remove the rest/fake until we're authoritative for it (need to update for registry) rm -rf ${CLIENT_REPO_TEMP}/rest/fake +save "tools/auth" +save "tools/clientcmd" +save "tools/metrics" +save "transport" save "pkg/third_party" save "pkg/util/cert" save "pkg/util/clock" save "pkg/util/flowcontrol" +save "pkg/util/homedir" save "pkg/util/integer" save "pkg/util/jsonpath" save "pkg/util/testing" @@ -104,8 +106,6 @@ mkcp "/pkg/client/testing" "/pkg/client" rm "${CLIENT_REPO_TEMP}"/pkg/client/testing/core/fake_test.go mkcp "/pkg/client/typed" "/pkg/client" -mkcp "/pkg/client/unversioned/auth" "/pkg/client/unversioned" -mkcp "/pkg/client/unversioned/clientcmd" "/pkg/client/unversioned" mkcp "/pkg/client/unversioned/portforward" "/pkg/client/unversioned" mkcp "/pkg/util/workqueue" "pkg/util" @@ -198,8 +198,6 @@ mvfolder pkg/client/typed/dynamic dynamic mvfolder pkg/client/record tools/record mvfolder pkg/client/restclient/fake rest/fake mvfolder pkg/client/cache tools/cache -mvfolder pkg/client/unversioned/auth tools/auth -mvfolder pkg/client/unversioned/clientcmd tools/clientcmd mvfolder pkg/client/unversioned/portforward tools/portforward mvfolder pkg/client/testing/core testing mvfolder pkg/client/testing/cache tools/cache/testing From 335ef747d66dc738455a041276e94311db425eda Mon Sep 17 00:00:00 2001 From: deads2k Date: Fri, 20 Jan 2017 13:06:17 -0500 Subject: [PATCH 3/3] mechanical --- cmd/cloud-controller-manager/app/BUILD | 2 +- .../app/controllermanager.go | 2 +- cmd/kube-controller-manager/app/BUILD | 2 +- .../app/controllermanager.go | 2 +- cmd/kube-proxy/app/BUILD | 2 +- cmd/kube-proxy/app/server.go | 2 +- cmd/kubeadm/app/discovery/BUILD | 2 +- cmd/kubeadm/app/discovery/discovery.go | 2 +- cmd/kubeadm/app/master/BUILD | 2 +- cmd/kubeadm/app/master/apiclient.go | 2 +- cmd/kubeadm/app/node/BUILD | 2 +- cmd/kubeadm/app/node/bootstrap.go | 2 +- cmd/kubeadm/app/node/csr.go | 2 +- cmd/kubeadm/app/phases/kubeconfig/BUILD | 2 +- .../app/phases/kubeconfig/kubeconfig.go | 2 +- cmd/kubelet/app/BUILD | 2 - cmd/kubelet/app/bootstrap.go | 2 +- cmd/kubelet/app/server.go | 4 +- cmd/kubemark/BUILD | 2 +- cmd/kubemark/hollow-node.go | 2 +- .../federation-controller-manager/app/BUILD | 2 +- .../app/controllermanager.go | 2 +- .../pkg/federation-controller/cluster/BUILD | 2 +- .../cluster/clustercontroller_test.go | 2 +- .../pkg/federation-controller/util/BUILD | 2 +- .../util/cluster_util.go | 2 +- federation/pkg/kubefed/BUILD | 4 +- federation/pkg/kubefed/init/BUILD | 4 +- federation/pkg/kubefed/init/init.go | 2 +- federation/pkg/kubefed/init/init_test.go | 2 +- federation/pkg/kubefed/join_test.go | 2 +- federation/pkg/kubefed/kubefed.go | 2 +- federation/pkg/kubefed/testing/BUILD | 2 +- federation/pkg/kubefed/testing/testing.go | 2 +- federation/pkg/kubefed/util/BUILD | 2 +- federation/pkg/kubefed/util/util.go | 2 +- pkg/client/unversioned/BUILD | 2 - pkg/client/unversioned/auth/BUILD | 36 -- pkg/client/unversioned/auth/clientauth.go | 125 ---- .../unversioned/auth/clientauth_test.go | 69 -- pkg/client/unversioned/clientcmd/BUILD | 75 --- .../unversioned/clientcmd/auth_loaders.go | 106 --- .../unversioned/clientcmd/client_config.go | 537 --------------- .../clientcmd/client_config_test.go | 506 --------------- pkg/client/unversioned/clientcmd/config.go | 472 -------------- pkg/client/unversioned/clientcmd/doc.go | 37 -- pkg/client/unversioned/clientcmd/helpers.go | 35 - pkg/client/unversioned/clientcmd/loader.go | 609 ------------------ .../unversioned/clientcmd/loader_test.go | 579 ----------------- .../clientcmd/merged_client_builder.go | 154 ----- .../clientcmd/merged_client_builder_test.go | 328 ---------- pkg/client/unversioned/clientcmd/overrides.go | 206 ------ .../unversioned/clientcmd/validation.go | 270 -------- .../unversioned/clientcmd/validation_test.go | 432 ------------- pkg/kubectl/cmd/BUILD | 2 +- pkg/kubectl/cmd/cmd.go | 2 +- pkg/kubectl/cmd/config/BUILD | 4 +- pkg/kubectl/cmd/config/config.go | 2 +- pkg/kubectl/cmd/config/config_test.go | 2 +- pkg/kubectl/cmd/config/create_authinfo.go | 2 +- pkg/kubectl/cmd/config/create_cluster.go | 2 +- pkg/kubectl/cmd/config/create_context.go | 2 +- pkg/kubectl/cmd/config/current_context.go | 2 +- .../cmd/config/current_context_test.go | 2 +- pkg/kubectl/cmd/config/delete_cluster.go | 2 +- pkg/kubectl/cmd/config/delete_cluster_test.go | 2 +- pkg/kubectl/cmd/config/delete_context.go | 2 +- pkg/kubectl/cmd/config/delete_context_test.go | 2 +- pkg/kubectl/cmd/config/get_clusters.go | 2 +- pkg/kubectl/cmd/config/get_clusters_test.go | 2 +- pkg/kubectl/cmd/config/get_contexts.go | 2 +- pkg/kubectl/cmd/config/get_contexts_test.go | 2 +- pkg/kubectl/cmd/config/set.go | 2 +- pkg/kubectl/cmd/config/unset.go | 2 +- pkg/kubectl/cmd/config/use_context.go | 2 +- pkg/kubectl/cmd/config/view.go | 2 +- pkg/kubectl/cmd/util/BUILD | 6 +- pkg/kubectl/cmd/util/clientcache.go | 2 +- pkg/kubectl/cmd/util/factory.go | 2 +- pkg/kubectl/cmd/util/factory_client_access.go | 4 +- pkg/kubectl/cmd/util/factory_test.go | 2 +- pkg/kubectl/cmd/util/helpers.go | 2 +- pkg/util/BUILD | 1 - pkg/util/homedir/BUILD | 27 - pkg/util/homedir/homedir.go | 47 -- plugin/cmd/kube-scheduler/app/BUILD | 2 +- plugin/cmd/kube-scheduler/app/server.go | 2 +- plugin/pkg/admission/initialresources/BUILD | 2 +- .../admission/initialresources/hawkular.go | 2 +- test/e2e/framework/BUILD | 2 +- test/e2e/framework/test_context.go | 2 +- test/e2e/framework/util.go | 2 +- test/e2e_federation/BUILD | 2 +- test/e2e_federation/federation-authn.go | 2 +- test/e2e_federation/federation-util.go | 2 +- test/e2e_federation/framework/BUILD | 2 +- test/e2e_federation/framework/util.go | 2 +- test/integration/kubectl/kubectl_test.go | 2 +- test/soak/serve_hostnames/BUILD | 2 +- test/soak/serve_hostnames/serve_hostnames.go | 2 +- 100 files changed, 85 insertions(+), 4740 deletions(-) delete mode 100644 pkg/client/unversioned/auth/BUILD delete mode 100644 pkg/client/unversioned/auth/clientauth.go delete mode 100644 pkg/client/unversioned/auth/clientauth_test.go delete mode 100644 pkg/client/unversioned/clientcmd/BUILD delete mode 100644 pkg/client/unversioned/clientcmd/auth_loaders.go delete mode 100644 pkg/client/unversioned/clientcmd/client_config.go delete mode 100644 pkg/client/unversioned/clientcmd/client_config_test.go delete mode 100644 pkg/client/unversioned/clientcmd/config.go delete mode 100644 pkg/client/unversioned/clientcmd/doc.go delete mode 100644 pkg/client/unversioned/clientcmd/helpers.go delete mode 100644 pkg/client/unversioned/clientcmd/loader.go delete mode 100644 pkg/client/unversioned/clientcmd/loader_test.go delete mode 100644 pkg/client/unversioned/clientcmd/merged_client_builder.go delete mode 100644 pkg/client/unversioned/clientcmd/merged_client_builder_test.go delete mode 100644 pkg/client/unversioned/clientcmd/overrides.go delete mode 100644 pkg/client/unversioned/clientcmd/validation.go delete mode 100644 pkg/client/unversioned/clientcmd/validation_test.go delete mode 100644 pkg/util/homedir/BUILD delete mode 100644 pkg/util/homedir/homedir.go diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index 381a6e9ae39..f3a1fc2387c 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -19,7 +19,6 @@ go_library( "//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/client/record:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/cloud:go_default_library", @@ -35,6 +34,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apiserver/pkg/server/healthz", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 4dbbec9c45a..9946ff65d39 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/cmd/cloud-controller-manager/app/options" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -36,7 +37,6 @@ import ( "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/client/record" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" nodecontroller "k8s.io/kubernetes/pkg/controller/cloud" diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 32b64137378..94ffd25ca14 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -36,7 +36,6 @@ go_library( "//pkg/client/record:go_default_library", "//pkg/client/typed/discovery:go_default_library", "//pkg/client/typed/dynamic:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers:go_default_library", "//pkg/cloudprovider/providers/aws:go_default_library", @@ -101,6 +100,7 @@ go_library( "//vendor:k8s.io/apiserver/pkg/server/healthz", "//vendor:k8s.io/client-go/pkg/util/cert", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 7f21b1d2cb9..ebbfc58afc2 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -38,6 +38,7 @@ import ( "k8s.io/apiserver/pkg/server/healthz" certutil "k8s.io/client-go/pkg/util/cert" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -46,7 +47,6 @@ import ( "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/typed/discovery" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index 36b6dc2c509..1a1c68ea7a5 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -22,7 +22,6 @@ go_library( "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", "//pkg/client/record:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/config:go_default_library", "//pkg/proxy/iptables:go_default_library", @@ -45,6 +44,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/net", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 09593d846b7..214c75d687e 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/types" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/cmd/kube-proxy/app/options" "k8s.io/kubernetes/pkg/api" @@ -39,7 +40,6 @@ import ( clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" "k8s.io/kubernetes/pkg/client/record" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/proxy" proxyconfig "k8s.io/kubernetes/pkg/proxy/config" "k8s.io/kubernetes/pkg/proxy/iptables" diff --git a/cmd/kubeadm/app/discovery/BUILD b/cmd/kubeadm/app/discovery/BUILD index c3e9d8c8f70..5f4d4d85569 100644 --- a/cmd/kubeadm/app/discovery/BUILD +++ b/cmd/kubeadm/app/discovery/BUILD @@ -22,8 +22,8 @@ go_library( "//cmd/kubeadm/app/discovery/token:go_default_library", "//cmd/kubeadm/app/node:go_default_library", "//cmd/kubeadm/app/util:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//vendor:github.com/spf13/pflag", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/cmd/kubeadm/app/discovery/discovery.go b/cmd/kubeadm/app/discovery/discovery.go index 8a1d1d6cc88..7cf6178b445 100644 --- a/cmd/kubeadm/app/discovery/discovery.go +++ b/cmd/kubeadm/app/discovery/discovery.go @@ -21,11 +21,11 @@ import ( "io/ioutil" "net/http" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubenode "k8s.io/kubernetes/cmd/kubeadm/app/node" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) // For identifies and executes the desired discovery mechanism. diff --git a/cmd/kubeadm/app/master/BUILD b/cmd/kubeadm/app/master/BUILD index a7d3a811da6..9aba3152302 100644 --- a/cmd/kubeadm/app/master/BUILD +++ b/cmd/kubeadm/app/master/BUILD @@ -31,7 +31,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", "//pkg/util/intstr:go_default_library", @@ -41,6 +40,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/pkg/util/cert", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/cmd/kubeadm/app/master/apiclient.go b/cmd/kubeadm/app/master/apiclient.go index c36fa9c67c6..8bbe075674b 100644 --- a/cmd/kubeadm/app/master/apiclient.go +++ b/cmd/kubeadm/app/master/apiclient.go @@ -25,13 +25,13 @@ import ( apierrs "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/cmd/kubeadm/app/images" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) const apiCallRetryInterval = 500 * time.Millisecond diff --git a/cmd/kubeadm/app/node/BUILD b/cmd/kubeadm/app/node/BUILD index a30ecb5d868..2b10f0065a3 100644 --- a/cmd/kubeadm/app/node/BUILD +++ b/cmd/kubeadm/app/node/BUILD @@ -22,7 +22,6 @@ go_library( "//cmd/kubeadm/app/util:go_default_library", "//pkg/apis/certificates:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubelet/util/csr:go_default_library", "//vendor:github.com/square/go-jose", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -30,6 +29,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/pkg/util/cert", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/cmd/kubeadm/app/node/bootstrap.go b/cmd/kubeadm/app/node/bootstrap.go index b1fa25f58bc..9207e4d4a70 100644 --- a/cmd/kubeadm/app/node/bootstrap.go +++ b/cmd/kubeadm/app/node/bootstrap.go @@ -26,13 +26,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) // retryTimeout between the subsequent attempts to connect diff --git a/cmd/kubeadm/app/node/csr.go b/cmd/kubeadm/app/node/csr.go index c472440691d..65e0f72ab38 100644 --- a/cmd/kubeadm/app/node/csr.go +++ b/cmd/kubeadm/app/node/csr.go @@ -22,9 +22,9 @@ import ( "k8s.io/apimachinery/pkg/types" certutil "k8s.io/client-go/pkg/util/cert" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubelet/util/csr" ) diff --git a/cmd/kubeadm/app/phases/kubeconfig/BUILD b/cmd/kubeadm/app/phases/kubeconfig/BUILD index 796fe7db9f3..1fd03a9d656 100644 --- a/cmd/kubeadm/app/phases/kubeconfig/BUILD +++ b/cmd/kubeadm/app/phases/kubeconfig/BUILD @@ -26,8 +26,8 @@ go_library( deps = [ "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/phases/certs/pkiutil:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//vendor:k8s.io/client-go/pkg/util/cert", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go index 2adaf9a22e9..044021f238b 100644 --- a/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go +++ b/cmd/kubeadm/app/phases/kubeconfig/kubeconfig.go @@ -26,10 +26,10 @@ import ( "path/filepath" certutil "k8s.io/client-go/pkg/util/cert" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs/pkiutil" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) const ( diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index 8ce96840541..3f75e1776f9 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -47,8 +47,6 @@ go_library( "//pkg/client/clientset_generated/clientset/typed/certificates/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/record:go_default_library", - "//pkg/client/unversioned/auth:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers:go_default_library", "//pkg/credentialprovider:go_default_library", diff --git a/cmd/kubelet/app/bootstrap.go b/cmd/kubelet/app/bootstrap.go index 1d1ee9c27bd..96262065215 100644 --- a/cmd/kubelet/app/bootstrap.go +++ b/cmd/kubelet/app/bootstrap.go @@ -28,9 +28,9 @@ import ( "k8s.io/apimachinery/pkg/types" certutil "k8s.io/client-go/pkg/util/cert" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" certificates "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/certificates/v1beta1" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubelet/util/csr" ) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 1885d886c70..779eb6e28ae 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -47,6 +47,8 @@ import ( "k8s.io/client-go/pkg/util/cert" certutil "k8s.io/client-go/pkg/util/cert" restclient "k8s.io/client-go/rest" + clientauth "k8s.io/client-go/tools/auth" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api" @@ -58,8 +60,6 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/record" - clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/credentialprovider" "k8s.io/kubernetes/pkg/kubelet" diff --git a/cmd/kubemark/BUILD b/cmd/kubemark/BUILD index d0e1cbb3a72..a8ea9693330 100644 --- a/cmd/kubemark/BUILD +++ b/cmd/kubemark/BUILD @@ -24,7 +24,6 @@ go_library( "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/metrics/prometheus:go_default_library", "//pkg/client/record:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/dockertools:go_default_library", @@ -37,6 +36,7 @@ go_library( "//vendor:github.com/spf13/pflag", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/cmd/kubemark/hollow-node.go b/cmd/kubemark/hollow-node.go index 31effc693c5..42d2287e7ba 100644 --- a/cmd/kubemark/hollow-node.go +++ b/cmd/kubemark/hollow-node.go @@ -21,12 +21,12 @@ import ( "k8s.io/apimachinery/pkg/util/sets" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration "k8s.io/kubernetes/pkg/client/record" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/dockertools" diff --git a/federation/cmd/federation-controller-manager/app/BUILD b/federation/cmd/federation-controller-manager/app/BUILD index 4fd50233878..4bd67337647 100644 --- a/federation/cmd/federation-controller-manager/app/BUILD +++ b/federation/cmd/federation-controller-manager/app/BUILD @@ -33,7 +33,6 @@ go_library( "//federation/pkg/federation-controller/service:go_default_library", "//federation/pkg/federation-controller/util:go_default_library", "//pkg/client/typed/discovery:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/util/config:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/version:go_default_library", @@ -46,6 +45,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apiserver/pkg/server/healthz", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/federation/cmd/federation-controller-manager/app/controllermanager.go b/federation/cmd/federation-controller-manager/app/controllermanager.go index 9ff7b19efaf..a153753c71f 100644 --- a/federation/cmd/federation-controller-manager/app/controllermanager.go +++ b/federation/cmd/federation-controller-manager/app/controllermanager.go @@ -30,6 +30,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options" "k8s.io/kubernetes/federation/pkg/dnsprovider" @@ -43,7 +44,6 @@ import ( secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" servicecontroller "k8s.io/kubernetes/federation/pkg/federation-controller/service" "k8s.io/kubernetes/federation/pkg/federation-controller/util" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/pkg/version" diff --git a/federation/pkg/federation-controller/cluster/BUILD b/federation/pkg/federation-controller/cluster/BUILD index a3c6e790ff8..00d568f40d6 100644 --- a/federation/pkg/federation-controller/cluster/BUILD +++ b/federation/pkg/federation-controller/cluster/BUILD @@ -49,10 +49,10 @@ go_test( "//federation/pkg/federation-controller/util:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/util/uuid:go_default_library", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/federation/pkg/federation-controller/cluster/clustercontroller_test.go b/federation/pkg/federation-controller/cluster/clustercontroller_test.go index ac1eeea1acd..44dcce1f6ef 100644 --- a/federation/pkg/federation-controller/cluster/clustercontroller_test.go +++ b/federation/pkg/federation-controller/cluster/clustercontroller_test.go @@ -25,13 +25,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" federationv1beta1 "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" controllerutil "k8s.io/kubernetes/federation/pkg/federation-controller/util" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/util/uuid" ) diff --git a/federation/pkg/federation-controller/util/BUILD b/federation/pkg/federation-controller/util/BUILD index 810ccbd28c8..936d08be354 100644 --- a/federation/pkg/federation-controller/util/BUILD +++ b/federation/pkg/federation-controller/util/BUILD @@ -33,7 +33,6 @@ go_library( "//pkg/client/cache:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/controller/deployment/util:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", @@ -43,6 +42,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/client-go/pkg/util/flowcontrol", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/federation/pkg/federation-controller/util/cluster_util.go b/federation/pkg/federation-controller/util/cluster_util.go index 6c78485746a..7a575773167 100644 --- a/federation/pkg/federation-controller/util/cluster_util.go +++ b/federation/pkg/federation-controller/util/cluster_util.go @@ -27,12 +27,12 @@ import ( utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/wait" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" federation_v1beta1 "k8s.io/kubernetes/federation/apis/federation/v1beta1" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/pkg/api" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) const ( diff --git a/federation/pkg/kubefed/BUILD b/federation/pkg/kubefed/BUILD index 2cb399e7fa0..d39c87dac00 100644 --- a/federation/pkg/kubefed/BUILD +++ b/federation/pkg/kubefed/BUILD @@ -21,7 +21,6 @@ go_library( "//federation/pkg/kubefed/init:go_default_library", "//federation/pkg/kubefed/util:go_default_library", "//pkg/api:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library", @@ -33,6 +32,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/runtime/schema", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) @@ -55,12 +55,12 @@ go_test( "//pkg/api/v1:go_default_library", "//pkg/client/restclient/fake:go_default_library", "//pkg/client/typed/dynamic:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/diff", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/federation/pkg/kubefed/init/BUILD b/federation/pkg/kubefed/init/BUILD index c5ea9b1a05a..34616819a1e 100644 --- a/federation/pkg/kubefed/init/BUILD +++ b/federation/pkg/kubefed/init/BUILD @@ -19,7 +19,6 @@ go_library( "//pkg/api/resource:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/util/intstr:go_default_library", @@ -29,6 +28,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/pkg/util/cert", "//vendor:k8s.io/client-go/pkg/util/cert/triple", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) @@ -48,13 +48,13 @@ go_test( "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/restclient/fake:go_default_library", "//pkg/client/typed/dynamic:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/util/intstr:go_default_library", "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/diff", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/federation/pkg/kubefed/init/init.go b/federation/pkg/kubefed/init/init.go index f658968af50..f2d793b2ffb 100644 --- a/federation/pkg/kubefed/init/init.go +++ b/federation/pkg/kubefed/init/init.go @@ -40,6 +40,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" certutil "k8s.io/client-go/pkg/util/cert" triple "k8s.io/client-go/pkg/util/cert/triple" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" kubeadmkubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" "k8s.io/kubernetes/federation/pkg/kubefed/util" @@ -47,7 +48,6 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/apis/extensions" client "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/intstr" diff --git a/federation/pkg/kubefed/init/init_test.go b/federation/pkg/kubefed/init/init_test.go index 7c4352b7d46..660bf1011eb 100644 --- a/federation/pkg/kubefed/init/init_test.go +++ b/federation/pkg/kubefed/init/init_test.go @@ -33,6 +33,7 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/client-go/tools/clientcmd" kubefedtesting "k8s.io/kubernetes/federation/pkg/kubefed/testing" "k8s.io/kubernetes/federation/pkg/kubefed/util" "k8s.io/kubernetes/pkg/api" @@ -42,7 +43,6 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/restclient/fake" "k8s.io/kubernetes/pkg/client/typed/dynamic" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/intstr" diff --git a/federation/pkg/kubefed/join_test.go b/federation/pkg/kubefed/join_test.go index d5691f382a3..0bd75448ab0 100644 --- a/federation/pkg/kubefed/join_test.go +++ b/federation/pkg/kubefed/join_test.go @@ -25,6 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" kubefedtesting "k8s.io/kubernetes/federation/pkg/kubefed/testing" @@ -34,7 +35,6 @@ import ( "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/restclient/fake" "k8s.io/kubernetes/pkg/client/typed/dynamic" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/federation/pkg/kubefed/kubefed.go b/federation/pkg/kubefed/kubefed.go index df9bf9793e8..9e0a40de540 100644 --- a/federation/pkg/kubefed/kubefed.go +++ b/federation/pkg/kubefed/kubefed.go @@ -19,9 +19,9 @@ package kubefed import ( "io" + "k8s.io/client-go/tools/clientcmd" kubefedinit "k8s.io/kubernetes/federation/pkg/kubefed/init" "k8s.io/kubernetes/federation/pkg/kubefed/util" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" kubectl "k8s.io/kubernetes/pkg/kubectl/cmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" diff --git a/federation/pkg/kubefed/testing/BUILD b/federation/pkg/kubefed/testing/BUILD index 63060583c91..326f5bfeac5 100644 --- a/federation/pkg/kubefed/testing/BUILD +++ b/federation/pkg/kubefed/testing/BUILD @@ -15,10 +15,10 @@ go_library( "//federation/client/clientset_generated/federation_clientset:go_default_library", "//federation/pkg/kubefed/util:go_default_library", "//pkg/api:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/federation/pkg/kubefed/testing/testing.go b/federation/pkg/kubefed/testing/testing.go index c615135750d..884d9c58e82 100644 --- a/federation/pkg/kubefed/testing/testing.go +++ b/federation/pkg/kubefed/testing/testing.go @@ -25,11 +25,11 @@ import ( "k8s.io/apimachinery/pkg/runtime" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" fedclient "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/federation/pkg/kubefed/util" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/federation/pkg/kubefed/util/BUILD b/federation/pkg/kubefed/util/BUILD index 7af319491de..0e1778233a4 100644 --- a/federation/pkg/kubefed/util/BUILD +++ b/federation/pkg/kubefed/util/BUILD @@ -15,11 +15,11 @@ go_library( "//federation/client/clientset_generated/federation_clientset:go_default_library", "//pkg/api:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//vendor:github.com/spf13/cobra", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/federation/pkg/kubefed/util/util.go b/federation/pkg/kubefed/util/util.go index 433b5323e6c..cf0ea426f82 100644 --- a/federation/pkg/kubefed/util/util.go +++ b/federation/pkg/kubefed/util/util.go @@ -18,11 +18,11 @@ package util import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" fedclient "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/pkg/api" client "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" kubectlcmd "k8s.io/kubernetes/pkg/kubectl/cmd" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" diff --git a/pkg/client/unversioned/BUILD b/pkg/client/unversioned/BUILD index 07ca472a2f3..de8a9ebcaa6 100644 --- a/pkg/client/unversioned/BUILD +++ b/pkg/client/unversioned/BUILD @@ -60,8 +60,6 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//pkg/client/unversioned/auth:all-srcs", - "//pkg/client/unversioned/clientcmd:all-srcs", "//pkg/client/unversioned/portforward:all-srcs", "//pkg/client/unversioned/remotecommand:all-srcs", "//pkg/client/unversioned/testclient/simple:all-srcs", diff --git a/pkg/client/unversioned/auth/BUILD b/pkg/client/unversioned/auth/BUILD deleted file mode 100644 index eb351c89feb..00000000000 --- a/pkg/client/unversioned/auth/BUILD +++ /dev/null @@ -1,36 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = ["clientauth.go"], - tags = ["automanaged"], - deps = ["//vendor:k8s.io/client-go/rest"], -) - -go_test( - name = "go_default_xtest", - srcs = ["clientauth_test.go"], - tags = ["automanaged"], - deps = ["//pkg/client/unversioned/auth:go_default_library"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/pkg/client/unversioned/auth/clientauth.go b/pkg/client/unversioned/auth/clientauth.go deleted file mode 100644 index 2213b987816..00000000000 --- a/pkg/client/unversioned/auth/clientauth.go +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/* -Package auth defines a file format for holding authentication -information needed by clients of Kubernetes. Typically, -a Kubernetes cluster will put auth info for the admin in a known -location when it is created, and will (soon) put it in a known -location within a Container's file tree for Containers that -need access to the Kubernetes API. - -Having a defined format allows: - - clients to be implmented in multiple languages - - applications which link clients to be portable across - clusters with different authentication styles (e.g. - some may use SSL Client certs, others may not, etc) - - when the format changes, applications only - need to update this code. - -The file format is json, marshalled from a struct authcfg.Info. - -Clinet libraries in other languages should use the same format. - -It is not intended to store general preferences, such as default -namespace, output options, etc. CLIs (such as kubectl) and UIs should -develop their own format and may wish to inline the authcfg.Info type. - -The authcfg.Info is just a file format. It is distinct from -client.Config which holds options for creating a client.Client. -Helper functions are provided in this package to fill in a -client.Client from an authcfg.Info. - -Example: - - import ( - "pkg/client" - "pkg/client/auth" - ) - - info, err := auth.LoadFromFile(filename) - if err != nil { - // handle error - } - clientConfig = client.Config{} - clientConfig.Host = "example.com:4901" - clientConfig = info.MergeWithConfig() - client := client.New(clientConfig) - client.Pods(ns).List() -*/ -package auth - -// TODO: need a way to rotate Tokens. Therefore, need a way for client object to be reset when the authcfg is updated. -import ( - "encoding/json" - "io/ioutil" - "os" - - restclient "k8s.io/client-go/rest" -) - -// Info holds Kubernetes API authorization config. It is intended -// to be read/written from a file as a JSON object. -type Info struct { - User string - Password string - CAFile string - CertFile string - KeyFile string - BearerToken string - Insecure *bool -} - -// LoadFromFile parses an Info object from a file path. -// If the file does not exist, then os.IsNotExist(err) == true -func LoadFromFile(path string) (*Info, error) { - var info Info - if _, err := os.Stat(path); os.IsNotExist(err) { - return nil, err - } - data, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - err = json.Unmarshal(data, &info) - if err != nil { - return nil, err - } - return &info, err -} - -// MergeWithConfig returns a copy of a client.Config with values from the Info. -// The fields of client.Config with a corresponding field in the Info are set -// with the value from the Info. -func (info Info) MergeWithConfig(c restclient.Config) (restclient.Config, error) { - var config restclient.Config = c - config.Username = info.User - config.Password = info.Password - config.CAFile = info.CAFile - config.CertFile = info.CertFile - config.KeyFile = info.KeyFile - config.BearerToken = info.BearerToken - if info.Insecure != nil { - config.Insecure = *info.Insecure - } - return config, nil -} - -func (info Info) Complete() bool { - return len(info.User) > 0 || - len(info.CertFile) > 0 || - len(info.BearerToken) > 0 -} diff --git a/pkg/client/unversioned/auth/clientauth_test.go b/pkg/client/unversioned/auth/clientauth_test.go deleted file mode 100644 index 03bf6a52f14..00000000000 --- a/pkg/client/unversioned/auth/clientauth_test.go +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package auth_test - -import ( - "io/ioutil" - "os" - "reflect" - "testing" - - clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth" -) - -func TestLoadFromFile(t *testing.T) { - loadAuthInfoTests := []struct { - authData string - authInfo *clientauth.Info - expectErr bool - }{ - { - `{"user": "user", "password": "pass"}`, - &clientauth.Info{User: "user", Password: "pass"}, - false, - }, - { - "", nil, true, - }, - } - for _, loadAuthInfoTest := range loadAuthInfoTests { - tt := loadAuthInfoTest - aifile, err := ioutil.TempFile("", "testAuthInfo") - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - if tt.authData != "missing" { - defer os.Remove(aifile.Name()) - defer aifile.Close() - _, err = aifile.WriteString(tt.authData) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - } else { - aifile.Close() - os.Remove(aifile.Name()) - } - authInfo, err := clientauth.LoadFromFile(aifile.Name()) - gotErr := err != nil - if gotErr != tt.expectErr { - t.Errorf("expected errorness: %v, actual errorness: %v", tt.expectErr, gotErr) - } - if !reflect.DeepEqual(authInfo, tt.authInfo) { - t.Errorf("Expected %v, got %v", tt.authInfo, authInfo) - } - } -} diff --git a/pkg/client/unversioned/clientcmd/BUILD b/pkg/client/unversioned/clientcmd/BUILD deleted file mode 100644 index d97075135c3..00000000000 --- a/pkg/client/unversioned/clientcmd/BUILD +++ /dev/null @@ -1,75 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "auth_loaders.go", - "client_config.go", - "config.go", - "doc.go", - "helpers.go", - "loader.go", - "merged_client_builder.go", - "overrides.go", - "validation.go", - ], - tags = ["automanaged"], - deps = [ - "//pkg/api:go_default_library", - "//pkg/client/unversioned/auth:go_default_library", - "//pkg/util/homedir:go_default_library", - "//vendor:github.com/golang/glog", - "//vendor:github.com/howeyc/gopass", - "//vendor:github.com/imdario/mergo", - "//vendor:github.com/spf13/pflag", - "//vendor:k8s.io/apimachinery/pkg/runtime", - "//vendor:k8s.io/apimachinery/pkg/runtime/schema", - "//vendor:k8s.io/apimachinery/pkg/util/errors", - "//vendor:k8s.io/apimachinery/pkg/util/validation", - "//vendor:k8s.io/client-go/rest", - "//vendor:k8s.io/client-go/tools/clientcmd/api", - "//vendor:k8s.io/client-go/tools/clientcmd/api/latest", - ], -) - -go_test( - name = "go_default_test", - srcs = [ - "client_config_test.go", - "loader_test.go", - "merged_client_builder_test.go", - "validation_test.go", - ], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//vendor:github.com/ghodss/yaml", - "//vendor:github.com/imdario/mergo", - "//vendor:k8s.io/apimachinery/pkg/runtime", - "//vendor:k8s.io/apimachinery/pkg/util/errors", - "//vendor:k8s.io/client-go/rest", - "//vendor:k8s.io/client-go/tools/clientcmd/api", - "//vendor:k8s.io/client-go/tools/clientcmd/api/latest", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/pkg/client/unversioned/clientcmd/auth_loaders.go b/pkg/client/unversioned/clientcmd/auth_loaders.go deleted file mode 100644 index 1e7c1159e4b..00000000000 --- a/pkg/client/unversioned/clientcmd/auth_loaders.go +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "encoding/json" - "fmt" - "io" - "io/ioutil" - "os" - - "github.com/howeyc/gopass" - clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth" -) - -// AuthLoaders are used to build clientauth.Info objects. -type AuthLoader interface { - // LoadAuth takes a path to a config file and can then do anything it needs in order to return a valid clientauth.Info - LoadAuth(path string) (*clientauth.Info, error) -} - -// default implementation of an AuthLoader -type defaultAuthLoader struct{} - -// LoadAuth for defaultAuthLoader simply delegates to clientauth.LoadFromFile -func (*defaultAuthLoader) LoadAuth(path string) (*clientauth.Info, error) { - return clientauth.LoadFromFile(path) -} - -type PromptingAuthLoader struct { - reader io.Reader -} - -// LoadAuth parses an AuthInfo object from a file path. It prompts user and creates file if it doesn't exist. -func (a *PromptingAuthLoader) LoadAuth(path string) (*clientauth.Info, error) { - // Prompt for user/pass and write a file if none exists. - if _, err := os.Stat(path); os.IsNotExist(err) { - authPtr, err := a.Prompt() - auth := *authPtr - if err != nil { - return nil, err - } - data, err := json.Marshal(auth) - if err != nil { - return &auth, err - } - err = ioutil.WriteFile(path, data, 0600) - return &auth, err - } - authPtr, err := clientauth.LoadFromFile(path) - if err != nil { - return nil, err - } - return authPtr, nil -} - -// Prompt pulls the user and password from a reader -func (a *PromptingAuthLoader) Prompt() (*clientauth.Info, error) { - var err error - auth := &clientauth.Info{} - auth.User, err = promptForString("Username", a.reader, true) - if err != nil { - return nil, err - } - auth.Password, err = promptForString("Password", nil, false) - if err != nil { - return nil, err - } - return auth, nil -} - -func promptForString(field string, r io.Reader, show bool) (result string, err error) { - fmt.Printf("Please enter %s: ", field) - if show { - _, err = fmt.Fscan(r, &result) - } else { - var data []byte - data, err = gopass.GetPasswdMasked() - result = string(data) - } - return result, err -} - -// NewPromptingAuthLoader is an AuthLoader that parses an AuthInfo object from a file path. It prompts user and creates file if it doesn't exist. -func NewPromptingAuthLoader(reader io.Reader) *PromptingAuthLoader { - return &PromptingAuthLoader{reader} -} - -// NewDefaultAuthLoader returns a default implementation of an AuthLoader that only reads from a config file -func NewDefaultAuthLoader() AuthLoader { - return &defaultAuthLoader{} -} diff --git a/pkg/client/unversioned/clientcmd/client_config.go b/pkg/client/unversioned/clientcmd/client_config.go deleted file mode 100644 index 4185b23d841..00000000000 --- a/pkg/client/unversioned/clientcmd/client_config.go +++ /dev/null @@ -1,537 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "fmt" - "io" - "io/ioutil" - "net/url" - "os" - "strings" - - "github.com/golang/glog" - "github.com/imdario/mergo" - - restclient "k8s.io/client-go/rest" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/api" - clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth" -) - -var ( - // ClusterDefaults has the same behavior as the old EnvVar and DefaultCluster fields - // DEPRECATED will be replaced - ClusterDefaults = clientcmdapi.Cluster{Server: getDefaultServer()} - // DefaultClientConfig represents the legacy behavior of this package for defaulting - // DEPRECATED will be replace - DefaultClientConfig = DirectClientConfig{*clientcmdapi.NewConfig(), "", &ConfigOverrides{ - ClusterDefaults: ClusterDefaults, - }, nil, NewDefaultClientConfigLoadingRules(), promptedCredentials{}} -) - -// getDefaultServer returns a default setting for DefaultClientConfig -// DEPRECATED -func getDefaultServer() string { - if server := os.Getenv("KUBERNETES_MASTER"); len(server) > 0 { - return server - } - return "http://localhost:8080" -} - -// ClientConfig is used to make it easy to get an api server client -type ClientConfig interface { - // RawConfig returns the merged result of all overrides - RawConfig() (clientcmdapi.Config, error) - // ClientConfig returns a complete client config - ClientConfig() (*restclient.Config, error) - // Namespace returns the namespace resulting from the merged - // result of all overrides and a boolean indicating if it was - // overridden - Namespace() (string, bool, error) - // ConfigAccess returns the rules for loading/persisting the config. - ConfigAccess() ConfigAccess -} - -type PersistAuthProviderConfigForUser func(user string) restclient.AuthProviderConfigPersister - -type promptedCredentials struct { - username string - password string -} - -// DirectClientConfig is a ClientConfig interface that is backed by a clientcmdapi.Config, options overrides, and an optional fallbackReader for auth information -type DirectClientConfig struct { - config clientcmdapi.Config - contextName string - overrides *ConfigOverrides - fallbackReader io.Reader - configAccess ConfigAccess - // promptedCredentials store the credentials input by the user - promptedCredentials promptedCredentials -} - -// NewDefaultClientConfig creates a DirectClientConfig using the config.CurrentContext as the context name -func NewDefaultClientConfig(config clientcmdapi.Config, overrides *ConfigOverrides) ClientConfig { - return &DirectClientConfig{config, config.CurrentContext, overrides, nil, NewDefaultClientConfigLoadingRules(), promptedCredentials{}} -} - -// NewNonInteractiveClientConfig creates a DirectClientConfig using the passed context name and does not have a fallback reader for auth information -func NewNonInteractiveClientConfig(config clientcmdapi.Config, contextName string, overrides *ConfigOverrides, configAccess ConfigAccess) ClientConfig { - return &DirectClientConfig{config, contextName, overrides, nil, configAccess, promptedCredentials{}} -} - -// NewInteractiveClientConfig creates a DirectClientConfig using the passed context name and a reader in case auth information is not provided via files or flags -func NewInteractiveClientConfig(config clientcmdapi.Config, contextName string, overrides *ConfigOverrides, fallbackReader io.Reader, configAccess ConfigAccess) ClientConfig { - return &DirectClientConfig{config, contextName, overrides, fallbackReader, configAccess, promptedCredentials{}} -} - -func (config *DirectClientConfig) RawConfig() (clientcmdapi.Config, error) { - return config.config, nil -} - -// ClientConfig implements ClientConfig -func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { - // check that getAuthInfo, getContext, and getCluster do not return an error. - // Do this before checking if the curent config is usable in the event that an - // AuthInfo, Context, or Cluster config with user-defined names are not found. - // This provides a user with the immediate cause for error if one is found - configAuthInfo, err := config.getAuthInfo() - if err != nil { - return nil, err - } - - _, err = config.getContext() - if err != nil { - return nil, err - } - - configClusterInfo, err := config.getCluster() - if err != nil { - return nil, err - } - - if err := config.ConfirmUsable(); err != nil { - return nil, err - } - - clientConfig := &restclient.Config{} - clientConfig.Host = configClusterInfo.Server - - if len(config.overrides.Timeout) > 0 { - timeout, err := ParseTimeout(config.overrides.Timeout) - if err != nil { - return nil, err - } - clientConfig.Timeout = timeout - } - - if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 { - u.RawQuery = "" - u.Fragment = "" - clientConfig.Host = u.String() - } - if len(configAuthInfo.Impersonate) > 0 { - clientConfig.Impersonate = restclient.ImpersonationConfig{UserName: configAuthInfo.Impersonate} - } - - // only try to read the auth information if we are secure - if restclient.IsConfigTransportTLS(*clientConfig) { - var err error - - // mergo is a first write wins for map value and a last writing wins for interface values - // NOTE: This behavior changed with https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a. - // Our mergo.Merge version is older than this change. - var persister restclient.AuthProviderConfigPersister - if config.configAccess != nil { - authInfoName, _ := config.getAuthInfoName() - persister = PersisterForUser(config.configAccess, authInfoName) - } - userAuthPartialConfig, err := config.getUserIdentificationPartialConfig(configAuthInfo, config.fallbackReader, persister) - if err != nil { - return nil, err - } - mergo.Merge(clientConfig, userAuthPartialConfig) - - serverAuthPartialConfig, err := getServerIdentificationPartialConfig(configAuthInfo, configClusterInfo) - if err != nil { - return nil, err - } - mergo.Merge(clientConfig, serverAuthPartialConfig) - } - - return clientConfig, nil -} - -// clientauth.Info object contain both user identification and server identification. We want different precedence orders for -// both, so we have to split the objects and merge them separately -// we want this order of precedence for the server identification -// 1. configClusterInfo (the final result of command line flags and merged .kubeconfig files) -// 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority) -// 3. load the ~/.kubernetes_auth file as a default -func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClusterInfo clientcmdapi.Cluster) (*restclient.Config, error) { - mergedConfig := &restclient.Config{} - - // configClusterInfo holds the information identify the server provided by .kubeconfig - configClientConfig := &restclient.Config{} - configClientConfig.CAFile = configClusterInfo.CertificateAuthority - configClientConfig.CAData = configClusterInfo.CertificateAuthorityData - configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify - mergo.Merge(mergedConfig, configClientConfig) - - return mergedConfig, nil -} - -// clientauth.Info object contain both user identification and server identification. We want different precedence orders for -// both, so we have to split the objects and merge them separately -// we want this order of precedence for user identifcation -// 1. configAuthInfo minus auth-path (the final result of command line flags and merged .kubeconfig files) -// 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority) -// 3. if there is not enough information to idenfity the user, load try the ~/.kubernetes_auth file -// 4. if there is not enough information to identify the user, prompt if possible -func (config *DirectClientConfig) getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fallbackReader io.Reader, persistAuthConfig restclient.AuthProviderConfigPersister) (*restclient.Config, error) { - mergedConfig := &restclient.Config{} - - // blindly overwrite existing values based on precedence - if len(configAuthInfo.Token) > 0 { - mergedConfig.BearerToken = configAuthInfo.Token - } else if len(configAuthInfo.TokenFile) > 0 { - tokenBytes, err := ioutil.ReadFile(configAuthInfo.TokenFile) - if err != nil { - return nil, err - } - mergedConfig.BearerToken = string(tokenBytes) - } - if len(configAuthInfo.Impersonate) > 0 { - mergedConfig.Impersonate = restclient.ImpersonationConfig{UserName: configAuthInfo.Impersonate} - } - if len(configAuthInfo.ClientCertificate) > 0 || len(configAuthInfo.ClientCertificateData) > 0 { - mergedConfig.CertFile = configAuthInfo.ClientCertificate - mergedConfig.CertData = configAuthInfo.ClientCertificateData - mergedConfig.KeyFile = configAuthInfo.ClientKey - mergedConfig.KeyData = configAuthInfo.ClientKeyData - } - if len(configAuthInfo.Username) > 0 || len(configAuthInfo.Password) > 0 { - mergedConfig.Username = configAuthInfo.Username - mergedConfig.Password = configAuthInfo.Password - } - if configAuthInfo.AuthProvider != nil { - mergedConfig.AuthProvider = configAuthInfo.AuthProvider - mergedConfig.AuthConfigPersister = persistAuthConfig - } - - // if there still isn't enough information to authenticate the user, try prompting - if !canIdentifyUser(*mergedConfig) && (fallbackReader != nil) { - if len(config.promptedCredentials.username) > 0 && len(config.promptedCredentials.password) > 0 { - mergedConfig.Username = config.promptedCredentials.username - mergedConfig.Password = config.promptedCredentials.password - return mergedConfig, nil - } - prompter := NewPromptingAuthLoader(fallbackReader) - promptedAuthInfo, err := prompter.Prompt() - if err != nil { - return nil, err - } - promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo) - previouslyMergedConfig := mergedConfig - mergedConfig = &restclient.Config{} - mergo.Merge(mergedConfig, promptedConfig) - mergo.Merge(mergedConfig, previouslyMergedConfig) - config.promptedCredentials.username = mergedConfig.Username - config.promptedCredentials.password = mergedConfig.Password - } - - return mergedConfig, nil -} - -// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only user identification information -func makeUserIdentificationConfig(info clientauth.Info) *restclient.Config { - config := &restclient.Config{} - config.Username = info.User - config.Password = info.Password - config.CertFile = info.CertFile - config.KeyFile = info.KeyFile - config.BearerToken = info.BearerToken - return config -} - -// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information -func makeServerIdentificationConfig(info clientauth.Info) restclient.Config { - config := restclient.Config{} - config.CAFile = info.CAFile - if info.Insecure != nil { - config.Insecure = *info.Insecure - } - return config -} - -func canIdentifyUser(config restclient.Config) bool { - return len(config.Username) > 0 || - (len(config.CertFile) > 0 || len(config.CertData) > 0) || - len(config.BearerToken) > 0 || - config.AuthProvider != nil -} - -// Namespace implements ClientConfig -func (config *DirectClientConfig) Namespace() (string, bool, error) { - if err := config.ConfirmUsable(); err != nil { - return "", false, err - } - - configContext, err := config.getContext() - if err != nil { - return "", false, err - } - - if len(configContext.Namespace) == 0 { - return api.NamespaceDefault, false, nil - } - - overridden := false - if config.overrides != nil && config.overrides.Context.Namespace != "" { - overridden = true - } - return configContext.Namespace, overridden, nil -} - -// ConfigAccess implements ClientConfig -func (config *DirectClientConfig) ConfigAccess() ConfigAccess { - return config.configAccess -} - -// ConfirmUsable looks a particular context and determines if that particular part of the config is useable. There might still be errors in the config, -// but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible. -func (config *DirectClientConfig) ConfirmUsable() error { - validationErrors := make([]error, 0) - - var contextName string - if len(config.contextName) != 0 { - contextName = config.contextName - } else { - contextName = config.config.CurrentContext - } - - if len(contextName) > 0 { - _, exists := config.config.Contexts[contextName] - if !exists { - validationErrors = append(validationErrors, &errContextNotFound{contextName}) - } - } - - authInfoName, _ := config.getAuthInfoName() - authInfo, _ := config.getAuthInfo() - validationErrors = append(validationErrors, validateAuthInfo(authInfoName, authInfo)...) - clusterName, _ := config.getClusterName() - cluster, _ := config.getCluster() - validationErrors = append(validationErrors, validateClusterInfo(clusterName, cluster)...) - // when direct client config is specified, and our only error is that no server is defined, we should - // return a standard "no config" error - if len(validationErrors) == 1 && validationErrors[0] == ErrEmptyCluster { - return newErrConfigurationInvalid([]error{ErrEmptyConfig}) - } - return newErrConfigurationInvalid(validationErrors) -} - -// getContextName returns the default, or user-set context name, and a boolean that indicates -// whether the default context name has been overwritten by a user-set flag, or left as its default value -func (config *DirectClientConfig) getContextName() (string, bool) { - if len(config.overrides.CurrentContext) != 0 { - return config.overrides.CurrentContext, true - } - if len(config.contextName) != 0 { - return config.contextName, false - } - - return config.config.CurrentContext, false -} - -// getAuthInfoName returns a string containing the current authinfo name for the current context, -// and a boolean indicating whether the default authInfo name is overwritten by a user-set flag, or -// left as its default value -func (config *DirectClientConfig) getAuthInfoName() (string, bool) { - if len(config.overrides.Context.AuthInfo) != 0 { - return config.overrides.Context.AuthInfo, true - } - context, _ := config.getContext() - return context.AuthInfo, false -} - -// getClusterName returns a string containing the default, or user-set cluster name, and a boolean -// indicating whether the default clusterName has been overwritten by a user-set flag, or left as -// its default value -func (config *DirectClientConfig) getClusterName() (string, bool) { - if len(config.overrides.Context.Cluster) != 0 { - return config.overrides.Context.Cluster, true - } - context, _ := config.getContext() - return context.Cluster, false -} - -// getContext returns the clientcmdapi.Context, or an error if a required context is not found. -func (config *DirectClientConfig) getContext() (clientcmdapi.Context, error) { - contexts := config.config.Contexts - contextName, required := config.getContextName() - - var mergedContext clientcmdapi.Context - if configContext, exists := contexts[contextName]; exists { - mergo.Merge(&mergedContext, configContext) - } else if required { - return clientcmdapi.Context{}, fmt.Errorf("context %q does not exist", contextName) - } - mergo.Merge(&mergedContext, config.overrides.Context) - - return mergedContext, nil -} - -// getAuthInfo returns the clientcmdapi.AuthInfo, or an error if a required auth info is not found. -func (config *DirectClientConfig) getAuthInfo() (clientcmdapi.AuthInfo, error) { - authInfos := config.config.AuthInfos - authInfoName, required := config.getAuthInfoName() - - var mergedAuthInfo clientcmdapi.AuthInfo - if configAuthInfo, exists := authInfos[authInfoName]; exists { - mergo.Merge(&mergedAuthInfo, configAuthInfo) - } else if required { - return clientcmdapi.AuthInfo{}, fmt.Errorf("auth info %q does not exist", authInfoName) - } - mergo.Merge(&mergedAuthInfo, config.overrides.AuthInfo) - - return mergedAuthInfo, nil -} - -// getCluster returns the clientcmdapi.Cluster, or an error if a required cluster is not found. -func (config *DirectClientConfig) getCluster() (clientcmdapi.Cluster, error) { - clusterInfos := config.config.Clusters - clusterInfoName, required := config.getClusterName() - - var mergedClusterInfo clientcmdapi.Cluster - mergo.Merge(&mergedClusterInfo, config.overrides.ClusterDefaults) - if configClusterInfo, exists := clusterInfos[clusterInfoName]; exists { - mergo.Merge(&mergedClusterInfo, configClusterInfo) - } else if required { - return clientcmdapi.Cluster{}, fmt.Errorf("cluster %q does not exist", clusterInfoName) - } - mergo.Merge(&mergedClusterInfo, config.overrides.ClusterInfo) - // An override of --insecure-skip-tls-verify=true and no accompanying CA/CA data should clear already-set CA/CA data - // otherwise, a kubeconfig containing a CA reference would return an error that "CA and insecure-skip-tls-verify couldn't both be set" - caLen := len(config.overrides.ClusterInfo.CertificateAuthority) - caDataLen := len(config.overrides.ClusterInfo.CertificateAuthorityData) - if config.overrides.ClusterInfo.InsecureSkipTLSVerify && caLen == 0 && caDataLen == 0 { - mergedClusterInfo.CertificateAuthority = "" - mergedClusterInfo.CertificateAuthorityData = nil - } - - return mergedClusterInfo, nil -} - -// inClusterClientConfig makes a config that will work from within a kubernetes cluster container environment. -// Can take options overrides for flags explicitly provided to the command inside the cluster container. -type inClusterClientConfig struct { - overrides *ConfigOverrides - inClusterConfigProvider func() (*restclient.Config, error) -} - -var _ ClientConfig = &inClusterClientConfig{} - -func (config *inClusterClientConfig) RawConfig() (clientcmdapi.Config, error) { - return clientcmdapi.Config{}, fmt.Errorf("inCluster environment config doesn't support multiple clusters") -} - -func (config *inClusterClientConfig) ClientConfig() (*restclient.Config, error) { - if config.inClusterConfigProvider == nil { - config.inClusterConfigProvider = restclient.InClusterConfig - } - - icc, err := config.inClusterConfigProvider() - if err != nil { - return nil, err - } - - // in-cluster configs only takes a host, token, or CA file - // if any of them were individually provided, ovewrite anything else - if config.overrides != nil { - if server := config.overrides.ClusterInfo.Server; len(server) > 0 { - icc.Host = server - } - if token := config.overrides.AuthInfo.Token; len(token) > 0 { - icc.BearerToken = token - } - if certificateAuthorityFile := config.overrides.ClusterInfo.CertificateAuthority; len(certificateAuthorityFile) > 0 { - icc.TLSClientConfig.CAFile = certificateAuthorityFile - } - } - - return icc, err -} - -func (config *inClusterClientConfig) Namespace() (string, bool, error) { - // This way assumes you've set the POD_NAMESPACE environment variable using the downward API. - // This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up - if ns := os.Getenv("POD_NAMESPACE"); ns != "" { - return ns, true, nil - } - - // Fall back to the namespace associated with the service account token, if available - if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil { - if ns := strings.TrimSpace(string(data)); len(ns) > 0 { - return ns, true, nil - } - } - - return "default", false, nil -} - -func (config *inClusterClientConfig) ConfigAccess() ConfigAccess { - return NewDefaultClientConfigLoadingRules() -} - -// Possible returns true if loading an inside-kubernetes-cluster is possible. -func (config *inClusterClientConfig) Possible() bool { - fi, err := os.Stat("/var/run/secrets/kubernetes.io/serviceaccount/token") - return os.Getenv("KUBERNETES_SERVICE_HOST") != "" && - os.Getenv("KUBERNETES_SERVICE_PORT") != "" && - err == nil && !fi.IsDir() -} - -// BuildConfigFromFlags is a helper function that builds configs from a master -// url or a kubeconfig filepath. These are passed in as command line flags for cluster -// components. Warnings should reflect this usage. If neither masterUrl or kubeconfigPath -// are passed in we fallback to inClusterConfig. If inClusterConfig fails, we fallback -// to the default config. -func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*restclient.Config, error) { - if kubeconfigPath == "" && masterUrl == "" { - glog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.") - kubeconfig, err := restclient.InClusterConfig() - if err == nil { - return kubeconfig, nil - } - glog.Warning("error creating inClusterConfig, falling back to default config: ", err) - } - return NewNonInteractiveDeferredLoadingClientConfig( - &ClientConfigLoadingRules{ExplicitPath: kubeconfigPath}, - &ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: masterUrl}}).ClientConfig() -} - -// BuildConfigFromKubeconfigGetter is a helper function that builds configs from a master -// url and a kubeconfigGetter. -func BuildConfigFromKubeconfigGetter(masterUrl string, kubeconfigGetter KubeconfigGetter) (*restclient.Config, error) { - // TODO: We do not need a DeferredLoader here. Refactor code and see if we can use DirectClientConfig here. - cc := NewNonInteractiveDeferredLoadingClientConfig( - &ClientConfigGetter{kubeconfigGetter: kubeconfigGetter}, - &ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: masterUrl}}) - return cc.ClientConfig() -} diff --git a/pkg/client/unversioned/clientcmd/client_config_test.go b/pkg/client/unversioned/clientcmd/client_config_test.go deleted file mode 100644 index 0cbff3f8efa..00000000000 --- a/pkg/client/unversioned/clientcmd/client_config_test.go +++ /dev/null @@ -1,506 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "io/ioutil" - "os" - "reflect" - "strings" - "testing" - - "github.com/imdario/mergo" - restclient "k8s.io/client-go/rest" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -func TestOldMergoLib(t *testing.T) { - type T struct { - X string - } - dst := T{X: "one"} - src := T{X: "two"} - mergo.Merge(&dst, &src) - if dst.X != "two" { - // mergo.Merge changed in an incompatible way with - // - // https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a - // - // We have to stay with the old version which still does eager - // copying from src to dst in structs. - t.Errorf("mergo.Merge library found with incompatible, new behavior") - } -} - -func createValidTestConfig() *clientcmdapi.Config { - const ( - server = "https://anything.com:8080" - token = "the-token" - ) - - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: server, - } - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - Token: token, - } - config.Contexts["clean"] = &clientcmdapi.Context{ - Cluster: "clean", - AuthInfo: "clean", - } - config.CurrentContext = "clean" - - return config -} - -func createCAValidTestConfig() *clientcmdapi.Config { - - config := createValidTestConfig() - config.Clusters["clean"].CertificateAuthorityData = []byte{0, 0} - return config -} - -func TestInsecureOverridesCA(t *testing.T) { - config := createCAValidTestConfig() - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - InsecureSkipTLSVerify: true, - }, - }, nil) - - actualCfg, err := clientBuilder.ClientConfig() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - matchBoolArg(true, actualCfg.Insecure, t) - matchStringArg("", actualCfg.TLSClientConfig.CAFile, t) - matchByteArg(nil, actualCfg.TLSClientConfig.CAData, t) -} - -func TestMergeContext(t *testing.T) { - const namespace = "overriden-namespace" - - config := createValidTestConfig() - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) - - _, overridden, err := clientBuilder.Namespace() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if overridden { - t.Error("Expected namespace to not be overridden") - } - - clientBuilder = NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{ - Context: clientcmdapi.Context{ - Namespace: namespace, - }, - }, nil) - - actual, overridden, err := clientBuilder.Namespace() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if !overridden { - t.Error("Expected namespace to be overridden") - } - - matchStringArg(namespace, actual, t) -} - -func TestCertificateData(t *testing.T) { - caData := []byte("ca-data") - certData := []byte("cert-data") - keyData := []byte("key-data") - - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "https://localhost:8443", - CertificateAuthorityData: caData, - } - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - ClientCertificateData: certData, - ClientKeyData: keyData, - } - config.Contexts["clean"] = &clientcmdapi.Context{ - Cluster: "clean", - AuthInfo: "clean", - } - config.CurrentContext = "clean" - - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - // Make sure cert data gets into config (will override file paths) - matchByteArg(caData, clientConfig.TLSClientConfig.CAData, t) - matchByteArg(certData, clientConfig.TLSClientConfig.CertData, t) - matchByteArg(keyData, clientConfig.TLSClientConfig.KeyData, t) -} - -func TestBasicAuthData(t *testing.T) { - username := "myuser" - password := "mypass" - - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "https://localhost:8443", - } - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - Username: username, - Password: password, - } - config.Contexts["clean"] = &clientcmdapi.Context{ - Cluster: "clean", - AuthInfo: "clean", - } - config.CurrentContext = "clean" - - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - // Make sure basic auth data gets into config - matchStringArg(username, clientConfig.Username, t) - matchStringArg(password, clientConfig.Password, t) -} - -func TestBasicTokenFile(t *testing.T) { - token := "exampletoken" - f, err := ioutil.TempFile("", "tokenfile") - if err != nil { - t.Errorf("Unexpected error: %v", err) - return - } - defer os.Remove(f.Name()) - if err := ioutil.WriteFile(f.Name(), []byte(token), 0644); err != nil { - t.Errorf("Unexpected error: %v", err) - return - } - - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "https://localhost:8443", - } - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - TokenFile: f.Name(), - } - config.Contexts["clean"] = &clientcmdapi.Context{ - Cluster: "clean", - AuthInfo: "clean", - } - config.CurrentContext = "clean" - - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - matchStringArg(token, clientConfig.BearerToken, t) -} - -func TestPrecedenceTokenFile(t *testing.T) { - token := "exampletoken" - f, err := ioutil.TempFile("", "tokenfile") - if err != nil { - t.Errorf("Unexpected error: %v", err) - return - } - defer os.Remove(f.Name()) - if err := ioutil.WriteFile(f.Name(), []byte(token), 0644); err != nil { - t.Errorf("Unexpected error: %v", err) - return - } - - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "https://localhost:8443", - } - expectedToken := "expected" - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - Token: expectedToken, - TokenFile: f.Name(), - } - config.Contexts["clean"] = &clientcmdapi.Context{ - Cluster: "clean", - AuthInfo: "clean", - } - config.CurrentContext = "clean" - - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - matchStringArg(expectedToken, clientConfig.BearerToken, t) -} - -func TestCreateClean(t *testing.T) { - config := createValidTestConfig() - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{}, nil) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - matchStringArg(config.Clusters["clean"].Server, clientConfig.Host, t) - matchStringArg("", clientConfig.APIPath, t) - matchBoolArg(config.Clusters["clean"].InsecureSkipTLSVerify, clientConfig.Insecure, t) - matchStringArg(config.AuthInfos["clean"].Token, clientConfig.BearerToken, t) -} - -func TestCreateCleanWithPrefix(t *testing.T) { - tt := []struct { - server string - host string - }{ - {"https://anything.com:8080/foo/bar", "https://anything.com:8080/foo/bar"}, - {"http://anything.com:8080/foo/bar", "http://anything.com:8080/foo/bar"}, - {"http://anything.com:8080/foo/bar/", "http://anything.com:8080/foo/bar/"}, - {"http://anything.com:8080/", "http://anything.com:8080/"}, - {"http://anything.com:8080//", "http://anything.com:8080//"}, - {"anything.com:8080/foo/bar", "anything.com:8080/foo/bar"}, - {"anything.com:8080", "anything.com:8080"}, - {"anything.com", "anything.com"}, - {"anything", "anything"}, - } - - tt = append(tt, struct{ server, host string }{"", "http://localhost:8080"}) - - for _, tc := range tt { - config := createValidTestConfig() - - cleanConfig := config.Clusters["clean"] - cleanConfig.Server = tc.server - config.Clusters["clean"] = cleanConfig - - clientBuilder := NewNonInteractiveClientConfig(*config, "clean", &ConfigOverrides{ - ClusterDefaults: clientcmdapi.Cluster{Server: "http://localhost:8080"}, - }, nil) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - matchStringArg(tc.host, clientConfig.Host, t) - } -} - -func TestCreateCleanDefault(t *testing.T) { - config := createValidTestConfig() - clientBuilder := NewDefaultClientConfig(*config, &ConfigOverrides{}) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - matchStringArg(config.Clusters["clean"].Server, clientConfig.Host, t) - matchBoolArg(config.Clusters["clean"].InsecureSkipTLSVerify, clientConfig.Insecure, t) - matchStringArg(config.AuthInfos["clean"].Token, clientConfig.BearerToken, t) -} - -func TestCreateCleanDefaultCluster(t *testing.T) { - config := createValidTestConfig() - clientBuilder := NewDefaultClientConfig(*config, &ConfigOverrides{ - ClusterDefaults: clientcmdapi.Cluster{Server: "http://localhost:8080"}, - }) - - clientConfig, err := clientBuilder.ClientConfig() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - - matchStringArg(config.Clusters["clean"].Server, clientConfig.Host, t) - matchBoolArg(config.Clusters["clean"].InsecureSkipTLSVerify, clientConfig.Insecure, t) - matchStringArg(config.AuthInfos["clean"].Token, clientConfig.BearerToken, t) -} - -func TestCreateMissingContextNoDefault(t *testing.T) { - const expectedErrorContains = "Context was not found for specified context" - config := createValidTestConfig() - clientBuilder := NewNonInteractiveClientConfig(*config, "not-present", &ConfigOverrides{}, nil) - - _, err := clientBuilder.ClientConfig() - if err == nil { - t.Fatalf("Unexpected error: %v", err) - } -} - -func TestCreateMissingContext(t *testing.T) { - const expectedErrorContains = "context was not found for specified context: not-present" - config := createValidTestConfig() - clientBuilder := NewNonInteractiveClientConfig(*config, "not-present", &ConfigOverrides{ - ClusterDefaults: clientcmdapi.Cluster{Server: "http://localhost:8080"}, - }, nil) - - _, err := clientBuilder.ClientConfig() - if err == nil { - t.Fatalf("Expected error: %v", expectedErrorContains) - } - if !strings.Contains(err.Error(), expectedErrorContains) { - t.Fatalf("Expected error: %v, but got %v", expectedErrorContains, err) - } -} - -func TestInClusterClientConfigPrecedence(t *testing.T) { - tt := []struct { - overrides *ConfigOverrides - }{ - { - overrides: &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - Server: "https://host-from-overrides.com", - }, - }, - }, - { - overrides: &ConfigOverrides{ - AuthInfo: clientcmdapi.AuthInfo{ - Token: "https://host-from-overrides.com", - }, - }, - }, - { - overrides: &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - CertificateAuthority: "/path/to/ca-from-overrides.crt", - }, - }, - }, - { - overrides: &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - Server: "https://host-from-overrides.com", - }, - AuthInfo: clientcmdapi.AuthInfo{ - Token: "https://host-from-overrides.com", - }, - }, - }, - { - overrides: &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - Server: "https://host-from-overrides.com", - CertificateAuthority: "/path/to/ca-from-overrides.crt", - }, - }, - }, - { - overrides: &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - CertificateAuthority: "/path/to/ca-from-overrides.crt", - }, - AuthInfo: clientcmdapi.AuthInfo{ - Token: "https://host-from-overrides.com", - }, - }, - }, - { - overrides: &ConfigOverrides{ - ClusterInfo: clientcmdapi.Cluster{ - Server: "https://host-from-overrides.com", - CertificateAuthority: "/path/to/ca-from-overrides.crt", - }, - AuthInfo: clientcmdapi.AuthInfo{ - Token: "https://host-from-overrides.com", - }, - }, - }, - { - overrides: &ConfigOverrides{}, - }, - } - - for _, tc := range tt { - expectedServer := "https://host-from-cluster.com" - expectedToken := "token-from-cluster" - expectedCAFile := "/path/to/ca-from-cluster.crt" - - icc := &inClusterClientConfig{ - inClusterConfigProvider: func() (*restclient.Config, error) { - return &restclient.Config{ - Host: expectedServer, - BearerToken: expectedToken, - TLSClientConfig: restclient.TLSClientConfig{ - CAFile: expectedCAFile, - }, - }, nil - }, - overrides: tc.overrides, - } - - clientConfig, err := icc.ClientConfig() - if err != nil { - t.Fatalf("Unxpected error: %v", err) - } - - if overridenServer := tc.overrides.ClusterInfo.Server; len(overridenServer) > 0 { - expectedServer = overridenServer - } - if overridenToken := tc.overrides.AuthInfo.Token; len(overridenToken) > 0 { - expectedToken = overridenToken - } - if overridenCAFile := tc.overrides.ClusterInfo.CertificateAuthority; len(overridenCAFile) > 0 { - expectedCAFile = overridenCAFile - } - - if clientConfig.Host != expectedServer { - t.Errorf("Expected server %v, got %v", expectedServer, clientConfig.Host) - } - if clientConfig.BearerToken != expectedToken { - t.Errorf("Expected token %v, got %v", expectedToken, clientConfig.BearerToken) - } - if clientConfig.TLSClientConfig.CAFile != expectedCAFile { - t.Errorf("Expected Certificate Authority %v, got %v", expectedCAFile, clientConfig.TLSClientConfig.CAFile) - } - } -} - -func matchBoolArg(expected, got bool, t *testing.T) { - if expected != got { - t.Errorf("Expected %v, got %v", expected, got) - } -} - -func matchStringArg(expected, got string, t *testing.T) { - if expected != got { - t.Errorf("Expected %q, got %q", expected, got) - } -} - -func matchByteArg(expected, got []byte, t *testing.T) { - if !reflect.DeepEqual(expected, got) { - t.Errorf("Expected %v, got %v", expected, got) - } -} diff --git a/pkg/client/unversioned/clientcmd/config.go b/pkg/client/unversioned/clientcmd/config.go deleted file mode 100644 index 16ccdaf20a2..00000000000 --- a/pkg/client/unversioned/clientcmd/config.go +++ /dev/null @@ -1,472 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "errors" - "os" - "path" - "path/filepath" - "reflect" - "sort" - - "github.com/golang/glog" - - restclient "k8s.io/client-go/rest" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -// ConfigAccess is used by subcommands and methods in this package to load and modify the appropriate config files -type ConfigAccess interface { - // GetLoadingPrecedence returns the slice of files that should be used for loading and inspecting the config - GetLoadingPrecedence() []string - // GetStartingConfig returns the config that subcommands should being operating against. It may or may not be merged depending on loading rules - GetStartingConfig() (*clientcmdapi.Config, error) - // GetDefaultFilename returns the name of the file you should write into (create if necessary), if you're trying to create a new stanza as opposed to updating an existing one. - GetDefaultFilename() string - // IsExplicitFile indicates whether or not this command is interested in exactly one file. This implementation only ever does that via a flag, but implementations that handle local, global, and flags may have more - IsExplicitFile() bool - // GetExplicitFile returns the particular file this command is operating against. This implementation only ever has one, but implementations that handle local, global, and flags may have more - GetExplicitFile() string -} - -type PathOptions struct { - // GlobalFile is the full path to the file to load as the global (final) option - GlobalFile string - // EnvVar is the env var name that points to the list of kubeconfig files to load - EnvVar string - // ExplicitFileFlag is the name of the flag to use for prompting for the kubeconfig file - ExplicitFileFlag string - - // GlobalFileSubpath is an optional value used for displaying help - GlobalFileSubpath string - - LoadingRules *ClientConfigLoadingRules -} - -func (o *PathOptions) GetEnvVarFiles() []string { - if len(o.EnvVar) == 0 { - return []string{} - } - - envVarValue := os.Getenv(o.EnvVar) - if len(envVarValue) == 0 { - return []string{} - } - - return filepath.SplitList(envVarValue) -} - -func (o *PathOptions) GetLoadingPrecedence() []string { - if envVarFiles := o.GetEnvVarFiles(); len(envVarFiles) > 0 { - return envVarFiles - } - - return []string{o.GlobalFile} -} - -func (o *PathOptions) GetStartingConfig() (*clientcmdapi.Config, error) { - // don't mutate the original - loadingRules := *o.LoadingRules - loadingRules.Precedence = o.GetLoadingPrecedence() - - clientConfig := NewNonInteractiveDeferredLoadingClientConfig(&loadingRules, &ConfigOverrides{}) - rawConfig, err := clientConfig.RawConfig() - if os.IsNotExist(err) { - return clientcmdapi.NewConfig(), nil - } - if err != nil { - return nil, err - } - - return &rawConfig, nil -} - -func (o *PathOptions) GetDefaultFilename() string { - if o.IsExplicitFile() { - return o.GetExplicitFile() - } - - if envVarFiles := o.GetEnvVarFiles(); len(envVarFiles) > 0 { - if len(envVarFiles) == 1 { - return envVarFiles[0] - } - - // if any of the envvar files already exists, return it - for _, envVarFile := range envVarFiles { - if _, err := os.Stat(envVarFile); err == nil { - return envVarFile - } - } - - // otherwise, return the last one in the list - return envVarFiles[len(envVarFiles)-1] - } - - return o.GlobalFile -} - -func (o *PathOptions) IsExplicitFile() bool { - if len(o.LoadingRules.ExplicitPath) > 0 { - return true - } - - return false -} - -func (o *PathOptions) GetExplicitFile() string { - return o.LoadingRules.ExplicitPath -} - -func NewDefaultPathOptions() *PathOptions { - ret := &PathOptions{ - GlobalFile: RecommendedHomeFile, - EnvVar: RecommendedConfigPathEnvVar, - ExplicitFileFlag: RecommendedConfigPathFlag, - - GlobalFileSubpath: path.Join(RecommendedHomeDir, RecommendedFileName), - - LoadingRules: NewDefaultClientConfigLoadingRules(), - } - ret.LoadingRules.DoNotResolvePaths = true - - return ret -} - -// ModifyConfig takes a Config object, iterates through Clusters, AuthInfos, and Contexts, uses the LocationOfOrigin if specified or -// uses the default destination file to write the results into. This results in multiple file reads, but it's very easy to follow. -// Preferences and CurrentContext should always be set in the default destination file. Since we can't distinguish between empty and missing values -// (no nil strings), we're forced have separate handling for them. In the kubeconfig cases, newConfig should have at most one difference, -// that means that this code will only write into a single file. If you want to relativizePaths, you must provide a fully qualified path in any -// modified element. -func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, relativizePaths bool) error { - possibleSources := configAccess.GetLoadingPrecedence() - // sort the possible kubeconfig files so we always "lock" in the same order - // to avoid deadlock (note: this can fail w/ symlinks, but... come on). - sort.Strings(possibleSources) - for _, filename := range possibleSources { - if err := lockFile(filename); err != nil { - return err - } - defer unlockFile(filename) - } - - startingConfig, err := configAccess.GetStartingConfig() - if err != nil { - return err - } - - // We need to find all differences, locate their original files, read a partial config to modify only that stanza and write out the file. - // Special case the test for current context and preferences since those always write to the default file. - if reflect.DeepEqual(*startingConfig, newConfig) { - // nothing to do - return nil - } - - if startingConfig.CurrentContext != newConfig.CurrentContext { - if err := writeCurrentContext(configAccess, newConfig.CurrentContext); err != nil { - return err - } - } - - if !reflect.DeepEqual(startingConfig.Preferences, newConfig.Preferences) { - if err := writePreferences(configAccess, newConfig.Preferences); err != nil { - return err - } - } - - // Search every cluster, authInfo, and context. First from new to old for differences, then from old to new for deletions - for key, cluster := range newConfig.Clusters { - startingCluster, exists := startingConfig.Clusters[key] - if !reflect.DeepEqual(cluster, startingCluster) || !exists { - destinationFile := cluster.LocationOfOrigin - if len(destinationFile) == 0 { - destinationFile = configAccess.GetDefaultFilename() - } - - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - t := *cluster - - configToWrite.Clusters[key] = &t - configToWrite.Clusters[key].LocationOfOrigin = destinationFile - if relativizePaths { - if err := RelativizeClusterLocalPaths(configToWrite.Clusters[key]); err != nil { - return err - } - } - - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } - } - } - - for key, context := range newConfig.Contexts { - startingContext, exists := startingConfig.Contexts[key] - if !reflect.DeepEqual(context, startingContext) || !exists { - destinationFile := context.LocationOfOrigin - if len(destinationFile) == 0 { - destinationFile = configAccess.GetDefaultFilename() - } - - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - configToWrite.Contexts[key] = context - - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } - } - } - - for key, authInfo := range newConfig.AuthInfos { - startingAuthInfo, exists := startingConfig.AuthInfos[key] - if !reflect.DeepEqual(authInfo, startingAuthInfo) || !exists { - destinationFile := authInfo.LocationOfOrigin - if len(destinationFile) == 0 { - destinationFile = configAccess.GetDefaultFilename() - } - - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - t := *authInfo - configToWrite.AuthInfos[key] = &t - configToWrite.AuthInfos[key].LocationOfOrigin = destinationFile - if relativizePaths { - if err := RelativizeAuthInfoLocalPaths(configToWrite.AuthInfos[key]); err != nil { - return err - } - } - - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } - } - } - - for key, cluster := range startingConfig.Clusters { - if _, exists := newConfig.Clusters[key]; !exists { - destinationFile := cluster.LocationOfOrigin - if len(destinationFile) == 0 { - destinationFile = configAccess.GetDefaultFilename() - } - - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - delete(configToWrite.Clusters, key) - - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } - } - } - - for key, context := range startingConfig.Contexts { - if _, exists := newConfig.Contexts[key]; !exists { - destinationFile := context.LocationOfOrigin - if len(destinationFile) == 0 { - destinationFile = configAccess.GetDefaultFilename() - } - - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - delete(configToWrite.Contexts, key) - - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } - } - } - - for key, authInfo := range startingConfig.AuthInfos { - if _, exists := newConfig.AuthInfos[key]; !exists { - destinationFile := authInfo.LocationOfOrigin - if len(destinationFile) == 0 { - destinationFile = configAccess.GetDefaultFilename() - } - - configToWrite, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - delete(configToWrite.AuthInfos, key) - - if err := WriteToFile(*configToWrite, destinationFile); err != nil { - return err - } - } - } - - return nil -} - -func PersisterForUser(configAccess ConfigAccess, user string) restclient.AuthProviderConfigPersister { - return &persister{configAccess, user} -} - -type persister struct { - configAccess ConfigAccess - user string -} - -func (p *persister) Persist(config map[string]string) error { - newConfig, err := p.configAccess.GetStartingConfig() - if err != nil { - return err - } - authInfo, ok := newConfig.AuthInfos[p.user] - if ok && authInfo.AuthProvider != nil { - authInfo.AuthProvider.Config = config - ModifyConfig(p.configAccess, *newConfig, false) - } - return nil -} - -// writeCurrentContext takes three possible paths. -// If newCurrentContext is the same as the startingConfig's current context, then we exit. -// If newCurrentContext has a value, then that value is written into the default destination file. -// If newCurrentContext is empty, then we find the config file that is setting the CurrentContext and clear the value from that file -func writeCurrentContext(configAccess ConfigAccess, newCurrentContext string) error { - if startingConfig, err := configAccess.GetStartingConfig(); err != nil { - return err - } else if startingConfig.CurrentContext == newCurrentContext { - return nil - } - - if configAccess.IsExplicitFile() { - file := configAccess.GetExplicitFile() - currConfig, err := getConfigFromFile(file) - if err != nil { - return err - } - currConfig.CurrentContext = newCurrentContext - if err := WriteToFile(*currConfig, file); err != nil { - return err - } - - return nil - } - - if len(newCurrentContext) > 0 { - destinationFile := configAccess.GetDefaultFilename() - config, err := getConfigFromFile(destinationFile) - if err != nil { - return err - } - config.CurrentContext = newCurrentContext - - if err := WriteToFile(*config, destinationFile); err != nil { - return err - } - - return nil - } - - // we're supposed to be clearing the current context. We need to find the first spot in the chain that is setting it and clear it - for _, file := range configAccess.GetLoadingPrecedence() { - if _, err := os.Stat(file); err == nil { - currConfig, err := getConfigFromFile(file) - if err != nil { - return err - } - - if len(currConfig.CurrentContext) > 0 { - currConfig.CurrentContext = newCurrentContext - if err := WriteToFile(*currConfig, file); err != nil { - return err - } - - return nil - } - } - } - - return errors.New("no config found to write context") -} - -func writePreferences(configAccess ConfigAccess, newPrefs clientcmdapi.Preferences) error { - if startingConfig, err := configAccess.GetStartingConfig(); err != nil { - return err - } else if reflect.DeepEqual(startingConfig.Preferences, newPrefs) { - return nil - } - - if configAccess.IsExplicitFile() { - file := configAccess.GetExplicitFile() - currConfig, err := getConfigFromFile(file) - if err != nil { - return err - } - currConfig.Preferences = newPrefs - if err := WriteToFile(*currConfig, file); err != nil { - return err - } - - return nil - } - - for _, file := range configAccess.GetLoadingPrecedence() { - currConfig, err := getConfigFromFile(file) - if err != nil { - return err - } - - if !reflect.DeepEqual(currConfig.Preferences, newPrefs) { - currConfig.Preferences = newPrefs - if err := WriteToFile(*currConfig, file); err != nil { - return err - } - - return nil - } - } - - return errors.New("no config found to write preferences") -} - -// getConfigFromFile tries to read a kubeconfig file and if it can't, returns an error. One exception, missing files result in empty configs, not an error. -func getConfigFromFile(filename string) (*clientcmdapi.Config, error) { - config, err := LoadFromFile(filename) - if err != nil && !os.IsNotExist(err) { - return nil, err - } - if config == nil { - config = clientcmdapi.NewConfig() - } - return config, nil -} - -// GetConfigFromFileOrDie tries to read a kubeconfig file and if it can't, it calls exit. One exception, missing files result in empty configs, not an exit -func GetConfigFromFileOrDie(filename string) *clientcmdapi.Config { - config, err := getConfigFromFile(filename) - if err != nil { - glog.FatalDepth(1, err) - } - - return config -} diff --git a/pkg/client/unversioned/clientcmd/doc.go b/pkg/client/unversioned/clientcmd/doc.go deleted file mode 100644 index 0c5979f1f7c..00000000000 --- a/pkg/client/unversioned/clientcmd/doc.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -/* -Package clientcmd provides one stop shopping for building a working client from a fixed config, -from a .kubeconfig file, from command line flags, or from any merged combination. - -Sample usage from merged .kubeconfig files (local directory, home directory) - - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - // if you want to change the loading rules (which files in which order), you can do so here - - configOverrides := &clientcmd.ConfigOverrides{} - // if you want to change override values or bind them to flags, there are methods to help you - - kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides) - config, err := kubeConfig.ClientConfig() - if err != nil { - // Do something - } - client, err := metav1.New(config) - // ... -*/ -package clientcmd // import "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" diff --git a/pkg/client/unversioned/clientcmd/helpers.go b/pkg/client/unversioned/clientcmd/helpers.go deleted file mode 100644 index b609d1a766c..00000000000 --- a/pkg/client/unversioned/clientcmd/helpers.go +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "fmt" - "strconv" - "time" -) - -// ParseTimeout returns a parsed duration from a string -// A duration string value must be a positive integer, optionally followed by a corresponding time unit (s|m|h). -func ParseTimeout(duration string) (time.Duration, error) { - if i, err := strconv.ParseInt(duration, 10, 64); err == nil && i >= 0 { - return (time.Duration(i) * time.Second), nil - } - if requestTimeout, err := time.ParseDuration(duration); err == nil { - return requestTimeout, nil - } - return 0, fmt.Errorf("Invalid timeout value. Timeout must be a single integer in seconds, or an integer followed by a corresponding time unit (e.g. 1s | 2m | 3h)") -} diff --git a/pkg/client/unversioned/clientcmd/loader.go b/pkg/client/unversioned/clientcmd/loader.go deleted file mode 100644 index 99e607abc52..00000000000 --- a/pkg/client/unversioned/clientcmd/loader.go +++ /dev/null @@ -1,609 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "fmt" - "io" - "io/ioutil" - "os" - "path" - "path/filepath" - "reflect" - goruntime "runtime" - "strings" - - "github.com/golang/glog" - "github.com/imdario/mergo" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - utilerrors "k8s.io/apimachinery/pkg/util/errors" - restclient "k8s.io/client-go/rest" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest" - "k8s.io/kubernetes/pkg/util/homedir" -) - -const ( - RecommendedConfigPathFlag = "kubeconfig" - RecommendedConfigPathEnvVar = "KUBECONFIG" - RecommendedHomeDir = ".kube" - RecommendedFileName = "config" - RecommendedSchemaName = "schema" -) - -var RecommendedHomeFile = path.Join(homedir.HomeDir(), RecommendedHomeDir, RecommendedFileName) -var RecommendedSchemaFile = path.Join(homedir.HomeDir(), RecommendedHomeDir, RecommendedSchemaName) - -// currentMigrationRules returns a map that holds the history of recommended home directories used in previous versions. -// Any future changes to RecommendedHomeFile and related are expected to add a migration rule here, in order to make -// sure existing config files are migrated to their new locations properly. -func currentMigrationRules() map[string]string { - oldRecommendedHomeFile := path.Join(os.Getenv("HOME"), "/.kube/.kubeconfig") - oldRecommendedWindowsHomeFile := path.Join(os.Getenv("HOME"), RecommendedHomeDir, RecommendedFileName) - - migrationRules := map[string]string{} - migrationRules[RecommendedHomeFile] = oldRecommendedHomeFile - if goruntime.GOOS == "windows" { - migrationRules[RecommendedHomeFile] = oldRecommendedWindowsHomeFile - } - return migrationRules -} - -type ClientConfigLoader interface { - ConfigAccess - // IsDefaultConfig returns true if the returned config matches the defaults. - IsDefaultConfig(*restclient.Config) bool - // Load returns the latest config - Load() (*clientcmdapi.Config, error) -} - -type KubeconfigGetter func() (*clientcmdapi.Config, error) - -type ClientConfigGetter struct { - kubeconfigGetter KubeconfigGetter -} - -// ClientConfigGetter implements the ClientConfigLoader interface. -var _ ClientConfigLoader = &ClientConfigGetter{} - -func (g *ClientConfigGetter) Load() (*clientcmdapi.Config, error) { - return g.kubeconfigGetter() -} - -func (g *ClientConfigGetter) GetLoadingPrecedence() []string { - return nil -} -func (g *ClientConfigGetter) GetStartingConfig() (*clientcmdapi.Config, error) { - return g.kubeconfigGetter() -} -func (g *ClientConfigGetter) GetDefaultFilename() string { - return "" -} -func (g *ClientConfigGetter) IsExplicitFile() bool { - return false -} -func (g *ClientConfigGetter) GetExplicitFile() string { - return "" -} -func (g *ClientConfigGetter) IsDefaultConfig(config *restclient.Config) bool { - return false -} - -// ClientConfigLoadingRules is an ExplicitPath and string slice of specific locations that are used for merging together a Config -// Callers can put the chain together however they want, but we'd recommend: -// EnvVarPathFiles if set (a list of files if set) OR the HomeDirectoryPath -// ExplicitPath is special, because if a user specifically requests a certain file be used and error is reported if thie file is not present -type ClientConfigLoadingRules struct { - ExplicitPath string - Precedence []string - - // MigrationRules is a map of destination files to source files. If a destination file is not present, then the source file is checked. - // If the source file is present, then it is copied to the destination file BEFORE any further loading happens. - MigrationRules map[string]string - - // DoNotResolvePaths indicates whether or not to resolve paths with respect to the originating files. This is phrased as a negative so - // that a default object that doesn't set this will usually get the behavior it wants. - DoNotResolvePaths bool - - // DefaultClientConfig is an optional field indicating what rules to use to calculate a default configuration. - // This should match the overrides passed in to ClientConfig loader. - DefaultClientConfig ClientConfig -} - -// ClientConfigLoadingRules implements the ClientConfigLoader interface. -var _ ClientConfigLoader = &ClientConfigLoadingRules{} - -// NewDefaultClientConfigLoadingRules returns a ClientConfigLoadingRules object with default fields filled in. You are not required to -// use this constructor -func NewDefaultClientConfigLoadingRules() *ClientConfigLoadingRules { - chain := []string{} - - envVarFiles := os.Getenv(RecommendedConfigPathEnvVar) - if len(envVarFiles) != 0 { - chain = append(chain, filepath.SplitList(envVarFiles)...) - - } else { - chain = append(chain, RecommendedHomeFile) - } - - return &ClientConfigLoadingRules{ - Precedence: chain, - MigrationRules: currentMigrationRules(), - } -} - -// Load starts by running the MigrationRules and then -// takes the loading rules and returns a Config object based on following rules. -// if the ExplicitPath, return the unmerged explicit file -// Otherwise, return a merged config based on the Precedence slice -// A missing ExplicitPath file produces an error. Empty filenames or other missing files are ignored. -// Read errors or files with non-deserializable content produce errors. -// The first file to set a particular map key wins and map key's value is never changed. -// BUT, if you set a struct value that is NOT contained inside of map, the value WILL be changed. -// This results in some odd looking logic to merge in one direction, merge in the other, and then merge the two. -// It also means that if two files specify a "red-user", only values from the first file's red-user are used. Even -// non-conflicting entries from the second file's "red-user" are discarded. -// Relative paths inside of the .kubeconfig files are resolved against the .kubeconfig file's parent folder -// and only absolute file paths are returned. -func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) { - if err := rules.Migrate(); err != nil { - return nil, err - } - - errlist := []error{} - - kubeConfigFiles := []string{} - - // Make sure a file we were explicitly told to use exists - if len(rules.ExplicitPath) > 0 { - if _, err := os.Stat(rules.ExplicitPath); os.IsNotExist(err) { - return nil, err - } - kubeConfigFiles = append(kubeConfigFiles, rules.ExplicitPath) - - } else { - kubeConfigFiles = append(kubeConfigFiles, rules.Precedence...) - } - - kubeconfigs := []*clientcmdapi.Config{} - // read and cache the config files so that we only look at them once - for _, filename := range kubeConfigFiles { - if len(filename) == 0 { - // no work to do - continue - } - - config, err := LoadFromFile(filename) - if os.IsNotExist(err) { - // skip missing files - continue - } - if err != nil { - errlist = append(errlist, fmt.Errorf("Error loading config file \"%s\": %v", filename, err)) - continue - } - - kubeconfigs = append(kubeconfigs, config) - } - - // first merge all of our maps - mapConfig := clientcmdapi.NewConfig() - - for _, kubeconfig := range kubeconfigs { - mergo.Merge(mapConfig, kubeconfig) - } - - // merge all of the struct values in the reverse order so that priority is given correctly - // errors are not added to the list the second time - nonMapConfig := clientcmdapi.NewConfig() - for i := len(kubeconfigs) - 1; i >= 0; i-- { - kubeconfig := kubeconfigs[i] - mergo.Merge(nonMapConfig, kubeconfig) - } - - // since values are overwritten, but maps values are not, we can merge the non-map config on top of the map config and - // get the values we expect. - config := clientcmdapi.NewConfig() - mergo.Merge(config, mapConfig) - mergo.Merge(config, nonMapConfig) - - if rules.ResolvePaths() { - if err := ResolveLocalPaths(config); err != nil { - errlist = append(errlist, err) - } - } - return config, utilerrors.NewAggregate(errlist) -} - -// Migrate uses the MigrationRules map. If a destination file is not present, then the source file is checked. -// If the source file is present, then it is copied to the destination file BEFORE any further loading happens. -func (rules *ClientConfigLoadingRules) Migrate() error { - if rules.MigrationRules == nil { - return nil - } - - for destination, source := range rules.MigrationRules { - if _, err := os.Stat(destination); err == nil { - // if the destination already exists, do nothing - continue - } else if os.IsPermission(err) { - // if we can't access the file, skip it - continue - } else if !os.IsNotExist(err) { - // if we had an error other than non-existence, fail - return err - } - - if sourceInfo, err := os.Stat(source); err != nil { - if os.IsNotExist(err) || os.IsPermission(err) { - // if the source file doesn't exist or we can't access it, there's no work to do. - continue - } - - // if we had an error other than non-existence, fail - return err - } else if sourceInfo.IsDir() { - return fmt.Errorf("cannot migrate %v to %v because it is a directory", source, destination) - } - - in, err := os.Open(source) - if err != nil { - return err - } - defer in.Close() - out, err := os.Create(destination) - if err != nil { - return err - } - defer out.Close() - - if _, err = io.Copy(out, in); err != nil { - return err - } - } - - return nil -} - -// GetLoadingPrecedence implements ConfigAccess -func (rules *ClientConfigLoadingRules) GetLoadingPrecedence() []string { - return rules.Precedence -} - -// GetStartingConfig implements ConfigAccess -func (rules *ClientConfigLoadingRules) GetStartingConfig() (*clientcmdapi.Config, error) { - clientConfig := NewNonInteractiveDeferredLoadingClientConfig(rules, &ConfigOverrides{}) - rawConfig, err := clientConfig.RawConfig() - if os.IsNotExist(err) { - return clientcmdapi.NewConfig(), nil - } - if err != nil { - return nil, err - } - - return &rawConfig, nil -} - -// GetDefaultFilename implements ConfigAccess -func (rules *ClientConfigLoadingRules) GetDefaultFilename() string { - // Explicit file if we have one. - if rules.IsExplicitFile() { - return rules.GetExplicitFile() - } - // Otherwise, first existing file from precedence. - for _, filename := range rules.GetLoadingPrecedence() { - if _, err := os.Stat(filename); err == nil { - return filename - } - } - // If none exists, use the first from precedence. - if len(rules.Precedence) > 0 { - return rules.Precedence[0] - } - return "" -} - -// IsExplicitFile implements ConfigAccess -func (rules *ClientConfigLoadingRules) IsExplicitFile() bool { - return len(rules.ExplicitPath) > 0 -} - -// GetExplicitFile implements ConfigAccess -func (rules *ClientConfigLoadingRules) GetExplicitFile() string { - return rules.ExplicitPath -} - -// IsDefaultConfig returns true if the provided configuration matches the default -func (rules *ClientConfigLoadingRules) IsDefaultConfig(config *restclient.Config) bool { - if rules.DefaultClientConfig == nil { - return false - } - defaultConfig, err := rules.DefaultClientConfig.ClientConfig() - if err != nil { - return false - } - return reflect.DeepEqual(config, defaultConfig) -} - -// LoadFromFile takes a filename and deserializes the contents into Config object -func LoadFromFile(filename string) (*clientcmdapi.Config, error) { - kubeconfigBytes, err := ioutil.ReadFile(filename) - if err != nil { - return nil, err - } - config, err := Load(kubeconfigBytes) - if err != nil { - return nil, err - } - glog.V(6).Infoln("Config loaded from file", filename) - - // set LocationOfOrigin on every Cluster, User, and Context - for key, obj := range config.AuthInfos { - obj.LocationOfOrigin = filename - config.AuthInfos[key] = obj - } - for key, obj := range config.Clusters { - obj.LocationOfOrigin = filename - config.Clusters[key] = obj - } - for key, obj := range config.Contexts { - obj.LocationOfOrigin = filename - config.Contexts[key] = obj - } - - if config.AuthInfos == nil { - config.AuthInfos = map[string]*clientcmdapi.AuthInfo{} - } - if config.Clusters == nil { - config.Clusters = map[string]*clientcmdapi.Cluster{} - } - if config.Contexts == nil { - config.Contexts = map[string]*clientcmdapi.Context{} - } - - return config, nil -} - -// Load takes a byte slice and deserializes the contents into Config object. -// Encapsulates deserialization without assuming the source is a file. -func Load(data []byte) (*clientcmdapi.Config, error) { - config := clientcmdapi.NewConfig() - // if there's no data in a file, return the default object instead of failing (DecodeInto reject empty input) - if len(data) == 0 { - return config, nil - } - decoded, _, err := clientcmdlatest.Codec.Decode(data, &schema.GroupVersionKind{Version: clientcmdlatest.Version, Kind: "Config"}, config) - if err != nil { - return nil, err - } - return decoded.(*clientcmdapi.Config), nil -} - -// WriteToFile serializes the config to yaml and writes it out to a file. If not present, it creates the file with the mode 0600. If it is present -// it stomps the contents -func WriteToFile(config clientcmdapi.Config, filename string) error { - content, err := Write(config) - if err != nil { - return err - } - dir := filepath.Dir(filename) - if _, err := os.Stat(dir); os.IsNotExist(err) { - if err = os.MkdirAll(dir, 0755); err != nil { - return err - } - } - - if err := ioutil.WriteFile(filename, content, 0600); err != nil { - return err - } - return nil -} - -func lockFile(filename string) error { - // TODO: find a way to do this with actual file locks. Will - // probably need seperate solution for windows and linux. - - // Make sure the dir exists before we try to create a lock file. - dir := filepath.Dir(filename) - if _, err := os.Stat(dir); os.IsNotExist(err) { - if err = os.MkdirAll(dir, 0755); err != nil { - return err - } - } - f, err := os.OpenFile(lockName(filename), os.O_CREATE|os.O_EXCL, 0) - if err != nil { - return err - } - f.Close() - return nil -} - -func unlockFile(filename string) error { - return os.Remove(lockName(filename)) -} - -func lockName(filename string) string { - return filename + ".lock" -} - -// Write serializes the config to yaml. -// Encapsulates serialization without assuming the destination is a file. -func Write(config clientcmdapi.Config) ([]byte, error) { - return runtime.Encode(clientcmdlatest.Codec, &config) -} - -func (rules ClientConfigLoadingRules) ResolvePaths() bool { - return !rules.DoNotResolvePaths -} - -// ResolveLocalPaths resolves all relative paths in the config object with respect to the stanza's LocationOfOrigin -// this cannot be done directly inside of LoadFromFile because doing so there would make it impossible to load a file without -// modification of its contents. -func ResolveLocalPaths(config *clientcmdapi.Config) error { - for _, cluster := range config.Clusters { - if len(cluster.LocationOfOrigin) == 0 { - continue - } - base, err := filepath.Abs(filepath.Dir(cluster.LocationOfOrigin)) - if err != nil { - return fmt.Errorf("Could not determine the absolute path of config file %s: %v", cluster.LocationOfOrigin, err) - } - - if err := ResolvePaths(GetClusterFileReferences(cluster), base); err != nil { - return err - } - } - for _, authInfo := range config.AuthInfos { - if len(authInfo.LocationOfOrigin) == 0 { - continue - } - base, err := filepath.Abs(filepath.Dir(authInfo.LocationOfOrigin)) - if err != nil { - return fmt.Errorf("Could not determine the absolute path of config file %s: %v", authInfo.LocationOfOrigin, err) - } - - if err := ResolvePaths(GetAuthInfoFileReferences(authInfo), base); err != nil { - return err - } - } - - return nil -} - -// RelativizeClusterLocalPaths first absolutizes the paths by calling ResolveLocalPaths. This assumes that any NEW path is already -// absolute, but any existing path will be resolved relative to LocationOfOrigin -func RelativizeClusterLocalPaths(cluster *clientcmdapi.Cluster) error { - if len(cluster.LocationOfOrigin) == 0 { - return fmt.Errorf("no location of origin for %s", cluster.Server) - } - base, err := filepath.Abs(filepath.Dir(cluster.LocationOfOrigin)) - if err != nil { - return fmt.Errorf("could not determine the absolute path of config file %s: %v", cluster.LocationOfOrigin, err) - } - - if err := ResolvePaths(GetClusterFileReferences(cluster), base); err != nil { - return err - } - if err := RelativizePathWithNoBacksteps(GetClusterFileReferences(cluster), base); err != nil { - return err - } - - return nil -} - -// RelativizeAuthInfoLocalPaths first absolutizes the paths by calling ResolveLocalPaths. This assumes that any NEW path is already -// absolute, but any existing path will be resolved relative to LocationOfOrigin -func RelativizeAuthInfoLocalPaths(authInfo *clientcmdapi.AuthInfo) error { - if len(authInfo.LocationOfOrigin) == 0 { - return fmt.Errorf("no location of origin for %v", authInfo) - } - base, err := filepath.Abs(filepath.Dir(authInfo.LocationOfOrigin)) - if err != nil { - return fmt.Errorf("could not determine the absolute path of config file %s: %v", authInfo.LocationOfOrigin, err) - } - - if err := ResolvePaths(GetAuthInfoFileReferences(authInfo), base); err != nil { - return err - } - if err := RelativizePathWithNoBacksteps(GetAuthInfoFileReferences(authInfo), base); err != nil { - return err - } - - return nil -} - -func RelativizeConfigPaths(config *clientcmdapi.Config, base string) error { - return RelativizePathWithNoBacksteps(GetConfigFileReferences(config), base) -} - -func ResolveConfigPaths(config *clientcmdapi.Config, base string) error { - return ResolvePaths(GetConfigFileReferences(config), base) -} - -func GetConfigFileReferences(config *clientcmdapi.Config) []*string { - refs := []*string{} - - for _, cluster := range config.Clusters { - refs = append(refs, GetClusterFileReferences(cluster)...) - } - for _, authInfo := range config.AuthInfos { - refs = append(refs, GetAuthInfoFileReferences(authInfo)...) - } - - return refs -} - -func GetClusterFileReferences(cluster *clientcmdapi.Cluster) []*string { - return []*string{&cluster.CertificateAuthority} -} - -func GetAuthInfoFileReferences(authInfo *clientcmdapi.AuthInfo) []*string { - return []*string{&authInfo.ClientCertificate, &authInfo.ClientKey, &authInfo.TokenFile} -} - -// ResolvePaths updates the given refs to be absolute paths, relative to the given base directory -func ResolvePaths(refs []*string, base string) error { - for _, ref := range refs { - // Don't resolve empty paths - if len(*ref) > 0 { - // Don't resolve absolute paths - if !filepath.IsAbs(*ref) { - *ref = filepath.Join(base, *ref) - } - } - } - return nil -} - -// RelativizePathWithNoBacksteps updates the given refs to be relative paths, relative to the given base directory as long as they do not require backsteps. -// Any path requiring a backstep is left as-is as long it is absolute. Any non-absolute path that can't be relativized produces an error -func RelativizePathWithNoBacksteps(refs []*string, base string) error { - for _, ref := range refs { - // Don't relativize empty paths - if len(*ref) > 0 { - rel, err := MakeRelative(*ref, base) - if err != nil { - return err - } - - // if we have a backstep, don't mess with the path - if strings.HasPrefix(rel, "../") { - if filepath.IsAbs(*ref) { - continue - } - - return fmt.Errorf("%v requires backsteps and is not absolute", *ref) - } - - *ref = rel - } - } - return nil -} - -func MakeRelative(path, base string) (string, error) { - if len(path) > 0 { - rel, err := filepath.Rel(base, path) - if err != nil { - return path, err - } - return rel, nil - } - return path, nil -} diff --git a/pkg/client/unversioned/clientcmd/loader_test.go b/pkg/client/unversioned/clientcmd/loader_test.go deleted file mode 100644 index 74319788aba..00000000000 --- a/pkg/client/unversioned/clientcmd/loader_test.go +++ /dev/null @@ -1,579 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "fmt" - "io/ioutil" - "os" - "path" - "path/filepath" - "reflect" - "strings" - "testing" - - "github.com/ghodss/yaml" - - "k8s.io/apimachinery/pkg/runtime" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest" -) - -var ( - testConfigAlfa = clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "red-user": {Token: "red-token"}}, - Clusters: map[string]*clientcmdapi.Cluster{ - "cow-cluster": {Server: "http://cow.org:8080"}}, - Contexts: map[string]*clientcmdapi.Context{ - "federal-context": {AuthInfo: "red-user", Cluster: "cow-cluster", Namespace: "hammer-ns"}}, - } - testConfigBravo = clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "black-user": {Token: "black-token"}}, - Clusters: map[string]*clientcmdapi.Cluster{ - "pig-cluster": {Server: "http://pig.org:8080"}}, - Contexts: map[string]*clientcmdapi.Context{ - "queen-anne-context": {AuthInfo: "black-user", Cluster: "pig-cluster", Namespace: "saw-ns"}}, - } - testConfigCharlie = clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "green-user": {Token: "green-token"}}, - Clusters: map[string]*clientcmdapi.Cluster{ - "horse-cluster": {Server: "http://horse.org:8080"}}, - Contexts: map[string]*clientcmdapi.Context{ - "shaker-context": {AuthInfo: "green-user", Cluster: "horse-cluster", Namespace: "chisel-ns"}}, - } - testConfigDelta = clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "blue-user": {Token: "blue-token"}}, - Clusters: map[string]*clientcmdapi.Cluster{ - "chicken-cluster": {Server: "http://chicken.org:8080"}}, - Contexts: map[string]*clientcmdapi.Context{ - "gothic-context": {AuthInfo: "blue-user", Cluster: "chicken-cluster", Namespace: "plane-ns"}}, - } - - testConfigConflictAlfa = clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "red-user": {Token: "a-different-red-token"}, - "yellow-user": {Token: "yellow-token"}}, - Clusters: map[string]*clientcmdapi.Cluster{ - "cow-cluster": {Server: "http://a-different-cow.org:8080", InsecureSkipTLSVerify: true}, - "donkey-cluster": {Server: "http://donkey.org:8080", InsecureSkipTLSVerify: true}}, - CurrentContext: "federal-context", - } -) - -func TestNonExistentCommandLineFile(t *testing.T) { - loadingRules := ClientConfigLoadingRules{ - ExplicitPath: "bogus_file", - } - - _, err := loadingRules.Load() - if err == nil { - t.Fatalf("Expected error for missing command-line file, got none") - } - if !strings.Contains(err.Error(), "bogus_file") { - t.Fatalf("Expected error about 'bogus_file', got %s", err.Error()) - } -} - -func TestToleratingMissingFiles(t *testing.T) { - loadingRules := ClientConfigLoadingRules{ - Precedence: []string{"bogus1", "bogus2", "bogus3"}, - } - - _, err := loadingRules.Load() - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } -} - -func TestErrorReadingFile(t *testing.T) { - commandLineFile, _ := ioutil.TempFile("", "") - defer os.Remove(commandLineFile.Name()) - - if err := ioutil.WriteFile(commandLineFile.Name(), []byte("bogus value"), 0644); err != nil { - t.Fatalf("Error creating tempfile: %v", err) - } - - loadingRules := ClientConfigLoadingRules{ - ExplicitPath: commandLineFile.Name(), - } - - _, err := loadingRules.Load() - if err == nil { - t.Fatalf("Expected error for unloadable file, got none") - } - if !strings.Contains(err.Error(), commandLineFile.Name()) { - t.Fatalf("Expected error about '%s', got %s", commandLineFile.Name(), err.Error()) - } -} - -func TestErrorReadingNonFile(t *testing.T) { - tmpdir, err := ioutil.TempDir("", "") - if err != nil { - t.Fatalf("Couldn't create tmpdir") - } - defer os.RemoveAll(tmpdir) - - loadingRules := ClientConfigLoadingRules{ - ExplicitPath: tmpdir, - } - - _, err = loadingRules.Load() - if err == nil { - t.Fatalf("Expected error for non-file, got none") - } - if !strings.Contains(err.Error(), tmpdir) { - t.Fatalf("Expected error about '%s', got %s", tmpdir, err.Error()) - } -} - -func TestConflictingCurrentContext(t *testing.T) { - commandLineFile, _ := ioutil.TempFile("", "") - defer os.Remove(commandLineFile.Name()) - envVarFile, _ := ioutil.TempFile("", "") - defer os.Remove(envVarFile.Name()) - - mockCommandLineConfig := clientcmdapi.Config{ - CurrentContext: "any-context-value", - } - mockEnvVarConfig := clientcmdapi.Config{ - CurrentContext: "a-different-context", - } - - WriteToFile(mockCommandLineConfig, commandLineFile.Name()) - WriteToFile(mockEnvVarConfig, envVarFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - ExplicitPath: commandLineFile.Name(), - Precedence: []string{envVarFile.Name()}, - } - - mergedConfig, err := loadingRules.Load() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if mergedConfig.CurrentContext != mockCommandLineConfig.CurrentContext { - t.Errorf("expected %v, got %v", mockCommandLineConfig.CurrentContext, mergedConfig.CurrentContext) - } -} - -func TestLoadingEmptyMaps(t *testing.T) { - configFile, _ := ioutil.TempFile("", "") - defer os.Remove(configFile.Name()) - - mockConfig := clientcmdapi.Config{ - CurrentContext: "any-context-value", - } - - WriteToFile(mockConfig, configFile.Name()) - - config, err := LoadFromFile(configFile.Name()) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if config.Clusters == nil { - t.Error("expected config.Clusters to be non-nil") - } - if config.AuthInfos == nil { - t.Error("expected config.AuthInfos to be non-nil") - } - if config.Contexts == nil { - t.Error("expected config.Contexts to be non-nil") - } -} - -func TestResolveRelativePaths(t *testing.T) { - pathResolutionConfig1 := clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "relative-user-1": {ClientCertificate: "relative/client/cert", ClientKey: "../relative/client/key"}, - "absolute-user-1": {ClientCertificate: "/absolute/client/cert", ClientKey: "/absolute/client/key"}, - }, - Clusters: map[string]*clientcmdapi.Cluster{ - "relative-server-1": {CertificateAuthority: "../relative/ca"}, - "absolute-server-1": {CertificateAuthority: "/absolute/ca"}, - }, - } - pathResolutionConfig2 := clientcmdapi.Config{ - AuthInfos: map[string]*clientcmdapi.AuthInfo{ - "relative-user-2": {ClientCertificate: "relative/client/cert2", ClientKey: "../relative/client/key2"}, - "absolute-user-2": {ClientCertificate: "/absolute/client/cert2", ClientKey: "/absolute/client/key2"}, - }, - Clusters: map[string]*clientcmdapi.Cluster{ - "relative-server-2": {CertificateAuthority: "../relative/ca2"}, - "absolute-server-2": {CertificateAuthority: "/absolute/ca2"}, - }, - } - - configDir1, _ := ioutil.TempDir("", "") - defer os.RemoveAll(configDir1) - configFile1 := path.Join(configDir1, ".kubeconfig") - configDir1, _ = filepath.Abs(configDir1) - - configDir2, _ := ioutil.TempDir("", "") - defer os.RemoveAll(configDir2) - configDir2, _ = ioutil.TempDir(configDir2, "") - configFile2 := path.Join(configDir2, ".kubeconfig") - configDir2, _ = filepath.Abs(configDir2) - - WriteToFile(pathResolutionConfig1, configFile1) - WriteToFile(pathResolutionConfig2, configFile2) - - loadingRules := ClientConfigLoadingRules{ - Precedence: []string{configFile1, configFile2}, - } - - mergedConfig, err := loadingRules.Load() - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - foundClusterCount := 0 - for key, cluster := range mergedConfig.Clusters { - if key == "relative-server-1" { - foundClusterCount++ - matchStringArg(path.Join(configDir1, pathResolutionConfig1.Clusters["relative-server-1"].CertificateAuthority), cluster.CertificateAuthority, t) - } - if key == "relative-server-2" { - foundClusterCount++ - matchStringArg(path.Join(configDir2, pathResolutionConfig2.Clusters["relative-server-2"].CertificateAuthority), cluster.CertificateAuthority, t) - } - if key == "absolute-server-1" { - foundClusterCount++ - matchStringArg(pathResolutionConfig1.Clusters["absolute-server-1"].CertificateAuthority, cluster.CertificateAuthority, t) - } - if key == "absolute-server-2" { - foundClusterCount++ - matchStringArg(pathResolutionConfig2.Clusters["absolute-server-2"].CertificateAuthority, cluster.CertificateAuthority, t) - } - } - if foundClusterCount != 4 { - t.Errorf("Expected 4 clusters, found %v: %v", foundClusterCount, mergedConfig.Clusters) - } - - foundAuthInfoCount := 0 - for key, authInfo := range mergedConfig.AuthInfos { - if key == "relative-user-1" { - foundAuthInfoCount++ - matchStringArg(path.Join(configDir1, pathResolutionConfig1.AuthInfos["relative-user-1"].ClientCertificate), authInfo.ClientCertificate, t) - matchStringArg(path.Join(configDir1, pathResolutionConfig1.AuthInfos["relative-user-1"].ClientKey), authInfo.ClientKey, t) - } - if key == "relative-user-2" { - foundAuthInfoCount++ - matchStringArg(path.Join(configDir2, pathResolutionConfig2.AuthInfos["relative-user-2"].ClientCertificate), authInfo.ClientCertificate, t) - matchStringArg(path.Join(configDir2, pathResolutionConfig2.AuthInfos["relative-user-2"].ClientKey), authInfo.ClientKey, t) - } - if key == "absolute-user-1" { - foundAuthInfoCount++ - matchStringArg(pathResolutionConfig1.AuthInfos["absolute-user-1"].ClientCertificate, authInfo.ClientCertificate, t) - matchStringArg(pathResolutionConfig1.AuthInfos["absolute-user-1"].ClientKey, authInfo.ClientKey, t) - } - if key == "absolute-user-2" { - foundAuthInfoCount++ - matchStringArg(pathResolutionConfig2.AuthInfos["absolute-user-2"].ClientCertificate, authInfo.ClientCertificate, t) - matchStringArg(pathResolutionConfig2.AuthInfos["absolute-user-2"].ClientKey, authInfo.ClientKey, t) - } - } - if foundAuthInfoCount != 4 { - t.Errorf("Expected 4 users, found %v: %v", foundAuthInfoCount, mergedConfig.AuthInfos) - } - -} - -func TestMigratingFile(t *testing.T) { - sourceFile, _ := ioutil.TempFile("", "") - defer os.Remove(sourceFile.Name()) - destinationFile, _ := ioutil.TempFile("", "") - // delete the file so that we'll write to it - os.Remove(destinationFile.Name()) - - WriteToFile(testConfigAlfa, sourceFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - MigrationRules: map[string]string{destinationFile.Name(): sourceFile.Name()}, - } - - if _, err := loadingRules.Load(); err != nil { - t.Errorf("unexpected error %v", err) - } - - // the load should have recreated this file - defer os.Remove(destinationFile.Name()) - - sourceContent, err := ioutil.ReadFile(sourceFile.Name()) - if err != nil { - t.Errorf("unexpected error %v", err) - } - destinationContent, err := ioutil.ReadFile(destinationFile.Name()) - if err != nil { - t.Errorf("unexpected error %v", err) - } - - if !reflect.DeepEqual(sourceContent, destinationContent) { - t.Errorf("source and destination do not match") - } -} - -func TestMigratingFileLeaveExistingFileAlone(t *testing.T) { - sourceFile, _ := ioutil.TempFile("", "") - defer os.Remove(sourceFile.Name()) - destinationFile, _ := ioutil.TempFile("", "") - defer os.Remove(destinationFile.Name()) - - WriteToFile(testConfigAlfa, sourceFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - MigrationRules: map[string]string{destinationFile.Name(): sourceFile.Name()}, - } - - if _, err := loadingRules.Load(); err != nil { - t.Errorf("unexpected error %v", err) - } - - destinationContent, err := ioutil.ReadFile(destinationFile.Name()) - if err != nil { - t.Errorf("unexpected error %v", err) - } - - if len(destinationContent) > 0 { - t.Errorf("destination should not have been touched") - } -} - -func TestMigratingFileSourceMissingSkip(t *testing.T) { - sourceFilename := "some-missing-file" - destinationFile, _ := ioutil.TempFile("", "") - // delete the file so that we'll write to it - os.Remove(destinationFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - MigrationRules: map[string]string{destinationFile.Name(): sourceFilename}, - } - - if _, err := loadingRules.Load(); err != nil { - t.Errorf("unexpected error %v", err) - } - - if _, err := os.Stat(destinationFile.Name()); !os.IsNotExist(err) { - t.Errorf("destination should not exist") - } -} - -func TestFileLocking(t *testing.T) { - f, _ := ioutil.TempFile("", "") - defer os.Remove(f.Name()) - - err := lockFile(f.Name()) - if err != nil { - t.Errorf("unexpected error while locking file: %v", err) - } - defer unlockFile(f.Name()) - - err = lockFile(f.Name()) - if err == nil { - t.Error("expected error while locking file.") - } -} - -func Example_noMergingOnExplicitPaths() { - commandLineFile, _ := ioutil.TempFile("", "") - defer os.Remove(commandLineFile.Name()) - envVarFile, _ := ioutil.TempFile("", "") - defer os.Remove(envVarFile.Name()) - - WriteToFile(testConfigAlfa, commandLineFile.Name()) - WriteToFile(testConfigConflictAlfa, envVarFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - ExplicitPath: commandLineFile.Name(), - Precedence: []string{envVarFile.Name()}, - } - - mergedConfig, err := loadingRules.Load() - - json, err := runtime.Encode(clientcmdlatest.Codec, mergedConfig) - if err != nil { - fmt.Printf("Unexpected error: %v", err) - } - output, err := yaml.JSONToYAML(json) - if err != nil { - fmt.Printf("Unexpected error: %v", err) - } - - fmt.Printf("%v", string(output)) - // Output: - // apiVersion: v1 - // clusters: - // - cluster: - // server: http://cow.org:8080 - // name: cow-cluster - // contexts: - // - context: - // cluster: cow-cluster - // namespace: hammer-ns - // user: red-user - // name: federal-context - // current-context: "" - // kind: Config - // preferences: {} - // users: - // - name: red-user - // user: - // token: red-token -} - -func Example_mergingSomeWithConflict() { - commandLineFile, _ := ioutil.TempFile("", "") - defer os.Remove(commandLineFile.Name()) - envVarFile, _ := ioutil.TempFile("", "") - defer os.Remove(envVarFile.Name()) - - WriteToFile(testConfigAlfa, commandLineFile.Name()) - WriteToFile(testConfigConflictAlfa, envVarFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - Precedence: []string{commandLineFile.Name(), envVarFile.Name()}, - } - - mergedConfig, err := loadingRules.Load() - - json, err := runtime.Encode(clientcmdlatest.Codec, mergedConfig) - if err != nil { - fmt.Printf("Unexpected error: %v", err) - } - output, err := yaml.JSONToYAML(json) - if err != nil { - fmt.Printf("Unexpected error: %v", err) - } - - fmt.Printf("%v", string(output)) - // Output: - // apiVersion: v1 - // clusters: - // - cluster: - // server: http://cow.org:8080 - // name: cow-cluster - // - cluster: - // insecure-skip-tls-verify: true - // server: http://donkey.org:8080 - // name: donkey-cluster - // contexts: - // - context: - // cluster: cow-cluster - // namespace: hammer-ns - // user: red-user - // name: federal-context - // current-context: federal-context - // kind: Config - // preferences: {} - // users: - // - name: red-user - // user: - // token: red-token - // - name: yellow-user - // user: - // token: yellow-token -} - -func Example_mergingEverythingNoConflicts() { - commandLineFile, _ := ioutil.TempFile("", "") - defer os.Remove(commandLineFile.Name()) - envVarFile, _ := ioutil.TempFile("", "") - defer os.Remove(envVarFile.Name()) - currentDirFile, _ := ioutil.TempFile("", "") - defer os.Remove(currentDirFile.Name()) - homeDirFile, _ := ioutil.TempFile("", "") - defer os.Remove(homeDirFile.Name()) - - WriteToFile(testConfigAlfa, commandLineFile.Name()) - WriteToFile(testConfigBravo, envVarFile.Name()) - WriteToFile(testConfigCharlie, currentDirFile.Name()) - WriteToFile(testConfigDelta, homeDirFile.Name()) - - loadingRules := ClientConfigLoadingRules{ - Precedence: []string{commandLineFile.Name(), envVarFile.Name(), currentDirFile.Name(), homeDirFile.Name()}, - } - - mergedConfig, err := loadingRules.Load() - - json, err := runtime.Encode(clientcmdlatest.Codec, mergedConfig) - if err != nil { - fmt.Printf("Unexpected error: %v", err) - } - output, err := yaml.JSONToYAML(json) - if err != nil { - fmt.Printf("Unexpected error: %v", err) - } - - fmt.Printf("%v", string(output)) - // Output: - // apiVersion: v1 - // clusters: - // - cluster: - // server: http://chicken.org:8080 - // name: chicken-cluster - // - cluster: - // server: http://cow.org:8080 - // name: cow-cluster - // - cluster: - // server: http://horse.org:8080 - // name: horse-cluster - // - cluster: - // server: http://pig.org:8080 - // name: pig-cluster - // contexts: - // - context: - // cluster: cow-cluster - // namespace: hammer-ns - // user: red-user - // name: federal-context - // - context: - // cluster: chicken-cluster - // namespace: plane-ns - // user: blue-user - // name: gothic-context - // - context: - // cluster: pig-cluster - // namespace: saw-ns - // user: black-user - // name: queen-anne-context - // - context: - // cluster: horse-cluster - // namespace: chisel-ns - // user: green-user - // name: shaker-context - // current-context: "" - // kind: Config - // preferences: {} - // users: - // - name: black-user - // user: - // token: black-token - // - name: blue-user - // user: - // token: blue-token - // - name: green-user - // user: - // token: green-token - // - name: red-user - // user: - // token: red-token -} diff --git a/pkg/client/unversioned/clientcmd/merged_client_builder.go b/pkg/client/unversioned/clientcmd/merged_client_builder.go deleted file mode 100644 index 92c1a5a0061..00000000000 --- a/pkg/client/unversioned/clientcmd/merged_client_builder.go +++ /dev/null @@ -1,154 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "io" - "sync" - - "github.com/golang/glog" - - restclient "k8s.io/client-go/rest" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -// DeferredLoadingClientConfig is a ClientConfig interface that is backed by a client config loader. -// It is used in cases where the loading rules may change after you've instantiated them and you want to be sure that -// the most recent rules are used. This is useful in cases where you bind flags to loading rule parameters before -// the parse happens and you want your calling code to be ignorant of how the values are being mutated to avoid -// passing extraneous information down a call stack -type DeferredLoadingClientConfig struct { - loader ClientConfigLoader - overrides *ConfigOverrides - fallbackReader io.Reader - - clientConfig ClientConfig - loadingLock sync.Mutex - - // provided for testing - icc InClusterConfig -} - -// InClusterConfig abstracts details of whether the client is running in a cluster for testing. -type InClusterConfig interface { - ClientConfig - Possible() bool -} - -// NewNonInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name -func NewNonInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides) ClientConfig { - return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, icc: &inClusterClientConfig{overrides: overrides}} -} - -// NewInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name and the fallback auth reader -func NewInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides, fallbackReader io.Reader) ClientConfig { - return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, icc: &inClusterClientConfig{overrides: overrides}, fallbackReader: fallbackReader} -} - -func (config *DeferredLoadingClientConfig) createClientConfig() (ClientConfig, error) { - if config.clientConfig == nil { - config.loadingLock.Lock() - defer config.loadingLock.Unlock() - - if config.clientConfig == nil { - mergedConfig, err := config.loader.Load() - if err != nil { - return nil, err - } - - var mergedClientConfig ClientConfig - if config.fallbackReader != nil { - mergedClientConfig = NewInteractiveClientConfig(*mergedConfig, config.overrides.CurrentContext, config.overrides, config.fallbackReader, config.loader) - } else { - mergedClientConfig = NewNonInteractiveClientConfig(*mergedConfig, config.overrides.CurrentContext, config.overrides, config.loader) - } - - config.clientConfig = mergedClientConfig - } - } - - return config.clientConfig, nil -} - -func (config *DeferredLoadingClientConfig) RawConfig() (clientcmdapi.Config, error) { - mergedConfig, err := config.createClientConfig() - if err != nil { - return clientcmdapi.Config{}, err - } - - return mergedConfig.RawConfig() -} - -// ClientConfig implements ClientConfig -func (config *DeferredLoadingClientConfig) ClientConfig() (*restclient.Config, error) { - mergedClientConfig, err := config.createClientConfig() - if err != nil { - return nil, err - } - - // load the configuration and return on non-empty errors and if the - // content differs from the default config - mergedConfig, err := mergedClientConfig.ClientConfig() - switch { - case err != nil: - if !IsEmptyConfig(err) { - // return on any error except empty config - return nil, err - } - case mergedConfig != nil: - // the configuration is valid, but if this is equal to the defaults we should try - // in-cluster configuration - if !config.loader.IsDefaultConfig(mergedConfig) { - return mergedConfig, nil - } - } - - // check for in-cluster configuration and use it - if config.icc.Possible() { - glog.V(4).Infof("Using in-cluster configuration") - return config.icc.ClientConfig() - } - - // return the result of the merged client config - return mergedConfig, err -} - -// Namespace implements KubeConfig -func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) { - mergedKubeConfig, err := config.createClientConfig() - if err != nil { - return "", false, err - } - - ns, ok, err := mergedKubeConfig.Namespace() - // if we get an error and it is not empty config, or if the merged config defined an explicit namespace, or - // if in-cluster config is not possible, return immediately - if (err != nil && !IsEmptyConfig(err)) || ok || !config.icc.Possible() { - // return on any error except empty config - return ns, ok, err - } - - glog.V(4).Infof("Using in-cluster namespace") - - // allow the namespace from the service account token directory to be used. - return config.icc.Namespace() -} - -// ConfigAccess implements ClientConfig -func (config *DeferredLoadingClientConfig) ConfigAccess() ConfigAccess { - return config.loader -} diff --git a/pkg/client/unversioned/clientcmd/merged_client_builder_test.go b/pkg/client/unversioned/clientcmd/merged_client_builder_test.go deleted file mode 100644 index 8b0386764d5..00000000000 --- a/pkg/client/unversioned/clientcmd/merged_client_builder_test.go +++ /dev/null @@ -1,328 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "fmt" - "testing" - - restclient "k8s.io/client-go/rest" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -type testLoader struct { - ClientConfigLoader - - called bool - config *clientcmdapi.Config - err error -} - -func (l *testLoader) Load() (*clientcmdapi.Config, error) { - l.called = true - return l.config, l.err -} - -type testClientConfig struct { - config *restclient.Config - namespace string - namespaceSpecified bool - err error -} - -func (c *testClientConfig) RawConfig() (clientcmdapi.Config, error) { - return clientcmdapi.Config{}, fmt.Errorf("unexpected call") -} -func (c *testClientConfig) ClientConfig() (*restclient.Config, error) { - return c.config, c.err -} -func (c *testClientConfig) Namespace() (string, bool, error) { - return c.namespace, c.namespaceSpecified, c.err -} -func (c *testClientConfig) ConfigAccess() ConfigAccess { - return nil -} - -type testICC struct { - testClientConfig - - possible bool - called bool -} - -func (icc *testICC) Possible() bool { - icc.called = true - return icc.possible -} - -func TestInClusterConfig(t *testing.T) { - default1 := &DirectClientConfig{ - config: *createValidTestConfig(), - contextName: "clean", - overrides: &ConfigOverrides{}, - } - invalidDefaultConfig := clientcmdapi.NewConfig() - invalidDefaultConfig.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "http://localhost:8080", - } - invalidDefaultConfig.Contexts["other"] = &clientcmdapi.Context{ - Cluster: "clean", - } - invalidDefaultConfig.CurrentContext = "clean" - - defaultInvalid := &DirectClientConfig{ - config: *invalidDefaultConfig, - overrides: &ConfigOverrides{}, - } - if _, err := defaultInvalid.ClientConfig(); err == nil || !IsConfigurationInvalid(err) { - t.Fatal(err) - } - config1, err := default1.ClientConfig() - if err != nil { - t.Fatal(err) - } - config2 := &restclient.Config{Host: "config2"} - err1 := fmt.Errorf("unique error") - - testCases := map[string]struct { - clientConfig *testClientConfig - icc *testICC - defaultConfig *DirectClientConfig - - checkedICC bool - result *restclient.Config - err error - }{ - "in-cluster checked on other error": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{}, - - checkedICC: true, - result: nil, - err: ErrEmptyConfig, - }, - - "in-cluster not checked on non-empty error": { - clientConfig: &testClientConfig{err: ErrEmptyCluster}, - icc: &testICC{}, - - checkedICC: false, - result: nil, - err: ErrEmptyCluster, - }, - - "in-cluster checked when config is default": { - defaultConfig: default1, - clientConfig: &testClientConfig{config: config1}, - icc: &testICC{}, - - checkedICC: true, - result: config1, - err: nil, - }, - - "in-cluster not checked when default config is invalid": { - defaultConfig: defaultInvalid, - clientConfig: &testClientConfig{config: config1}, - icc: &testICC{}, - - checkedICC: false, - result: config1, - err: nil, - }, - - "in-cluster not checked when config is not equal to default": { - defaultConfig: default1, - clientConfig: &testClientConfig{config: config2}, - icc: &testICC{}, - - checkedICC: false, - result: config2, - err: nil, - }, - - "in-cluster checked when config is not equal to default and error is empty": { - clientConfig: &testClientConfig{config: config2, err: ErrEmptyConfig}, - icc: &testICC{}, - - checkedICC: true, - result: config2, - err: ErrEmptyConfig, - }, - - "in-cluster error returned when config is empty": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{ - possible: true, - testClientConfig: testClientConfig{ - err: err1, - }, - }, - - checkedICC: true, - result: nil, - err: err1, - }, - - "in-cluster config returned when config is empty": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{ - possible: true, - testClientConfig: testClientConfig{ - config: config2, - }, - }, - - checkedICC: true, - result: config2, - err: nil, - }, - - "in-cluster not checked when standard default is invalid": { - defaultConfig: &DefaultClientConfig, - clientConfig: &testClientConfig{config: config2}, - icc: &testICC{}, - - checkedICC: false, - result: config2, - err: nil, - }, - } - - for name, test := range testCases { - c := &DeferredLoadingClientConfig{icc: test.icc} - c.loader = &ClientConfigLoadingRules{DefaultClientConfig: test.defaultConfig} - c.clientConfig = test.clientConfig - - cfg, err := c.ClientConfig() - if test.icc.called != test.checkedICC { - t.Errorf("%s: unexpected in-cluster-config call %t", name, test.icc.called) - } - if err != test.err || cfg != test.result { - t.Errorf("%s: unexpected result: %v %#v", name, err, cfg) - } - } -} - -func TestInClusterConfigNamespace(t *testing.T) { - err1 := fmt.Errorf("unique error") - - testCases := map[string]struct { - clientConfig *testClientConfig - icc *testICC - - checkedICC bool - result string - ok bool - err error - }{ - "in-cluster checked on empty error": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{}, - - checkedICC: true, - err: ErrEmptyConfig, - }, - - "in-cluster not checked on non-empty error": { - clientConfig: &testClientConfig{err: ErrEmptyCluster}, - icc: &testICC{}, - - err: ErrEmptyCluster, - }, - - "in-cluster checked when config is default": { - clientConfig: &testClientConfig{}, - icc: &testICC{}, - - checkedICC: true, - }, - - "in-cluster not checked when config is not equal to default": { - clientConfig: &testClientConfig{namespace: "test", namespaceSpecified: true}, - icc: &testICC{}, - - result: "test", - ok: true, - }, - - "in-cluster checked when namespace is not specified, but is defaulted": { - clientConfig: &testClientConfig{namespace: "test", namespaceSpecified: false}, - icc: &testICC{}, - - checkedICC: true, - result: "test", - ok: false, - }, - - "in-cluster error returned when config is empty": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{ - possible: true, - testClientConfig: testClientConfig{ - err: err1, - }, - }, - - checkedICC: true, - err: err1, - }, - - "in-cluster config returned when config is empty": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{ - possible: true, - testClientConfig: testClientConfig{ - namespace: "test", - namespaceSpecified: true, - }, - }, - - checkedICC: true, - result: "test", - ok: true, - }, - - "in-cluster config returned when config is empty and namespace is defaulted but not explicitly set": { - clientConfig: &testClientConfig{err: ErrEmptyConfig}, - icc: &testICC{ - possible: true, - testClientConfig: testClientConfig{ - namespace: "test", - namespaceSpecified: false, - }, - }, - - checkedICC: true, - result: "test", - ok: false, - }, - } - - for name, test := range testCases { - c := &DeferredLoadingClientConfig{icc: test.icc} - c.clientConfig = test.clientConfig - - ns, ok, err := c.Namespace() - if test.icc.called != test.checkedICC { - t.Errorf("%s: unexpected in-cluster-config call %t", name, test.icc.called) - } - if err != test.err || ns != test.result || ok != test.ok { - t.Errorf("%s: unexpected result: %v %s %t", name, err, ns, ok) - } - } -} diff --git a/pkg/client/unversioned/clientcmd/overrides.go b/pkg/client/unversioned/clientcmd/overrides.go deleted file mode 100644 index 8622981a9e7..00000000000 --- a/pkg/client/unversioned/clientcmd/overrides.go +++ /dev/null @@ -1,206 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "strconv" - - "github.com/spf13/pflag" - - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -// ConfigOverrides holds values that should override whatever information is pulled from the actual Config object. You can't -// simply use an actual Config object, because Configs hold maps, but overrides are restricted to "at most one" -type ConfigOverrides struct { - AuthInfo clientcmdapi.AuthInfo - // ClusterDefaults are applied before the configured cluster info is loaded. - ClusterDefaults clientcmdapi.Cluster - ClusterInfo clientcmdapi.Cluster - Context clientcmdapi.Context - CurrentContext string - Timeout string -} - -// ConfigOverrideFlags holds the flag names to be used for binding command line flags. Notice that this structure tightly -// corresponds to ConfigOverrides -type ConfigOverrideFlags struct { - AuthOverrideFlags AuthOverrideFlags - ClusterOverrideFlags ClusterOverrideFlags - ContextOverrideFlags ContextOverrideFlags - CurrentContext FlagInfo - Timeout FlagInfo -} - -// AuthOverrideFlags holds the flag names to be used for binding command line flags for AuthInfo objects -type AuthOverrideFlags struct { - ClientCertificate FlagInfo - ClientKey FlagInfo - Token FlagInfo - Impersonate FlagInfo - Username FlagInfo - Password FlagInfo -} - -// ContextOverrideFlags holds the flag names to be used for binding command line flags for Cluster objects -type ContextOverrideFlags struct { - ClusterName FlagInfo - AuthInfoName FlagInfo - Namespace FlagInfo -} - -// ClusterOverride holds the flag names to be used for binding command line flags for Cluster objects -type ClusterOverrideFlags struct { - APIServer FlagInfo - APIVersion FlagInfo - CertificateAuthority FlagInfo - InsecureSkipTLSVerify FlagInfo -} - -// FlagInfo contains information about how to register a flag. This struct is useful if you want to provide a way for an extender to -// get back a set of recommended flag names, descriptions, and defaults, but allow for customization by an extender. This makes for -// coherent extension, without full prescription -type FlagInfo struct { - // LongName is the long string for a flag. If this is empty, then the flag will not be bound - LongName string - // ShortName is the single character for a flag. If this is empty, then there will be no short flag - ShortName string - // Default is the default value for the flag - Default string - // Description is the description for the flag - Description string -} - -// BindStringFlag binds the flag based on the provided info. If LongName == "", nothing is registered -func (f FlagInfo) BindStringFlag(flags *pflag.FlagSet, target *string) { - // you can't register a flag without a long name - if len(f.LongName) > 0 { - flags.StringVarP(target, f.LongName, f.ShortName, f.Default, f.Description) - } -} - -// BindBoolFlag binds the flag based on the provided info. If LongName == "", nothing is registered -func (f FlagInfo) BindBoolFlag(flags *pflag.FlagSet, target *bool) { - // you can't register a flag without a long name - if len(f.LongName) > 0 { - // try to parse Default as a bool. If it fails, assume false - boolVal, err := strconv.ParseBool(f.Default) - if err != nil { - boolVal = false - } - - flags.BoolVarP(target, f.LongName, f.ShortName, boolVal, f.Description) - } -} - -const ( - FlagClusterName = "cluster" - FlagAuthInfoName = "user" - FlagContext = "context" - FlagNamespace = "namespace" - FlagAPIServer = "server" - FlagAPIVersion = "api-version" - FlagInsecure = "insecure-skip-tls-verify" - FlagCertFile = "client-certificate" - FlagKeyFile = "client-key" - FlagCAFile = "certificate-authority" - FlagEmbedCerts = "embed-certs" - FlagBearerToken = "token" - FlagImpersonate = "as" - FlagUsername = "username" - FlagPassword = "password" - FlagTimeout = "request-timeout" -) - -// RecommendedConfigOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing -func RecommendedConfigOverrideFlags(prefix string) ConfigOverrideFlags { - return ConfigOverrideFlags{ - AuthOverrideFlags: RecommendedAuthOverrideFlags(prefix), - ClusterOverrideFlags: RecommendedClusterOverrideFlags(prefix), - ContextOverrideFlags: RecommendedContextOverrideFlags(prefix), - - CurrentContext: FlagInfo{prefix + FlagContext, "", "", "The name of the kubeconfig context to use"}, - Timeout: FlagInfo{prefix + FlagTimeout, "", "0", "The length of time to wait before giving up on a single server request. Non-zero values should contain a corresponding time unit (e.g. 1s, 2m, 3h). A value of zero means don't timeout requests."}, - } -} - -// RecommendedAuthOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing -func RecommendedAuthOverrideFlags(prefix string) AuthOverrideFlags { - return AuthOverrideFlags{ - ClientCertificate: FlagInfo{prefix + FlagCertFile, "", "", "Path to a client certificate file for TLS"}, - ClientKey: FlagInfo{prefix + FlagKeyFile, "", "", "Path to a client key file for TLS"}, - Token: FlagInfo{prefix + FlagBearerToken, "", "", "Bearer token for authentication to the API server"}, - Impersonate: FlagInfo{prefix + FlagImpersonate, "", "", "Username to impersonate for the operation"}, - Username: FlagInfo{prefix + FlagUsername, "", "", "Username for basic authentication to the API server"}, - Password: FlagInfo{prefix + FlagPassword, "", "", "Password for basic authentication to the API server"}, - } -} - -// RecommendedClusterOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing -func RecommendedClusterOverrideFlags(prefix string) ClusterOverrideFlags { - return ClusterOverrideFlags{ - APIServer: FlagInfo{prefix + FlagAPIServer, "", "", "The address and port of the Kubernetes API server"}, - APIVersion: FlagInfo{prefix + FlagAPIVersion, "", "", "DEPRECATED: The API version to use when talking to the server"}, - CertificateAuthority: FlagInfo{prefix + FlagCAFile, "", "", "Path to a cert. file for the certificate authority"}, - InsecureSkipTLSVerify: FlagInfo{prefix + FlagInsecure, "", "false", "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure"}, - } -} - -// RecommendedContextOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing -func RecommendedContextOverrideFlags(prefix string) ContextOverrideFlags { - return ContextOverrideFlags{ - ClusterName: FlagInfo{prefix + FlagClusterName, "", "", "The name of the kubeconfig cluster to use"}, - AuthInfoName: FlagInfo{prefix + FlagAuthInfoName, "", "", "The name of the kubeconfig user to use"}, - Namespace: FlagInfo{prefix + FlagNamespace, "n", "", "If present, the namespace scope for this CLI request"}, - } -} - -// BindOverrideFlags is a convenience method to bind the specified flags to their associated variables -func BindOverrideFlags(overrides *ConfigOverrides, flags *pflag.FlagSet, flagNames ConfigOverrideFlags) { - BindAuthInfoFlags(&overrides.AuthInfo, flags, flagNames.AuthOverrideFlags) - BindClusterFlags(&overrides.ClusterInfo, flags, flagNames.ClusterOverrideFlags) - BindContextFlags(&overrides.Context, flags, flagNames.ContextOverrideFlags) - flagNames.CurrentContext.BindStringFlag(flags, &overrides.CurrentContext) - flagNames.Timeout.BindStringFlag(flags, &overrides.Timeout) -} - -// BindAuthInfoFlags is a convenience method to bind the specified flags to their associated variables -func BindAuthInfoFlags(authInfo *clientcmdapi.AuthInfo, flags *pflag.FlagSet, flagNames AuthOverrideFlags) { - flagNames.ClientCertificate.BindStringFlag(flags, &authInfo.ClientCertificate) - flagNames.ClientKey.BindStringFlag(flags, &authInfo.ClientKey) - flagNames.Token.BindStringFlag(flags, &authInfo.Token) - flagNames.Impersonate.BindStringFlag(flags, &authInfo.Impersonate) - flagNames.Username.BindStringFlag(flags, &authInfo.Username) - flagNames.Password.BindStringFlag(flags, &authInfo.Password) -} - -// BindClusterFlags is a convenience method to bind the specified flags to their associated variables -func BindClusterFlags(clusterInfo *clientcmdapi.Cluster, flags *pflag.FlagSet, flagNames ClusterOverrideFlags) { - flagNames.APIServer.BindStringFlag(flags, &clusterInfo.Server) - // TODO: remove --api-version flag in 1.3. - flagNames.APIVersion.BindStringFlag(flags, &clusterInfo.APIVersion) - flags.MarkDeprecated(FlagAPIVersion, "flag is no longer respected and will be deleted in the next release") - flagNames.CertificateAuthority.BindStringFlag(flags, &clusterInfo.CertificateAuthority) - flagNames.InsecureSkipTLSVerify.BindBoolFlag(flags, &clusterInfo.InsecureSkipTLSVerify) -} - -// BindFlags is a convenience method to bind the specified flags to their associated variables -func BindContextFlags(contextInfo *clientcmdapi.Context, flags *pflag.FlagSet, flagNames ContextOverrideFlags) { - flagNames.ClusterName.BindStringFlag(flags, &contextInfo.Cluster) - flagNames.AuthInfoName.BindStringFlag(flags, &contextInfo.AuthInfo) - flagNames.Namespace.BindStringFlag(flags, &contextInfo.Namespace) -} diff --git a/pkg/client/unversioned/clientcmd/validation.go b/pkg/client/unversioned/clientcmd/validation.go deleted file mode 100644 index ceeeb042e8e..00000000000 --- a/pkg/client/unversioned/clientcmd/validation.go +++ /dev/null @@ -1,270 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "errors" - "fmt" - "os" - "reflect" - "strings" - - utilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/apimachinery/pkg/util/validation" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -var ( - ErrNoContext = errors.New("no context chosen") - ErrEmptyConfig = errors.New("no configuration has been provided") - // message is for consistency with old behavior - ErrEmptyCluster = errors.New("cluster has no server defined") -) - -type errContextNotFound struct { - ContextName string -} - -func (e *errContextNotFound) Error() string { - return fmt.Sprintf("context was not found for specified context: %v", e.ContextName) -} - -// IsContextNotFound returns a boolean indicating whether the error is known to -// report that a context was not found -func IsContextNotFound(err error) bool { - if err == nil { - return false - } - if _, ok := err.(*errContextNotFound); ok || err == ErrNoContext { - return true - } - return strings.Contains(err.Error(), "context was not found for specified context") -} - -// IsEmptyConfig returns true if the provided error indicates the provided configuration -// is empty. -func IsEmptyConfig(err error) bool { - switch t := err.(type) { - case errConfigurationInvalid: - return len(t) == 1 && t[0] == ErrEmptyConfig - } - return err == ErrEmptyConfig -} - -// errConfigurationInvalid is a set of errors indicating the configuration is invalid. -type errConfigurationInvalid []error - -// errConfigurationInvalid implements error and Aggregate -var _ error = errConfigurationInvalid{} -var _ utilerrors.Aggregate = errConfigurationInvalid{} - -func newErrConfigurationInvalid(errs []error) error { - switch len(errs) { - case 0: - return nil - default: - return errConfigurationInvalid(errs) - } -} - -// Error implements the error interface -func (e errConfigurationInvalid) Error() string { - return fmt.Sprintf("invalid configuration: %v", utilerrors.NewAggregate(e).Error()) -} - -// Errors implements the AggregateError interface -func (e errConfigurationInvalid) Errors() []error { - return e -} - -// IsConfigurationInvalid returns true if the provided error indicates the configuration is invalid. -func IsConfigurationInvalid(err error) bool { - switch err.(type) { - case *errContextNotFound, errConfigurationInvalid: - return true - } - return IsContextNotFound(err) -} - -// Validate checks for errors in the Config. It does not return early so that it can find as many errors as possible. -func Validate(config clientcmdapi.Config) error { - validationErrors := make([]error, 0) - - if clientcmdapi.IsConfigEmpty(&config) { - return newErrConfigurationInvalid([]error{ErrEmptyConfig}) - } - - if len(config.CurrentContext) != 0 { - if _, exists := config.Contexts[config.CurrentContext]; !exists { - validationErrors = append(validationErrors, &errContextNotFound{config.CurrentContext}) - } - } - - for contextName, context := range config.Contexts { - validationErrors = append(validationErrors, validateContext(contextName, *context, config)...) - } - - for authInfoName, authInfo := range config.AuthInfos { - validationErrors = append(validationErrors, validateAuthInfo(authInfoName, *authInfo)...) - } - - for clusterName, clusterInfo := range config.Clusters { - validationErrors = append(validationErrors, validateClusterInfo(clusterName, *clusterInfo)...) - } - - return newErrConfigurationInvalid(validationErrors) -} - -// ConfirmUsable looks a particular context and determines if that particular part of the config is useable. There might still be errors in the config, -// but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible. -func ConfirmUsable(config clientcmdapi.Config, passedContextName string) error { - validationErrors := make([]error, 0) - - if clientcmdapi.IsConfigEmpty(&config) { - return newErrConfigurationInvalid([]error{ErrEmptyConfig}) - } - - var contextName string - if len(passedContextName) != 0 { - contextName = passedContextName - } else { - contextName = config.CurrentContext - } - - if len(contextName) == 0 { - return ErrNoContext - } - - context, exists := config.Contexts[contextName] - if !exists { - validationErrors = append(validationErrors, &errContextNotFound{contextName}) - } - - if exists { - validationErrors = append(validationErrors, validateContext(contextName, *context, config)...) - validationErrors = append(validationErrors, validateAuthInfo(context.AuthInfo, *config.AuthInfos[context.AuthInfo])...) - validationErrors = append(validationErrors, validateClusterInfo(context.Cluster, *config.Clusters[context.Cluster])...) - } - - return newErrConfigurationInvalid(validationErrors) -} - -// validateClusterInfo looks for conflicts and errors in the cluster info -func validateClusterInfo(clusterName string, clusterInfo clientcmdapi.Cluster) []error { - validationErrors := make([]error, 0) - - if reflect.DeepEqual(clientcmdapi.Cluster{}, clusterInfo) { - return []error{ErrEmptyCluster} - } - - if len(clusterInfo.Server) == 0 { - if len(clusterName) == 0 { - validationErrors = append(validationErrors, fmt.Errorf("default cluster has no server defined")) - } else { - validationErrors = append(validationErrors, fmt.Errorf("no server found for cluster %q", clusterName)) - } - } - // Make sure CA data and CA file aren't both specified - if len(clusterInfo.CertificateAuthority) != 0 && len(clusterInfo.CertificateAuthorityData) != 0 { - validationErrors = append(validationErrors, fmt.Errorf("certificate-authority-data and certificate-authority are both specified for %v. certificate-authority-data will override.", clusterName)) - } - if len(clusterInfo.CertificateAuthority) != 0 { - clientCertCA, err := os.Open(clusterInfo.CertificateAuthority) - defer clientCertCA.Close() - if err != nil { - validationErrors = append(validationErrors, fmt.Errorf("unable to read certificate-authority %v for %v due to %v", clusterInfo.CertificateAuthority, clusterName, err)) - } - } - - return validationErrors -} - -// validateAuthInfo looks for conflicts and errors in the auth info -func validateAuthInfo(authInfoName string, authInfo clientcmdapi.AuthInfo) []error { - validationErrors := make([]error, 0) - - usingAuthPath := false - methods := make([]string, 0, 3) - if len(authInfo.Token) != 0 { - methods = append(methods, "token") - } - if len(authInfo.Username) != 0 || len(authInfo.Password) != 0 { - methods = append(methods, "basicAuth") - } - - if len(authInfo.ClientCertificate) != 0 || len(authInfo.ClientCertificateData) != 0 { - // Make sure cert data and file aren't both specified - if len(authInfo.ClientCertificate) != 0 && len(authInfo.ClientCertificateData) != 0 { - validationErrors = append(validationErrors, fmt.Errorf("client-cert-data and client-cert are both specified for %v. client-cert-data will override.", authInfoName)) - } - // Make sure key data and file aren't both specified - if len(authInfo.ClientKey) != 0 && len(authInfo.ClientKeyData) != 0 { - validationErrors = append(validationErrors, fmt.Errorf("client-key-data and client-key are both specified for %v; client-key-data will override", authInfoName)) - } - // Make sure a key is specified - if len(authInfo.ClientKey) == 0 && len(authInfo.ClientKeyData) == 0 { - validationErrors = append(validationErrors, fmt.Errorf("client-key-data or client-key must be specified for %v to use the clientCert authentication method.", authInfoName)) - } - - if len(authInfo.ClientCertificate) != 0 { - clientCertFile, err := os.Open(authInfo.ClientCertificate) - defer clientCertFile.Close() - if err != nil { - validationErrors = append(validationErrors, fmt.Errorf("unable to read client-cert %v for %v due to %v", authInfo.ClientCertificate, authInfoName, err)) - } - } - if len(authInfo.ClientKey) != 0 { - clientKeyFile, err := os.Open(authInfo.ClientKey) - defer clientKeyFile.Close() - if err != nil { - validationErrors = append(validationErrors, fmt.Errorf("unable to read client-key %v for %v due to %v", authInfo.ClientKey, authInfoName, err)) - } - } - } - - // authPath also provides information for the client to identify the server, so allow multiple auth methods in that case - if (len(methods) > 1) && (!usingAuthPath) { - validationErrors = append(validationErrors, fmt.Errorf("more than one authentication method found for %v; found %v, only one is allowed", authInfoName, methods)) - } - - return validationErrors -} - -// validateContext looks for errors in the context. It is not transitive, so errors in the reference authInfo or cluster configs are not included in this return -func validateContext(contextName string, context clientcmdapi.Context, config clientcmdapi.Config) []error { - validationErrors := make([]error, 0) - - if len(context.AuthInfo) == 0 { - validationErrors = append(validationErrors, fmt.Errorf("user was not specified for context %q", contextName)) - } else if _, exists := config.AuthInfos[context.AuthInfo]; !exists { - validationErrors = append(validationErrors, fmt.Errorf("user %q was not found for context %q", context.AuthInfo, contextName)) - } - - if len(context.Cluster) == 0 { - validationErrors = append(validationErrors, fmt.Errorf("cluster was not specified for context %q", contextName)) - } else if _, exists := config.Clusters[context.Cluster]; !exists { - validationErrors = append(validationErrors, fmt.Errorf("cluster %q was not found for context %q", context.Cluster, contextName)) - } - - if len(context.Namespace) != 0 { - if len(validation.IsDNS1123Label(context.Namespace)) != 0 { - validationErrors = append(validationErrors, fmt.Errorf("namespace %q for context %q does not conform to the kubernetes DNS_LABEL rules", context.Namespace, contextName)) - } - } - - return validationErrors -} diff --git a/pkg/client/unversioned/clientcmd/validation_test.go b/pkg/client/unversioned/clientcmd/validation_test.go deleted file mode 100644 index ab7dc268519..00000000000 --- a/pkg/client/unversioned/clientcmd/validation_test.go +++ /dev/null @@ -1,432 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clientcmd - -import ( - "io/ioutil" - "os" - "strings" - "testing" - - utilerrors "k8s.io/apimachinery/pkg/util/errors" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" -) - -func TestConfirmUsableBadInfoButOkConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - config.Clusters["missing ca"] = &clientcmdapi.Cluster{ - Server: "anything", - CertificateAuthority: "missing", - } - config.AuthInfos["error"] = &clientcmdapi.AuthInfo{ - Username: "anything", - Token: "here", - } - config.Contexts["dirty"] = &clientcmdapi.Context{ - Cluster: "missing ca", - AuthInfo: "error", - } - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "anything", - } - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - Token: "here", - } - config.Contexts["clean"] = &clientcmdapi.Context{ - Cluster: "clean", - AuthInfo: "clean", - } - - badValidation := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"unable to read certificate-authority"}, - } - okTest := configValidationTest{ - config: config, - } - - okTest.testConfirmUsable("clean", t) - badValidation.testConfig(t) -} -func TestConfirmUsableBadInfoConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - config.Clusters["missing ca"] = &clientcmdapi.Cluster{ - Server: "anything", - CertificateAuthority: "missing", - } - config.AuthInfos["error"] = &clientcmdapi.AuthInfo{ - Username: "anything", - Token: "here", - } - config.Contexts["first"] = &clientcmdapi.Context{ - Cluster: "missing ca", - AuthInfo: "error", - } - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"unable to read certificate-authority"}, - } - - test.testConfirmUsable("first", t) -} -func TestConfirmUsableEmptyConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"invalid configuration: no configuration has been provided"}, - } - - test.testConfirmUsable("", t) -} -func TestConfirmUsableMissingConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"invalid configuration: no configuration has been provided"}, - } - - test.testConfirmUsable("not-here", t) -} -func TestValidateEmptyConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"invalid configuration: no configuration has been provided"}, - } - - test.testConfig(t) -} -func TestValidateMissingCurrentContextConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - config.CurrentContext = "anything" - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"context was not found for specified "}, - } - - test.testConfig(t) -} -func TestIsContextNotFound(t *testing.T) { - config := clientcmdapi.NewConfig() - config.CurrentContext = "anything" - - err := Validate(*config) - if !IsContextNotFound(err) { - t.Errorf("Expected context not found, but got %v", err) - } - if !IsConfigurationInvalid(err) { - t.Errorf("Expected configuration invalid, but got %v", err) - } -} - -func TestIsEmptyConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - - err := Validate(*config) - if !IsEmptyConfig(err) { - t.Errorf("Expected context not found, but got %v", err) - } - if !IsConfigurationInvalid(err) { - t.Errorf("Expected configuration invalid, but got %v", err) - } -} - -func TestIsConfigurationInvalid(t *testing.T) { - if newErrConfigurationInvalid([]error{}) != nil { - t.Errorf("unexpected error") - } - if newErrConfigurationInvalid([]error{ErrNoContext}) == ErrNoContext { - t.Errorf("unexpected error") - } - if newErrConfigurationInvalid([]error{ErrNoContext, ErrNoContext}) == nil { - t.Errorf("unexpected error") - } - if !IsConfigurationInvalid(newErrConfigurationInvalid([]error{ErrNoContext, ErrNoContext})) { - t.Errorf("unexpected error") - } -} - -func TestValidateMissingReferencesConfig(t *testing.T) { - config := clientcmdapi.NewConfig() - config.CurrentContext = "anything" - config.Contexts["anything"] = &clientcmdapi.Context{Cluster: "missing", AuthInfo: "missing"} - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"user \"missing\" was not found for context \"anything\"", "cluster \"missing\" was not found for context \"anything\""}, - } - - test.testContext("anything", t) - test.testConfig(t) -} -func TestValidateEmptyContext(t *testing.T) { - config := clientcmdapi.NewConfig() - config.CurrentContext = "anything" - config.Contexts["anything"] = &clientcmdapi.Context{} - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"user was not specified for context \"anything\"", "cluster was not specified for context \"anything\""}, - } - - test.testContext("anything", t) - test.testConfig(t) -} - -func TestValidateEmptyClusterInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.Clusters["empty"] = &clientcmdapi.Cluster{} - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"cluster has no server defined"}, - } - - test.testCluster("empty", t) - test.testConfig(t) -} -func TestValidateMissingCAFileClusterInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.Clusters["missing ca"] = &clientcmdapi.Cluster{ - Server: "anything", - CertificateAuthority: "missing", - } - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"unable to read certificate-authority"}, - } - - test.testCluster("missing ca", t) - test.testConfig(t) -} -func TestValidateCleanClusterInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "anything", - } - test := configValidationTest{ - config: config, - } - - test.testCluster("clean", t) - test.testConfig(t) -} -func TestValidateCleanWithCAClusterInfo(t *testing.T) { - tempFile, _ := ioutil.TempFile("", "") - defer os.Remove(tempFile.Name()) - - config := clientcmdapi.NewConfig() - config.Clusters["clean"] = &clientcmdapi.Cluster{ - Server: "anything", - CertificateAuthority: tempFile.Name(), - } - test := configValidationTest{ - config: config, - } - - test.testCluster("clean", t) - test.testConfig(t) -} - -func TestValidateEmptyAuthInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.AuthInfos["error"] = &clientcmdapi.AuthInfo{} - test := configValidationTest{ - config: config, - } - - test.testAuthInfo("error", t) - test.testConfig(t) -} -func TestValidateCertFilesNotFoundAuthInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.AuthInfos["error"] = &clientcmdapi.AuthInfo{ - ClientCertificate: "missing", - ClientKey: "missing", - } - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"unable to read client-cert", "unable to read client-key"}, - } - - test.testAuthInfo("error", t) - test.testConfig(t) -} -func TestValidateCertDataOverridesFiles(t *testing.T) { - tempFile, _ := ioutil.TempFile("", "") - defer os.Remove(tempFile.Name()) - - config := clientcmdapi.NewConfig() - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - ClientCertificate: tempFile.Name(), - ClientCertificateData: []byte("certdata"), - ClientKey: tempFile.Name(), - ClientKeyData: []byte("keydata"), - } - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"client-cert-data and client-cert are both specified", "client-key-data and client-key are both specified"}, - } - - test.testAuthInfo("clean", t) - test.testConfig(t) -} -func TestValidateCleanCertFilesAuthInfo(t *testing.T) { - tempFile, _ := ioutil.TempFile("", "") - defer os.Remove(tempFile.Name()) - - config := clientcmdapi.NewConfig() - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - ClientCertificate: tempFile.Name(), - ClientKey: tempFile.Name(), - } - test := configValidationTest{ - config: config, - } - - test.testAuthInfo("clean", t) - test.testConfig(t) -} -func TestValidateCleanTokenAuthInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.AuthInfos["clean"] = &clientcmdapi.AuthInfo{ - Token: "any-value", - } - test := configValidationTest{ - config: config, - } - - test.testAuthInfo("clean", t) - test.testConfig(t) -} - -func TestValidateMultipleMethodsAuthInfo(t *testing.T) { - config := clientcmdapi.NewConfig() - config.AuthInfos["error"] = &clientcmdapi.AuthInfo{ - Token: "token", - Username: "username", - } - test := configValidationTest{ - config: config, - expectedErrorSubstring: []string{"more than one authentication method", "token", "basicAuth"}, - } - - test.testAuthInfo("error", t) - test.testConfig(t) -} - -type configValidationTest struct { - config *clientcmdapi.Config - expectedErrorSubstring []string -} - -func (c configValidationTest) testContext(contextName string, t *testing.T) { - errs := validateContext(contextName, *c.config.Contexts[contextName], *c.config) - - if len(c.expectedErrorSubstring) != 0 { - if len(errs) == 0 { - t.Errorf("Expected error containing: %v", c.expectedErrorSubstring) - } - for _, curr := range c.expectedErrorSubstring { - if len(errs) != 0 && !strings.Contains(utilerrors.NewAggregate(errs).Error(), curr) { - t.Errorf("Expected error containing: %v, but got %v", c.expectedErrorSubstring, utilerrors.NewAggregate(errs)) - } - } - - } else { - if len(errs) != 0 { - t.Errorf("Unexpected error: %v", utilerrors.NewAggregate(errs)) - } - } -} -func (c configValidationTest) testConfirmUsable(contextName string, t *testing.T) { - err := ConfirmUsable(*c.config, contextName) - - if len(c.expectedErrorSubstring) != 0 { - if err == nil { - t.Errorf("Expected error containing: %v", c.expectedErrorSubstring) - } else { - for _, curr := range c.expectedErrorSubstring { - if err != nil && !strings.Contains(err.Error(), curr) { - t.Errorf("Expected error containing: %v, but got %v", c.expectedErrorSubstring, err) - } - } - } - } else { - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - } -} -func (c configValidationTest) testConfig(t *testing.T) { - err := Validate(*c.config) - - if len(c.expectedErrorSubstring) != 0 { - if err == nil { - t.Errorf("Expected error containing: %v", c.expectedErrorSubstring) - } else { - for _, curr := range c.expectedErrorSubstring { - if err != nil && !strings.Contains(err.Error(), curr) { - t.Errorf("Expected error containing: %v, but got %v", c.expectedErrorSubstring, err) - } - } - if !IsConfigurationInvalid(err) { - t.Errorf("all errors should be configuration invalid: %v", err) - } - } - } else { - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - } -} -func (c configValidationTest) testCluster(clusterName string, t *testing.T) { - errs := validateClusterInfo(clusterName, *c.config.Clusters[clusterName]) - - if len(c.expectedErrorSubstring) != 0 { - if len(errs) == 0 { - t.Errorf("Expected error containing: %v", c.expectedErrorSubstring) - } - for _, curr := range c.expectedErrorSubstring { - if len(errs) != 0 && !strings.Contains(utilerrors.NewAggregate(errs).Error(), curr) { - t.Errorf("Expected error containing: %v, but got %v", c.expectedErrorSubstring, utilerrors.NewAggregate(errs)) - } - } - - } else { - if len(errs) != 0 { - t.Errorf("Unexpected error: %v", utilerrors.NewAggregate(errs)) - } - } -} - -func (c configValidationTest) testAuthInfo(authInfoName string, t *testing.T) { - errs := validateAuthInfo(authInfoName, *c.config.AuthInfos[authInfoName]) - - if len(c.expectedErrorSubstring) != 0 { - if len(errs) == 0 { - t.Errorf("Expected error containing: %v", c.expectedErrorSubstring) - } - for _, curr := range c.expectedErrorSubstring { - if len(errs) != 0 && !strings.Contains(utilerrors.NewAggregate(errs).Error(), curr) { - t.Errorf("Expected error containing: %v, but got %v", c.expectedErrorSubstring, utilerrors.NewAggregate(errs)) - } - } - - } else { - if len(errs) != 0 { - t.Errorf("Unexpected error: %v", utilerrors.NewAggregate(errs)) - } - } -} diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index c0bc9835b0c..a14a205a421 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -74,7 +74,6 @@ go_library( "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", "//pkg/client/typed/discovery:go_default_library", "//pkg/client/unversioned:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/client/unversioned/portforward:go_default_library", "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/kubectl:go_default_library", @@ -124,6 +123,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/yaml", "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/pkg/kubectl/cmd/cmd.go b/pkg/kubectl/cmd/cmd.go index d3978c8f6cd..50368393561 100644 --- a/pkg/kubectl/cmd/cmd.go +++ b/pkg/kubectl/cmd/cmd.go @@ -20,7 +20,7 @@ import ( "fmt" "io" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" cmdconfig "k8s.io/kubernetes/pkg/kubectl/cmd/config" "k8s.io/kubernetes/pkg/kubectl/cmd/rollout" "k8s.io/kubernetes/pkg/kubectl/cmd/set" diff --git a/pkg/kubectl/cmd/config/BUILD b/pkg/kubectl/cmd/config/BUILD index 6d4c314d8ad..396c4d50aab 100644 --- a/pkg/kubectl/cmd/config/BUILD +++ b/pkg/kubectl/cmd/config/BUILD @@ -28,7 +28,6 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", @@ -36,6 +35,7 @@ go_library( "//vendor:github.com/spf13/cobra", "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", "//vendor:k8s.io/client-go/tools/clientcmd/api/latest", ], @@ -57,10 +57,10 @@ go_test( tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/util/flag:go_default_library", "//vendor:k8s.io/apimachinery/pkg/util/diff", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/pkg/kubectl/cmd/config/config.go b/pkg/kubectl/cmd/config/config.go index 2b445f16fb4..e910e0fac1c 100644 --- a/pkg/kubectl/cmd/config/config.go +++ b/pkg/kubectl/cmd/config/config.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/config_test.go b/pkg/kubectl/cmd/config/config_test.go index b0927a85ddb..0bd896da660 100644 --- a/pkg/kubectl/cmd/config/config_test.go +++ b/pkg/kubectl/cmd/config/config_test.go @@ -27,9 +27,9 @@ import ( "testing" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/create_authinfo.go b/pkg/kubectl/cmd/config/create_authinfo.go index c217aee14f5..ba71a47cd29 100644 --- a/pkg/kubectl/cmd/config/create_authinfo.go +++ b/pkg/kubectl/cmd/config/create_authinfo.go @@ -26,8 +26,8 @@ import ( "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/flag" diff --git a/pkg/kubectl/cmd/config/create_cluster.go b/pkg/kubectl/cmd/config/create_cluster.go index 82e11da8854..f08b28a4af3 100644 --- a/pkg/kubectl/cmd/config/create_cluster.go +++ b/pkg/kubectl/cmd/config/create_cluster.go @@ -25,8 +25,8 @@ import ( "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/flag" diff --git a/pkg/kubectl/cmd/config/create_context.go b/pkg/kubectl/cmd/config/create_context.go index 48989cd0ea3..d7509cf9371 100644 --- a/pkg/kubectl/cmd/config/create_context.go +++ b/pkg/kubectl/cmd/config/create_context.go @@ -23,8 +23,8 @@ import ( "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/flag" diff --git a/pkg/kubectl/cmd/config/current_context.go b/pkg/kubectl/cmd/config/current_context.go index 7a576590b7a..17e9e92196d 100644 --- a/pkg/kubectl/cmd/config/current_context.go +++ b/pkg/kubectl/cmd/config/current_context.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/current_context_test.go b/pkg/kubectl/cmd/config/current_context_test.go index cd2db6fbac2..627c79bc880 100644 --- a/pkg/kubectl/cmd/config/current_context_test.go +++ b/pkg/kubectl/cmd/config/current_context_test.go @@ -23,8 +23,8 @@ import ( "strings" "testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) type currentContextTest struct { diff --git a/pkg/kubectl/cmd/config/delete_cluster.go b/pkg/kubectl/cmd/config/delete_cluster.go index f1700e3f960..9b89c92a70e 100644 --- a/pkg/kubectl/cmd/config/delete_cluster.go +++ b/pkg/kubectl/cmd/config/delete_cluster.go @@ -21,7 +21,7 @@ import ( "io" "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/delete_cluster_test.go b/pkg/kubectl/cmd/config/delete_cluster_test.go index 523854097d2..684e47bf795 100644 --- a/pkg/kubectl/cmd/config/delete_cluster_test.go +++ b/pkg/kubectl/cmd/config/delete_cluster_test.go @@ -24,8 +24,8 @@ import ( "reflect" "testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) type deleteClusterTest struct { diff --git a/pkg/kubectl/cmd/config/delete_context.go b/pkg/kubectl/cmd/config/delete_context.go index 78fa334035a..61cb6d46721 100644 --- a/pkg/kubectl/cmd/config/delete_context.go +++ b/pkg/kubectl/cmd/config/delete_context.go @@ -21,7 +21,7 @@ import ( "io" "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/delete_context_test.go b/pkg/kubectl/cmd/config/delete_context_test.go index 130de20ed51..a53ef9c98c2 100644 --- a/pkg/kubectl/cmd/config/delete_context_test.go +++ b/pkg/kubectl/cmd/config/delete_context_test.go @@ -24,8 +24,8 @@ import ( "reflect" "testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) type deleteContextTest struct { diff --git a/pkg/kubectl/cmd/config/get_clusters.go b/pkg/kubectl/cmd/config/get_clusters.go index 9b31d28b07c..e9ca71dcea6 100644 --- a/pkg/kubectl/cmd/config/get_clusters.go +++ b/pkg/kubectl/cmd/config/get_clusters.go @@ -21,7 +21,7 @@ import ( "io" "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/get_clusters_test.go b/pkg/kubectl/cmd/config/get_clusters_test.go index ec77b79f8fa..4c9d3da8926 100644 --- a/pkg/kubectl/cmd/config/get_clusters_test.go +++ b/pkg/kubectl/cmd/config/get_clusters_test.go @@ -22,8 +22,8 @@ import ( "os" "testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) type getClustersTest struct { diff --git a/pkg/kubectl/cmd/config/get_contexts.go b/pkg/kubectl/cmd/config/get_contexts.go index dfa67c9eb2d..ef761006633 100644 --- a/pkg/kubectl/cmd/config/get_contexts.go +++ b/pkg/kubectl/cmd/config/get_contexts.go @@ -25,8 +25,8 @@ import ( "github.com/spf13/cobra" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" diff --git a/pkg/kubectl/cmd/config/get_contexts_test.go b/pkg/kubectl/cmd/config/get_contexts_test.go index b4c78a7bf11..5a7da24ebb0 100644 --- a/pkg/kubectl/cmd/config/get_contexts_test.go +++ b/pkg/kubectl/cmd/config/get_contexts_test.go @@ -22,8 +22,8 @@ import ( "os" "testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) type getContextsTest struct { diff --git a/pkg/kubectl/cmd/config/set.go b/pkg/kubectl/cmd/config/set.go index faf02308389..6b72cf2e8ff 100644 --- a/pkg/kubectl/cmd/config/set.go +++ b/pkg/kubectl/cmd/config/set.go @@ -26,7 +26,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/util/flag" diff --git a/pkg/kubectl/cmd/config/unset.go b/pkg/kubectl/cmd/config/unset.go index 48a56f8b46e..38560a22e14 100644 --- a/pkg/kubectl/cmd/config/unset.go +++ b/pkg/kubectl/cmd/config/unset.go @@ -25,7 +25,7 @@ import ( "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/use_context.go b/pkg/kubectl/cmd/config/use_context.go index 0f2fed7f87d..584a59272e9 100644 --- a/pkg/kubectl/cmd/config/use_context.go +++ b/pkg/kubectl/cmd/config/use_context.go @@ -23,8 +23,8 @@ import ( "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" ) diff --git a/pkg/kubectl/cmd/config/view.go b/pkg/kubectl/cmd/config/view.go index 157d713c011..0baaf43e8d8 100644 --- a/pkg/kubectl/cmd/config/view.go +++ b/pkg/kubectl/cmd/config/view.go @@ -23,9 +23,9 @@ import ( "github.com/spf13/cobra" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/tools/clientcmd/api/latest" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" diff --git a/pkg/kubectl/cmd/util/BUILD b/pkg/kubectl/cmd/util/BUILD index 91d762386fe..5d64492e5a4 100644 --- a/pkg/kubectl/cmd/util/BUILD +++ b/pkg/kubectl/cmd/util/BUILD @@ -37,14 +37,12 @@ go_library( "//pkg/client/typed/discovery:go_default_library", "//pkg/client/typed/dynamic:go_default_library", "//pkg/client/unversioned:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/controller:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/resource:go_default_library", "//pkg/registry/extensions/thirdpartyresourcedata:go_default_library", "//pkg/util/exec:go_default_library", "//pkg/util/flag:go_default_library", - "//pkg/util/homedir:go_default_library", "//pkg/util/strategicpatch:go_default_library", "//vendor:github.com/emicklei/go-restful/swagger", "//vendor:github.com/evanphx/json-patch", @@ -63,7 +61,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/version", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/util/homedir", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) @@ -91,7 +91,6 @@ go_test( "//pkg/client/restclient/fake:go_default_library", "//pkg/client/testing/core:go_default_library", "//pkg/client/typed/discovery:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/controller:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/kubectl/resource:go_default_library", @@ -109,6 +108,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/version", "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/pkg/kubectl/cmd/util/clientcache.go b/pkg/kubectl/cmd/util/clientcache.go index 8626159e72f..5604bbf14b0 100644 --- a/pkg/kubectl/cmd/util/clientcache.go +++ b/pkg/kubectl/cmd/util/clientcache.go @@ -21,12 +21,12 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/typed/discovery" oldclient "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) func NewClientCache(loader clientcmd.ClientConfig, discoveryClientFactory DiscoveryClientFactory) *ClientCache { diff --git a/pkg/kubectl/cmd/util/factory.go b/pkg/kubectl/cmd/util/factory.go index 783e374d6ae..53778cc5fb4 100644 --- a/pkg/kubectl/cmd/util/factory.go +++ b/pkg/kubectl/cmd/util/factory.go @@ -40,6 +40,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer/json" "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -47,7 +48,6 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" "k8s.io/kubernetes/pkg/client/typed/discovery" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata" diff --git a/pkg/kubectl/cmd/util/factory_client_access.go b/pkg/kubectl/cmd/util/factory_client_access.go index 72f03ec216e..5738e205a69 100644 --- a/pkg/kubectl/cmd/util/factory_client_access.go +++ b/pkg/kubectl/cmd/util/factory_client_access.go @@ -35,7 +35,9 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/pkg/util/homedir" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/service" @@ -44,12 +46,10 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/typed/discovery" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata" utilflag "k8s.io/kubernetes/pkg/util/flag" - "k8s.io/kubernetes/pkg/util/homedir" ) type ring0Factory struct { diff --git a/pkg/kubectl/cmd/util/factory_test.go b/pkg/kubectl/cmd/util/factory_test.go index 20b81781e77..a75ae9875a0 100644 --- a/pkg/kubectl/cmd/util/factory_test.go +++ b/pkg/kubectl/cmd/util/factory_test.go @@ -37,6 +37,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" @@ -46,7 +47,6 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" manualfake "k8s.io/kubernetes/pkg/client/restclient/fake" testcore "k8s.io/kubernetes/pkg/client/testing/core" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/resource" diff --git a/pkg/kubectl/cmd/util/helpers.go b/pkg/kubectl/cmd/util/helpers.go index 5db4086d3e2..193512c9c6f 100644 --- a/pkg/kubectl/cmd/util/helpers.go +++ b/pkg/kubectl/cmd/util/helpers.go @@ -40,9 +40,9 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/resource" utilexec "k8s.io/kubernetes/pkg/util/exec" diff --git a/pkg/util/BUILD b/pkg/util/BUILD index a5dcd03d3ad..78e2d8ea05f 100644 --- a/pkg/util/BUILD +++ b/pkg/util/BUILD @@ -64,7 +64,6 @@ filegroup( "//pkg/util/framer:all-srcs", "//pkg/util/goroutinemap:all-srcs", "//pkg/util/hash:all-srcs", - "//pkg/util/homedir:all-srcs", "//pkg/util/httpstream:all-srcs", "//pkg/util/i18n:all-srcs", "//pkg/util/initsystem:all-srcs", diff --git a/pkg/util/homedir/BUILD b/pkg/util/homedir/BUILD deleted file mode 100644 index 3454c2c0a88..00000000000 --- a/pkg/util/homedir/BUILD +++ /dev/null @@ -1,27 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = ["homedir.go"], - tags = ["automanaged"], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/pkg/util/homedir/homedir.go b/pkg/util/homedir/homedir.go deleted file mode 100644 index 816db57f599..00000000000 --- a/pkg/util/homedir/homedir.go +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package homedir - -import ( - "os" - "runtime" -) - -// HomeDir returns the home directory for the current user -func HomeDir() string { - if runtime.GOOS == "windows" { - - // First prefer the HOME environmental variable - if home := os.Getenv("HOME"); len(home) > 0 { - if _, err := os.Stat(home); err == nil { - return home - } - } - if homeDrive, homePath := os.Getenv("HOMEDRIVE"), os.Getenv("HOMEPATH"); len(homeDrive) > 0 && len(homePath) > 0 { - homeDir := homeDrive + homePath - if _, err := os.Stat(homeDir); err == nil { - return homeDir - } - } - if userProfile := os.Getenv("USERPROFILE"); len(userProfile) > 0 { - if _, err := os.Stat(userProfile); err == nil { - return userProfile - } - } - } - return os.Getenv("HOME") -} diff --git a/plugin/cmd/kube-scheduler/app/BUILD b/plugin/cmd/kube-scheduler/app/BUILD index c824f6e5e15..2c75cbe9969 100644 --- a/plugin/cmd/kube-scheduler/app/BUILD +++ b/plugin/cmd/kube-scheduler/app/BUILD @@ -18,7 +18,6 @@ go_library( "//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/client/record:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/util/configz:go_default_library", "//plugin/cmd/kube-scheduler/app/options:go_default_library", "//plugin/pkg/scheduler:go_default_library", @@ -34,6 +33,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apiserver/pkg/server/healthz", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/plugin/cmd/kube-scheduler/app/server.go b/plugin/cmd/kube-scheduler/app/server.go index 5569ae5f565..ac040808a13 100644 --- a/plugin/cmd/kube-scheduler/app/server.go +++ b/plugin/cmd/kube-scheduler/app/server.go @@ -31,13 +31,13 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/server/healthz" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/client/record" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" "k8s.io/kubernetes/plugin/pkg/scheduler" diff --git a/plugin/pkg/admission/initialresources/BUILD b/plugin/pkg/admission/initialresources/BUILD index 4bab6d9f460..9c0b6f0f5b3 100644 --- a/plugin/pkg/admission/initialresources/BUILD +++ b/plugin/pkg/admission/initialresources/BUILD @@ -21,7 +21,6 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/api/resource:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//vendor:cloud.google.com/go/compute/metadata", "//vendor:github.com/golang/glog", "//vendor:github.com/hawkular/hawkular-client-go/metrics", @@ -32,6 +31,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apiserver/pkg/admission", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/plugin/pkg/admission/initialresources/hawkular.go b/plugin/pkg/admission/initialresources/hawkular.go index ce6edcc6a02..4d2401ca45d 100644 --- a/plugin/pkg/admission/initialresources/hawkular.go +++ b/plugin/pkg/admission/initialresources/hawkular.go @@ -32,7 +32,7 @@ import ( "k8s.io/kubernetes/pkg/api" restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/client-go/tools/clientcmd" ) type hawkularSource struct { diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 3b564f6731d..f01f62a482b 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -52,7 +52,6 @@ go_library( "//pkg/client/conditions:go_default_library", "//pkg/client/typed/discovery:go_default_library", "//pkg/client/typed/dynamic:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/client/unversioned/remotecommand:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers/gce:go_default_library", @@ -108,6 +107,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/client-go/kubernetes", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/test/e2e/framework/test_context.go b/test/e2e/framework/test_context.go index bfdd7cc7add..ceddefcbc02 100644 --- a/test/e2e/framework/test_context.go +++ b/test/e2e/framework/test_context.go @@ -23,8 +23,8 @@ import ( "github.com/onsi/ginkgo/config" "github.com/spf13/viper" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/apis/componentconfig" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/cloudprovider" ) diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index c93fefe219a..b142549e743 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -63,6 +63,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -76,7 +77,6 @@ import ( "k8s.io/kubernetes/pkg/client/conditions" "k8s.io/kubernetes/pkg/client/typed/discovery" "k8s.io/kubernetes/pkg/client/typed/dynamic" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" "k8s.io/kubernetes/pkg/controller" deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" diff --git a/test/e2e_federation/BUILD b/test/e2e_federation/BUILD index 6e948e91e7a..aac855eeb5a 100644 --- a/test/e2e_federation/BUILD +++ b/test/e2e_federation/BUILD @@ -32,7 +32,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/util/intstr:go_default_library", "//test/e2e/common:go_default_library", "//test/e2e/framework:go_default_library", @@ -43,6 +42,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", ], ) diff --git a/test/e2e_federation/federation-authn.go b/test/e2e_federation/federation-authn.go index e431ce1bdd3..dee2b95b076 100644 --- a/test/e2e_federation/federation-authn.go +++ b/test/e2e_federation/federation-authn.go @@ -20,9 +20,9 @@ import ( "fmt" "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/test/e2e/framework" fedframework "k8s.io/kubernetes/test/e2e_federation/framework" diff --git a/test/e2e_federation/federation-util.go b/test/e2e_federation/federation-util.go index b59d1d12bf2..4e405d09e42 100644 --- a/test/e2e_federation/federation-util.go +++ b/test/e2e_federation/federation-util.go @@ -26,13 +26,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/test/e2e/common" "k8s.io/kubernetes/test/e2e/framework" fedframework "k8s.io/kubernetes/test/e2e_federation/framework" diff --git a/test/e2e_federation/framework/BUILD b/test/e2e_federation/framework/BUILD index 7461abdf15b..3d98d57591d 100644 --- a/test/e2e_federation/framework/BUILD +++ b/test/e2e_federation/framework/BUILD @@ -21,7 +21,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//test/e2e/framework:go_default_library", "//vendor:github.com/onsi/ginkgo", "//vendor:github.com/onsi/gomega", @@ -31,6 +30,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/validation", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/test/e2e_federation/framework/util.go b/test/e2e_federation/framework/util.go index 587d05b4dc7..b292e486dd1 100644 --- a/test/e2e_federation/framework/util.go +++ b/test/e2e_federation/framework/util.go @@ -27,13 +27,13 @@ import ( validationutil "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/wait" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/test/e2e/framework" ) diff --git a/test/integration/kubectl/kubectl_test.go b/test/integration/kubectl/kubectl_test.go index 8d9893ca560..f1202b31b23 100644 --- a/test/integration/kubectl/kubectl_test.go +++ b/test/integration/kubectl/kubectl_test.go @@ -21,8 +21,8 @@ package kubectl import ( "testing" + "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/test/integration/framework" ) diff --git a/test/soak/serve_hostnames/BUILD b/test/soak/serve_hostnames/BUILD index cffad4efda5..337b7d396fa 100644 --- a/test/soak/serve_hostnames/BUILD +++ b/test/soak/serve_hostnames/BUILD @@ -22,7 +22,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/util/intstr:go_default_library", "//test/e2e/framework:go_default_library", "//vendor:github.com/golang/glog", @@ -30,6 +29,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/test/soak/serve_hostnames/serve_hostnames.go b/test/soak/serve_hostnames/serve_hostnames.go index 17671df14cd..0b0f630876f 100644 --- a/test/soak/serve_hostnames/serve_hostnames.go +++ b/test/soak/serve_hostnames/serve_hostnames.go @@ -33,10 +33,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/util/intstr" e2e "k8s.io/kubernetes/test/e2e/framework"