Create meta/internalversion for ListOptions

Move over only the conversions that are needed, create a new scheme that
is private to meta and only accessible via ParameterCodec. Move half of
pkg/util/labels/.readonly to pkg/apis/meta/v1/labels.go
pull/6/head
Clayton Coleman 2017-01-19 16:39:00 -05:00
parent bf20045736
commit 4f865efdb9
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
17 changed files with 989 additions and 153 deletions

View File

@ -287,14 +287,6 @@ func IsStandardFinalizerName(str string) bool {
return standardFinalizers.Has(str)
}
// SingleObject returns a ListOptions for watching a single object.
func SingleObject(meta metav1.ObjectMeta) ListOptions {
return ListOptions{
FieldSelector: fields.OneTermEqualSelector("metadata.name", meta.Name),
ResourceVersion: meta.ResourceVersion,
}
}
// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice,
// only if they do not already exist
func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) {

View File

@ -2867,6 +2867,7 @@ type DeleteOptions struct {
// ListOptions is the query options to a standard REST list call, and has future support for
// watch calls.
// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
type ListOptions struct {
metav1.TypeMeta

View File

@ -1276,6 +1276,8 @@ message List {
}
// ListOptions is the query options to a standard REST list call.
// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
// +k8s:openapi-gen=false
message ListOptions {
// A selector to restrict the list of returned objects by their labels.
// Defaults to everything.

View File

@ -21,8 +21,6 @@ import (
"fmt"
"strings"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/selection"
"k8s.io/apimachinery/pkg/types"
@ -91,14 +89,6 @@ func IsStandardFinalizerName(str string) bool {
return standardFinalizers.Has(str)
}
// SingleObject returns a ListOptions for watching a single object.
func SingleObject(meta metav1.ObjectMeta) ListOptions {
return ListOptions{
FieldSelector: fields.OneTermEqualSelector("metadata.name", meta.Name).String(),
ResourceVersion: meta.ResourceVersion,
}
}
// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice,
// only if they do not already exist
func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) {

View File

@ -3308,6 +3308,8 @@ type DeleteOptions struct {
}
// ListOptions is the query options to a standard REST list call.
// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
// +k8s:openapi-gen=false
type ListOptions struct {
metav1.TypeMeta `json:",inline"`

View File

View File

@ -0,0 +1,106 @@
/*
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.
*/
package internalversion
import (
"fmt"
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/util/validation/field"
)
func Convert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, out *metav1.ListOptions, s conversion.Scope) error {
if err := Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil {
return err
}
if err := Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil {
return err
}
out.ResourceVersion = in.ResourceVersion
out.TimeoutSeconds = in.TimeoutSeconds
out.Watch = in.Watch
return nil
}
func Convert_v1_ListOptions_To_internalversion_ListOptions(in *metav1.ListOptions, out *ListOptions, s conversion.Scope) error {
if err := Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil {
return err
}
if err := Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil {
return err
}
out.ResourceVersion = in.ResourceVersion
out.TimeoutSeconds = in.TimeoutSeconds
out.Watch = in.Watch
return nil
}
func Convert_string_To_labels_Selector(in *string, out *labels.Selector, s conversion.Scope) error {
selector, err := labels.Parse(*in)
if err != nil {
return err
}
*out = selector
return nil
}
func Convert_string_To_fields_Selector(in *string, out *fields.Selector, s conversion.Scope) error {
selector, err := fields.ParseSelector(*in)
if err != nil {
return err
}
*out = selector
return nil
}
func Convert_labels_Selector_To_string(in *labels.Selector, out *string, s conversion.Scope) error {
if *in == nil {
return nil
}
*out = (*in).String()
return nil
}
func Convert_fields_Selector_To_string(in *fields.Selector, out *string, s conversion.Scope) error {
if *in == nil {
return nil
}
*out = (*in).String()
return nil
}
func Convert_map_to_v1_LabelSelector(in *map[string]string, out *metav1.LabelSelector, s conversion.Scope) error {
if in == nil {
return nil
}
out = new(metav1.LabelSelector)
for labelKey, labelValue := range *in {
metav1.AddLabelToSelector(out, labelKey, labelValue)
}
return nil
}
func Convert_v1_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
}

View File

@ -0,0 +1,77 @@
/*
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.
*/
package internalversion
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
)
// GroupName is the group name for this API.
const GroupName = "meta.k8s.io"
// Scheme is the registry for any type that adheres to the meta API spec.
var scheme = runtime.NewScheme()
// Codecs provides access to encoding and decoding for the scheme
var codecs = serializer.NewCodecFactory(scheme)
// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
// ParameterCodec handles versioning of objects that are converted to query parameters.
var ParameterCodec = runtime.NewParameterCodec(scheme)
// Kind takes an unqualified kind and returns a Group qualified GroupKind
func Kind(kind string) schema.GroupKind {
return SchemeGroupVersion.WithKind(kind).GroupKind()
}
// addToGroupVersion registers common meta types into schemas.
func addToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion) error {
if err := scheme.AddIgnoredConversionType(&metav1.TypeMeta{}, &metav1.TypeMeta{}); err != nil {
return err
}
scheme.AddConversionFuncs(
Convert_string_To_labels_Selector,
Convert_labels_Selector_To_string,
Convert_string_To_fields_Selector,
Convert_fields_Selector_To_string,
Convert_map_to_v1_LabelSelector,
Convert_v1_LabelSelector_to_map,
Convert_internalversion_ListOptions_To_v1_ListOptions,
Convert_v1_ListOptions_To_internalversion_ListOptions,
)
scheme.AddKnownTypes(SchemeGroupVersion,
&ListOptions{},
)
metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)
return nil
}
// Unlike other API groups, meta internal knows about all meta external versions, but keeps
// the logic for conversion private.
func init() {
if err := addToGroupVersion(scheme, SchemeGroupVersion); err != nil {
panic(err)
}
}

View File

@ -0,0 +1,73 @@
package internalversion
import (
"net/url"
"reflect"
"testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/diff"
)
func TestListOptions(t *testing.T) {
// verify round trip conversion
ten := int64(10)
in := &metav1.ListOptions{
LabelSelector: "a=1",
FieldSelector: "b=1",
ResourceVersion: "10",
TimeoutSeconds: &ten,
Watch: true,
}
out := &ListOptions{}
if err := scheme.Convert(in, out, nil); err != nil {
t.Fatal(err)
}
actual := &metav1.ListOptions{}
if err := scheme.Convert(out, actual, nil); err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(in, actual) {
t.Errorf("unexpected: %s", diff.ObjectReflectDiff(in, actual))
}
// verify failing conversion
for i, failingObject := range []*metav1.ListOptions{
&metav1.ListOptions{LabelSelector: "a!!!"},
&metav1.ListOptions{FieldSelector: "a!!!"},
} {
out = &ListOptions{}
if err := scheme.Convert(failingObject, out, nil); err == nil {
t.Errorf("%d: unexpected conversion: %#v", i, out)
}
}
// verify kind registration
if gvk, unversioned, err := scheme.ObjectKind(in); err != nil || unversioned || gvk != metav1.SchemeGroupVersion.WithKind("ListOptions") {
t.Errorf("unexpected: %v %v %v", gvk, unversioned, err)
}
if gvk, unversioned, err := scheme.ObjectKind(out); err != nil || unversioned || gvk != SchemeGroupVersion.WithKind("ListOptions") {
t.Errorf("unexpected: %v %v %v", gvk, unversioned, err)
}
actual = &metav1.ListOptions{}
if err := ParameterCodec.DecodeParameters(url.Values{"watch": []string{"1"}}, metav1.SchemeGroupVersion, actual); err != nil {
t.Fatal(err)
}
if !actual.Watch {
t.Errorf("unexpected watch decode: %#v", actual)
}
// check ParameterCodec
query, err := ParameterCodec.EncodeParameters(in, metav1.SchemeGroupVersion)
if err != nil {
t.Fatal(err)
}
actual = &metav1.ListOptions{}
if err := ParameterCodec.DecodeParameters(query, metav1.SchemeGroupVersion, actual); err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(in, actual) {
t.Errorf("unexpected: %s", diff.ObjectReflectDiff(in, actual))
}
}

View File

@ -0,0 +1,45 @@
/*
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.
*/
package internalversion
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
)
// ListOptions is the query options to a standard REST list call, and has future support for
// watch calls.
type ListOptions struct {
metav1.TypeMeta
// A selector based on labels
LabelSelector labels.Selector
// A selector based on fields
FieldSelector fields.Selector
// If true, watch for changes to this list
Watch bool
// When specified with a watch call, shows changes that occur after that particular version of a resource.
// Defaults to changes from the beginning of history.
// When specified for list:
// - if unset, then the result is returned from remote storage based on quorum-read flag;
// - if it's 0, then we simply return what we currently have in cache, no guarantee;
// - if set to non zero, then the result is at least as fresh as given rv.
ResourceVersion string
// Timeout for the list/watch call.
TimeoutSeconds *int64
}

View File

