From 3d02943681ab508d233117d2fad3c952f3700319 Mon Sep 17 00:00:00 2001 From: Ricardo Katz Date: Sat, 5 Feb 2022 00:39:20 -0300 Subject: [PATCH 1/3] Implement status subresource in NetworkPolicy --- pkg/apis/networking/types.go | 45 +++++ pkg/apis/networking/validation/validation.go | 5 + .../networking/validation/validation_test.go | 133 ++++++++++++++ pkg/features/kube_features.go | 8 + .../networkpolicy/storage/storage.go | 49 ++++- .../networkpolicy/storage/storage_test.go | 105 +++++++++-- .../networking/networkpolicy/strategy.go | 88 +++++++++ .../networking/networkpolicy/strategy_test.go | 169 ++++++++++++++++++ .../networking/rest/storage_settings.go | 3 +- .../k8s.io/api/extensions/v1beta1/types.go | 51 ++++++ staging/src/k8s.io/api/networking/v1/types.go | 51 ++++++ test/e2e/network/netpol/network_policy_api.go | 75 ++++++++ .../apiserver/apply/reset_fields_test.go | 9 + .../apiserver/apply/status_test.go | 2 + 14 files changed, 774 insertions(+), 19 deletions(-) diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index 5f87d99c53b0..766dd0383042 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -33,6 +33,11 @@ type NetworkPolicy struct { // Specification of the desired behavior for this NetworkPolicy. // +optional Spec NetworkPolicySpec + + // Status is the current state of the NetworkPolicy. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Status NetworkPolicyStatus } // PolicyType describes the NetworkPolicy type @@ -195,6 +200,46 @@ type NetworkPolicyPeer struct { IPBlock *IPBlock } +// NetworkPolicyConditionType is the type for status conditions on +// a NetworkPolicy. This type should be used with the +// NetworkPolicyStatus.Conditions field. +type NetworkPolicyConditionType string + +const ( + // NetworkPolicyConditionStatusAccepted represents status of a Network Policy that could be properly parsed by + // the Network Policy provider and will be implemented in the cluster + NetworkPolicyConditionStatusAccepted NetworkPolicyConditionType = "Accepted" + + // NetworkPolicyConditionStatusPartialFailure represents status of a Network Policy that could be partially + // parsed by the Network Policy provider and may not be completely implemented due to a lack of a feature or some + // other condition + NetworkPolicyConditionStatusPartialFailure NetworkPolicyConditionType = "PartialFailure" + + // NetworkPolicyConditionStatusFailure represents status of a Network Policy that could not be parsed by the + // Network Policy provider and will not be implemented in the cluster + NetworkPolicyConditionStatusFailure NetworkPolicyConditionType = "Failure" +) + +// NetworkPolicyConditionReason defines the set of reasons that explain why a +// particular NetworkPolicy condition type has been raised. +type NetworkPolicyConditionReason string + +const ( + // NetworkPolicyConditionReasonFeatureNotSupported represents a reason where the Network Policy may not have been + // implemented in the cluster due to a lack of some feature not supported by the Network Policy provider + NetworkPolicyConditionReasonFeatureNotSupported NetworkPolicyConditionReason = "FeatureNotSupported" + + // NetworkPolicyConditionReasonInvalidRule represents a reason where the Network Policy may not have been + // implemented in the cluster due to the specified rule being invalid + NetworkPolicyConditionReasonInvalidRule NetworkPolicyConditionReason = "InvalidRule" +) + +// NetworkPolicyStatus describe the current state of the NetworkPolicy. +type NetworkPolicyStatus struct { + // Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. + Conditions []metav1.Condition +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // NetworkPolicyList is a list of NetworkPolicy objects. diff --git a/pkg/apis/networking/validation/validation.go b/pkg/apis/networking/validation/validation.go index 078456933dba..195b080b8a84 100644 --- a/pkg/apis/networking/validation/validation.go +++ b/pkg/apis/networking/validation/validation.go @@ -182,6 +182,11 @@ func ValidateNetworkPolicyUpdate(update, old *networking.NetworkPolicy) field.Er return allErrs } +// ValidateNetworkPolicyStatusUpdate tests if an update to a NetworkPolicy status is valid +func ValidateNetworkPolicyStatusUpdate(status, oldstatus networking.NetworkPolicyStatus, fldPath *field.Path) field.ErrorList { + return unversionedvalidation.ValidateConditions(status.Conditions, fldPath.Child("conditions")) +} + // ValidateIPBlock validates a cidr and the except fields of an IpBlock NetworkPolicyPeer func ValidateIPBlock(ipb *networking.IPBlock, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} diff --git a/pkg/apis/networking/validation/validation_test.go b/pkg/apis/networking/validation/validation_test.go index ca692b9dfb34..ef3874c39272 100644 --- a/pkg/apis/networking/validation/validation_test.go +++ b/pkg/apis/networking/validation/validation_test.go @@ -20,6 +20,7 @@ import ( "fmt" "strings" "testing" + "time" apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -459,6 +460,138 @@ func TestValidateNetworkPolicyUpdate(t *testing.T) { } } +func TestValidateNetworkPolicyStatusUpdate(t *testing.T) { + + type netpolStatusCases struct { + obj networking.NetworkPolicyStatus + expectedErrs field.ErrorList + } + + testCases := map[string]netpolStatusCases{ + "valid conditions": { + obj: networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + LastTransitionTime: metav1.Time{ + Time: time.Now().Add(-5 * time.Minute), + }, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 2, + }, + { + Type: string(networking.NetworkPolicyConditionStatusFailure), + Status: metav1.ConditionFalse, + LastTransitionTime: metav1.Time{ + Time: time.Now().Add(-5 * time.Minute), + }, + Reason: "RuleApplied", + Message: "no error was found", + ObservedGeneration: 2, + }, + }, + }, + expectedErrs: field.ErrorList{}, + }, + "duplicate type": { + obj: networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + LastTransitionTime: metav1.Time{ + Time: time.Now().Add(-5 * time.Minute), + }, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 2, + }, + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionFalse, + LastTransitionTime: metav1.Time{ + Time: time.Now().Add(-5 * time.Minute), + }, + Reason: string(networking.NetworkPolicyConditionReasonInvalidRule), + Message: "endport is not supported", + ObservedGeneration: 2, + }, + }, + }, + expectedErrs: field.ErrorList{field.Duplicate(field.NewPath("status").Child("conditions").Index(1).Child("type"), + string(networking.NetworkPolicyConditionStatusAccepted))}, + }, + "invalid generation": { + obj: networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + LastTransitionTime: metav1.Time{ + Time: time.Now().Add(-5 * time.Minute), + }, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: -1, + }, + }, + }, + expectedErrs: field.ErrorList{field.Invalid(field.NewPath("status").Child("conditions").Index(0).Child("observedGeneration"), + int64(-1), "must be greater than or equal to zero")}, + }, + "invalid null transition time": { + obj: networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 3, + }, + }, + }, + expectedErrs: field.ErrorList{field.Required(field.NewPath("status").Child("conditions").Index(0).Child("lastTransitionTime"), + "must be set")}, + }, + "multiple condition errors": { + obj: networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: -1, + }, + }, + }, + expectedErrs: field.ErrorList{ + field.Invalid(field.NewPath("status").Child("conditions").Index(0).Child("observedGeneration"), + int64(-1), "must be greater than or equal to zero"), + field.Required(field.NewPath("status").Child("conditions").Index(0).Child("lastTransitionTime"), + "must be set"), + }, + }, + } + + for testName, testCase := range testCases { + errs := ValidateNetworkPolicyStatusUpdate(testCase.obj, networking.NetworkPolicyStatus{}, field.NewPath("status")) + if len(errs) != len(testCase.expectedErrs) { + t.Errorf("Test %s: Expected %d errors, got %d (%+v)", testName, len(testCase.expectedErrs), len(errs), errs) + } + + for i, err := range errs { + if err.Error() != testCase.expectedErrs[i].Error() { + t.Errorf("Test %s: Expected error: %v, got %v", testName, testCase.expectedErrs[i], err) + } + } + } + +} + func TestValidateIngress(t *testing.T) { serviceBackend := &networking.IngressServiceBackend{ Name: "defaultbackend", diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 35cba862bded..b544723664d5 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -864,6 +864,13 @@ const ( // // Enables maxUnavailable for StatefulSet MaxUnavailableStatefulSet featuregate.Feature = "MaxUnavailableStatefulSet" + + // owner: @rikatz + // kep: http://kep.k8s.io/2943 + // alpha: v1.24 + // + // Enables NetworkPolicy status subresource + NetworkPolicyStatus featuregate.Feature = "NetworkPolicyStatus" ) func init() { @@ -989,6 +996,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS ServiceIPStaticSubrange: {Default: false, PreRelease: featuregate.Alpha}, NodeOutOfServiceVolumeDetach: {Default: false, PreRelease: featuregate.Alpha}, MaxUnavailableStatefulSet: {Default: false, PreRelease: featuregate.Alpha}, + NetworkPolicyStatus: {Default: false, PreRelease: featuregate.Alpha}, // inherited features from generic apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: diff --git a/pkg/registry/networking/networkpolicy/storage/storage.go b/pkg/registry/networking/networkpolicy/storage/storage.go index 15ce38032d0f..574c08151168 100644 --- a/pkg/registry/networking/networkpolicy/storage/storage.go +++ b/pkg/registry/networking/networkpolicy/storage/storage.go @@ -17,6 +17,11 @@ limitations under the License. package storage import ( + "context" + + "sigs.k8s.io/structured-merge-diff/v4/fieldpath" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" @@ -34,24 +39,29 @@ type REST struct { } // NewREST returns a RESTStorage object that will work against NetworkPolicies. -func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, error) { +func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, error) { store := &genericregistry.Store{ NewFunc: func() runtime.Object { return &networkingapi.NetworkPolicy{} }, NewListFunc: func() runtime.Object { return &networkingapi.NetworkPolicyList{} }, DefaultQualifiedResource: networkingapi.Resource("networkpolicies"), - CreateStrategy: networkpolicy.Strategy, - UpdateStrategy: networkpolicy.Strategy, - DeleteStrategy: networkpolicy.Strategy, + CreateStrategy: networkpolicy.Strategy, + UpdateStrategy: networkpolicy.Strategy, + DeleteStrategy: networkpolicy.Strategy, + ResetFieldsStrategy: networkpolicy.Strategy, TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, } options := &generic.StoreOptions{RESTOptions: optsGetter} if err := store.CompleteWithOptions(options); err != nil { - return nil, err + return nil, nil, err } - return &REST{store}, nil + statusStore := *store + statusStore.UpdateStrategy = networkpolicy.StatusStrategy + statusStore.ResetFieldsStrategy = networkpolicy.StatusStrategy + return &REST{store}, &StatusREST{store: &statusStore}, nil + } // Implement ShortNamesProvider @@ -61,3 +71,30 @@ var _ rest.ShortNamesProvider = &REST{} func (r *REST) ShortNames() []string { return []string{"netpol"} } + +// StatusREST implements the REST endpoint for changing the status of an ingress +type StatusREST struct { + store *genericregistry.Store +} + +// New creates an instance of the StatusREST object +func (r *StatusREST) New() runtime.Object { + return &networkingapi.NetworkPolicy{} +} + +// Get retrieves the object from the storage. It is required to support Patch. +func (r *StatusREST) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { + return r.store.Get(ctx, name, options) +} + +// Update alters the status subset of an object. +func (r *StatusREST) Update(ctx context.Context, name string, objInfo rest.UpdatedObjectInfo, createValidation rest.ValidateObjectFunc, updateValidation rest.ValidateObjectUpdateFunc, forceAllowCreate bool, options *metav1.UpdateOptions) (runtime.Object, bool, error) { + // We are explicitly setting forceAllowCreate to false in the call to the underlying storage because + // subresources should never allow create on update. + return r.store.Update(ctx, name, objInfo, createValidation, updateValidation, false, options) +} + +// GetResetFields implements rest.ResetFieldsStrategy +func (r *StatusREST) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set { + return r.store.GetResetFields() +} diff --git a/pkg/registry/networking/networkpolicy/storage/storage_test.go b/pkg/registry/networking/networkpolicy/storage/storage_test.go index 611f8db89059..6787a8b024ea 100644 --- a/pkg/registry/networking/networkpolicy/storage/storage_test.go +++ b/pkg/registry/networking/networkpolicy/storage/storage_test.go @@ -17,23 +17,28 @@ limitations under the License. package storage import ( - "testing" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/generic" genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" + "k8s.io/apiserver/pkg/registry/rest" etcd3testing "k8s.io/apiserver/pkg/storage/etcd3/testing" + utilfeature "k8s.io/apiserver/pkg/util/feature" + featuregatetesting "k8s.io/component-base/featuregate/testing" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/networking" _ "k8s.io/kubernetes/pkg/apis/networking/install" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/registry/registrytest" + "testing" + "time" ) -func newStorage(t *testing.T) (*REST, *etcd3testing.EtcdTestServer) { +func newStorage(t *testing.T) (*REST, *StatusREST, *etcd3testing.EtcdTestServer) { etcdStorage, server := registrytest.NewEtcdStorage(t, networking.GroupName) restOptions := generic.RESTOptions{ StorageConfig: etcdStorage, @@ -41,11 +46,11 @@ func newStorage(t *testing.T) (*REST, *etcd3testing.EtcdTestServer) { DeleteCollectionWorkers: 1, ResourcePrefix: "networkpolicies", } - rest, err := NewREST(restOptions) + rest, status, err := NewREST(restOptions) if err != nil { t.Fatalf("unexpected error from REST storage: %v", err) } - return rest, server + return rest, status, server } func validNetworkPolicy() *networking.NetworkPolicy { @@ -70,11 +75,12 @@ func validNetworkPolicy() *networking.NetworkPolicy { }, }, }, + Status: networking.NetworkPolicyStatus{}, } } func TestCreate(t *testing.T) { - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() test := genericregistrytest.New(t, storage.Store) @@ -92,7 +98,7 @@ func TestCreate(t *testing.T) { func TestUpdate(t *testing.T) { protocolICMP := api.Protocol("ICMP") - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() test := genericregistrytest.New(t, storage.Store) @@ -135,7 +141,7 @@ func TestUpdate(t *testing.T) { } func TestDelete(t *testing.T) { - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() test := genericregistrytest.New(t, storage.Store) @@ -143,7 +149,7 @@ func TestDelete(t *testing.T) { } func TestGet(t *testing.T) { - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() test := genericregistrytest.New(t, storage.Store) @@ -151,7 +157,7 @@ func TestGet(t *testing.T) { } func TestList(t *testing.T) { - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() test := genericregistrytest.New(t, storage.Store) @@ -159,7 +165,7 @@ func TestList(t *testing.T) { } func TestWatch(t *testing.T) { - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() test := genericregistrytest.New(t, storage.Store) @@ -184,9 +190,84 @@ func TestWatch(t *testing.T) { } func TestShortNames(t *testing.T) { - storage, server := newStorage(t) + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() expected := []string{"netpol"} registrytest.AssertShortNames(t, storage, expected) } + +func TestStatusUpdate(t *testing.T) { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyStatus, true)() + storage, statusStorage, server := newStorage(t) + defer server.Terminate(t) + defer storage.Store.DestroyFunc() + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), metav1.NamespaceDefault) + key := "/networkpolicies/" + metav1.NamespaceDefault + "/foo" + validNetPolObject := validNetworkPolicy() + if err := storage.Storage.Create(ctx, key, validNetPolObject, nil, 0, false); err != nil { + t.Fatalf("unexpected error: %v", err) + } + + obj, err := storage.Get(ctx, "foo", &metav1.GetOptions{}) + if err != nil { + t.Fatalf("failed to get netpol: %v", err) + } + + obtainedNetPol := obj.(*networking.NetworkPolicy) + + transition := time.Now().Add(-5 * time.Minute) + update := networking.NetworkPolicy{ + ObjectMeta: obtainedNetPol.ObjectMeta, + Spec: obtainedNetPol.Spec, + Status: networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + LastTransitionTime: metav1.Time{ + Time: transition, + }, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 2, + }, + }, + }, + } + + if _, _, err := statusStorage.Update(ctx, update.Name, rest.DefaultUpdatedObjectInfo(&update), rest.ValidateAllObjectFunc, rest.ValidateAllObjectUpdateFunc, false, &metav1.UpdateOptions{}); err != nil { + t.Fatalf("unexpected error: %v", err) + } + obj, err = storage.Get(ctx, "foo", &metav1.GetOptions{}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + netpol := obj.(*networking.NetworkPolicy) + if len(netpol.Status.Conditions) != 1 { + t.Fatalf("we expected 1 condition to exist in status but %d occurred", len(netpol.Status.Conditions)) + } + + condition := netpol.Status.Conditions[0] + if condition.Type != string(networking.NetworkPolicyConditionStatusAccepted) { + t.Errorf("we expected condition type to be %s but %s was returned", string(networking.NetworkPolicyConditionStatusAccepted), condition.Type) + } + + if condition.Status != metav1.ConditionTrue { + t.Errorf("we expected condition status to be true, but it returned false") + } + + if condition.Reason != "RuleApplied" { + t.Errorf("we expected condition reason to be RuleApplied, but %s was returned", condition.Reason) + } + + if condition.Message != "rule was successfully applied" { + t.Errorf("we expected message to be 'rule was successfully applied', but %s was returned", condition.Message) + } + + if condition.ObservedGeneration != 2 { + t.Errorf("we expected observedGeneration to be 2, but %d was returned", condition.ObservedGeneration) + } + +} diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index 1f04bc2d9123..a0f2533623f2 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -20,6 +20,8 @@ import ( "context" "reflect" + "sigs.k8s.io/structured-merge-diff/v4/fieldpath" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/storage/names" @@ -44,9 +46,31 @@ func (networkPolicyStrategy) NamespaceScoped() bool { return true } +// GetResetFields returns the set of fields that get reset by the strategy +// and should not be modified by the user. +func (networkPolicyStrategy) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set { + fields := map[fieldpath.APIVersion]*fieldpath.Set{ + "extensions/v1beta1": fieldpath.NewSet( + fieldpath.MakePathOrDie("status"), + ), + "networking.k8s.io/v1": fieldpath.NewSet( + fieldpath.MakePathOrDie("status"), + ), + } + return fields +} + // PrepareForCreate clears the status of a NetworkPolicy before creation. func (networkPolicyStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { networkPolicy := obj.(*networking.NetworkPolicy) + + if utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) { + // Create does not set a status when operation is not directed to status subresource + // This is not feature gated, as the field is there, and we just copy it + // when the operation is over spec and not status + networkPolicy.Status = networking.NetworkPolicyStatus{} + } + networkPolicy.Generation = 1 if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) { @@ -59,6 +83,15 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt newNetworkPolicy := obj.(*networking.NetworkPolicy) oldNetworkPolicy := old.(*networking.NetworkPolicy) + // We copy the status if the FG is enabled, or if previously there was already data on the conditions field + // As soon as the FeatureGate is removed, the whole if statement should be removed as well + if utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) || len(oldNetworkPolicy.Status.Conditions) > 0 { + // Update is not allowed to set status when the operation is not directed to status subresource + // This is not feature gated, as the field is there, and we just copy it + // when the operation is over spec and not status + newNetworkPolicy.Status = oldNetworkPolicy.Status + } + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyEndPort) && !endPortInUse(oldNetworkPolicy) { dropNetworkPolicyEndPort(newNetworkPolicy) } @@ -107,6 +140,61 @@ func (networkPolicyStrategy) AllowUnconditionalUpdate() bool { return true } +type networkPolicyStatusStrategy struct { + networkPolicyStrategy +} + +// StatusStrategy implements logic used to validate and prepare for updates of the status subresource +var StatusStrategy = networkPolicyStatusStrategy{Strategy} + +// GetResetFields returns the set of fields that get reset by the strategy +// and should not be modified by the user. +func (networkPolicyStatusStrategy) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set { + fields := map[fieldpath.APIVersion]*fieldpath.Set{ + "extensions/v1beta1": fieldpath.NewSet( + fieldpath.MakePathOrDie("spec"), + ), + "networking.k8s.io/v1": fieldpath.NewSet( + fieldpath.MakePathOrDie("spec"), + ), + } + return fields +} + +// PrepareForUpdate clears fields that are not allowed to be set by end users on update of status +func (networkPolicyStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) { + newNetworkPolicy := obj.(*networking.NetworkPolicy) + oldNetworkPolicy := old.(*networking.NetworkPolicy) + // status changes are not allowed to update spec + newNetworkPolicy.Spec = oldNetworkPolicy.Spec + + if !utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) { + // As network policy status is composed only of an array of conditions, we can say that the status + // is in use if the condition array is bigger than 0. + // quoting @thockin: "we generally keep data in this case, but no updates except to clear it" + if len(newNetworkPolicy.Status.Conditions) < 1 { + newNetworkPolicy.Status = networking.NetworkPolicyStatus{} + } else { + // keep the old status in case of the update is not to clear it + newNetworkPolicy.Status = oldNetworkPolicy.Status + } + } +} + +// ValidateUpdate is the default update validation for an end user updating status +func (networkPolicyStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { + if utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) { + return validation.ValidateNetworkPolicyStatusUpdate(obj.(*networking.NetworkPolicy).Status, + old.(*networking.NetworkPolicy).Status, field.NewPath("status")) + } + return nil +} + +// WarningsOnUpdate returns warnings for the given update. +func (networkPolicyStatusStrategy) WarningsOnUpdate(ctx context.Context, obj, old runtime.Object) []string { + return nil +} + // Drops Network Policy EndPort fields if Feature Gate is also disabled. // This should be used in future Network Policy evolutions func dropNetworkPolicyEndPort(netPol *networking.NetworkPolicy) { diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go index a707dfba0c7e..18b50c74a4da 100644 --- a/pkg/registry/networking/networkpolicy/strategy_test.go +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -19,8 +19,10 @@ package networkpolicy import ( "context" "fmt" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "reflect" "testing" + "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -278,6 +280,173 @@ func TestNetworkPolicyEndPortEnablement(t *testing.T) { if err != nil { t.Errorf("Update with enabled FG failed. %v", err) } +} + +func TestNetworkPolicyStatusStrategy(t *testing.T) { + for _, tc := range []struct { + name string + enableFeatureGate bool + invalidStatus bool + }{ + { + name: "Update NetworkPolicy status with FeatureGate enabled", + enableFeatureGate: true, + invalidStatus: false, + }, + { + name: "Update NetworkPolicy status with FeatureGate disabled", + enableFeatureGate: false, + invalidStatus: false, + }, + { + name: "Update NetworkPolicy status with FeatureGate enabled and invalid status", + enableFeatureGate: true, + invalidStatus: true, + }, + { + name: "Update NetworkPolicy status with FeatureGate disabled and invalid status", + enableFeatureGate: false, + invalidStatus: true, + }, + } { + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyStatus, tc.enableFeatureGate)() + ctx := genericapirequest.NewDefaultContext() + if !StatusStrategy.NamespaceScoped() { + t.Errorf("NetworkPolicy must be namespace scoped") + } + if StatusStrategy.AllowCreateOnUpdate() { + t.Errorf("NetworkPolicy should not allow create on update") + } + + oldNetPol := makeNetworkPolicy(false, true, false) + newNetPol := makeNetworkPolicy(true, true, true) + newNetPol.Status = networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 2, + }, + }, + } + if !tc.invalidStatus { + newNetPol.Status.Conditions[0].LastTransitionTime = metav1.Time{Time: time.Now().Add(-5 * time.Minute)} + } + + StatusStrategy.PrepareForUpdate(ctx, newNetPol, oldNetPol) + if tc.enableFeatureGate { + if !reflect.DeepEqual(oldNetPol.Spec, newNetPol.Spec) { + t.Errorf("status update should not change network policy spec") + } + if len(newNetPol.Status.Conditions) != 1 { + t.Fatalf("expecting 1 condition in network policy, got %d", len(newNetPol.Status.Conditions)) + } + + if newNetPol.Status.Conditions[0].Type != string(networking.NetworkPolicyConditionStatusAccepted) { + t.Errorf("NetworkPolicy status updates should allow change of condition fields") + } + } else { + if len(newNetPol.Status.Conditions) != 0 && !tc.enableFeatureGate { + t.Fatalf("expecting 0 condition in network policy, got %d", len(newNetPol.Status.Conditions)) + } + } + + errs := StatusStrategy.ValidateUpdate(ctx, newNetPol, oldNetPol) + if tc.enableFeatureGate { + if tc.invalidStatus && len(errs) == 0 { + t.Error("invalid network policy status wasn't proper validated") + } + if !tc.invalidStatus && len(errs) > 0 { + t.Errorf("valid network policy status returned an error: %v", errs) + } + } else { + if len(errs) != 0 { + t.Errorf("Unexpected error with disabled featuregate: %v", errs) + } + } + + } +} + +// This test will verify the behavior of NetworkPolicy Status when enabling/disabling/re-enabling the feature gate +func TestNetworkPolicyStatusStrategyEnablement(t *testing.T) { + // Enable the Feature Gate during the first rule creation + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyStatus, true)() + ctx := genericapirequest.NewDefaultContext() + + oldNetPol := makeNetworkPolicy(false, true, false) + newNetPol := makeNetworkPolicy(true, true, false) + newNetPol.Status = networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + LastTransitionTime: metav1.Time{Time: time.Now().Add(-5 * time.Minute)}, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 2, + }, + }, + } + + StatusStrategy.PrepareForUpdate(ctx, newNetPol, oldNetPol) + + if !reflect.DeepEqual(oldNetPol.Spec, newNetPol.Spec) { + t.Errorf("status update should not change network policy spec") + } + + if len(newNetPol.Status.Conditions) != 1 || newNetPol.Status.Conditions[0].Status != metav1.ConditionTrue { + t.Error("expected network policy status is incorrect") + } + + // Now let's disable the Feature Gate, update some other field from NetPol and expect the Status is already present + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyStatus, false)() + + oldNetPol = newNetPol.DeepCopy() + // 1 - It should not allow to change status, and just copy between objects when FG is disabled + newNetPol.Status.Conditions[0].Status = metav1.ConditionFalse + + StatusStrategy.PrepareForUpdate(ctx, newNetPol, oldNetPol) + if len(newNetPol.Status.Conditions) != 1 { + t.Fatalf("expected conditions after disabling feature is invalid: got %d and expected 1", len(newNetPol.Status.Conditions)) + } + + if newNetPol.Status.Conditions[0].Status != metav1.ConditionTrue { + t.Error("condition status changed with feature gate disabled") + } + + oldNetPol = newNetPol.DeepCopy() + // 2 - It should clear status if it contained previous data and is disabled now + newNetPol.Status = networking.NetworkPolicyStatus{} + StatusStrategy.PrepareForUpdate(ctx, newNetPol, oldNetPol) + if len(newNetPol.Status.Conditions) != 0 { + t.Errorf("expected conditions after disabling feature and cleaning status is invalid: got %d and expected 0", len(newNetPol.Status.Conditions)) + } + + oldNetPol = newNetPol.DeepCopy() + // 3 - It should allow again to add status when re-enabling the FG + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.NetworkPolicyStatus, true)() + + newNetPol.Status = networking.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + { + Type: string(networking.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + LastTransitionTime: metav1.Time{Time: time.Now().Add(-5 * time.Minute)}, + Reason: "RuleApplied", + Message: "rule was successfully applied", + ObservedGeneration: 2, + }, + }, + } + + StatusStrategy.PrepareForUpdate(ctx, newNetPol, oldNetPol) + + if len(newNetPol.Status.Conditions) != 1 || newNetPol.Status.Conditions[0].Status != metav1.ConditionTrue { + t.Error("expected network policy status is incorrect") + } } diff --git a/pkg/registry/networking/rest/storage_settings.go b/pkg/registry/networking/rest/storage_settings.go index e287d1120dd2..cc5a915cd4f5 100644 --- a/pkg/registry/networking/rest/storage_settings.go +++ b/pkg/registry/networking/rest/storage_settings.go @@ -50,11 +50,12 @@ func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.API // networkpolicies if resource := "networkpolicies"; apiResourceConfigSource.ResourceEnabled(networkingapiv1.SchemeGroupVersion.WithResource(resource)) { - networkPolicyStorage, err := networkpolicystore.NewREST(restOptionsGetter) + networkPolicyStorage, networkPolicyStatusStorage, err := networkpolicystore.NewREST(restOptionsGetter) if err != nil { return storage, err } storage[resource] = networkPolicyStorage + storage[resource+"/status"] = networkPolicyStatusStorage } // ingresses diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 963318a2fe1f..79a4e8b6c746 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1376,6 +1376,11 @@ type NetworkPolicy struct { // Specification of the desired behavior for this NetworkPolicy. // +optional Spec NetworkPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status is the current state of the NetworkPolicy. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Status NetworkPolicyStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // DEPRECATED 1.9 - This group version of PolicyType is deprecated by networking/v1/PolicyType. @@ -1540,6 +1545,52 @@ type NetworkPolicyPeer struct { IPBlock *IPBlock `json:"ipBlock,omitempty" protobuf:"bytes,3,rep,name=ipBlock"` } +// NetworkPolicyConditionType is the type for status conditions on +// a NetworkPolicy. This type should be used with the +// NetworkPolicyStatus.Conditions field. +type NetworkPolicyConditionType string + +const ( + // NetworkPolicyConditionStatusAccepted represents status of a Network Policy that could be properly parsed by + // the Network Policy provider and will be implemented in the cluster + NetworkPolicyConditionStatusAccepted NetworkPolicyConditionType = "Accepted" + + // NetworkPolicyConditionStatusPartialFailure represents status of a Network Policy that could be partially + // parsed by the Network Policy provider and may not be completely implemented due to a lack of a feature or some + // other condition + NetworkPolicyConditionStatusPartialFailure NetworkPolicyConditionType = "PartialFailure" + + // NetworkPolicyConditionStatusFailure represents status of a Network Policy that could not be parsed by the + // Network Policy provider and will not be implemented in the cluster + NetworkPolicyConditionStatusFailure NetworkPolicyConditionType = "Failure" +) + +// NetworkPolicyConditionReason defines the set of reasons that explain why a +// particular NetworkPolicy condition type has been raised. +type NetworkPolicyConditionReason string + +const ( + // NetworkPolicyConditionReasonFeatureNotSupported represents a reason where the Network Policy may not have been + // implemented in the cluster due to a lack of some feature not supported by the Network Policy provider + NetworkPolicyConditionReasonFeatureNotSupported NetworkPolicyConditionReason = "FeatureNotSupported" + + // NetworkPolicyConditionReasonInvalidRule represents a reason where the Network Policy may not have been + // implemented in the cluster due to the specified rule being invalid + NetworkPolicyConditionReasonInvalidRule NetworkPolicyConditionReason = "InvalidRule" +) + +// NetworkPolicyStatus describe the current state of the NetworkPolicy. +type NetworkPolicyStatus struct { + // Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. + // Current service state + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:prerelease-lifecycle-gen:introduced=1.3 // +k8s:prerelease-lifecycle-gen:deprecated=1.9 diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index c49110e5cae0..736b53df7492 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -36,6 +36,11 @@ type NetworkPolicy struct { // Specification of the desired behavior for this NetworkPolicy. // +optional Spec NetworkPolicySpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status is the current state of the NetworkPolicy. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + Status NetworkPolicyStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // PolicyType string describes the NetworkPolicy type @@ -200,6 +205,52 @@ type NetworkPolicyPeer struct { IPBlock *IPBlock `json:"ipBlock,omitempty" protobuf:"bytes,3,rep,name=ipBlock"` } +// NetworkPolicyConditionType is the type for status conditions on +// a NetworkPolicy. This type should be used with the +// NetworkPolicyStatus.Conditions field. +type NetworkPolicyConditionType string + +const ( + // NetworkPolicyConditionStatusAccepted represents status of a Network Policy that could be properly parsed by + // the Network Policy provider and will be implemented in the cluster + NetworkPolicyConditionStatusAccepted NetworkPolicyConditionType = "Accepted" + + // NetworkPolicyConditionStatusPartialFailure represents status of a Network Policy that could be partially + // parsed by the Network Policy provider and may not be completely implemented due to a lack of a feature or some + // other condition + NetworkPolicyConditionStatusPartialFailure NetworkPolicyConditionType = "PartialFailure" + + // NetworkPolicyConditionStatusFailure represents status of a Network Policy that could not be parsed by the + // Network Policy provider and will not be implemented in the cluster + NetworkPolicyConditionStatusFailure NetworkPolicyConditionType = "Failure" +) + +// NetworkPolicyConditionReason defines the set of reasons that explain why a +// particular NetworkPolicy condition type has been raised. +type NetworkPolicyConditionReason string + +const ( + // NetworkPolicyConditionReasonFeatureNotSupported represents a reason where the Network Policy may not have been + // implemented in the cluster due to a lack of some feature not supported by the Network Policy provider + NetworkPolicyConditionReasonFeatureNotSupported NetworkPolicyConditionReason = "FeatureNotSupported" + + // NetworkPolicyConditionReasonInvalidRule represents a reason where the Network Policy may not have been + // implemented in the cluster due to the specified rule being invalid + NetworkPolicyConditionReasonInvalidRule NetworkPolicyConditionReason = "InvalidRule" +) + +// NetworkPolicyStatus describe the current state of the NetworkPolicy. +type NetworkPolicyStatus struct { + // Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. + // Current service state + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // NetworkPolicyList is a list of NetworkPolicy objects. diff --git a/test/e2e/network/netpol/network_policy_api.go b/test/e2e/network/netpol/network_policy_api.go index 030f7fb6a254..e3825770194d 100644 --- a/test/e2e/network/netpol/network_policy_api.go +++ b/test/e2e/network/netpol/network_policy_api.go @@ -267,4 +267,79 @@ var _ = common.SIGDescribe("Netpol API", func() { framework.ExpectNoError(err) framework.ExpectEqual(len(nps.Items), 0, "filtered list should be 0 items") }) + + /* + Release: v1.24 + Testname: NetworkPolicy support status subresource + Description: + - Status condition without a Reason cannot exist + - Status should support conditions + - Two conditions with the same type cannot exist. + */ + ginkgo.It("should support creating NetworkPolicy with Status subresource [Feature:NetworkPolicyStatus]", func() { + ns := f.Namespace.Name + npClient := f.ClientSet.NetworkingV1().NetworkPolicies(ns) + + ginkgo.By("NetworkPolicy should deny invalid status condition without Reason field") + + namespaceSelector := &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "ns-name": "pod-b", + }, + } + podSelector := &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "pod-name": "client-a", + }, + } + ingressRule := networkingv1.NetworkPolicyIngressRule{} + ingressRule.From = append(ingressRule.From, networkingv1.NetworkPolicyPeer{PodSelector: podSelector, NamespaceSelector: namespaceSelector}) + + npTemplate := GenNetworkPolicy(SetGenerateName("e2e-example-netpol-status-validate"), + SetObjectMetaLabel(map[string]string{"special-label": f.UniqueName}), + SetSpecPodSelectorMatchLabels(map[string]string{"pod-name": "test-pod"}), + SetSpecIngressRules(ingressRule)) + newNetPol, err := npClient.Create(context.TODO(), npTemplate, metav1.CreateOptions{}) + + framework.ExpectNoError(err, "request template:%v", npTemplate) + + condition := metav1.Condition{ + Type: string(networkingv1.NetworkPolicyConditionStatusAccepted), + Status: metav1.ConditionTrue, + Reason: "RuleApplied", + LastTransitionTime: metav1.Time{Time: time.Now().Add(-5 * time.Minute)}, + Message: "rule was successfully applied", + ObservedGeneration: 2, + } + + status := networkingv1.NetworkPolicyStatus{ + Conditions: []metav1.Condition{ + condition, + }, + } + + ginkgo.By("NetworkPolicy should support valid status condition") + newNetPol.Status = status + + _, err = npClient.UpdateStatus(context.TODO(), newNetPol, metav1.UpdateOptions{}) + framework.ExpectNoError(err, "request template:%v", newNetPol) + + ginkgo.By("NetworkPolicy should not support status condition without reason field") + newNetPol.Status.Conditions[0].Reason = "" + _, err = npClient.UpdateStatus(context.TODO(), newNetPol, metav1.UpdateOptions{}) + framework.ExpectError(err, "request template:%v", newNetPol) + + ginkgo.By("NetworkPolicy should not support status condition with duplicated types") + newNetPol.Status.Conditions = []metav1.Condition{condition, condition} + newNetPol.Status.Conditions[1].Status = metav1.ConditionFalse + _, err = npClient.UpdateStatus(context.TODO(), newNetPol, metav1.UpdateOptions{}) + framework.ExpectError(err, "request template:%v", newNetPol) + + ginkgo.By("deleting all test collection") + err = npClient.DeleteCollection(context.TODO(), metav1.DeleteOptions{}, metav1.ListOptions{LabelSelector: "special-label=" + f.UniqueName}) + framework.ExpectNoError(err) + nps, err := npClient.List(context.TODO(), metav1.ListOptions{LabelSelector: "special-label=" + f.UniqueName}) + framework.ExpectNoError(err) + framework.ExpectEqual(len(nps.Items), 0, "filtered list should be 0 items") + }) }) diff --git a/test/integration/apiserver/apply/reset_fields_test.go b/test/integration/apiserver/apply/reset_fields_test.go index 55afd075f014..1c1781906ac6 100644 --- a/test/integration/apiserver/apply/reset_fields_test.go +++ b/test/integration/apiserver/apply/reset_fields_test.go @@ -36,6 +36,9 @@ import ( "k8s.io/client-go/kubernetes" featuregatetesting "k8s.io/component-base/featuregate/testing" apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" + k8sfeatures "k8s.io/kubernetes/pkg/features" + + //k8sfeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/test/integration/etcd" "k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/utils/image" @@ -55,6 +58,8 @@ var resetFieldsStatusData = map[schema.GroupVersionResource]string{ gvr("extensions", "v1beta1", "ingresses"): `{"status": {"loadBalancer": {"ingress": [{"ip": "127.0.0.2"}]}}}`, gvr("networking.k8s.io", "v1beta1", "ingresses"): `{"status": {"loadBalancer": {"ingress": [{"ip": "127.0.0.2"}]}}}`, gvr("networking.k8s.io", "v1", "ingresses"): `{"status": {"loadBalancer": {"ingress": [{"ip": "127.0.0.2"}]}}}`, + gvr("extensions", "v1beta1", "networkpolicies"): `{"status": {"conditions":[{"type":"Accepted","status":"True","lastTransitionTime":"2020-01-01T00:00:00Z","reason":"RuleApplied","message":"Rule was applied"}]}}`, + gvr("networking.k8s.io", "v1", "networkpolicies"): `{"status": {"conditions":[{"type":"Accepted","status":"True","lastTransitionTime":"2020-01-01T00:00:00Z","reason":"RuleApplied","message":"Rule was applied"}]}}`, gvr("autoscaling", "v1", "horizontalpodautoscalers"): `{"status": {"currentReplicas": 25}}`, gvr("autoscaling", "v2", "horizontalpodautoscalers"): `{"status": {"currentReplicas": 25}}`, gvr("batch", "v1", "cronjobs"): `{"status": {"lastScheduleTime": "2020-01-01T00:00:00Z"}}`, @@ -128,6 +133,8 @@ var resetFieldsSpecData = map[schema.GroupVersionResource]string{ gvr("extensions", "v1beta1", "ingresses"): `{"spec": {"backend": {"serviceName": "service2"}}}`, gvr("networking.k8s.io", "v1beta1", "ingresses"): `{"spec": {"backend": {"serviceName": "service2"}}}`, gvr("networking.k8s.io", "v1", "ingresses"): `{"spec": {"defaultBackend": {"service": {"name": "service2"}}}}`, + gvr("extensions", "v1beta1", "networkpolicies"): `{"spec":{"podSelector":{"matchLabels":{"app":"web"}},"ingress":[]}}`, + gvr("networking.k8s.io", "v1", "networkpolicies"): `{"spec":{"podSelector":{"matchLabels":{"app":"web"}},"ingress":[]}}`, gvr("policy", "v1", "poddisruptionbudgets"): `{"spec": {"selector": {"matchLabels": {"anokkey2": "anokvalue"}}}}`, gvr("policy", "v1beta1", "poddisruptionbudgets"): `{"spec": {"selector": {"matchLabels": {"anokkey2": "anokvalue"}}}}`, gvr("storage.k8s.io", "v1alpha1", "volumeattachments"): `{"metadata": {"name": "vaName2"}, "spec": {"nodeName": "localhost2"}}`, @@ -148,6 +155,8 @@ var resetFieldsSpecData = map[schema.GroupVersionResource]string{ // We then attempt to apply obj2 to the spec endpoint which fails with an expected conflict. func TestApplyResetFields(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, genericfeatures.ServerSideApply, true)() + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, k8sfeatures.NetworkPolicyStatus, true)() + server, err := apiservertesting.StartTestServer(t, apiservertesting.NewDefaultTestServerOptions(), []string{"--disable-admission-plugins", "ServiceAccount,TaintNodesByCondition"}, framework.SharedEtcd()) if err != nil { t.Fatal(err) diff --git a/test/integration/apiserver/apply/status_test.go b/test/integration/apiserver/apply/status_test.go index 3695ee49f4f9..d80f224ec3b2 100644 --- a/test/integration/apiserver/apply/status_test.go +++ b/test/integration/apiserver/apply/status_test.go @@ -50,6 +50,8 @@ var statusData = map[schema.GroupVersionResource]string{ gvr("extensions", "v1beta1", "ingresses"): `{"status": {"loadBalancer": {"ingress": [{"ip": "127.0.0.1"}]}}}`, gvr("networking.k8s.io", "v1beta1", "ingresses"): `{"status": {"loadBalancer": {"ingress": [{"ip": "127.0.0.1"}]}}}`, gvr("networking.k8s.io", "v1", "ingresses"): `{"status": {"loadBalancer": {"ingress": [{"ip": "127.0.0.1"}]}}}`, + gvr("extensions", "v1beta1", "networkpolicies"): `{"status": {"conditions":[{"type":"Accepted","status":"False","lastTransitionTime":"2020-01-01T00:00:00Z","reason":"RuleApplied","message":"Rule was applied"}]}}`, + gvr("networking.k8s.io", "v1", "networkpolicies"): `{"status": {"conditions":[{"type":"Accepted","status":"False","lastTransitionTime":"2020-01-01T00:00:00Z","reason":"RuleApplied","message":"Rule was applied"}]}}`, gvr("autoscaling", "v1", "horizontalpodautoscalers"): `{"status": {"currentReplicas": 5}}`, gvr("autoscaling", "v2", "horizontalpodautoscalers"): `{"status": {"currentReplicas": 5}}`, gvr("batch", "v1", "cronjobs"): `{"status": {"lastScheduleTime": null}}`, From 941a8967833bd77ae746e7e4e982cc00b33f6ddf Mon Sep 17 00:00:00 2001 From: Ricardo Pchevuzinske Katz Date: Thu, 24 Mar 2022 23:42:24 +0000 Subject: [PATCH 2/3] add NetworkPolicyStatus generated files --- api/openapi-spec/swagger.json | 239 ++++++ .../apis__networking.k8s.io__v1_openapi.json | 313 ++++++++ .../v1beta1/zz_generated.conversion.go | 36 + .../networking/v1/zz_generated.conversion.go | 36 + pkg/apis/networking/zz_generated.deepcopy.go | 24 + pkg/generated/openapi/zz_generated.openapi.go | 98 ++- .../api/extensions/v1beta1/generated.pb.go | 740 ++++++++++++------ .../api/extensions/v1beta1/generated.proto | 17 + .../v1beta1/types_swagger_doc_generated.go | 10 + .../v1beta1/zz_generated.deepcopy.go | 24 + .../k8s.io/api/networking/v1/generated.pb.go | 425 +++++++--- .../k8s.io/api/networking/v1/generated.proto | 17 + .../v1/types_swagger_doc_generated.go | 10 + .../networking/v1/zz_generated.deepcopy.go | 24 + .../extensions.v1beta1.NetworkPolicy.json | 12 + .../HEAD/extensions.v1beta1.NetworkPolicy.pb | Bin 968 -> 1035 bytes .../extensions.v1beta1.NetworkPolicy.yaml | 8 + .../networking.k8s.io.v1.NetworkPolicy.json | 12 + .../networking.k8s.io.v1.NetworkPolicy.pb | Bin 970 -> 1037 bytes .../networking.k8s.io.v1.NetworkPolicy.yaml | 8 + ...v1beta1.NetworkPolicy.after_roundtrip.json | 153 ++++ ...s.v1beta1.NetworkPolicy.after_roundtrip.pb | Bin 0 -> 1426 bytes ...v1beta1.NetworkPolicy.after_roundtrip.yaml | 90 +++ ...s.io.v1.NetworkPolicy.after_roundtrip.json | 153 ++++ ...k8s.io.v1.NetworkPolicy.after_roundtrip.pb | Bin 0 -> 1428 bytes ...s.io.v1.NetworkPolicy.after_roundtrip.yaml | 90 +++ ...v1beta1.NetworkPolicy.after_roundtrip.json | 153 ++++ ...s.v1beta1.NetworkPolicy.after_roundtrip.pb | Bin 0 -> 1426 bytes ...v1beta1.NetworkPolicy.after_roundtrip.yaml | 90 +++ ...s.io.v1.NetworkPolicy.after_roundtrip.json | 153 ++++ ...k8s.io.v1.NetworkPolicy.after_roundtrip.pb | Bin 0 -> 1428 bytes ...s.io.v1.NetworkPolicy.after_roundtrip.yaml | 90 +++ .../extensions/v1beta1/networkpolicy.go | 11 +- .../extensions/v1beta1/networkpolicystatus.go | 48 ++ .../applyconfigurations/internal/internal.go | 30 + .../networking/v1/networkpolicy.go | 11 +- .../networking/v1/networkpolicystatus.go | 48 ++ .../client-go/applyconfigurations/utils.go | 4 + .../v1beta1/fake/fake_networkpolicy.go | 35 + .../typed/extensions/v1beta1/networkpolicy.go | 48 ++ .../networking/v1/fake/fake_networkpolicy.go | 35 + .../typed/networking/v1/networkpolicy.go | 48 ++ 42 files changed, 2985 insertions(+), 358 deletions(-) create mode 100644 staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json create mode 100644 staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.pb create mode 100644 staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml create mode 100644 staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json create mode 100644 staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.pb create mode 100644 staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml create mode 100644 staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json create mode 100644 staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.pb create mode 100644 staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml create mode 100644 staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json create mode 100644 staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.pb create mode 100644 staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicystatus.go create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicystatus.go diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 5db1977c549d..36d7c2fee84b 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -12944,6 +12944,10 @@ "spec": { "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec", "description": "Specification of the desired behavior for this NetworkPolicy." + }, + "status": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyStatus", + "description": "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status" } }, "type": "object", @@ -13101,6 +13105,25 @@ ], "type": "object" }, + "io.k8s.api.networking.v1.NetworkPolicyStatus": { + "description": "NetworkPolicyStatus describe the current state of the NetworkPolicy.", + "properties": { + "conditions": { + "description": "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state", + "items": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + } + }, + "type": "object" + }, "io.k8s.api.networking.v1.ServiceBackendPort": { "description": "ServiceBackendPort is the service port being referenced.", "properties": { @@ -73094,6 +73117,222 @@ } } }, + "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}/status": { + "get": { + "consumes": [ + "*/*" + ], + "description": "read status of the specified NetworkPolicy", + "operationId": "readNetworkingV1NamespacedNetworkPolicyStatus", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "networking_v1" + ], + "x-kubernetes-action": "get", + "x-kubernetes-group-version-kind": { + "group": "networking.k8s.io", + "kind": "NetworkPolicy", + "version": "v1" + } + }, + "parameters": [ + { + "description": "name of the NetworkPolicy", + "in": "path", + "name": "name", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "object name and auth scope, such as for teams and projects", + "in": "path", + "name": "namespace", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + } + ], + "patch": { + "consumes": [ + "application/json-patch+json", + "application/merge-patch+json", + "application/strategic-merge-patch+json", + "application/apply-patch+yaml" + ], + "description": "partially update status of the specified NetworkPolicy", + "operationId": "patchNetworkingV1NamespacedNetworkPolicyStatus", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" + } + }, + { + "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", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "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 for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).", + "in": "query", + "name": "fieldManager", + "type": "string", + "uniqueItems": true + }, + { + "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.", + "in": "query", + "name": "fieldValidation", + "type": "string", + "uniqueItems": true + }, + { + "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.", + "in": "query", + "name": "force", + "type": "boolean", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "networking_v1" + ], + "x-kubernetes-action": "patch", + "x-kubernetes-group-version-kind": { + "group": "networking.k8s.io", + "kind": "NetworkPolicy", + "version": "v1" + } + }, + "put": { + "consumes": [ + "*/*" + ], + "description": "replace status of the specified NetworkPolicy", + "operationId": "replaceNetworkingV1NamespacedNetworkPolicyStatus", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + { + "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", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "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.", + "in": "query", + "name": "fieldManager", + "type": "string", + "uniqueItems": true + }, + { + "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.", + "in": "query", + "name": "fieldValidation", + "type": "string", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "networking_v1" + ], + "x-kubernetes-action": "put", + "x-kubernetes-group-version-kind": { + "group": "networking.k8s.io", + "kind": "NetworkPolicy", + "version": "v1" + } + } + }, "/apis/networking.k8s.io/v1/networkpolicies": { "get": { "consumes": [ diff --git a/api/openapi-spec/v3/apis__networking.k8s.io__v1_openapi.json b/api/openapi-spec/v3/apis__networking.k8s.io__v1_openapi.json index e38ab1d19050..480207fde868 100644 --- a/api/openapi-spec/v3/apis__networking.k8s.io__v1_openapi.json +++ b/api/openapi-spec/v3/apis__networking.k8s.io__v1_openapi.json @@ -470,6 +470,11 @@ "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicySpec", "default": {}, "description": "Specification of the desired behavior for this NetworkPolicy." + }, + "status": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicyStatus", + "default": {}, + "description": "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status" } }, "type": "object", @@ -637,6 +642,26 @@ ], "type": "object" }, + "io.k8s.api.networking.v1.NetworkPolicyStatus": { + "description": "NetworkPolicyStatus describe the current state of the NetworkPolicy.", + "properties": { + "conditions": { + "description": "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state", + "items": { + "$ref": "#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Condition", + "default": {} + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + } + }, + "type": "object" + }, "io.k8s.api.networking.v1.ServiceBackendPort": { "description": "ServiceBackendPort is the service port being referenced.", "properties": { @@ -759,6 +784,49 @@ } ] }, + "io.k8s.apimachinery.pkg.apis.meta.v1.Condition": { + "description": "Condition contains details for one aspect of the current state of this API Resource.", + "properties": { + "lastTransitionTime": { + "$ref": "#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Time", + "default": {}, + "description": "lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable." + }, + "message": { + "default": "", + "description": "message is a human readable message indicating details about the transition. This may be an empty string.", + "type": "string" + }, + "observedGeneration": { + "description": "observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.", + "format": "int64", + "type": "integer" + }, + "reason": { + "default": "", + "description": "reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.", + "type": "string" + }, + "status": { + "default": "", + "description": "status of the condition, one of True, False, Unknown.", + "type": "string" + }, + "type": { + "default": "", + "description": "type of condition in CamelCase or in foo.example.com/CamelCase.", + "type": "string" + } + }, + "required": [ + "type", + "status", + "lastTransitionTime", + "reason", + "message" + ], + "type": "object" + }, "io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions": { "description": "DeleteOptions may be provided when deleting an API object.", "properties": { @@ -4324,6 +4392,251 @@ ] } }, + "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}/status": { + "get": { + "description": "read status of the specified NetworkPolicy", + "operationId": "readNetworkingV1NamespacedNetworkPolicyStatus", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/vnd.kubernetes.protobuf": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/yaml": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + } + }, + "description": "OK" + } + }, + "tags": [ + "networking_v1" + ] + }, + "parameters": [ + { + "description": "name of the NetworkPolicy", + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string", + "uniqueItems": true + } + }, + { + "description": "object name and auth scope, such as for teams and projects", + "in": "path", + "name": "namespace", + "required": true, + "schema": { + "type": "string", + "uniqueItems": true + } + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "schema": { + "type": "string", + "uniqueItems": true + } + } + ], + "patch": { + "description": "partially update status of the specified NetworkPolicy", + "operationId": "patchNetworkingV1NamespacedNetworkPolicyStatus", + "parameters": [ + { + "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", + "in": "query", + "name": "dryRun", + "schema": { + "type": "string", + "uniqueItems": true + } + }, + { + "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.", + "in": "query", + "name": "force", + "schema": { + "type": "boolean", + "uniqueItems": true + } + }, + { + "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 for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).", + "in": "query", + "name": "fieldManager", + "schema": { + "type": "string", + "uniqueItems": true + } + }, + { + "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.", + "in": "query", + "name": "fieldValidation", + "schema": { + "type": "string", + "uniqueItems": true + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/vnd.kubernetes.protobuf": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/yaml": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + } + }, + "description": "OK" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/vnd.kubernetes.protobuf": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/yaml": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + } + }, + "description": "Created" + } + }, + "tags": [ + "networking_v1" + ] + }, + "put": { + "description": "replace status of the specified NetworkPolicy", + "operationId": "replaceNetworkingV1NamespacedNetworkPolicyStatus", + "parameters": [ + { + "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", + "in": "query", + "name": "dryRun", + "schema": { + "type": "string", + "uniqueItems": true + } + }, + { + "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.", + "in": "query", + "name": "fieldManager", + "schema": { + "type": "string", + "uniqueItems": true + } + }, + { + "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.", + "in": "query", + "name": "fieldValidation", + "schema": { + "type": "string", + "uniqueItems": true + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/vnd.kubernetes.protobuf": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/yaml": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + } + }, + "description": "OK" + }, + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/vnd.kubernetes.protobuf": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + }, + "application/yaml": { + "schema": { + "$ref": "#/components/schemas/io.k8s.api.networking.v1.NetworkPolicy" + } + } + }, + "description": "Created" + } + }, + "tags": [ + "networking_v1" + ] + } + }, "/apis/networking.k8s.io/v1/networkpolicies": { "get": { "description": "list or watch objects of kind NetworkPolicy", diff --git a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index 9362b5821bba..2a6983b7f748 100644 --- a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -355,6 +355,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1beta1.NetworkPolicyStatus)(nil), (*networking.NetworkPolicyStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(a.(*v1beta1.NetworkPolicyStatus), b.(*networking.NetworkPolicyStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyStatus)(nil), (*v1beta1.NetworkPolicyStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyStatus_To_v1beta1_NetworkPolicyStatus(a.(*networking.NetworkPolicyStatus), b.(*v1beta1.NetworkPolicyStatus), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1beta1.PodSecurityPolicy)(nil), (*policy.PodSecurityPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_PodSecurityPolicy_To_policy_PodSecurityPolicy(a.(*v1beta1.PodSecurityPolicy), b.(*policy.PodSecurityPolicy), scope) }); err != nil { @@ -1520,6 +1530,9 @@ func autoConvert_v1beta1_NetworkPolicy_To_networking_NetworkPolicy(in *v1beta1.N if err := Convert_v1beta1_NetworkPolicySpec_To_networking_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { return err } + if err := Convert_v1beta1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(&in.Status, &out.Status, s); err != nil { + return err + } return nil } @@ -1533,6 +1546,9 @@ func autoConvert_networking_NetworkPolicy_To_v1beta1_NetworkPolicy(in *networkin if err := Convert_networking_NetworkPolicySpec_To_v1beta1_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { return err } + if err := Convert_networking_NetworkPolicyStatus_To_v1beta1_NetworkPolicyStatus(&in.Status, &out.Status, s); err != nil { + return err + } return nil } @@ -1767,6 +1783,26 @@ func autoConvert_networking_NetworkPolicySpec_To_v1beta1_NetworkPolicySpec(in *n return nil } +func autoConvert_v1beta1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(in *v1beta1.NetworkPolicyStatus, out *networking.NetworkPolicyStatus, s conversion.Scope) error { + out.Conditions = *(*[]metav1.Condition)(unsafe.Pointer(&in.Conditions)) + return nil +} + +// Convert_v1beta1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus is an autogenerated conversion function. +func Convert_v1beta1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(in *v1beta1.NetworkPolicyStatus, out *networking.NetworkPolicyStatus, s conversion.Scope) error { + return autoConvert_v1beta1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(in, out, s) +} + +func autoConvert_networking_NetworkPolicyStatus_To_v1beta1_NetworkPolicyStatus(in *networking.NetworkPolicyStatus, out *v1beta1.NetworkPolicyStatus, s conversion.Scope) error { + out.Conditions = *(*[]metav1.Condition)(unsafe.Pointer(&in.Conditions)) + return nil +} + +// Convert_networking_NetworkPolicyStatus_To_v1beta1_NetworkPolicyStatus is an autogenerated conversion function. +func Convert_networking_NetworkPolicyStatus_To_v1beta1_NetworkPolicyStatus(in *networking.NetworkPolicyStatus, out *v1beta1.NetworkPolicyStatus, s conversion.Scope) error { + return autoConvert_networking_NetworkPolicyStatus_To_v1beta1_NetworkPolicyStatus(in, out, s) +} + func autoConvert_v1beta1_PodSecurityPolicy_To_policy_PodSecurityPolicy(in *v1beta1.PodSecurityPolicy, out *policy.PodSecurityPolicy, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1beta1_PodSecurityPolicySpec_To_policy_PodSecurityPolicySpec(&in.Spec, &out.Spec, s); err != nil { diff --git a/pkg/apis/networking/v1/zz_generated.conversion.go b/pkg/apis/networking/v1/zz_generated.conversion.go index 29b4789e8512..429816285ffc 100644 --- a/pkg/apis/networking/v1/zz_generated.conversion.go +++ b/pkg/apis/networking/v1/zz_generated.conversion.go @@ -272,6 +272,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.NetworkPolicyStatus)(nil), (*networking.NetworkPolicyStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(a.(*v1.NetworkPolicyStatus), b.(*networking.NetworkPolicyStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*networking.NetworkPolicyStatus)(nil), (*v1.NetworkPolicyStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_networking_NetworkPolicyStatus_To_v1_NetworkPolicyStatus(a.(*networking.NetworkPolicyStatus), b.(*v1.NetworkPolicyStatus), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.ServiceBackendPort)(nil), (*networking.ServiceBackendPort)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_ServiceBackendPort_To_networking_ServiceBackendPort(a.(*v1.ServiceBackendPort), b.(*networking.ServiceBackendPort), scope) }); err != nil { @@ -698,6 +708,9 @@ func autoConvert_v1_NetworkPolicy_To_networking_NetworkPolicy(in *v1.NetworkPoli if err := Convert_v1_NetworkPolicySpec_To_networking_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { return err } + if err := Convert_v1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(&in.Status, &out.Status, s); err != nil { + return err + } return nil } @@ -711,6 +724,9 @@ func autoConvert_networking_NetworkPolicy_To_v1_NetworkPolicy(in *networking.Net if err := Convert_networking_NetworkPolicySpec_To_v1_NetworkPolicySpec(&in.Spec, &out.Spec, s); err != nil { return err } + if err := Convert_networking_NetworkPolicyStatus_To_v1_NetworkPolicyStatus(&in.Status, &out.Status, s); err != nil { + return err + } return nil } @@ -859,6 +875,26 @@ func Convert_networking_NetworkPolicySpec_To_v1_NetworkPolicySpec(in *networking return autoConvert_networking_NetworkPolicySpec_To_v1_NetworkPolicySpec(in, out, s) } +func autoConvert_v1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(in *v1.NetworkPolicyStatus, out *networking.NetworkPolicyStatus, s conversion.Scope) error { + out.Conditions = *(*[]metav1.Condition)(unsafe.Pointer(&in.Conditions)) + return nil +} + +// Convert_v1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus is an autogenerated conversion function. +func Convert_v1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(in *v1.NetworkPolicyStatus, out *networking.NetworkPolicyStatus, s conversion.Scope) error { + return autoConvert_v1_NetworkPolicyStatus_To_networking_NetworkPolicyStatus(in, out, s) +} + +func autoConvert_networking_NetworkPolicyStatus_To_v1_NetworkPolicyStatus(in *networking.NetworkPolicyStatus, out *v1.NetworkPolicyStatus, s conversion.Scope) error { + out.Conditions = *(*[]metav1.Condition)(unsafe.Pointer(&in.Conditions)) + return nil +} + +// Convert_networking_NetworkPolicyStatus_To_v1_NetworkPolicyStatus is an autogenerated conversion function. +func Convert_networking_NetworkPolicyStatus_To_v1_NetworkPolicyStatus(in *networking.NetworkPolicyStatus, out *v1.NetworkPolicyStatus, s conversion.Scope) error { + return autoConvert_networking_NetworkPolicyStatus_To_v1_NetworkPolicyStatus(in, out, s) +} + func autoConvert_v1_ServiceBackendPort_To_networking_ServiceBackendPort(in *v1.ServiceBackendPort, out *networking.ServiceBackendPort, s conversion.Scope) error { out.Name = in.Name out.Number = in.Number diff --git a/pkg/apis/networking/zz_generated.deepcopy.go b/pkg/apis/networking/zz_generated.deepcopy.go index 6ead9a76a8cb..34df7bcacb85 100644 --- a/pkg/apis/networking/zz_generated.deepcopy.go +++ b/pkg/apis/networking/zz_generated.deepcopy.go @@ -432,6 +432,7 @@ func (in *NetworkPolicy) DeepCopyInto(out *NetworkPolicy) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) return } @@ -644,6 +645,29 @@ func (in *NetworkPolicySpec) DeepCopy() *NetworkPolicySpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkPolicyStatus) DeepCopyInto(out *NetworkPolicyStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPolicyStatus. +func (in *NetworkPolicyStatus) DeepCopy() *NetworkPolicyStatus { + if in == nil { + return nil + } + out := new(NetworkPolicyStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceBackendPort) DeepCopyInto(out *ServiceBackendPort) { *out = *in diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 267fae80e2b7..1f183e73e9fa 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -568,6 +568,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer": schema_k8sio_api_extensions_v1beta1_NetworkPolicyPeer(ref), "k8s.io/api/extensions/v1beta1.NetworkPolicyPort": schema_k8sio_api_extensions_v1beta1_NetworkPolicyPort(ref), "k8s.io/api/extensions/v1beta1.NetworkPolicySpec": schema_k8sio_api_extensions_v1beta1_NetworkPolicySpec(ref), + "k8s.io/api/extensions/v1beta1.NetworkPolicyStatus": schema_k8sio_api_extensions_v1beta1_NetworkPolicyStatus(ref), "k8s.io/api/extensions/v1beta1.PodSecurityPolicy": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicy(ref), "k8s.io/api/extensions/v1beta1.PodSecurityPolicyList": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicyList(ref), "k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicySpec(ref), @@ -680,6 +681,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/networking/v1.NetworkPolicyPeer": schema_k8sio_api_networking_v1_NetworkPolicyPeer(ref), "k8s.io/api/networking/v1.NetworkPolicyPort": schema_k8sio_api_networking_v1_NetworkPolicyPort(ref), "k8s.io/api/networking/v1.NetworkPolicySpec": schema_k8sio_api_networking_v1_NetworkPolicySpec(ref), + "k8s.io/api/networking/v1.NetworkPolicyStatus": schema_k8sio_api_networking_v1_NetworkPolicyStatus(ref), "k8s.io/api/networking/v1.ServiceBackendPort": schema_k8sio_api_networking_v1_ServiceBackendPort(ref), "k8s.io/api/networking/v1beta1.HTTPIngressPath": schema_k8sio_api_networking_v1beta1_HTTPIngressPath(ref), "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue": schema_k8sio_api_networking_v1beta1_HTTPIngressRuleValue(ref), @@ -28627,11 +28629,18 @@ func schema_k8sio_api_extensions_v1beta1_NetworkPolicy(ref common.ReferenceCallb Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicySpec"), }, }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyStatus"), + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.NetworkPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + "k8s.io/api/extensions/v1beta1.NetworkPolicySpec", "k8s.io/api/extensions/v1beta1.NetworkPolicyStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, } } @@ -28906,6 +28915,45 @@ func schema_k8sio_api_extensions_v1beta1_NetworkPolicySpec(ref common.ReferenceC } } +func schema_k8sio_api_extensions_v1beta1_NetworkPolicyStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyStatus describe the current state of the NetworkPolicy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -33680,11 +33728,18 @@ func schema_k8sio_api_networking_v1_NetworkPolicy(ref common.ReferenceCallback) Ref: ref("k8s.io/api/networking/v1.NetworkPolicySpec"), }, }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/networking/v1.NetworkPolicyStatus"), + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/api/networking/v1.NetworkPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + "k8s.io/api/networking/v1.NetworkPolicySpec", "k8s.io/api/networking/v1.NetworkPolicyStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, } } @@ -33959,6 +34014,45 @@ func schema_k8sio_api_networking_v1_NetworkPolicySpec(ref common.ReferenceCallba } } +func schema_k8sio_api_networking_v1_NetworkPolicyStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NetworkPolicyStatus describe the current state of the NetworkPolicy.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + func schema_k8sio_api_networking_v1_ServiceBackendPort(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go b/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go index 35b4b5f0c0bc..db6b56bb26d9 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -1085,10 +1085,38 @@ func (m *NetworkPolicySpec) XXX_DiscardUnknown() { var xxx_messageInfo_NetworkPolicySpec proto.InternalMessageInfo +func (m *NetworkPolicyStatus) Reset() { *m = NetworkPolicyStatus{} } +func (*NetworkPolicyStatus) ProtoMessage() {} +func (*NetworkPolicyStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_cdc93917efc28165, []int{37} +} +func (m *NetworkPolicyStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyStatus) 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 *NetworkPolicyStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyStatus.Merge(m, src) +} +func (m *NetworkPolicyStatus) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyStatus) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyStatus proto.InternalMessageInfo + func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } func (*PodSecurityPolicy) ProtoMessage() {} func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{37} + return fileDescriptor_cdc93917efc28165, []int{38} } func (m *PodSecurityPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1116,7 +1144,7 @@ var xxx_messageInfo_PodSecurityPolicy proto.InternalMessageInfo func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } func (*PodSecurityPolicyList) ProtoMessage() {} func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{38} + return fileDescriptor_cdc93917efc28165, []int{39} } func (m *PodSecurityPolicyList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1144,7 +1172,7 @@ var xxx_messageInfo_PodSecurityPolicyList proto.InternalMessageInfo func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } func (*PodSecurityPolicySpec) ProtoMessage() {} func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{39} + return fileDescriptor_cdc93917efc28165, []int{40} } func (m *PodSecurityPolicySpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1172,7 +1200,7 @@ var xxx_messageInfo_PodSecurityPolicySpec proto.InternalMessageInfo func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } func (*ReplicaSet) ProtoMessage() {} func (*ReplicaSet) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{40} + return fileDescriptor_cdc93917efc28165, []int{41} } func (m *ReplicaSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1200,7 +1228,7 @@ var xxx_messageInfo_ReplicaSet proto.InternalMessageInfo func (m *ReplicaSetCondition) Reset() { *m = ReplicaSetCondition{} } func (*ReplicaSetCondition) ProtoMessage() {} func (*ReplicaSetCondition) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{41} + return fileDescriptor_cdc93917efc28165, []int{42} } func (m *ReplicaSetCondition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1228,7 +1256,7 @@ var xxx_messageInfo_ReplicaSetCondition proto.InternalMessageInfo func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } func (*ReplicaSetList) ProtoMessage() {} func (*ReplicaSetList) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{42} + return fileDescriptor_cdc93917efc28165, []int{43} } func (m *ReplicaSetList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1256,7 +1284,7 @@ var xxx_messageInfo_ReplicaSetList proto.InternalMessageInfo func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } func (*ReplicaSetSpec) ProtoMessage() {} func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{43} + return fileDescriptor_cdc93917efc28165, []int{44} } func (m *ReplicaSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1284,7 +1312,7 @@ var xxx_messageInfo_ReplicaSetSpec proto.InternalMessageInfo func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } func (*ReplicaSetStatus) ProtoMessage() {} func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{44} + return fileDescriptor_cdc93917efc28165, []int{45} } func (m *ReplicaSetStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1312,7 +1340,7 @@ var xxx_messageInfo_ReplicaSetStatus proto.InternalMessageInfo func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } func (*RollbackConfig) ProtoMessage() {} func (*RollbackConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{45} + return fileDescriptor_cdc93917efc28165, []int{46} } func (m *RollbackConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1340,7 +1368,7 @@ var xxx_messageInfo_RollbackConfig proto.InternalMessageInfo func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } func (*RollingUpdateDaemonSet) ProtoMessage() {} func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{46} + return fileDescriptor_cdc93917efc28165, []int{47} } func (m *RollingUpdateDaemonSet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1368,7 +1396,7 @@ var xxx_messageInfo_RollingUpdateDaemonSet proto.InternalMessageInfo func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } func (*RollingUpdateDeployment) ProtoMessage() {} func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{47} + return fileDescriptor_cdc93917efc28165, []int{48} } func (m *RollingUpdateDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1396,7 +1424,7 @@ var xxx_messageInfo_RollingUpdateDeployment proto.InternalMessageInfo func (m *RunAsGroupStrategyOptions) Reset() { *m = RunAsGroupStrategyOptions{} } func (*RunAsGroupStrategyOptions) ProtoMessage() {} func (*RunAsGroupStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{48} + return fileDescriptor_cdc93917efc28165, []int{49} } func (m *RunAsGroupStrategyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1424,7 +1452,7 @@ var xxx_messageInfo_RunAsGroupStrategyOptions proto.InternalMessageInfo func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } func (*RunAsUserStrategyOptions) ProtoMessage() {} func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{49} + return fileDescriptor_cdc93917efc28165, []int{50} } func (m *RunAsUserStrategyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1452,7 +1480,7 @@ var xxx_messageInfo_RunAsUserStrategyOptions proto.InternalMessageInfo func (m *RuntimeClassStrategyOptions) Reset() { *m = RuntimeClassStrategyOptions{} } func (*RuntimeClassStrategyOptions) ProtoMessage() {} func (*RuntimeClassStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{50} + return fileDescriptor_cdc93917efc28165, []int{51} } func (m *RuntimeClassStrategyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1480,7 +1508,7 @@ var xxx_messageInfo_RuntimeClassStrategyOptions proto.InternalMessageInfo func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } func (*SELinuxStrategyOptions) ProtoMessage() {} func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{51} + return fileDescriptor_cdc93917efc28165, []int{52} } func (m *SELinuxStrategyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1508,7 +1536,7 @@ var xxx_messageInfo_SELinuxStrategyOptions proto.InternalMessageInfo func (m *Scale) Reset() { *m = Scale{} } func (*Scale) ProtoMessage() {} func (*Scale) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{52} + return fileDescriptor_cdc93917efc28165, []int{53} } func (m *Scale) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1536,7 +1564,7 @@ var xxx_messageInfo_Scale proto.InternalMessageInfo func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } func (*ScaleSpec) ProtoMessage() {} func (*ScaleSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{53} + return fileDescriptor_cdc93917efc28165, []int{54} } func (m *ScaleSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1564,7 +1592,7 @@ var xxx_messageInfo_ScaleSpec proto.InternalMessageInfo func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } func (*ScaleStatus) ProtoMessage() {} func (*ScaleStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{54} + return fileDescriptor_cdc93917efc28165, []int{55} } func (m *ScaleStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1592,7 +1620,7 @@ var xxx_messageInfo_ScaleStatus proto.InternalMessageInfo func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cdc93917efc28165, []int{55} + return fileDescriptor_cdc93917efc28165, []int{56} } func (m *SupplementalGroupsStrategyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1656,6 +1684,7 @@ func init() { proto.RegisterType((*NetworkPolicyPeer)(nil), "k8s.io.api.extensions.v1beta1.NetworkPolicyPeer") proto.RegisterType((*NetworkPolicyPort)(nil), "k8s.io.api.extensions.v1beta1.NetworkPolicyPort") proto.RegisterType((*NetworkPolicySpec)(nil), "k8s.io.api.extensions.v1beta1.NetworkPolicySpec") + proto.RegisterType((*NetworkPolicyStatus)(nil), "k8s.io.api.extensions.v1beta1.NetworkPolicyStatus") proto.RegisterType((*PodSecurityPolicy)(nil), "k8s.io.api.extensions.v1beta1.PodSecurityPolicy") proto.RegisterType((*PodSecurityPolicyList)(nil), "k8s.io.api.extensions.v1beta1.PodSecurityPolicyList") proto.RegisterType((*PodSecurityPolicySpec)(nil), "k8s.io.api.extensions.v1beta1.PodSecurityPolicySpec") @@ -1683,243 +1712,245 @@ func init() { } var fileDescriptor_cdc93917efc28165 = []byte{ - // 3763 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4f, 0x6c, 0x1b, 0x47, - 0x77, 0xf7, 0x92, 0x94, 0x48, 0x3d, 0xfd, 0x1f, 0xc9, 0x12, 0x3f, 0xfb, 0xb3, 0xe8, 0x6f, 0x83, - 0xba, 0x4e, 0xea, 0x90, 0xb1, 0x63, 0xfb, 0x73, 0x6d, 0xf4, 0x4b, 0x44, 0xc9, 0xb2, 0x95, 0xea, - 0x0f, 0x33, 0x94, 0x9c, 0x20, 0x68, 0xd2, 0xac, 0xc8, 0x11, 0xb5, 0xd6, 0x72, 0x77, 0xb3, 0xb3, - 0x54, 0x44, 0xa0, 0x87, 0x1e, 0x7a, 0x09, 0x50, 0xa0, 0xbd, 0xa4, 0xed, 0xb1, 0x41, 0x81, 0xde, - 0x8a, 0x1e, 0xdb, 0x43, 0x10, 0xb4, 0x68, 0x0a, 0x18, 0x45, 0x5a, 0x04, 0xe8, 0xa1, 0x39, 0x09, - 0x8d, 0x72, 0x2a, 0x7a, 0xea, 0xad, 0xf0, 0xa9, 0x98, 0xd9, 0xd9, 0xff, 0xbb, 0xe2, 0x4a, 0xb1, - 0x85, 0xa6, 0xe8, 0xc9, 0xe6, 0xbc, 0xf7, 0x7e, 0xef, 0xcd, 0xcc, 0x9b, 0xf7, 0xde, 0xcc, 0x3e, - 0xc1, 0xca, 0xfe, 0x3d, 0x5a, 0x55, 0x8d, 0xda, 0x7e, 0x6f, 0x87, 0x58, 0x3a, 0xb1, 0x09, 0xad, - 0x1d, 0x10, 0xbd, 0x6d, 0x58, 0x35, 0x41, 0x50, 0x4c, 0xb5, 0x46, 0x0e, 0x6d, 0xa2, 0x53, 0xd5, - 0xd0, 0x69, 0xed, 0xe0, 0xe6, 0x0e, 0xb1, 0x95, 0x9b, 0xb5, 0x0e, 0xd1, 0x89, 0xa5, 0xd8, 0xa4, - 0x5d, 0x35, 0x2d, 0xc3, 0x36, 0xd0, 0x15, 0x87, 0xbd, 0xaa, 0x98, 0x6a, 0xd5, 0x67, 0xaf, 0x0a, - 0xf6, 0x4b, 0xaf, 0x77, 0x54, 0x7b, 0xaf, 0xb7, 0x53, 0x6d, 0x19, 0xdd, 0x5a, 0xc7, 0xe8, 0x18, - 0x35, 0x2e, 0xb5, 0xd3, 0xdb, 0xe5, 0xbf, 0xf8, 0x0f, 0xfe, 0x3f, 0x07, 0xed, 0x92, 0x1c, 0x50, - 0xde, 0x32, 0x2c, 0x52, 0x3b, 0x88, 0x69, 0xbc, 0x74, 0xdb, 0xe7, 0xe9, 0x2a, 0xad, 0x3d, 0x55, - 0x27, 0x56, 0xbf, 0x66, 0xee, 0x77, 0xd8, 0x00, 0xad, 0x75, 0x89, 0xad, 0x24, 0x49, 0xd5, 0xd2, - 0xa4, 0xac, 0x9e, 0x6e, 0xab, 0x5d, 0x12, 0x13, 0xb8, 0x3b, 0x48, 0x80, 0xb6, 0xf6, 0x48, 0x57, - 0x89, 0xc9, 0xbd, 0x99, 0x26, 0xd7, 0xb3, 0x55, 0xad, 0xa6, 0xea, 0x36, 0xb5, 0xad, 0xa8, 0x90, - 0x7c, 0x1b, 0xa6, 0x16, 0x35, 0xcd, 0xf8, 0x94, 0xb4, 0x97, 0x9a, 0xab, 0xcb, 0x96, 0x7a, 0x40, - 0x2c, 0x74, 0x15, 0x0a, 0xba, 0xd2, 0x25, 0x65, 0xe9, 0xaa, 0x74, 0x7d, 0xa4, 0x3e, 0xf6, 0xec, - 0xa8, 0x72, 0xe1, 0xf8, 0xa8, 0x52, 0xd8, 0x50, 0xba, 0x04, 0x73, 0x8a, 0xfc, 0x00, 0xa6, 0x85, - 0xd4, 0x8a, 0x46, 0x0e, 0x9f, 0x18, 0x5a, 0xaf, 0x4b, 0xd0, 0x35, 0x18, 0x6e, 0x73, 0x00, 0x21, - 0x38, 0x21, 0x04, 0x87, 0x1d, 0x58, 0x2c, 0xa8, 0x32, 0x85, 0x49, 0x21, 0xfc, 0xd8, 0xa0, 0x76, - 0x43, 0xb1, 0xf7, 0xd0, 0x2d, 0x00, 0x53, 0xb1, 0xf7, 0x1a, 0x16, 0xd9, 0x55, 0x0f, 0x85, 0x38, - 0x12, 0xe2, 0xd0, 0xf0, 0x28, 0x38, 0xc0, 0x85, 0x6e, 0x40, 0xc9, 0x22, 0x4a, 0x7b, 0x53, 0xd7, - 0xfa, 0xe5, 0xdc, 0x55, 0xe9, 0x7a, 0xa9, 0x3e, 0x25, 0x24, 0x4a, 0x58, 0x8c, 0x63, 0x8f, 0x43, - 0xfe, 0x3c, 0x07, 0x23, 0xcb, 0x0a, 0xe9, 0x1a, 0x7a, 0x93, 0xd8, 0xe8, 0x63, 0x28, 0xb1, 0xed, - 0x6a, 0x2b, 0xb6, 0xc2, 0xb5, 0x8d, 0xde, 0x7a, 0xa3, 0xea, 0xbb, 0x93, 0xb7, 0x7a, 0x55, 0x73, - 0xbf, 0xc3, 0x06, 0x68, 0x95, 0x71, 0x57, 0x0f, 0x6e, 0x56, 0x37, 0x77, 0x9e, 0x92, 0x96, 0xbd, - 0x4e, 0x6c, 0xc5, 0xb7, 0xcf, 0x1f, 0xc3, 0x1e, 0x2a, 0xda, 0x80, 0x02, 0x35, 0x49, 0x8b, 0x5b, - 0x36, 0x7a, 0xeb, 0x46, 0xf5, 0x44, 0x67, 0xad, 0x7a, 0x96, 0x35, 0x4d, 0xd2, 0xf2, 0x57, 0x9c, - 0xfd, 0xc2, 0x1c, 0x07, 0x3d, 0x81, 0x61, 0x6a, 0x2b, 0x76, 0x8f, 0x96, 0xf3, 0x1c, 0xb1, 0x9a, - 0x19, 0x91, 0x4b, 0xf9, 0x9b, 0xe1, 0xfc, 0xc6, 0x02, 0x4d, 0xfe, 0x8f, 0x1c, 0x20, 0x8f, 0x77, - 0xc9, 0xd0, 0xdb, 0xaa, 0xad, 0x1a, 0x3a, 0xba, 0x0f, 0x05, 0xbb, 0x6f, 0xba, 0x2e, 0x70, 0xcd, - 0x35, 0x68, 0xab, 0x6f, 0x92, 0xe7, 0x47, 0x95, 0xb9, 0xb8, 0x04, 0xa3, 0x60, 0x2e, 0x83, 0xd6, - 0x3c, 0x53, 0x73, 0x5c, 0xfa, 0x76, 0x58, 0xf5, 0xf3, 0xa3, 0x4a, 0xc2, 0x61, 0xab, 0x7a, 0x48, - 0x61, 0x03, 0xd1, 0x01, 0x20, 0x4d, 0xa1, 0xf6, 0x96, 0xa5, 0xe8, 0xd4, 0xd1, 0xa4, 0x76, 0x89, - 0x58, 0x84, 0xd7, 0xb2, 0x6d, 0x1a, 0x93, 0xa8, 0x5f, 0x12, 0x56, 0xa0, 0xb5, 0x18, 0x1a, 0x4e, - 0xd0, 0xc0, 0xbc, 0xd9, 0x22, 0x0a, 0x35, 0xf4, 0x72, 0x21, 0xec, 0xcd, 0x98, 0x8f, 0x62, 0x41, - 0x45, 0xaf, 0x42, 0xb1, 0x4b, 0x28, 0x55, 0x3a, 0xa4, 0x3c, 0xc4, 0x19, 0x27, 0x05, 0x63, 0x71, - 0xdd, 0x19, 0xc6, 0x2e, 0x5d, 0xfe, 0x52, 0x82, 0x71, 0x6f, 0xe5, 0xd6, 0x54, 0x6a, 0xa3, 0xdf, - 0x89, 0xf9, 0x61, 0x35, 0xdb, 0x94, 0x98, 0x34, 0xf7, 0x42, 0xcf, 0xe7, 0xdd, 0x91, 0x80, 0x0f, - 0xae, 0xc3, 0x90, 0x6a, 0x93, 0x2e, 0xdb, 0x87, 0xfc, 0xf5, 0xd1, 0x5b, 0xd7, 0xb3, 0xba, 0x4c, - 0x7d, 0x5c, 0x80, 0x0e, 0xad, 0x32, 0x71, 0xec, 0xa0, 0xc8, 0x7f, 0x52, 0x08, 0x98, 0xcf, 0x5c, - 0x13, 0x7d, 0x08, 0x25, 0x4a, 0x34, 0xd2, 0xb2, 0x0d, 0x4b, 0x98, 0xff, 0x66, 0x46, 0xf3, 0x95, - 0x1d, 0xa2, 0x35, 0x85, 0x68, 0x7d, 0x8c, 0xd9, 0xef, 0xfe, 0xc2, 0x1e, 0x24, 0x7a, 0x17, 0x4a, - 0x36, 0xe9, 0x9a, 0x9a, 0x62, 0x13, 0x71, 0x8e, 0x5e, 0x09, 0x4e, 0x81, 0x79, 0x0e, 0x03, 0x6b, - 0x18, 0xed, 0x2d, 0xc1, 0xc6, 0x8f, 0x8f, 0xb7, 0x24, 0xee, 0x28, 0xf6, 0x60, 0xd0, 0x01, 0x4c, - 0xf4, 0xcc, 0x36, 0xe3, 0xb4, 0x59, 0x14, 0xec, 0xf4, 0x85, 0x27, 0xdd, 0xcd, 0xba, 0x36, 0xdb, - 0x21, 0xe9, 0xfa, 0x9c, 0xd0, 0x35, 0x11, 0x1e, 0xc7, 0x11, 0x2d, 0x68, 0x11, 0x26, 0xbb, 0xaa, - 0xce, 0xe2, 0x52, 0xbf, 0x49, 0x5a, 0x86, 0xde, 0xa6, 0xdc, 0xad, 0x86, 0xea, 0xf3, 0x02, 0x60, - 0x72, 0x3d, 0x4c, 0xc6, 0x51, 0x7e, 0xf4, 0x0e, 0x20, 0x77, 0x1a, 0x8f, 0x9c, 0x20, 0xae, 0x1a, - 0x3a, 0xf7, 0xb9, 0xbc, 0xef, 0xdc, 0x5b, 0x31, 0x0e, 0x9c, 0x20, 0x85, 0xd6, 0x60, 0xd6, 0x22, - 0x07, 0x2a, 0x9b, 0xe3, 0x63, 0x95, 0xda, 0x86, 0xd5, 0x5f, 0x53, 0xbb, 0xaa, 0x5d, 0x1e, 0xe6, - 0x36, 0x95, 0x8f, 0x8f, 0x2a, 0xb3, 0x38, 0x81, 0x8e, 0x13, 0xa5, 0xe4, 0x3f, 0x1d, 0x86, 0xc9, - 0x48, 0xbc, 0x41, 0x4f, 0x60, 0xae, 0xd5, 0xb3, 0x2c, 0xa2, 0xdb, 0x1b, 0xbd, 0xee, 0x0e, 0xb1, - 0x9a, 0xad, 0x3d, 0xd2, 0xee, 0x69, 0xa4, 0xcd, 0x1d, 0x65, 0xa8, 0xbe, 0x20, 0x2c, 0x9e, 0x5b, - 0x4a, 0xe4, 0xc2, 0x29, 0xd2, 0x6c, 0x15, 0x74, 0x3e, 0xb4, 0xae, 0x52, 0xea, 0x61, 0xe6, 0x38, - 0xa6, 0xb7, 0x0a, 0x1b, 0x31, 0x0e, 0x9c, 0x20, 0xc5, 0x6c, 0x6c, 0x13, 0xaa, 0x5a, 0xa4, 0x1d, - 0xb5, 0x31, 0x1f, 0xb6, 0x71, 0x39, 0x91, 0x0b, 0xa7, 0x48, 0xa3, 0x3b, 0x30, 0xea, 0x68, 0xe3, - 0xfb, 0x27, 0x36, 0x7a, 0x46, 0x80, 0x8d, 0x6e, 0xf8, 0x24, 0x1c, 0xe4, 0x63, 0x53, 0x33, 0x76, - 0x28, 0xb1, 0x0e, 0x48, 0x3b, 0x7d, 0x83, 0x37, 0x63, 0x1c, 0x38, 0x41, 0x8a, 0x4d, 0xcd, 0xf1, - 0xc0, 0xd8, 0xd4, 0x86, 0xc3, 0x53, 0xdb, 0x4e, 0xe4, 0xc2, 0x29, 0xd2, 0xcc, 0x8f, 0x1d, 0x93, - 0x17, 0x0f, 0x14, 0x55, 0x53, 0x76, 0x34, 0x52, 0x2e, 0x86, 0xfd, 0x78, 0x23, 0x4c, 0xc6, 0x51, - 0x7e, 0xf4, 0x08, 0xa6, 0x9d, 0xa1, 0x6d, 0x5d, 0xf1, 0x40, 0x4a, 0x1c, 0xe4, 0x67, 0x02, 0x64, - 0x7a, 0x23, 0xca, 0x80, 0xe3, 0x32, 0xe8, 0x3e, 0x4c, 0xb4, 0x0c, 0x4d, 0xe3, 0xfe, 0xb8, 0x64, - 0xf4, 0x74, 0xbb, 0x3c, 0xc2, 0x51, 0x10, 0x3b, 0x8f, 0x4b, 0x21, 0x0a, 0x8e, 0x70, 0x22, 0x02, - 0xd0, 0x72, 0x13, 0x0e, 0x2d, 0x03, 0x8f, 0x8f, 0x37, 0xb3, 0xc6, 0x00, 0x2f, 0x55, 0xf9, 0x35, - 0x80, 0x37, 0x44, 0x71, 0x00, 0x58, 0xfe, 0x27, 0x09, 0xe6, 0x53, 0x42, 0x07, 0x7a, 0x2b, 0x94, - 0x62, 0x7f, 0x23, 0x92, 0x62, 0x2f, 0xa7, 0x88, 0x05, 0xf2, 0xac, 0x0e, 0xe3, 0x16, 0x9b, 0x95, - 0xde, 0x71, 0x58, 0x44, 0x8c, 0xbc, 0x33, 0x60, 0x1a, 0x38, 0x28, 0xe3, 0xc7, 0xfc, 0xe9, 0xe3, - 0xa3, 0xca, 0x78, 0x88, 0x86, 0xc3, 0xf0, 0xf2, 0x9f, 0xe5, 0x00, 0x96, 0x89, 0xa9, 0x19, 0xfd, - 0x2e, 0xd1, 0xcf, 0xa3, 0x86, 0xda, 0x0c, 0xd5, 0x50, 0xaf, 0x0f, 0xda, 0x1e, 0xcf, 0xb4, 0xd4, - 0x22, 0xea, 0xbd, 0x48, 0x11, 0x55, 0xcb, 0x0e, 0x79, 0x72, 0x15, 0xf5, 0x6f, 0x79, 0x98, 0xf1, - 0x99, 0xfd, 0x32, 0xea, 0x41, 0x68, 0x8f, 0x7f, 0x3d, 0xb2, 0xc7, 0xf3, 0x09, 0x22, 0x2f, 0xad, - 0x8e, 0x7a, 0x0a, 0x13, 0xac, 0xca, 0x71, 0xf6, 0x92, 0xd7, 0x50, 0xc3, 0xa7, 0xae, 0xa1, 0xbc, - 0x6c, 0xb7, 0x16, 0x42, 0xc2, 0x11, 0xe4, 0x94, 0x9a, 0xad, 0xf8, 0x53, 0xac, 0xd9, 0xbe, 0x92, - 0x60, 0xc2, 0xdf, 0xa6, 0x73, 0x28, 0xda, 0x36, 0xc2, 0x45, 0xdb, 0xab, 0x99, 0x5d, 0x34, 0xa5, - 0x6a, 0xfb, 0x6f, 0x56, 0xe0, 0x7b, 0x4c, 0xec, 0x80, 0xef, 0x28, 0xad, 0xfd, 0xc1, 0x77, 0x3c, - 0xf4, 0xb9, 0x04, 0x48, 0x64, 0x81, 0x45, 0x5d, 0x37, 0x6c, 0xc5, 0x89, 0x95, 0x8e, 0x59, 0xab, - 0x99, 0xcd, 0x72, 0x35, 0x56, 0xb7, 0x63, 0x58, 0x0f, 0x75, 0xdb, 0xea, 0xfb, 0x9b, 0x1c, 0x67, - 0xc0, 0x09, 0x06, 0x20, 0x05, 0xc0, 0x12, 0x98, 0x5b, 0x86, 0x38, 0xc8, 0xaf, 0x67, 0x88, 0x79, - 0x4c, 0x60, 0xc9, 0xd0, 0x77, 0xd5, 0x8e, 0x1f, 0x76, 0xb0, 0x07, 0x84, 0x03, 0xa0, 0x97, 0x1e, - 0xc2, 0x7c, 0x8a, 0xb5, 0x68, 0x0a, 0xf2, 0xfb, 0xa4, 0xef, 0x2c, 0x1b, 0x66, 0xff, 0x45, 0xb3, - 0x30, 0x74, 0xa0, 0x68, 0x3d, 0x27, 0xfc, 0x8e, 0x60, 0xe7, 0xc7, 0xfd, 0xdc, 0x3d, 0x49, 0xfe, - 0x72, 0x28, 0xe8, 0x3b, 0xbc, 0x62, 0xbe, 0xce, 0x2e, 0xad, 0xa6, 0xa6, 0xb6, 0x14, 0x2a, 0x0a, - 0xa1, 0x31, 0xe7, 0xc2, 0xea, 0x8c, 0x61, 0x8f, 0x1a, 0xaa, 0xad, 0x73, 0x2f, 0xb7, 0xb6, 0xce, - 0xbf, 0x98, 0xda, 0xfa, 0x77, 0xa1, 0x44, 0xdd, 0xaa, 0xba, 0xc0, 0x21, 0x6f, 0x9e, 0x22, 0xbe, - 0x8a, 0x82, 0xda, 0x53, 0xe0, 0x95, 0xd2, 0x1e, 0x68, 0x52, 0x11, 0x3d, 0x74, 0xca, 0x22, 0xfa, - 0x85, 0x16, 0xbe, 0x2c, 0xde, 0x98, 0x4a, 0x8f, 0x92, 0x36, 0x8f, 0x6d, 0x25, 0x3f, 0xde, 0x34, - 0xf8, 0x28, 0x16, 0x54, 0xf4, 0x61, 0xc8, 0x65, 0x4b, 0x67, 0x71, 0xd9, 0x89, 0x74, 0x77, 0x45, - 0xdb, 0x30, 0x6f, 0x5a, 0x46, 0xc7, 0x22, 0x94, 0x2e, 0x13, 0xa5, 0xad, 0xa9, 0x3a, 0x71, 0xd7, - 0xc7, 0xa9, 0x88, 0x2e, 0x1f, 0x1f, 0x55, 0xe6, 0x1b, 0xc9, 0x2c, 0x38, 0x4d, 0x56, 0x7e, 0x56, - 0x80, 0xa9, 0x68, 0x06, 0x4c, 0x29, 0x52, 0xa5, 0x33, 0x15, 0xa9, 0x37, 0x02, 0x87, 0xc1, 0xa9, - 0xe0, 0x03, 0x2f, 0x38, 0xb1, 0x03, 0xb1, 0x08, 0x93, 0x22, 0x1a, 0xb8, 0x44, 0x51, 0xa6, 0x7b, - 0xbb, 0xbf, 0x1d, 0x26, 0xe3, 0x28, 0x3f, 0x7a, 0x00, 0xe3, 0x16, 0xaf, 0xbb, 0x5d, 0x00, 0xa7, - 0x76, 0xbd, 0x28, 0x00, 0xc6, 0x71, 0x90, 0x88, 0xc3, 0xbc, 0xac, 0x6e, 0xf5, 0xcb, 0x51, 0x17, - 0xa0, 0x10, 0xae, 0x5b, 0x17, 0xa3, 0x0c, 0x38, 0x2e, 0x83, 0xd6, 0x61, 0xa6, 0xa7, 0xc7, 0xa1, - 0x1c, 0x57, 0xbe, 0x2c, 0xa0, 0x66, 0xb6, 0xe3, 0x2c, 0x38, 0x49, 0x0e, 0xed, 0x86, 0x4a, 0xd9, - 0x61, 0x1e, 0x9e, 0x6f, 0x65, 0x3e, 0x78, 0x99, 0x6b, 0xd9, 0x84, 0x72, 0xbb, 0x94, 0xb5, 0xdc, - 0x96, 0xff, 0x5e, 0x0a, 0x26, 0x21, 0xaf, 0x04, 0x1e, 0xf4, 0xca, 0x14, 0x93, 0x08, 0x54, 0x47, - 0x46, 0x72, 0xf5, 0x7b, 0xf7, 0x54, 0xd5, 0xaf, 0x9f, 0x3c, 0x07, 0x97, 0xbf, 0x5f, 0x48, 0x30, - 0xb7, 0xd2, 0x7c, 0x64, 0x19, 0x3d, 0xd3, 0x35, 0x67, 0xd3, 0x74, 0x96, 0xe6, 0x97, 0x50, 0xb0, - 0x7a, 0x9a, 0x3b, 0x8f, 0x57, 0xdc, 0x79, 0xe0, 0x9e, 0xc6, 0xe6, 0x31, 0x13, 0x91, 0x72, 0x26, - 0xc1, 0x04, 0xd0, 0x06, 0x0c, 0x5b, 0x8a, 0xde, 0x21, 0x6e, 0x5a, 0xbd, 0x36, 0xc0, 0xfa, 0xd5, - 0x65, 0xcc, 0xd8, 0x03, 0x85, 0x0d, 0x97, 0xc6, 0x02, 0x45, 0xfe, 0x07, 0x09, 0x26, 0x1f, 0x6f, - 0x6d, 0x35, 0x56, 0x75, 0x7e, 0xa2, 0xf9, 0xdb, 0xea, 0x55, 0x28, 0x98, 0x8a, 0xbd, 0x17, 0xcd, - 0xf4, 0x8c, 0x86, 0x39, 0x05, 0xdd, 0x86, 0x12, 0xfb, 0x97, 0xd9, 0xc5, 0x8f, 0xd4, 0x08, 0x0f, - 0x84, 0xa5, 0x86, 0x18, 0x7b, 0x1e, 0xf8, 0x3f, 0xf6, 0x38, 0xd1, 0xfb, 0x50, 0x64, 0xf1, 0x87, - 0xe8, 0xed, 0x8c, 0x05, 0xba, 0x30, 0xaa, 0xee, 0x08, 0xf9, 0x35, 0x97, 0x18, 0xc0, 0x2e, 0x9c, - 0xbc, 0x0f, 0xb3, 0x81, 0x49, 0xb0, 0x55, 0x7c, 0xc2, 0x72, 0x2a, 0x6a, 0xc2, 0x10, 0xd3, 0xce, - 0x32, 0x67, 0x3e, 0xc3, 0x13, 0x68, 0x64, 0x21, 0xfc, 0xfa, 0x88, 0xfd, 0xa2, 0xd8, 0xc1, 0x92, - 0xd7, 0x61, 0x9c, 0x3f, 0x43, 0x1b, 0x96, 0xcd, 0x17, 0x13, 0x5d, 0x81, 0x7c, 0x57, 0xd5, 0x45, - 0x76, 0x1e, 0x15, 0x32, 0x79, 0x96, 0x59, 0xd8, 0x38, 0x27, 0x2b, 0x87, 0x22, 0x5e, 0xf9, 0x64, - 0xe5, 0x10, 0xb3, 0x71, 0xf9, 0x11, 0x14, 0xc5, 0x26, 0x05, 0x81, 0xf2, 0x27, 0x03, 0xe5, 0x13, - 0x80, 0x36, 0xa1, 0xb8, 0xda, 0xa8, 0x6b, 0x86, 0x53, 0xab, 0xb5, 0xd4, 0xb6, 0x15, 0xdd, 0xc1, - 0xa5, 0xd5, 0x65, 0x8c, 0x39, 0x05, 0xc9, 0x30, 0x4c, 0x0e, 0x5b, 0xc4, 0xb4, 0xb9, 0x1f, 0x8d, - 0xd4, 0x81, 0xf9, 0xc6, 0x43, 0x3e, 0x82, 0x05, 0x45, 0xfe, 0xa3, 0x1c, 0x14, 0xc5, 0x72, 0x9c, - 0xc3, 0xdd, 0x6d, 0x2d, 0x74, 0x77, 0x7b, 0x2d, 0x9b, 0x6b, 0xa4, 0x5e, 0xdc, 0xb6, 0x22, 0x17, - 0xb7, 0x1b, 0x19, 0xf1, 0x4e, 0xbe, 0xb5, 0x7d, 0x96, 0x83, 0x89, 0xb0, 0x53, 0xa2, 0x3b, 0x30, - 0xca, 0xd2, 0x94, 0xda, 0x22, 0x1b, 0x7e, 0x75, 0xec, 0x3d, 0xdd, 0x34, 0x7d, 0x12, 0x0e, 0xf2, - 0xa1, 0x8e, 0x27, 0xc6, 0xfc, 0x48, 0x4c, 0x3a, 0x7d, 0x49, 0x7b, 0xb6, 0xaa, 0x55, 0x9d, 0x0f, - 0x32, 0xd5, 0x55, 0xdd, 0xde, 0xb4, 0x9a, 0xb6, 0xa5, 0xea, 0x9d, 0x98, 0x22, 0xee, 0x94, 0x41, - 0x64, 0xf4, 0x1e, 0x4b, 0x99, 0xd4, 0xe8, 0x59, 0x2d, 0x92, 0x54, 0xfa, 0xba, 0x65, 0x1b, 0x3b, - 0xa0, 0xed, 0x35, 0xa3, 0xa5, 0x68, 0xce, 0xe6, 0x60, 0xb2, 0x4b, 0x2c, 0xa2, 0xb7, 0x88, 0x5b, - 0x6e, 0x3a, 0x10, 0xd8, 0x03, 0x93, 0xff, 0x56, 0x82, 0x51, 0xb1, 0x16, 0xe7, 0x70, 0xc9, 0xf9, - 0xed, 0xf0, 0x25, 0xe7, 0x5a, 0xc6, 0xc8, 0x91, 0x7c, 0xc3, 0xf9, 0x4b, 0xdf, 0x74, 0x16, 0x2b, - 0xd8, 0x71, 0xd9, 0x33, 0xa8, 0x1d, 0x3d, 0x2e, 0xec, 0x94, 0x63, 0x4e, 0x41, 0x3d, 0x98, 0x52, - 0x23, 0xc1, 0x45, 0xec, 0x59, 0x2d, 0x9b, 0x25, 0x9e, 0x58, 0xbd, 0x2c, 0xe0, 0xa7, 0xa2, 0x14, - 0x1c, 0x53, 0x21, 0x13, 0x88, 0x71, 0xa1, 0x77, 0xa1, 0xb0, 0x67, 0xdb, 0x66, 0xc2, 0xf3, 0xf9, - 0x80, 0x90, 0xe6, 0x9b, 0x50, 0xe2, 0xb3, 0xdb, 0xda, 0x6a, 0x60, 0x0e, 0x25, 0xff, 0x5d, 0xce, - 0x5b, 0x0f, 0x7e, 0xe7, 0x78, 0xdb, 0x9b, 0xed, 0x92, 0xa6, 0x50, 0xca, 0x1d, 0xdb, 0xb9, 0x1f, - 0xcf, 0x06, 0x0c, 0xf7, 0x68, 0x38, 0xc6, 0x8d, 0xb6, 0xfc, 0x50, 0x2f, 0x9d, 0x25, 0xd4, 0x8f, - 0x26, 0x85, 0x79, 0xf4, 0x18, 0xf2, 0xb6, 0x96, 0xf5, 0x9e, 0x2b, 0x10, 0xb7, 0xd6, 0x9a, 0x7e, - 0xac, 0xdc, 0x5a, 0x6b, 0x62, 0x06, 0x81, 0x36, 0x61, 0x88, 0xa5, 0x53, 0x16, 0x1d, 0xf2, 0xd9, - 0xa3, 0x0d, 0x5b, 0x41, 0xdf, 0xa5, 0xd8, 0x2f, 0x8a, 0x1d, 0x1c, 0xf9, 0x13, 0x18, 0x0f, 0x85, - 0x10, 0xf4, 0x31, 0x8c, 0x69, 0x86, 0xd2, 0xae, 0x2b, 0x9a, 0xa2, 0xb7, 0x88, 0xfb, 0xb5, 0xe3, - 0x5a, 0xd2, 0xd9, 0x5b, 0x0b, 0xf0, 0x89, 0x00, 0x34, 0x2b, 0x94, 0x8c, 0x05, 0x69, 0x38, 0x84, - 0x28, 0x2b, 0x00, 0xfe, 0x1c, 0x51, 0x05, 0x86, 0x98, 0xa7, 0x3a, 0xa9, 0x6e, 0xa4, 0x3e, 0xc2, - 0x2c, 0x64, 0x0e, 0x4c, 0xb1, 0x33, 0x8e, 0x6e, 0x01, 0x50, 0xd2, 0xb2, 0x88, 0xcd, 0xb7, 0x33, - 0x17, 0xfe, 0x62, 0xda, 0xf4, 0x28, 0x38, 0xc0, 0x25, 0xff, 0xa3, 0x04, 0xe3, 0x1b, 0xc4, 0xfe, - 0xd4, 0xb0, 0xf6, 0x1b, 0x86, 0xa6, 0xb6, 0xfa, 0xe7, 0x90, 0x07, 0x70, 0x28, 0x0f, 0xbc, 0x31, - 0x60, 0x67, 0x42, 0xd6, 0xa5, 0x65, 0x03, 0xf9, 0x2b, 0x09, 0xe6, 0x43, 0x9c, 0x0f, 0xfd, 0xc3, - 0xbf, 0x0d, 0x43, 0xa6, 0x61, 0xd9, 0x6e, 0x8d, 0x70, 0x2a, 0x85, 0x2c, 0xc2, 0x06, 0xaa, 0x04, - 0x06, 0x83, 0x1d, 0x34, 0xb4, 0x06, 0x39, 0xdb, 0x10, 0xae, 0x7a, 0x3a, 0x4c, 0x42, 0xac, 0x3a, - 0x08, 0xcc, 0xdc, 0x96, 0x81, 0x73, 0xb6, 0xc1, 0x36, 0xa2, 0x1c, 0xe2, 0x0a, 0x86, 0xaf, 0x97, - 0x34, 0x03, 0x0c, 0x85, 0x5d, 0xcb, 0xe8, 0x9e, 0x79, 0x0e, 0xde, 0x46, 0xac, 0x58, 0x46, 0x17, - 0x73, 0x2c, 0xf9, 0x6b, 0x09, 0xa6, 0x43, 0x9c, 0xe7, 0x90, 0x3a, 0xde, 0x0d, 0xa7, 0x8e, 0x1b, - 0xa7, 0x99, 0x48, 0x4a, 0x02, 0xf9, 0x3a, 0x17, 0x99, 0x06, 0x9b, 0x30, 0xda, 0x85, 0x51, 0xd3, - 0x68, 0x37, 0x5f, 0xc0, 0xf7, 0xcd, 0x49, 0x96, 0xd2, 0x1b, 0x3e, 0x16, 0x0e, 0x02, 0xa3, 0x43, - 0x98, 0xd6, 0x95, 0x2e, 0xa1, 0xa6, 0xd2, 0x22, 0xcd, 0x17, 0xf0, 0xe2, 0x73, 0x91, 0x7f, 0x40, - 0x89, 0x22, 0xe2, 0xb8, 0x12, 0xb4, 0x0e, 0x45, 0xd5, 0xe4, 0x25, 0xa6, 0xa8, 0x25, 0x06, 0xe6, - 0x61, 0xa7, 0x20, 0x75, 0xe2, 0xb9, 0xf8, 0x81, 0x5d, 0x0c, 0xf9, 0x5f, 0xa3, 0xde, 0xc0, 0x2b, - 0x96, 0x47, 0x50, 0xe2, 0x9d, 0x26, 0x2d, 0x43, 0x73, 0x3f, 0x75, 0xf0, 0xcb, 0x85, 0x18, 0x7b, - 0x7e, 0x54, 0xb9, 0x9c, 0xf0, 0x8a, 0xed, 0x92, 0xb1, 0x27, 0x8c, 0x36, 0xa0, 0x60, 0xfe, 0x98, - 0xe2, 0x8a, 0xa7, 0x49, 0x5e, 0x51, 0x71, 0x1c, 0xf4, 0x6b, 0x50, 0x24, 0x7a, 0x9b, 0xd7, 0x6b, - 0xce, 0x3b, 0x02, 0x9f, 0xd5, 0x43, 0x67, 0x08, 0xbb, 0x34, 0xf9, 0x0f, 0xf2, 0x91, 0x59, 0xf1, - 0x9c, 0xfa, 0xf4, 0x85, 0x39, 0x87, 0x57, 0xf3, 0xa5, 0x3a, 0xc8, 0x0e, 0x14, 0x45, 0x46, 0x16, - 0x3e, 0xff, 0xcb, 0xd3, 0xf8, 0x7c, 0x30, 0xd9, 0x79, 0x57, 0x2e, 0x77, 0xd0, 0x05, 0x46, 0x1f, - 0xc1, 0x30, 0x71, 0x54, 0x38, 0x29, 0xf4, 0xee, 0x69, 0x54, 0xf8, 0xe1, 0xd7, 0x2f, 0xb5, 0xc5, - 0x98, 0x40, 0x45, 0x6f, 0xb1, 0xf5, 0x62, 0xbc, 0xac, 0x32, 0xa5, 0xe5, 0x02, 0xcf, 0x6a, 0x57, - 0x9c, 0x69, 0x7b, 0xc3, 0xcf, 0x8f, 0x2a, 0xe0, 0xff, 0xc4, 0x41, 0x09, 0xf9, 0x9f, 0x25, 0x98, - 0xe6, 0x2b, 0xd4, 0xea, 0x59, 0xaa, 0xdd, 0x3f, 0xb7, 0xfc, 0xf5, 0x24, 0x94, 0xbf, 0x6e, 0x0f, - 0x58, 0x96, 0x98, 0x85, 0xa9, 0x39, 0xec, 0x1b, 0x09, 0x2e, 0xc6, 0xb8, 0xcf, 0x21, 0x7c, 0x6e, - 0x87, 0xc3, 0xe7, 0x1b, 0xa7, 0x9d, 0x50, 0x4a, 0x08, 0xfd, 0xaf, 0xe9, 0x84, 0xe9, 0xf0, 0x93, - 0x72, 0x0b, 0xc0, 0xb4, 0xd4, 0x03, 0x55, 0x23, 0x1d, 0xf1, 0xf1, 0xbf, 0x14, 0x68, 0xed, 0xf2, - 0x28, 0x38, 0xc0, 0x85, 0x28, 0xcc, 0xb5, 0xc9, 0xae, 0xd2, 0xd3, 0xec, 0xc5, 0x76, 0x7b, 0x49, - 0x31, 0x95, 0x1d, 0x55, 0x53, 0x6d, 0x55, 0x3c, 0x93, 0x8c, 0xd4, 0x1f, 0x38, 0x1f, 0xe5, 0x93, - 0x38, 0x9e, 0x1f, 0x55, 0xae, 0x24, 0x7d, 0x15, 0x73, 0x59, 0xfa, 0x38, 0x05, 0x1a, 0xf5, 0xa1, - 0x6c, 0x91, 0x4f, 0x7a, 0xaa, 0x45, 0xda, 0xcb, 0x96, 0x61, 0x86, 0xd4, 0xe6, 0xb9, 0xda, 0xdf, - 0x3a, 0x3e, 0xaa, 0x94, 0x71, 0x0a, 0xcf, 0x60, 0xc5, 0xa9, 0xf0, 0xe8, 0x29, 0xcc, 0x28, 0xa2, - 0x09, 0x2f, 0xa8, 0xd5, 0x39, 0x25, 0xf7, 0x8e, 0x8f, 0x2a, 0x33, 0x8b, 0x71, 0xf2, 0x60, 0x85, - 0x49, 0xa0, 0xa8, 0x06, 0xc5, 0x03, 0xde, 0xaf, 0x47, 0xcb, 0x43, 0x1c, 0x9f, 0xe5, 0x8b, 0xa2, - 0xd3, 0xc2, 0xc7, 0x30, 0x87, 0x57, 0x9a, 0xfc, 0xf4, 0xb9, 0x5c, 0xec, 0x4a, 0xcc, 0x4a, 0x4e, - 0x71, 0xe2, 0xf9, 0x4b, 0x79, 0xc9, 0x8f, 0x5a, 0x8f, 0x7d, 0x12, 0x0e, 0xf2, 0xa1, 0x0f, 0x61, - 0x64, 0x4f, 0xbc, 0xab, 0xd0, 0x72, 0x31, 0x53, 0xae, 0x0e, 0xbd, 0xc3, 0xd4, 0xa7, 0x85, 0x8a, - 0x11, 0x77, 0x98, 0x62, 0x1f, 0x11, 0xbd, 0x0a, 0x45, 0xfe, 0x63, 0x75, 0x99, 0x3f, 0x43, 0x96, - 0xfc, 0xd8, 0xf6, 0xd8, 0x19, 0xc6, 0x2e, 0xdd, 0x65, 0x5d, 0x6d, 0x2c, 0xf1, 0xe7, 0xf0, 0x08, - 0xeb, 0x6a, 0x63, 0x09, 0xbb, 0x74, 0xf4, 0x31, 0x14, 0x29, 0x59, 0x53, 0xf5, 0xde, 0x61, 0x19, - 0x32, 0x7d, 0x4c, 0x6f, 0x3e, 0xe4, 0xdc, 0x91, 0x07, 0x41, 0x5f, 0x83, 0xa0, 0x63, 0x17, 0x16, - 0xed, 0xc1, 0x88, 0xd5, 0xd3, 0x17, 0xe9, 0x36, 0x25, 0x56, 0x79, 0x94, 0xeb, 0x18, 0x14, 0xce, - 0xb1, 0xcb, 0x1f, 0xd5, 0xe2, 0xad, 0x90, 0xc7, 0x81, 0x7d, 0x70, 0xb4, 0x07, 0xc0, 0x7f, 0xf0, - 0xb7, 0xc7, 0xf2, 0x1c, 0x57, 0x75, 0x2f, 0x8b, 0xaa, 0xa4, 0x27, 0x4e, 0xf1, 0xfd, 0xc1, 0x23, - 0xe3, 0x00, 0x36, 0xfa, 0x43, 0x09, 0x10, 0xed, 0x99, 0xa6, 0x46, 0xba, 0x44, 0xb7, 0x15, 0x8d, - 0x8f, 0xd2, 0xf2, 0x18, 0x57, 0xf9, 0xf6, 0xa0, 0x15, 0x8c, 0x09, 0x46, 0x55, 0x7b, 0x9f, 0x15, - 0xe2, 0xac, 0x38, 0x41, 0x2f, 0xdb, 0xc4, 0x5d, 0x31, 0xeb, 0xf1, 0x4c, 0x9b, 0x98, 0xfc, 0xaa, - 0xeb, 0x6f, 0xa2, 0xa0, 0x63, 0x17, 0x16, 0x3d, 0x81, 0x39, 0xb7, 0xb1, 0x14, 0x1b, 0x86, 0xbd, - 0xa2, 0x6a, 0x84, 0xf6, 0xa9, 0x4d, 0xba, 0xe5, 0x09, 0xee, 0x60, 0x5e, 0x77, 0x0d, 0x4e, 0xe4, - 0xc2, 0x29, 0xd2, 0xa8, 0x0b, 0x15, 0x37, 0x38, 0xb1, 0x93, 0xeb, 0x45, 0xc7, 0x87, 0xb4, 0xa5, - 0x68, 0xce, 0x97, 0x96, 0x49, 0xae, 0xe0, 0x95, 0xe3, 0xa3, 0x4a, 0x65, 0xf9, 0x64, 0x56, 0x3c, - 0x08, 0x0b, 0xbd, 0x0f, 0x65, 0x25, 0x4d, 0xcf, 0x14, 0xd7, 0xf3, 0x73, 0x16, 0xf1, 0x52, 0x15, - 0xa4, 0x4a, 0x23, 0x1b, 0xa6, 0x94, 0x70, 0x8b, 0x2f, 0x2d, 0x4f, 0x67, 0x7a, 0xb4, 0x8d, 0x74, - 0x06, 0xfb, 0xef, 0x2b, 0x11, 0x02, 0xc5, 0x31, 0x0d, 0xe8, 0xf7, 0x00, 0x29, 0xd1, 0xae, 0x64, - 0x5a, 0x46, 0x99, 0x12, 0x5d, 0xac, 0x9d, 0xd9, 0x77, 0xbb, 0x18, 0x89, 0xe2, 0x04, 0x3d, 0xac, - 0x8e, 0x57, 0x22, 0x9d, 0xd4, 0xb4, 0x3c, 0xcf, 0x95, 0xd7, 0xb2, 0x29, 0xf7, 0xe4, 0x02, 0x1f, - 0x94, 0xa2, 0x88, 0x38, 0xae, 0x04, 0xad, 0xc1, 0xac, 0x18, 0xdc, 0xd6, 0xa9, 0xb2, 0x4b, 0x9a, - 0x7d, 0xda, 0xb2, 0x35, 0x5a, 0x9e, 0xe1, 0xf1, 0x9d, 0x7f, 0xd4, 0x5c, 0x4c, 0xa0, 0xe3, 0x44, - 0x29, 0xf4, 0x36, 0x4c, 0xed, 0x1a, 0xd6, 0x8e, 0xda, 0x6e, 0x13, 0xdd, 0x45, 0x9a, 0xe5, 0x48, - 0xfc, 0xb9, 0x68, 0x25, 0x42, 0xc3, 0x31, 0x6e, 0x44, 0xe1, 0xa2, 0x40, 0x6e, 0x58, 0x46, 0x6b, - 0xdd, 0xe8, 0xe9, 0xb6, 0x53, 0xf6, 0x5d, 0xf4, 0xd2, 0xe8, 0xc5, 0xc5, 0x24, 0x86, 0xe7, 0x47, - 0x95, 0xab, 0xc9, 0x97, 0x01, 0x9f, 0x09, 0x27, 0x63, 0x23, 0x13, 0xc6, 0x44, 0x7f, 0x3c, 0x7f, - 0xb7, 0x2a, 0x97, 0xf9, 0xd1, 0xbf, 0x3f, 0x38, 0xe0, 0x79, 0x22, 0xd1, 0xf3, 0x3f, 0x75, 0x7c, - 0x54, 0x19, 0x0b, 0x32, 0xe0, 0x90, 0x06, 0xde, 0x0f, 0x25, 0xbe, 0xc2, 0x9d, 0x4f, 0x4f, 0xf9, - 0xe9, 0xfa, 0xa1, 0x7c, 0xd3, 0x5e, 0x58, 0x3f, 0x54, 0x00, 0xf2, 0xe4, 0x97, 0xf5, 0xff, 0xcc, - 0xc1, 0x8c, 0xcf, 0x9c, 0xb9, 0x1f, 0x2a, 0x41, 0xe4, 0xff, 0xfb, 0xca, 0xb3, 0xf5, 0x28, 0xf9, - 0x4b, 0xf7, 0xbf, 0xaf, 0x47, 0xc9, 0xb7, 0x2d, 0xe5, 0xf6, 0xf0, 0xd7, 0xb9, 0xe0, 0x04, 0x4e, - 0xd9, 0x28, 0xf3, 0x02, 0x5a, 0xab, 0x7f, 0x72, 0xbd, 0x36, 0xf2, 0x37, 0x79, 0x98, 0x8a, 0x9e, - 0xc6, 0x50, 0x3f, 0x85, 0x34, 0xb0, 0x9f, 0xa2, 0x01, 0xb3, 0xbb, 0x3d, 0x4d, 0xeb, 0xf3, 0x39, - 0x04, 0x9a, 0x2a, 0x9c, 0x2f, 0x9b, 0x3f, 0x17, 0x92, 0xb3, 0x2b, 0x09, 0x3c, 0x38, 0x51, 0x32, - 0xde, 0x5e, 0x51, 0xf8, 0xb1, 0xed, 0x15, 0x43, 0x67, 0x68, 0xaf, 0x48, 0xee, 0x50, 0xc9, 0x9f, - 0xa9, 0x43, 0xe5, 0x2c, 0xbd, 0x15, 0x09, 0x41, 0x6c, 0x60, 0x9f, 0xf0, 0xaf, 0x60, 0x22, 0xdc, - 0xef, 0xe3, 0xec, 0xa5, 0xd3, 0x72, 0x24, 0xbe, 0x20, 0x07, 0xf6, 0xd2, 0x19, 0xc7, 0x1e, 0x87, - 0x7c, 0x2c, 0xc1, 0x5c, 0x72, 0x5f, 0x2f, 0xd2, 0x60, 0xa2, 0xab, 0x1c, 0x06, 0x7b, 0xad, 0xa5, - 0x33, 0x3e, 0xa0, 0xf1, 0x46, 0x8f, 0xf5, 0x10, 0x16, 0x8e, 0x60, 0xa3, 0x0f, 0xa0, 0xd4, 0x55, - 0x0e, 0x9b, 0x3d, 0xab, 0x43, 0xce, 0xfc, 0x50, 0xc7, 0x8f, 0xd1, 0xba, 0x40, 0xc1, 0x1e, 0x9e, - 0xfc, 0x83, 0x04, 0xf3, 0x29, 0xed, 0x1b, 0xff, 0x87, 0x66, 0xf9, 0x17, 0x12, 0xfc, 0x2c, 0xf5, - 0x1a, 0x86, 0xee, 0x86, 0x3a, 0x4d, 0xe4, 0x48, 0xa7, 0x09, 0x8a, 0x0b, 0xbe, 0xa4, 0x46, 0x93, - 0x2f, 0x24, 0x28, 0xa7, 0xdd, 0x4b, 0xd1, 0x9d, 0x90, 0x91, 0xbf, 0x88, 0x18, 0x39, 0x1d, 0x93, - 0x7b, 0x49, 0x36, 0xfe, 0x8b, 0x04, 0x97, 0x4f, 0xa8, 0xef, 0xbc, 0xeb, 0x0f, 0x69, 0x07, 0xb9, - 0xf8, 0xcb, 0xb9, 0xf8, 0xec, 0xe6, 0x5f, 0x7f, 0x12, 0x78, 0x70, 0xaa, 0x34, 0xda, 0x86, 0x79, - 0x71, 0xf7, 0x8a, 0xd2, 0x44, 0xe9, 0xc2, 0x1b, 0xf2, 0x96, 0x93, 0x59, 0x70, 0x9a, 0xac, 0xfc, - 0x57, 0x12, 0xcc, 0x25, 0x3f, 0x38, 0xa0, 0x37, 0x43, 0x4b, 0x5e, 0x89, 0x2c, 0xf9, 0x64, 0x44, - 0x4a, 0x2c, 0xf8, 0x47, 0x30, 0x21, 0x9e, 0x25, 0x04, 0x8c, 0x70, 0x66, 0x39, 0x29, 0x3b, 0x09, - 0x08, 0xb7, 0x38, 0xe6, 0xc7, 0x24, 0x3c, 0x86, 0x23, 0x68, 0xf2, 0x67, 0x39, 0x18, 0x6a, 0xb6, - 0x14, 0x8d, 0x9c, 0x43, 0x6d, 0xfc, 0x4e, 0xa8, 0x36, 0x1e, 0xf4, 0xa7, 0x6e, 0xdc, 0xaa, 0xd4, - 0xb2, 0x18, 0x47, 0xca, 0xe2, 0xd7, 0x32, 0xa1, 0x9d, 0x5c, 0x11, 0xff, 0x26, 0x8c, 0x78, 0x4a, - 0x4f, 0x97, 0xa8, 0xe5, 0x3f, 0xcf, 0xc1, 0x68, 0x40, 0xc5, 0x29, 0xd3, 0xfc, 0x6e, 0xa8, 0xb6, - 0xc9, 0x67, 0x78, 0x04, 0x0a, 0xe8, 0xaa, 0xba, 0xd5, 0x8c, 0xd3, 0xaa, 0xed, 0x37, 0xe7, 0xc6, - 0x8b, 0x9c, 0x5f, 0xc1, 0x84, 0xad, 0x58, 0x1d, 0x62, 0x7b, 0x1f, 0x45, 0x9c, 0x56, 0x32, 0xef, - 0x6f, 0x06, 0xb6, 0x42, 0x54, 0x1c, 0xe1, 0xbe, 0xf4, 0x00, 0xc6, 0x43, 0xca, 0x4e, 0xd5, 0x69, - 0xfd, 0x37, 0x12, 0xfc, 0x62, 0xe0, 0x43, 0x12, 0xaa, 0x87, 0x0e, 0x49, 0x35, 0x72, 0x48, 0x16, - 0xd2, 0x01, 0x5e, 0x5e, 0xc7, 0x5e, 0x7d, 0xe9, 0xd9, 0xf7, 0x0b, 0x17, 0xbe, 0xfd, 0x7e, 0xe1, - 0xc2, 0x77, 0xdf, 0x2f, 0x5c, 0xf8, 0xfd, 0xe3, 0x05, 0xe9, 0xd9, 0xf1, 0x82, 0xf4, 0xed, 0xf1, - 0x82, 0xf4, 0xdd, 0xf1, 0x82, 0xf4, 0xef, 0xc7, 0x0b, 0xd2, 0x1f, 0xff, 0xb0, 0x70, 0xe1, 0x83, - 0x2b, 0x27, 0xfe, 0x69, 0xfc, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x35, 0xc8, 0xa8, 0xd1, 0x53, - 0x3f, 0x00, 0x00, + // 3797 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0x4d, 0x6c, 0x1c, 0xc9, + 0x75, 0x56, 0xcf, 0x0c, 0x39, 0xc3, 0x47, 0xf1, 0xaf, 0x48, 0x91, 0x63, 0xc9, 0xe2, 0xc8, 0xbd, + 0x88, 0xa2, 0xdd, 0x68, 0x67, 0x56, 0x5c, 0xad, 0xbc, 0x59, 0x21, 0xf6, 0x72, 0x48, 0x51, 0xa2, + 0xc3, 0x9f, 0xd9, 0x1a, 0x52, 0x36, 0x16, 0x59, 0x67, 0x9b, 0x3d, 0xc5, 0x61, 0x2f, 0x7b, 0xba, + 0xdb, 0x5d, 0x3d, 0x34, 0x27, 0xc8, 0x21, 0x87, 0x5c, 0x0c, 0x04, 0x48, 0x2e, 0x4e, 0x72, 0xcc, + 0x22, 0x40, 0x6e, 0x41, 0x8e, 0xc9, 0xc1, 0x30, 0x12, 0xc4, 0x01, 0x84, 0xc0, 0x09, 0x0c, 0xe4, + 0x10, 0x9f, 0x88, 0x2c, 0x7d, 0x0a, 0x72, 0xca, 0x2d, 0xd0, 0x29, 0xa8, 0xea, 0xea, 0xff, 0x6e, + 0x4e, 0x0f, 0x2d, 0x11, 0xd9, 0xc0, 0x27, 0x69, 0xea, 0xbd, 0xf7, 0xbd, 0x57, 0x55, 0xaf, 0xde, + 0x7b, 0x55, 0xfd, 0x08, 0x1b, 0xc7, 0xef, 0xd3, 0xba, 0x66, 0x36, 0x8e, 0xfb, 0x07, 0xc4, 0x36, + 0x88, 0x43, 0x68, 0xe3, 0x84, 0x18, 0x1d, 0xd3, 0x6e, 0x08, 0x82, 0x62, 0x69, 0x0d, 0x72, 0xea, + 0x10, 0x83, 0x6a, 0xa6, 0x41, 0x1b, 0x27, 0x0f, 0x0e, 0x88, 0xa3, 0x3c, 0x68, 0x74, 0x89, 0x41, + 0x6c, 0xc5, 0x21, 0x9d, 0xba, 0x65, 0x9b, 0x8e, 0x89, 0x6e, 0xbb, 0xec, 0x75, 0xc5, 0xd2, 0xea, + 0x01, 0x7b, 0x5d, 0xb0, 0xdf, 0x7c, 0xbb, 0xab, 0x39, 0x47, 0xfd, 0x83, 0xba, 0x6a, 0xf6, 0x1a, + 0x5d, 0xb3, 0x6b, 0x36, 0xb8, 0xd4, 0x41, 0xff, 0x90, 0xff, 0xe2, 0x3f, 0xf8, 0xff, 0x5c, 0xb4, + 0x9b, 0x72, 0x48, 0xb9, 0x6a, 0xda, 0xa4, 0x71, 0x92, 0xd0, 0x78, 0xf3, 0x61, 0xc0, 0xd3, 0x53, + 0xd4, 0x23, 0xcd, 0x20, 0xf6, 0xa0, 0x61, 0x1d, 0x77, 0xd9, 0x00, 0x6d, 0xf4, 0x88, 0xa3, 0xa4, + 0x49, 0x35, 0xb2, 0xa4, 0xec, 0xbe, 0xe1, 0x68, 0x3d, 0x92, 0x10, 0x78, 0x34, 0x4c, 0x80, 0xaa, + 0x47, 0xa4, 0xa7, 0x24, 0xe4, 0xde, 0xcd, 0x92, 0xeb, 0x3b, 0x9a, 0xde, 0xd0, 0x0c, 0x87, 0x3a, + 0x76, 0x5c, 0x48, 0x7e, 0x08, 0xb3, 0xab, 0xba, 0x6e, 0x7e, 0x9f, 0x74, 0xd6, 0xda, 0x9b, 0xeb, + 0xb6, 0x76, 0x42, 0x6c, 0x74, 0x07, 0x4a, 0x86, 0xd2, 0x23, 0x55, 0xe9, 0x8e, 0x74, 0x6f, 0xa2, + 0x79, 0xfd, 0xc5, 0x59, 0xed, 0xda, 0xf9, 0x59, 0xad, 0xb4, 0xa3, 0xf4, 0x08, 0xe6, 0x14, 0xf9, + 0x31, 0xcc, 0x09, 0xa9, 0x0d, 0x9d, 0x9c, 0x3e, 0x37, 0xf5, 0x7e, 0x8f, 0xa0, 0xbb, 0x30, 0xde, + 0xe1, 0x00, 0x42, 0x70, 0x5a, 0x08, 0x8e, 0xbb, 0xb0, 0x58, 0x50, 0x65, 0x0a, 0x33, 0x42, 0xf8, + 0x99, 0x49, 0x9d, 0x96, 0xe2, 0x1c, 0xa1, 0x15, 0x00, 0x4b, 0x71, 0x8e, 0x5a, 0x36, 0x39, 0xd4, + 0x4e, 0x85, 0x38, 0x12, 0xe2, 0xd0, 0xf2, 0x29, 0x38, 0xc4, 0x85, 0xee, 0x43, 0xc5, 0x26, 0x4a, + 0x67, 0xd7, 0xd0, 0x07, 0xd5, 0xc2, 0x1d, 0xe9, 0x5e, 0xa5, 0x39, 0x2b, 0x24, 0x2a, 0x58, 0x8c, + 0x63, 0x9f, 0x43, 0xfe, 0x61, 0x01, 0x26, 0xd6, 0x15, 0xd2, 0x33, 0x8d, 0x36, 0x71, 0xd0, 0xa7, + 0x50, 0x61, 0xdb, 0xd5, 0x51, 0x1c, 0x85, 0x6b, 0x9b, 0x5c, 0x79, 0xa7, 0x1e, 0xb8, 0x93, 0xbf, + 0x7a, 0x75, 0xeb, 0xb8, 0xcb, 0x06, 0x68, 0x9d, 0x71, 0xd7, 0x4f, 0x1e, 0xd4, 0x77, 0x0f, 0x3e, + 0x23, 0xaa, 0xb3, 0x4d, 0x1c, 0x25, 0xb0, 0x2f, 0x18, 0xc3, 0x3e, 0x2a, 0xda, 0x81, 0x12, 0xb5, + 0x88, 0xca, 0x2d, 0x9b, 0x5c, 0xb9, 0x5f, 0xbf, 0xd0, 0x59, 0xeb, 0xbe, 0x65, 0x6d, 0x8b, 0xa8, + 0xc1, 0x8a, 0xb3, 0x5f, 0x98, 0xe3, 0xa0, 0xe7, 0x30, 0x4e, 0x1d, 0xc5, 0xe9, 0xd3, 0x6a, 0x91, + 0x23, 0xd6, 0x73, 0x23, 0x72, 0xa9, 0x60, 0x33, 0xdc, 0xdf, 0x58, 0xa0, 0xc9, 0xff, 0x59, 0x00, + 0xe4, 0xf3, 0xae, 0x99, 0x46, 0x47, 0x73, 0x34, 0xd3, 0x40, 0x1f, 0x40, 0xc9, 0x19, 0x58, 0x9e, + 0x0b, 0xdc, 0xf5, 0x0c, 0xda, 0x1b, 0x58, 0xe4, 0xe5, 0x59, 0x6d, 0x31, 0x29, 0xc1, 0x28, 0x98, + 0xcb, 0xa0, 0x2d, 0xdf, 0xd4, 0x02, 0x97, 0x7e, 0x18, 0x55, 0xfd, 0xf2, 0xac, 0x96, 0x72, 0xd8, + 0xea, 0x3e, 0x52, 0xd4, 0x40, 0x74, 0x02, 0x48, 0x57, 0xa8, 0xb3, 0x67, 0x2b, 0x06, 0x75, 0x35, + 0x69, 0x3d, 0x22, 0x16, 0xe1, 0xad, 0x7c, 0x9b, 0xc6, 0x24, 0x9a, 0x37, 0x85, 0x15, 0x68, 0x2b, + 0x81, 0x86, 0x53, 0x34, 0x30, 0x6f, 0xb6, 0x89, 0x42, 0x4d, 0xa3, 0x5a, 0x8a, 0x7a, 0x33, 0xe6, + 0xa3, 0x58, 0x50, 0xd1, 0x9b, 0x50, 0xee, 0x11, 0x4a, 0x95, 0x2e, 0xa9, 0x8e, 0x71, 0xc6, 0x19, + 0xc1, 0x58, 0xde, 0x76, 0x87, 0xb1, 0x47, 0x97, 0x7f, 0x24, 0xc1, 0x94, 0xbf, 0x72, 0x5b, 0x1a, + 0x75, 0xd0, 0xef, 0x24, 0xfc, 0xb0, 0x9e, 0x6f, 0x4a, 0x4c, 0x9a, 0x7b, 0xa1, 0xef, 0xf3, 0xde, + 0x48, 0xc8, 0x07, 0xb7, 0x61, 0x4c, 0x73, 0x48, 0x8f, 0xed, 0x43, 0xf1, 0xde, 0xe4, 0xca, 0xbd, + 0xbc, 0x2e, 0xd3, 0x9c, 0x12, 0xa0, 0x63, 0x9b, 0x4c, 0x1c, 0xbb, 0x28, 0xf2, 0x9f, 0x96, 0x42, + 0xe6, 0x33, 0xd7, 0x44, 0x9f, 0x40, 0x85, 0x12, 0x9d, 0xa8, 0x8e, 0x69, 0x0b, 0xf3, 0xdf, 0xcd, + 0x69, 0xbe, 0x72, 0x40, 0xf4, 0xb6, 0x10, 0x6d, 0x5e, 0x67, 0xf6, 0x7b, 0xbf, 0xb0, 0x0f, 0x89, + 0x3e, 0x82, 0x8a, 0x43, 0x7a, 0x96, 0xae, 0x38, 0x44, 0x9c, 0xa3, 0x37, 0xc2, 0x53, 0x60, 0x9e, + 0xc3, 0xc0, 0x5a, 0x66, 0x67, 0x4f, 0xb0, 0xf1, 0xe3, 0xe3, 0x2f, 0x89, 0x37, 0x8a, 0x7d, 0x18, + 0x74, 0x02, 0xd3, 0x7d, 0xab, 0xc3, 0x38, 0x1d, 0x16, 0x05, 0xbb, 0x03, 0xe1, 0x49, 0x8f, 0xf2, + 0xae, 0xcd, 0x7e, 0x44, 0xba, 0xb9, 0x28, 0x74, 0x4d, 0x47, 0xc7, 0x71, 0x4c, 0x0b, 0x5a, 0x85, + 0x99, 0x9e, 0x66, 0xb0, 0xb8, 0x34, 0x68, 0x13, 0xd5, 0x34, 0x3a, 0x94, 0xbb, 0xd5, 0x58, 0x73, + 0x49, 0x00, 0xcc, 0x6c, 0x47, 0xc9, 0x38, 0xce, 0x8f, 0xbe, 0x05, 0xc8, 0x9b, 0xc6, 0x53, 0x37, + 0x88, 0x6b, 0xa6, 0xc1, 0x7d, 0xae, 0x18, 0x38, 0xf7, 0x5e, 0x82, 0x03, 0xa7, 0x48, 0xa1, 0x2d, + 0x58, 0xb0, 0xc9, 0x89, 0xc6, 0xe6, 0xf8, 0x4c, 0xa3, 0x8e, 0x69, 0x0f, 0xb6, 0xb4, 0x9e, 0xe6, + 0x54, 0xc7, 0xb9, 0x4d, 0xd5, 0xf3, 0xb3, 0xda, 0x02, 0x4e, 0xa1, 0xe3, 0x54, 0x29, 0xf9, 0xcf, + 0xc6, 0x61, 0x26, 0x16, 0x6f, 0xd0, 0x73, 0x58, 0x54, 0xfb, 0xb6, 0x4d, 0x0c, 0x67, 0xa7, 0xdf, + 0x3b, 0x20, 0x76, 0x5b, 0x3d, 0x22, 0x9d, 0xbe, 0x4e, 0x3a, 0xdc, 0x51, 0xc6, 0x9a, 0xcb, 0xc2, + 0xe2, 0xc5, 0xb5, 0x54, 0x2e, 0x9c, 0x21, 0xcd, 0x56, 0xc1, 0xe0, 0x43, 0xdb, 0x1a, 0xa5, 0x3e, + 0x66, 0x81, 0x63, 0xfa, 0xab, 0xb0, 0x93, 0xe0, 0xc0, 0x29, 0x52, 0xcc, 0xc6, 0x0e, 0xa1, 0x9a, + 0x4d, 0x3a, 0x71, 0x1b, 0x8b, 0x51, 0x1b, 0xd7, 0x53, 0xb9, 0x70, 0x86, 0x34, 0x7a, 0x0f, 0x26, + 0x5d, 0x6d, 0x7c, 0xff, 0xc4, 0x46, 0xcf, 0x0b, 0xb0, 0xc9, 0x9d, 0x80, 0x84, 0xc3, 0x7c, 0x6c, + 0x6a, 0xe6, 0x01, 0x25, 0xf6, 0x09, 0xe9, 0x64, 0x6f, 0xf0, 0x6e, 0x82, 0x03, 0xa7, 0x48, 0xb1, + 0xa9, 0xb9, 0x1e, 0x98, 0x98, 0xda, 0x78, 0x74, 0x6a, 0xfb, 0xa9, 0x5c, 0x38, 0x43, 0x9a, 0xf9, + 0xb1, 0x6b, 0xf2, 0xea, 0x89, 0xa2, 0xe9, 0xca, 0x81, 0x4e, 0xaa, 0xe5, 0xa8, 0x1f, 0xef, 0x44, + 0xc9, 0x38, 0xce, 0x8f, 0x9e, 0xc2, 0x9c, 0x3b, 0xb4, 0x6f, 0x28, 0x3e, 0x48, 0x85, 0x83, 0x7c, + 0x45, 0x80, 0xcc, 0xed, 0xc4, 0x19, 0x70, 0x52, 0x06, 0x7d, 0x00, 0xd3, 0xaa, 0xa9, 0xeb, 0xdc, + 0x1f, 0xd7, 0xcc, 0xbe, 0xe1, 0x54, 0x27, 0x38, 0x0a, 0x62, 0xe7, 0x71, 0x2d, 0x42, 0xc1, 0x31, + 0x4e, 0x44, 0x00, 0x54, 0x2f, 0xe1, 0xd0, 0x2a, 0xf0, 0xf8, 0xf8, 0x20, 0x6f, 0x0c, 0xf0, 0x53, + 0x55, 0x50, 0x03, 0xf8, 0x43, 0x14, 0x87, 0x80, 0xe5, 0x7f, 0x96, 0x60, 0x29, 0x23, 0x74, 0xa0, + 0x6f, 0x46, 0x52, 0xec, 0x6f, 0xc4, 0x52, 0xec, 0xad, 0x0c, 0xb1, 0x50, 0x9e, 0x35, 0x60, 0xca, + 0x66, 0xb3, 0x32, 0xba, 0x2e, 0x8b, 0x88, 0x91, 0xef, 0x0d, 0x99, 0x06, 0x0e, 0xcb, 0x04, 0x31, + 0x7f, 0xee, 0xfc, 0xac, 0x36, 0x15, 0xa1, 0xe1, 0x28, 0xbc, 0xfc, 0xe7, 0x05, 0x80, 0x75, 0x62, + 0xe9, 0xe6, 0xa0, 0x47, 0x8c, 0xab, 0xa8, 0xa1, 0x76, 0x23, 0x35, 0xd4, 0xdb, 0xc3, 0xb6, 0xc7, + 0x37, 0x2d, 0xb3, 0x88, 0xfa, 0x76, 0xac, 0x88, 0x6a, 0xe4, 0x87, 0xbc, 0xb8, 0x8a, 0xfa, 0xf7, + 0x22, 0xcc, 0x07, 0xcc, 0x41, 0x19, 0xf5, 0x38, 0xb2, 0xc7, 0xbf, 0x1e, 0xdb, 0xe3, 0xa5, 0x14, + 0x91, 0xd7, 0x56, 0x47, 0x7d, 0x06, 0xd3, 0xac, 0xca, 0x71, 0xf7, 0x92, 0xd7, 0x50, 0xe3, 0x23, + 0xd7, 0x50, 0x7e, 0xb6, 0xdb, 0x8a, 0x20, 0xe1, 0x18, 0x72, 0x46, 0xcd, 0x56, 0xfe, 0x32, 0xd6, + 0x6c, 0x3f, 0x96, 0x60, 0x3a, 0xd8, 0xa6, 0x2b, 0x28, 0xda, 0x76, 0xa2, 0x45, 0xdb, 0x9b, 0xb9, + 0x5d, 0x34, 0xa3, 0x6a, 0xfb, 0x1f, 0x56, 0xe0, 0xfb, 0x4c, 0xec, 0x80, 0x1f, 0x28, 0xea, 0xf1, + 0xf0, 0x3b, 0x1e, 0xfa, 0xa1, 0x04, 0x48, 0x64, 0x81, 0x55, 0xc3, 0x30, 0x1d, 0xc5, 0x8d, 0x95, + 0xae, 0x59, 0x9b, 0xb9, 0xcd, 0xf2, 0x34, 0xd6, 0xf7, 0x13, 0x58, 0x4f, 0x0c, 0xc7, 0x1e, 0x04, + 0x9b, 0x9c, 0x64, 0xc0, 0x29, 0x06, 0x20, 0x05, 0xc0, 0x16, 0x98, 0x7b, 0xa6, 0x38, 0xc8, 0x6f, + 0xe7, 0x88, 0x79, 0x4c, 0x60, 0xcd, 0x34, 0x0e, 0xb5, 0x6e, 0x10, 0x76, 0xb0, 0x0f, 0x84, 0x43, + 0xa0, 0x37, 0x9f, 0xc0, 0x52, 0x86, 0xb5, 0x68, 0x16, 0x8a, 0xc7, 0x64, 0xe0, 0x2e, 0x1b, 0x66, + 0xff, 0x45, 0x0b, 0x30, 0x76, 0xa2, 0xe8, 0x7d, 0x37, 0xfc, 0x4e, 0x60, 0xf7, 0xc7, 0x07, 0x85, + 0xf7, 0x25, 0xf9, 0x47, 0x63, 0x61, 0xdf, 0xe1, 0x15, 0xf3, 0x3d, 0x76, 0x69, 0xb5, 0x74, 0x4d, + 0x55, 0xa8, 0x28, 0x84, 0xae, 0xbb, 0x17, 0x56, 0x77, 0x0c, 0xfb, 0xd4, 0x48, 0x6d, 0x5d, 0x78, + 0xbd, 0xb5, 0x75, 0xf1, 0xd5, 0xd4, 0xd6, 0xbf, 0x0b, 0x15, 0xea, 0x55, 0xd5, 0x25, 0x0e, 0xf9, + 0x60, 0x84, 0xf8, 0x2a, 0x0a, 0x6a, 0x5f, 0x81, 0x5f, 0x4a, 0xfb, 0xa0, 0x69, 0x45, 0xf4, 0xd8, + 0x88, 0x45, 0xf4, 0x2b, 0x2d, 0x7c, 0x59, 0xbc, 0xb1, 0x94, 0x3e, 0x25, 0x1d, 0x1e, 0xdb, 0x2a, + 0x41, 0xbc, 0x69, 0xf1, 0x51, 0x2c, 0xa8, 0xe8, 0x93, 0x88, 0xcb, 0x56, 0x2e, 0xe3, 0xb2, 0xd3, + 0xd9, 0xee, 0x8a, 0xf6, 0x61, 0xc9, 0xb2, 0xcd, 0xae, 0x4d, 0x28, 0x5d, 0x27, 0x4a, 0x47, 0xd7, + 0x0c, 0xe2, 0xad, 0x8f, 0x5b, 0x11, 0xdd, 0x3a, 0x3f, 0xab, 0x2d, 0xb5, 0xd2, 0x59, 0x70, 0x96, + 0xac, 0xfc, 0xa2, 0x04, 0xb3, 0xf1, 0x0c, 0x98, 0x51, 0xa4, 0x4a, 0x97, 0x2a, 0x52, 0xef, 0x87, + 0x0e, 0x83, 0x5b, 0xc1, 0x87, 0x5e, 0x70, 0x12, 0x07, 0x62, 0x15, 0x66, 0x44, 0x34, 0xf0, 0x88, + 0xa2, 0x4c, 0xf7, 0x77, 0x7f, 0x3f, 0x4a, 0xc6, 0x71, 0x7e, 0xf4, 0x18, 0xa6, 0x6c, 0x5e, 0x77, + 0x7b, 0x00, 0x6e, 0xed, 0x7a, 0x43, 0x00, 0x4c, 0xe1, 0x30, 0x11, 0x47, 0x79, 0x59, 0xdd, 0x1a, + 0x94, 0xa3, 0x1e, 0x40, 0x29, 0x5a, 0xb7, 0xae, 0xc6, 0x19, 0x70, 0x52, 0x06, 0x6d, 0xc3, 0x7c, + 0xdf, 0x48, 0x42, 0xb9, 0xae, 0x7c, 0x4b, 0x40, 0xcd, 0xef, 0x27, 0x59, 0x70, 0x9a, 0x1c, 0x3a, + 0x8c, 0x94, 0xb2, 0xe3, 0x3c, 0x3c, 0xaf, 0xe4, 0x3e, 0x78, 0xb9, 0x6b, 0xd9, 0x94, 0x72, 0xbb, + 0x92, 0xb7, 0xdc, 0x96, 0xff, 0x41, 0x0a, 0x27, 0x21, 0xbf, 0x04, 0x1e, 0xf6, 0xca, 0x94, 0x90, + 0x08, 0x55, 0x47, 0x66, 0x7a, 0xf5, 0xfb, 0x68, 0xa4, 0xea, 0x37, 0x48, 0x9e, 0xc3, 0xcb, 0xdf, + 0xcf, 0x25, 0x58, 0xdc, 0x68, 0x3f, 0xb5, 0xcd, 0xbe, 0xe5, 0x99, 0xb3, 0x6b, 0xb9, 0x4b, 0xf3, + 0x75, 0x28, 0xd9, 0x7d, 0xdd, 0x9b, 0xc7, 0x1b, 0xde, 0x3c, 0x70, 0x5f, 0x67, 0xf3, 0x98, 0x8f, + 0x49, 0xb9, 0x93, 0x60, 0x02, 0x68, 0x07, 0xc6, 0x6d, 0xc5, 0xe8, 0x12, 0x2f, 0xad, 0xde, 0x1d, + 0x62, 0xfd, 0xe6, 0x3a, 0x66, 0xec, 0xa1, 0xc2, 0x86, 0x4b, 0x63, 0x81, 0x22, 0xff, 0xa3, 0x04, + 0x33, 0xcf, 0xf6, 0xf6, 0x5a, 0x9b, 0x06, 0x3f, 0xd1, 0xfc, 0x6d, 0xf5, 0x0e, 0x94, 0x2c, 0xc5, + 0x39, 0x8a, 0x67, 0x7a, 0x46, 0xc3, 0x9c, 0x82, 0x1e, 0x42, 0x85, 0xfd, 0xcb, 0xec, 0xe2, 0x47, + 0x6a, 0x82, 0x07, 0xc2, 0x4a, 0x4b, 0x8c, 0xbd, 0x0c, 0xfd, 0x1f, 0xfb, 0x9c, 0xe8, 0x3b, 0x50, + 0x66, 0xf1, 0x87, 0x18, 0x9d, 0x9c, 0x05, 0xba, 0x30, 0xaa, 0xe9, 0x0a, 0x05, 0x35, 0x97, 0x18, + 0xc0, 0x1e, 0x9c, 0x7c, 0x0c, 0x0b, 0xa1, 0x49, 0xb0, 0x55, 0x7c, 0xce, 0x72, 0x2a, 0x6a, 0xc3, + 0x18, 0xd3, 0xce, 0x32, 0x67, 0x31, 0xc7, 0x13, 0x68, 0x6c, 0x21, 0x82, 0xfa, 0x88, 0xfd, 0xa2, + 0xd8, 0xc5, 0x92, 0xb7, 0x61, 0x8a, 0x3f, 0x43, 0x9b, 0xb6, 0xc3, 0x17, 0x13, 0xdd, 0x86, 0x62, + 0x4f, 0x33, 0x44, 0x76, 0x9e, 0x14, 0x32, 0x45, 0x96, 0x59, 0xd8, 0x38, 0x27, 0x2b, 0xa7, 0x22, + 0x5e, 0x05, 0x64, 0xe5, 0x14, 0xb3, 0x71, 0xf9, 0x29, 0x94, 0xc5, 0x26, 0x85, 0x81, 0x8a, 0x17, + 0x03, 0x15, 0x53, 0x80, 0x76, 0xa1, 0xbc, 0xd9, 0x6a, 0xea, 0xa6, 0x5b, 0xab, 0xa9, 0x5a, 0xc7, + 0x8e, 0xef, 0xe0, 0xda, 0xe6, 0x3a, 0xc6, 0x9c, 0x82, 0x64, 0x18, 0x27, 0xa7, 0x2a, 0xb1, 0x1c, + 0xee, 0x47, 0x13, 0x4d, 0x60, 0xbe, 0xf1, 0x84, 0x8f, 0x60, 0x41, 0x91, 0xff, 0xb8, 0x00, 0x65, + 0xb1, 0x1c, 0x57, 0x70, 0x77, 0xdb, 0x8a, 0xdc, 0xdd, 0xde, 0xca, 0xe7, 0x1a, 0x99, 0x17, 0xb7, + 0xbd, 0xd8, 0xc5, 0xed, 0x7e, 0x4e, 0xbc, 0x8b, 0x6f, 0x6d, 0x3f, 0x28, 0xc0, 0x74, 0xd4, 0x29, + 0xd1, 0x7b, 0x30, 0xc9, 0xd2, 0x94, 0xa6, 0x92, 0x9d, 0xa0, 0x3a, 0xf6, 0x9f, 0x6e, 0xda, 0x01, + 0x09, 0x87, 0xf9, 0x50, 0xd7, 0x17, 0x63, 0x7e, 0x24, 0x26, 0x9d, 0xbd, 0xa4, 0x7d, 0x47, 0xd3, + 0xeb, 0xee, 0x07, 0x99, 0xfa, 0xa6, 0xe1, 0xec, 0xda, 0x6d, 0xc7, 0xd6, 0x8c, 0x6e, 0x42, 0x11, + 0x77, 0xca, 0x30, 0x32, 0xfa, 0x36, 0x4b, 0x99, 0xd4, 0xec, 0xdb, 0x2a, 0x49, 0x2b, 0x7d, 0xbd, + 0xb2, 0x8d, 0x1d, 0xd0, 0xce, 0x96, 0xa9, 0x2a, 0xba, 0xbb, 0x39, 0x98, 0x1c, 0x12, 0x9b, 0x18, + 0x2a, 0xf1, 0xca, 0x4d, 0x17, 0x02, 0xfb, 0x60, 0xf2, 0xdf, 0x49, 0x30, 0x29, 0xd6, 0xe2, 0x0a, + 0x2e, 0x39, 0xbf, 0x1d, 0xbd, 0xe4, 0xdc, 0xcd, 0x19, 0x39, 0xd2, 0x6f, 0x38, 0x7f, 0x15, 0x98, + 0xce, 0x62, 0x05, 0x3b, 0x2e, 0x47, 0x26, 0x75, 0xe2, 0xc7, 0x85, 0x9d, 0x72, 0xcc, 0x29, 0xa8, + 0x0f, 0xb3, 0x5a, 0x2c, 0xb8, 0x88, 0x3d, 0x6b, 0xe4, 0xb3, 0xc4, 0x17, 0x6b, 0x56, 0x05, 0xfc, + 0x6c, 0x9c, 0x82, 0x13, 0x2a, 0x64, 0x02, 0x09, 0x2e, 0xf4, 0x11, 0x94, 0x8e, 0x1c, 0xc7, 0x4a, + 0x79, 0x3e, 0x1f, 0x12, 0xd2, 0x02, 0x13, 0x2a, 0x7c, 0x76, 0x7b, 0x7b, 0x2d, 0xcc, 0xa1, 0xe4, + 0xbf, 0x2f, 0xf8, 0xeb, 0xc1, 0xef, 0x1c, 0x1f, 0xfa, 0xb3, 0x5d, 0xd3, 0x15, 0x4a, 0xb9, 0x63, + 0xbb, 0xf7, 0xe3, 0x85, 0x90, 0xe1, 0x3e, 0x0d, 0x27, 0xb8, 0xd1, 0x5e, 0x10, 0xea, 0xa5, 0xcb, + 0x84, 0xfa, 0xc9, 0xb4, 0x30, 0x8f, 0x9e, 0x41, 0xd1, 0xd1, 0xf3, 0xde, 0x73, 0x05, 0xe2, 0xde, + 0x56, 0x3b, 0x88, 0x95, 0x7b, 0x5b, 0x6d, 0xcc, 0x20, 0xd0, 0x2e, 0x8c, 0xb1, 0x74, 0xca, 0xa2, + 0x43, 0x31, 0x7f, 0xb4, 0x61, 0x2b, 0x18, 0xb8, 0x14, 0xfb, 0x45, 0xb1, 0x8b, 0x23, 0x7f, 0x0f, + 0xa6, 0x22, 0x21, 0x04, 0x7d, 0x0a, 0xd7, 0x75, 0x53, 0xe9, 0x34, 0x15, 0x5d, 0x31, 0x54, 0xe2, + 0x7d, 0xed, 0xb8, 0x9b, 0x76, 0xf6, 0xb6, 0x42, 0x7c, 0x22, 0x00, 0x2d, 0x08, 0x25, 0xd7, 0xc3, + 0x34, 0x1c, 0x41, 0x94, 0x15, 0x80, 0x60, 0x8e, 0xa8, 0x06, 0x63, 0xcc, 0x53, 0xdd, 0x54, 0x37, + 0xd1, 0x9c, 0x60, 0x16, 0x32, 0x07, 0xa6, 0xd8, 0x1d, 0x47, 0x2b, 0x00, 0x94, 0xa8, 0x36, 0x71, + 0xf8, 0x76, 0x16, 0xa2, 0x5f, 0x4c, 0xdb, 0x3e, 0x05, 0x87, 0xb8, 0xe4, 0xcf, 0x0b, 0x30, 0xb5, + 0x43, 0x9c, 0xef, 0x9b, 0xf6, 0x71, 0xcb, 0xd4, 0x35, 0x75, 0x70, 0x05, 0x79, 0x00, 0x47, 0xf2, + 0xc0, 0x3b, 0x43, 0x76, 0x26, 0x62, 0x5d, 0x66, 0x36, 0xf8, 0x38, 0x96, 0x0d, 0x56, 0x46, 0x42, + 0xbd, 0x38, 0x27, 0xfc, 0x58, 0x82, 0xa5, 0x08, 0xff, 0x93, 0x20, 0xb0, 0xec, 0xc3, 0x98, 0x65, + 0xda, 0x8e, 0x57, 0x7f, 0x8c, 0x34, 0x19, 0x16, 0xbd, 0x43, 0x15, 0x08, 0x83, 0xc1, 0x2e, 0x1a, + 0xda, 0x82, 0x82, 0x63, 0x8a, 0x63, 0x30, 0x1a, 0x26, 0x21, 0x76, 0x13, 0x04, 0x66, 0x61, 0xcf, + 0xc4, 0x05, 0xc7, 0x94, 0xff, 0x49, 0x82, 0x6a, 0x84, 0x2b, 0x1c, 0x1a, 0x5f, 0xd3, 0x0c, 0x30, + 0x94, 0x0e, 0x6d, 0xb3, 0x77, 0xe9, 0x39, 0xf8, 0x9b, 0xbc, 0x61, 0x9b, 0x3d, 0xcc, 0xb1, 0xe4, + 0x9f, 0x48, 0x30, 0x17, 0xe1, 0xbc, 0x82, 0xb4, 0xf4, 0x51, 0x34, 0x2d, 0xdd, 0x1f, 0x65, 0x22, + 0x19, 0xc9, 0xe9, 0x27, 0x85, 0xd8, 0x34, 0xd8, 0x84, 0xd1, 0x21, 0x4c, 0x5a, 0x66, 0xa7, 0xfd, + 0x0a, 0xbe, 0x9d, 0xce, 0xb0, 0x72, 0xa1, 0x15, 0x60, 0xe1, 0x30, 0x30, 0x3a, 0x85, 0x39, 0x43, + 0xe9, 0x11, 0x6a, 0x29, 0x2a, 0x69, 0xbf, 0x82, 0xd7, 0xa4, 0x1b, 0xfc, 0xe3, 0x4c, 0x1c, 0x11, + 0x27, 0x95, 0xa0, 0x6d, 0x28, 0x6b, 0x16, 0x2f, 0x5f, 0xc5, 0x21, 0x1d, 0x9a, 0xe3, 0xdd, 0x62, + 0xd7, 0xcd, 0x15, 0xe2, 0x07, 0xf6, 0x30, 0xe4, 0x7f, 0x8b, 0x7b, 0x03, 0xaf, 0x86, 0x9e, 0x42, + 0x85, 0x77, 0xb1, 0xa8, 0xa6, 0xee, 0x7d, 0x46, 0xe1, 0x17, 0x17, 0x31, 0xf6, 0xf2, 0xac, 0x76, + 0x2b, 0xe5, 0x85, 0xdc, 0x23, 0x63, 0x5f, 0x18, 0xed, 0x40, 0xc9, 0xfa, 0x65, 0x0a, 0x37, 0x9e, + 0x82, 0x79, 0xb5, 0xc6, 0x71, 0xd0, 0xaf, 0x41, 0x99, 0x18, 0x1d, 0x5e, 0x0b, 0xba, 0x6f, 0x14, + 0x7c, 0x56, 0x4f, 0xdc, 0x21, 0xec, 0xd1, 0xe4, 0x3f, 0x2c, 0xc6, 0x66, 0xc5, 0xf3, 0xf5, 0x67, + 0xaf, 0xcc, 0x39, 0xfc, 0x7a, 0x32, 0xd3, 0x41, 0x0e, 0xa0, 0x2c, 0xb2, 0xbd, 0xf0, 0xf9, 0xaf, + 0x8f, 0xe2, 0xf3, 0xe1, 0x44, 0xea, 0x5f, 0xe7, 0xbc, 0x41, 0x0f, 0x18, 0x7d, 0x17, 0xc6, 0x89, + 0xab, 0xc2, 0x4d, 0xcf, 0x8f, 0x46, 0x51, 0x11, 0x84, 0xdf, 0x20, 0x64, 0x8b, 0x31, 0x81, 0x8a, + 0xbe, 0xc9, 0xd6, 0x8b, 0xf1, 0xb2, 0xaa, 0x97, 0x56, 0x4b, 0x3c, 0x63, 0xde, 0x76, 0xa7, 0xed, + 0x0f, 0xbf, 0x3c, 0xab, 0x41, 0xf0, 0x13, 0x87, 0x25, 0xe4, 0xdf, 0x83, 0xf9, 0x94, 0x14, 0x81, + 0xd4, 0xc8, 0xc3, 0x8a, 0x1b, 0x31, 0x1b, 0xf9, 0xb6, 0x21, 0xff, 0x17, 0xc2, 0x7f, 0x91, 0x60, + 0x8e, 0xef, 0x8e, 0xda, 0xb7, 0x35, 0x67, 0x70, 0x65, 0x79, 0xf9, 0x79, 0x24, 0x2f, 0x3f, 0x1c, + 0xb2, 0x25, 0x09, 0x0b, 0xb3, 0x72, 0xb3, 0xfc, 0x53, 0x09, 0x6e, 0x24, 0xb8, 0xaf, 0x20, 0x74, + 0xef, 0x47, 0x43, 0xf7, 0x3b, 0xa3, 0x4e, 0x28, 0x23, 0x7c, 0xff, 0xf7, 0x5c, 0xca, 0x74, 0xf8, + 0x29, 0x5d, 0x01, 0xb0, 0x6c, 0xed, 0x44, 0xd3, 0x49, 0x57, 0x34, 0x35, 0x54, 0x42, 0x2d, 0x6b, + 0x3e, 0x05, 0x87, 0xb8, 0x10, 0x85, 0xc5, 0x0e, 0x39, 0x54, 0xfa, 0xba, 0xb3, 0xda, 0xe9, 0xac, + 0x29, 0x96, 0x72, 0xa0, 0xe9, 0x9a, 0xa3, 0x89, 0xe7, 0x9f, 0x89, 0xe6, 0x63, 0xb7, 0xd9, 0x20, + 0x8d, 0xe3, 0xe5, 0x59, 0xed, 0x76, 0xda, 0xd7, 0x3e, 0x8f, 0x65, 0x80, 0x33, 0xa0, 0xd1, 0x00, + 0xaa, 0x36, 0xf9, 0x5e, 0x5f, 0xb3, 0x49, 0x67, 0xdd, 0x36, 0xad, 0x88, 0xda, 0x22, 0x57, 0xfb, + 0x5b, 0xe7, 0x67, 0xb5, 0x2a, 0xce, 0xe0, 0x19, 0xae, 0x38, 0x13, 0x1e, 0x7d, 0x06, 0xf3, 0x8a, + 0x68, 0x2e, 0x0c, 0x6b, 0x75, 0x4f, 0xe8, 0xfb, 0xe7, 0x67, 0xb5, 0xf9, 0xd5, 0x24, 0x79, 0xb8, + 0xc2, 0x34, 0x50, 0xd4, 0x80, 0xf2, 0x09, 0xef, 0x43, 0xa4, 0xd5, 0x31, 0x8e, 0xcf, 0x72, 0x55, + 0xd9, 0x6d, 0x4d, 0x64, 0x98, 0xe3, 0x1b, 0x6d, 0x7e, 0xf2, 0x3d, 0x2e, 0x76, 0xd5, 0x67, 0xa5, + 0xb4, 0x38, 0xf9, 0xfc, 0x0b, 0x40, 0x25, 0x88, 0x98, 0xcf, 0x02, 0x12, 0x0e, 0xf3, 0xa1, 0x4f, + 0x60, 0xe2, 0x48, 0xbc, 0x17, 0xd1, 0x6a, 0x39, 0x57, 0x9d, 0x10, 0x79, 0x5f, 0x6a, 0xce, 0x09, + 0x15, 0x13, 0xde, 0x30, 0xc5, 0x01, 0x22, 0x7a, 0x13, 0xca, 0xfc, 0xc7, 0xe6, 0x3a, 0x7f, 0x5e, + 0xad, 0x04, 0x71, 0xf5, 0x99, 0x3b, 0x8c, 0x3d, 0xba, 0xc7, 0xba, 0xd9, 0x5a, 0xe3, 0xcf, 0xfc, + 0x31, 0xd6, 0xcd, 0xd6, 0x1a, 0xf6, 0xe8, 0xe8, 0x53, 0x28, 0x53, 0xb2, 0xa5, 0x19, 0xfd, 0xd3, + 0x2a, 0xe4, 0x6a, 0x12, 0x68, 0x3f, 0xe1, 0xdc, 0xb1, 0x87, 0xce, 0x40, 0x83, 0xa0, 0x63, 0x0f, + 0x16, 0x1d, 0xc1, 0x84, 0xdd, 0x37, 0x56, 0xe9, 0x3e, 0x25, 0x76, 0x75, 0x92, 0xeb, 0x18, 0x96, + 0x4a, 0xb0, 0xc7, 0x1f, 0xd7, 0xe2, 0xaf, 0x90, 0xcf, 0x81, 0x03, 0x70, 0x74, 0x04, 0xc0, 0x7f, + 0xf0, 0x37, 0xd5, 0xea, 0x22, 0x57, 0xf5, 0x7e, 0x1e, 0x55, 0x69, 0x4f, 0xb7, 0xe2, 0xbb, 0x8a, + 0x4f, 0xc6, 0x21, 0x6c, 0xf4, 0x47, 0x12, 0x20, 0xda, 0xb7, 0x2c, 0x9d, 0xf4, 0x88, 0xe1, 0x28, + 0x3a, 0x1f, 0xa5, 0xd5, 0xeb, 0x5c, 0xe5, 0x87, 0xc3, 0x56, 0x30, 0x21, 0x18, 0x57, 0xed, 0x7f, + 0x2e, 0x49, 0xb2, 0xe2, 0x14, 0xbd, 0x6c, 0x13, 0x0f, 0xc5, 0xac, 0xa7, 0x72, 0x6d, 0x62, 0xfa, + 0x6b, 0x75, 0xb0, 0x89, 0x82, 0x8e, 0x3d, 0x58, 0xf4, 0x1c, 0x16, 0xbd, 0x86, 0x59, 0x6c, 0x9a, + 0xce, 0x86, 0xa6, 0x13, 0x3a, 0xa0, 0x0e, 0xe9, 0x55, 0xa7, 0xb9, 0x83, 0xf9, 0x5d, 0x43, 0x38, + 0x95, 0x0b, 0x67, 0x48, 0xa3, 0x1e, 0xd4, 0xbc, 0xe0, 0xc4, 0x4e, 0xae, 0x1f, 0x1d, 0x9f, 0x50, + 0x55, 0xd1, 0xdd, 0x2f, 0x48, 0x33, 0x5c, 0xc1, 0x1b, 0xe7, 0x67, 0xb5, 0xda, 0xfa, 0xc5, 0xac, + 0x78, 0x18, 0x16, 0xfa, 0x0e, 0x54, 0x95, 0x2c, 0x3d, 0xb3, 0x5c, 0xcf, 0x57, 0x59, 0xc4, 0xcb, + 0x54, 0x90, 0x29, 0x8d, 0x1c, 0x98, 0x55, 0xa2, 0xad, 0xcb, 0xb4, 0x3a, 0x97, 0xeb, 0x31, 0x3a, + 0xd6, 0xf1, 0x1c, 0xbc, 0x1b, 0xc5, 0x08, 0x14, 0x27, 0x34, 0xa0, 0xdf, 0x07, 0xa4, 0xc4, 0xbb, + 0xad, 0x69, 0x15, 0xe5, 0x4a, 0x74, 0x89, 0x36, 0xed, 0xc0, 0xed, 0x12, 0x24, 0x8a, 0x53, 0xf4, + 0xb0, 0x3b, 0x84, 0x12, 0xeb, 0x10, 0xa7, 0xd5, 0xa5, 0x44, 0x35, 0x74, 0x81, 0x72, 0x5f, 0x2e, + 0xf4, 0xa1, 0x2c, 0x8e, 0x88, 0x93, 0x4a, 0xd0, 0x16, 0x2c, 0x88, 0xc1, 0x7d, 0x83, 0x2a, 0x87, + 0xa4, 0x3d, 0xa0, 0xaa, 0xa3, 0xd3, 0xea, 0x3c, 0x8f, 0xef, 0xfc, 0x63, 0xed, 0x6a, 0x0a, 0x1d, + 0xa7, 0x4a, 0xa1, 0x0f, 0x61, 0xf6, 0xd0, 0xb4, 0x0f, 0xb4, 0x4e, 0x87, 0x18, 0x1e, 0xd2, 0x02, + 0x47, 0xe2, 0xcf, 0x60, 0x1b, 0x31, 0x1a, 0x4e, 0x70, 0x23, 0x0a, 0x37, 0x04, 0x72, 0xcb, 0x36, + 0xd5, 0x6d, 0xb3, 0x6f, 0x38, 0x6e, 0xc9, 0x79, 0xc3, 0x4f, 0xa3, 0x37, 0x56, 0xd3, 0x18, 0x5e, + 0x9e, 0xd5, 0xee, 0xa4, 0x5f, 0x44, 0x02, 0x26, 0x9c, 0x8e, 0x8d, 0x2c, 0xb8, 0x2e, 0xfa, 0xfe, + 0xf9, 0x7b, 0x5c, 0xb5, 0xca, 0x8f, 0xfe, 0x07, 0xc3, 0x03, 0x9e, 0x2f, 0x12, 0x3f, 0xff, 0xb3, + 0xe7, 0x67, 0xb5, 0xeb, 0x61, 0x06, 0x1c, 0xd1, 0xc0, 0xfb, 0xbc, 0xc4, 0xd7, 0xc5, 0xab, 0xe9, + 0x95, 0x1f, 0xad, 0xcf, 0x2b, 0x30, 0xed, 0x95, 0xf5, 0x79, 0x85, 0x20, 0x2f, 0x7e, 0x1d, 0xfa, + 0xaf, 0x02, 0xcc, 0x07, 0xcc, 0xb9, 0xfb, 0xbc, 0x52, 0x44, 0x7e, 0xd5, 0x2f, 0x9f, 0xaf, 0xf7, + 0x2a, 0x58, 0xba, 0xff, 0x7b, 0xbd, 0x57, 0x81, 0x6d, 0x19, 0xb7, 0x87, 0xbf, 0x29, 0x84, 0x27, + 0x30, 0x62, 0x03, 0xd0, 0x2b, 0x68, 0x19, 0xff, 0xd2, 0xf5, 0x10, 0xc9, 0x3f, 0x2d, 0xc2, 0x6c, + 0xfc, 0x34, 0x46, 0xfa, 0x44, 0xa4, 0xa1, 0x7d, 0x22, 0x2d, 0x58, 0x38, 0xec, 0xeb, 0xfa, 0x80, + 0xcf, 0x21, 0xd4, 0x2c, 0xe2, 0x7e, 0xb1, 0xfd, 0xaa, 0x90, 0x5c, 0xd8, 0x48, 0xe1, 0xc1, 0xa9, + 0x92, 0xc9, 0xb6, 0x91, 0xd2, 0x2f, 0xdb, 0x36, 0x32, 0x76, 0x89, 0xb6, 0x91, 0xf4, 0xce, 0x9b, + 0xe2, 0xa5, 0x3a, 0x6f, 0x2e, 0xd3, 0x33, 0x92, 0x12, 0xc4, 0x86, 0xbe, 0x6e, 0x7c, 0x03, 0xa6, + 0xa3, 0x7d, 0x4c, 0xee, 0x5e, 0xba, 0xad, 0x54, 0xe2, 0xcb, 0x78, 0x68, 0x2f, 0xdd, 0x71, 0xec, + 0x73, 0xc8, 0xe7, 0x12, 0x2c, 0xa6, 0xf7, 0x2b, 0x23, 0x1d, 0xa6, 0x7b, 0xca, 0x69, 0xb8, 0x87, + 0x5c, 0xba, 0xe4, 0xe3, 0x1d, 0x6f, 0x60, 0xd9, 0x8e, 0x60, 0xe1, 0x18, 0x36, 0xfa, 0x18, 0x2a, + 0x3d, 0xe5, 0xb4, 0xdd, 0xb7, 0xbb, 0xe4, 0xd2, 0x8f, 0x84, 0xfc, 0x18, 0x6d, 0x0b, 0x14, 0xec, + 0xe3, 0xc9, 0xbf, 0x90, 0x60, 0x29, 0xa3, 0x2d, 0xe5, 0xff, 0xd1, 0x2c, 0xff, 0x52, 0x82, 0xaf, + 0x64, 0x5e, 0xc3, 0xd0, 0xa3, 0x48, 0x07, 0x8d, 0x1c, 0xeb, 0xa0, 0x41, 0x49, 0xc1, 0xd7, 0xd4, + 0x40, 0xf3, 0xb9, 0x04, 0xd5, 0xac, 0x7b, 0x29, 0x7a, 0x2f, 0x62, 0xe4, 0xd7, 0x62, 0x46, 0xce, + 0x25, 0xe4, 0x5e, 0x93, 0x8d, 0xff, 0x2a, 0xc1, 0xad, 0x0b, 0xea, 0x3b, 0xff, 0xfa, 0x43, 0x3a, + 0x61, 0x2e, 0xfe, 0x6a, 0x2f, 0x3e, 0x27, 0x06, 0xd7, 0x9f, 0x14, 0x1e, 0x9c, 0x29, 0x8d, 0xf6, + 0x61, 0x49, 0xdc, 0xbd, 0xe2, 0x34, 0x51, 0xba, 0xf0, 0x46, 0xc3, 0xf5, 0x74, 0x16, 0x9c, 0x25, + 0x2b, 0xff, 0xb5, 0x04, 0x8b, 0xe9, 0x0f, 0x0e, 0xe8, 0xdd, 0xc8, 0x92, 0xd7, 0x62, 0x4b, 0x3e, + 0x13, 0x93, 0x12, 0x0b, 0xfe, 0x5d, 0x98, 0x16, 0xcf, 0x12, 0x02, 0x46, 0x38, 0xb3, 0x9c, 0x96, + 0x9d, 0x04, 0x84, 0x57, 0x1c, 0xf3, 0x63, 0x12, 0x1d, 0xc3, 0x31, 0x34, 0xf9, 0x07, 0x05, 0x18, + 0x6b, 0xab, 0x8a, 0x4e, 0xae, 0xa0, 0x36, 0xfe, 0x56, 0xa4, 0x36, 0x1e, 0xf6, 0x27, 0x7c, 0xdc, + 0xaa, 0xcc, 0xb2, 0x18, 0xc7, 0xca, 0xe2, 0xb7, 0x72, 0xa1, 0x5d, 0x5c, 0x11, 0xff, 0x26, 0x4c, + 0xf8, 0x4a, 0x47, 0x4b, 0xd4, 0xf2, 0x5f, 0x14, 0x60, 0x32, 0xa4, 0x62, 0xc4, 0x34, 0x7f, 0x18, + 0xa9, 0x6d, 0x8a, 0x39, 0x1e, 0x81, 0x42, 0xba, 0xea, 0x5e, 0x35, 0xe3, 0xb6, 0xa0, 0x07, 0x4d, + 0xc7, 0xc9, 0x22, 0xe7, 0x1b, 0x30, 0xed, 0x28, 0x76, 0x97, 0x38, 0xfe, 0x07, 0x19, 0xb7, 0x45, + 0xce, 0xff, 0x5b, 0x88, 0xbd, 0x08, 0x15, 0xc7, 0xb8, 0x6f, 0x3e, 0x86, 0xa9, 0x88, 0xb2, 0x91, + 0x3a, 0xc8, 0xff, 0x56, 0x82, 0xaf, 0x0d, 0x7d, 0x48, 0x42, 0xcd, 0xc8, 0x21, 0xa9, 0xc7, 0x0e, + 0xc9, 0x72, 0x36, 0xc0, 0xeb, 0xeb, 0x44, 0x6c, 0xae, 0xbd, 0xf8, 0x62, 0xf9, 0xda, 0xcf, 0xbe, + 0x58, 0xbe, 0xf6, 0xf3, 0x2f, 0x96, 0xaf, 0xfd, 0xc1, 0xf9, 0xb2, 0xf4, 0xe2, 0x7c, 0x59, 0xfa, + 0xd9, 0xf9, 0xb2, 0xf4, 0xf3, 0xf3, 0x65, 0xe9, 0x3f, 0xce, 0x97, 0xa5, 0x3f, 0xf9, 0xc5, 0xf2, + 0xb5, 0x8f, 0x6f, 0x5f, 0xf8, 0x27, 0xff, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x9b, 0x34, 0xc8, + 0x81, 0x2b, 0x40, 0x00, 0x00, } func (m *AllowedCSIDriver) Marshal() (dAtA []byte, err error) { @@ -3359,6 +3390,16 @@ func (m *NetworkPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a { size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -3707,6 +3748,43 @@ func (m *NetworkPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *NetworkPolicyStatus) 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 *NetworkPolicyStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *PodSecurityPolicy) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -5332,6 +5410,8 @@ func (m *NetworkPolicy) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = m.Spec.Size() n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -5464,6 +5544,21 @@ func (m *NetworkPolicySpec) Size() (n int) { return n } +func (m *NetworkPolicyStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *PodSecurityPolicy) Size() (n int) { if m == nil { return 0 @@ -6293,6 +6388,7 @@ func (this *NetworkPolicy) String() string { s := strings.Join([]string{`&NetworkPolicy{`, `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NetworkPolicySpec", "NetworkPolicySpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NetworkPolicyStatus", "NetworkPolicyStatus", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -6402,6 +6498,21 @@ func (this *NetworkPolicySpec) String() string { }, "") return s } +func (this *NetworkPolicyStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&NetworkPolicyStatus{`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} func (this *PodSecurityPolicy) String() string { if this == nil { return "nil" @@ -11148,6 +11259,39 @@ func (m *NetworkPolicy) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -12002,6 +12146,90 @@ func (m *NetworkPolicySpec) Unmarshal(dAtA []byte) error { } return nil } +func (m *NetworkPolicyStatus) 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: NetworkPolicyStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NetworkPolicyStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PodSecurityPolicy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/api/extensions/v1beta1/generated.proto b/staging/src/k8s.io/api/extensions/v1beta1/generated.proto index e4cf9b6ca736..eaa63b59fa42 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/extensions/v1beta1/generated.proto @@ -664,6 +664,11 @@ message NetworkPolicy { // Specification of the desired behavior for this NetworkPolicy. // +optional optional NetworkPolicySpec spec = 2; + + // Status is the current state of the NetworkPolicy. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional NetworkPolicyStatus status = 3; } // DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. @@ -813,6 +818,18 @@ message NetworkPolicySpec { repeated string policyTypes = 4; } +// NetworkPolicyStatus describe the current state of the NetworkPolicy. +message NetworkPolicyStatus { + // Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. + // Current service state + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 1; +} + // PodSecurityPolicy governs the ability to make requests that affect the Security Context // that will be applied to a pod and container. // Deprecated: use PodSecurityPolicy from policy API Group instead. diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go index d70303fa8c46..cf924b5897c2 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go @@ -365,6 +365,7 @@ var map_NetworkPolicy = map[string]string{ "": "DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Specification of the desired behavior for this NetworkPolicy.", + "status": "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (NetworkPolicy) SwaggerDoc() map[string]string { @@ -435,6 +436,15 @@ func (NetworkPolicySpec) SwaggerDoc() map[string]string { return map_NetworkPolicySpec } +var map_NetworkPolicyStatus = map[string]string{ + "": "NetworkPolicyStatus describe the current state of the NetworkPolicy.", + "conditions": "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state", +} + +func (NetworkPolicyStatus) SwaggerDoc() map[string]string { + return map_NetworkPolicyStatus +} + var map_PodSecurityPolicy = map[string]string{ "": "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", diff --git a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go index e0961588e067..9c1c8421c310 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go @@ -759,6 +759,7 @@ func (in *NetworkPolicy) DeepCopyInto(out *NetworkPolicy) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) return } @@ -971,6 +972,29 @@ func (in *NetworkPolicySpec) DeepCopy() *NetworkPolicySpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkPolicyStatus) DeepCopyInto(out *NetworkPolicyStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPolicyStatus. +func (in *NetworkPolicyStatus) DeepCopy() *NetworkPolicyStatus { + if in == nil { + return nil + } + out := new(NetworkPolicyStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodSecurityPolicy) DeepCopyInto(out *PodSecurityPolicy) { *out = *in diff --git a/staging/src/k8s.io/api/networking/v1/generated.pb.go b/staging/src/k8s.io/api/networking/v1/generated.pb.go index 90abf64c6e26..631acbf9357b 100644 --- a/staging/src/k8s.io/api/networking/v1/generated.pb.go +++ b/staging/src/k8s.io/api/networking/v1/generated.pb.go @@ -692,10 +692,38 @@ func (m *NetworkPolicySpec) XXX_DiscardUnknown() { var xxx_messageInfo_NetworkPolicySpec proto.InternalMessageInfo +func (m *NetworkPolicyStatus) Reset() { *m = NetworkPolicyStatus{} } +func (*NetworkPolicyStatus) ProtoMessage() {} +func (*NetworkPolicyStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_1c72867a70a7cc90, []int{23} +} +func (m *NetworkPolicyStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NetworkPolicyStatus) 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 *NetworkPolicyStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_NetworkPolicyStatus.Merge(m, src) +} +func (m *NetworkPolicyStatus) XXX_Size() int { + return m.Size() +} +func (m *NetworkPolicyStatus) XXX_DiscardUnknown() { + xxx_messageInfo_NetworkPolicyStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_NetworkPolicyStatus proto.InternalMessageInfo + func (m *ServiceBackendPort) Reset() { *m = ServiceBackendPort{} } func (*ServiceBackendPort) ProtoMessage() {} func (*ServiceBackendPort) Descriptor() ([]byte, []int) { - return fileDescriptor_1c72867a70a7cc90, []int{23} + return fileDescriptor_1c72867a70a7cc90, []int{24} } func (m *ServiceBackendPort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -744,6 +772,7 @@ func init() { proto.RegisterType((*NetworkPolicyPeer)(nil), "k8s.io.api.networking.v1.NetworkPolicyPeer") proto.RegisterType((*NetworkPolicyPort)(nil), "k8s.io.api.networking.v1.NetworkPolicyPort") proto.RegisterType((*NetworkPolicySpec)(nil), "k8s.io.api.networking.v1.NetworkPolicySpec") + proto.RegisterType((*NetworkPolicyStatus)(nil), "k8s.io.api.networking.v1.NetworkPolicyStatus") proto.RegisterType((*ServiceBackendPort)(nil), "k8s.io.api.networking.v1.ServiceBackendPort") } @@ -752,104 +781,107 @@ func init() { } var fileDescriptor_1c72867a70a7cc90 = []byte{ - // 1546 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4d, 0x6f, 0x1b, 0xc5, - 0x1b, 0xcf, 0x3a, 0x71, 0xec, 0x3c, 0x4e, 0xd2, 0x74, 0xfe, 0xad, 0xfe, 0x56, 0x11, 0x76, 0x58, + // 1589 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xcf, 0x3a, 0x71, 0xec, 0x3c, 0x27, 0x69, 0x3a, 0x6d, 0xf5, 0xb5, 0xfa, 0x15, 0x76, 0x58, 0xd1, 0x36, 0x50, 0x6a, 0xd3, 0xb4, 0x42, 0x70, 0x01, 0xba, 0x69, 0x9b, 0x86, 0xa6, 0x89, 0x35, - 0xb6, 0x8a, 0x40, 0x80, 0x3a, 0x59, 0x4f, 0x9c, 0xad, 0xd7, 0x3b, 0xcb, 0xec, 0x38, 0xb4, 0x37, - 0x2e, 0x1c, 0xb8, 0xf1, 0x15, 0xf8, 0x08, 0x08, 0x6e, 0x08, 0x0a, 0x17, 0xd4, 0x63, 0x25, 0x2e, - 0xbd, 0x60, 0x51, 0xf3, 0x2d, 0x72, 0x42, 0x33, 0x3b, 0xfb, 0x62, 0x3b, 0xc6, 0x56, 0x55, 0xe5, - 0x94, 0xec, 0xf3, 0xf2, 0x7b, 0x5e, 0xe6, 0x79, 0x99, 0x31, 0x5c, 0x6f, 0xbf, 0x1b, 0x54, 0x1c, - 0x56, 0x6d, 0x77, 0xf7, 0x28, 0xf7, 0xa8, 0xa0, 0x41, 0xf5, 0x90, 0x7a, 0x4d, 0xc6, 0xab, 0x9a, - 0x41, 0x7c, 0xa7, 0xea, 0x51, 0xf1, 0x15, 0xe3, 0x6d, 0xc7, 0x6b, 0x55, 0x0f, 0xaf, 0x54, 0x5b, - 0xd4, 0xa3, 0x9c, 0x08, 0xda, 0xac, 0xf8, 0x9c, 0x09, 0x86, 0x8a, 0xa1, 0x64, 0x85, 0xf8, 0x4e, - 0x25, 0x91, 0xac, 0x1c, 0x5e, 0x39, 0x77, 0xb9, 0xe5, 0x88, 0x83, 0xee, 0x5e, 0xc5, 0x66, 0x9d, - 0x6a, 0x8b, 0xb5, 0x58, 0x55, 0x29, 0xec, 0x75, 0xf7, 0xd5, 0x97, 0xfa, 0x50, 0xff, 0x85, 0x40, - 0xe7, 0xcc, 0x94, 0x49, 0x9b, 0x71, 0x7a, 0x8c, 0xb1, 0x73, 0xd7, 0x12, 0x99, 0x0e, 0xb1, 0x0f, - 0x1c, 0x8f, 0xf2, 0x47, 0x55, 0xbf, 0xdd, 0x92, 0x84, 0xa0, 0xda, 0xa1, 0x82, 0x1c, 0xa7, 0x55, - 0x1d, 0xa7, 0xc5, 0xbb, 0x9e, 0x70, 0x3a, 0x74, 0x44, 0xe1, 0x9d, 0x49, 0x0a, 0x81, 0x7d, 0x40, - 0x3b, 0x64, 0x44, 0xef, 0xea, 0x38, 0xbd, 0xae, 0x70, 0xdc, 0xaa, 0xe3, 0x89, 0x40, 0xf0, 0x61, - 0x25, 0xf3, 0x57, 0x03, 0x4e, 0xdd, 0x6e, 0x34, 0x6a, 0x5b, 0x5e, 0x8b, 0xd3, 0x20, 0xa8, 0x11, - 0x71, 0x80, 0x56, 0x61, 0xce, 0x27, 0xe2, 0xa0, 0x68, 0xac, 0x1a, 0x6b, 0x0b, 0xd6, 0xe2, 0x93, - 0x5e, 0x79, 0xa6, 0xdf, 0x2b, 0xcf, 0x49, 0x1e, 0x56, 0x1c, 0x74, 0x0d, 0xf2, 0xf2, 0x6f, 0xe3, - 0x91, 0x4f, 0x8b, 0xb3, 0x4a, 0xaa, 0xd8, 0xef, 0x95, 0xf3, 0x35, 0x4d, 0x3b, 0x4a, 0xfd, 0x8f, - 0x63, 0x49, 0x54, 0x87, 0xdc, 0x1e, 0xb1, 0xdb, 0xd4, 0x6b, 0x16, 0x33, 0xab, 0xc6, 0x5a, 0x61, - 0x7d, 0xad, 0x32, 0xee, 0xf8, 0x2a, 0xda, 0x1f, 0x2b, 0x94, 0xb7, 0x4e, 0x69, 0x27, 0x72, 0x9a, - 0x80, 0x23, 0x24, 0x73, 0x1f, 0xce, 0xa4, 0xfc, 0xc7, 0x5d, 0x97, 0xde, 0x23, 0x6e, 0x97, 0xa2, - 0x1d, 0xc8, 0x4a, 0xc3, 0x41, 0xd1, 0x58, 0x9d, 0x5d, 0x2b, 0xac, 0xbf, 0x31, 0xde, 0xd4, 0x50, - 0xf8, 0xd6, 0x92, 0xb6, 0x95, 0x95, 0x5f, 0x01, 0x0e, 0x61, 0xcc, 0x5d, 0xc8, 0x6d, 0xd5, 0x2c, - 0x97, 0xd9, 0x6d, 0x99, 0x1f, 0xdb, 0x69, 0xf2, 0xe1, 0xfc, 0x6c, 0x6c, 0xdd, 0xc0, 0x58, 0x71, - 0x90, 0x09, 0xf3, 0xf4, 0xa1, 0x4d, 0x7d, 0x51, 0xcc, 0xac, 0xce, 0xae, 0x2d, 0x58, 0xd0, 0xef, - 0x95, 0xe7, 0x6f, 0x2a, 0x0a, 0xd6, 0x1c, 0xf3, 0x9b, 0x0c, 0xe4, 0xb4, 0x59, 0x74, 0x1f, 0xf2, - 0xb2, 0x7c, 0x9a, 0x44, 0x10, 0x85, 0x5a, 0x58, 0x7f, 0x3b, 0xe5, 0x6f, 0x7c, 0x9a, 0x15, 0xbf, - 0xdd, 0x92, 0x84, 0xa0, 0x22, 0xa5, 0xa5, 0xef, 0xbb, 0x7b, 0x0f, 0xa8, 0x2d, 0xee, 0x52, 0x41, - 0x2c, 0xa4, 0xfd, 0x80, 0x84, 0x86, 0x63, 0x54, 0xb4, 0x09, 0x73, 0x81, 0x4f, 0x6d, 0x9d, 0xf8, - 0xf3, 0x13, 0x13, 0x5f, 0xf7, 0xa9, 0x9d, 0x84, 0x26, 0xbf, 0xb0, 0x02, 0x40, 0xbb, 0x30, 0x1f, - 0x08, 0x22, 0xba, 0x81, 0x3a, 0xf8, 0xc2, 0xfa, 0xc5, 0xc9, 0x50, 0x4a, 0xdc, 0x5a, 0xd6, 0x60, - 0xf3, 0xe1, 0x37, 0xd6, 0x30, 0xe6, 0xef, 0x06, 0x2c, 0x0f, 0x9e, 0x36, 0xba, 0x07, 0xb9, 0x80, - 0xf2, 0x43, 0xc7, 0xa6, 0xc5, 0x39, 0x65, 0xa4, 0x3a, 0xd9, 0x48, 0x28, 0x1f, 0xd5, 0x4b, 0x41, - 0xd6, 0x8a, 0xa6, 0xe1, 0x08, 0x0c, 0x7d, 0x0c, 0x79, 0x4e, 0x03, 0xd6, 0xe5, 0x36, 0xd5, 0xde, - 0x5f, 0x4e, 0x03, 0xcb, 0xbe, 0x97, 0x90, 0xb2, 0x58, 0x9b, 0xdb, 0xcc, 0x26, 0x6e, 0x98, 0x4a, - 0x4c, 0xf7, 0x29, 0xa7, 0x9e, 0x4d, 0xad, 0x45, 0x59, 0xe5, 0x58, 0x43, 0xe0, 0x18, 0x4c, 0x76, - 0xd1, 0xa2, 0x76, 0x64, 0xc3, 0x25, 0x27, 0x72, 0xa0, 0xdb, 0x03, 0x07, 0xfa, 0xe6, 0xc4, 0x04, - 0x29, 0xbf, 0xc6, 0x9d, 0xaa, 0xf9, 0x8b, 0x01, 0x2b, 0x69, 0xc1, 0x6d, 0x27, 0x10, 0xe8, 0xb3, - 0x91, 0x20, 0x2a, 0xd3, 0x05, 0x21, 0xb5, 0x55, 0x08, 0x2b, 0xda, 0x54, 0x3e, 0xa2, 0xa4, 0x02, - 0xb8, 0x03, 0x59, 0x47, 0xd0, 0x4e, 0xa0, 0x5a, 0xa4, 0xb0, 0x7e, 0x61, 0xba, 0x08, 0x92, 0xee, - 0xdc, 0x92, 0xca, 0x38, 0xc4, 0x30, 0xff, 0x32, 0xa0, 0x9c, 0x16, 0xab, 0x11, 0x4e, 0x3a, 0x54, - 0x50, 0x1e, 0xc4, 0x87, 0x87, 0xd6, 0x20, 0x4f, 0x6a, 0x5b, 0x9b, 0x9c, 0x75, 0xfd, 0xa8, 0x75, - 0xa5, 0x6b, 0xd7, 0x35, 0x0d, 0xc7, 0x5c, 0xd9, 0xe0, 0x6d, 0x47, 0x4f, 0xa9, 0x54, 0x83, 0xdf, - 0x71, 0xbc, 0x26, 0x56, 0x1c, 0x29, 0xe1, 0x91, 0x4e, 0x34, 0xfc, 0x62, 0x89, 0x1d, 0xd2, 0xa1, - 0x58, 0x71, 0x50, 0x19, 0xb2, 0x81, 0xcd, 0xfc, 0xb0, 0x82, 0x17, 0xac, 0x05, 0xe9, 0x72, 0x5d, - 0x12, 0x70, 0x48, 0x47, 0x97, 0x60, 0x41, 0x0a, 0x06, 0x3e, 0xb1, 0x69, 0x31, 0xab, 0x84, 0x96, - 0xfa, 0xbd, 0xf2, 0xc2, 0x4e, 0x44, 0xc4, 0x09, 0xdf, 0xfc, 0x61, 0xe8, 0x7c, 0xe4, 0xd1, 0xa1, - 0x75, 0x00, 0x9b, 0x79, 0x82, 0x33, 0xd7, 0xa5, 0xd1, 0x34, 0x8a, 0x8b, 0x66, 0x23, 0xe6, 0xe0, - 0x94, 0x14, 0x72, 0x00, 0xfc, 0x38, 0x37, 0xba, 0x78, 0xde, 0x9b, 0x2e, 0xf5, 0xc7, 0xe4, 0xd4, - 0x5a, 0x96, 0xa6, 0x52, 0x8c, 0x14, 0xb8, 0xf9, 0xa3, 0x01, 0x05, 0xad, 0x7f, 0x02, 0xe5, 0x74, - 0x6b, 0xb0, 0x9c, 0x5e, 0x9b, 0xbc, 0x5a, 0x8e, 0xaf, 0xa4, 0xef, 0x13, 0xaf, 0xe5, 0x32, 0x91, - 0x27, 0x7d, 0xc0, 0x02, 0x31, 0x3c, 0xec, 0x6f, 0xb3, 0x40, 0x60, 0xc5, 0x41, 0x3e, 0xac, 0x38, - 0x43, 0xdb, 0x67, 0xea, 0xae, 0x8c, 0x35, 0xac, 0xa2, 0x46, 0x5e, 0x19, 0xe6, 0xe0, 0x11, 0x74, - 0xf3, 0x3e, 0x8c, 0x48, 0xc9, 0x79, 0x70, 0x20, 0x84, 0x7f, 0x4c, 0x66, 0xc7, 0xaf, 0xbb, 0xc4, - 0x7a, 0x5e, 0xc5, 0xd4, 0x68, 0xd4, 0xb0, 0x42, 0x31, 0xbf, 0x35, 0xe0, 0xec, 0xb1, 0x93, 0x35, - 0xae, 0x7c, 0x63, 0x6c, 0xe5, 0xef, 0xc0, 0x9c, 0xcf, 0xb8, 0xd0, 0x39, 0x78, 0x6b, 0xbc, 0x27, - 0x83, 0xc8, 0x35, 0xc6, 0x45, 0xea, 0xb2, 0xc1, 0xb8, 0xc0, 0x0a, 0xc7, 0xfc, 0x23, 0x13, 0x9f, - 0x88, 0x2a, 0xfb, 0x0f, 0xe3, 0x7c, 0xab, 0xb2, 0x94, 0x96, 0x75, 0x93, 0x9d, 0x49, 0xe5, 0x2f, - 0xe6, 0xe1, 0x11, 0x69, 0xd4, 0x84, 0xe5, 0x26, 0xdd, 0x27, 0x5d, 0x57, 0x68, 0xdb, 0x3a, 0x6b, - 0xd3, 0xdf, 0x47, 0x50, 0xbf, 0x57, 0x5e, 0xbe, 0x31, 0x80, 0x81, 0x87, 0x30, 0xd1, 0x06, 0xcc, - 0x0a, 0x37, 0xaa, 0xc7, 0xd7, 0x27, 0x42, 0x37, 0xb6, 0xeb, 0x56, 0x41, 0x87, 0x3f, 0xdb, 0xd8, - 0xae, 0x63, 0xa9, 0x8d, 0x3e, 0x82, 0x2c, 0xef, 0xba, 0x54, 0x6e, 0xdb, 0xd9, 0xa9, 0x16, 0xb7, - 0x3c, 0xd3, 0xa4, 0xb4, 0xe5, 0x57, 0x80, 0x43, 0x08, 0xf3, 0x4b, 0x58, 0x1a, 0x58, 0xc9, 0xe8, - 0x3e, 0x2c, 0xba, 0x8c, 0x34, 0x2d, 0xe2, 0x12, 0xcf, 0xd6, 0x23, 0x64, 0x68, 0x12, 0x47, 0x3b, - 0x71, 0x3b, 0x25, 0xa7, 0x17, 0xfa, 0x19, 0x6d, 0x64, 0x31, 0xcd, 0xc3, 0x03, 0x88, 0x26, 0x01, - 0x48, 0xc2, 0x93, 0x33, 0x51, 0x76, 0x4c, 0x78, 0x27, 0xd3, 0x33, 0x51, 0x36, 0x52, 0x80, 0x43, - 0xba, 0x9c, 0x68, 0x01, 0xb5, 0x39, 0x15, 0xea, 0x50, 0x33, 0x83, 0x13, 0xad, 0x1e, 0x73, 0x70, - 0x4a, 0xca, 0xfc, 0xcd, 0x80, 0xa5, 0x9d, 0x30, 0x13, 0x35, 0xe6, 0x3a, 0xf6, 0xa3, 0x13, 0x58, - 0xbe, 0x77, 0x07, 0x96, 0xef, 0xa5, 0xf1, 0x87, 0x32, 0xe0, 0xd8, 0xd8, 0xed, 0xfb, 0x93, 0x01, - 0xff, 0x1f, 0x90, 0xbc, 0x99, 0xcc, 0x9f, 0x1a, 0x64, 0x65, 0x17, 0x44, 0xf7, 0xd8, 0x69, 0x6d, - 0xa9, 0x6e, 0x4a, 0x6e, 0xb2, 0x12, 0x01, 0x87, 0x40, 0x68, 0x13, 0x32, 0x82, 0xe9, 0xb2, 0x9c, - 0x1a, 0x8e, 0x52, 0x6e, 0x81, 0x86, 0xcb, 0x34, 0x18, 0xce, 0x08, 0x66, 0xfe, 0x6c, 0x40, 0x71, - 0x40, 0x2a, 0x3d, 0x37, 0x5f, 0xbe, 0xdf, 0x77, 0x61, 0x6e, 0x9f, 0xb3, 0xce, 0x8b, 0x78, 0x1e, - 0x27, 0xfd, 0x16, 0x67, 0x1d, 0xac, 0x60, 0xcc, 0xc7, 0x06, 0x9c, 0x1e, 0x90, 0x3c, 0x81, 0x25, - 0xb5, 0x3d, 0xb8, 0xa4, 0x2e, 0x4e, 0x19, 0xc3, 0x98, 0x55, 0xf5, 0x38, 0x33, 0x14, 0x81, 0x8c, - 0x15, 0xed, 0x43, 0xc1, 0x67, 0xcd, 0x3a, 0x75, 0xa9, 0x2d, 0x58, 0xd4, 0xd3, 0x57, 0xa7, 0x0c, - 0x82, 0xec, 0x51, 0x37, 0x52, 0xb5, 0x4e, 0xf5, 0x7b, 0xe5, 0x42, 0x2d, 0xc1, 0xc2, 0x69, 0x60, - 0xf4, 0x10, 0x4e, 0xc7, 0xf7, 0x93, 0xd8, 0x5a, 0xe6, 0xc5, 0xad, 0x9d, 0xed, 0xf7, 0xca, 0xa7, - 0x77, 0x86, 0x11, 0xf1, 0xa8, 0x11, 0x74, 0x1b, 0x72, 0x8e, 0xaf, 0x9e, 0x62, 0xfa, 0x16, 0xff, - 0x5f, 0xcb, 0x3e, 0x7c, 0xb3, 0x85, 0x0f, 0x02, 0xfd, 0x81, 0x23, 0x75, 0xf3, 0xcf, 0xe1, 0x1a, - 0x90, 0x05, 0x87, 0x36, 0x21, 0xaf, 0x1e, 0xc7, 0x36, 0x73, 0xf5, 0x9a, 0xbb, 0xa4, 0x5e, 0xb7, - 0x9a, 0x76, 0xd4, 0x2b, 0xbf, 0x32, 0xfa, 0x6b, 0x41, 0x25, 0x62, 0xe3, 0x58, 0x79, 0x68, 0x13, - 0x8e, 0x1f, 0x42, 0xf2, 0x81, 0x5e, 0x09, 0x1f, 0xe8, 0x95, 0x2d, 0x4f, 0xec, 0xf2, 0xba, 0xe0, - 0x8e, 0xd7, 0x0a, 0xb7, 0x72, 0xb2, 0x09, 0xd1, 0x79, 0xc8, 0xe9, 0x45, 0xa9, 0x02, 0xcf, 0x86, - 0x51, 0xdd, 0x0c, 0x49, 0x38, 0xe2, 0x99, 0x47, 0xc3, 0x75, 0xa1, 0xd6, 0xe6, 0x83, 0x97, 0x56, - 0x17, 0xff, 0xd3, 0xd5, 0x38, 0xbe, 0x36, 0x3e, 0x87, 0x9c, 0x5e, 0xba, 0xba, 0xd2, 0xd7, 0xa7, - 0xac, 0xf4, 0xf4, 0x12, 0x8b, 0xdf, 0xfc, 0x11, 0x31, 0xc2, 0x44, 0x9f, 0xc0, 0x3c, 0x0d, 0xd1, - 0xc3, 0xad, 0x78, 0x65, 0x4a, 0xf4, 0x64, 0xac, 0x26, 0xaf, 0x51, 0x4d, 0xd3, 0x80, 0xe8, 0x03, - 0x99, 0x25, 0x29, 0x2b, 0x1f, 0x81, 0x41, 0x71, 0x4e, 0x2d, 0xaa, 0x57, 0xc3, 0x60, 0x63, 0xf2, - 0x91, 0xbc, 0xf4, 0xc6, 0x9f, 0x38, 0xad, 0x61, 0x7e, 0x01, 0x68, 0xf4, 0x5e, 0x33, 0xc5, 0xad, - 0xe9, 0x02, 0xcc, 0x7b, 0xdd, 0xce, 0x1e, 0x0d, 0x7b, 0x28, 0x9b, 0x38, 0xb8, 0xa3, 0xa8, 0x58, - 0x73, 0xad, 0xf7, 0x9f, 0x3c, 0x2f, 0xcd, 0x3c, 0x7d, 0x5e, 0x9a, 0x79, 0xf6, 0xbc, 0x34, 0xf3, - 0x75, 0xbf, 0x64, 0x3c, 0xe9, 0x97, 0x8c, 0xa7, 0xfd, 0x92, 0xf1, 0xac, 0x5f, 0x32, 0xfe, 0xee, - 0x97, 0x8c, 0xef, 0xfe, 0x29, 0xcd, 0x7c, 0x5a, 0x1c, 0xf7, 0x0b, 0xda, 0xbf, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x32, 0xcd, 0xce, 0x57, 0x75, 0x13, 0x00, 0x00, + 0x36, 0x45, 0x20, 0x40, 0xdd, 0xac, 0x27, 0xce, 0xd6, 0xeb, 0x9d, 0x65, 0x76, 0x1c, 0x5a, 0x4e, + 0x5c, 0x38, 0x70, 0xe3, 0xc6, 0x99, 0x3f, 0x01, 0xc1, 0x0d, 0x41, 0xc5, 0x05, 0xf5, 0x58, 0x89, + 0x4b, 0x2f, 0x58, 0xd4, 0xfc, 0x17, 0x39, 0xa1, 0x99, 0x9d, 0xfd, 0xe1, 0x75, 0xdc, 0xac, 0xaa, + 0x2a, 0xa7, 0x64, 0xdf, 0x8f, 0xcf, 0xfb, 0x39, 0xef, 0xcd, 0x18, 0xae, 0x75, 0xdf, 0xf1, 0x6b, + 0x36, 0xad, 0x77, 0xfb, 0x3b, 0x84, 0xb9, 0x84, 0x13, 0xbf, 0xbe, 0x4f, 0xdc, 0x36, 0x65, 0x75, + 0xc5, 0x30, 0x3d, 0xbb, 0xee, 0x12, 0xfe, 0x15, 0x65, 0x5d, 0xdb, 0xed, 0xd4, 0xf7, 0x2f, 0xd7, + 0x3b, 0xc4, 0x25, 0xcc, 0xe4, 0xa4, 0x5d, 0xf3, 0x18, 0xe5, 0x14, 0x95, 0x03, 0xc9, 0x9a, 0xe9, + 0xd9, 0xb5, 0x58, 0xb2, 0xb6, 0x7f, 0xf9, 0xec, 0xa5, 0x8e, 0xcd, 0xf7, 0xfa, 0x3b, 0x35, 0x8b, + 0xf6, 0xea, 0x1d, 0xda, 0xa1, 0x75, 0xa9, 0xb0, 0xd3, 0xdf, 0x95, 0x5f, 0xf2, 0x43, 0xfe, 0x17, + 0x00, 0x9d, 0xd5, 0x13, 0x26, 0x2d, 0xca, 0xc8, 0x21, 0xc6, 0xce, 0x5e, 0x8d, 0x65, 0x7a, 0xa6, + 0xb5, 0x67, 0xbb, 0x84, 0x3d, 0xac, 0x7b, 0xdd, 0x8e, 0x20, 0xf8, 0xf5, 0x1e, 0xe1, 0xe6, 0x61, + 0x5a, 0xf5, 0x49, 0x5a, 0xac, 0xef, 0x72, 0xbb, 0x47, 0xc6, 0x14, 0xde, 0x3e, 0x4a, 0xc1, 0xb7, + 0xf6, 0x48, 0xcf, 0x1c, 0xd3, 0xbb, 0x32, 0x49, 0xaf, 0xcf, 0x6d, 0xa7, 0x6e, 0xbb, 0xdc, 0xe7, + 0x2c, 0xad, 0xa4, 0xff, 0xae, 0xc1, 0x89, 0x5b, 0xad, 0x56, 0x63, 0xc3, 0xed, 0x30, 0xe2, 0xfb, + 0x0d, 0x93, 0xef, 0xa1, 0x65, 0x98, 0xf1, 0x4c, 0xbe, 0x57, 0xd6, 0x96, 0xb5, 0x95, 0x39, 0x63, + 0xfe, 0xf1, 0xa0, 0x3a, 0x35, 0x1c, 0x54, 0x67, 0x04, 0x0f, 0x4b, 0x0e, 0xba, 0x0a, 0x45, 0xf1, + 0xb7, 0xf5, 0xd0, 0x23, 0xe5, 0x69, 0x29, 0x55, 0x1e, 0x0e, 0xaa, 0xc5, 0x86, 0xa2, 0x1d, 0x24, + 0xfe, 0xc7, 0x91, 0x24, 0x6a, 0x42, 0x61, 0xc7, 0xb4, 0xba, 0xc4, 0x6d, 0x97, 0x73, 0xcb, 0xda, + 0x4a, 0x69, 0x75, 0xa5, 0x36, 0xa9, 0x7c, 0x35, 0xe5, 0x8f, 0x11, 0xc8, 0x1b, 0x27, 0x94, 0x13, + 0x05, 0x45, 0xc0, 0x21, 0x92, 0xbe, 0x0b, 0xa7, 0x13, 0xfe, 0xe3, 0xbe, 0x43, 0xee, 0x9a, 0x4e, + 0x9f, 0xa0, 0x2d, 0xc8, 0x0b, 0xc3, 0x7e, 0x59, 0x5b, 0x9e, 0x5e, 0x29, 0xad, 0xbe, 0x3e, 0xd9, + 0x54, 0x2a, 0x7c, 0x63, 0x41, 0xd9, 0xca, 0x8b, 0x2f, 0x1f, 0x07, 0x30, 0xfa, 0x36, 0x14, 0x36, + 0x1a, 0x86, 0x43, 0xad, 0xae, 0xc8, 0x8f, 0x65, 0xb7, 0x59, 0x3a, 0x3f, 0x6b, 0x1b, 0xd7, 0x31, + 0x96, 0x1c, 0xa4, 0xc3, 0x2c, 0x79, 0x60, 0x11, 0x8f, 0x97, 0x73, 0xcb, 0xd3, 0x2b, 0x73, 0x06, + 0x0c, 0x07, 0xd5, 0xd9, 0x1b, 0x92, 0x82, 0x15, 0x47, 0xff, 0x36, 0x07, 0x05, 0x65, 0x16, 0xdd, + 0x83, 0xa2, 0x68, 0x9f, 0xb6, 0xc9, 0x4d, 0x89, 0x5a, 0x5a, 0x7d, 0x2b, 0xe1, 0x6f, 0x54, 0xcd, + 0x9a, 0xd7, 0xed, 0x08, 0x82, 0x5f, 0x13, 0xd2, 0xc2, 0xf7, 0xed, 0x9d, 0xfb, 0xc4, 0xe2, 0x77, + 0x08, 0x37, 0x0d, 0xa4, 0xfc, 0x80, 0x98, 0x86, 0x23, 0x54, 0xb4, 0x0e, 0x33, 0xbe, 0x47, 0x2c, + 0x95, 0xf8, 0x73, 0x47, 0x26, 0xbe, 0xe9, 0x11, 0x2b, 0x0e, 0x4d, 0x7c, 0x61, 0x09, 0x80, 0xb6, + 0x61, 0xd6, 0xe7, 0x26, 0xef, 0xfb, 0xb2, 0xf0, 0xa5, 0xd5, 0x0b, 0x47, 0x43, 0x49, 0x71, 0x63, + 0x51, 0x81, 0xcd, 0x06, 0xdf, 0x58, 0xc1, 0xe8, 0x7f, 0x68, 0xb0, 0x38, 0x5a, 0x6d, 0x74, 0x17, + 0x0a, 0x3e, 0x61, 0xfb, 0xb6, 0x45, 0xca, 0x33, 0xd2, 0x48, 0xfd, 0x68, 0x23, 0x81, 0x7c, 0xd8, + 0x2f, 0x25, 0xd1, 0x2b, 0x8a, 0x86, 0x43, 0x30, 0xf4, 0x31, 0x14, 0x19, 0xf1, 0x69, 0x9f, 0x59, + 0x44, 0x79, 0x7f, 0x29, 0x09, 0x2c, 0xce, 0xbd, 0x80, 0x14, 0xcd, 0xda, 0xde, 0xa4, 0x96, 0xe9, + 0x04, 0xa9, 0xc4, 0x64, 0x97, 0x30, 0xe2, 0x5a, 0xc4, 0x98, 0x17, 0x5d, 0x8e, 0x15, 0x04, 0x8e, + 0xc0, 0xc4, 0x29, 0x9a, 0x57, 0x8e, 0xac, 0x39, 0xe6, 0xb1, 0x14, 0x74, 0x73, 0xa4, 0xa0, 0x6f, + 0x1c, 0x99, 0x20, 0xe9, 0xd7, 0xa4, 0xaa, 0xea, 0xbf, 0x69, 0xb0, 0x94, 0x14, 0xdc, 0xb4, 0x7d, + 0x8e, 0x3e, 0x1b, 0x0b, 0xa2, 0x96, 0x2d, 0x08, 0xa1, 0x2d, 0x43, 0x58, 0x52, 0xa6, 0x8a, 0x21, + 0x25, 0x11, 0xc0, 0x6d, 0xc8, 0xdb, 0x9c, 0xf4, 0x7c, 0x79, 0x44, 0x4a, 0xab, 0xe7, 0xb3, 0x45, + 0x10, 0x9f, 0xce, 0x0d, 0xa1, 0x8c, 0x03, 0x0c, 0xfd, 0x6f, 0x0d, 0xaa, 0x49, 0xb1, 0x86, 0xc9, + 0xcc, 0x1e, 0xe1, 0x84, 0xf9, 0x51, 0xf1, 0xd0, 0x0a, 0x14, 0xcd, 0xc6, 0xc6, 0x3a, 0xa3, 0x7d, + 0x2f, 0x3c, 0xba, 0xc2, 0xb5, 0x6b, 0x8a, 0x86, 0x23, 0xae, 0x38, 0xe0, 0x5d, 0x5b, 0x4d, 0xa9, + 0xc4, 0x01, 0xbf, 0x6d, 0xbb, 0x6d, 0x2c, 0x39, 0x42, 0xc2, 0x35, 0x7b, 0xe1, 0xf0, 0x8b, 0x24, + 0xb6, 0xcc, 0x1e, 0xc1, 0x92, 0x83, 0xaa, 0x90, 0xf7, 0x2d, 0xea, 0x05, 0x1d, 0x3c, 0x67, 0xcc, + 0x09, 0x97, 0x9b, 0x82, 0x80, 0x03, 0x3a, 0xba, 0x08, 0x73, 0x42, 0xd0, 0xf7, 0x4c, 0x8b, 0x94, + 0xf3, 0x52, 0x68, 0x61, 0x38, 0xa8, 0xce, 0x6d, 0x85, 0x44, 0x1c, 0xf3, 0xf5, 0x9f, 0x52, 0xf5, + 0x11, 0xa5, 0x43, 0xab, 0x00, 0x16, 0x75, 0x39, 0xa3, 0x8e, 0x43, 0xc2, 0x69, 0x14, 0x35, 0xcd, + 0x5a, 0xc4, 0xc1, 0x09, 0x29, 0x64, 0x03, 0x78, 0x51, 0x6e, 0x54, 0xf3, 0xbc, 0x9b, 0x2d, 0xf5, + 0x87, 0xe4, 0xd4, 0x58, 0x14, 0xa6, 0x12, 0x8c, 0x04, 0xb8, 0xfe, 0xb3, 0x06, 0x25, 0xa5, 0x7f, + 0x0c, 0xed, 0x74, 0x73, 0xb4, 0x9d, 0x5e, 0x3d, 0x7a, 0xb5, 0x1c, 0xde, 0x49, 0x3f, 0xc6, 0x5e, + 0x8b, 0x65, 0x22, 0x2a, 0xbd, 0x47, 0x7d, 0x9e, 0x1e, 0xf6, 0xb7, 0xa8, 0xcf, 0xb1, 0xe4, 0x20, + 0x0f, 0x96, 0xec, 0xd4, 0xf6, 0xc9, 0x7c, 0x2a, 0x23, 0x0d, 0xa3, 0xac, 0x90, 0x97, 0xd2, 0x1c, + 0x3c, 0x86, 0xae, 0xdf, 0x83, 0x31, 0x29, 0x31, 0x0f, 0xf6, 0x38, 0xf7, 0x0e, 0xc9, 0xec, 0xe4, + 0x75, 0x17, 0x5b, 0x2f, 0xca, 0x98, 0x5a, 0xad, 0x06, 0x96, 0x28, 0xfa, 0x77, 0x1a, 0x9c, 0x39, + 0x74, 0xb2, 0x46, 0x9d, 0xaf, 0x4d, 0xec, 0xfc, 0x2d, 0x98, 0xf1, 0x28, 0xe3, 0x2a, 0x07, 0x6f, + 0x4e, 0xf6, 0x64, 0x14, 0xb9, 0x41, 0x19, 0x4f, 0x5c, 0x36, 0x28, 0xe3, 0x58, 0xe2, 0xe8, 0x7f, + 0xe6, 0xa2, 0x8a, 0xc8, 0xb6, 0xff, 0x20, 0xca, 0xb7, 0x6c, 0x4b, 0x61, 0x59, 0x1d, 0xb2, 0xd3, + 0x89, 0xfc, 0x45, 0x3c, 0x3c, 0x26, 0x8d, 0xda, 0xb0, 0xd8, 0x26, 0xbb, 0x66, 0xdf, 0xe1, 0xca, + 0xb6, 0xca, 0x5a, 0xf6, 0xfb, 0x08, 0x1a, 0x0e, 0xaa, 0x8b, 0xd7, 0x47, 0x30, 0x70, 0x0a, 0x13, + 0xad, 0xc1, 0x34, 0x77, 0xc2, 0x7e, 0x7c, 0xed, 0x48, 0xe8, 0xd6, 0x66, 0xd3, 0x28, 0xa9, 0xf0, + 0xa7, 0x5b, 0x9b, 0x4d, 0x2c, 0xb4, 0xd1, 0x87, 0x90, 0x67, 0x7d, 0x87, 0x88, 0x6d, 0x3b, 0x9d, + 0x69, 0x71, 0x8b, 0x9a, 0xc6, 0xad, 0x2d, 0xbe, 0x7c, 0x1c, 0x40, 0xe8, 0x5f, 0xc2, 0xc2, 0xc8, + 0x4a, 0x46, 0xf7, 0x60, 0xde, 0xa1, 0x66, 0xdb, 0x30, 0x1d, 0xd3, 0xb5, 0xd4, 0x08, 0x49, 0x4d, + 0xe2, 0x70, 0x27, 0x6e, 0x26, 0xe4, 0xd4, 0x42, 0x3f, 0xad, 0x8c, 0xcc, 0x27, 0x79, 0x78, 0x04, + 0x51, 0x37, 0x01, 0xe2, 0xf0, 0xc4, 0x4c, 0x14, 0x27, 0x26, 0xb8, 0x93, 0xa9, 0x99, 0x28, 0x0e, + 0x92, 0x8f, 0x03, 0xba, 0x98, 0x68, 0x3e, 0xb1, 0x18, 0xe1, 0xb2, 0xa8, 0xb9, 0xd1, 0x89, 0xd6, + 0x8c, 0x38, 0x38, 0x21, 0xa5, 0xff, 0x90, 0x83, 0x85, 0xad, 0x20, 0x13, 0x0d, 0xea, 0xd8, 0xd6, + 0xc3, 0x63, 0x58, 0xbe, 0x77, 0x46, 0x96, 0xef, 0xc5, 0xc9, 0x45, 0x19, 0x71, 0x6c, 0xe2, 0x9d, + 0xea, 0xa3, 0xd4, 0x9d, 0xea, 0x52, 0x56, 0xc0, 0xe7, 0xdf, 0xac, 0x7e, 0xd1, 0xe0, 0x7f, 0x23, + 0xf2, 0x37, 0xe2, 0xb1, 0xd6, 0x80, 0xbc, 0x38, 0x5c, 0xe1, 0xf5, 0x38, 0x6b, 0x08, 0xf2, 0x90, + 0xc6, 0x17, 0x64, 0x81, 0x80, 0x03, 0x20, 0xb4, 0x0e, 0x39, 0x4e, 0x55, 0xb7, 0x67, 0x86, 0x23, + 0x84, 0x19, 0xa0, 0xe0, 0x72, 0x2d, 0x8a, 0x73, 0x9c, 0xea, 0xbf, 0x6a, 0x50, 0x1e, 0x91, 0x4a, + 0x8e, 0xe3, 0x97, 0xef, 0xf7, 0x1d, 0x98, 0xd9, 0x65, 0xb4, 0xf7, 0x22, 0x9e, 0x47, 0xb5, 0xbc, + 0xc9, 0x68, 0x0f, 0x4b, 0x18, 0xfd, 0x91, 0x06, 0x27, 0x47, 0x24, 0x8f, 0x61, 0xf7, 0x6d, 0x8e, + 0xee, 0xbe, 0x0b, 0x19, 0x63, 0x98, 0xb0, 0x01, 0x1f, 0xe5, 0x52, 0x11, 0x88, 0x58, 0xd1, 0x2e, + 0x94, 0x3c, 0xda, 0x6e, 0x12, 0x87, 0x58, 0x9c, 0x86, 0xa3, 0xe2, 0x4a, 0xc6, 0x20, 0xcc, 0x1d, + 0xe2, 0x84, 0xaa, 0xc6, 0x89, 0xe1, 0xa0, 0x5a, 0x6a, 0xc4, 0x58, 0x38, 0x09, 0x8c, 0x1e, 0xc0, + 0xc9, 0xe8, 0xda, 0x13, 0x59, 0xcb, 0xbd, 0xb8, 0xb5, 0x33, 0xc3, 0x41, 0xf5, 0xe4, 0x56, 0x1a, + 0x11, 0x8f, 0x1b, 0x41, 0xb7, 0xa0, 0x60, 0x7b, 0xf2, 0x85, 0xa7, 0x8e, 0xe1, 0xf3, 0xee, 0x10, + 0xc1, 0x53, 0x30, 0x78, 0x67, 0xa8, 0x0f, 0x1c, 0xaa, 0xeb, 0x7f, 0xa5, 0x7b, 0x40, 0x34, 0x1c, + 0x5a, 0x87, 0xa2, 0x7c, 0x73, 0x5b, 0xd4, 0x51, 0xdb, 0xf3, 0xa2, 0x7c, 0x34, 0x2b, 0xda, 0xc1, + 0xa0, 0xfa, 0xff, 0xf1, 0x1f, 0x21, 0x6a, 0x21, 0x1b, 0x47, 0xca, 0xa9, 0x05, 0x3b, 0x79, 0xb6, + 0x89, 0x77, 0x7f, 0x2d, 0x78, 0xf7, 0xd7, 0x36, 0x5c, 0xbe, 0xcd, 0x9a, 0x9c, 0xd9, 0x6e, 0x27, + 0x58, 0xf6, 0xf1, 0x82, 0x45, 0xe7, 0xa0, 0xa0, 0xf6, 0xaf, 0x0c, 0x3c, 0x1f, 0x44, 0x75, 0x23, + 0x20, 0xe1, 0x90, 0xa7, 0x1f, 0xa4, 0xfb, 0x42, 0x6e, 0xe3, 0xfb, 0x2f, 0xad, 0x2f, 0x4e, 0xa9, + 0x6e, 0x9c, 0xdc, 0x1b, 0x9f, 0x43, 0x41, 0xed, 0x72, 0xd5, 0xe9, 0xab, 0x19, 0x3b, 0x3d, 0xb9, + 0x1b, 0xa3, 0x9f, 0x12, 0x42, 0x62, 0x88, 0x89, 0x3e, 0x81, 0x59, 0x12, 0xa0, 0x07, 0xcb, 0xf6, + 0x72, 0x46, 0xf4, 0x78, 0xac, 0xc6, 0xa3, 0x58, 0xd1, 0x14, 0x20, 0x7a, 0x5f, 0x64, 0x49, 0xc8, + 0x8a, 0xb7, 0xa5, 0x5f, 0x9e, 0x91, 0xfb, 0xef, 0x95, 0x20, 0xd8, 0x88, 0x7c, 0x20, 0xee, 0xd2, + 0xd1, 0x27, 0x4e, 0x6a, 0xe8, 0x5f, 0xc3, 0xa9, 0x43, 0x46, 0x3f, 0xb2, 0xe4, 0x13, 0xa0, 0x6d, + 0x73, 0x9b, 0xba, 0xe1, 0x4c, 0xac, 0x67, 0x4b, 0xfe, 0x5a, 0xa8, 0x37, 0xf2, 0x66, 0x50, 0x50, + 0x38, 0x01, 0xab, 0x7f, 0x01, 0x68, 0xfc, 0xaa, 0x96, 0xe1, 0x22, 0x78, 0x1e, 0x66, 0xdd, 0x7e, + 0x6f, 0x87, 0x04, 0xe7, 0x37, 0x1f, 0x27, 0x67, 0x4b, 0x52, 0xb1, 0xe2, 0x1a, 0xef, 0x3d, 0x7e, + 0x56, 0x99, 0x7a, 0xf2, 0xac, 0x32, 0xf5, 0xf4, 0x59, 0x65, 0xea, 0x9b, 0x61, 0x45, 0x7b, 0x3c, + 0xac, 0x68, 0x4f, 0x86, 0x15, 0xed, 0xe9, 0xb0, 0xa2, 0xfd, 0x33, 0xac, 0x68, 0xdf, 0xff, 0x5b, + 0x99, 0xfa, 0xb4, 0x3c, 0xe9, 0x47, 0xc1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x8f, 0x43, 0xa0, + 0xa5, 0x48, 0x14, 0x00, 0x00, } func (m *HTTPIngressPath) Marshal() (dAtA []byte, err error) { @@ -1573,6 +1605,16 @@ func (m *NetworkPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a { size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1921,6 +1963,43 @@ func (m *NetworkPolicySpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *NetworkPolicyStatus) 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 *NetworkPolicyStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NetworkPolicyStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for iNdEx := len(m.Conditions) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Conditions[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *ServiceBackendPort) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2237,6 +2316,8 @@ func (m *NetworkPolicy) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = m.Spec.Size() n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -2369,6 +2450,21 @@ func (m *NetworkPolicySpec) Size() (n int) { return n } +func (m *NetworkPolicyStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *ServiceBackendPort) Size() (n int) { if m == nil { return 0 @@ -2599,6 +2695,7 @@ func (this *NetworkPolicy) String() string { s := strings.Join([]string{`&NetworkPolicy{`, `ObjectMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ObjectMeta), "ObjectMeta", "v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NetworkPolicySpec", "NetworkPolicySpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NetworkPolicyStatus", "NetworkPolicyStatus", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -2708,6 +2805,21 @@ func (this *NetworkPolicySpec) String() string { }, "") return s } +func (this *NetworkPolicyStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForConditions := "[]Condition{" + for _, f := range this.Conditions { + repeatedStringForConditions += fmt.Sprintf("%v", f) + "," + } + repeatedStringForConditions += "}" + s := strings.Join([]string{`&NetworkPolicyStatus{`, + `Conditions:` + repeatedStringForConditions + `,`, + `}`, + }, "") + return s +} func (this *ServiceBackendPort) String() string { if this == nil { return "nil" @@ -4820,6 +4932,39 @@ func (m *NetworkPolicy) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -5674,6 +5819,90 @@ func (m *NetworkPolicySpec) Unmarshal(dAtA []byte) error { } return nil } +func (m *NetworkPolicyStatus) 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: NetworkPolicyStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NetworkPolicyStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, v1.Condition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *ServiceBackendPort) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/api/networking/v1/generated.proto b/staging/src/k8s.io/api/networking/v1/generated.proto index 8c177a3d524a..ec8066396950 100644 --- a/staging/src/k8s.io/api/networking/v1/generated.proto +++ b/staging/src/k8s.io/api/networking/v1/generated.proto @@ -337,6 +337,11 @@ message NetworkPolicy { // Specification of the desired behavior for this NetworkPolicy. // +optional optional NetworkPolicySpec spec = 2; + + // Status is the current state of the NetworkPolicy. + // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + // +optional + optional NetworkPolicyStatus status = 3; } // NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods @@ -486,6 +491,18 @@ message NetworkPolicySpec { repeated string policyTypes = 4; } +// NetworkPolicyStatus describe the current state of the NetworkPolicy. +message NetworkPolicyStatus { + // Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. + // Current service state + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 1; +} + // ServiceBackendPort is the service port being referenced. message ServiceBackendPort { // Name is the name of the port on the Service. diff --git a/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go index 38bd9c502b9e..8e7870daefd7 100644 --- a/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/networking/v1/types_swagger_doc_generated.go @@ -193,6 +193,7 @@ var map_NetworkPolicy = map[string]string{ "": "NetworkPolicy describes what network traffic is allowed for a set of Pods", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", "spec": "Specification of the desired behavior for this NetworkPolicy.", + "status": "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", } func (NetworkPolicy) SwaggerDoc() map[string]string { @@ -263,6 +264,15 @@ func (NetworkPolicySpec) SwaggerDoc() map[string]string { return map_NetworkPolicySpec } +var map_NetworkPolicyStatus = map[string]string{ + "": "NetworkPolicyStatus describe the current state of the NetworkPolicy.", + "conditions": "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state", +} + +func (NetworkPolicyStatus) SwaggerDoc() map[string]string { + return map_NetworkPolicyStatus +} + var map_ServiceBackendPort = map[string]string{ "": "ServiceBackendPort is the service port being referenced.", "name": "Name is the name of the port on the Service. This is a mutually exclusive setting with \"Number\".", diff --git a/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go index 82677ca8b9ef..349c40ca7e6e 100644 --- a/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/networking/v1/zz_generated.deepcopy.go @@ -432,6 +432,7 @@ func (in *NetworkPolicy) DeepCopyInto(out *NetworkPolicy) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) return } @@ -644,6 +645,29 @@ func (in *NetworkPolicySpec) DeepCopy() *NetworkPolicySpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkPolicyStatus) DeepCopyInto(out *NetworkPolicyStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkPolicyStatus. +func (in *NetworkPolicyStatus) DeepCopy() *NetworkPolicyStatus { + if in == nil { + return nil + } + out := new(NetworkPolicyStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceBackendPort) DeepCopyInto(out *ServiceBackendPort) { *out = *in diff --git a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json index 6e1dabf2f111..b70600d48e07 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json +++ b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.json @@ -160,5 +160,17 @@ "policyTypes": [ "policyTypesValue" ] + }, + "status": { + "conditions": [ + { + "type": "typeValue", + "status": "statusValue", + "observedGeneration": 3, + "lastTransitionTime": "2004-01-01T01:01:01Z", + "reason": "reasonValue", + "message": "messageValue" + } + ] } } \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.pb b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.pb index eb300e10be44bdab52886fd08141bc8795e53498..bbae4f3f533bf23a68e43cc2ee0277910fbbbc71 100644 GIT binary patch delta 83 zcmX@X-pw&Vi}ChG?ODujj$HO!oF$b7sbPsZrKv*P#U+U)rNv;51hWzc$Js|`|1%3P cXmJ;%CKl)CfhCN1a#M?o6VoAjq!^SK0G`1c!vFvP delta 16 XcmeC?IKe(ai*d$A?ODvs3`z_DEh7X} diff --git a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml index ae810e6a5b6c..acdd5dde4031 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/extensions.v1beta1.NetworkPolicy.yaml @@ -96,3 +96,11 @@ spec: matchLabelsKey: matchLabelsValue policyTypes: - policyTypesValue +status: + conditions: + - lastTransitionTime: "2004-01-01T01:01:01Z" + message: messageValue + observedGeneration: 3 + reason: reasonValue + status: statusValue + type: typeValue diff --git a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json index 2a989193402d..fe2e30494235 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json +++ b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.json @@ -160,5 +160,17 @@ "policyTypes": [ "policyTypesValue" ] + }, + "status": { + "conditions": [ + { + "type": "typeValue", + "status": "statusValue", + "observedGeneration": 3, + "lastTransitionTime": "2004-01-01T01:01:01Z", + "reason": "reasonValue", + "message": "messageValue" + } + ] } } \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.pb b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.pb index 84faec1eac3e8879363340bcf24497110ff3c0ed..93fd21016bb6107850ea9a708cceacc9f3e7053f 100644 GIT binary patch delta 83 zcmX@b-pesThw=7C-C4|Tj$HO!oF$b7sbPsZrKv*P#U+U)rNv;51hWzc$Js|`|1%3P cXmJ;%CKl)CfhCN1a#M?o6VoAjq!^SK0HHY>%K!iX delta 16 XcmeC>IK@6ehjGS6-C4}c3`z_DErSGH diff --git a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml index 06d3467fa340..7313f89fffb6 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/networking.k8s.io.v1.NetworkPolicy.yaml @@ -96,3 +96,11 @@ spec: matchLabelsKey: matchLabelsValue policyTypes: - policyTypesValue +status: + conditions: + - lastTransitionTime: "2004-01-01T01:01:01Z" + message: messageValue + observedGeneration: 3 + reason: reasonValue + status: statusValue + type: typeValue diff --git a/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json b/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json new file mode 100644 index 000000000000..e4562a25993a --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json @@ -0,0 +1,153 @@ +{ + "kind": "NetworkPolicy", + "apiVersion": "extensions/v1beta1", + "metadata": { + "name": "2", + "generateName": "3", + "namespace": "4", + "selfLink": "5", + "uid": "7", + "resourceVersion": "11042405498087606203", + "generation": 8071137005907523419, + "creationTimestamp": "2061-09-19T18:13:36Z", + "deletionGracePeriodSeconds": -4955867275792137171, + "labels": { + "7": "8" + }, + "annotations": { + "9": "10" + }, + "ownerReferences": [ + { + "apiVersion": "11", + "kind": "12", + "name": "13", + "uid": "Dz廔ȇ{sŊƏp", + "controller": false, + "blockOwnerDeletion": true + } + ], + "finalizers": [ + "14" + ], + "clusterName": "15", + "managedFields": [ + { + "manager": "16", + "operation": "鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć]", + "apiVersion": "17", + "fieldsType": "18", + "subresource": "19" + } + ] + }, + "spec": { + "podSelector": { + "matchLabels": { + "8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3": "68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4" + }, + "matchExpressions": [ + { + "key": "p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0", + "operator": "In", + "values": [ + "D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n" + ] + } + ] + }, + "ingress": [ + { + "ports": [ + { + "protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ", + "port": 2, + "endPort": -420211493 + } + ], + "from": [ + { + "podSelector": { + "matchLabels": { + "5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g" + }, + "matchExpressions": [ + { + "key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v", + "operator": "Exists" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y" + }, + "matchExpressions": [ + { + "key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X", + "operator": "In", + "values": [ + "g4" + ] + } + ] + }, + "ipBlock": { + "cidr": "38", + "except": [ + "39" + ] + } + } + ] + } + ], + "egress": [ + { + "ports": [ + { + "protocol": "s3!Zɾģ毋", + "port": 3, + "endPort": -630252364 + } + ], + "to": [ + { + "podSelector": { + "matchLabels": { + "P1s-V.9.3": "9..c_uo3a" + }, + "matchExpressions": [ + { + "key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy", + "operator": "DoesNotExist" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz" + }, + "matchExpressions": [ + { + "key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8", + "operator": "DoesNotExist" + } + ] + }, + "ipBlock": { + "cidr": "52", + "except": [ + "53" + ] + } + } + ] + } + ], + "policyTypes": [ + "(dŊiɢz" + ] + }, + "status": {} +} \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.pb b/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.pb new file mode 100644 index 0000000000000000000000000000000000000000..0af39396bb6303cad74d843d2160befc58039f81 GIT binary patch literal 1426 zcmY*YNo-qH6!rg+O8OX7eIbM_7HwEi74G$a|NY_prQIZU(!`GAq!|RdIG*Am-*)VH zLM+k>3Mo<2Z8u`0qj&%K@K?4kG8gK7YMVN@2Re6lG@-V- z#(_ug@9du5d35pPo9AJ1_uS?0uVy26PQUr!gYAP4uARN{_G_w}XX#wVbnY9U?Pce6 zc3fi_2>_LP!*^|7D`5jlGG{>*d~OvS$U(ss5P%3G6F$m?^~!?Zf{M+-1h)axlZn9V zgJ&a{vx}+ubQ+Tu3gZ=5BCVyn2>H0119SnXhX7`GW3|djEs7Qa#hSQ5wsA&duQnW0 zC?dA!f$cX`Rd@MtT$12+-x+}$Wzl6n33X~&f7B>xjDhTs&)59!bpZZic$!R7nQhjL_lZ2FY(O*kc@(I;Lotu(Gf$`f2n@bP3FGNN0*7f3#7mYomp?!Kd^!&Xq?q2=-AN6U*)e-iY z#$IQRLxk%v4YTOe0yd%UVIMMS^rJ8dXe;c_%o0{A3NeOA3Ri$_yd*f-*jp|jnxd#E znus%KHq-7BU>+@V9a2YtN=B4<^KOQFgz|83gi@FXq+~Z259Xi?nW96fO)PWr2Dp>} z1+b8}AW19OG4@RK%B^rMN`V>2@E2*E$Zdm#Kp?vlY7+^io)lDW67&%)=P*X0g6QXqfmo4wG6|t?yr;2k zt>|~Fpd5D{tGA9;7Rpt~R+S-}X0Q&vC5NW>paIQB+XdbQVVO>j*LsC!KLAIiA@5`b zcx%mwJ=vI~CE!TVnW6HKPZl5!Q>t1K3IpZh&{ie*U<1_T{B+w|ejEzDWQRwYE~KFg zKYU_@?PpK6#DUd2-`=?R;LDSb?Hy6}UcUDA&wu@A?|q$R*>h~~9B;u<^i|mR`iME& zs*9`}XeI0I z$JQ8sYV2K&tvWSu{1P<#ihOnxN`WH-^*V>TK^>G%z@3iTVmVppaiyZgZ4j+oWEQ9A zs2(Ldiqlq0;PQ-16N>=R1f(%O>&1+hlS-#f2hvtk1q9JnR1nscjq%cgM_!D^RcHXK z_SV42vjuMp+U0^he2AqDfkJj_zz51CDMcPSqN0}i$}iZ899AjWbb^I2!kb riU&>!R63vu0~(mEK>q*ILnj=|&>b;0dN6-;r+nwrK{yl+jfMUN!?&C# literal 0 HcmV?d00001 diff --git a/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml b/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml new file mode 100644 index 000000000000..57fd8c7b5afa --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.22.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml @@ -0,0 +1,90 @@ +apiVersion: extensions/v1beta1 +kind: NetworkPolicy +metadata: + annotations: + "9": "10" + clusterName: "15" + creationTimestamp: "2061-09-19T18:13:36Z" + deletionGracePeriodSeconds: -4955867275792137171 + finalizers: + - "14" + generateName: "3" + generation: 8071137005907523419 + labels: + "7": "8" + managedFields: + - apiVersion: "17" + fieldsType: "18" + manager: "16" + operation: 鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć] + subresource: "19" + name: "2" + namespace: "4" + ownerReferences: + - apiVersion: "11" + blockOwnerDeletion: true + controller: false + kind: "12" + name: "13" + uid: Dz廔ȇ{sŊƏp + resourceVersion: "11042405498087606203" + selfLink: "5" + uid: "7" +spec: + egress: + - ports: + - endPort: -630252364 + port: 3 + protocol: s3!Zɾģ毋 + to: + - ipBlock: + cidr: "52" + except: + - "53" + namespaceSelector: + matchExpressions: + - key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8 + operator: DoesNotExist + matchLabels: + 5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz + podSelector: + matchExpressions: + - key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy + operator: DoesNotExist + matchLabels: + P1s-V.9.3: 9..c_uo3a + ingress: + - from: + - ipBlock: + cidr: "38" + except: + - "39" + namespaceSelector: + matchExpressions: + - key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X + operator: In + values: + - g4 + matchLabels: + pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y + podSelector: + matchExpressions: + - key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v + operator: Exists + matchLabels: + 5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g + ports: + - endPort: -420211493 + port: 2 + protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ + podSelector: + matchExpressions: + - key: p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0 + operator: In + values: + - D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n + matchLabels: + 8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4 + policyTypes: + - (dŊiɢz +status: {} diff --git a/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json b/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json new file mode 100644 index 000000000000..48bdd8770a9b --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json @@ -0,0 +1,153 @@ +{ + "kind": "NetworkPolicy", + "apiVersion": "networking.k8s.io/v1", + "metadata": { + "name": "2", + "generateName": "3", + "namespace": "4", + "selfLink": "5", + "uid": "7", + "resourceVersion": "11042405498087606203", + "generation": 8071137005907523419, + "creationTimestamp": "2061-09-19T18:13:36Z", + "deletionGracePeriodSeconds": -4955867275792137171, + "labels": { + "7": "8" + }, + "annotations": { + "9": "10" + }, + "ownerReferences": [ + { + "apiVersion": "11", + "kind": "12", + "name": "13", + "uid": "Dz廔ȇ{sŊƏp", + "controller": false, + "blockOwnerDeletion": true + } + ], + "finalizers": [ + "14" + ], + "clusterName": "15", + "managedFields": [ + { + "manager": "16", + "operation": "鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć]", + "apiVersion": "17", + "fieldsType": "18", + "subresource": "19" + } + ] + }, + "spec": { + "podSelector": { + "matchLabels": { + "8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3": "68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4" + }, + "matchExpressions": [ + { + "key": "p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0", + "operator": "In", + "values": [ + "D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n" + ] + } + ] + }, + "ingress": [ + { + "ports": [ + { + "protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ", + "port": 2, + "endPort": -420211493 + } + ], + "from": [ + { + "podSelector": { + "matchLabels": { + "5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g" + }, + "matchExpressions": [ + { + "key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v", + "operator": "Exists" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y" + }, + "matchExpressions": [ + { + "key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X", + "operator": "In", + "values": [ + "g4" + ] + } + ] + }, + "ipBlock": { + "cidr": "38", + "except": [ + "39" + ] + } + } + ] + } + ], + "egress": [ + { + "ports": [ + { + "protocol": "s3!Zɾģ毋", + "port": 3, + "endPort": -630252364 + } + ], + "to": [ + { + "podSelector": { + "matchLabels": { + "P1s-V.9.3": "9..c_uo3a" + }, + "matchExpressions": [ + { + "key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy", + "operator": "DoesNotExist" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz" + }, + "matchExpressions": [ + { + "key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8", + "operator": "DoesNotExist" + } + ] + }, + "ipBlock": { + "cidr": "52", + "except": [ + "53" + ] + } + } + ] + } + ], + "policyTypes": [ + "(dŊiɢz" + ] + }, + "status": {} +} \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.pb b/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.pb new file mode 100644 index 0000000000000000000000000000000000000000..2a8cf42d4499c73d19241f8dcd260c64b63f3e3d GIT binary patch literal 1428 zcmY*YONdlQ6z%s0%vkv#4+){kLI*;`V4`hyPcWt8E3ku=i_`xxasNN^k-go zPxtgMWHCx&G6u{?k$@PCh-4ulpoo~yB5E{?AcU;kNk(*$K(f!LT330Sck9-zdrzHn zsv?^q_6pk@XVR(3JX zGc>vS4AXo==Vo~y)43Jaxfpq2w7+xX)ScsRH*am)hGagerB7 z{f|G|-Z{1X_`+wm&cVXY*(*O>%S7&;dgtNCTL&IqKXdcFH&r*!(z%T3+&3=nX6JNv zOk;Br0Lrzx@7lat#5xpZ)`AN7+{!zUg}f^u01-sSe3bKR<$1peWt)QuZXG7a6M@$Q z&qgq(7gDq7G$t(+#_O&`T1|Hla&b2c=mJm|0nE<&N`;f!6iot(HE^A5*9QjrXfKN zVGD6JZW{VT5ay$%hZ({i^{8f&(@0vR`qDHe2`S^EznUoL5~_zfHzA1vqk zw02IP**Smd&exAV{eI`$%a69sM@8ZGjlxeCj9tT_J$g9w()};*UHj)>^=ZbnA$Cz? zZ!yOq!ZnzLY4m9x8&LDG2Xkrkqc9F=tJ&?TMJ$)q#26x}xdLqCRl&i=?ouAn6a@v* zM4Upik#-jWb7+}skU9)hG@{I#b?3N8C=UgPDTO&eN_MjGUd&dRh@zT@ zv<AYmpcHorSG)N}F91imA?IWS zc&m+wJzgKDMc_!#o}$tKPX-_k6DnF3Y6i-Mfvk$~{yM1S>}1PYdSVK_XorWHE~KFg zKYV_xVFhBx5|`pWFPeZ(wn z)aOdg$c~qhVoNPdfk#BJOq=UKazkBO+6pXjsffif#Z;|lJU3d)HhUR-7t0ei0fy1wOL@#lVq)dYuE_pazO3;7(hWSWX7IT(M|z8$>f3na0T( zszu3;;-u9SxHRR`*aAQ_0cng+dokm+q~fXFhP2gC20^qH6ofS;W4t);kr$&;Wg5VW zz1cT%Y~I_1Rw-`}9%6A_ppfk<@V*jBN|A%MD66fW(hD{tIj~9DTQR+2<5W~6j>LVT r?12*k6%S}apZaDqkpI8*Knce(bVrN~AIRO>F5Ug29}a~>BccBQYI2;Q literal 0 HcmV?d00001 diff --git a/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml b/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml new file mode 100644 index 000000000000..239b4b8629c8 --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.22.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml @@ -0,0 +1,90 @@ +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + annotations: + "9": "10" + clusterName: "15" + creationTimestamp: "2061-09-19T18:13:36Z" + deletionGracePeriodSeconds: -4955867275792137171 + finalizers: + - "14" + generateName: "3" + generation: 8071137005907523419 + labels: + "7": "8" + managedFields: + - apiVersion: "17" + fieldsType: "18" + manager: "16" + operation: 鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć] + subresource: "19" + name: "2" + namespace: "4" + ownerReferences: + - apiVersion: "11" + blockOwnerDeletion: true + controller: false + kind: "12" + name: "13" + uid: Dz廔ȇ{sŊƏp + resourceVersion: "11042405498087606203" + selfLink: "5" + uid: "7" +spec: + egress: + - ports: + - endPort: -630252364 + port: 3 + protocol: s3!Zɾģ毋 + to: + - ipBlock: + cidr: "52" + except: + - "53" + namespaceSelector: + matchExpressions: + - key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8 + operator: DoesNotExist + matchLabels: + 5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz + podSelector: + matchExpressions: + - key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy + operator: DoesNotExist + matchLabels: + P1s-V.9.3: 9..c_uo3a + ingress: + - from: + - ipBlock: + cidr: "38" + except: + - "39" + namespaceSelector: + matchExpressions: + - key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X + operator: In + values: + - g4 + matchLabels: + pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y + podSelector: + matchExpressions: + - key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v + operator: Exists + matchLabels: + 5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g + ports: + - endPort: -420211493 + port: 2 + protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ + podSelector: + matchExpressions: + - key: p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0 + operator: In + values: + - D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n + matchLabels: + 8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4 + policyTypes: + - (dŊiɢz +status: {} diff --git a/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json b/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json new file mode 100644 index 000000000000..e4562a25993a --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.json @@ -0,0 +1,153 @@ +{ + "kind": "NetworkPolicy", + "apiVersion": "extensions/v1beta1", + "metadata": { + "name": "2", + "generateName": "3", + "namespace": "4", + "selfLink": "5", + "uid": "7", + "resourceVersion": "11042405498087606203", + "generation": 8071137005907523419, + "creationTimestamp": "2061-09-19T18:13:36Z", + "deletionGracePeriodSeconds": -4955867275792137171, + "labels": { + "7": "8" + }, + "annotations": { + "9": "10" + }, + "ownerReferences": [ + { + "apiVersion": "11", + "kind": "12", + "name": "13", + "uid": "Dz廔ȇ{sŊƏp", + "controller": false, + "blockOwnerDeletion": true + } + ], + "finalizers": [ + "14" + ], + "clusterName": "15", + "managedFields": [ + { + "manager": "16", + "operation": "鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć]", + "apiVersion": "17", + "fieldsType": "18", + "subresource": "19" + } + ] + }, + "spec": { + "podSelector": { + "matchLabels": { + "8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3": "68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4" + }, + "matchExpressions": [ + { + "key": "p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0", + "operator": "In", + "values": [ + "D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n" + ] + } + ] + }, + "ingress": [ + { + "ports": [ + { + "protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ", + "port": 2, + "endPort": -420211493 + } + ], + "from": [ + { + "podSelector": { + "matchLabels": { + "5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g" + }, + "matchExpressions": [ + { + "key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v", + "operator": "Exists" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y" + }, + "matchExpressions": [ + { + "key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X", + "operator": "In", + "values": [ + "g4" + ] + } + ] + }, + "ipBlock": { + "cidr": "38", + "except": [ + "39" + ] + } + } + ] + } + ], + "egress": [ + { + "ports": [ + { + "protocol": "s3!Zɾģ毋", + "port": 3, + "endPort": -630252364 + } + ], + "to": [ + { + "podSelector": { + "matchLabels": { + "P1s-V.9.3": "9..c_uo3a" + }, + "matchExpressions": [ + { + "key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy", + "operator": "DoesNotExist" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz" + }, + "matchExpressions": [ + { + "key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8", + "operator": "DoesNotExist" + } + ] + }, + "ipBlock": { + "cidr": "52", + "except": [ + "53" + ] + } + } + ] + } + ], + "policyTypes": [ + "(dŊiɢz" + ] + }, + "status": {} +} \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.pb b/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.pb new file mode 100644 index 0000000000000000000000000000000000000000..0af39396bb6303cad74d843d2160befc58039f81 GIT binary patch literal 1426 zcmY*YNo-qH6!rg+O8OX7eIbM_7HwEi74G$a|NY_prQIZU(!`GAq!|RdIG*Am-*)VH zLM+k>3Mo<2Z8u`0qj&%K@K?4kG8gK7YMVN@2Re6lG@-V- z#(_ug@9du5d35pPo9AJ1_uS?0uVy26PQUr!gYAP4uARN{_G_w}XX#wVbnY9U?Pce6 zc3fi_2>_LP!*^|7D`5jlGG{>*d~OvS$U(ss5P%3G6F$m?^~!?Zf{M+-1h)axlZn9V zgJ&a{vx}+ubQ+Tu3gZ=5BCVyn2>H0119SnXhX7`GW3|djEs7Qa#hSQ5wsA&duQnW0 zC?dA!f$cX`Rd@MtT$12+-x+}$Wzl6n33X~&f7B>xjDhTs&)59!bpZZic$!R7nQhjL_lZ2FY(O*kc@(I;Lotu(Gf$`f2n@bP3FGNN0*7f3#7mYomp?!Kd^!&Xq?q2=-AN6U*)e-iY z#$IQRLxk%v4YTOe0yd%UVIMMS^rJ8dXe;c_%o0{A3NeOA3Ri$_yd*f-*jp|jnxd#E znus%KHq-7BU>+@V9a2YtN=B4<^KOQFgz|83gi@FXq+~Z259Xi?nW96fO)PWr2Dp>} z1+b8}AW19OG4@RK%B^rMN`V>2@E2*E$Zdm#Kp?vlY7+^io)lDW67&%)=P*X0g6QXqfmo4wG6|t?yr;2k zt>|~Fpd5D{tGA9;7Rpt~R+S-}X0Q&vC5NW>paIQB+XdbQVVO>j*LsC!KLAIiA@5`b zcx%mwJ=vI~CE!TVnW6HKPZl5!Q>t1K3IpZh&{ie*U<1_T{B+w|ejEzDWQRwYE~KFg zKYU_@?PpK6#DUd2-`=?R;LDSb?Hy6}UcUDA&wu@A?|q$R*>h~~9B;u<^i|mR`iME& zs*9`}XeI0I z$JQ8sYV2K&tvWSu{1P<#ihOnxN`WH-^*V>TK^>G%z@3iTVmVppaiyZgZ4j+oWEQ9A zs2(Ldiqlq0;PQ-16N>=R1f(%O>&1+hlS-#f2hvtk1q9JnR1nscjq%cgM_!D^RcHXK z_SV42vjuMp+U0^he2AqDfkJj_zz51CDMcPSqN0}i$}iZ899AjWbb^I2!kb riU&>!R63vu0~(mEK>q*ILnj=|&>b;0dN6-;r+nwrK{yl+jfMUN!?&C# literal 0 HcmV?d00001 diff --git a/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml b/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml new file mode 100644 index 000000000000..57fd8c7b5afa --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.23.0/extensions.v1beta1.NetworkPolicy.after_roundtrip.yaml @@ -0,0 +1,90 @@ +apiVersion: extensions/v1beta1 +kind: NetworkPolicy +metadata: + annotations: + "9": "10" + clusterName: "15" + creationTimestamp: "2061-09-19T18:13:36Z" + deletionGracePeriodSeconds: -4955867275792137171 + finalizers: + - "14" + generateName: "3" + generation: 8071137005907523419 + labels: + "7": "8" + managedFields: + - apiVersion: "17" + fieldsType: "18" + manager: "16" + operation: 鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć] + subresource: "19" + name: "2" + namespace: "4" + ownerReferences: + - apiVersion: "11" + blockOwnerDeletion: true + controller: false + kind: "12" + name: "13" + uid: Dz廔ȇ{sŊƏp + resourceVersion: "11042405498087606203" + selfLink: "5" + uid: "7" +spec: + egress: + - ports: + - endPort: -630252364 + port: 3 + protocol: s3!Zɾģ毋 + to: + - ipBlock: + cidr: "52" + except: + - "53" + namespaceSelector: + matchExpressions: + - key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8 + operator: DoesNotExist + matchLabels: + 5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz + podSelector: + matchExpressions: + - key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy + operator: DoesNotExist + matchLabels: + P1s-V.9.3: 9..c_uo3a + ingress: + - from: + - ipBlock: + cidr: "38" + except: + - "39" + namespaceSelector: + matchExpressions: + - key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X + operator: In + values: + - g4 + matchLabels: + pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y + podSelector: + matchExpressions: + - key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v + operator: Exists + matchLabels: + 5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g + ports: + - endPort: -420211493 + port: 2 + protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ + podSelector: + matchExpressions: + - key: p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0 + operator: In + values: + - D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n + matchLabels: + 8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4 + policyTypes: + - (dŊiɢz +status: {} diff --git a/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json b/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json new file mode 100644 index 000000000000..48bdd8770a9b --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.json @@ -0,0 +1,153 @@ +{ + "kind": "NetworkPolicy", + "apiVersion": "networking.k8s.io/v1", + "metadata": { + "name": "2", + "generateName": "3", + "namespace": "4", + "selfLink": "5", + "uid": "7", + "resourceVersion": "11042405498087606203", + "generation": 8071137005907523419, + "creationTimestamp": "2061-09-19T18:13:36Z", + "deletionGracePeriodSeconds": -4955867275792137171, + "labels": { + "7": "8" + }, + "annotations": { + "9": "10" + }, + "ownerReferences": [ + { + "apiVersion": "11", + "kind": "12", + "name": "13", + "uid": "Dz廔ȇ{sŊƏp", + "controller": false, + "blockOwnerDeletion": true + } + ], + "finalizers": [ + "14" + ], + "clusterName": "15", + "managedFields": [ + { + "manager": "16", + "operation": "鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć]", + "apiVersion": "17", + "fieldsType": "18", + "subresource": "19" + } + ] + }, + "spec": { + "podSelector": { + "matchLabels": { + "8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3": "68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4" + }, + "matchExpressions": [ + { + "key": "p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0", + "operator": "In", + "values": [ + "D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n" + ] + } + ] + }, + "ingress": [ + { + "ports": [ + { + "protocol": "Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ", + "port": 2, + "endPort": -420211493 + } + ], + "from": [ + { + "podSelector": { + "matchLabels": { + "5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4": "31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g" + }, + "matchExpressions": [ + { + "key": "R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v", + "operator": "Exists" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5": "U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y" + }, + "matchExpressions": [ + { + "key": "f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X", + "operator": "In", + "values": [ + "g4" + ] + } + ] + }, + "ipBlock": { + "cidr": "38", + "except": [ + "39" + ] + } + } + ] + } + ], + "egress": [ + { + "ports": [ + { + "protocol": "s3!Zɾģ毋", + "port": 3, + "endPort": -630252364 + } + ], + "to": [ + { + "podSelector": { + "matchLabels": { + "P1s-V.9.3": "9..c_uo3a" + }, + "matchExpressions": [ + { + "key": "1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy", + "operator": "DoesNotExist" + } + ] + }, + "namespaceSelector": { + "matchLabels": { + "5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B": "N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz" + }, + "matchExpressions": [ + { + "key": "7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8", + "operator": "DoesNotExist" + } + ] + }, + "ipBlock": { + "cidr": "52", + "except": [ + "53" + ] + } + } + ] + } + ], + "policyTypes": [ + "(dŊiɢz" + ] + }, + "status": {} +} \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.pb b/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.pb new file mode 100644 index 0000000000000000000000000000000000000000..2a8cf42d4499c73d19241f8dcd260c64b63f3e3d GIT binary patch literal 1428 zcmY*YONdlQ6z%s0%vkv#4+){kLI*;`V4`hyPcWt8E3ku=i_`xxasNN^k-go zPxtgMWHCx&G6u{?k$@PCh-4ulpoo~yB5E{?AcU;kNk(*$K(f!LT330Sck9-zdrzHn zsv?^q_6pk@XVR(3JX zGc>vS4AXo==Vo~y)43Jaxfpq2w7+xX)ScsRH*am)hGagerB7 z{f|G|-Z{1X_`+wm&cVXY*(*O>%S7&;dgtNCTL&IqKXdcFH&r*!(z%T3+&3=nX6JNv zOk;Br0Lrzx@7lat#5xpZ)`AN7+{!zUg}f^u01-sSe3bKR<$1peWt)QuZXG7a6M@$Q z&qgq(7gDq7G$t(+#_O&`T1|Hla&b2c=mJm|0nE<&N`;f!6iot(HE^A5*9QjrXfKN zVGD6JZW{VT5ay$%hZ({i^{8f&(@0vR`qDHe2`S^EznUoL5~_zfHzA1vqk zw02IP**Smd&exAV{eI`$%a69sM@8ZGjlxeCj9tT_J$g9w()};*UHj)>^=ZbnA$Cz? zZ!yOq!ZnzLY4m9x8&LDG2Xkrkqc9F=tJ&?TMJ$)q#26x}xdLqCRl&i=?ouAn6a@v* zM4Upik#-jWb7+}skU9)hG@{I#b?3N8C=UgPDTO&eN_MjGUd&dRh@zT@ zv<AYmpcHorSG)N}F91imA?IWS zc&m+wJzgKDMc_!#o}$tKPX-_k6DnF3Y6i-Mfvk$~{yM1S>}1PYdSVK_XorWHE~KFg zKYV_xVFhBx5|`pWFPeZ(wn z)aOdg$c~qhVoNPdfk#BJOq=UKazkBO+6pXjsffif#Z;|lJU3d)HhUR-7t0ei0fy1wOL@#lVq)dYuE_pazO3;7(hWSWX7IT(M|z8$>f3na0T( zszu3;;-u9SxHRR`*aAQ_0cng+dokm+q~fXFhP2gC20^qH6ofS;W4t);kr$&;Wg5VW zz1cT%Y~I_1Rw-`}9%6A_ppfk<@V*jBN|A%MD66fW(hD{tIj~9DTQR+2<5W~6j>LVT r?12*k6%S}apZaDqkpI8*Knce(bVrN~AIRO>F5Ug29}a~>BccBQYI2;Q literal 0 HcmV?d00001 diff --git a/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml b/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml new file mode 100644 index 000000000000..239b4b8629c8 --- /dev/null +++ b/staging/src/k8s.io/api/testdata/v1.23.0/networking.k8s.io.v1.NetworkPolicy.after_roundtrip.yaml @@ -0,0 +1,90 @@ +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + annotations: + "9": "10" + clusterName: "15" + creationTimestamp: "2061-09-19T18:13:36Z" + deletionGracePeriodSeconds: -4955867275792137171 + finalizers: + - "14" + generateName: "3" + generation: 8071137005907523419 + labels: + "7": "8" + managedFields: + - apiVersion: "17" + fieldsType: "18" + manager: "16" + operation: 鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć] + subresource: "19" + name: "2" + namespace: "4" + ownerReferences: + - apiVersion: "11" + blockOwnerDeletion: true + controller: false + kind: "12" + name: "13" + uid: Dz廔ȇ{sŊƏp + resourceVersion: "11042405498087606203" + selfLink: "5" + uid: "7" +spec: + egress: + - ports: + - endPort: -630252364 + port: 3 + protocol: s3!Zɾģ毋 + to: + - ipBlock: + cidr: "52" + except: + - "53" + namespaceSelector: + matchExpressions: + - key: 7u-tie4-7--gm3.38vl-1z---883d-v3j4-7y-p--u/d-4_4--.-_Z4.LA3HVG93_._.I3.__-.0-z_z0sn8 + operator: DoesNotExist + matchLabels: + 5l-59g-qy5--ar-gn58nc2-3--6-o-h-9-15v-5925a-x12a-214-3sc/M.JP_oA_4A.J2s3.XL6_EU--AH-Q.GM7B: N-_-vv-Q2qz.W..4....-h._.GgT7_7B_D-..-.k4uz + podSelector: + matchExpressions: + - key: 1_o_p665O_4Gj._BXt.O-7___-Y_um-_8r--684._-_18_...E.-2oy + operator: DoesNotExist + matchLabels: + P1s-V.9.3: 9..c_uo3a + ingress: + - from: + - ipBlock: + cidr: "38" + except: + - "39" + namespaceSelector: + matchExpressions: + - key: f9wk-3--652xh.2a-ik-ak---r0nh-9289---x-p-qpt6-1w-3205c1lxeqyn-5--9d5a3-7bq/4FpF_W-1._-vL_i.-_-a--G-I.-_Y33--.8U.-.5--_zm-.-_RJt2X + operator: In + values: + - g4 + matchLabels: + pl6-2-316/NgO-d.iUaC_wYSJfB._.zS-._..3le-Q4-R-083.S5: U_D__6t-2.-_-8wE._._3.-.83_iq_-y.-25C.A-j..9dfn3Y8d_0_.-y + podSelector: + matchExpressions: + - key: R6S17_.8CnK_O.d-._NwcGnP-w-Sf5_Or.i1_7z.WH-.._Td2-N_Y.v + operator: Exists + matchLabels: + 5__.h-J-M.9_T.q-o7.y-SQ.9A-F-.4--_vLW.jj-.5B.._.5_3-4: 31-4.xXe..03f_--0..L.0qQ6W-.d.20h-OK-_g + ports: + - endPort: -420211493 + port: 2 + protocol: Ǐ2啗塧ȱ蓿彭聡A3fƻfʣ + podSelector: + matchExpressions: + - key: p503---477-49p---o61---4fy--9---7--9-9s-0-u5lj2--10pq-0-7-9-2-0/fP81.-.9Vdx.TB_M-H_5_.t..bG0 + operator: In + values: + - D07.a_.y_y_o0_5qN2_---_M.N_._a6.9bHjdH.-.5_.I8__n + matchLabels: + 8---jop9641lg.p-g8c2-k-912e5-c-e63-n-3n/E9.8ThjT9s-j41-0-6p-JFHn7y-74.-0MUORQQ.N2.3: 68._bQw.-dG6c-.6--_x.--0wmZk1_8._3s_-_Bq.m_4 + policyTypes: + - (dŊiɢz +status: {} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicy.go b/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicy.go index 27ea5d9dde94..81c84d2d46f0 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicy.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicy.go @@ -32,7 +32,8 @@ import ( type NetworkPolicyApplyConfiguration struct { v1.TypeMetaApplyConfiguration `json:",inline"` *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` - Spec *NetworkPolicySpecApplyConfiguration `json:"spec,omitempty"` + Spec *NetworkPolicySpecApplyConfiguration `json:"spec,omitempty"` + Status *NetworkPolicyStatusApplyConfiguration `json:"status,omitempty"` } // NetworkPolicy constructs an declarative configuration of the NetworkPolicy type for use with @@ -247,3 +248,11 @@ func (b *NetworkPolicyApplyConfiguration) WithSpec(value *NetworkPolicySpecApply b.Spec = value return b } + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *NetworkPolicyApplyConfiguration) WithStatus(value *NetworkPolicyStatusApplyConfiguration) *NetworkPolicyApplyConfiguration { + b.Status = value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicystatus.go b/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicystatus.go new file mode 100644 index 000000000000..99c89b09b092 --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/extensions/v1beta1/networkpolicystatus.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// NetworkPolicyStatusApplyConfiguration represents an declarative configuration of the NetworkPolicyStatus type for use +// with apply. +type NetworkPolicyStatusApplyConfiguration struct { + Conditions []v1.ConditionApplyConfiguration `json:"conditions,omitempty"` +} + +// NetworkPolicyStatusApplyConfiguration constructs an declarative configuration of the NetworkPolicyStatus type for use with +// apply. +func NetworkPolicyStatus() *NetworkPolicyStatusApplyConfiguration { + return &NetworkPolicyStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *NetworkPolicyStatusApplyConfiguration) WithConditions(values ...*v1.ConditionApplyConfiguration) *NetworkPolicyStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go index 4ae62c215d20..778fedb37901 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -7847,6 +7847,10 @@ var schemaYAML = typed.YAMLObject(`types: type: namedType: io.k8s.api.extensions.v1beta1.NetworkPolicySpec default: {} + - name: status + type: + namedType: io.k8s.api.extensions.v1beta1.NetworkPolicyStatus + default: {} - name: io.k8s.api.extensions.v1beta1.NetworkPolicyEgressRule map: fields: @@ -7926,6 +7930,17 @@ var schemaYAML = typed.YAMLObject(`types: elementType: scalar: string elementRelationship: atomic +- name: io.k8s.api.extensions.v1beta1.NetworkPolicyStatus + map: + fields: + - name: conditions + type: + list: + elementType: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Condition + elementRelationship: associative + keys: + - type - name: io.k8s.api.extensions.v1beta1.PodSecurityPolicy map: fields: @@ -9395,6 +9410,10 @@ var schemaYAML = typed.YAMLObject(`types: type: namedType: io.k8s.api.networking.v1.NetworkPolicySpec default: {} + - name: status + type: + namedType: io.k8s.api.networking.v1.NetworkPolicyStatus + default: {} - name: io.k8s.api.networking.v1.NetworkPolicyEgressRule map: fields: @@ -9474,6 +9493,17 @@ var schemaYAML = typed.YAMLObject(`types: elementType: scalar: string elementRelationship: atomic +- name: io.k8s.api.networking.v1.NetworkPolicyStatus + map: + fields: + - name: conditions + type: + list: + elementType: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Condition + elementRelationship: associative + keys: + - type - name: io.k8s.api.networking.v1.ServiceBackendPort map: fields: diff --git a/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicy.go b/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicy.go index 409507310b0d..101510e45f80 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicy.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicy.go @@ -32,7 +32,8 @@ import ( type NetworkPolicyApplyConfiguration struct { v1.TypeMetaApplyConfiguration `json:",inline"` *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` - Spec *NetworkPolicySpecApplyConfiguration `json:"spec,omitempty"` + Spec *NetworkPolicySpecApplyConfiguration `json:"spec,omitempty"` + Status *NetworkPolicyStatusApplyConfiguration `json:"status,omitempty"` } // NetworkPolicy constructs an declarative configuration of the NetworkPolicy type for use with @@ -247,3 +248,11 @@ func (b *NetworkPolicyApplyConfiguration) WithSpec(value *NetworkPolicySpecApply b.Spec = value return b } + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *NetworkPolicyApplyConfiguration) WithStatus(value *NetworkPolicyStatusApplyConfiguration) *NetworkPolicyApplyConfiguration { + b.Status = value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicystatus.go b/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicystatus.go new file mode 100644 index 000000000000..032de18eda4e --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/networking/v1/networkpolicystatus.go @@ -0,0 +1,48 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// NetworkPolicyStatusApplyConfiguration represents an declarative configuration of the NetworkPolicyStatus type for use +// with apply. +type NetworkPolicyStatusApplyConfiguration struct { + Conditions []v1.ConditionApplyConfiguration `json:"conditions,omitempty"` +} + +// NetworkPolicyStatusApplyConfiguration constructs an declarative configuration of the NetworkPolicyStatus type for use with +// apply. +func NetworkPolicyStatus() *NetworkPolicyStatusApplyConfiguration { + return &NetworkPolicyStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *NetworkPolicyStatusApplyConfiguration) WithConditions(values ...*v1.ConditionApplyConfiguration) *NetworkPolicyStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/utils.go b/staging/src/k8s.io/client-go/applyconfigurations/utils.go index 1bfd77a53fed..58eda36948ad 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/utils.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/utils.go @@ -953,6 +953,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsextensionsv1beta1.NetworkPolicyPortApplyConfiguration{} case extensionsv1beta1.SchemeGroupVersion.WithKind("NetworkPolicySpec"): return &applyconfigurationsextensionsv1beta1.NetworkPolicySpecApplyConfiguration{} + case extensionsv1beta1.SchemeGroupVersion.WithKind("NetworkPolicyStatus"): + return &applyconfigurationsextensionsv1beta1.NetworkPolicyStatusApplyConfiguration{} case extensionsv1beta1.SchemeGroupVersion.WithKind("PodSecurityPolicy"): return &applyconfigurationsextensionsv1beta1.PodSecurityPolicyApplyConfiguration{} case extensionsv1beta1.SchemeGroupVersion.WithKind("PodSecurityPolicySpec"): @@ -1191,6 +1193,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationsnetworkingv1.NetworkPolicyPortApplyConfiguration{} case networkingv1.SchemeGroupVersion.WithKind("NetworkPolicySpec"): return &applyconfigurationsnetworkingv1.NetworkPolicySpecApplyConfiguration{} + case networkingv1.SchemeGroupVersion.WithKind("NetworkPolicyStatus"): + return &applyconfigurationsnetworkingv1.NetworkPolicyStatusApplyConfiguration{} case networkingv1.SchemeGroupVersion.WithKind("ServiceBackendPort"): return &applyconfigurationsnetworkingv1.ServiceBackendPortApplyConfiguration{} diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go index 8faa9e6ce896..1ff5d8c99268 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go @@ -105,6 +105,18 @@ func (c *FakeNetworkPolicies) Update(ctx context.Context, networkPolicy *v1beta1 return obj.(*v1beta1.NetworkPolicy), err } +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeNetworkPolicies) UpdateStatus(ctx context.Context, networkPolicy *v1beta1.NetworkPolicy, opts v1.UpdateOptions) (*v1beta1.NetworkPolicy, error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceAction(networkpoliciesResource, "status", c.ns, networkPolicy), &v1beta1.NetworkPolicy{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.NetworkPolicy), err +} + // Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. func (c *FakeNetworkPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. @@ -153,3 +165,26 @@ func (c *FakeNetworkPolicies) Apply(ctx context.Context, networkPolicy *extensio } return obj.(*v1beta1.NetworkPolicy), err } + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *FakeNetworkPolicies) ApplyStatus(ctx context.Context, networkPolicy *extensionsv1beta1.NetworkPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.NetworkPolicy, err error) { + if networkPolicy == nil { + return nil, fmt.Errorf("networkPolicy provided to Apply must not be nil") + } + data, err := json.Marshal(networkPolicy) + if err != nil { + return nil, err + } + name := networkPolicy.Name + if name == nil { + return nil, fmt.Errorf("networkPolicy.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(networkpoliciesResource, c.ns, *name, types.ApplyPatchType, data, "status"), &v1beta1.NetworkPolicy{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.NetworkPolicy), err +} diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go index 978b26db0337..f24099b90d37 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go @@ -43,6 +43,7 @@ type NetworkPoliciesGetter interface { type NetworkPolicyInterface interface { Create(ctx context.Context, networkPolicy *v1beta1.NetworkPolicy, opts v1.CreateOptions) (*v1beta1.NetworkPolicy, error) Update(ctx context.Context, networkPolicy *v1beta1.NetworkPolicy, opts v1.UpdateOptions) (*v1beta1.NetworkPolicy, error) + UpdateStatus(ctx context.Context, networkPolicy *v1beta1.NetworkPolicy, opts v1.UpdateOptions) (*v1beta1.NetworkPolicy, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error Get(ctx context.Context, name string, opts v1.GetOptions) (*v1beta1.NetworkPolicy, error) @@ -50,6 +51,7 @@ type NetworkPolicyInterface interface { Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.NetworkPolicy, err error) Apply(ctx context.Context, networkPolicy *extensionsv1beta1.NetworkPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.NetworkPolicy, err error) + ApplyStatus(ctx context.Context, networkPolicy *extensionsv1beta1.NetworkPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.NetworkPolicy, err error) NetworkPolicyExpansion } @@ -139,6 +141,22 @@ func (c *networkPolicies) Update(ctx context.Context, networkPolicy *v1beta1.Net return } +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *networkPolicies) UpdateStatus(ctx context.Context, networkPolicy *v1beta1.NetworkPolicy, opts v1.UpdateOptions) (result *v1beta1.NetworkPolicy, err error) { + result = &v1beta1.NetworkPolicy{} + err = c.client.Put(). + Namespace(c.ns). + Resource("networkpolicies"). + Name(networkPolicy.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(networkPolicy). + Do(ctx). + Into(result) + return +} + // Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. func (c *networkPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { return c.client.Delete(). @@ -206,3 +224,33 @@ func (c *networkPolicies) Apply(ctx context.Context, networkPolicy *extensionsv1 Into(result) return } + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *networkPolicies) ApplyStatus(ctx context.Context, networkPolicy *extensionsv1beta1.NetworkPolicyApplyConfiguration, opts v1.ApplyOptions) (result *v1beta1.NetworkPolicy, err error) { + if networkPolicy == nil { + return nil, fmt.Errorf("networkPolicy provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(networkPolicy) + if err != nil { + return nil, err + } + + name := networkPolicy.Name + if name == nil { + return nil, fmt.Errorf("networkPolicy.Name must be provided to Apply") + } + + result = &v1beta1.NetworkPolicy{} + err = c.client.Patch(types.ApplyPatchType). + Namespace(c.ns). + Resource("networkpolicies"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go index 88e05ba5772c..16c10cac0d54 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/fake/fake_networkpolicy.go @@ -105,6 +105,18 @@ func (c *FakeNetworkPolicies) Update(ctx context.Context, networkPolicy *network return obj.(*networkingv1.NetworkPolicy), err } +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeNetworkPolicies) UpdateStatus(ctx context.Context, networkPolicy *networkingv1.NetworkPolicy, opts v1.UpdateOptions) (*networkingv1.NetworkPolicy, error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceAction(networkpoliciesResource, "status", c.ns, networkPolicy), &networkingv1.NetworkPolicy{}) + + if obj == nil { + return nil, err + } + return obj.(*networkingv1.NetworkPolicy), err +} + // Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. func (c *FakeNetworkPolicies) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. @@ -153,3 +165,26 @@ func (c *FakeNetworkPolicies) Apply(ctx context.Context, networkPolicy *applycon } return obj.(*networkingv1.NetworkPolicy), err } + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *FakeNetworkPolicies) ApplyStatus(ctx context.Context, networkPolicy *applyconfigurationsnetworkingv1.NetworkPolicyApplyConfiguration, opts v1.ApplyOptions) (result *networkingv1.NetworkPolicy, err error) { + if networkPolicy == nil { + return nil, fmt.Errorf("networkPolicy provided to Apply must not be nil") + } + data, err := json.Marshal(networkPolicy) + if err != nil { + return nil, err + } + name := networkPolicy.Name + if name == nil { + return nil, fmt.Errorf("networkPolicy.Name must be provided to Apply") + } + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(networkpoliciesResource, c.ns, *name, types.ApplyPatchType, data, "status"), &networkingv1.NetworkPolicy{}) + + if obj == nil { + return nil, err + } + return obj.(*networkingv1.NetworkPolicy), err +} diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go index d7454ce14525..97afd6278667 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/networking/v1/networkpolicy.go @@ -43,6 +43,7 @@ type NetworkPoliciesGetter interface { type NetworkPolicyInterface interface { Create(ctx context.Context, networkPolicy *v1.NetworkPolicy, opts metav1.CreateOptions) (*v1.NetworkPolicy, error) Update(ctx context.Context, networkPolicy *v1.NetworkPolicy, opts metav1.UpdateOptions) (*v1.NetworkPolicy, error) + UpdateStatus(ctx context.Context, networkPolicy *v1.NetworkPolicy, opts metav1.UpdateOptions) (*v1.NetworkPolicy, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.NetworkPolicy, error) @@ -50,6 +51,7 @@ type NetworkPolicyInterface interface { Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.NetworkPolicy, err error) Apply(ctx context.Context, networkPolicy *networkingv1.NetworkPolicyApplyConfiguration, opts metav1.ApplyOptions) (result *v1.NetworkPolicy, err error) + ApplyStatus(ctx context.Context, networkPolicy *networkingv1.NetworkPolicyApplyConfiguration, opts metav1.ApplyOptions) (result *v1.NetworkPolicy, err error) NetworkPolicyExpansion } @@ -139,6 +141,22 @@ func (c *networkPolicies) Update(ctx context.Context, networkPolicy *v1.NetworkP return } +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *networkPolicies) UpdateStatus(ctx context.Context, networkPolicy *v1.NetworkPolicy, opts metav1.UpdateOptions) (result *v1.NetworkPolicy, err error) { + result = &v1.NetworkPolicy{} + err = c.client.Put(). + Namespace(c.ns). + Resource("networkpolicies"). + Name(networkPolicy.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(networkPolicy). + Do(ctx). + Into(result) + return +} + // Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. func (c *networkPolicies) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { return c.client.Delete(). @@ -206,3 +224,33 @@ func (c *networkPolicies) Apply(ctx context.Context, networkPolicy *networkingv1 Into(result) return } + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *networkPolicies) ApplyStatus(ctx context.Context, networkPolicy *networkingv1.NetworkPolicyApplyConfiguration, opts metav1.ApplyOptions) (result *v1.NetworkPolicy, err error) { + if networkPolicy == nil { + return nil, fmt.Errorf("networkPolicy provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(networkPolicy) + if err != nil { + return nil, err + } + + name := networkPolicy.Name + if name == nil { + return nil, fmt.Errorf("networkPolicy.Name must be provided to Apply") + } + + result = &v1.NetworkPolicy{} + err = c.client.Patch(types.ApplyPatchType). + Namespace(c.ns). + Resource("networkpolicies"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} From 6d0b791b6299fe43d926e203d237cb5f434cd16a Mon Sep 17 00:00:00 2001 From: Ricardo Katz Date: Mon, 28 Mar 2022 17:43:18 -0300 Subject: [PATCH 3/3] Fix comments in netpol status review --- pkg/apis/networking/types.go | 4 ---- pkg/apis/networking/validation/validation_test.go | 2 +- .../networkpolicy/storage/storage_test.go | 5 +++-- pkg/registry/networking/networkpolicy/strategy.go | 13 +++---------- .../networking/networkpolicy/strategy_test.go | 3 ++- staging/src/k8s.io/api/extensions/v1beta1/types.go | 4 ---- staging/src/k8s.io/api/networking/v1/types.go | 4 ---- 7 files changed, 9 insertions(+), 26 deletions(-) diff --git a/pkg/apis/networking/types.go b/pkg/apis/networking/types.go index 766dd0383042..7010bac4dbed 100644 --- a/pkg/apis/networking/types.go +++ b/pkg/apis/networking/types.go @@ -228,10 +228,6 @@ const ( // NetworkPolicyConditionReasonFeatureNotSupported represents a reason where the Network Policy may not have been // implemented in the cluster due to a lack of some feature not supported by the Network Policy provider NetworkPolicyConditionReasonFeatureNotSupported NetworkPolicyConditionReason = "FeatureNotSupported" - - // NetworkPolicyConditionReasonInvalidRule represents a reason where the Network Policy may not have been - // implemented in the cluster due to the specified rule being invalid - NetworkPolicyConditionReasonInvalidRule NetworkPolicyConditionReason = "InvalidRule" ) // NetworkPolicyStatus describe the current state of the NetworkPolicy. diff --git a/pkg/apis/networking/validation/validation_test.go b/pkg/apis/networking/validation/validation_test.go index ef3874c39272..68b433b5f145 100644 --- a/pkg/apis/networking/validation/validation_test.go +++ b/pkg/apis/networking/validation/validation_test.go @@ -514,7 +514,7 @@ func TestValidateNetworkPolicyStatusUpdate(t *testing.T) { LastTransitionTime: metav1.Time{ Time: time.Now().Add(-5 * time.Minute), }, - Reason: string(networking.NetworkPolicyConditionReasonInvalidRule), + Reason: string(networking.NetworkPolicyConditionReasonFeatureNotSupported), Message: "endport is not supported", ObservedGeneration: 2, }, diff --git a/pkg/registry/networking/networkpolicy/storage/storage_test.go b/pkg/registry/networking/networkpolicy/storage/storage_test.go index 6787a8b024ea..15ab8780910d 100644 --- a/pkg/registry/networking/networkpolicy/storage/storage_test.go +++ b/pkg/registry/networking/networkpolicy/storage/storage_test.go @@ -17,6 +17,9 @@ limitations under the License. package storage import ( + "testing" + "time" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -34,8 +37,6 @@ import ( _ "k8s.io/kubernetes/pkg/apis/networking/install" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/registry/registrytest" - "testing" - "time" ) func newStorage(t *testing.T) (*REST, *StatusREST, *etcd3testing.EtcdTestServer) { diff --git a/pkg/registry/networking/networkpolicy/strategy.go b/pkg/registry/networking/networkpolicy/strategy.go index a0f2533623f2..cb85fab6a889 100644 --- a/pkg/registry/networking/networkpolicy/strategy.go +++ b/pkg/registry/networking/networkpolicy/strategy.go @@ -66,8 +66,6 @@ func (networkPolicyStrategy) PrepareForCreate(ctx context.Context, obj runtime.O if utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) { // Create does not set a status when operation is not directed to status subresource - // This is not feature gated, as the field is there, and we just copy it - // when the operation is over spec and not status networkPolicy.Status = networking.NetworkPolicyStatus{} } @@ -87,8 +85,6 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx context.Context, obj, old runt // As soon as the FeatureGate is removed, the whole if statement should be removed as well if utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) || len(oldNetworkPolicy.Status.Conditions) > 0 { // Update is not allowed to set status when the operation is not directed to status subresource - // This is not feature gated, as the field is there, and we just copy it - // when the operation is over spec and not status newNetworkPolicy.Status = oldNetworkPolicy.Status } @@ -172,7 +168,7 @@ func (networkPolicyStatusStrategy) PrepareForUpdate(ctx context.Context, obj, ol // As network policy status is composed only of an array of conditions, we can say that the status // is in use if the condition array is bigger than 0. // quoting @thockin: "we generally keep data in this case, but no updates except to clear it" - if len(newNetworkPolicy.Status.Conditions) < 1 { + if len(newNetworkPolicy.Status.Conditions) == 0 { newNetworkPolicy.Status = networking.NetworkPolicyStatus{} } else { // keep the old status in case of the update is not to clear it @@ -183,11 +179,8 @@ func (networkPolicyStatusStrategy) PrepareForUpdate(ctx context.Context, obj, ol // ValidateUpdate is the default update validation for an end user updating status func (networkPolicyStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { - if utilfeature.DefaultFeatureGate.Enabled(features.NetworkPolicyStatus) { - return validation.ValidateNetworkPolicyStatusUpdate(obj.(*networking.NetworkPolicy).Status, - old.(*networking.NetworkPolicy).Status, field.NewPath("status")) - } - return nil + return validation.ValidateNetworkPolicyStatusUpdate(obj.(*networking.NetworkPolicy).Status, + old.(*networking.NetworkPolicy).Status, field.NewPath("status")) } // WarningsOnUpdate returns warnings for the given update. diff --git a/pkg/registry/networking/networkpolicy/strategy_test.go b/pkg/registry/networking/networkpolicy/strategy_test.go index 18b50c74a4da..8fda233679a3 100644 --- a/pkg/registry/networking/networkpolicy/strategy_test.go +++ b/pkg/registry/networking/networkpolicy/strategy_test.go @@ -19,11 +19,12 @@ package networkpolicy import ( "context" "fmt" - genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "reflect" "testing" "time" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" api "k8s.io/kubernetes/pkg/apis/core" diff --git a/staging/src/k8s.io/api/extensions/v1beta1/types.go b/staging/src/k8s.io/api/extensions/v1beta1/types.go index 79a4e8b6c746..c63cf0d6713a 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1573,10 +1573,6 @@ const ( // NetworkPolicyConditionReasonFeatureNotSupported represents a reason where the Network Policy may not have been // implemented in the cluster due to a lack of some feature not supported by the Network Policy provider NetworkPolicyConditionReasonFeatureNotSupported NetworkPolicyConditionReason = "FeatureNotSupported" - - // NetworkPolicyConditionReasonInvalidRule represents a reason where the Network Policy may not have been - // implemented in the cluster due to the specified rule being invalid - NetworkPolicyConditionReasonInvalidRule NetworkPolicyConditionReason = "InvalidRule" ) // NetworkPolicyStatus describe the current state of the NetworkPolicy. diff --git a/staging/src/k8s.io/api/networking/v1/types.go b/staging/src/k8s.io/api/networking/v1/types.go index 736b53df7492..bb6da40987d5 100644 --- a/staging/src/k8s.io/api/networking/v1/types.go +++ b/staging/src/k8s.io/api/networking/v1/types.go @@ -233,10 +233,6 @@ const ( // NetworkPolicyConditionReasonFeatureNotSupported represents a reason where the Network Policy may not have been // implemented in the cluster due to a lack of some feature not supported by the Network Policy provider NetworkPolicyConditionReasonFeatureNotSupported NetworkPolicyConditionReason = "FeatureNotSupported" - - // NetworkPolicyConditionReasonInvalidRule represents a reason where the Network Policy may not have been - // implemented in the cluster due to the specified rule being invalid - NetworkPolicyConditionReasonInvalidRule NetworkPolicyConditionReason = "InvalidRule" ) // NetworkPolicyStatus describe the current state of the NetworkPolicy.