diff --git a/api/api-rules/aggregator_violation_exceptions.list b/api/api-rules/aggregator_violation_exceptions.list index 0b5ad9e759b..b2c97b0088d 100644 --- a/api/api-rules/aggregator_violation_exceptions.list +++ b/api/api-rules/aggregator_violation_exceptions.list @@ -6,6 +6,7 @@ API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIRe API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,ServerAddressByClientCIDRs API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,Versions +API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,ApplyOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,CreateOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,DeleteOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,FieldsV1,Raw diff --git a/api/api-rules/apiextensions_violation_exceptions.list b/api/api-rules/apiextensions_violation_exceptions.list index 0b5ad9e759b..b2c97b0088d 100644 --- a/api/api-rules/apiextensions_violation_exceptions.list +++ b/api/api-rules/apiextensions_violation_exceptions.list @@ -6,6 +6,7 @@ API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIRe API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,ServerAddressByClientCIDRs API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,Versions +API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,ApplyOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,CreateOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,DeleteOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,FieldsV1,Raw diff --git a/api/api-rules/codegen_violation_exceptions.list b/api/api-rules/codegen_violation_exceptions.list index 2fe9fa981a0..0a275601e22 100644 --- a/api/api-rules/codegen_violation_exceptions.list +++ b/api/api-rules/codegen_violation_exceptions.list @@ -6,6 +6,7 @@ API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIRe API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,ServerAddressByClientCIDRs API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,Versions +API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,ApplyOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,CreateOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,DeleteOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,FieldsV1,Raw diff --git a/api/api-rules/sample_apiserver_violation_exceptions.list b/api/api-rules/sample_apiserver_violation_exceptions.list index 8c4c7ac6c9d..62a4b8445d3 100644 --- a/api/api-rules/sample_apiserver_violation_exceptions.list +++ b/api/api-rules/sample_apiserver_violation_exceptions.list @@ -6,6 +6,7 @@ API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIRe API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,ServerAddressByClientCIDRs API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,Versions +API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,ApplyOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,CreateOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,DeleteOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,FieldsV1,Raw diff --git a/api/api-rules/violation_exceptions.list b/api/api-rules/violation_exceptions.list index 80b4f55b7c8..6c5503e71cf 100644 --- a/api/api-rules/violation_exceptions.list +++ b/api/api-rules/violation_exceptions.list @@ -311,6 +311,7 @@ API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIRe API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,ServerAddressByClientCIDRs API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,APIVersions,Versions +API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,ApplyOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,CreateOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,DeleteOptions,DryRun API rule violation: list_type_missing,k8s.io/apimachinery/pkg/apis/meta/v1,FieldsV1,Raw diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh index 7563e70d014..e90944065ae 100755 --- a/hack/update-codegen.sh +++ b/hack/update-codegen.sh @@ -74,7 +74,7 @@ ${applyconfigurationgen} \ # This can be called with one flag, --verify-only, so it works for both the # update- and verify- scripts. -${clientgen} --output-base "${KUBE_ROOT}/vendor" --output-package="k8s.io/client-go" --clientset-name="kubernetes" --input-base="k8s.io/api" --input="${GV_DIRS_CSV}" --go-header-file "${KUBE_ROOT}/hack/boilerplate/boilerplate.generatego.txt" "$@" +${clientgen} --output-base "${KUBE_ROOT}/vendor" --output-package="k8s.io/client-go" --clientset-name="kubernetes" --input-base="k8s.io/api" --input="${GV_DIRS_CSV}" --apply-configuration-package "${applyconfigurations_package}" --go-header-file "${KUBE_ROOT}/hack/boilerplate/boilerplate.generatego.txt" "$@" listergen_external_apis=() kube::util::read-array listergen_external_apis < <( diff --git a/pkg/controller/replication/conversion.go b/pkg/controller/replication/conversion.go index 0214a479678..161923aff1b 100644 --- a/pkg/controller/replication/conversion.go +++ b/pkg/controller/replication/conversion.go @@ -36,6 +36,7 @@ import ( "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/watch" + appsv1apply "k8s.io/client-go/applyconfigurations/apps/v1" coreinformers "k8s.io/client-go/informers/core/v1" clientset "k8s.io/client-go/kubernetes" appsv1client "k8s.io/client-go/kubernetes/typed/apps/v1" @@ -247,6 +248,14 @@ func (c conversionClient) Patch(ctx context.Context, name string, pt types.Patch return nil, errors.New("Patch() is not implemented for conversionClient") } +func (c conversionClient) Apply(ctx context.Context, rs *appsv1apply.ReplicaSetApplyConfiguration, opts metav1.ApplyOptions) (*apps.ReplicaSet, error) { + return nil, errors.New("Apply() is not implemented for conversionClient") +} + +func (c conversionClient) ApplyStatus(ctx context.Context, rs *appsv1apply.ReplicaSetApplyConfiguration, opts metav1.ApplyOptions) (*apps.ReplicaSet, error) { + return nil, errors.New("ApplyStatus() is not implemented for conversionClient") +} + func (c conversionClient) GetScale(ctx context.Context, name string, options metav1.GetOptions) (result *autoscalingv1.Scale, err error) { // This is not used by RSC. return nil, errors.New("GetScale() is not implemented for conversionClient") diff --git a/pkg/controller/testutil/test_utils.go b/pkg/controller/testutil/test_utils.go index 716720bbd35..190a2adb242 100644 --- a/pkg/controller/testutil/test_utils.go +++ b/pkg/controller/testutil/test_utils.go @@ -36,6 +36,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/watch" + v1apply "k8s.io/client-go/applyconfigurations/core/v1" "k8s.io/client-go/kubernetes/fake" v1core "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/cache" @@ -349,6 +350,36 @@ func (m *FakeNodeHandler) Patch(_ context.Context, name string, pt types.PatchTy return &updatedNode, nil } +// Apply applies a NodeApplyConfiguration to a Node in the fake store. +func (m *FakeNodeHandler) Apply(ctx context.Context, node *v1apply.NodeApplyConfiguration, opts metav1.ApplyOptions) (*v1.Node, error) { + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(node) + if err != nil { + return nil, err + } + name := node.Name + if name == nil { + return nil, fmt.Errorf("deployment.Name must be provided to Apply") + } + + return m.Patch(ctx, *name, types.ApplyPatchType, data, patchOpts) +} + +// ApplyStatus applies a status of a Node in the fake store. +func (m *FakeNodeHandler) ApplyStatus(ctx context.Context, node *v1apply.NodeApplyConfiguration, opts metav1.ApplyOptions) (*v1.Node, error) { + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(node) + if err != nil { + return nil, err + } + name := node.Name + if name == nil { + return nil, fmt.Errorf("deployment.Name must be provided to Apply") + } + + return m.Patch(ctx, *name, types.ApplyPatchType, data, patchOpts, "status") +} + // FakeRecorder is used as a fake during testing. type FakeRecorder struct { sync.Mutex diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go index 6d5911d9643..24390d4f35c 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go @@ -56,6 +56,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource": schema_pkg_apis_meta_v1_APIResource(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIResourceList": schema_pkg_apis_meta_v1_APIResourceList(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIVersions": schema_pkg_apis_meta_v1_APIVersions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ApplyOptions": schema_pkg_apis_meta_v1_ApplyOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Condition": schema_pkg_apis_meta_v1_Condition(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), @@ -1365,6 +1366,65 @@ func schema_pkg_apis_meta_v1_APIVersions(ref common.ReferenceCallback) common.Op } } +func schema_pkg_apis_meta_v1_ApplyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ApplyOptions may be provided when applying an API object. FieldManager is required for apply requests. ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation that speaks specifically to how the options fields relate to apply.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "force": { + SchemaProps: spec.SchemaProps{ + Description: "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people.", + Default: false, + Type: []string{"boolean"}, + Format: "", + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"force", "fieldManager"}, + }, + }, + } +} + func schema_pkg_apis_meta_v1_Condition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go index f51f185eaf8..55945badab4 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go @@ -189,10 +189,38 @@ func (m *APIVersions) XXX_DiscardUnknown() { var xxx_messageInfo_APIVersions proto.InternalMessageInfo +func (m *ApplyOptions) Reset() { *m = ApplyOptions{} } +func (*ApplyOptions) ProtoMessage() {} +func (*ApplyOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_cf52fa777ced5367, []int{5} +} +func (m *ApplyOptions) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplyOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ApplyOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplyOptions.Merge(m, src) +} +func (m *ApplyOptions) XXX_Size() int { + return m.Size() +} +func (m *ApplyOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ApplyOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplyOptions proto.InternalMessageInfo + func (m *Condition) Reset() { *m = Condition{} } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{5} + return fileDescriptor_cf52fa777ced5367, []int{6} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -220,7 +248,7 @@ var xxx_messageInfo_Condition proto.InternalMessageInfo func (m *CreateOptions) Reset() { *m = CreateOptions{} } func (*CreateOptions) ProtoMessage() {} func (*CreateOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{6} + return fileDescriptor_cf52fa777ced5367, []int{7} } func (m *CreateOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -248,7 +276,7 @@ var xxx_messageInfo_CreateOptions proto.InternalMessageInfo func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } func (*DeleteOptions) ProtoMessage() {} func (*DeleteOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{7} + return fileDescriptor_cf52fa777ced5367, []int{8} } func (m *DeleteOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -276,7 +304,7 @@ var xxx_messageInfo_DeleteOptions proto.InternalMessageInfo func (m *Duration) Reset() { *m = Duration{} } func (*Duration) ProtoMessage() {} func (*Duration) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{8} + return fileDescriptor_cf52fa777ced5367, []int{9} } func (m *Duration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,7 +332,7 @@ var xxx_messageInfo_Duration proto.InternalMessageInfo func (m *FieldsV1) Reset() { *m = FieldsV1{} } func (*FieldsV1) ProtoMessage() {} func (*FieldsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{9} + return fileDescriptor_cf52fa777ced5367, []int{10} } func (m *FieldsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -332,7 +360,7 @@ var xxx_messageInfo_FieldsV1 proto.InternalMessageInfo func (m *GetOptions) Reset() { *m = GetOptions{} } func (*GetOptions) ProtoMessage() {} func (*GetOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{10} + return fileDescriptor_cf52fa777ced5367, []int{11} } func (m *GetOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -360,7 +388,7 @@ var xxx_messageInfo_GetOptions proto.InternalMessageInfo func (m *GroupKind) Reset() { *m = GroupKind{} } func (*GroupKind) ProtoMessage() {} func (*GroupKind) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{11} + return fileDescriptor_cf52fa777ced5367, []int{12} } func (m *GroupKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -388,7 +416,7 @@ var xxx_messageInfo_GroupKind proto.InternalMessageInfo func (m *GroupResource) Reset() { *m = GroupResource{} } func (*GroupResource) ProtoMessage() {} func (*GroupResource) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{12} + return fileDescriptor_cf52fa777ced5367, []int{13} } func (m *GroupResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -416,7 +444,7 @@ var xxx_messageInfo_GroupResource proto.InternalMessageInfo func (m *GroupVersion) Reset() { *m = GroupVersion{} } func (*GroupVersion) ProtoMessage() {} func (*GroupVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{13} + return fileDescriptor_cf52fa777ced5367, []int{14} } func (m *GroupVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,7 +472,7 @@ var xxx_messageInfo_GroupVersion proto.InternalMessageInfo func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } func (*GroupVersionForDiscovery) ProtoMessage() {} func (*GroupVersionForDiscovery) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{14} + return fileDescriptor_cf52fa777ced5367, []int{15} } func (m *GroupVersionForDiscovery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -472,7 +500,7 @@ var xxx_messageInfo_GroupVersionForDiscovery proto.InternalMessageInfo func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } func (*GroupVersionKind) ProtoMessage() {} func (*GroupVersionKind) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{15} + return fileDescriptor_cf52fa777ced5367, []int{16} } func (m *GroupVersionKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -500,7 +528,7 @@ var xxx_messageInfo_GroupVersionKind proto.InternalMessageInfo func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } func (*GroupVersionResource) ProtoMessage() {} func (*GroupVersionResource) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{16} + return fileDescriptor_cf52fa777ced5367, []int{17} } func (m *GroupVersionResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -528,7 +556,7 @@ var xxx_messageInfo_GroupVersionResource proto.InternalMessageInfo func (m *LabelSelector) Reset() { *m = LabelSelector{} } func (*LabelSelector) ProtoMessage() {} func (*LabelSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{17} + return fileDescriptor_cf52fa777ced5367, []int{18} } func (m *LabelSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -556,7 +584,7 @@ var xxx_messageInfo_LabelSelector proto.InternalMessageInfo func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } func (*LabelSelectorRequirement) ProtoMessage() {} func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{18} + return fileDescriptor_cf52fa777ced5367, []int{19} } func (m *LabelSelectorRequirement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -584,7 +612,7 @@ var xxx_messageInfo_LabelSelectorRequirement proto.InternalMessageInfo func (m *List) Reset() { *m = List{} } func (*List) ProtoMessage() {} func (*List) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{19} + return fileDescriptor_cf52fa777ced5367, []int{20} } func (m *List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -612,7 +640,7 @@ var xxx_messageInfo_List proto.InternalMessageInfo func (m *ListMeta) Reset() { *m = ListMeta{} } func (*ListMeta) ProtoMessage() {} func (*ListMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{20} + return fileDescriptor_cf52fa777ced5367, []int{21} } func (m *ListMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -640,7 +668,7 @@ var xxx_messageInfo_ListMeta proto.InternalMessageInfo func (m *ListOptions) Reset() { *m = ListOptions{} } func (*ListOptions) ProtoMessage() {} func (*ListOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{21} + return fileDescriptor_cf52fa777ced5367, []int{22} } func (m *ListOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -668,7 +696,7 @@ var xxx_messageInfo_ListOptions proto.InternalMessageInfo func (m *ManagedFieldsEntry) Reset() { *m = ManagedFieldsEntry{} } func (*ManagedFieldsEntry) ProtoMessage() {} func (*ManagedFieldsEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{22} + return fileDescriptor_cf52fa777ced5367, []int{23} } func (m *ManagedFieldsEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -696,7 +724,7 @@ var xxx_messageInfo_ManagedFieldsEntry proto.InternalMessageInfo func (m *MicroTime) Reset() { *m = MicroTime{} } func (*MicroTime) ProtoMessage() {} func (*MicroTime) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{23} + return fileDescriptor_cf52fa777ced5367, []int{24} } func (m *MicroTime) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MicroTime.Unmarshal(m, b) @@ -719,7 +747,7 @@ var xxx_messageInfo_MicroTime proto.InternalMessageInfo func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } func (*ObjectMeta) ProtoMessage() {} func (*ObjectMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{24} + return fileDescriptor_cf52fa777ced5367, []int{25} } func (m *ObjectMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -747,7 +775,7 @@ var xxx_messageInfo_ObjectMeta proto.InternalMessageInfo func (m *OwnerReference) Reset() { *m = OwnerReference{} } func (*OwnerReference) ProtoMessage() {} func (*OwnerReference) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{25} + return fileDescriptor_cf52fa777ced5367, []int{26} } func (m *OwnerReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -775,7 +803,7 @@ var xxx_messageInfo_OwnerReference proto.InternalMessageInfo func (m *PartialObjectMetadata) Reset() { *m = PartialObjectMetadata{} } func (*PartialObjectMetadata) ProtoMessage() {} func (*PartialObjectMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{26} + return fileDescriptor_cf52fa777ced5367, []int{27} } func (m *PartialObjectMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -803,7 +831,7 @@ var xxx_messageInfo_PartialObjectMetadata proto.InternalMessageInfo func (m *PartialObjectMetadataList) Reset() { *m = PartialObjectMetadataList{} } func (*PartialObjectMetadataList) ProtoMessage() {} func (*PartialObjectMetadataList) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{27} + return fileDescriptor_cf52fa777ced5367, []int{28} } func (m *PartialObjectMetadataList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -831,7 +859,7 @@ var xxx_messageInfo_PartialObjectMetadataList proto.InternalMessageInfo func (m *Patch) Reset() { *m = Patch{} } func (*Patch) ProtoMessage() {} func (*Patch) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{28} + return fileDescriptor_cf52fa777ced5367, []int{29} } func (m *Patch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -859,7 +887,7 @@ var xxx_messageInfo_Patch proto.InternalMessageInfo func (m *PatchOptions) Reset() { *m = PatchOptions{} } func (*PatchOptions) ProtoMessage() {} func (*PatchOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{29} + return fileDescriptor_cf52fa777ced5367, []int{30} } func (m *PatchOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -887,7 +915,7 @@ var xxx_messageInfo_PatchOptions proto.InternalMessageInfo func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} func (*Preconditions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{30} + return fileDescriptor_cf52fa777ced5367, []int{31} } func (m *Preconditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -915,7 +943,7 @@ var xxx_messageInfo_Preconditions proto.InternalMessageInfo func (m *RootPaths) Reset() { *m = RootPaths{} } func (*RootPaths) ProtoMessage() {} func (*RootPaths) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{31} + return fileDescriptor_cf52fa777ced5367, []int{32} } func (m *RootPaths) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -943,7 +971,7 @@ var xxx_messageInfo_RootPaths proto.InternalMessageInfo func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } func (*ServerAddressByClientCIDR) ProtoMessage() {} func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{32} + return fileDescriptor_cf52fa777ced5367, []int{33} } func (m *ServerAddressByClientCIDR) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -971,7 +999,7 @@ var xxx_messageInfo_ServerAddressByClientCIDR proto.InternalMessageInfo func (m *Status) Reset() { *m = Status{} } func (*Status) ProtoMessage() {} func (*Status) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{33} + return fileDescriptor_cf52fa777ced5367, []int{34} } func (m *Status) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -999,7 +1027,7 @@ var xxx_messageInfo_Status proto.InternalMessageInfo func (m *StatusCause) Reset() { *m = StatusCause{} } func (*StatusCause) ProtoMessage() {} func (*StatusCause) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{34} + return fileDescriptor_cf52fa777ced5367, []int{35} } func (m *StatusCause) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1027,7 +1055,7 @@ var xxx_messageInfo_StatusCause proto.InternalMessageInfo func (m *StatusDetails) Reset() { *m = StatusDetails{} } func (*StatusDetails) ProtoMessage() {} func (*StatusDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{35} + return fileDescriptor_cf52fa777ced5367, []int{36} } func (m *StatusDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1055,7 +1083,7 @@ var xxx_messageInfo_StatusDetails proto.InternalMessageInfo func (m *TableOptions) Reset() { *m = TableOptions{} } func (*TableOptions) ProtoMessage() {} func (*TableOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{36} + return fileDescriptor_cf52fa777ced5367, []int{37} } func (m *TableOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1083,7 +1111,7 @@ var xxx_messageInfo_TableOptions proto.InternalMessageInfo func (m *Time) Reset() { *m = Time{} } func (*Time) ProtoMessage() {} func (*Time) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{37} + return fileDescriptor_cf52fa777ced5367, []int{38} } func (m *Time) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Time.Unmarshal(m, b) @@ -1106,7 +1134,7 @@ var xxx_messageInfo_Time proto.InternalMessageInfo func (m *Timestamp) Reset() { *m = Timestamp{} } func (*Timestamp) ProtoMessage() {} func (*Timestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{38} + return fileDescriptor_cf52fa777ced5367, []int{39} } func (m *Timestamp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1134,7 +1162,7 @@ var xxx_messageInfo_Timestamp proto.InternalMessageInfo func (m *TypeMeta) Reset() { *m = TypeMeta{} } func (*TypeMeta) ProtoMessage() {} func (*TypeMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{39} + return fileDescriptor_cf52fa777ced5367, []int{40} } func (m *TypeMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1162,7 +1190,7 @@ var xxx_messageInfo_TypeMeta proto.InternalMessageInfo func (m *UpdateOptions) Reset() { *m = UpdateOptions{} } func (*UpdateOptions) ProtoMessage() {} func (*UpdateOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{40} + return fileDescriptor_cf52fa777ced5367, []int{41} } func (m *UpdateOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1190,7 +1218,7 @@ var xxx_messageInfo_UpdateOptions proto.InternalMessageInfo func (m *Verbs) Reset() { *m = Verbs{} } func (*Verbs) ProtoMessage() {} func (*Verbs) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{41} + return fileDescriptor_cf52fa777ced5367, []int{42} } func (m *Verbs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1218,7 +1246,7 @@ var xxx_messageInfo_Verbs proto.InternalMessageInfo func (m *WatchEvent) Reset() { *m = WatchEvent{} } func (*WatchEvent) ProtoMessage() {} func (*WatchEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{42} + return fileDescriptor_cf52fa777ced5367, []int{43} } func (m *WatchEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1249,6 +1277,7 @@ func init() { proto.RegisterType((*APIResource)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIResource") proto.RegisterType((*APIResourceList)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIResourceList") proto.RegisterType((*APIVersions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.APIVersions") + proto.RegisterType((*ApplyOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ApplyOptions") proto.RegisterType((*Condition)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Condition") proto.RegisterType((*CreateOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.CreateOptions") proto.RegisterType((*DeleteOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions") @@ -1297,182 +1326,183 @@ func init() { } var fileDescriptor_cf52fa777ced5367 = []byte{ - // 2790 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0xcd, 0x6f, 0x23, 0x57, - 0x3d, 0x63, 0xc7, 0x89, 0xfd, 0x73, 0x9c, 0x8f, 0xb7, 0x59, 0xf0, 0x06, 0x11, 0xa7, 0x53, 0x54, - 0xa5, 0xd0, 0x3a, 0x4d, 0x28, 0xd5, 0x76, 0x4b, 0x0b, 0x71, 0xbc, 0xd9, 0x86, 0x26, 0x4d, 0xf4, - 0xb2, 0xbb, 0x40, 0xa9, 0x50, 0x27, 0x9e, 0x17, 0x67, 0xc8, 0x78, 0xc6, 0x7d, 0x6f, 0x9c, 0xd4, - 0x70, 0xa0, 0x07, 0x10, 0x20, 0x41, 0xd5, 0x23, 0xe2, 0x80, 0x5a, 0xc1, 0x5f, 0xc0, 0x05, 0xfe, - 0x00, 0x24, 0x7a, 0xac, 0xc4, 0xa5, 0x12, 0xc8, 0xea, 0x86, 0x03, 0x47, 0xc4, 0x35, 0x17, 0xd0, - 0xfb, 0x98, 0x99, 0x37, 0xfe, 0xd8, 0x8c, 0xbb, 0xa5, 0xe2, 0xe6, 0xf9, 0x7d, 0xbf, 0xf7, 0x7e, - 0xef, 0xf7, 0xf5, 0x0c, 0x7b, 0xa7, 0x37, 0x59, 0xd5, 0xf1, 0xd7, 0x4e, 0x3b, 0x47, 0x84, 0x7a, - 0x24, 0x20, 0x6c, 0xed, 0x8c, 0x78, 0xb6, 0x4f, 0xd7, 0x14, 0xc2, 0x6a, 0x3b, 0x2d, 0xab, 0x71, - 0xe2, 0x78, 0x84, 0x76, 0xd7, 0xda, 0xa7, 0x4d, 0x0e, 0x60, 0x6b, 0x2d, 0x12, 0x58, 0x6b, 0x67, - 0xeb, 0x6b, 0x4d, 0xe2, 0x11, 0x6a, 0x05, 0xc4, 0xae, 0xb6, 0xa9, 0x1f, 0xf8, 0xe8, 0x4b, 0x92, - 0xab, 0xaa, 0x73, 0x55, 0xdb, 0xa7, 0x4d, 0x0e, 0x60, 0x55, 0xce, 0x55, 0x3d, 0x5b, 0x5f, 0x7a, - 0xba, 0xe9, 0x04, 0x27, 0x9d, 0xa3, 0x6a, 0xc3, 0x6f, 0xad, 0x35, 0xfd, 0xa6, 0xbf, 0x26, 0x98, - 0x8f, 0x3a, 0xc7, 0xe2, 0x4b, 0x7c, 0x88, 0x5f, 0x52, 0xe8, 0xd2, 0x48, 0x53, 0x68, 0xc7, 0x0b, - 0x9c, 0x16, 0xe9, 0xb7, 0x62, 0xe9, 0xb9, 0xab, 0x18, 0x58, 0xe3, 0x84, 0xb4, 0xac, 0x7e, 0x3e, - 0xf3, 0x2f, 0x59, 0xc8, 0x6f, 0x1e, 0xec, 0xdc, 0xa1, 0x7e, 0xa7, 0x8d, 0x56, 0x60, 0xd2, 0xb3, - 0x5a, 0xa4, 0x6c, 0xac, 0x18, 0xab, 0x85, 0xda, 0xcc, 0x07, 0xbd, 0xca, 0xc4, 0x45, 0xaf, 0x32, - 0xf9, 0xaa, 0xd5, 0x22, 0x58, 0x60, 0x90, 0x0b, 0xf9, 0x33, 0x42, 0x99, 0xe3, 0x7b, 0xac, 0x9c, - 0x59, 0xc9, 0xae, 0x16, 0x37, 0x5e, 0xaa, 0xa6, 0x59, 0x7f, 0x55, 0x28, 0xb8, 0x2f, 0x59, 0xb7, - 0x7d, 0x5a, 0x77, 0x58, 0xc3, 0x3f, 0x23, 0xb4, 0x5b, 0x9b, 0x57, 0x5a, 0xf2, 0x0a, 0xc9, 0x70, - 0xa4, 0x01, 0xfd, 0xc4, 0x80, 0xf9, 0x36, 0x25, 0xc7, 0x84, 0x52, 0x62, 0x2b, 0x7c, 0x39, 0xbb, - 0x62, 0x7c, 0x0a, 0x6a, 0xcb, 0x4a, 0xed, 0xfc, 0x41, 0x9f, 0x7c, 0x3c, 0xa0, 0x11, 0xfd, 0xce, - 0x80, 0x25, 0x46, 0xe8, 0x19, 0xa1, 0x9b, 0xb6, 0x4d, 0x09, 0x63, 0xb5, 0xee, 0x96, 0xeb, 0x10, - 0x2f, 0xd8, 0xda, 0xa9, 0x63, 0x56, 0x9e, 0x14, 0xfb, 0xf0, 0x8d, 0x74, 0x06, 0x1d, 0x8e, 0x92, - 0x53, 0x33, 0x95, 0x45, 0x4b, 0x23, 0x49, 0x18, 0x7e, 0x88, 0x19, 0xe6, 0x31, 0xcc, 0x84, 0x07, - 0xb9, 0xeb, 0xb0, 0x00, 0xdd, 0x87, 0xa9, 0x26, 0xff, 0x60, 0x65, 0x43, 0x18, 0x58, 0x4d, 0x67, - 0x60, 0x28, 0xa3, 0x36, 0xab, 0xec, 0x99, 0x12, 0x9f, 0x0c, 0x2b, 0x69, 0xe6, 0x2f, 0x26, 0xa1, - 0xb8, 0x79, 0xb0, 0x83, 0x09, 0xf3, 0x3b, 0xb4, 0x41, 0x52, 0x38, 0xcd, 0x4d, 0x98, 0x61, 0x8e, - 0xd7, 0xec, 0xb8, 0x16, 0xe5, 0xd0, 0xf2, 0x94, 0xa0, 0x5c, 0x54, 0x94, 0x33, 0x87, 0x1a, 0x0e, - 0x27, 0x28, 0xd1, 0x06, 0x00, 0x97, 0xc0, 0xda, 0x56, 0x83, 0xd8, 0xe5, 0xcc, 0x8a, 0xb1, 0x9a, - 0xaf, 0x21, 0xc5, 0x07, 0xaf, 0x46, 0x18, 0xac, 0x51, 0xa1, 0xc7, 0x21, 0x27, 0x2c, 0x2d, 0xe7, - 0x85, 0x9a, 0x92, 0x22, 0xcf, 0x89, 0x65, 0x60, 0x89, 0x43, 0x4f, 0xc2, 0xb4, 0xf2, 0xb2, 0x72, - 0x41, 0x90, 0xcd, 0x29, 0xb2, 0xe9, 0xd0, 0x0d, 0x42, 0x3c, 0x5f, 0xdf, 0xa9, 0xe3, 0xd9, 0xc2, - 0xef, 0xb4, 0xf5, 0xbd, 0xe2, 0x78, 0x36, 0x16, 0x18, 0xb4, 0x0b, 0xb9, 0x33, 0x42, 0x8f, 0xb8, - 0x27, 0x70, 0xd7, 0xfc, 0x4a, 0xba, 0x8d, 0xbe, 0xcf, 0x59, 0x6a, 0x05, 0x6e, 0x9a, 0xf8, 0x89, - 0xa5, 0x10, 0x54, 0x05, 0x60, 0x27, 0x3e, 0x0d, 0xc4, 0xf2, 0xca, 0xb9, 0x95, 0xec, 0x6a, 0xa1, - 0x36, 0xcb, 0xd7, 0x7b, 0x18, 0x41, 0xb1, 0x46, 0xc1, 0xe9, 0x1b, 0x56, 0x40, 0x9a, 0x3e, 0x75, - 0x08, 0x2b, 0x4f, 0xc7, 0xf4, 0x5b, 0x11, 0x14, 0x6b, 0x14, 0xe8, 0x5b, 0x80, 0x58, 0xe0, 0x53, - 0xab, 0x49, 0xd4, 0x52, 0x5f, 0xb6, 0xd8, 0x49, 0x19, 0xc4, 0xea, 0x96, 0xd4, 0xea, 0xd0, 0xe1, - 0x00, 0x05, 0x1e, 0xc2, 0x65, 0xfe, 0xc1, 0x80, 0x39, 0xcd, 0x17, 0x84, 0xdf, 0xdd, 0x84, 0x99, - 0xa6, 0x76, 0xeb, 0x94, 0x5f, 0x44, 0xa7, 0xad, 0xdf, 0x48, 0x9c, 0xa0, 0x44, 0x04, 0x0a, 0x54, - 0x49, 0x0a, 0xa3, 0xcb, 0x7a, 0x6a, 0xa7, 0x0d, 0x6d, 0x88, 0x35, 0x69, 0x40, 0x86, 0x63, 0xc9, - 0xe6, 0x3f, 0x0d, 0xe1, 0xc0, 0x61, 0xbc, 0x41, 0xab, 0x5a, 0x4c, 0x33, 0xc4, 0xf6, 0xcd, 0x8c, - 0x88, 0x47, 0x57, 0x04, 0x82, 0xcc, 0xff, 0x45, 0x20, 0xb8, 0x95, 0xff, 0xf5, 0x7b, 0x95, 0x89, - 0xb7, 0xff, 0xbe, 0x32, 0x61, 0xfe, 0x27, 0x03, 0x85, 0x2d, 0xdf, 0xb3, 0x9d, 0x40, 0x39, 0x72, - 0xd0, 0x6d, 0x0f, 0x5c, 0xd4, 0xbb, 0xdd, 0x36, 0xc1, 0x02, 0x83, 0x9e, 0x87, 0x29, 0x16, 0x58, - 0x41, 0x87, 0x89, 0xab, 0x56, 0xa8, 0x3d, 0x16, 0x86, 0x80, 0x43, 0x01, 0xbd, 0xec, 0x55, 0xe6, - 0x22, 0x71, 0x12, 0x84, 0x15, 0x03, 0xf7, 0x2a, 0xff, 0x48, 0x18, 0x65, 0xdf, 0x91, 0x29, 0x26, - 0x8c, 0xd5, 0xd9, 0xd8, 0xab, 0xf6, 0x07, 0x28, 0xf0, 0x10, 0x2e, 0x74, 0x06, 0xc8, 0xb5, 0x58, - 0x70, 0x97, 0x5a, 0x1e, 0x13, 0xba, 0xee, 0x3a, 0x2d, 0xa2, 0x2e, 0xd7, 0x97, 0xd3, 0xed, 0x2e, - 0xe7, 0x88, 0xf5, 0xee, 0x0e, 0x48, 0xc3, 0x43, 0x34, 0xa0, 0x27, 0x60, 0x8a, 0x12, 0x8b, 0xf9, - 0x5e, 0x39, 0x27, 0x96, 0x1f, 0x45, 0x40, 0x2c, 0xa0, 0x58, 0x61, 0x79, 0xf0, 0x68, 0x11, 0xc6, - 0xac, 0x66, 0x18, 0xca, 0xa2, 0xe0, 0xb1, 0x27, 0xc1, 0x38, 0xc4, 0x9b, 0x2d, 0x28, 0x6d, 0x51, - 0x62, 0x05, 0x64, 0xbf, 0x1d, 0x08, 0x17, 0x32, 0x61, 0xca, 0xa6, 0x5d, 0xdc, 0xf1, 0x94, 0xab, - 0x01, 0x97, 0x5f, 0x17, 0x10, 0xac, 0x30, 0xfc, 0x06, 0x1d, 0x3b, 0xc4, 0xb5, 0xf7, 0x2c, 0xcf, - 0x6a, 0x12, 0xaa, 0x22, 0x4f, 0xe4, 0xd7, 0xdb, 0x1a, 0x0e, 0x27, 0x28, 0xcd, 0x9f, 0x65, 0xa1, - 0x54, 0x27, 0x2e, 0x89, 0xf5, 0x6d, 0x03, 0x6a, 0x52, 0xab, 0x41, 0x0e, 0x08, 0x75, 0x7c, 0xfb, - 0x90, 0x34, 0x7c, 0xcf, 0x66, 0xc2, 0x05, 0xb2, 0xb5, 0xcf, 0xf1, 0xbd, 0xb9, 0x33, 0x80, 0xc5, - 0x43, 0x38, 0x90, 0x0b, 0xa5, 0x36, 0x15, 0xbf, 0xc5, 0x7e, 0x49, 0x0f, 0x29, 0x6e, 0x7c, 0x35, - 0xdd, 0x71, 0x1c, 0xe8, 0xac, 0xb5, 0x85, 0x8b, 0x5e, 0xa5, 0x94, 0x00, 0xe1, 0xa4, 0x70, 0xf4, - 0x4d, 0x98, 0xf7, 0x69, 0xfb, 0xc4, 0xf2, 0xea, 0xa4, 0x4d, 0x3c, 0x9b, 0x78, 0x01, 0x13, 0xbb, - 0x90, 0xaf, 0x2d, 0xf2, 0x9c, 0xbd, 0xdf, 0x87, 0xc3, 0x03, 0xd4, 0xe8, 0x35, 0x58, 0x68, 0x53, - 0xbf, 0x6d, 0x35, 0x85, 0x4b, 0x1d, 0xf8, 0xae, 0xd3, 0xe8, 0x0a, 0x17, 0x2a, 0xd4, 0x9e, 0xba, - 0xe8, 0x55, 0x16, 0x0e, 0xfa, 0x91, 0x97, 0xbd, 0xca, 0x35, 0xb1, 0x75, 0x1c, 0x12, 0x23, 0xf1, - 0xa0, 0x18, 0xed, 0x0c, 0x73, 0xa3, 0xce, 0xd0, 0xdc, 0x81, 0x7c, 0xbd, 0xa3, 0xfc, 0xf9, 0x45, - 0xc8, 0xdb, 0xea, 0xb7, 0xda, 0xf9, 0xf0, 0x62, 0x45, 0x34, 0x97, 0xbd, 0x4a, 0x89, 0x97, 0x69, - 0xd5, 0x10, 0x80, 0x23, 0x16, 0xf3, 0x09, 0xc8, 0x8b, 0x23, 0x67, 0xf7, 0xd7, 0xd1, 0x3c, 0x64, - 0xb1, 0x75, 0x2e, 0xa4, 0xcc, 0x60, 0xfe, 0x53, 0xbb, 0xed, 0xfb, 0x00, 0x77, 0x48, 0x10, 0x1e, - 0xfc, 0x26, 0xcc, 0x85, 0x21, 0x2f, 0x19, 0x89, 0x3f, 0xaf, 0x74, 0xcf, 0xe1, 0x24, 0x1a, 0xf7, - 0xd3, 0x9b, 0xaf, 0x43, 0x41, 0x44, 0x6b, 0x9e, 0xea, 0xe2, 0xb4, 0x6a, 0x3c, 0x24, 0xad, 0x86, - 0xb9, 0x32, 0x33, 0x2a, 0x57, 0x6a, 0xe6, 0xba, 0x50, 0x92, 0xbc, 0x61, 0x21, 0x91, 0x4a, 0xc3, - 0x53, 0x90, 0x0f, 0xcd, 0x54, 0x5a, 0xa2, 0x02, 0x32, 0x14, 0x84, 0x23, 0x0a, 0x4d, 0xdb, 0x09, - 0x24, 0x32, 0x4f, 0x3a, 0x65, 0x5a, 0x95, 0x90, 0x79, 0x78, 0x95, 0xa0, 0x69, 0xfa, 0x31, 0x94, - 0x47, 0x55, 0x9d, 0x8f, 0x90, 0x1b, 0xd3, 0x9b, 0x62, 0xbe, 0x63, 0xc0, 0xbc, 0x2e, 0x29, 0xfd, - 0xf1, 0xa5, 0x57, 0x72, 0x75, 0x55, 0xa4, 0xed, 0xc8, 0x6f, 0x0d, 0x58, 0x4c, 0x2c, 0x6d, 0xac, - 0x13, 0x1f, 0xc3, 0x28, 0xdd, 0x39, 0xb2, 0x63, 0x38, 0xc7, 0x5f, 0x33, 0x50, 0xda, 0xb5, 0x8e, - 0x88, 0x7b, 0x48, 0x5c, 0xd2, 0x08, 0x7c, 0x8a, 0x7e, 0x04, 0xc5, 0x96, 0x15, 0x34, 0x4e, 0x04, - 0x34, 0xac, 0xa0, 0xeb, 0xe9, 0x82, 0x5d, 0x42, 0x52, 0x75, 0x2f, 0x16, 0x73, 0xdb, 0x0b, 0x68, - 0xb7, 0x76, 0x4d, 0x99, 0x54, 0xd4, 0x30, 0x58, 0xd7, 0x26, 0xda, 0x1e, 0xf1, 0x7d, 0xfb, 0xad, - 0x36, 0x4f, 0xef, 0xe3, 0x77, 0x5b, 0x09, 0x13, 0x30, 0x79, 0xb3, 0xe3, 0x50, 0xd2, 0x22, 0x5e, - 0x10, 0xb7, 0x3d, 0x7b, 0x7d, 0xf2, 0xf1, 0x80, 0xc6, 0xa5, 0x97, 0x60, 0xbe, 0xdf, 0x78, 0x1e, - 0x7f, 0x4e, 0x49, 0x57, 0x9e, 0x17, 0xe6, 0x3f, 0xd1, 0x22, 0xe4, 0xce, 0x2c, 0xb7, 0xa3, 0x6e, - 0x23, 0x96, 0x1f, 0xb7, 0x32, 0x37, 0x0d, 0xf3, 0xf7, 0x06, 0x94, 0x47, 0x19, 0x82, 0xbe, 0xa8, - 0x09, 0xaa, 0x15, 0x95, 0x55, 0xd9, 0x57, 0x48, 0x57, 0x4a, 0xbd, 0x0d, 0x79, 0xbf, 0xcd, 0xeb, - 0x01, 0x9f, 0xaa, 0x53, 0x7f, 0x32, 0x3c, 0xc9, 0x7d, 0x05, 0xbf, 0xec, 0x55, 0xae, 0x27, 0xc4, - 0x87, 0x08, 0x1c, 0xb1, 0xf2, 0x48, 0x2d, 0xec, 0xe1, 0xd9, 0x23, 0x8a, 0xd4, 0xf7, 0x05, 0x04, - 0x2b, 0x8c, 0xf9, 0x27, 0x03, 0x26, 0x45, 0xe1, 0xfa, 0x3a, 0xe4, 0xf9, 0xfe, 0xd9, 0x56, 0x60, - 0x09, 0xbb, 0x52, 0xb7, 0x4c, 0x9c, 0x7b, 0x8f, 0x04, 0x56, 0xec, 0x6d, 0x21, 0x04, 0x47, 0x12, - 0x11, 0x86, 0x9c, 0x13, 0x90, 0x56, 0x78, 0x90, 0x4f, 0x8f, 0x14, 0xad, 0x1a, 0xf6, 0x2a, 0xb6, - 0xce, 0x6f, 0xbf, 0x15, 0x10, 0x8f, 0x1f, 0x46, 0x7c, 0x35, 0x76, 0xb8, 0x0c, 0x2c, 0x45, 0x99, - 0xff, 0x36, 0x20, 0x52, 0xc5, 0x9d, 0x9f, 0x11, 0xf7, 0x78, 0xd7, 0xf1, 0x4e, 0xd5, 0xb6, 0x46, - 0xe6, 0x1c, 0x2a, 0x38, 0x8e, 0x28, 0x86, 0xa5, 0x87, 0xcc, 0x78, 0xe9, 0x81, 0x2b, 0x6c, 0xf8, - 0x5e, 0xe0, 0x78, 0x9d, 0x81, 0xdb, 0xb6, 0xa5, 0xe0, 0x38, 0xa2, 0xe0, 0x85, 0x08, 0x25, 0x2d, - 0xcb, 0xf1, 0x1c, 0xaf, 0xc9, 0x17, 0xb1, 0xe5, 0x77, 0xbc, 0x40, 0x64, 0x64, 0x55, 0x88, 0xe0, - 0x01, 0x2c, 0x1e, 0xc2, 0x61, 0xfe, 0x71, 0x12, 0x8a, 0x7c, 0xcd, 0x61, 0x9e, 0x7b, 0x01, 0x4a, - 0xae, 0xee, 0x05, 0x6a, 0xed, 0xd7, 0x95, 0x29, 0xc9, 0x7b, 0x8d, 0x93, 0xb4, 0x9c, 0x59, 0xd4, - 0x4f, 0x11, 0x73, 0x26, 0xc9, 0xbc, 0xad, 0x23, 0x71, 0x92, 0x96, 0x47, 0xaf, 0x73, 0x7e, 0x3f, - 0x54, 0x65, 0x12, 0x1d, 0xd1, 0xb7, 0x39, 0x10, 0x4b, 0x1c, 0xda, 0x83, 0x6b, 0x96, 0xeb, 0xfa, - 0xe7, 0x02, 0x58, 0xf3, 0xfd, 0xd3, 0x96, 0x45, 0x4f, 0x99, 0x68, 0x3a, 0xf3, 0xb5, 0x2f, 0x28, - 0x96, 0x6b, 0x9b, 0x83, 0x24, 0x78, 0x18, 0xdf, 0xb0, 0x63, 0x9b, 0x1c, 0xf3, 0xd8, 0x4e, 0x60, - 0xb1, 0x0f, 0x24, 0x6e, 0xb9, 0xea, 0x00, 0x9f, 0x55, 0x72, 0x16, 0xf1, 0x10, 0x9a, 0xcb, 0x11, - 0x70, 0x3c, 0x54, 0x22, 0xba, 0x05, 0xb3, 0xdc, 0x93, 0xfd, 0x4e, 0x10, 0xd6, 0x9d, 0x39, 0x71, - 0xdc, 0xe8, 0xa2, 0x57, 0x99, 0xbd, 0x9b, 0xc0, 0xe0, 0x3e, 0x4a, 0xbe, 0xb9, 0xae, 0xd3, 0x72, - 0x82, 0xf2, 0xb4, 0x60, 0x89, 0x36, 0x77, 0x97, 0x03, 0xb1, 0xc4, 0x25, 0x3c, 0x30, 0x7f, 0x95, - 0x07, 0x9a, 0xbf, 0xc9, 0x02, 0x92, 0x85, 0xb2, 0x2d, 0xeb, 0x29, 0x19, 0xd2, 0x78, 0x35, 0xaf, - 0x0a, 0x6d, 0xa3, 0xaf, 0x9a, 0x57, 0x35, 0x76, 0x88, 0x47, 0x7b, 0x50, 0x90, 0xa1, 0x25, 0xbe, - 0x2e, 0x6b, 0x8a, 0xb8, 0xb0, 0x1f, 0x22, 0x2e, 0x7b, 0x95, 0xa5, 0x84, 0x9a, 0x08, 0x23, 0x3a, - 0xad, 0x58, 0x02, 0xda, 0x00, 0xb0, 0xda, 0x8e, 0x3e, 0xd7, 0x2a, 0xc4, 0xd3, 0x8d, 0xb8, 0x43, - 0xc5, 0x1a, 0x15, 0x7a, 0x19, 0x26, 0x83, 0x4f, 0xd6, 0x0d, 0xe5, 0x45, 0xb3, 0xc7, 0x7b, 0x1f, - 0x21, 0x81, 0x6b, 0x17, 0xfe, 0xcc, 0xb8, 0x59, 0xaa, 0x91, 0x89, 0xb4, 0x6f, 0x47, 0x18, 0xac, - 0x51, 0xa1, 0xef, 0x40, 0xfe, 0x58, 0x95, 0xa2, 0xe2, 0x60, 0x52, 0x87, 0xc8, 0xb0, 0x80, 0x95, - 0xad, 0x75, 0xf8, 0x85, 0x23, 0x69, 0xe6, 0x9b, 0x50, 0xd8, 0x73, 0x1a, 0xd4, 0x17, 0x8d, 0xd8, - 0x93, 0x30, 0xcd, 0x12, 0x9d, 0x4a, 0x74, 0x24, 0xa1, 0xbb, 0x84, 0x78, 0xee, 0x27, 0x9e, 0xe5, - 0xf9, 0xb2, 0x1f, 0xc9, 0xc5, 0x7e, 0xf2, 0x2a, 0x07, 0x62, 0x89, 0xbb, 0xb5, 0xc8, 0x33, 0xfd, - 0xcf, 0xdf, 0xaf, 0x4c, 0xbc, 0xfb, 0x7e, 0x65, 0xe2, 0xbd, 0xf7, 0x55, 0xd6, 0xbf, 0x04, 0x80, - 0xfd, 0xa3, 0x1f, 0x90, 0x86, 0x8c, 0x9f, 0xa9, 0xe6, 0x58, 0xe1, 0xf8, 0x54, 0xcc, 0xb1, 0x32, - 0x7d, 0xd5, 0x9b, 0x86, 0xc3, 0x09, 0x4a, 0xb4, 0x06, 0x85, 0x68, 0x42, 0xa5, 0x0e, 0x7a, 0x21, - 0x74, 0x9c, 0x68, 0x8c, 0x85, 0x63, 0x9a, 0x44, 0x30, 0x9f, 0xbc, 0x32, 0x98, 0xd7, 0x20, 0xdb, - 0x71, 0x6c, 0xd5, 0xb5, 0x3e, 0x13, 0x26, 0xd3, 0x7b, 0x3b, 0xf5, 0xcb, 0x5e, 0xe5, 0xb1, 0x51, - 0x83, 0x61, 0xde, 0xf1, 0xb3, 0xea, 0xbd, 0x9d, 0x3a, 0xe6, 0xcc, 0xc3, 0x22, 0xcb, 0xd4, 0x98, - 0x91, 0x65, 0x03, 0xa0, 0x19, 0xf7, 0xfe, 0xf2, 0xe2, 0x46, 0x1e, 0xa5, 0xf5, 0xfc, 0x1a, 0x15, - 0x62, 0xb0, 0xd0, 0xe0, 0x0d, 0xb2, 0xea, 0xc1, 0x59, 0x60, 0xb5, 0xe4, 0xe4, 0x6e, 0x3c, 0xe7, - 0xbe, 0xa1, 0xd4, 0x2c, 0x6c, 0xf5, 0x0b, 0xc3, 0x83, 0xf2, 0x91, 0x0f, 0x0b, 0xb6, 0x6a, 0xf5, - 0x62, 0xa5, 0x85, 0xb1, 0x95, 0x5e, 0xe7, 0x0a, 0xeb, 0xfd, 0x82, 0xf0, 0xa0, 0x6c, 0xf4, 0x7d, - 0x58, 0x0a, 0x81, 0x83, 0xfd, 0xb6, 0x88, 0xbc, 0xd9, 0xda, 0xf2, 0x45, 0xaf, 0xb2, 0x54, 0x1f, - 0x49, 0x85, 0x1f, 0x22, 0x01, 0xd9, 0x30, 0xe5, 0xca, 0x4a, 0xb5, 0x28, 0xaa, 0x8b, 0xaf, 0xa7, - 0x5b, 0x45, 0xec, 0xfd, 0x55, 0xbd, 0x42, 0x8d, 0xe6, 0x1e, 0xaa, 0x38, 0x55, 0xb2, 0xd1, 0x5b, - 0x50, 0xb4, 0x3c, 0xcf, 0x0f, 0x2c, 0x39, 0x01, 0x98, 0x11, 0xaa, 0x36, 0xc7, 0x56, 0xb5, 0x19, - 0xcb, 0xe8, 0xab, 0x88, 0x35, 0x0c, 0xd6, 0x55, 0xa1, 0x73, 0x98, 0xf3, 0xcf, 0x3d, 0x42, 0x31, - 0x39, 0x26, 0x94, 0x78, 0x0d, 0xc2, 0xca, 0x25, 0xa1, 0xfd, 0xd9, 0x94, 0xda, 0x13, 0xcc, 0xb1, - 0x4b, 0x27, 0xe1, 0x0c, 0xf7, 0x6b, 0x41, 0x55, 0x1e, 0x24, 0x3d, 0xcb, 0x75, 0x7e, 0x48, 0x28, - 0x2b, 0xcf, 0xc6, 0xc3, 0xd5, 0xed, 0x08, 0x8a, 0x35, 0x0a, 0xf4, 0x35, 0x28, 0x36, 0xdc, 0x0e, - 0x0b, 0x88, 0x9c, 0x74, 0xcf, 0x89, 0x1b, 0x14, 0xad, 0x6f, 0x2b, 0x46, 0x61, 0x9d, 0x0e, 0x75, - 0xa0, 0xd4, 0xd2, 0x53, 0x46, 0x79, 0x41, 0xac, 0xee, 0x66, 0xba, 0xd5, 0x0d, 0x26, 0xb5, 0xb8, - 0x82, 0x49, 0xe0, 0x70, 0x52, 0xcb, 0xd2, 0xf3, 0x50, 0xfc, 0x84, 0xc5, 0x3d, 0x6f, 0x0e, 0xfa, - 0xcf, 0x71, 0xac, 0xe6, 0xe0, 0xcf, 0x19, 0x98, 0x4d, 0xee, 0x7e, 0x5f, 0x3a, 0xcc, 0xa5, 0x4a, - 0x87, 0x61, 0x1b, 0x6a, 0x8c, 0x1c, 0xce, 0x87, 0x61, 0x3d, 0x3b, 0x32, 0xac, 0xab, 0xe8, 0x39, - 0xf9, 0x28, 0xd1, 0xb3, 0x0a, 0xc0, 0xeb, 0x0c, 0xea, 0xbb, 0x2e, 0xa1, 0x22, 0x70, 0xe6, 0xd5, - 0x10, 0x3e, 0x82, 0x62, 0x8d, 0x82, 0x57, 0xc3, 0x47, 0xae, 0xdf, 0x38, 0x15, 0x5b, 0x10, 0x5e, - 0x7a, 0x11, 0x32, 0xf3, 0xb2, 0x1a, 0xae, 0x0d, 0x60, 0xf1, 0x10, 0x0e, 0xb3, 0x0b, 0xd7, 0x0f, - 0x2c, 0x1a, 0x38, 0x96, 0x1b, 0x5f, 0x30, 0xd1, 0x6e, 0xbc, 0x31, 0xd0, 0xcc, 0x3c, 0x33, 0xee, - 0x45, 0x8d, 0x37, 0x3f, 0x86, 0xc5, 0x0d, 0x8d, 0xf9, 0x37, 0x03, 0x6e, 0x0c, 0xd5, 0xfd, 0x19, - 0x34, 0x53, 0x6f, 0x24, 0x9b, 0xa9, 0x17, 0x52, 0x4e, 0x21, 0x87, 0x59, 0x3b, 0xa2, 0xb5, 0x9a, - 0x86, 0xdc, 0x01, 0x2f, 0x62, 0xcd, 0x5f, 0x19, 0x30, 0x23, 0x7e, 0x8d, 0x33, 0xc1, 0xad, 0x40, - 0xee, 0xd8, 0x0f, 0x47, 0x54, 0x79, 0xf9, 0xc8, 0xb3, 0xcd, 0x01, 0x58, 0xc2, 0x1f, 0x61, 0xc4, - 0xfb, 0x8e, 0x01, 0xc9, 0xd9, 0x29, 0x7a, 0x49, 0xfa, 0xaf, 0x11, 0x0d, 0x37, 0xc7, 0xf4, 0xdd, - 0x17, 0x47, 0xb5, 0x82, 0xd7, 0x52, 0x4d, 0x09, 0x9f, 0x82, 0x02, 0xf6, 0xfd, 0xe0, 0xc0, 0x0a, - 0x4e, 0x18, 0x5f, 0x78, 0x9b, 0xff, 0x50, 0x7b, 0x23, 0x16, 0x2e, 0x30, 0x58, 0xc2, 0xcd, 0x5f, - 0x1a, 0x70, 0x63, 0xe4, 0xbb, 0x06, 0x0f, 0x01, 0x8d, 0xe8, 0x4b, 0xad, 0x28, 0xf2, 0xc2, 0x98, - 0x0e, 0x6b, 0x54, 0xbc, 0x87, 0x4b, 0x3c, 0x86, 0xf4, 0xf7, 0x70, 0x09, 0x6d, 0x38, 0x49, 0x6b, - 0xfe, 0x2b, 0x03, 0xea, 0x71, 0xe3, 0x7f, 0xec, 0xb1, 0x4f, 0xf4, 0x3d, 0xad, 0xcc, 0x26, 0x9f, - 0x56, 0xa2, 0x77, 0x14, 0xed, 0x6d, 0x21, 0xfb, 0xf0, 0xb7, 0x05, 0xf4, 0x5c, 0xf4, 0x5c, 0x21, - 0x43, 0xd7, 0x72, 0xf2, 0xb9, 0xe2, 0xb2, 0x57, 0x99, 0x51, 0xc2, 0x93, 0xcf, 0x17, 0xaf, 0xc1, - 0xb4, 0x4d, 0x02, 0xcb, 0x71, 0x65, 0x3f, 0x96, 0x7a, 0x88, 0x2f, 0x85, 0xd5, 0x25, 0x6b, 0xad, - 0xc8, 0x6d, 0x52, 0x1f, 0x38, 0x14, 0xc8, 0xa3, 0x6d, 0xc3, 0xb7, 0x65, 0x3b, 0x91, 0x8b, 0xa3, - 0xed, 0x96, 0x6f, 0x13, 0x2c, 0x30, 0xe6, 0xbb, 0x06, 0x14, 0xa5, 0xa4, 0x2d, 0xab, 0xc3, 0x08, - 0x5a, 0x8f, 0x56, 0x21, 0x8f, 0xfb, 0x86, 0xfe, 0x2e, 0x75, 0xd9, 0xab, 0x14, 0x04, 0x99, 0xe8, - 0x44, 0x86, 0xbc, 0xbf, 0x64, 0xae, 0xd8, 0xa3, 0xc7, 0x21, 0x27, 0x6e, 0x8f, 0xda, 0xcc, 0xe8, - 0xae, 0x8b, 0x0b, 0x86, 0x25, 0xce, 0xfc, 0x38, 0x03, 0xa5, 0xc4, 0xe2, 0x52, 0xf4, 0x02, 0xd1, - 0xe8, 0x32, 0x93, 0x62, 0x1c, 0x3e, 0xfa, 0xe9, 0x58, 0xe5, 0x9e, 0xa9, 0x47, 0xc9, 0x3d, 0xdf, - 0x85, 0xa9, 0x06, 0xdf, 0xa3, 0xf0, 0x9f, 0x08, 0xeb, 0xe3, 0x1c, 0xa7, 0xd8, 0xdd, 0xd8, 0x1b, - 0xc5, 0x27, 0xc3, 0x4a, 0x20, 0xba, 0x03, 0x0b, 0x94, 0x04, 0xb4, 0xbb, 0x79, 0x1c, 0x10, 0xaa, - 0x37, 0xf1, 0xb9, 0xb8, 0xe2, 0xc6, 0xfd, 0x04, 0x78, 0x90, 0xc7, 0x3c, 0x82, 0x99, 0xbb, 0xd6, - 0x91, 0x1b, 0x3d, 0x4b, 0x61, 0x28, 0x39, 0x5e, 0xc3, 0xed, 0xd8, 0x44, 0x46, 0xe3, 0x30, 0x7a, - 0x85, 0x97, 0x76, 0x47, 0x47, 0x5e, 0xf6, 0x2a, 0xd7, 0x12, 0x00, 0xf9, 0x0e, 0x83, 0x93, 0x22, - 0x4c, 0x17, 0x26, 0x3f, 0xc3, 0xee, 0xf1, 0x7b, 0x50, 0x88, 0xeb, 0xfb, 0x4f, 0x59, 0xa5, 0xf9, - 0x06, 0xe4, 0xb9, 0xc7, 0x87, 0x7d, 0xe9, 0x15, 0x25, 0x4e, 0xb2, 0x70, 0xca, 0xa4, 0x29, 0x9c, - 0xcc, 0x16, 0x94, 0xee, 0xb5, 0xed, 0x47, 0x7c, 0x98, 0xcc, 0xa4, 0xce, 0x5a, 0x1b, 0x20, 0xff, - 0xe4, 0xc0, 0x13, 0x84, 0xcc, 0xdc, 0x5a, 0x82, 0xd0, 0x13, 0xaf, 0x36, 0x95, 0xff, 0xa9, 0x01, - 0x20, 0xc6, 0x5f, 0xb7, 0xcf, 0x88, 0x17, 0xa4, 0x78, 0xbe, 0xbe, 0x07, 0x53, 0xbe, 0xf4, 0x26, - 0xf9, 0x38, 0x39, 0xe6, 0x8c, 0x35, 0xba, 0x04, 0xd2, 0x9f, 0xb0, 0x12, 0x56, 0x5b, 0xfd, 0xe0, - 0xc1, 0xf2, 0xc4, 0x87, 0x0f, 0x96, 0x27, 0x3e, 0x7a, 0xb0, 0x3c, 0xf1, 0xf6, 0xc5, 0xb2, 0xf1, - 0xc1, 0xc5, 0xb2, 0xf1, 0xe1, 0xc5, 0xb2, 0xf1, 0xd1, 0xc5, 0xb2, 0xf1, 0xf1, 0xc5, 0xb2, 0xf1, - 0xee, 0x3f, 0x96, 0x27, 0x5e, 0xcb, 0x9c, 0xad, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x3c, - 0xc6, 0xe5, 0x5a, 0x26, 0x00, 0x00, + // 2813 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3a, 0xcb, 0x6f, 0x24, 0x47, + 0xf9, 0xee, 0x19, 0x8f, 0x3d, 0xf3, 0x8d, 0xc7, 0x8f, 0x5a, 0xef, 0xef, 0x37, 0x6b, 0x84, 0xc7, + 0xe9, 0xa0, 0x68, 0x03, 0xc9, 0x38, 0x5e, 0x42, 0xb4, 0xd9, 0x90, 0x80, 0xc7, 0xb3, 0xde, 0x98, + 0xac, 0x63, 0xab, 0xbc, 0xbb, 0x40, 0x88, 0x50, 0xda, 0xdd, 0xe5, 0x71, 0xe3, 0x9e, 0xee, 0x49, + 0x55, 0x8f, 0x37, 0x03, 0x07, 0x72, 0x00, 0x01, 0x12, 0x44, 0xe1, 0x86, 0x38, 0xa0, 0x44, 0xf0, + 0x17, 0x70, 0x81, 0x3f, 0x00, 0x89, 0x1c, 0x23, 0x71, 0x89, 0x04, 0x1a, 0x25, 0xe6, 0xc0, 0x11, + 0x71, 0xf5, 0x05, 0x54, 0x8f, 0xee, 0xae, 0x9e, 0xc7, 0xba, 0x27, 0xbb, 0x44, 0xdc, 0xa6, 0xbf, + 0x77, 0x55, 0x7d, 0xf5, 0xbd, 0x6a, 0x60, 0xf7, 0xe4, 0x3a, 0xab, 0xbb, 0xc1, 0xfa, 0x49, 0xf7, + 0x90, 0x50, 0x9f, 0x84, 0x84, 0xad, 0x9f, 0x12, 0xdf, 0x09, 0xe8, 0xba, 0x42, 0x58, 0x1d, 0xb7, + 0x6d, 0xd9, 0xc7, 0xae, 0x4f, 0x68, 0x6f, 0xbd, 0x73, 0xd2, 0xe2, 0x00, 0xb6, 0xde, 0x26, 0xa1, + 0xb5, 0x7e, 0xba, 0xb1, 0xde, 0x22, 0x3e, 0xa1, 0x56, 0x48, 0x9c, 0x7a, 0x87, 0x06, 0x61, 0x80, + 0xbe, 0x20, 0xb9, 0xea, 0x3a, 0x57, 0xbd, 0x73, 0xd2, 0xe2, 0x00, 0x56, 0xe7, 0x5c, 0xf5, 0xd3, + 0x8d, 0x95, 0xa7, 0x5b, 0x6e, 0x78, 0xdc, 0x3d, 0xac, 0xdb, 0x41, 0x7b, 0xbd, 0x15, 0xb4, 0x82, + 0x75, 0xc1, 0x7c, 0xd8, 0x3d, 0x12, 0x5f, 0xe2, 0x43, 0xfc, 0x92, 0x42, 0x57, 0xc6, 0x9a, 0x42, + 0xbb, 0x7e, 0xe8, 0xb6, 0xc9, 0xa0, 0x15, 0x2b, 0xcf, 0x5d, 0xc4, 0xc0, 0xec, 0x63, 0xd2, 0xb6, + 0x06, 0xf9, 0xcc, 0x3f, 0xe7, 0xa1, 0xb8, 0xb9, 0xbf, 0x73, 0x8b, 0x06, 0xdd, 0x0e, 0x5a, 0x83, + 0x69, 0xdf, 0x6a, 0x93, 0xaa, 0xb1, 0x66, 0x5c, 0x2d, 0x35, 0xe6, 0x3e, 0xe8, 0xd7, 0xa6, 0xce, + 0xfa, 0xb5, 0xe9, 0x57, 0xad, 0x36, 0xc1, 0x02, 0x83, 0x3c, 0x28, 0x9e, 0x12, 0xca, 0xdc, 0xc0, + 0x67, 0xd5, 0xdc, 0x5a, 0xfe, 0x6a, 0xf9, 0xda, 0x4b, 0xf5, 0x2c, 0xeb, 0xaf, 0x0b, 0x05, 0xf7, + 0x24, 0xeb, 0x76, 0x40, 0x9b, 0x2e, 0xb3, 0x83, 0x53, 0x42, 0x7b, 0x8d, 0x45, 0xa5, 0xa5, 0xa8, + 0x90, 0x0c, 0xc7, 0x1a, 0xd0, 0x8f, 0x0c, 0x58, 0xec, 0x50, 0x72, 0x44, 0x28, 0x25, 0x8e, 0xc2, + 0x57, 0xf3, 0x6b, 0xc6, 0x23, 0x50, 0x5b, 0x55, 0x6a, 0x17, 0xf7, 0x07, 0xe4, 0xe3, 0x21, 0x8d, + 0xe8, 0xb7, 0x06, 0xac, 0x30, 0x42, 0x4f, 0x09, 0xdd, 0x74, 0x1c, 0x4a, 0x18, 0x6b, 0xf4, 0xb6, + 0x3c, 0x97, 0xf8, 0xe1, 0xd6, 0x4e, 0x13, 0xb3, 0xea, 0xb4, 0xd8, 0x87, 0xaf, 0x65, 0x33, 0xe8, + 0x60, 0x9c, 0x9c, 0x86, 0xa9, 0x2c, 0x5a, 0x19, 0x4b, 0xc2, 0xf0, 0x03, 0xcc, 0x30, 0x8f, 0x60, + 0x2e, 0x3a, 0xc8, 0xdb, 0x2e, 0x0b, 0xd1, 0x3d, 0x98, 0x69, 0xf1, 0x0f, 0x56, 0x35, 0x84, 0x81, + 0xf5, 0x6c, 0x06, 0x46, 0x32, 0x1a, 0xf3, 0xca, 0x9e, 0x19, 0xf1, 0xc9, 0xb0, 0x92, 0x66, 0xfe, + 0x6c, 0x1a, 0xca, 0x9b, 0xfb, 0x3b, 0x98, 0xb0, 0xa0, 0x4b, 0x6d, 0x92, 0xc1, 0x69, 0xae, 0xc3, + 0x1c, 0x73, 0xfd, 0x56, 0xd7, 0xb3, 0x28, 0x87, 0x56, 0x67, 0x04, 0xe5, 0xb2, 0xa2, 0x9c, 0x3b, + 0xd0, 0x70, 0x38, 0x45, 0x89, 0xae, 0x01, 0x70, 0x09, 0xac, 0x63, 0xd9, 0xc4, 0xa9, 0xe6, 0xd6, + 0x8c, 0xab, 0xc5, 0x06, 0x52, 0x7c, 0xf0, 0x6a, 0x8c, 0xc1, 0x1a, 0x15, 0x7a, 0x1c, 0x0a, 0xc2, + 0xd2, 0x6a, 0x51, 0xa8, 0xa9, 0x28, 0xf2, 0x82, 0x58, 0x06, 0x96, 0x38, 0xf4, 0x24, 0xcc, 0x2a, + 0x2f, 0xab, 0x96, 0x04, 0xd9, 0x82, 0x22, 0x9b, 0x8d, 0xdc, 0x20, 0xc2, 0xf3, 0xf5, 0x9d, 0xb8, + 0xbe, 0x23, 0xfc, 0x4e, 0x5b, 0xdf, 0x2b, 0xae, 0xef, 0x60, 0x81, 0x41, 0xb7, 0xa1, 0x70, 0x4a, + 0xe8, 0x21, 0xf7, 0x04, 0xee, 0x9a, 0x5f, 0xca, 0xb6, 0xd1, 0xf7, 0x38, 0x4b, 0xa3, 0xc4, 0x4d, + 0x13, 0x3f, 0xb1, 0x14, 0x82, 0xea, 0x00, 0xec, 0x38, 0xa0, 0xa1, 0x58, 0x5e, 0xb5, 0xb0, 0x96, + 0xbf, 0x5a, 0x6a, 0xcc, 0xf3, 0xf5, 0x1e, 0xc4, 0x50, 0xac, 0x51, 0x70, 0x7a, 0xdb, 0x0a, 0x49, + 0x2b, 0xa0, 0x2e, 0x61, 0xd5, 0xd9, 0x84, 0x7e, 0x2b, 0x86, 0x62, 0x8d, 0x02, 0x7d, 0x03, 0x10, + 0x0b, 0x03, 0x6a, 0xb5, 0x88, 0x5a, 0xea, 0xcb, 0x16, 0x3b, 0xae, 0x82, 0x58, 0xdd, 0x8a, 0x5a, + 0x1d, 0x3a, 0x18, 0xa2, 0xc0, 0x23, 0xb8, 0xcc, 0xdf, 0x1b, 0xb0, 0xa0, 0xf9, 0x82, 0xf0, 0xbb, + 0xeb, 0x30, 0xd7, 0xd2, 0x6e, 0x9d, 0xf2, 0x8b, 0xf8, 0xb4, 0xf5, 0x1b, 0x89, 0x53, 0x94, 0x88, + 0x40, 0x89, 0x2a, 0x49, 0x51, 0x74, 0xd9, 0xc8, 0xec, 0xb4, 0x91, 0x0d, 0x89, 0x26, 0x0d, 0xc8, + 0x70, 0x22, 0xd9, 0xfc, 0x87, 0x21, 0x1c, 0x38, 0x8a, 0x37, 0xe8, 0xaa, 0x16, 0xd3, 0x0c, 0xb1, + 0x7d, 0x73, 0x63, 0xe2, 0xd1, 0x05, 0x81, 0x20, 0xf7, 0x3f, 0x11, 0x08, 0x6e, 0x14, 0x7f, 0xf5, + 0x5e, 0x6d, 0xea, 0xed, 0xbf, 0xad, 0x4d, 0x99, 0xbf, 0x34, 0x60, 0x6e, 0xb3, 0xd3, 0xf1, 0x7a, + 0x7b, 0x9d, 0x50, 0x2c, 0xc0, 0x84, 0x19, 0x87, 0xf6, 0x70, 0xd7, 0x57, 0x0b, 0x05, 0x7e, 0xbf, + 0x9b, 0x02, 0x82, 0x15, 0x86, 0xdf, 0x9f, 0xa3, 0x80, 0xda, 0x44, 0x5d, 0xb7, 0xf8, 0xfe, 0x6c, + 0x73, 0x20, 0x96, 0x38, 0x7e, 0xc8, 0x47, 0x2e, 0xf1, 0x9c, 0x5d, 0xcb, 0xb7, 0x5a, 0x84, 0xaa, + 0xcb, 0x11, 0x6f, 0xfd, 0xb6, 0x86, 0xc3, 0x29, 0x4a, 0xf3, 0xdf, 0x39, 0x28, 0x6d, 0x05, 0xbe, + 0xe3, 0x86, 0xea, 0x72, 0x85, 0xbd, 0xce, 0x50, 0xf0, 0xb8, 0xd3, 0xeb, 0x10, 0x2c, 0x30, 0xe8, + 0x79, 0x98, 0x61, 0xa1, 0x15, 0x76, 0x99, 0xb0, 0xa7, 0xd4, 0x78, 0x2c, 0x0a, 0x4b, 0x07, 0x02, + 0x7a, 0xde, 0xaf, 0x2d, 0xc4, 0xe2, 0x24, 0x08, 0x2b, 0x06, 0xee, 0xe9, 0xc1, 0xa1, 0xd8, 0x28, + 0xe7, 0x96, 0x4c, 0x7b, 0x51, 0xfe, 0xc8, 0x27, 0x9e, 0xbe, 0x37, 0x44, 0x81, 0x47, 0x70, 0xa1, + 0x53, 0x40, 0x9e, 0xc5, 0xc2, 0x3b, 0xd4, 0xf2, 0x99, 0xd0, 0x75, 0xc7, 0x6d, 0x13, 0x75, 0xe1, + 0xbf, 0x98, 0xed, 0xc4, 0x39, 0x47, 0xa2, 0xf7, 0xf6, 0x90, 0x34, 0x3c, 0x42, 0x03, 0x7a, 0x02, + 0x66, 0x28, 0xb1, 0x58, 0xe0, 0x57, 0x0b, 0x62, 0xf9, 0x71, 0x54, 0xc6, 0x02, 0x8a, 0x15, 0x96, + 0x07, 0xb4, 0x36, 0x61, 0xcc, 0x6a, 0x45, 0xe1, 0x35, 0x0e, 0x68, 0xbb, 0x12, 0x8c, 0x23, 0xbc, + 0xd9, 0x86, 0xca, 0x16, 0x25, 0x56, 0x48, 0x26, 0xf1, 0x8a, 0x4f, 0x7f, 0xe0, 0x3f, 0xc9, 0x43, + 0xa5, 0x49, 0x3c, 0x92, 0xe8, 0xdb, 0x06, 0xd4, 0xa2, 0x96, 0x4d, 0xf6, 0x09, 0x75, 0x03, 0xe7, + 0x80, 0xd8, 0x81, 0xef, 0x30, 0xe1, 0x02, 0xf9, 0xc6, 0xff, 0xf1, 0xbd, 0xb9, 0x35, 0x84, 0xc5, + 0x23, 0x38, 0x90, 0x07, 0x95, 0x0e, 0x15, 0xbf, 0xc5, 0x7e, 0x49, 0x0f, 0x29, 0x5f, 0xfb, 0x72, + 0xb6, 0xe3, 0xd8, 0xd7, 0x59, 0x1b, 0x4b, 0x67, 0xfd, 0x5a, 0x25, 0x05, 0xc2, 0x69, 0xe1, 0xe8, + 0xeb, 0xb0, 0x18, 0xd0, 0xce, 0xb1, 0xe5, 0x37, 0x49, 0x87, 0xf8, 0x0e, 0xf1, 0x43, 0x26, 0x76, + 0xa1, 0xd8, 0x58, 0xe6, 0x75, 0xc4, 0xde, 0x00, 0x0e, 0x0f, 0x51, 0xa3, 0xd7, 0x60, 0xa9, 0x43, + 0x83, 0x8e, 0xd5, 0x12, 0x2e, 0xb5, 0x1f, 0x78, 0xae, 0xdd, 0x13, 0x2e, 0x54, 0x6a, 0x3c, 0x75, + 0xd6, 0xaf, 0x2d, 0xed, 0x0f, 0x22, 0xcf, 0xfb, 0xb5, 0x4b, 0x62, 0xeb, 0x38, 0x24, 0x41, 0xe2, + 0x61, 0x31, 0xda, 0x19, 0x16, 0xc6, 0x9d, 0xa1, 0xb9, 0x03, 0xc5, 0x66, 0x57, 0xf9, 0xf3, 0x8b, + 0x50, 0x74, 0xd4, 0x6f, 0xb5, 0xf3, 0xd1, 0xc5, 0x8a, 0x69, 0xce, 0xfb, 0xb5, 0x0a, 0x2f, 0x1d, + 0xeb, 0x11, 0x00, 0xc7, 0x2c, 0xe6, 0x13, 0x50, 0x14, 0x47, 0xce, 0xee, 0x6d, 0xa0, 0x45, 0xc8, + 0x63, 0xeb, 0xbe, 0x90, 0x32, 0x87, 0xf9, 0x4f, 0x2d, 0x02, 0xed, 0x01, 0xdc, 0x22, 0x61, 0x74, + 0xf0, 0x9b, 0xb0, 0x10, 0x85, 0xe1, 0x74, 0x76, 0xf8, 0x7f, 0xa5, 0x7b, 0x01, 0xa7, 0xd1, 0x78, + 0x90, 0xde, 0x7c, 0x1d, 0x4a, 0x22, 0x83, 0xf0, 0xf4, 0x9b, 0xa4, 0x7a, 0xe3, 0x01, 0xa9, 0x3e, + 0xca, 0xdf, 0xb9, 0x71, 0xf9, 0x5b, 0x33, 0xd7, 0x83, 0x8a, 0xe4, 0x8d, 0x8a, 0x9b, 0x4c, 0x1a, + 0x9e, 0x82, 0x62, 0x64, 0xa6, 0xd2, 0x12, 0x17, 0xb5, 0x91, 0x20, 0x1c, 0x53, 0x68, 0xda, 0x8e, + 0x21, 0x95, 0x0d, 0xb3, 0x29, 0xd3, 0x2a, 0x97, 0xdc, 0x83, 0x2b, 0x17, 0x4d, 0xd3, 0x0f, 0xa1, + 0x3a, 0xae, 0x12, 0x7e, 0x88, 0x7c, 0x9d, 0xdd, 0x14, 0xf3, 0x1d, 0x03, 0x16, 0x75, 0x49, 0xd9, + 0x8f, 0x2f, 0xbb, 0x92, 0x8b, 0x2b, 0x35, 0x6d, 0x47, 0x7e, 0x63, 0xc0, 0x72, 0x6a, 0x69, 0x13, + 0x9d, 0xf8, 0x04, 0x46, 0xe9, 0xce, 0x91, 0x9f, 0xc0, 0x39, 0xfe, 0x92, 0x83, 0xca, 0x6d, 0xeb, + 0x90, 0x78, 0x07, 0xc4, 0x23, 0x76, 0x18, 0x50, 0xf4, 0x03, 0x28, 0xb7, 0xad, 0xd0, 0x3e, 0x16, + 0xd0, 0xa8, 0xaa, 0x6f, 0x66, 0x0b, 0x76, 0x29, 0x49, 0xf5, 0xdd, 0x44, 0xcc, 0x4d, 0x3f, 0xa4, + 0xbd, 0xc6, 0x25, 0x65, 0x52, 0x59, 0xc3, 0x60, 0x5d, 0x9b, 0x68, 0xc5, 0xc4, 0xf7, 0xcd, 0xb7, + 0x3a, 0xbc, 0xe4, 0x98, 0xbc, 0x03, 0x4c, 0x99, 0x80, 0xc9, 0x9b, 0x5d, 0x97, 0x92, 0x36, 0xf1, + 0xc3, 0xa4, 0x15, 0xdb, 0x1d, 0x90, 0x8f, 0x87, 0x34, 0xae, 0xbc, 0x04, 0x8b, 0x83, 0xc6, 0xf3, + 0xf8, 0x73, 0x42, 0x7a, 0xf2, 0xbc, 0x30, 0xff, 0x89, 0x96, 0xa1, 0x70, 0x6a, 0x79, 0x5d, 0x75, + 0x1b, 0xb1, 0xfc, 0xb8, 0x91, 0xbb, 0x6e, 0x98, 0xbf, 0x33, 0xa0, 0x3a, 0xce, 0x10, 0xf4, 0x79, + 0x4d, 0x50, 0xa3, 0xac, 0xac, 0xca, 0xbf, 0x42, 0x7a, 0x52, 0xea, 0x4d, 0x28, 0x06, 0x1d, 0x5e, + 0x0f, 0x04, 0x54, 0x9d, 0xfa, 0x93, 0xd1, 0x49, 0xee, 0x29, 0xf8, 0x79, 0xbf, 0x76, 0x39, 0x25, + 0x3e, 0x42, 0xe0, 0x98, 0x95, 0x47, 0x6a, 0x61, 0x0f, 0xcf, 0x1e, 0x71, 0xa4, 0xbe, 0x27, 0x20, + 0x58, 0x61, 0xcc, 0x3f, 0x1a, 0x30, 0x2d, 0x8a, 0xe9, 0xd7, 0xa1, 0xc8, 0xf7, 0xcf, 0xb1, 0x42, + 0x4b, 0xd8, 0x95, 0xb9, 0x8d, 0xe3, 0xdc, 0xbb, 0x24, 0xb4, 0x12, 0x6f, 0x8b, 0x20, 0x38, 0x96, + 0x88, 0x30, 0x14, 0xdc, 0x90, 0xb4, 0xa3, 0x83, 0x7c, 0x7a, 0xac, 0x68, 0x35, 0x44, 0xa8, 0x63, + 0xeb, 0xfe, 0xcd, 0xb7, 0x42, 0xe2, 0xf3, 0xc3, 0x48, 0xae, 0xc6, 0x0e, 0x97, 0x81, 0xa5, 0x28, + 0xf3, 0x5f, 0x06, 0xc4, 0xaa, 0xb8, 0xf3, 0x33, 0xe2, 0x1d, 0xdd, 0x76, 0xfd, 0x13, 0xb5, 0xad, + 0xb1, 0x39, 0x07, 0x0a, 0x8e, 0x63, 0x8a, 0x51, 0xe9, 0x21, 0x37, 0x59, 0x7a, 0xe0, 0x0a, 0xed, + 0xc0, 0x0f, 0x5d, 0xbf, 0x3b, 0x74, 0xdb, 0xb6, 0x14, 0x1c, 0xc7, 0x14, 0xbc, 0x10, 0xa1, 0xa4, + 0x6d, 0xb9, 0xbe, 0xeb, 0xb7, 0xf8, 0x22, 0xb6, 0x82, 0xae, 0x1f, 0x8a, 0x8c, 0xac, 0x0a, 0x11, + 0x3c, 0x84, 0xc5, 0x23, 0x38, 0xcc, 0x3f, 0x4c, 0x43, 0x99, 0xaf, 0x39, 0xca, 0x73, 0x2f, 0x40, + 0xc5, 0xd3, 0xbd, 0x40, 0xad, 0xfd, 0xb2, 0x32, 0x25, 0x7d, 0xaf, 0x71, 0x9a, 0x96, 0x33, 0x8b, + 0xfa, 0x29, 0x66, 0xce, 0xa5, 0x99, 0xb7, 0x75, 0x24, 0x4e, 0xd3, 0xf2, 0xe8, 0x75, 0x9f, 0xdf, + 0x0f, 0x55, 0x99, 0xc4, 0x47, 0xf4, 0x4d, 0x0e, 0xc4, 0x12, 0x87, 0x76, 0xe1, 0x92, 0xe5, 0x79, + 0xc1, 0x7d, 0x01, 0x6c, 0x04, 0xc1, 0x49, 0xdb, 0xa2, 0x27, 0x4c, 0x34, 0xc2, 0xc5, 0xc6, 0xe7, + 0x14, 0xcb, 0xa5, 0xcd, 0x61, 0x12, 0x3c, 0x8a, 0x6f, 0xd4, 0xb1, 0x4d, 0x4f, 0x78, 0x6c, 0xc7, + 0xb0, 0x3c, 0x00, 0x12, 0xb7, 0x5c, 0x75, 0xa5, 0xcf, 0x2a, 0x39, 0xcb, 0x78, 0x04, 0xcd, 0xf9, + 0x18, 0x38, 0x1e, 0x29, 0x11, 0xdd, 0x80, 0x79, 0xee, 0xc9, 0x41, 0x37, 0x8c, 0xea, 0xce, 0x82, + 0x38, 0x6e, 0x74, 0xd6, 0xaf, 0xcd, 0xdf, 0x49, 0x61, 0xf0, 0x00, 0x25, 0xdf, 0x5c, 0xcf, 0x6d, + 0xbb, 0x61, 0x75, 0x56, 0xb0, 0xc4, 0x9b, 0x7b, 0x9b, 0x03, 0xb1, 0xc4, 0xa5, 0x3c, 0xb0, 0x78, + 0x91, 0x07, 0x9a, 0xbf, 0xce, 0x03, 0x92, 0x85, 0xb2, 0x23, 0xeb, 0x29, 0x19, 0xd2, 0x78, 0x35, + 0xaf, 0x0a, 0x6d, 0x63, 0xa0, 0x9a, 0x57, 0x35, 0x76, 0x84, 0x47, 0xbb, 0x50, 0x92, 0xa1, 0x25, + 0xb9, 0x2e, 0xeb, 0x8a, 0xb8, 0xb4, 0x17, 0x21, 0xce, 0xfb, 0xb5, 0x95, 0x94, 0x9a, 0x18, 0x23, + 0x3a, 0xad, 0x44, 0x02, 0xba, 0x06, 0x60, 0x75, 0x5c, 0x7d, 0xd6, 0x56, 0x4a, 0x26, 0x2e, 0x49, + 0xd7, 0x8c, 0x35, 0x2a, 0xf4, 0x32, 0x4c, 0x87, 0x9f, 0xae, 0x1b, 0x2a, 0x8a, 0x66, 0x8f, 0xf7, + 0x3e, 0x42, 0x02, 0xd7, 0x2e, 0xfc, 0x99, 0x71, 0xb3, 0x54, 0x23, 0x13, 0x6b, 0xdf, 0x8e, 0x31, + 0x58, 0xa3, 0x42, 0xdf, 0x82, 0xe2, 0x91, 0x2a, 0x45, 0xc5, 0xc1, 0x64, 0x0e, 0x91, 0x51, 0x01, + 0x2b, 0xdb, 0xfd, 0xe8, 0x0b, 0xc7, 0xd2, 0xcc, 0x37, 0xa1, 0xb4, 0xeb, 0xda, 0x34, 0x10, 0x8d, + 0xd8, 0x93, 0x30, 0xcb, 0x52, 0x9d, 0x4a, 0x7c, 0x24, 0x91, 0xbb, 0x44, 0x78, 0xee, 0x27, 0xbe, + 0xe5, 0x07, 0xb2, 0x1f, 0x29, 0x24, 0x7e, 0xf2, 0x2a, 0x07, 0x62, 0x89, 0xbb, 0xb1, 0xcc, 0x33, + 0xfd, 0x4f, 0xdf, 0xaf, 0x4d, 0xbd, 0xfb, 0x7e, 0x6d, 0xea, 0xbd, 0xf7, 0x55, 0xd6, 0x3f, 0x07, + 0x80, 0xbd, 0xc3, 0xef, 0x11, 0x5b, 0xc6, 0xcf, 0x4c, 0xb3, 0xb5, 0x68, 0xa4, 0x2b, 0x66, 0x6b, + 0xb9, 0x81, 0xea, 0x4d, 0xc3, 0xe1, 0x14, 0x25, 0x5a, 0x87, 0x52, 0x3c, 0x35, 0x53, 0x07, 0xbd, + 0x14, 0x39, 0x4e, 0x3c, 0x5a, 0xc3, 0x09, 0x4d, 0x2a, 0x98, 0x4f, 0x5f, 0x18, 0xcc, 0x1b, 0x90, + 0xef, 0xba, 0x8e, 0xea, 0x5a, 0x9f, 0x89, 0x92, 0xe9, 0xdd, 0x9d, 0xe6, 0x79, 0xbf, 0xf6, 0xd8, + 0xb8, 0x61, 0x35, 0xef, 0xf8, 0x59, 0xfd, 0xee, 0x4e, 0x13, 0x73, 0xe6, 0x51, 0x91, 0x65, 0x66, + 0xc2, 0xc8, 0x72, 0x0d, 0xa0, 0x95, 0xf4, 0xfe, 0xf2, 0xe2, 0xc6, 0x1e, 0xa5, 0xf5, 0xfc, 0x1a, + 0x15, 0x62, 0xb0, 0x64, 0xf3, 0x06, 0x59, 0xf5, 0xe0, 0x2c, 0xb4, 0xda, 0x72, 0x9a, 0x38, 0x99, + 0x73, 0x5f, 0x51, 0x6a, 0x96, 0xb6, 0x06, 0x85, 0xe1, 0x61, 0xf9, 0x28, 0x80, 0x25, 0x47, 0xb5, + 0x7a, 0x89, 0xd2, 0xd2, 0xc4, 0x4a, 0x2f, 0x73, 0x85, 0xcd, 0x41, 0x41, 0x78, 0x58, 0x36, 0xfa, + 0x2e, 0xac, 0x44, 0xc0, 0xe1, 0x7e, 0x5b, 0x44, 0xde, 0x7c, 0x63, 0xf5, 0xac, 0x5f, 0x5b, 0x69, + 0x8e, 0xa5, 0xc2, 0x0f, 0x90, 0x80, 0x1c, 0x98, 0xf1, 0x64, 0xa5, 0x5a, 0x16, 0xd5, 0xc5, 0x57, + 0xb3, 0xad, 0x22, 0xf1, 0xfe, 0xba, 0x5e, 0xa1, 0xc6, 0x73, 0x0f, 0x55, 0x9c, 0x2a, 0xd9, 0xe8, + 0x2d, 0x28, 0x5b, 0xbe, 0x1f, 0x84, 0x96, 0x9c, 0x00, 0xcc, 0x09, 0x55, 0x9b, 0x13, 0xab, 0xda, + 0x4c, 0x64, 0x0c, 0x54, 0xc4, 0x1a, 0x06, 0xeb, 0xaa, 0xd0, 0x7d, 0x58, 0x08, 0xee, 0xfb, 0x84, + 0x62, 0x72, 0x44, 0x28, 0xf1, 0x6d, 0xc2, 0xaa, 0x15, 0xa1, 0xfd, 0xd9, 0x8c, 0xda, 0x53, 0xcc, + 0x89, 0x4b, 0xa7, 0xe1, 0x0c, 0x0f, 0x6a, 0x41, 0x75, 0x1e, 0x24, 0x7d, 0xcb, 0x73, 0xbf, 0x4f, + 0x28, 0xab, 0xce, 0x27, 0x03, 0xdf, 0xed, 0x18, 0x8a, 0x35, 0x0a, 0xf4, 0x15, 0x28, 0xdb, 0x5e, + 0x97, 0x85, 0x44, 0x4e, 0xdf, 0x17, 0xc4, 0x0d, 0x8a, 0xd7, 0xb7, 0x95, 0xa0, 0xb0, 0x4e, 0x87, + 0xba, 0x50, 0x69, 0xeb, 0x29, 0xa3, 0xba, 0x24, 0x56, 0x77, 0x3d, 0xdb, 0xea, 0x86, 0x93, 0x5a, + 0x52, 0xc1, 0xa4, 0x70, 0x38, 0xad, 0x65, 0xe5, 0x79, 0x28, 0x7f, 0xca, 0xe2, 0x9e, 0x37, 0x07, + 0x83, 0xe7, 0x38, 0x51, 0x73, 0xf0, 0xa7, 0x1c, 0xcc, 0xa7, 0x77, 0x7f, 0x20, 0x1d, 0x16, 0x32, + 0xa5, 0xc3, 0xa8, 0x0d, 0x35, 0xc6, 0x3e, 0x18, 0x44, 0x61, 0x3d, 0x3f, 0x36, 0xac, 0xab, 0xe8, + 0x39, 0xfd, 0x30, 0xd1, 0xb3, 0x0e, 0xc0, 0xeb, 0x0c, 0x1a, 0x78, 0x1e, 0xa1, 0x22, 0x70, 0x16, + 0xd5, 0xc3, 0x40, 0x0c, 0xc5, 0x1a, 0x05, 0xaf, 0x86, 0x0f, 0xbd, 0xc0, 0x3e, 0x11, 0x5b, 0x10, + 0x5d, 0x7a, 0x11, 0x32, 0x8b, 0xb2, 0x1a, 0x6e, 0x0c, 0x61, 0xf1, 0x08, 0x0e, 0xb3, 0x07, 0x97, + 0xf7, 0x2d, 0x1a, 0xba, 0x96, 0x97, 0x5c, 0x30, 0xd1, 0x6e, 0xbc, 0x31, 0xd4, 0xcc, 0x3c, 0x33, + 0xe9, 0x45, 0x4d, 0x36, 0x3f, 0x81, 0x25, 0x0d, 0x8d, 0xf9, 0x57, 0x03, 0xae, 0x8c, 0xd4, 0xfd, + 0x19, 0x34, 0x53, 0x6f, 0xa4, 0x9b, 0xa9, 0x17, 0x32, 0x4e, 0x21, 0x47, 0x59, 0x3b, 0xa6, 0xb5, + 0x9a, 0x85, 0xc2, 0x3e, 0x2f, 0x62, 0xcd, 0x5f, 0x18, 0x30, 0x27, 0x7e, 0x4d, 0x32, 0xc1, 0xad, + 0xa5, 0xe7, 0xfa, 0xa5, 0x47, 0x38, 0xd3, 0x7f, 0xc7, 0x80, 0xf4, 0xec, 0x14, 0xbd, 0x24, 0xfd, + 0xd7, 0x88, 0x87, 0x9b, 0x13, 0xfa, 0xee, 0x8b, 0xe3, 0x5a, 0xc1, 0x4b, 0x99, 0xa6, 0x84, 0x4f, + 0x41, 0x09, 0x07, 0x41, 0xb8, 0x6f, 0x85, 0xc7, 0x8c, 0x2f, 0xbc, 0xc3, 0x7f, 0xa8, 0xbd, 0x11, + 0x0b, 0x17, 0x18, 0x2c, 0xe1, 0xe6, 0xcf, 0x0d, 0xb8, 0x32, 0xf6, 0xad, 0x85, 0x87, 0x00, 0x3b, + 0xfe, 0x52, 0x2b, 0x8a, 0xbd, 0x30, 0xa1, 0xc3, 0x1a, 0x15, 0xef, 0xe1, 0x52, 0x0f, 0x34, 0x83, + 0x3d, 0x5c, 0x4a, 0x1b, 0x4e, 0xd3, 0x9a, 0xff, 0xcc, 0x81, 0x7a, 0xdc, 0xf8, 0x2f, 0x7b, 0xec, + 0x13, 0x03, 0x4f, 0x2b, 0xf3, 0xe9, 0xa7, 0x95, 0xf8, 0x1d, 0x45, 0x7b, 0x5b, 0xc8, 0x3f, 0xf8, + 0x6d, 0x01, 0x3d, 0x17, 0x3f, 0x57, 0xc8, 0xd0, 0xb5, 0x9a, 0x7e, 0xae, 0x38, 0xef, 0xd7, 0xe6, + 0x94, 0xf0, 0xf4, 0xf3, 0xc5, 0x6b, 0x30, 0xeb, 0x90, 0xd0, 0x72, 0x3d, 0xd9, 0x8f, 0x65, 0x1e, + 0xe2, 0x4b, 0x61, 0x4d, 0xc9, 0xda, 0x28, 0x73, 0x9b, 0xd4, 0x07, 0x8e, 0x04, 0xf2, 0x68, 0x6b, + 0x07, 0x8e, 0x6c, 0x27, 0x0a, 0x49, 0xb4, 0xdd, 0x0a, 0x1c, 0x82, 0x05, 0xc6, 0x7c, 0xd7, 0x80, + 0xb2, 0x94, 0xb4, 0x65, 0x75, 0x19, 0x41, 0x1b, 0xf1, 0x2a, 0xe4, 0x71, 0x5f, 0xd1, 0xdf, 0xa5, + 0xce, 0xfb, 0xb5, 0x92, 0x20, 0x13, 0x9d, 0xc8, 0x88, 0xf7, 0x97, 0xdc, 0x05, 0x7b, 0xf4, 0x38, + 0x14, 0xc4, 0xed, 0x51, 0x9b, 0x99, 0x3c, 0xb0, 0x71, 0x20, 0x96, 0x38, 0xf3, 0xe3, 0x1c, 0x54, + 0x52, 0x8b, 0xcb, 0xd0, 0x0b, 0xc4, 0xa3, 0xcb, 0x5c, 0x86, 0x71, 0xf8, 0xf8, 0xe7, 0x6c, 0x95, + 0x7b, 0x66, 0x1e, 0x26, 0xf7, 0x7c, 0x1b, 0x66, 0x6c, 0xbe, 0x47, 0xd1, 0xbf, 0x23, 0x36, 0x26, + 0x39, 0x4e, 0xb1, 0xbb, 0x89, 0x37, 0x8a, 0x4f, 0x86, 0x95, 0x40, 0x74, 0x0b, 0x96, 0x28, 0x09, + 0x69, 0x6f, 0xf3, 0x28, 0x24, 0x54, 0x6f, 0xe2, 0x0b, 0x49, 0xc5, 0x8d, 0x07, 0x09, 0xf0, 0x30, + 0x8f, 0x79, 0x08, 0x73, 0x77, 0xac, 0x43, 0x2f, 0x7e, 0x96, 0xc2, 0x50, 0x71, 0x7d, 0xdb, 0xeb, + 0x3a, 0x44, 0x46, 0xe3, 0x28, 0x7a, 0x45, 0x97, 0x76, 0x47, 0x47, 0x9e, 0xf7, 0x6b, 0x97, 0x52, + 0x00, 0xf9, 0x0e, 0x83, 0xd3, 0x22, 0x4c, 0x0f, 0xa6, 0x3f, 0xc3, 0xee, 0xf1, 0x3b, 0x50, 0x4a, + 0xea, 0xfb, 0x47, 0xac, 0xd2, 0x7c, 0x03, 0x8a, 0xdc, 0xe3, 0xa3, 0xbe, 0xf4, 0x82, 0x12, 0x27, + 0x5d, 0x38, 0xe5, 0xb2, 0x14, 0x4e, 0x66, 0x1b, 0x2a, 0x77, 0x3b, 0xce, 0x43, 0x3e, 0x4c, 0xe6, + 0x32, 0x67, 0xad, 0x6b, 0x20, 0xff, 0x78, 0xc1, 0x13, 0x84, 0xcc, 0xdc, 0x5a, 0x82, 0xd0, 0x13, + 0xaf, 0x36, 0x95, 0xff, 0xb1, 0x01, 0x20, 0xc6, 0x5f, 0x37, 0x4f, 0x89, 0x1f, 0x66, 0x78, 0xbe, + 0xbe, 0x0b, 0x33, 0x81, 0xf4, 0x26, 0xf9, 0x38, 0x39, 0xe1, 0x8c, 0x35, 0xbe, 0x04, 0xd2, 0x9f, + 0xb0, 0x12, 0xd6, 0xb8, 0xfa, 0xc1, 0x27, 0xab, 0x53, 0x1f, 0x7e, 0xb2, 0x3a, 0xf5, 0xd1, 0x27, + 0xab, 0x53, 0x6f, 0x9f, 0xad, 0x1a, 0x1f, 0x9c, 0xad, 0x1a, 0x1f, 0x9e, 0xad, 0x1a, 0x1f, 0x9d, + 0xad, 0x1a, 0x1f, 0x9f, 0xad, 0x1a, 0xef, 0xfe, 0x7d, 0x75, 0xea, 0xb5, 0xdc, 0xe9, 0xc6, 0x7f, + 0x02, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xee, 0x35, 0x7b, 0xee, 0x26, 0x00, 0x00, } func (m *APIGroup) Marshal() (dAtA []byte, err error) { @@ -1757,6 +1787,51 @@ func (m *APIVersions) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ApplyOptions) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplyOptions) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplyOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.FieldManager) + copy(dAtA[i:], m.FieldManager) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FieldManager))) + i-- + dAtA[i] = 0x1a + i-- + if m.Force { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + if len(m.DryRun) > 0 { + for iNdEx := len(m.DryRun) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.DryRun[iNdEx]) + copy(dAtA[i:], m.DryRun[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.DryRun[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *Condition) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3515,6 +3590,24 @@ func (m *APIVersions) Size() (n int) { return n } +func (m *ApplyOptions) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DryRun) > 0 { + for _, s := range m.DryRun { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 2 + l = len(m.FieldManager) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *Condition) Size() (n int) { if m == nil { return 0 @@ -4236,6 +4329,18 @@ func (this *APIResourceList) String() string { }, "") return s } +func (this *ApplyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ApplyOptions{`, + `DryRun:` + fmt.Sprintf("%v", this.DryRun) + `,`, + `Force:` + fmt.Sprintf("%v", this.Force) + `,`, + `FieldManager:` + fmt.Sprintf("%v", this.FieldManager) + `,`, + `}`, + }, "") + return s +} func (this *Condition) String() string { if this == nil { return "nil" @@ -5526,6 +5631,140 @@ func (m *APIVersions) Unmarshal(dAtA []byte) error { } return nil } +func (m *ApplyOptions) 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: ApplyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DryRun", 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 < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DryRun = append(m.DryRun, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Force", 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.Force = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldManager", 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 < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldManager = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Condition) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto index 3d34ed491ce..4f41504f3ff 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto @@ -134,6 +134,31 @@ message APIVersions { repeated ServerAddressByClientCIDR serverAddressByClientCIDRs = 2; } +// ApplyOptions may be provided when applying an API object. +// FieldManager is required for apply requests. +// ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation +// that speaks specifically to how the options fields relate to apply. +message ApplyOptions { + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + repeated string dryRun = 1; + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. + optional bool force = 2; + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required. + optional string fieldManager = 3; +} + // Condition contains details for one aspect of the current state of this API Resource. // --- // This struct is intended for direct use as an array at the field path .status.conditions. For example, diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go index 37302d11c2e..79e2ad48a04 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go @@ -580,6 +580,37 @@ type PatchOptions struct { FieldManager string `json:"fieldManager,omitempty" protobuf:"bytes,3,name=fieldManager"` } +// ApplyOptions may be provided when applying an API object. +// FieldManager is required for apply requests. +// ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation +// that speaks specifically to how the options fields relate to apply. +type ApplyOptions struct { + TypeMeta `json:",inline"` + + // When present, indicates that modifications should not be + // persisted. An invalid or unrecognized dryRun directive will + // result in an error response and no further processing of the + // request. Valid values are: + // - All: all dry run stages will be processed + // +optional + DryRun []string `json:"dryRun,omitempty" protobuf:"bytes,1,rep,name=dryRun"` + + // Force is going to "force" Apply requests. It means user will + // re-acquire conflicting fields owned by other people. + Force bool `json:"force" protobuf:"varint,2,opt,name=force"` + + // fieldManager is a name associated with the actor or entity + // that is making these changes. The value must be less than or + // 128 characters long, and only contain printable characters, + // as defined by https://golang.org/pkg/unicode/#IsPrint. This + // field is required. + FieldManager string `json:"fieldManager" protobuf:"bytes,3,name=fieldManager"` +} + +func (o ApplyOptions) ToPatchOptions() PatchOptions { + return PatchOptions{DryRun: o.DryRun, Force: &o.Force, FieldManager: o.FieldManager} +} + // +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go index 718f16ec1eb..c33d8ffa738 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go @@ -86,6 +86,17 @@ func (APIVersions) SwaggerDoc() map[string]string { return map_APIVersions } +var map_ApplyOptions = map[string]string{ + "": "ApplyOptions may be provided when applying an API object. FieldManager is required for apply requests. ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation that speaks specifically to how the options fields relate to apply.", + "dryRun": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "force": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people.", + "fieldManager": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required.", +} + +func (ApplyOptions) SwaggerDoc() map[string]string { + return map_ApplyOptions +} + var map_Condition = map[string]string{ "": "Condition contains details for one aspect of the current state of this API Resource.", "type": "type of condition in CamelCase or in foo.example.com/CamelCase.", diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go index 101431579a1..d43020da573 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go @@ -191,6 +191,28 @@ func (in *APIVersions) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ApplyOptions) DeepCopyInto(out *ApplyOptions) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.DryRun != nil { + in, out := &in.DryRun, &out.DryRun + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplyOptions. +func (in *ApplyOptions) DeepCopy() *ApplyOptions { + if in == nil { + return nil + } + out := new(ApplyOptions) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Condition) DeepCopyInto(out *Condition) { *out = *in diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/args/args.go b/staging/src/k8s.io/code-generator/cmd/client-gen/args/args.go index 949369cd70b..2f31de84871 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/args/args.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/args/args.go @@ -52,16 +52,22 @@ type CustomArgs struct { // PluralExceptions specify list of exceptions used when pluralizing certain types. // For example 'Endpoints:Endpoints', otherwise the pluralizer will generate 'Endpointes'. PluralExceptions []string + + // ApplyConfigurationPackage is the package of apply builders generated by typebuilder-gen. + // If non-empty, Apply functions are generated for each type and reference the apply builders. + // If empty (""), Apply functions are not generated. + ApplyConfigurationPackage string } func NewDefaults() (*args.GeneratorArgs, *CustomArgs) { genericArgs := args.Default().WithoutDefaultFlagParsing() customArgs := &CustomArgs{ - ClientsetName: "internalclientset", - ClientsetAPIPath: "/apis", - ClientsetOnly: false, - FakeClient: true, - PluralExceptions: []string{"Endpoints:Endpoints"}, + ClientsetName: "internalclientset", + ClientsetAPIPath: "/apis", + ClientsetOnly: false, + FakeClient: true, + PluralExceptions: []string{"Endpoints:Endpoints"}, + ApplyConfigurationPackage: "", } genericArgs.CustomArgs = customArgs genericArgs.InputDirs = DefaultInputDirs @@ -84,6 +90,7 @@ func (ca *CustomArgs) AddFlags(fs *pflag.FlagSet, inputBase string) { pflag.BoolVar(&ca.FakeClient, "fake-clientset", ca.FakeClient, "when set, client-gen will generate the fake clientset that can be used in tests") fs.StringSliceVar(&ca.PluralExceptions, "plural-exceptions", ca.PluralExceptions, "list of comma separated plural exception definitions in Type:PluralizedType form") + fs.StringVar(&ca.ApplyConfigurationPackage, "apply-configuration-package", ca.ApplyConfigurationPackage, "optional package of apply configurations, generated by applyconfiguration-gen, that are required to generate Apply functions for each type in the clientset. By default Apply functions are not generated.") // support old flags fs.SetNormalizeFunc(mapFlagName("clientset-path", "output-package", fs.GetNormalizeFunc())) diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go index 1f1c3b4c02b..5b27a1127a2 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go @@ -128,7 +128,7 @@ func DefaultNameSystem() string { return "public" } -func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, apiPath string, srcTreePath string, inputPackage string, boilerplate []byte) generator.Package { +func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, apiPath string, srcTreePath string, inputPackage string, applyBuilderPackage string, boilerplate []byte) generator.Package { groupVersionClientPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty())) return &generator.DefaultPackage{ PackageName: strings.ToLower(gv.Version.NonEmpty()), @@ -151,13 +151,15 @@ func packageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli DefaultGen: generator.DefaultGen{ OptionalName: strings.ToLower(c.Namers["private"].Name(t)), }, - outputPackage: groupVersionClientPackage, - clientsetPackage: clientsetPackage, - group: gv.Group.NonEmpty(), - version: gv.Version.String(), - groupGoName: groupGoName, - typeToMatch: t, - imports: generator.NewImportTracker(), + outputPackage: groupVersionClientPackage, + inputPackage: inputPackage, + clientsetPackage: clientsetPackage, + applyConfigurationPackage: applyBuilderPackage, + group: gv.Group.NonEmpty(), + version: gv.Version.String(), + groupGoName: groupGoName, + typeToMatch: t, + imports: generator.NewImportTracker(), }) } @@ -390,9 +392,9 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat gv := clientgentypes.GroupVersion{Group: group.Group, Version: version.Version} types := gvToTypes[gv] inputPath := gvPackages[gv] - packageList = append(packageList, packageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], customArgs.ClientsetAPIPath, arguments.OutputBase, inputPath, boilerplate)) + packageList = append(packageList, packageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], customArgs.ClientsetAPIPath, arguments.OutputBase, inputPath, customArgs.ApplyConfigurationPackage, boilerplate)) if customArgs.FakeClient { - packageList = append(packageList, fake.PackageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], inputPath, boilerplate)) + packageList = append(packageList, fake.PackageForGroup(gv, orderer.OrderTypes(types), clientsetPackage, group.PackageName, groupGoNames[gv], inputPath, customArgs.ApplyConfigurationPackage, boilerplate)) } } } diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go index 4b3854be6e1..7e11d78203f 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/fake_client_generator.go @@ -29,7 +29,7 @@ import ( clientgentypes "k8s.io/code-generator/cmd/client-gen/types" ) -func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, inputPackage string, boilerplate []byte) generator.Package { +func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, clientsetPackage string, groupPackageName string, groupGoName string, inputPackage string, applyBuilderPackage string, boilerplate []byte) generator.Package { outputPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty()), "fake") // TODO: should make this a function, called by here and in client-generator.go realClientPackage := filepath.Join(clientsetPackage, "typed", strings.ToLower(groupPackageName), strings.ToLower(gv.Version.NonEmpty())) @@ -54,13 +54,14 @@ func PackageForGroup(gv clientgentypes.GroupVersion, typeList []*types.Type, cli DefaultGen: generator.DefaultGen{ OptionalName: "fake_" + strings.ToLower(c.Namers["private"].Name(t)), }, - outputPackage: outputPackage, - inputPackage: inputPackage, - group: gv.Group.NonEmpty(), - version: gv.Version.String(), - groupGoName: groupGoName, - typeToMatch: t, - imports: generator.NewImportTracker(), + outputPackage: outputPackage, + inputPackage: inputPackage, + group: gv.Group.NonEmpty(), + version: gv.Version.String(), + groupGoName: groupGoName, + typeToMatch: t, + imports: generator.NewImportTracker(), + applyBuilderPackage: applyBuilderPackage, }) } diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go index 9efe024fca5..2ea24c1acdf 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/fake/generator_fake_for_type.go @@ -18,6 +18,7 @@ package fake import ( "io" + gopath "path" "path/filepath" "strings" @@ -32,13 +33,14 @@ import ( // genFakeForType produces a file for each top-level type. type genFakeForType struct { generator.DefaultGen - outputPackage string - group string - version string - groupGoName string - inputPackage string - typeToMatch *types.Type - imports namer.ImportTracker + outputPackage string + group string + version string + groupGoName string + inputPackage string + typeToMatch *types.Type + imports namer.ImportTracker + applyBuilderPackage string } var _ generator.Generator = &genFakeForType{} @@ -127,12 +129,15 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. "GetOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions"}), "ListOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ListOptions"}), "PatchOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "PatchOptions"}), + "ApplyOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ApplyOptions"}), "UpdateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "UpdateOptions"}), "Everything": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/labels", Name: "Everything"}), "GroupVersionResource": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersionResource"}), "GroupVersionKind": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersionKind"}), "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), + "ApplyPatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "ApplyPatchType"}), "watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}), + "jsonMarshal": c.Universe.Type(types.Name{Package: "encoding/json", Name: "Marshal"}), "NewRootListAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewRootListAction"}), "NewListAction": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "NewListAction"}), @@ -161,6 +166,13 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. "ExtractFromListOptions": c.Universe.Function(types.Name{Package: pkgClientGoTesting, Name: "ExtractFromListOptions"}), } + generateApply := len(g.applyBuilderPackage) > 0 + if generateApply { + // Generated apply builder type references required for generated Apply function + _, gvString := util.ParsePathGroupVersion(g.inputPackage) + m["applyConfig"] = types.Ref(gopath.Join(g.applyBuilderPackage, gvString), t.Name.Name+"ApplyConfiguration") + } + if tags.NonNamespaced { sw.Do(structNonNamespaced, m) } else { @@ -205,6 +217,12 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. if tags.HasVerb("patch") { sw.Do(patchTemplate, m) } + if tags.HasVerb("apply") && generateApply { + sw.Do(applyTemplate, m) + } + if tags.HasVerb("applyStatus") && generateApply && genStatus(t) { + sw.Do(applyStatusTemplate, m) + } // generate extended client methods for _, e := range tags.Extensions { @@ -273,6 +291,11 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. if e.HasVerb("patch") { sw.Do(adjustTemplate(e.VerbName, e.VerbType, patchTemplate), m) } + + if e.HasVerb("apply") && generateApply { + // TODO: Support apply on arbitrary subresource once it is supported by the api-server. + sw.Do(adjustTemplate(e.VerbName, e.VerbType, applyTemplate), m) + } } return sw.Error() @@ -480,3 +503,52 @@ func (c *Fake$.type|publicPlural$) Patch(ctx context.Context, name string, pt $. return obj.(*$.resultType|raw$), err } ` + +var applyTemplate = ` +// Apply takes the given apply declarative configuration, applies it and returns the applied $.resultType|private$. +func (c *Fake$.type|publicPlural$) Apply(ctx context.Context, $.inputType|private$ *$.applyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + obj, err := c.Fake. + $if .namespaced$Invokes($.NewPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, *name, $.ApplyPatchType|raw$, data), &$.resultType|raw${}) + $else$Invokes($.NewRootPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, *name, $.ApplyPatchType|raw$, data), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` + +var applyStatusTemplate = ` +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *Fake$.type|publicPlural$) ApplyStatus(ctx context.Context, $.inputType|private$ *$.applyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + obj, err := c.Fake. + $if .namespaced$Invokes($.NewPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, c.ns, *name, $.ApplyPatchType|raw$, data, "status"), &$.resultType|raw${}) + $else$Invokes($.NewRootPatchSubresourceAction|raw$($.type|allLowercasePlural$Resource, *name, $.ApplyPatchType|raw$, data, "status"), &$.resultType|raw${})$end$ + if obj == nil { + return nil, err + } + return obj.(*$.resultType|raw$), err +} +` diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go index 87f663342ff..37dc4a36557 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_type.go @@ -18,6 +18,7 @@ package generators import ( "io" + "path" "path/filepath" "strings" @@ -31,13 +32,15 @@ import ( // genClientForType produces a file for each top-level type. type genClientForType struct { generator.DefaultGen - outputPackage string - clientsetPackage string - group string - version string - groupGoName string - typeToMatch *types.Type - imports namer.ImportTracker + outputPackage string + inputPackage string + clientsetPackage string + applyConfigurationPackage string + group string + version string + groupGoName string + typeToMatch *types.Type + imports namer.ImportTracker } var _ generator.Generator = &genClientForType{} @@ -74,6 +77,9 @@ func genStatus(t *types.Type) bool { // GenerateType makes the body of a file implementing the individual typed client for type t. func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { + generateApply := len(g.applyConfigurationPackage) > 0 + defaultVerbTemplates := buildDefaultVerbTemplates(generateApply) + subresourceDefaultVerbTemplates := buildSubresourceDefaultVerbTemplates(generateApply) sw := generator.NewSnippetWriter(w, c, "$", "$") pkg := filepath.Base(t.Name.Package) tags, err := util.ParseClientGenTags(append(t.SecondClosestCommentLines, t.CommentLines...)) @@ -143,11 +149,20 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i "GetOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions"}), "ListOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ListOptions"}), "PatchOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "PatchOptions"}), + "ApplyOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "ApplyOptions"}), "UpdateOptions": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "UpdateOptions"}), "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), + "ApplyPatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "ApplyPatchType"}), "watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}), "RESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/client-go/rest", Name: "Interface"}), "schemeParameterCodec": c.Universe.Variable(types.Name{Package: filepath.Join(g.clientsetPackage, "scheme"), Name: "ParameterCodec"}), + "jsonMarshal": c.Universe.Type(types.Name{Package: "encoding/json", Name: "Marshal"}), + } + + if generateApply { + // Generated apply configuration type references required for generated Apply function + _, gvString := util.ParsePathGroupVersion(g.inputPackage) + m["applyConfig"] = types.Ref(path.Join(g.applyConfigurationPackage, gvString), t.Name.Name+"ApplyConfiguration") } sw.Do(getterComment, m) @@ -161,12 +176,13 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i if !tags.NoVerbs { if !genStatus(t) { tags.SkipVerbs = append(tags.SkipVerbs, "updateStatus") + tags.SkipVerbs = append(tags.SkipVerbs, "applyStatus") } interfaceSuffix := "" if len(extendedMethods) > 0 { interfaceSuffix = "\n" } - sw.Do("\n"+generateInterface(tags)+interfaceSuffix, m) + sw.Do("\n"+generateInterface(defaultVerbTemplates, tags)+interfaceSuffix, m) // add extended verbs into interface for _, v := range extendedMethods { sw.Do(v.template+interfaceSuffix, v.args) @@ -215,6 +231,13 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i if tags.HasVerb("patch") { sw.Do(patchTemplate, m) } + if tags.HasVerb("apply") && generateApply { + sw.Do(applyTemplate, m) + } + if tags.HasVerb("applyStatus") && generateApply { + sw.Do(applyStatusTemplate, m) + } + // TODO: Add subresource support once apply subresources are supported on the server side // generate expansion methods for _, e := range tags.Extensions { @@ -286,6 +309,11 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i if e.HasVerb("patch") { sw.Do(adjustTemplate(e.VerbName, e.VerbType, patchTemplate), m) } + + if e.HasVerb("apply") && generateApply { + // TODO: Support apply on arbitrary subresource once it is supported by the api-server. + sw.Do(adjustTemplate(e.VerbName, e.VerbType, applyTemplate), m) + } } return sw.Error() @@ -298,7 +326,7 @@ func adjustTemplate(name, verbType, template string) string { return strings.Replace(template, " "+strings.Title(verbType), " "+name, -1) } -func generateInterface(tags util.Tags) string { +func generateInterface(defaultVerbTemplates map[string]string, tags util.Tags) string { // need an ordered list here to guarantee order of generated methods. out := []string{} for _, m := range util.SupportedVerbs { @@ -309,23 +337,34 @@ func generateInterface(tags util.Tags) string { return strings.Join(out, "\n") } -var subresourceDefaultVerbTemplates = map[string]string{ - "create": `Create(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (*$.resultType|raw$, error)`, - "list": `List(ctx context.Context, $.type|private$Name string, opts $.ListOptions|raw$) (*$.resultType|raw$List, error)`, - "update": `Update(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (*$.resultType|raw$, error)`, - "get": `Get(ctx context.Context, $.type|private$Name string, options $.GetOptions|raw$) (*$.resultType|raw$, error)`, +func buildSubresourceDefaultVerbTemplates(generateApply bool) map[string]string { + m := map[string]string{ + "create": `Create(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (*$.resultType|raw$, error)`, + "list": `List(ctx context.Context, $.type|private$Name string, opts $.ListOptions|raw$) (*$.resultType|raw$List, error)`, + "update": `Update(ctx context.Context, $.type|private$Name string, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (*$.resultType|raw$, error)`, + "get": `Get(ctx context.Context, $.type|private$Name string, options $.GetOptions|raw$) (*$.resultType|raw$, error)`, + } + // TODO: Support apply on arbitrary subresource once it is supported by the api-server. + return m } -var defaultVerbTemplates = map[string]string{ - "create": `Create(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (*$.resultType|raw$, error)`, - "update": `Update(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (*$.resultType|raw$, error)`, - "updateStatus": `UpdateStatus(ctx context.Context, $.inputType|private$ *$.type|raw$, opts $.UpdateOptions|raw$) (*$.type|raw$, error)`, - "delete": `Delete(ctx context.Context, name string, opts $.DeleteOptions|raw$) error`, - "deleteCollection": `DeleteCollection(ctx context.Context, opts $.DeleteOptions|raw$, listOpts $.ListOptions|raw$) error`, - "get": `Get(ctx context.Context, name string, opts $.GetOptions|raw$) (*$.resultType|raw$, error)`, - "list": `List(ctx context.Context, opts $.ListOptions|raw$) (*$.resultType|raw$List, error)`, - "watch": `Watch(ctx context.Context, opts $.ListOptions|raw$) ($.watchInterface|raw$, error)`, - "patch": `Patch(ctx context.Context, name string, pt $.PatchType|raw$, data []byte, opts $.PatchOptions|raw$, subresources ...string) (result *$.resultType|raw$, err error)`, +func buildDefaultVerbTemplates(generateApply bool) map[string]string { + m := map[string]string{ + "create": `Create(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.CreateOptions|raw$) (*$.resultType|raw$, error)`, + "update": `Update(ctx context.Context, $.inputType|private$ *$.inputType|raw$, opts $.UpdateOptions|raw$) (*$.resultType|raw$, error)`, + "updateStatus": `UpdateStatus(ctx context.Context, $.inputType|private$ *$.type|raw$, opts $.UpdateOptions|raw$) (*$.type|raw$, error)`, + "delete": `Delete(ctx context.Context, name string, opts $.DeleteOptions|raw$) error`, + "deleteCollection": `DeleteCollection(ctx context.Context, opts $.DeleteOptions|raw$, listOpts $.ListOptions|raw$) error`, + "get": `Get(ctx context.Context, name string, opts $.GetOptions|raw$) (*$.resultType|raw$, error)`, + "list": `List(ctx context.Context, opts $.ListOptions|raw$) (*$.resultType|raw$List, error)`, + "watch": `Watch(ctx context.Context, opts $.ListOptions|raw$) ($.watchInterface|raw$, error)`, + "patch": `Patch(ctx context.Context, name string, pt $.PatchType|raw$, data []byte, opts $.PatchOptions|raw$, subresources ...string) (result *$.resultType|raw$, err error)`, + } + if generateApply { + m["apply"] = `Apply(ctx context.Context, $.inputType|private$ *$.applyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error)` + m["applyStatus"] = `ApplyStatus(ctx context.Context, $.inputType|private$ *$.applyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error)` + } + return m } // group client will implement this interface. @@ -608,3 +647,63 @@ func (c *$.type|privatePlural$) Patch(ctx context.Context, name string, pt $.Pat return } ` + +var applyTemplate = ` +// Apply takes the given apply declarative configuration, applies it and returns the applied $.resultType|private$. +func (c *$.type|privatePlural$) Apply(ctx context.Context, $.inputType|private$ *$.applyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + result = &$.resultType|raw${} + err = c.client.Patch($.ApplyPatchType|raw$). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(*name). + VersionedParams(&patchOpts, $.schemeParameterCodec|raw$). + Body(data). + Do(ctx). + Into(result) + return +} +` + +var applyStatusTemplate = ` +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *$.type|privatePlural$) ApplyStatus(ctx context.Context, $.inputType|private$ *$.applyConfig|raw$, opts $.ApplyOptions|raw$) (result *$.resultType|raw$, err error) { + if $.inputType|private$ == nil { + return nil, fmt.Errorf("$.inputType|private$ provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := $.jsonMarshal|raw$($.inputType|private$) + if err != nil { + return nil, err + } + + name := $.inputType|private$.Name + if name == nil { + return nil, fmt.Errorf("$.inputType|private$.Name must be provided to Apply") + } + + result = &$.resultType|raw${} + err = c.client.Patch($.ApplyPatchType|raw$). + $if .namespaced$Namespace(c.ns).$end$ + Resource("$.type|resource$"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, $.schemeParameterCodec|raw$). + Body(data). + Do(ctx). + Into(result) + return +} +` diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/openapi/zz_generated.openapi.go b/staging/src/k8s.io/code-generator/examples/apiserver/openapi/zz_generated.openapi.go index 62213cd6751..29e9a69bb32 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/openapi/zz_generated.openapi.go @@ -35,6 +35,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource": schema_pkg_apis_meta_v1_APIResource(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIResourceList": schema_pkg_apis_meta_v1_APIResourceList(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIVersions": schema_pkg_apis_meta_v1_APIVersions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ApplyOptions": schema_pkg_apis_meta_v1_ApplyOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Condition": schema_pkg_apis_meta_v1_Condition(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), @@ -433,6 +434,65 @@ func schema_pkg_apis_meta_v1_APIVersions(ref common.ReferenceCallback) common.Op } } +func schema_pkg_apis_meta_v1_ApplyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ApplyOptions may be provided when applying an API object. FieldManager is required for apply requests. ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation that speaks specifically to how the options fields relate to apply.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "force": { + SchemaProps: spec.SchemaProps{ + Description: "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people.", + Default: false, + Type: []string{"boolean"}, + Format: "", + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"force", "fieldManager"}, + }, + }, + } +} + func schema_pkg_apis_meta_v1_Condition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go b/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go index 480ee452d95..d1a59cc2c58 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go @@ -35,6 +35,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource": schema_pkg_apis_meta_v1_APIResource(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIResourceList": schema_pkg_apis_meta_v1_APIResourceList(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIVersions": schema_pkg_apis_meta_v1_APIVersions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ApplyOptions": schema_pkg_apis_meta_v1_ApplyOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Condition": schema_pkg_apis_meta_v1_Condition(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), @@ -436,6 +437,65 @@ func schema_pkg_apis_meta_v1_APIVersions(ref common.ReferenceCallback) common.Op } } +func schema_pkg_apis_meta_v1_ApplyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ApplyOptions may be provided when applying an API object. FieldManager is required for apply requests. ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation that speaks specifically to how the options fields relate to apply.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "force": { + SchemaProps: spec.SchemaProps{ + Description: "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people.", + Default: false, + Type: []string{"boolean"}, + Format: "", + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"force", "fieldManager"}, + }, + }, + } +} + func schema_pkg_apis_meta_v1_Condition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go b/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go index add3f1c8e26..017a41e6f77 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go @@ -35,6 +35,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource": schema_pkg_apis_meta_v1_APIResource(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIResourceList": schema_pkg_apis_meta_v1_APIResourceList(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.APIVersions": schema_pkg_apis_meta_v1_APIVersions(ref), + "k8s.io/apimachinery/pkg/apis/meta/v1.ApplyOptions": schema_pkg_apis_meta_v1_ApplyOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Condition": schema_pkg_apis_meta_v1_Condition(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), @@ -434,6 +435,65 @@ func schema_pkg_apis_meta_v1_APIVersions(ref common.ReferenceCallback) common.Op } } +func schema_pkg_apis_meta_v1_ApplyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ApplyOptions may be provided when applying an API object. FieldManager is required for apply requests. ApplyOptions is equivalent to PatchOptions. It is provided as a convenience with documentation that speaks specifically to how the options fields relate to apply.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "dryRun": { + SchemaProps: spec.SchemaProps{ + Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "force": { + SchemaProps: spec.SchemaProps{ + Description: "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people.", + Default: false, + Type: []string{"boolean"}, + Format: "", + }, + }, + "fieldManager": { + SchemaProps: spec.SchemaProps{ + Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"force", "fieldManager"}, + }, + }, + } +} + func schema_pkg_apis_meta_v1_Condition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{