@ -42,6 +42,7 @@ limitations under the License.
LabelSelector
LabelSelectorRequirement
ListMeta
ListOptions
ObjectMeta
OwnerReference
RootPaths
@ -151,55 +152,59 @@ func (m *ListMeta) Reset() { *m = ListMeta{} }
func (*ListMeta) ProtoMessage() {}
func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} }
func (m *ListOptions) Reset() { *m = ListOptions{} }
func (*ListOptions) ProtoMessage() {}
func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} }
func (m *ObjectMeta) Reset() { *m = ObjectMeta{} }
func (*ObjectMeta) ProtoMessage() {}
func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} }
func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} }
func (m *OwnerReference) Reset() { *m = OwnerReference{} }
func (*OwnerReference) ProtoMessage() {}
func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} }
func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
func (m *RootPaths) Reset() { *m = RootPaths{} }
func (*RootPaths) ProtoMessage() {}
func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} }
func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} }
func (*ServerAddressByClientCIDR) ProtoMessage() {}
func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) {
return fileDescriptorGenerated, []int{20}
return fileDescriptorGenerated, []int{21}
}
func (m *Status) Reset() { *m = Status{} }
func (*Status) ProtoMessage() {}
func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} }
func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
func (m *StatusCause) Reset() { *m = StatusCause{} }
func (*StatusCause) ProtoMessage() {}
func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
func (m *StatusDetails) Reset() { *m = StatusDetails{} }
func (*StatusDetails) ProtoMessage() {}
func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
func (m *Time) Reset() { *m = Time{} }
func (*Time) ProtoMessage() {}
func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
func (m *Timestamp) Reset() { *m = Timestamp{} }
func (*Timestamp) ProtoMessage() {}
func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
func (m *TypeMeta) Reset() { *m = TypeMeta{} }
func (*TypeMeta) ProtoMessage() {}
func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
func (m *Verbs) Reset() { *m = Verbs{} }
func (*Verbs) ProtoMessage() {}
func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
func (*Verbs) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
func (m *WatchEvent) Reset() { *m = WatchEvent{} }
func (*WatchEvent) ProtoMessage() {}
func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
func (*WatchEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} }
func init() {
proto.RegisterType((*APIGroup)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIGroup")
@ -219,6 +224,7 @@ func init() {
proto.RegisterType((*LabelSelector)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector")
proto.RegisterType((*LabelSelectorRequirement)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement")
proto.RegisterType((*ListMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta")
proto.RegisterType((*ListOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ListOptions")
proto.RegisterType((*ObjectMeta)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta")
proto.RegisterType((*OwnerReference)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference")
proto.RegisterType((*RootPaths)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.RootPaths")
@ -794,6 +800,49 @@ func (m *ListMeta) MarshalTo(data []byte) (int, error) {
return i, nil
}
func (m *ListOptions) 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 *ListOptions) MarshalTo(data []byte) (int, error) {
var i int
_ = i
var l int
_ = l
data[i] = 0xa
i++
i = encodeVarintGenerated(data, i, uint64(len(m.LabelSelector)))
i += copy(data[i:], m.LabelSelector)
data[i] = 0x12
i++
i = encodeVarintGenerated(data, i, uint64(len(m.FieldSelector)))
i += copy(data[i:], m.FieldSelector)
data[i] = 0x18
i++
if m.Watch {
data[i] = 1
} else {
data[i] = 0
}
i++
data[i] = 0x22
i++
i = encodeVarintGenerated(data, i, uint64(len(m.ResourceVersion)))
i += copy(data[i:], m.ResourceVersion)
if m.TimeoutSeconds != nil {
data[i] = 0x28
i++
i = encodeVarintGenerated(data, i, uint64(*m.TimeoutSeconds))
}
return i, nil
}
func (m *ObjectMeta) Marshal() (data []byte, err error) {
size := m.Size()
data = make([]byte, size)
@ -1510,6 +1559,22 @@ func (m *ListMeta) Size() (n int) {
return n
}
func (m *ListOptions) Size() (n int) {
var l int
_ = l
l = len(m.LabelSelector)
n += 1 + l + sovGenerated(uint64(l))
l = len(m.FieldSelector)
n += 1 + l + sovGenerated(uint64(l))
n += 2
l = len(m.ResourceVersion)
n += 1 + l + sovGenerated(uint64(l))
if m.TimeoutSeconds != nil {
n += 1 + sovGenerated(uint64(*m.TimeoutSeconds))
}
return n
}
func (m *ObjectMeta) Size() (n int) {
var l int
_ = l
@ -1843,6 +1908,20 @@ func (this *ListMeta) String() string {
}, "")
return s
}
func (this *ListOptions) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&ListOptions{`,
`LabelSelector:` + fmt.Sprintf("%v", this.LabelSelector) + `,`,
`FieldSelector:` + fmt.Sprintf("%v", this.FieldSelector) + `,`,
`Watch:` + fmt.Sprintf("%v", this.Watch) + `,`,
`ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`,
`TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`,
`}`,
}, "")
return s
}
func (this *ObjectMeta) String() string {
if this == nil {
return "nil"
@ -4018,6 +4097,183 @@ func (m *ListMeta) Unmarshal(data []byte) error {
}
return nil
}
func (m *ListOptions) 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: ListOptions: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ListOptions: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.LabelSelector = string(data[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field FieldSelector", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.FieldSelector = string(data[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Watch", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.Watch = bool(v != 0)
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ResourceVersion = string(data[iNdEx:postIndex])
iNdEx = postIndex
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType)
}
var v int64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
v |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.TimeoutSeconds = &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 *ObjectMeta) Unmarshal(data []byte) error {
l := len(data)
iNdEx := 0
@ -6062,126 +6318,130 @@ var (
)
var fileDescriptorGenerated = []byte{
// 1922 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x58, 0x4f, 0x6f, 0x23, 0x49,
0x15, 0x77, 0xdb, 0xb1, 0xc7, 0x7e, 0x8e, 0x27, 0x49, 0x31, 0x23, 0xbc, 0x91, 0xb0, 0xb3, 0xbd,
0x2b, 0x34, 0x0b, 0xbb, 0x36, 0x09, 0xb0, 0x1a, 0x06, 0x58, 0x14, 0xc7, 0x99, 0x28, 0xda, 0xc9,
0x4c, 0x54, 0xd9, 0x19, 0xc4, 0x32, 0x42, 0x74, 0xba, 0x2b, 0x4e, 0x93, 0x76, 0x77, 0x53, 0x55,
0xf6, 0xc4, 0xec, 0x81, 0x95, 0x00, 0x89, 0x03, 0x42, 0x73, 0xe4, 0x80, 0xd0, 0x8e, 0xe0, 0x13,
0xf0, 0x25, 0x98, 0xe3, 0x4a, 0x7b, 0xe1, 0x80, 0x22, 0x26, 0x1c, 0x38, 0x72, 0x8f, 0x38, 0xa0,
0xaa, 0xae, 0xea, 0x3f, 0xce, 0x78, 0xd3, 0x66, 0xf7, 0xb0, 0x27, 0x77, 0xbd, 0x3f, 0xbf, 0xf7,
0xea, 0xd5, 0xab, 0x57, 0xef, 0x19, 0xf6, 0x4e, 0x6e, 0xb3, 0x8e, 0x1b, 0x74, 0x4f, 0x46, 0x87,
0x84, 0xfa, 0x84, 0x13, 0xd6, 0x1d, 0x13, 0xdf, 0x09, 0x68, 0x57, 0x31, 0xac, 0xd0, 0x1d, 0x5a,
0xf6, 0xb1, 0xeb, 0x13, 0x3a, 0xe9, 0x86, 0x27, 0x03, 0x41, 0x60, 0xdd, 0x21, 0xe1, 0x56, 0x77,
0xbc, 0xde, 0x1d, 0x10, 0x9f, 0x50, 0x8b, 0x13, 0xa7, 0x13, 0xd2, 0x80, 0x07, 0xe8, 0xf5, 0x48,
0xab, 0x93, 0xd6, 0xea, 0x84, 0x27, 0x03, 0x41, 0x60, 0x1d, 0xa1, 0xd5, 0x19, 0xaf, 0xaf, 0xbe,
0x35, 0x70, 0xf9, 0xf1, 0xe8, 0xb0, 0x63, 0x07, 0xc3, 0xee, 0x20, 0x18, 0x04, 0x5d, 0xa9, 0x7c,
0x38, 0x3a, 0x92, 0x2b, 0xb9, 0x90, 0x5f, 0x11, 0xe8, 0xea, 0x4c, 0x57, 0xe8, 0xc8, 0xe7, 0xee,
0x90, 0x4c, 0x7b, 0xb1, 0xfa, 0xf6, 0x55, 0x0a, 0xcc, 0x3e, 0x26, 0x43, 0xeb, 0x92, 0xde, 0xc6,
0xe5, 0x60, 0xa8, 0x1d, 0x77, 0x29, 0x61, 0xc1, 0x88, 0xda, 0x97, 0x6d, 0xad, 0xbf, 0x5c, 0x67,
0xc4, 0x5d, 0xaf, 0xeb, 0xfa, 0x9c, 0x71, 0x3a, 0xad, 0x62, 0xfe, 0xad, 0x04, 0xd5, 0xcd, 0xfd,
0xdd, 0x1d, 0x1a, 0x8c, 0x42, 0xb4, 0x06, 0x0b, 0xbe, 0x35, 0x24, 0x4d, 0x63, 0xcd, 0xb8, 0x55,
0xeb, 0x2d, 0x3e, 0x3f, 0x6b, 0x17, 0xce, 0xcf, 0xda, 0x0b, 0xf7, 0xad, 0x21, 0xc1, 0x92, 0x83,
0x3c, 0xa8, 0x8e, 0x09, 0x65, 0x6e, 0xe0, 0xb3, 0x66, 0x71, 0xad, 0x74, 0xab, 0xbe, 0xf1, 0x4e,
0x27, 0x4f, 0x98, 0x3b, 0xd2, 0xc0, 0xa3, 0x48, 0xf5, 0x6e, 0x40, 0xfb, 0x2e, 0xb3, 0x83, 0x31,
0xa1, 0x93, 0xde, 0xb2, 0xb2, 0x52, 0x55, 0x4c, 0x86, 0x63, 0x0b, 0xe8, 0xd7, 0x06, 0x2c, 0x87,
0x94, 0x1c, 0x11, 0x4a, 0x89, 0xa3, 0xf8, 0xcd, 0xd2, 0x9a, 0xf1, 0x39, 0x98, 0x6d, 0x2a, 0xb3,
0xcb, 0xfb, 0x53, 0xf8, 0xf8, 0x92, 0x45, 0xf4, 0x67, 0x03, 0x56, 0x19, 0xa1, 0x63, 0x42, 0x37,
0x1d, 0x87, 0x12, 0xc6, 0x7a, 0x93, 0x2d, 0xcf, 0x25, 0x3e, 0xdf, 0xda, 0xed, 0x63, 0xd6, 0x5c,
0x90, 0x71, 0xf8, 0x41, 0x3e, 0x87, 0x0e, 0x66, 0xe1, 0xf4, 0x4c, 0xe5, 0xd1, 0xea, 0x4c, 0x11,
0x86, 0x3f, 0xc5, 0x0d, 0xf3, 0x08, 0x16, 0xf5, 0x41, 0xde, 0x73, 0x19, 0x47, 0x8f, 0xa0, 0x32,
0x10, 0x0b, 0xd6, 0x34, 0xa4, 0x83, 0x9d, 0x7c, 0x0e, 0x6a, 0x8c, 0xde, 0x75, 0xe5, 0x4f, 0x45,
0x2e, 0x19, 0x56, 0x68, 0xe6, 0x27, 0x06, 0xd4, 0x37, 0xf7, 0x77, 0xb1, 0x4a, 0xc2, 0x1c, 0x49,
0xb3, 0x01, 0x20, 0x7e, 0x59, 0x68, 0xd9, 0xc4, 0x69, 0x16, 0xd7, 0x8c, 0x5b, 0xd5, 0x1e, 0x52,
0x72, 0x70, 0x3f, 0xe6, 0xe0, 0x94, 0x94, 0x40, 0x3d, 0x71, 0x7d, 0x47, 0x9e, 0x76, 0x0a, 0xf5,
0x5d, 0xd7, 0x77, 0xb0, 0xe4, 0xa0, 0x7b, 0x50, 0x1e, 0x13, 0x7a, 0x28, 0xe2, 0x2f, 0x12, 0xe2,
0xeb, 0xf9, 0xb6, 0xf7, 0x48, 0xa8, 0xf4, 0x6a, 0xe7, 0x67, 0xed, 0xb2, 0xfc, 0xc4, 0x11, 0x88,
0xf9, 0x57, 0x03, 0x96, 0x52, 0xbb, 0x92, 0x11, 0xbc, 0x0d, 0x8b, 0x83, 0x54, 0xfe, 0xa8, 0x1d,
0xde, 0x50, 0xbe, 0x2c, 0xa6, 0x73, 0x0b, 0x67, 0x24, 0x11, 0x81, 0x9a, 0xbe, 0xa4, 0xfa, 0x9e,
0xac, 0xe7, 0x0e, 0xbf, 0xf6, 0x21, 0xb1, 0x94, 0x22, 0x32, 0x9c, 0x20, 0x9b, 0xff, 0x8e, 0x8e,
0x42, 0xdf, 0x1c, 0x74, 0x2b, 0x75, 0x3b, 0xc5, 0xa1, 0xd7, 0x7a, 0x8b, 0x33, 0x6e, 0xd6, 0x15,
0x29, 0x5d, 0xfc, 0x42, 0xa4, 0xf4, 0x9d, 0xea, 0x1f, 0x3e, 0x6a, 0x17, 0x3e, 0xfc, 0xc7, 0x5a,
0xc1, 0xdc, 0x85, 0x6a, 0x7f, 0x44, 0x2d, 0x2e, 0x82, 0xfb, 0x7d, 0xa8, 0x3a, 0xea, 0x5b, 0x1e,
0x49, 0xa9, 0xf7, 0xaa, 0xae, 0x21, 0x5a, 0xe6, 0xe2, 0xac, 0xdd, 0x10, 0xc5, 0xb5, 0xa3, 0x09,
0x38, 0x56, 0x31, 0x1f, 0x43, 0x63, 0xfb, 0x34, 0x0c, 0x28, 0x7f, 0x10, 0x72, 0x19, 0x8b, 0xaf,
0x42, 0x85, 0x48, 0x82, 0x44, 0xab, 0x26, 0x89, 0x1f, 0x89, 0x61, 0xc5, 0x45, 0xaf, 0x41, 0x99,
0x9c, 0x5a, 0x36, 0x57, 0x19, 0xdc, 0x50, 0x62, 0xe5, 0x6d, 0x41, 0xc4, 0x11, 0xcf, 0x7c, 0x00,
0xb0, 0x43, 0x62, 0xe8, 0x4d, 0x58, 0xd2, 0xa7, 0x95, 0x4d, 0xa2, 0x2f, 0x2b, 0xe5, 0x25, 0x9c,
0x65, 0xe3, 0x69, 0x79, 0xf3, 0x31, 0xd4, 0x64, 0xa2, 0x89, 0xcc, 0x17, 0x2e, 0xc8, 0x3c, 0x53,
0x28, 0xb1, 0x0b, 0x52, 0x02, 0x47, 0xbc, 0xf8, 0xea, 0x14, 0x67, 0x5d, 0x9d, 0x54, 0x5c, 0x3d,
0x68, 0x44, 0xba, 0xfa, 0x36, 0xe7, 0xb2, 0xf0, 0x26, 0x54, 0xb5, 0x9b, 0xca, 0x4a, 0x5c, 0xc5,
0x35, 0x10, 0x8e, 0x25, 0x52, 0xd6, 0x8e, 0x21, 0x73, 0x69, 0xf2, 0x19, 0x7b, 0x03, 0xae, 0xa9,
0xb4, 0x55, 0xb6, 0x96, 0x94, 0xd8, 0x35, 0x1d, 0x33, 0xcd, 0x4f, 0x59, 0xfa, 0x25, 0x34, 0x67,
0x95, 0xfe, 0xcf, 0x70, 0xad, 0xf3, 0xbb, 0x62, 0xfe, 0xde, 0x80, 0xe5, 0x34, 0x52, 0xfe, 0xe3,
0xcb, 0x6f, 0xe4, 0xea, 0x22, 0x99, 0x8a, 0xc8, 0x9f, 0x0c, 0xb8, 0x91, 0xd9, 0xda, 0x5c, 0x27,
0x3e, 0x87, 0x53, 0xe9, 0xe4, 0x28, 0xcd, 0x91, 0x1c, 0x9f, 0x14, 0xa1, 0x71, 0xcf, 0x3a, 0x24,
0xde, 0x01, 0xf1, 0x88, 0xcd, 0x03, 0x8a, 0x3e, 0x80, 0xfa, 0xd0, 0xe2, 0xf6, 0xb1, 0xa4, 0xea,
0x67, 0xac, 0x9f, 0xaf, 0x28, 0x65, 0x90, 0x3a, 0x7b, 0x09, 0xcc, 0xb6, 0xcf, 0xe9, 0xa4, 0xf7,
0x25, 0xe5, 0x52, 0x3d, 0xc5, 0xc1, 0x69, 0x6b, 0xb2, 0xf7, 0x90, 0xeb, 0xed, 0xd3, 0x50, 0x54,
0xa6, 0xf9, 0x5b, 0x9e, 0x8c, 0x0b, 0x98, 0xfc, 0x7c, 0xe4, 0x52, 0x32, 0x24, 0x3e, 0x4f, 0x7a,
0x8f, 0xbd, 0x29, 0x7c, 0x7c, 0xc9, 0xe2, 0xea, 0x3b, 0xb0, 0x3c, 0xed, 0x3c, 0x5a, 0x86, 0xd2,
0x09, 0x99, 0x44, 0xe7, 0x85, 0xc5, 0x27, 0xba, 0x01, 0xe5, 0xb1, 0xe5, 0x8d, 0xd4, 0x6d, 0xc4,
0xd1, 0xe2, 0x4e, 0xf1, 0xb6, 0x61, 0xfe, 0xc5, 0x80, 0xe6, 0x2c, 0x47, 0xd0, 0x57, 0x52, 0x40,
0xbd, 0xba, 0xf2, 0xaa, 0xf4, 0x2e, 0x99, 0x44, 0xa8, 0xdb, 0x50, 0x0d, 0x42, 0xd1, 0x2d, 0x06,
0x54, 0x9d, 0xfa, 0x1b, 0xfa, 0x24, 0x1f, 0x28, 0xfa, 0xc5, 0x59, 0xfb, 0x66, 0x06, 0x5e, 0x33,
0x70, 0xac, 0x8a, 0x4c, 0xa8, 0x48, 0x7f, 0x58, 0xb3, 0x24, 0xdf, 0x24, 0x10, 0xb5, 0xf5, 0x91,
0xa4, 0x60, 0xc5, 0x31, 0x3f, 0x80, 0xaa, 0x78, 0x72, 0xf7, 0x08, 0xb7, 0x44, 0x02, 0x31, 0xe2,
0x1d, 0xdd, 0x73, 0xfd, 0x13, 0xe5, 0x5a, 0x9c, 0x40, 0x07, 0x8a, 0x8e, 0x63, 0x89, 0x97, 0x95,
0xd8, 0xe2, 0x9c, 0x25, 0xf6, 0x57, 0x00, 0xf0, 0xe0, 0xf0, 0x67, 0xc4, 0x8e, 0xec, 0x5f, 0xdd,
0xd0, 0x88, 0x0a, 0xa2, 0xfa, 0x68, 0x41, 0x55, 0x06, 0x93, 0x0a, 0x92, 0xe2, 0xe1, 0x8c, 0x24,
0xea, 0x42, 0x2d, 0x6e, 0x72, 0xd4, 0xed, 0x58, 0x51, 0x6a, 0xb5, 0xb8, 0x13, 0xc2, 0x89, 0x4c,
0x26, 0x18, 0x0b, 0x57, 0x06, 0xa3, 0x07, 0xa5, 0x91, 0xeb, 0x34, 0xcb, 0x52, 0xf0, 0x1b, 0xfa,
0x40, 0x1f, 0xee, 0xf6, 0x2f, 0xce, 0xda, 0xaf, 0xce, 0x1a, 0x44, 0xf8, 0x24, 0x24, 0xac, 0xf3,
0x70, 0xb7, 0x8f, 0x85, 0xf2, 0xcb, 0x02, 0x5a, 0x99, 0x2f, 0xa0, 0xa2, 0xe1, 0x53, 0xbb, 0x16,
0xda, 0xd7, 0xe4, 0x1b, 0x1d, 0x37, 0x7c, 0x3b, 0x31, 0x07, 0xa7, 0xa4, 0x10, 0x83, 0x15, 0x9b,
0x12, 0xf9, 0xfd, 0x9e, 0x3b, 0x24, 0x8c, 0x5b, 0xc3, 0xb0, 0x59, 0x95, 0xad, 0xdd, 0xd7, 0xf2,
0xdd, 0x37, 0xa1, 0xd6, 0x7b, 0x45, 0x99, 0x59, 0xd9, 0x9a, 0x06, 0xc3, 0x97, 0xf1, 0x51, 0x00,
0x2b, 0x0e, 0xf1, 0x48, 0xd6, 0x68, 0x6d, 0x6e, 0xa3, 0x37, 0x85, 0xc1, 0xfe, 0x34, 0x10, 0xbe,
0x8c, 0x8d, 0x7e, 0x02, 0xab, 0x9a, 0xb8, 0x43, 0x2d, 0x9b, 0xec, 0x13, 0xea, 0x06, 0xce, 0x01,
0xb1, 0x03, 0xdf, 0x61, 0x4d, 0x90, 0x91, 0x6a, 0x89, 0x8e, 0xa9, 0x3f, 0x53, 0x0a, 0x7f, 0x0a,
0x02, 0x72, 0xa0, 0xe2, 0x45, 0xd5, 0xb2, 0x2e, 0x4b, 0xd5, 0xf7, 0xf2, 0xed, 0x22, 0xc9, 0xfe,
0x4e, 0xba, 0x4a, 0xc6, 0x9d, 0x90, 0x2a, 0x90, 0x0a, 0x1b, 0x9d, 0x42, 0xdd, 0xf2, 0xfd, 0x80,
0xcb, 0x68, 0xb2, 0xe6, 0xa2, 0x34, 0xb5, 0x39, 0xb7, 0xa9, 0xcd, 0x04, 0x63, 0xaa, 0x2a, 0xa7,
0x38, 0x38, 0x6d, 0x0a, 0x3d, 0x81, 0xa5, 0xe0, 0x89, 0x4f, 0x28, 0x16, 0x23, 0x1a, 0xf1, 0x45,
0x7b, 0xdd, 0x90, 0xd6, 0xbf, 0x95, 0xd3, 0x7a, 0x46, 0x39, 0x49, 0xe9, 0x2c, 0x9d, 0xe1, 0x69,
0x2b, 0xa8, 0x03, 0x70, 0xe4, 0xfa, 0x96, 0xe7, 0xfe, 0x82, 0x50, 0xd6, 0xbc, 0x2e, 0x0b, 0xd9,
0x75, 0x91, 0xce, 0x77, 0x63, 0x2a, 0x4e, 0x49, 0xa0, 0x6f, 0x43, 0xdd, 0xf6, 0x46, 0x8c, 0x13,
0x2a, 0x2b, 0xc4, 0x92, 0xbc, 0x41, 0xf1, 0xfe, 0xb6, 0x12, 0x16, 0x4e, 0xcb, 0xad, 0x7e, 0x07,
0xea, 0xff, 0x67, 0xa5, 0x17, 0x2f, 0xc5, 0x74, 0x40, 0xe7, 0x7a, 0x29, 0xfe, 0x6b, 0xc0, 0xf5,
0x6c, 0x18, 0xe2, 0xfe, 0xc2, 0x98, 0x39, 0x84, 0xe9, 0x5a, 0x59, 0x9a, 0x59, 0x2b, 0x55, 0x49,
0x5a, 0xf8, 0x2c, 0x25, 0x69, 0x03, 0xc0, 0x0a, 0x5d, 0x5d, 0x8d, 0xa2, 0xea, 0x16, 0xd7, 0x93,
0x64, 0x00, 0xc2, 0x29, 0x29, 0x71, 0x60, 0x76, 0xe0, 0x73, 0x1a, 0x78, 0x1e, 0xa1, 0xb2, 0x82,
0x55, 0xa3, 0x03, 0xdb, 0x8a, 0xa9, 0x38, 0x25, 0x61, 0xbe, 0x09, 0x35, 0x1c, 0x04, 0x7c, 0xdf,
0xe2, 0xc7, 0x0c, 0xb5, 0xa1, 0x1c, 0x8a, 0x0f, 0x35, 0x45, 0xc9, 0x71, 0x51, 0x72, 0x70, 0x44,
0x37, 0x7f, 0x67, 0xc0, 0x2b, 0x33, 0x87, 0x1a, 0xe1, 0xaf, 0x1d, 0xaf, 0x54, 0xf4, 0x62, 0x7f,
0x13, 0x39, 0x9c, 0x92, 0x42, 0xdf, 0x85, 0x46, 0x66, 0x12, 0x52, 0x8f, 0xca, 0x4d, 0xa5, 0xd6,
0xc8, 0x58, 0xc3, 0x59, 0x59, 0xf3, 0x3f, 0x45, 0xa8, 0x1c, 0x70, 0x8b, 0x8f, 0x18, 0x7a, 0x0c,
0x55, 0x91, 0xec, 0x8e, 0xc5, 0x2d, 0x69, 0x39, 0xf7, 0xe0, 0xaf, 0xdf, 0xdf, 0xe4, 0x81, 0xd1,
0x14, 0x1c, 0x23, 0x8a, 0x59, 0x89, 0x49, 0x3b, 0xca, 0xbd, 0xb8, 0x42, 0x44, 0xd6, 0xb1, 0xe2,
0x8a, 0x7e, 0x71, 0x48, 0x18, 0xb3, 0x06, 0x3a, 0x35, 0xe2, 0x7e, 0x71, 0x2f, 0x22, 0x63, 0xcd,
0x47, 0x6f, 0x43, 0x85, 0x12, 0x8b, 0x05, 0xbe, 0xca, 0x91, 0x96, 0x86, 0xc4, 0x92, 0x7a, 0x71,
0xd6, 0x5e, 0x54, 0xe0, 0x72, 0x8d, 0x95, 0x34, 0x7a, 0x1f, 0xae, 0x39, 0x84, 0x5b, 0xae, 0xc7,
0x64, 0x46, 0xd4, 0x37, 0xbe, 0x99, 0x73, 0x5c, 0x95, 0x60, 0xfd, 0x48, 0xb5, 0x57, 0x17, 0x3e,
0xa9, 0x05, 0xd6, 0x80, 0x22, 0xad, 0xed, 0xc0, 0x21, 0x32, 0x6d, 0xca, 0x49, 0x5a, 0x6f, 0x05,
0x0e, 0xc1, 0x92, 0x63, 0x3e, 0x35, 0xa0, 0x1e, 0x21, 0x6d, 0x59, 0x23, 0x46, 0xd0, 0x7a, 0xbc,
0x8b, 0xe8, 0xb8, 0xf5, 0x3b, 0xb4, 0xf0, 0xde, 0x24, 0x24, 0x17, 0x67, 0xed, 0x9a, 0x14, 0x13,
0x8b, 0x78, 0x03, 0xa9, 0x18, 0x15, 0xaf, 0x88, 0xd1, 0x6b, 0x50, 0x3e, 0x72, 0x89, 0xa7, 0x3b,
0xfd, 0xb8, 0x47, 0xbf, 0x2b, 0x88, 0x38, 0xe2, 0x99, 0x7f, 0x2c, 0x42, 0x23, 0xb3, 0xb9, 0x1c,
0x9d, 0x4c, 0xdc, 0xfc, 0x17, 0x73, 0x0c, 0x94, 0xb3, 0xff, 0x8b, 0xf9, 0x11, 0x54, 0x6c, 0xb1,
0x3f, 0xfd, 0x67, 0xd8, 0xfa, 0x3c, 0x47, 0x21, 0x23, 0x93, 0x64, 0x92, 0x5c, 0x32, 0xac, 0x00,
0xd1, 0x0e, 0xac, 0x50, 0xc2, 0xe9, 0x64, 0xf3, 0x88, 0x13, 0xaa, 0x1f, 0xca, 0xb2, 0x3c, 0x97,
0xf8, 0xad, 0xc7, 0xd3, 0x02, 0xf8, 0xb2, 0x8e, 0xe9, 0xc1, 0x82, 0x78, 0x87, 0x45, 0xd8, 0x99,
0x82, 0x89, 0xfe, 0x3d, 0x88, 0xc3, 0xae, 0x95, 0x35, 0x5f, 0x44, 0xc7, 0xb7, 0xfc, 0x20, 0x4a,
0xf6, 0x72, 0x12, 0x9d, 0xfb, 0x82, 0x88, 0x23, 0xde, 0x9d, 0x1b, 0x62, 0x82, 0xf9, 0xed, 0xb3,
0x76, 0xe1, 0xe9, 0xb3, 0x76, 0xe1, 0xa3, 0x67, 0x6a, 0x9a, 0xf9, 0x31, 0xd4, 0x92, 0x57, 0xff,
0x73, 0x36, 0x69, 0xfe, 0x14, 0xaa, 0x22, 0x93, 0x74, 0xb7, 0x7a, 0x45, 0x8d, 0xce, 0x56, 0xcf,
0x62, 0x9e, 0xea, 0x69, 0x6e, 0x40, 0xf4, 0xf7, 0x98, 0xa8, 0x84, 0x2e, 0x27, 0xc3, 0x4c, 0x25,
0xdc, 0x15, 0x04, 0x1c, 0xd1, 0x53, 0x03, 0xdc, 0x6f, 0x0c, 0x80, 0x1f, 0xca, 0xf9, 0x65, 0x2c,
0x86, 0x8b, 0x35, 0x58, 0x10, 0x65, 0x7c, 0xda, 0x31, 0x79, 0x05, 0x24, 0x07, 0x3d, 0x84, 0x4a,
0x20, 0xbb, 0x01, 0xe9, 0x54, 0x7d, 0xe3, 0xad, 0x99, 0x59, 0xa3, 0xfe, 0x2b, 0xef, 0x60, 0xeb,
0xc9, 0xf6, 0x29, 0x27, 0xbe, 0xf0, 0x31, 0xc9, 0x98, 0xa8, 0xa5, 0xc0, 0x0a, 0xac, 0xf7, 0xfa,
0xf3, 0x17, 0xad, 0xc2, 0xc7, 0x2f, 0x5a, 0x85, 0xbf, 0xbf, 0x68, 0x15, 0x3e, 0x3c, 0x6f, 0x19,
0xcf, 0xcf, 0x5b, 0xc6, 0xc7, 0xe7, 0x2d, 0xe3, 0x9f, 0xe7, 0x2d, 0xe3, 0xe9, 0xbf, 0x5a, 0x85,
0xf7, 0x8b, 0xe3, 0xf5, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xcd, 0x08, 0x9f, 0x6d, 0x18,
0x00, 0x00,
// 1992 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x19, 0x4d, 0x6f, 0x23, 0x49,
0xd5, 0xed, 0xaf, 0xb1, 0x9f, 0xf3, 0x59, 0xcc, 0x08, 0x6f, 0x24, 0xec, 0x6c, 0xef, 0x0a, 0xcd,
0xc2, 0xae, 0x4d, 0x02, 0xac, 0x86, 0x01, 0x16, 0xc5, 0x71, 0x26, 0x8a, 0x76, 0x32, 0x13, 0x55,
0x76, 0x06, 0xb1, 0x8c, 0x10, 0x9d, 0xee, 0x8a, 0xd3, 0xa4, 0xdd, 0x6d, 0xaa, 0xca, 0x9e, 0x98,
0x3d, 0xb0, 0x12, 0x20, 0x71, 0x40, 0x68, 0x8e, 0x1c, 0x10, 0xda, 0x11, 0xdc, 0xb8, 0xf1, 0x27,
0x98, 0xe3, 0x4a, 0x7b, 0xe1, 0x80, 0x2c, 0x26, 0x1c, 0x38, 0x72, 0x8f, 0x38, 0xa0, 0xaa, 0xae,
0xea, 0x0f, 0x27, 0xde, 0xb4, 0xd9, 0x3d, 0x70, 0x4a, 0xd7, 0xfb, 0xae, 0xf7, 0x5e, 0xbd, 0x0f,
0x07, 0xf6, 0x4f, 0xef, 0xb0, 0x96, 0x1b, 0xb4, 0x4f, 0x87, 0x47, 0x84, 0xfa, 0x84, 0x13, 0xd6,
0x1e, 0x11, 0xdf, 0x09, 0x68, 0x5b, 0x21, 0xac, 0x81, 0xdb, 0xb7, 0xec, 0x13, 0xd7, 0x27, 0x74,
0xdc, 0x1e, 0x9c, 0xf6, 0x04, 0x80, 0xb5, 0xfb, 0x84, 0x5b, 0xed, 0xd1, 0x46, 0xbb, 0x47, 0x7c,
0x42, 0x2d, 0x4e, 0x9c, 0xd6, 0x80, 0x06, 0x3c, 0x40, 0xaf, 0x87, 0x5c, 0xad, 0x24, 0x57, 0x6b,
0x70, 0xda, 0x13, 0x00, 0xd6, 0x12, 0x5c, 0xad, 0xd1, 0xc6, 0xda, 0x5b, 0x3d, 0x97, 0x9f, 0x0c,
0x8f, 0x5a, 0x76, 0xd0, 0x6f, 0xf7, 0x82, 0x5e, 0xd0, 0x96, 0xcc, 0x47, 0xc3, 0x63, 0x79, 0x92,
0x07, 0xf9, 0x15, 0x0a, 0x5d, 0x9b, 0x69, 0x0a, 0x1d, 0xfa, 0xdc, 0xed, 0x93, 0x69, 0x2b, 0xd6,
0xde, 0xbe, 0x8e, 0x81, 0xd9, 0x27, 0xa4, 0x6f, 0x5d, 0xe2, 0xdb, 0xbc, 0xec, 0x0c, 0x75, 0xe3,
0x36, 0x25, 0x2c, 0x18, 0x52, 0xfb, 0xb2, 0xae, 0x8d, 0xab, 0x79, 0x86, 0xdc, 0xf5, 0xda, 0xae,
0xcf, 0x19, 0xa7, 0xd3, 0x2c, 0xe6, 0x5f, 0x0b, 0x50, 0xd9, 0x3a, 0xd8, 0xdb, 0xa5, 0xc1, 0x70,
0x80, 0xd6, 0xa1, 0xe8, 0x5b, 0x7d, 0x52, 0x37, 0xd6, 0x8d, 0xdb, 0xd5, 0xce, 0xc2, 0x8b, 0x49,
0x33, 0x77, 0x3e, 0x69, 0x16, 0x1f, 0x58, 0x7d, 0x82, 0x25, 0x06, 0x79, 0x50, 0x19, 0x11, 0xca,
0xdc, 0xc0, 0x67, 0xf5, 0xfc, 0x7a, 0xe1, 0x76, 0x6d, 0xf3, 0x9d, 0x56, 0x16, 0x37, 0xb7, 0xa4,
0x82, 0xc7, 0x21, 0xeb, 0xbd, 0x80, 0x76, 0x5d, 0x66, 0x07, 0x23, 0x42, 0xc7, 0x9d, 0x15, 0xa5,
0xa5, 0xa2, 0x90, 0x0c, 0x47, 0x1a, 0xd0, 0x2f, 0x0d, 0x58, 0x19, 0x50, 0x72, 0x4c, 0x28, 0x25,
0x8e, 0xc2, 0xd7, 0x0b, 0xeb, 0xc6, 0xe7, 0xa0, 0xb6, 0xae, 0xd4, 0xae, 0x1c, 0x4c, 0xc9, 0xc7,
0x97, 0x34, 0xa2, 0x3f, 0x1a, 0xb0, 0xc6, 0x08, 0x1d, 0x11, 0xba, 0xe5, 0x38, 0x94, 0x30, 0xd6,
0x19, 0x6f, 0x7b, 0x2e, 0xf1, 0xf9, 0xf6, 0x5e, 0x17, 0xb3, 0x7a, 0x51, 0xfa, 0xe1, 0x7b, 0xd9,
0x0c, 0x3a, 0x9c, 0x25, 0xa7, 0x63, 0x2a, 0x8b, 0xd6, 0x66, 0x92, 0x30, 0xfc, 0x29, 0x66, 0x98,
0xc7, 0xb0, 0xa0, 0x03, 0x79, 0xdf, 0x65, 0x1c, 0x3d, 0x86, 0x72, 0x4f, 0x1c, 0x58, 0xdd, 0x90,
0x06, 0xb6, 0xb2, 0x19, 0xa8, 0x65, 0x74, 0x96, 0x94, 0x3d, 0x65, 0x79, 0x64, 0x58, 0x49, 0x33,
0x3f, 0x31, 0xa0, 0xb6, 0x75, 0xb0, 0x87, 0x55, 0x12, 0x66, 0x48, 0x9a, 0x4d, 0x00, 0xf1, 0x97,
0x0d, 0x2c, 0x9b, 0x38, 0xf5, 0xfc, 0xba, 0x71, 0xbb, 0xd2, 0x41, 0x8a, 0x0e, 0x1e, 0x44, 0x18,
0x9c, 0xa0, 0x12, 0x52, 0x4f, 0x5d, 0xdf, 0x91, 0xd1, 0x4e, 0x48, 0x7d, 0xd7, 0xf5, 0x1d, 0x2c,
0x31, 0xe8, 0x3e, 0x94, 0x46, 0x84, 0x1e, 0x09, 0xff, 0x8b, 0x84, 0xf8, 0x6a, 0xb6, 0xeb, 0x3d,
0x16, 0x2c, 0x9d, 0xea, 0xf9, 0xa4, 0x59, 0x92, 0x9f, 0x38, 0x14, 0x62, 0xfe, 0xc5, 0x80, 0xe5,
0xc4, 0xad, 0xa4, 0x07, 0xef, 0xc0, 0x42, 0x2f, 0x91, 0x3f, 0xea, 0x86, 0x37, 0x95, 0x2d, 0x0b,
0xc9, 0xdc, 0xc2, 0x29, 0x4a, 0x44, 0xa0, 0xaa, 0x1f, 0xa9, 0x7e, 0x27, 0x1b, 0x99, 0xdd, 0xaf,
0x6d, 0x88, 0x35, 0x25, 0x80, 0x0c, 0xc7, 0x92, 0xcd, 0x7f, 0x85, 0xa1, 0xd0, 0x2f, 0x07, 0xdd,
0x4e, 0xbc, 0x4e, 0x11, 0xf4, 0x6a, 0x67, 0x61, 0xc6, 0xcb, 0xba, 0x26, 0xa5, 0xf3, 0xff, 0x17,
0x29, 0x7d, 0xb7, 0xf2, 0xbb, 0x8f, 0x9a, 0xb9, 0x0f, 0xff, 0xbe, 0x9e, 0x33, 0xf7, 0xa0, 0xd2,
0x1d, 0x52, 0x8b, 0x0b, 0xe7, 0x7e, 0x17, 0x2a, 0x8e, 0xfa, 0x96, 0x21, 0x29, 0x74, 0x5e, 0xd5,
0x35, 0x44, 0xd3, 0x5c, 0x4c, 0x9a, 0x8b, 0xa2, 0xb8, 0xb6, 0x34, 0x00, 0x47, 0x2c, 0xe6, 0x13,
0x58, 0xdc, 0x39, 0x1b, 0x04, 0x94, 0x3f, 0x1c, 0x70, 0xe9, 0x8b, 0x2f, 0x43, 0x99, 0x48, 0x80,
0x94, 0x56, 0x89, 0x13, 0x3f, 0x24, 0xc3, 0x0a, 0x8b, 0x5e, 0x83, 0x12, 0x39, 0xb3, 0x6c, 0xae,
0x32, 0x78, 0x51, 0x91, 0x95, 0x76, 0x04, 0x10, 0x87, 0x38, 0xf3, 0x21, 0xc0, 0x2e, 0x89, 0x44,
0x6f, 0xc1, 0xb2, 0x8e, 0x56, 0x3a, 0x89, 0xbe, 0xa8, 0x98, 0x97, 0x71, 0x1a, 0x8d, 0xa7, 0xe9,
0xcd, 0x27, 0x50, 0x95, 0x89, 0x26, 0x32, 0x5f, 0x98, 0x20, 0xf3, 0x4c, 0x49, 0x89, 0x4c, 0x90,
0x14, 0x38, 0xc4, 0x45, 0x4f, 0x27, 0x3f, 0xeb, 0xe9, 0x24, 0xfc, 0xea, 0xc1, 0x62, 0xc8, 0xab,
0x5f, 0x73, 0x26, 0x0d, 0x6f, 0x42, 0x45, 0x9b, 0xa9, 0xb4, 0x44, 0x55, 0x5c, 0x0b, 0xc2, 0x11,
0x45, 0x42, 0xdb, 0x09, 0xa4, 0x1e, 0x4d, 0x36, 0x65, 0x6f, 0xc0, 0x0d, 0x95, 0xb6, 0x4a, 0xd7,
0xb2, 0x22, 0xbb, 0xa1, 0x7d, 0xa6, 0xf1, 0x09, 0x4d, 0x3f, 0x87, 0xfa, 0xac, 0xd2, 0xff, 0x19,
0x9e, 0x75, 0x76, 0x53, 0xcc, 0xdf, 0x1a, 0xb0, 0x92, 0x94, 0x94, 0x3d, 0x7c, 0xd9, 0x95, 0x5c,
0x5f, 0x24, 0x13, 0x1e, 0xf9, 0x83, 0x01, 0x37, 0x53, 0x57, 0x9b, 0x2b, 0xe2, 0x73, 0x18, 0x95,
0x4c, 0x8e, 0xc2, 0x1c, 0xc9, 0xf1, 0x49, 0x1e, 0x16, 0xef, 0x5b, 0x47, 0xc4, 0x3b, 0x24, 0x1e,
0xb1, 0x79, 0x40, 0xd1, 0x07, 0x50, 0xeb, 0x5b, 0xdc, 0x3e, 0x91, 0x50, 0xdd, 0xc6, 0xba, 0xd9,
0x8a, 0x52, 0x4a, 0x52, 0x6b, 0x3f, 0x16, 0xb3, 0xe3, 0x73, 0x3a, 0xee, 0x7c, 0x41, 0x99, 0x54,
0x4b, 0x60, 0x70, 0x52, 0x9b, 0x9c, 0x3d, 0xe4, 0x79, 0xe7, 0x6c, 0x20, 0x2a, 0xd3, 0xfc, 0x23,
0x4f, 0xca, 0x04, 0x4c, 0x7e, 0x3a, 0x74, 0x29, 0xe9, 0x13, 0x9f, 0xc7, 0xb3, 0xc7, 0xfe, 0x94,
0x7c, 0x7c, 0x49, 0xe3, 0xda, 0x3b, 0xb0, 0x32, 0x6d, 0x3c, 0x5a, 0x81, 0xc2, 0x29, 0x19, 0x87,
0xf1, 0xc2, 0xe2, 0x13, 0xdd, 0x84, 0xd2, 0xc8, 0xf2, 0x86, 0xea, 0x35, 0xe2, 0xf0, 0x70, 0x37,
0x7f, 0xc7, 0x30, 0xff, 0x64, 0x40, 0x7d, 0x96, 0x21, 0xe8, 0x4b, 0x09, 0x41, 0x9d, 0x9a, 0xb2,
0xaa, 0xf0, 0x2e, 0x19, 0x87, 0x52, 0x77, 0xa0, 0x12, 0x0c, 0xc4, 0xb4, 0x18, 0x50, 0x15, 0xf5,
0x37, 0x74, 0x24, 0x1f, 0x2a, 0xf8, 0xc5, 0xa4, 0x79, 0x2b, 0x25, 0x5e, 0x23, 0x70, 0xc4, 0x8a,
0x4c, 0x28, 0x4b, 0x7b, 0x58, 0xbd, 0x20, 0x7b, 0x12, 0x88, 0xda, 0xfa, 0x58, 0x42, 0xb0, 0xc2,
0x98, 0x1f, 0x40, 0x45, 0xb4, 0xdc, 0x7d, 0xc2, 0x2d, 0x91, 0x40, 0x8c, 0x78, 0xc7, 0xf7, 0x5d,
0xff, 0x54, 0x99, 0x16, 0x25, 0xd0, 0xa1, 0x82, 0xe3, 0x88, 0xe2, 0xaa, 0x12, 0x9b, 0x9f, 0xb3,
0xc4, 0xfe, 0x39, 0x0f, 0x35, 0xa1, 0x5d, 0x57, 0xed, 0x6f, 0xc3, 0xa2, 0x97, 0xbc, 0x93, 0xb2,
0xe2, 0x96, 0x12, 0x98, 0xce, 0x52, 0x9c, 0xa6, 0x15, 0xcc, 0xc7, 0x2e, 0xf1, 0x9c, 0x88, 0x39,
0x9f, 0x66, 0xbe, 0x97, 0x44, 0xe2, 0x34, 0xad, 0x78, 0x8b, 0x4f, 0x45, 0xb4, 0xe5, 0xc3, 0x49,
0xb4, 0x98, 0xef, 0x0b, 0x20, 0x0e, 0x71, 0x57, 0xdd, 0xb8, 0x38, 0xdf, 0x8d, 0xd1, 0x5d, 0x58,
0x12, 0xed, 0x31, 0x18, 0xf2, 0x43, 0x62, 0x07, 0xbe, 0xc3, 0xea, 0x25, 0xd9, 0x48, 0xd1, 0xf9,
0xa4, 0xb9, 0xf4, 0x5e, 0x0a, 0x83, 0xa7, 0x28, 0xcd, 0x5f, 0x00, 0xc0, 0xc3, 0xa3, 0x9f, 0x10,
0x3b, 0x8c, 0xd6, 0xf5, 0xe3, 0x9f, 0xa8, 0xb7, 0x6a, 0xeb, 0x10, 0x50, 0xe5, 0x90, 0xb8, 0xde,
0x26, 0x70, 0x38, 0x45, 0x89, 0xda, 0x50, 0x8d, 0x46, 0x42, 0x55, 0x4b, 0x56, 0x15, 0x5b, 0x35,
0x9a, 0x1b, 0x71, 0x4c, 0x93, 0x4a, 0x9d, 0xe2, 0xb5, 0xa9, 0xd3, 0x81, 0xc2, 0xd0, 0x75, 0xe4,
0xd5, 0xab, 0x9d, 0xaf, 0xe9, 0xf4, 0x7f, 0xb4, 0xd7, 0xbd, 0x98, 0x34, 0x5f, 0x9d, 0xb5, 0xb6,
0xf1, 0xf1, 0x80, 0xb0, 0xd6, 0xa3, 0xbd, 0x2e, 0x16, 0xcc, 0x57, 0x05, 0xa3, 0x3c, 0x67, 0x30,
0x36, 0x01, 0xd4, 0xad, 0x05, 0xf7, 0x8d, 0x30, 0x10, 0x7a, 0x3c, 0xde, 0x8d, 0x30, 0x38, 0x41,
0x85, 0x18, 0xac, 0xda, 0x94, 0xc8, 0x6f, 0x11, 0x2e, 0xc6, 0xad, 0xfe, 0xa0, 0x5e, 0x91, 0x83,
0xf0, 0x57, 0xb2, 0x55, 0x27, 0xc1, 0xd6, 0x79, 0x45, 0xa9, 0x59, 0xdd, 0x9e, 0x16, 0x86, 0x2f,
0xcb, 0x47, 0x01, 0xac, 0x3a, 0xc4, 0x23, 0x69, 0xa5, 0xd5, 0xb9, 0x95, 0xde, 0x12, 0x0a, 0xbb,
0xd3, 0x82, 0xf0, 0x65, 0xd9, 0xe8, 0x47, 0xb0, 0xa6, 0x81, 0xbb, 0xd4, 0xb2, 0xc9, 0x01, 0xa1,
0x6e, 0xe0, 0xe8, 0x94, 0x05, 0xe9, 0xa9, 0x86, 0x98, 0x2f, 0xbb, 0x33, 0xa9, 0xf0, 0xa7, 0x48,
0x40, 0x0e, 0x94, 0xbd, 0xb0, 0xb7, 0xd4, 0x64, 0x61, 0xff, 0x4e, 0xb6, 0x5b, 0xc4, 0xd9, 0xdf,
0x4a, 0xf6, 0x94, 0x68, 0x6e, 0x54, 0xed, 0x44, 0xc9, 0x46, 0x67, 0x50, 0xb3, 0x7c, 0x3f, 0xe0,
0xd2, 0x9b, 0xac, 0xbe, 0x20, 0x55, 0x6d, 0xcd, 0xad, 0x6a, 0x2b, 0x96, 0x31, 0xd5, 0xc3, 0x12,
0x18, 0x9c, 0x54, 0x85, 0x9e, 0xc2, 0x72, 0xf0, 0xd4, 0x27, 0x14, 0x8b, 0x85, 0x96, 0xf8, 0x62,
0x19, 0x59, 0x94, 0xda, 0xbf, 0x91, 0x51, 0x7b, 0x8a, 0x39, 0x4e, 0xe9, 0x34, 0x9c, 0xe1, 0x69,
0x2d, 0xa8, 0x05, 0x70, 0xec, 0xfa, 0x96, 0xe7, 0xfe, 0x8c, 0x50, 0x56, 0x5f, 0x92, 0x65, 0x7f,
0x49, 0xa4, 0xf3, 0xbd, 0x08, 0x8a, 0x13, 0x14, 0xe8, 0x9b, 0x50, 0xb3, 0xbd, 0x21, 0xe3, 0x84,
0xca, 0x0a, 0xb1, 0x2c, 0x5f, 0x50, 0x74, 0xbf, 0xed, 0x18, 0x85, 0x93, 0x74, 0x6b, 0xdf, 0x82,
0xda, 0xff, 0xd8, 0x17, 0x45, 0x5f, 0x9d, 0x76, 0xe8, 0x5c, 0x7d, 0xf5, 0x3f, 0x06, 0x2c, 0xa5,
0xdd, 0x10, 0x4d, 0x63, 0xc6, 0xcc, 0x95, 0x55, 0xd7, 0xca, 0xc2, 0xcc, 0x5a, 0xa9, 0x4a, 0x52,
0xf1, 0xb3, 0x94, 0xa4, 0x4d, 0x00, 0x6b, 0xe0, 0xea, 0x6a, 0x14, 0x56, 0xb7, 0xa8, 0x9e, 0xc4,
0xeb, 0x22, 0x4e, 0x50, 0x89, 0x80, 0xd9, 0x81, 0xcf, 0x69, 0xe0, 0x79, 0x84, 0xca, 0x0a, 0x56,
0x09, 0x03, 0xb6, 0x1d, 0x41, 0x71, 0x82, 0xc2, 0x7c, 0x13, 0xaa, 0x38, 0x08, 0xf8, 0x81, 0xc5,
0x4f, 0x18, 0x6a, 0x42, 0x69, 0x20, 0x3e, 0xd4, 0xce, 0x29, 0x97, 0x6b, 0x89, 0xc1, 0x21, 0xdc,
0xfc, 0x8d, 0x01, 0xaf, 0xcc, 0x5c, 0x01, 0x85, 0xbd, 0x76, 0x74, 0x52, 0xde, 0x8b, 0xec, 0x8d,
0xe9, 0x70, 0x82, 0x4a, 0x74, 0xd9, 0xd4, 0xde, 0x38, 0xdd, 0x65, 0x53, 0xda, 0x70, 0x9a, 0xd6,
0xfc, 0x77, 0x1e, 0xca, 0x87, 0xdc, 0xe2, 0x43, 0x86, 0x9e, 0x40, 0x45, 0x24, 0xbb, 0x63, 0x71,
0x4b, 0x6a, 0xce, 0xfc, 0x33, 0x89, 0x9e, 0x56, 0xe2, 0x06, 0xa3, 0x21, 0x38, 0x92, 0x28, 0x36,
0x4b, 0x26, 0xf5, 0x28, 0xf3, 0xa2, 0x0a, 0x11, 0x6a, 0xc7, 0x0a, 0x2b, 0xa6, 0xeb, 0x3e, 0x61,
0xcc, 0xea, 0xe9, 0xd4, 0x88, 0xa6, 0xeb, 0xfd, 0x10, 0x8c, 0x35, 0x1e, 0xbd, 0x0d, 0x65, 0x4a,
0x2c, 0x16, 0xf5, 0xfc, 0x86, 0x16, 0x89, 0x25, 0xf4, 0x62, 0xd2, 0x5c, 0x50, 0xc2, 0xe5, 0x19,
0x2b, 0x6a, 0xf4, 0x3e, 0xdc, 0x70, 0x08, 0xb7, 0x5c, 0x2f, 0x6c, 0xf5, 0xb5, 0xcd, 0xaf, 0x67,
0x5c, 0xee, 0xa5, 0xb0, 0x6e, 0xc8, 0xda, 0xa9, 0x09, 0x9b, 0xd4, 0x01, 0x6b, 0x81, 0x22, 0xad,
0xed, 0xc0, 0x21, 0x32, 0x6d, 0x4a, 0x71, 0x5a, 0x6f, 0x07, 0x0e, 0xc1, 0x12, 0x63, 0x3e, 0x33,
0xa0, 0x16, 0x4a, 0xda, 0xb6, 0x86, 0x8c, 0xa0, 0x8d, 0xe8, 0x16, 0x61, 0xb8, 0x75, 0x1f, 0x2a,
0xbe, 0x37, 0x1e, 0x90, 0x8b, 0x49, 0xb3, 0x2a, 0xc9, 0xc4, 0x21, 0xba, 0x40, 0xc2, 0x47, 0xf9,
0x6b, 0x7c, 0xf4, 0x1a, 0x94, 0xe4, 0x58, 0xa5, 0x9c, 0x19, 0x4d, 0x51, 0x72, 0xf4, 0xc2, 0x21,
0xce, 0xfc, 0x7d, 0x1e, 0x16, 0x53, 0x97, 0xcb, 0x30, 0xc9, 0x44, 0xab, 0x52, 0x3e, 0xc3, 0xfa,
0x3d, 0xfb, 0x97, 0xab, 0x1f, 0x40, 0xd9, 0x16, 0xf7, 0xd3, 0x3f, 0x1d, 0x6e, 0xcc, 0x13, 0x0a,
0xe9, 0x99, 0x38, 0x93, 0xe4, 0x91, 0x61, 0x25, 0x10, 0xed, 0xc2, 0x2a, 0x25, 0x9c, 0x8e, 0xb7,
0x8e, 0x39, 0xa1, 0xc9, 0xd9, 0xae, 0x14, 0xf7, 0x7a, 0x3c, 0x4d, 0x80, 0x2f, 0xf3, 0x98, 0x1e,
0x14, 0x45, 0x1f, 0x16, 0x6e, 0x67, 0x4a, 0x4c, 0xf8, 0x5b, 0x4b, 0xe4, 0x76, 0xcd, 0xac, 0xf1,
0xc2, 0x3b, 0xbe, 0xe5, 0x07, 0x61, 0xb2, 0x97, 0x62, 0xef, 0x3c, 0x10, 0x40, 0x1c, 0xe2, 0xee,
0xde, 0x14, 0xfb, 0xde, 0xaf, 0x9f, 0x37, 0x73, 0xcf, 0x9e, 0x37, 0x73, 0x1f, 0x3d, 0x57, 0xbb,
0xdf, 0x0f, 0xa1, 0x1a, 0x77, 0xfd, 0xcf, 0x59, 0xa5, 0xf9, 0x63, 0xa8, 0x88, 0x4c, 0xd2, 0xd3,
0xea, 0x35, 0x35, 0x3a, 0x5d, 0x3d, 0xf3, 0x59, 0xaa, 0xa7, 0xb9, 0x09, 0xe1, 0x8f, 0x89, 0xa2,
0x12, 0xba, 0x9c, 0xf4, 0x53, 0x95, 0x70, 0x4f, 0x00, 0x70, 0x08, 0x4f, 0xac, 0xbb, 0xbf, 0x32,
0x00, 0xe4, 0x58, 0xbf, 0x33, 0x12, 0xab, 0xd8, 0x3a, 0x14, 0x45, 0x19, 0x9f, 0x36, 0x4c, 0x3e,
0x01, 0x89, 0x41, 0x8f, 0xa0, 0x1c, 0xc8, 0x69, 0x40, 0x1a, 0x55, 0xdb, 0x7c, 0x6b, 0x66, 0xd6,
0xa8, 0xff, 0x2c, 0xb4, 0xb0, 0xf5, 0x74, 0xe7, 0x8c, 0x13, 0x5f, 0xd8, 0x18, 0x67, 0x4c, 0x38,
0x52, 0x60, 0x25, 0xac, 0xf3, 0xfa, 0x8b, 0x97, 0x8d, 0xdc, 0xc7, 0x2f, 0x1b, 0xb9, 0xbf, 0xbd,
0x6c, 0xe4, 0x3e, 0x3c, 0x6f, 0x18, 0x2f, 0xce, 0x1b, 0xc6, 0xc7, 0xe7, 0x0d, 0xe3, 0x1f, 0xe7,
0x0d, 0xe3, 0xd9, 0x3f, 0x1b, 0xb9, 0xf7, 0xf3, 0xa3, 0x8d, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
0x01, 0xac, 0x25, 0xfa, 0x9b, 0x19, 0x00, 0x00,
}

View File

@ -246,6 +246,37 @@ message ListMeta {
optional string resourceVersion = 2;
}
// ListOptions is the query options to a standard REST list call.
message ListOptions {
// A selector to restrict the list of returned objects by their labels.
// Defaults to everything.
// +optional
optional string labelSelector = 1;
// A selector to restrict the list of returned objects by their fields.
// Defaults to everything.
// +optional
optional string fieldSelector = 2;
// Watch for changes to the described resources and return them as a stream of
// add, update, and remove notifications. Specify resourceVersion.
// +optional
optional bool watch = 3;
// When specified with a watch call, shows changes that occur after that particular version of a resource.
// Defaults to changes from the beginning of history.
// When specified for list:
// - if unset, then the result is returned from remote storage based on quorum-read flag;
// - if it's 0, then we simply return what we currently have in cache, no guarantee;
// - if set to non zero, then the result is at least as fresh as given rv.
// +optional
optional string resourceVersion = 4;
// Timeout for the list/watch call.
// +optional
optional int64 timeoutSeconds = 5;
}
// ObjectMeta is metadata that all persisted resources must have, which includes all objects
// users must create.
message ObjectMeta {

View File

@ -19,6 +19,7 @@ package v1
import (
"fmt"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/selection"
)
@ -195,3 +196,11 @@ func SetMetaDataAnnotation(obj *ObjectMeta, ann string, value string) {
}
obj.Annotations[ann] = value
}
// SingleObject returns a ListOptions for watching a single object.
func SingleObject(meta ObjectMeta) ListOptions {
return ListOptions{
FieldSelector: fields.OneTermEqualSelector("metadata.name", meta.Name).String(),
ResourceVersion: meta.ResourceVersion,
}
}

View File

@ -0,0 +1,75 @@
/*
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 v1
// Clones the given selector and returns a new selector with the given key and value added.
// Returns the given selector, if labelKey is empty.
func CloneSelectorAndAddLabel(selector *LabelSelector, labelKey, labelValue string) *LabelSelector {
if labelKey == "" {
// Don't need to add a label.
return selector
}
// Clone.
newSelector := new(LabelSelector)
// TODO(madhusudancs): Check if you can use deepCopy_extensions_LabelSelector here.
newSelector.MatchLabels = make(map[string]string)
if selector.MatchLabels != nil {
for key, val := range selector.MatchLabels {
newSelector.MatchLabels[key] = val
}
}
newSelector.MatchLabels[labelKey] = labelValue
if selector.MatchExpressions != nil {
newMExps := make([]LabelSelectorRequirement, len(selector.MatchExpressions))
for i, me := range selector.MatchExpressions {
newMExps[i].Key = me.Key
newMExps[i].Operator = me.Operator
if me.Values != nil {
newMExps[i].Values = make([]string, len(me.Values))
copy(newMExps[i].Values, me.Values)
} else {
newMExps[i].Values = nil
}
}
newSelector.MatchExpressions = newMExps
} else {
newSelector.MatchExpressions = nil
}
return newSelector
}
// AddLabelToSelector returns a selector with the given key and value added to the given selector's MatchLabels.
func AddLabelToSelector(selector *LabelSelector, labelKey, labelValue string) *LabelSelector {
if labelKey == "" {
// Don't need to add a label.
return selector
}
if selector.MatchLabels == nil {
selector.MatchLabels = make(map[string]string)
}
selector.MatchLabels[labelKey] = labelValue
return selector
}
// SelectorHasLabel checks if the given selector contains the given label key in its MatchLabels
func SelectorHasLabel(selector *LabelSelector, labelKey string) bool {
return len(selector.MatchLabels[labelKey]) > 0
}

View File

@ -0,0 +1,120 @@
/*
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 v1
import (
"reflect"
"testing"
)
func TestCloneSelectorAndAddLabel(t *testing.T) {
labels := map[string]string{
"foo1": "bar1",
"foo2": "bar2",
"foo3": "bar3",
}
cases := []struct {
labels map[string]string
labelKey string
labelValue string
want map[string]string
}{
{
labels: labels,
want: labels,
},
{
labels: labels,
labelKey: "foo4",
labelValue: "89",
want: map[string]string{
"foo1": "bar1",
"foo2": "bar2",
"foo3": "bar3",
"foo4": "89",
},
},
{
labels: nil,
labelKey: "foo4",
labelValue: "12",
want: map[string]string{
"foo4": "12",
},
},
}
for _, tc := range cases {
ls_in := LabelSelector{MatchLabels: tc.labels}
ls_out := LabelSelector{MatchLabels: tc.want}
got := CloneSelectorAndAddLabel(&ls_in, tc.labelKey, tc.labelValue)
if !reflect.DeepEqual(got, &ls_out) {
t.Errorf("got %v, want %v", got, tc.want)
}
}
}
func TestAddLabelToSelector(t *testing.T) {
labels := map[string]string{
"foo1": "bar1",
"foo2": "bar2",
"foo3": "bar3",
}
cases := []struct {
labels map[string]string
labelKey string
labelValue string
want map[string]string
}{
{
labels: labels,
want: labels,
},
{
labels: labels,
labelKey: "foo4",
labelValue: "89",
want: map[string]string{
"foo1": "bar1",
"foo2": "bar2",
"foo3": "bar3",
"foo4": "89",
},
},
{
labels: nil,
labelKey: "foo4",
labelValue: "12",
want: map[string]string{
"foo4": "12",
},
},
}
for _, tc := range cases {
ls_in := LabelSelector{MatchLabels: tc.labels}
ls_out := LabelSelector{MatchLabels: tc.want}
got := AddLabelToSelector(&ls_in, tc.labelKey, tc.labelValue)
if !reflect.DeepEqual(got, &ls_out) {
t.Errorf("got %v, want %v", got, tc.want)
}
}
}

View File

@ -25,7 +25,7 @@ import (
const GroupName = "meta.k8s.io"
// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: ""}
var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"}
// WatchEventKind is name reserved for serializing watch events.
const WatchEventKind = "WatchEvent"
@ -42,6 +42,7 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
schema.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal}.WithKind(WatchEventKind),
&InternalEvent{},
)
scheme.AddKnownTypes(groupVersion, &ListOptions{})
scheme.AddConversionFuncs(
Convert_versioned_Event_to_watch_Event,
Convert_versioned_InternalEvent_to_versioned_Event,
@ -49,3 +50,15 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion)
Convert_versioned_Event_to_versioned_InternalEvent,
)
}
// scheme is the registry for the common types that adhere to the meta v1 API spec.
var scheme = runtime.NewScheme()
// ParameterCodec knows about query parameters used with the meta v1 API spec.
var ParameterCodec = runtime.NewParameterCodec(scheme)
func init() {
scheme.AddUnversionedTypes(SchemeGroupVersion,
&ListOptions{},
)
}

View File

@ -219,6 +219,17 @@ type ObjectMeta struct {
ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"`
}
const (
// NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
NamespaceDefault string = "default"
// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
NamespaceAll string = ""
// NamespaceNone is the argument for a context when there is no namespace.
NamespaceNone string = ""
// NamespaceSystem is the system namespace where we place system components.
NamespaceSystem string = "kube-system"
)
// OwnerReference contains enough information to let you identify an owning
// object. Currently, an owning object must be in the same namespace, so there
// is no namespace field.
@ -239,6 +250,35 @@ type OwnerReference struct {
Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"`
}
// ListOptions is the query options to a standard REST list call.
type ListOptions struct {
TypeMeta `json:",inline"`
// A selector to restrict the list of returned objects by their labels.
// Defaults to everything.
// +optional
LabelSelector string `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"`
// A selector to restrict the list of returned objects by their fields.
// Defaults to everything.
// +optional
FieldSelector string `json:"fieldSelector,omitempty" protobuf:"bytes,2,opt,name=fieldSelector"`
// Watch for changes to the described resources and return them as a stream of
// add, update, and remove notifications. Specify resourceVersion.
// +optional
Watch bool `json:"watch,omitempty" protobuf:"varint,3,opt,name=watch"`
// When specified with a watch call, shows changes that occur after that particular version of a resource.
// Defaults to changes from the beginning of history.
// When specified for list:
// - if unset, then the result is returned from remote storage based on quorum-read flag;
// - if it's 0, then we simply return what we currently have in cache, no guarantee;
// - if set to non zero, then the result is at least as fresh as given rv.
// +optional
ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,4,opt,name=resourceVersion"`
// Timeout for the list/watch call.
// +optional
TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty" protobuf:"varint,5,opt,name=timeoutSeconds"`
}
// ExportOptions is the query options to the standard REST get call.
type ExportOptions struct {
TypeMeta `json:",inline"`