From 5e858945af7ac5479833fe624fa572b7b57a9de7 Mon Sep 17 00:00:00 2001 From: deads2k Date: Mon, 10 Apr 2017 11:20:51 -0400 Subject: [PATCH] remove objectmetafor Kubernetes-commit: 04460c8750b9a47672aa708251de0e703cfb7266 --- pkg/registry/generic/registry/store.go | 16 +- pkg/registry/rest/create.go | 25 +-- pkg/registry/rest/delete.go | 26 +-- pkg/registry/rest/meta.go | 16 +- pkg/registry/rest/meta_test.go | 9 +- pkg/registry/rest/resttest/resttest.go | 233 +++++++++++++------------ pkg/registry/rest/update.go | 18 +- pkg/storage/etcd/etcd_helper.go | 7 +- pkg/storage/etcd3/store.go | 7 +- 9 files changed, 181 insertions(+), 176 deletions(-) diff --git a/pkg/registry/generic/registry/store.go b/pkg/registry/generic/registry/store.go index 3f8f8d566..8f39a9f29 100644 --- a/pkg/registry/generic/registry/store.go +++ b/pkg/registry/generic/registry/store.go @@ -331,17 +331,17 @@ func (e *Store) shouldDeleteDuringUpdate(ctx genericapirequest.Context, key stri if !e.EnableGarbageCollection { return false } - newMeta, err := metav1.ObjectMetaFor(obj) + newMeta, err := meta.Accessor(obj) if err != nil { utilruntime.HandleError(err) return false } - oldMeta, err := metav1.ObjectMetaFor(existing) + oldMeta, err := meta.Accessor(existing) if err != nil { utilruntime.HandleError(err) return false } - return len(newMeta.Finalizers) == 0 && oldMeta.DeletionGracePeriodSeconds != nil && *oldMeta.DeletionGracePeriodSeconds == 0 + return len(newMeta.GetFinalizers()) == 0 && oldMeta.GetDeletionGracePeriodSeconds() != nil && *oldMeta.GetDeletionGracePeriodSeconds() == 0 } // deleteForEmptyFinalizers handles deleting an object once its finalizer list @@ -652,7 +652,7 @@ func shouldUpdateFinalizers(e *Store, accessor metav1.Object, options *metav1.De // DeletionTimestamp to "now". Finalizers are watching for such updates and will // finalize the object if their IDs are present in the object's Finalizers list. func markAsDeleting(obj runtime.Object) (err error) { - objectMeta, kerr := metav1.ObjectMetaFor(obj) + objectMeta, kerr := meta.Accessor(obj) if kerr != nil { return kerr } @@ -660,12 +660,12 @@ func markAsDeleting(obj runtime.Object) (err error) { // This handles Generation bump for resources that don't support graceful // deletion. For resources that support graceful deletion is handle in // pkg/api/rest/delete.go - if objectMeta.DeletionTimestamp == nil && objectMeta.Generation > 0 { - objectMeta.Generation++ + if objectMeta.GetDeletionTimestamp() == nil && objectMeta.GetGeneration() > 0 { + objectMeta.SetGeneration(objectMeta.GetGeneration() + 1) } - objectMeta.DeletionTimestamp = &now + objectMeta.SetDeletionTimestamp(&now) var zero int64 = 0 - objectMeta.DeletionGracePeriodSeconds = &zero + objectMeta.SetDeletionGracePeriodSeconds(&zero) return nil } diff --git a/pkg/registry/rest/create.go b/pkg/registry/rest/create.go index 43b5e0ad4..60ac7ccf2 100644 --- a/pkg/registry/rest/create.go +++ b/pkg/registry/rest/create.go @@ -18,6 +18,7 @@ package rest import ( "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" genericvalidation "k8s.io/apimachinery/pkg/api/validation" "k8s.io/apimachinery/pkg/api/validation/path" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -71,28 +72,28 @@ func BeforeCreate(strategy RESTCreateStrategy, ctx genericapirequest.Context, ob return errors.NewBadRequest("the namespace of the provided object does not match the namespace sent on the request") } } else { - objectMeta.Namespace = metav1.NamespaceNone + objectMeta.SetNamespace(metav1.NamespaceNone) } - objectMeta.DeletionTimestamp = nil - objectMeta.DeletionGracePeriodSeconds = nil + objectMeta.SetDeletionTimestamp(nil) + objectMeta.SetDeletionGracePeriodSeconds(nil) strategy.PrepareForCreate(ctx, obj) FillObjectMetaSystemFields(ctx, objectMeta) - if len(objectMeta.GenerateName) > 0 && len(objectMeta.Name) == 0 { - objectMeta.Name = strategy.GenerateName(objectMeta.GenerateName) + if len(objectMeta.GetGenerateName()) > 0 && len(objectMeta.GetName()) == 0 { + objectMeta.SetName(strategy.GenerateName(objectMeta.GetGenerateName())) } // ClusterName is ignored and should not be saved - objectMeta.ClusterName = "" + objectMeta.SetClusterName("") if errs := strategy.Validate(ctx, obj); len(errs) > 0 { - return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs) + return errors.NewInvalid(kind.GroupKind(), objectMeta.GetName(), errs) } // Custom validation (including name validation) passed // Now run common validation on object meta // Do this *after* custom validation so that specific error messages are shown whenever possible - if errs := genericvalidation.ValidateObjectMeta(objectMeta, strategy.NamespaceScoped(), path.ValidatePathSegmentName, field.NewPath("metadata")); len(errs) > 0 { - return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs) + if errs := genericvalidation.ValidateObjectMetaAccessor(objectMeta, strategy.NamespaceScoped(), path.ValidatePathSegmentName, field.NewPath("metadata")); len(errs) > 0 { + return errors.NewInvalid(kind.GroupKind(), objectMeta.GetName(), errs) } strategy.Canonicalize(obj) @@ -112,7 +113,7 @@ func CheckGeneratedNameError(strategy RESTCreateStrategy, err error, obj runtime return kerr } - if len(objectMeta.GenerateName) == 0 { + if len(objectMeta.GetGenerateName()) == 0 { return err } @@ -120,8 +121,8 @@ func CheckGeneratedNameError(strategy RESTCreateStrategy, err error, obj runtime } // objectMetaAndKind retrieves kind and ObjectMeta from a runtime object, or returns an error. -func objectMetaAndKind(typer runtime.ObjectTyper, obj runtime.Object) (*metav1.ObjectMeta, schema.GroupVersionKind, error) { - objectMeta, err := metav1.ObjectMetaFor(obj) +func objectMetaAndKind(typer runtime.ObjectTyper, obj runtime.Object) (metav1.Object, schema.GroupVersionKind, error) { + objectMeta, err := meta.Accessor(obj) if err != nil { return nil, schema.GroupVersionKind{}, errors.NewInternalError(err) } diff --git a/pkg/registry/rest/delete.go b/pkg/registry/rest/delete.go index ace4bab59..ad407e3ec 100644 --- a/pkg/registry/rest/delete.go +++ b/pkg/registry/rest/delete.go @@ -71,8 +71,8 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx genericapirequest.Context, ob return false, false, errors.NewInvalid(schema.GroupKind{}, "", errs) } // Checking the Preconditions here to fail early. They'll be enforced later on when we actually do the deletion, too. - if options.Preconditions != nil && options.Preconditions.UID != nil && *options.Preconditions.UID != objectMeta.UID { - return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.Name, fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.UID)) + if options.Preconditions != nil && options.Preconditions.UID != nil && *options.Preconditions.UID != objectMeta.GetUID() { + return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.GetName(), fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.GetUID())) } gracefulStrategy, ok := strategy.(RESTGracefulDeleteStrategy) if !ok { @@ -81,7 +81,7 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx genericapirequest.Context, ob return false, false, nil } // if the object is already being deleted, no need to update generation. - if objectMeta.DeletionTimestamp != nil { + if objectMeta.GetDeletionTimestamp() != nil { // if we are already being deleted, we may only shorten the deletion grace period // this means the object was gracefully deleted previously but deletionGracePeriodSeconds was not set, // so we force deletion immediately @@ -93,24 +93,24 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx genericapirequest.Context, ob // a resource was previously left in a state that was non-recoverable. We // check if the existing stored resource has a grace period as 0 and if so // attempt to delete immediately in order to recover from this scenario. - if objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds == 0 { + if objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() == 0 { return false, false, nil } // only a shorter grace period may be provided by a user if options.GracePeriodSeconds != nil { period := int64(*options.GracePeriodSeconds) - if period >= *objectMeta.DeletionGracePeriodSeconds { + if period >= *objectMeta.GetDeletionGracePeriodSeconds() { return false, true, nil } newDeletionTimestamp := metav1.NewTime( - objectMeta.DeletionTimestamp.Add(-time.Second * time.Duration(*objectMeta.DeletionGracePeriodSeconds)). + objectMeta.GetDeletionTimestamp().Add(-time.Second * time.Duration(*objectMeta.GetDeletionGracePeriodSeconds())). Add(time.Second * time.Duration(*options.GracePeriodSeconds))) - objectMeta.DeletionTimestamp = &newDeletionTimestamp - objectMeta.DeletionGracePeriodSeconds = &period + objectMeta.SetDeletionTimestamp(&newDeletionTimestamp) + objectMeta.SetDeletionGracePeriodSeconds(&period) return true, false, nil } // graceful deletion is pending, do nothing - options.GracePeriodSeconds = objectMeta.DeletionGracePeriodSeconds + options.GracePeriodSeconds = objectMeta.GetDeletionGracePeriodSeconds() return false, true, nil } @@ -118,14 +118,14 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx genericapirequest.Context, ob return false, false, nil } now := metav1.NewTime(metav1.Now().Add(time.Second * time.Duration(*options.GracePeriodSeconds))) - objectMeta.DeletionTimestamp = &now - objectMeta.DeletionGracePeriodSeconds = options.GracePeriodSeconds + objectMeta.SetDeletionTimestamp(&now) + objectMeta.SetDeletionGracePeriodSeconds(options.GracePeriodSeconds) // If it's the first graceful deletion we are going to set the DeletionTimestamp to non-nil. // Controllers of the object that's being deleted shouldn't take any nontrivial actions, hence its behavior changes. // Thus we need to bump object's Generation (if set). This handles generation bump during graceful deletion. // The bump for objects that don't support graceful deletion is handled in pkg/registry/generic/registry/store.go. - if objectMeta.Generation > 0 { - objectMeta.Generation++ + if objectMeta.GetGeneration() > 0 { + objectMeta.SetGeneration(objectMeta.GetGeneration() + 1) } return true, false, nil } diff --git a/pkg/registry/rest/meta.go b/pkg/registry/rest/meta.go index 5a6d079ad..7257833ba 100644 --- a/pkg/registry/rest/meta.go +++ b/pkg/registry/rest/meta.go @@ -23,16 +23,16 @@ import ( ) // FillObjectMetaSystemFields populates fields that are managed by the system on ObjectMeta. -func FillObjectMetaSystemFields(ctx genericapirequest.Context, meta *metav1.ObjectMeta) { - meta.CreationTimestamp = metav1.Now() +func FillObjectMetaSystemFields(ctx genericapirequest.Context, meta metav1.Object) { + meta.SetCreationTimestamp(metav1.Now()) // allows admission controllers to assign a UID earlier in the request processing // to support tracking resources pending creation. uid, found := genericapirequest.UIDFrom(ctx) if !found { uid = uuid.NewUUID() } - meta.UID = uid - meta.SelfLink = "" + meta.SetUID(uid) + meta.SetSelfLink("") } // ValidNamespace returns false if the namespace on the context differs from @@ -40,10 +40,10 @@ func FillObjectMetaSystemFields(ctx genericapirequest.Context, meta *metav1.Obje // the context. // // TODO(sttts): move into pkg/genericapiserver/endpoints -func ValidNamespace(ctx genericapirequest.Context, resource *metav1.ObjectMeta) bool { +func ValidNamespace(ctx genericapirequest.Context, resource metav1.Object) bool { ns, ok := genericapirequest.NamespaceFrom(ctx) - if len(resource.Namespace) == 0 { - resource.Namespace = ns + if len(resource.GetNamespace()) == 0 { + resource.SetNamespace(ns) } - return ns == resource.Namespace && ok + return ns == resource.GetNamespace() && ok } diff --git a/pkg/registry/rest/meta_test.go b/pkg/registry/rest/meta_test.go index e53534775..a6710423b 100644 --- a/pkg/registry/rest/meta_test.go +++ b/pkg/registry/rest/meta_test.go @@ -19,6 +19,7 @@ package rest import ( "testing" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apiserver/pkg/apis/example" @@ -49,11 +50,15 @@ func TestFillObjectMetaSystemFields(t *testing.T) { func TestHasObjectMetaSystemFieldValues(t *testing.T) { ctx := genericapirequest.NewDefaultContext() resource := metav1.ObjectMeta{} - if metav1.HasObjectMetaSystemFieldValues(&resource) { + objMeta, err := meta.Accessor(&resource) + if err != nil { + t.Fatal(err) + } + if metav1.HasObjectMetaSystemFieldValues(objMeta) { t.Errorf("the resource does not have all fields yet populated, but incorrectly reports it does") } FillObjectMetaSystemFields(ctx, &resource) - if !metav1.HasObjectMetaSystemFieldValues(&resource) { + if !metav1.HasObjectMetaSystemFieldValues(objMeta) { t.Errorf("the resource does have all fields populated, but incorrectly reports it does not") } } diff --git a/pkg/registry/rest/resttest/resttest.go b/pkg/registry/rest/resttest/resttest.go index 3d680e4dc..be2fb94fe 100644 --- a/pkg/registry/rest/resttest/resttest.go +++ b/pkg/registry/rest/resttest/resttest.go @@ -25,6 +25,7 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/validation/path" metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -107,24 +108,24 @@ func (t *Tester) TestContext() genericapirequest.Context { return genericapirequest.WithNamespace(genericapirequest.NewContext(), t.TestNamespace()) } -func (t *Tester) getObjectMetaOrFail(obj runtime.Object) *metav1.ObjectMeta { - meta, err := metav1.ObjectMetaFor(obj) +func (t *Tester) getObjectMetaOrFail(obj runtime.Object) metav1.Object { + objMeta, err := meta.Accessor(obj) if err != nil { t.Fatalf("object does not have ObjectMeta: %v\n%#v", err, obj) } - return meta + return objMeta } func (t *Tester) setObjectMeta(obj runtime.Object, name string) { meta := t.getObjectMetaOrFail(obj) - meta.Name = name + meta.SetName(name) if t.clusterScope { - meta.Namespace = metav1.NamespaceNone + meta.SetNamespace(metav1.NamespaceNone) } else { - meta.Namespace = genericapirequest.NamespaceValue(t.TestContext()) + meta.SetNamespace(genericapirequest.NamespaceValue(t.TestContext())) } - meta.GenerateName = "" - meta.Generation = 1 + meta.SetGenerateName("") + meta.SetGeneration(1) } func copyOrDie(obj runtime.Object, copier runtime.ObjectCopier) runtime.Object { @@ -228,7 +229,7 @@ func (t *Tester) TestWatch( // Creation tests. func (t *Tester) delete(ctx genericapirequest.Context, obj runtime.Object) error { - objectMeta, err := metav1.ObjectMetaFor(obj) + objectMeta, err := meta.Accessor(obj) if err != nil { return err } @@ -236,7 +237,7 @@ func (t *Tester) delete(ctx genericapirequest.Context, obj runtime.Object) error if !ok { return fmt.Errorf("Expected deleting storage, got %v", t.storage) } - _, _, err = deleter.Delete(ctx, objectMeta.Name, nil) + _, _, err = deleter.Delete(ctx, objectMeta.GetName(), nil) return err } @@ -276,7 +277,7 @@ func (t *Tester) testCreateEquals(obj runtime.Object, getFn GetFunc) { // Set resource version which might be unset in created object. createdMeta := t.getObjectMetaOrFail(created) gotMeta := t.getObjectMetaOrFail(got) - createdMeta.ResourceVersion = gotMeta.ResourceVersion + createdMeta.SetResourceVersion(gotMeta.GetResourceVersion()) if e, a := created, got; !apiequality.Semantic.DeepEqual(e, a) { t.Errorf("unexpected obj: %#v, expected %#v", e, a) @@ -287,7 +288,7 @@ func (t *Tester) testCreateDiscardsObjectNamespace(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) // Ignore non-empty namespace in object meta - objectMeta.Namespace = "not-default" + objectMeta.SetNamespace("not-default") // Ideally, we'd get an error back here, but at least verify the namespace wasn't persisted created, err := t.storage.(rest.Creater).Create(t.TestContext(), copyOrDie(valid, t.scheme)) @@ -296,30 +297,30 @@ func (t *Tester) testCreateDiscardsObjectNamespace(valid runtime.Object) { } defer t.delete(t.TestContext(), created) createdObjectMeta := t.getObjectMetaOrFail(created) - if createdObjectMeta.Namespace != metav1.NamespaceNone { - t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.Namespace) + if createdObjectMeta.GetNamespace() != metav1.NamespaceNone { + t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.GetNamespace()) } } func (t *Tester) testCreateGeneratesName(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) - objectMeta.Name = "" - objectMeta.GenerateName = "test-" + objectMeta.SetName("") + objectMeta.SetGenerateName("test-") created, err := t.storage.(rest.Creater).Create(t.TestContext(), valid) if err != nil { t.Fatalf("Unexpected error: %v", err) } defer t.delete(t.TestContext(), created) - if objectMeta.Name == "test-" || !strings.HasPrefix(objectMeta.Name, "test-") { + if objectMeta.GetName() == "test-" || !strings.HasPrefix(objectMeta.GetName(), "test-") { t.Errorf("unexpected name: %#v", valid) } } func (t *Tester) testCreateHasMetadata(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) - objectMeta.Name = t.namer(1) - objectMeta.Namespace = t.TestNamespace() + objectMeta.SetName(t.namer(1)) + objectMeta.SetNamespace(t.TestNamespace()) obj, err := t.storage.(rest.Creater).Create(t.TestContext(), valid) if err != nil { @@ -345,8 +346,8 @@ func (t *Tester) testCreateIgnoresContextNamespace(valid runtime.Object) { } defer t.delete(ctx, created) createdObjectMeta := t.getObjectMetaOrFail(created) - if createdObjectMeta.Namespace != metav1.NamespaceNone { - t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.Namespace) + if createdObjectMeta.GetNamespace() != metav1.NamespaceNone { + t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.GetNamespace()) } } @@ -354,7 +355,7 @@ func (t *Tester) testCreateIgnoresMismatchedNamespace(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) // Ignore non-empty namespace in object meta - objectMeta.Namespace = "not-default" + objectMeta.SetNamespace("not-default") ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "not-default2") // Ideally, we'd get an error back here, but at least verify the namespace wasn't persisted @@ -364,8 +365,8 @@ func (t *Tester) testCreateIgnoresMismatchedNamespace(valid runtime.Object) { } defer t.delete(ctx, created) createdObjectMeta := t.getObjectMetaOrFail(created) - if createdObjectMeta.Namespace != metav1.NamespaceNone { - t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.Namespace) + if createdObjectMeta.GetNamespace() != metav1.NamespaceNone { + t.Errorf("Expected empty namespace on created object, got '%v'", createdObjectMeta.GetNamespace()) } } @@ -373,7 +374,7 @@ func (t *Tester) testCreateValidatesNames(valid runtime.Object) { for _, invalidName := range path.NameMayNotBe { objCopy := copyOrDie(valid, t.scheme) objCopyMeta := t.getObjectMetaOrFail(objCopy) - objCopyMeta.Name = invalidName + objCopyMeta.SetName(invalidName) ctx := t.TestContext() _, err := t.storage.(rest.Creater).Create(ctx, objCopy) @@ -385,7 +386,7 @@ func (t *Tester) testCreateValidatesNames(valid runtime.Object) { for _, invalidSuffix := range path.NameMayNotContain { objCopy := copyOrDie(valid, t.scheme) objCopyMeta := t.getObjectMetaOrFail(objCopy) - objCopyMeta.Name += invalidSuffix + objCopyMeta.SetName(objCopyMeta.GetName() + invalidSuffix) ctx := t.TestContext() _, err := t.storage.(rest.Creater).Create(ctx, objCopy) @@ -407,7 +408,7 @@ func (t *Tester) testCreateInvokesValidation(invalid ...runtime.Object) { func (t *Tester) testCreateRejectsMismatchedNamespace(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) - objectMeta.Namespace = "not-default" + objectMeta.SetNamespace("not-default") _, err := t.storage.(rest.Creater).Create(t.TestContext(), valid) if err == nil { @@ -420,8 +421,8 @@ func (t *Tester) testCreateRejectsMismatchedNamespace(valid runtime.Object) { func (t *Tester) testCreateResetsUserData(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) now := metav1.Now() - objectMeta.UID = "bad-uid" - objectMeta.CreationTimestamp = now + objectMeta.SetUID("bad-uid") + objectMeta.SetCreationTimestamp(now) obj, err := t.storage.(rest.Creater).Create(t.TestContext(), valid) if err != nil { @@ -431,15 +432,15 @@ func (t *Tester) testCreateResetsUserData(valid runtime.Object) { t.Fatalf("Unexpected object from result: %#v", obj) } defer t.delete(t.TestContext(), obj) - if objectMeta.UID == "bad-uid" || objectMeta.CreationTimestamp == now { + if objectMeta.GetUID() == "bad-uid" || objectMeta.GetCreationTimestamp() == now { t.Errorf("ObjectMeta did not reset basic fields: %#v", objectMeta) } } func (t *Tester) testCreateIgnoreClusterName(valid runtime.Object) { objectMeta := t.getObjectMetaOrFail(valid) - objectMeta.Name = t.namer(3) - objectMeta.ClusterName = "clustername-to-ignore" + objectMeta.SetName(t.namer(3)) + objectMeta.SetClusterName("clustername-to-ignore") obj, err := t.storage.(rest.Creater).Create(t.TestContext(), copyOrDie(valid, t.scheme)) if err != nil { @@ -447,8 +448,8 @@ func (t *Tester) testCreateIgnoreClusterName(valid runtime.Object) { } defer t.delete(t.TestContext(), obj) createdObjectMeta := t.getObjectMetaOrFail(obj) - if len(createdObjectMeta.ClusterName) != 0 { - t.Errorf("Expected empty clusterName on created object, got '%v'", createdObjectMeta.ClusterName) + if len(createdObjectMeta.GetClusterName()) != 0 { + t.Errorf("Expected empty clusterName on created object, got '%v'", createdObjectMeta.GetClusterName()) } } @@ -470,7 +471,7 @@ func (t *Tester) testUpdateEquals(obj runtime.Object, createFn CreateFunc, getFn } toUpdate = updateFn(toUpdate) toUpdateMeta := t.getObjectMetaOrFail(toUpdate) - updated, created, err := t.storage.(rest.Updater).Update(ctx, toUpdateMeta.Name, rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme)) + updated, created, err := t.storage.(rest.Updater).Update(ctx, toUpdateMeta.GetName(), rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme)) if err != nil { t.Errorf("unexpected error: %v", err) } @@ -484,7 +485,7 @@ func (t *Tester) testUpdateEquals(obj runtime.Object, createFn CreateFunc, getFn // Set resource version which might be unset in created object. updatedMeta := t.getObjectMetaOrFail(updated) gotMeta := t.getObjectMetaOrFail(got) - updatedMeta.ResourceVersion = gotMeta.ResourceVersion + updatedMeta.SetResourceVersion(gotMeta.GetResourceVersion()) if e, a := updated, got; !apiequality.Semantic.DeepEqual(e, a) { t.Errorf("unexpected obj: %#v, expected %#v", e, a) @@ -508,9 +509,9 @@ func (t *Tester) testUpdateFailsOnVersionTooOld(obj runtime.Object, createFn Cre older := copyOrDie(storedFoo, t.scheme) olderMeta := t.getObjectMetaOrFail(older) - olderMeta.ResourceVersion = "1" + olderMeta.SetResourceVersion("1") - _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, t.scheme)) + _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.GetName(), rest.DefaultUpdatedObjectInfo(older, t.scheme)) if err == nil { t.Errorf("Expected an error, but we didn't get one") } else if !errors.IsConflict(err) { @@ -530,7 +531,7 @@ func (t *Tester) testUpdateInvokesValidation(obj runtime.Object, createFn Create for _, update := range invalidUpdateFn { toUpdate := update(copyOrDie(foo, t.scheme)) toUpdateMeta := t.getObjectMetaOrFail(toUpdate) - got, created, err := t.storage.(rest.Updater).Update(t.TestContext(), toUpdateMeta.Name, rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme)) + got, created, err := t.storage.(rest.Updater).Update(t.TestContext(), toUpdateMeta.GetName(), rest.DefaultUpdatedObjectInfo(toUpdate, t.scheme)) if got != nil || created { t.Errorf("expected nil object and no creation for object: %v", toUpdate) } @@ -545,13 +546,13 @@ func (t *Tester) testUpdateWithWrongUID(obj runtime.Object, createFn CreateFunc, foo := copyOrDie(obj, t.scheme) t.setObjectMeta(foo, t.namer(5)) objectMeta := t.getObjectMetaOrFail(foo) - objectMeta.UID = types.UID("UID0000") + objectMeta.SetUID(types.UID("UID0000")) if err := createFn(ctx, foo); err != nil { t.Errorf("unexpected error: %v", err) } - objectMeta.UID = types.UID("UID1111") + objectMeta.SetUID(types.UID("UID1111")) - obj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.Name, rest.DefaultUpdatedObjectInfo(foo, t.scheme)) + obj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.GetName(), rest.DefaultUpdatedObjectInfo(foo, t.scheme)) if created || obj != nil { t.Errorf("expected nil object and no creation for object: %v", foo) } @@ -565,7 +566,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat foo := copyOrDie(obj, t.scheme) t.setObjectMeta(foo, t.namer(6)) objectMeta := t.getObjectMetaOrFail(foo) - objectMeta.Annotations = map[string]string{"A": "1"} + objectMeta.SetAnnotations(map[string]string{"A": "1"}) if err := createFn(ctx, foo); err != nil { t.Errorf("unexpected error: %v", err) return @@ -579,7 +580,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat storedFooWithUpdates := copyOrDie(storedFoo, t.scheme) objectMeta = t.getObjectMetaOrFail(storedFooWithUpdates) - objectMeta.Annotations = map[string]string{"A": "2"} + objectMeta.SetAnnotations(map[string]string{"A": "2"}) // Make sure a custom transform is called, and sees the expected updatedObject and oldObject // This tests the mechanism used to pass the old and new object to admission @@ -595,7 +596,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat return updatedObject, nil } - updatedObj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.Name, rest.DefaultUpdatedObjectInfo(storedFooWithUpdates, t.scheme, noopTransform)) + updatedObj, created, err := t.storage.(rest.Updater).Update(ctx, objectMeta.GetName(), rest.DefaultUpdatedObjectInfo(storedFooWithUpdates, t.scheme, noopTransform)) if err != nil { t.Errorf("unexpected error: %v", err) return @@ -654,9 +655,9 @@ func (t *Tester) testUpdateIgnoreGenerationUpdates(obj runtime.Object, createFn older := copyOrDie(storedFoo, t.scheme) olderMeta := t.getObjectMetaOrFail(older) - olderMeta.Generation = 2 + olderMeta.SetGeneration(2) - _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, t.scheme)) + _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.GetName(), rest.DefaultUpdatedObjectInfo(older, t.scheme)) if err != nil { t.Errorf("Unexpected error: %v", err) } @@ -665,7 +666,7 @@ func (t *Tester) testUpdateIgnoreGenerationUpdates(obj runtime.Object, createFn if err != nil { t.Errorf("unexpected error: %v", err) } - if exp, got := int64(1), t.getObjectMetaOrFail(updatedFoo).Generation; exp != got { + if exp, got := int64(1), t.getObjectMetaOrFail(updatedFoo).GetGeneration(); exp != got { t.Errorf("Unexpected generation update: expected %d, got %d", exp, got) } } @@ -704,8 +705,8 @@ func (t *Tester) testUpdateRejectsMismatchedNamespace(obj runtime.Object, create } objectMeta := t.getObjectMetaOrFail(storedFoo) - objectMeta.Name = t.namer(1) - objectMeta.Namespace = "not-default" + objectMeta.SetName(t.namer(1)) + objectMeta.SetNamespace("not-default") obj, updated, err := t.storage.(rest.Updater).Update(t.TestContext(), "foo1", rest.DefaultUpdatedObjectInfo(storedFoo, t.scheme)) if obj != nil || updated { @@ -736,9 +737,9 @@ func (t *Tester) testUpdateIgnoreClusterName(obj runtime.Object, createFn Create older := copyOrDie(storedFoo, t.scheme) olderMeta := t.getObjectMetaOrFail(older) - olderMeta.ClusterName = "clustername-to-ignore" + olderMeta.SetClusterName("clustername-to-ignore") - _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.Name, rest.DefaultUpdatedObjectInfo(older, t.scheme)) + _, _, err = t.storage.(rest.Updater).Update(t.TestContext(), olderMeta.GetName(), rest.DefaultUpdatedObjectInfo(older, t.scheme)) if err != nil { t.Errorf("Unexpected error: %v", err) } @@ -747,7 +748,7 @@ func (t *Tester) testUpdateIgnoreClusterName(obj runtime.Object, createFn Create if err != nil { t.Errorf("unexpected error: %v", err) } - if clusterName := t.getObjectMetaOrFail(updatedFoo).ClusterName; len(clusterName) != 0 { + if clusterName := t.getObjectMetaOrFail(updatedFoo).GetClusterName(); len(clusterName) != 0 { t.Errorf("Unexpected clusterName update: expected empty, got %v", clusterName) } @@ -765,12 +766,12 @@ func (t *Tester) testDeleteNoGraceful(obj runtime.Object, createFn CreateFunc, g t.Errorf("unexpected error: %v", err) } objectMeta := t.getObjectMetaOrFail(foo) - obj, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(10)) + obj, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(10)) if err != nil { t.Errorf("unexpected error: %v", err) } if !wasDeleted { - t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.GetName()) } if !t.returnDeletedObject { if status, ok := obj.(*metav1.Status); !ok { @@ -789,7 +790,7 @@ func (t *Tester) testDeleteNoGraceful(obj runtime.Object, createFn CreateFunc, g func (t *Tester) testDeleteNonExist(obj runtime.Object) { objectMeta := t.getObjectMetaOrFail(obj) - _, _, err := t.storage.(rest.GracefulDeleter).Delete(t.TestContext(), objectMeta.Name, nil) + _, _, err := t.storage.(rest.GracefulDeleter).Delete(t.TestContext(), objectMeta.GetName(), nil) if err == nil || !errors.IsNotFound(err) { t.Errorf("unexpected error: %v", err) } @@ -804,16 +805,16 @@ func (t *Tester) testDeleteWithUID(obj runtime.Object, createFn CreateFunc, getF foo := copyOrDie(obj, t.scheme) t.setObjectMeta(foo, t.namer(1)) objectMeta := t.getObjectMetaOrFail(foo) - objectMeta.UID = types.UID("UID0000") + objectMeta.SetUID(types.UID("UID0000")) if err := createFn(ctx, foo); err != nil { t.Errorf("unexpected error: %v", err) } - obj, _, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewPreconditionDeleteOptions("UID1111")) + obj, _, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewPreconditionDeleteOptions("UID1111")) if err == nil || !errors.IsConflict(err) { t.Errorf("unexpected error: %v", err) } - obj, _, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewPreconditionDeleteOptions("UID0000")) + obj, _, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewPreconditionDeleteOptions("UID0000")) if err != nil { t.Errorf("unexpected error: %v", err) } @@ -844,27 +845,27 @@ func (t *Tester) testDeleteGracefulHasDefault(obj runtime.Object, createFn Creat t.Errorf("unexpected error: %v", err) } objectMeta := t.getObjectMetaOrFail(foo) - generation := objectMeta.Generation - _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, &metav1.DeleteOptions{}) + generation := objectMeta.GetGeneration() + _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), &metav1.DeleteOptions{}) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } if _, err := getFn(ctx, foo); err != nil { t.Fatalf("did not gracefully delete resource: %v", err) } - object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}) + object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}) if err != nil { t.Fatalf("unexpected error, object should exist: %v", err) } objectMeta = t.getObjectMetaOrFail(object) - if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != expectedGrace { + if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace { t.Errorf("unexpected deleted meta: %#v", objectMeta) } - if generation >= objectMeta.Generation { + if generation >= objectMeta.GetGeneration() { t.Error("Generation wasn't bumped when deletion timestamp was set") } } @@ -878,27 +879,27 @@ func (t *Tester) testDeleteGracefulWithValue(obj runtime.Object, createFn Create t.Errorf("unexpected error: %v", err) } objectMeta := t.getObjectMetaOrFail(foo) - generation := objectMeta.Generation - _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace+2)) + generation := objectMeta.GetGeneration() + _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace+2)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } if _, err := getFn(ctx, foo); err != nil { t.Fatalf("did not gracefully delete resource: %v", err) } - object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}) + object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}) if err != nil { t.Errorf("unexpected error, object should exist: %v", err) } objectMeta = t.getObjectMetaOrFail(object) - if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != expectedGrace+2 { + if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace+2 { t.Errorf("unexpected deleted meta: %#v", objectMeta) } - if generation >= objectMeta.Generation { + if generation >= objectMeta.GetGeneration() { t.Error("Generation wasn't bumped when deletion timestamp was set") } } @@ -912,35 +913,35 @@ func (t *Tester) testDeleteGracefulExtend(obj runtime.Object, createFn CreateFun t.Errorf("unexpected error: %v", err) } objectMeta := t.getObjectMetaOrFail(foo) - generation := objectMeta.Generation - _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace)) + generation := objectMeta.GetGeneration() + _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } if _, err := getFn(ctx, foo); err != nil { t.Fatalf("did not gracefully delete resource: %v", err) } // second delete duration is ignored - _, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace+2)) + _, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace+2)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } - object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}) + object, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}) if err != nil { t.Errorf("unexpected error, object should exist: %v", err) } objectMeta = t.getObjectMetaOrFail(object) - if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != expectedGrace { + if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace { t.Errorf("unexpected deleted meta: %#v", objectMeta) } - if generation >= objectMeta.Generation { + if generation >= objectMeta.GetGeneration() { t.Error("Generation wasn't bumped when deletion timestamp was set") } } @@ -954,36 +955,36 @@ func (t *Tester) testDeleteGracefulImmediate(obj runtime.Object, createFn Create t.Errorf("unexpected error: %v", err) } objectMeta := t.getObjectMetaOrFail(foo) - generation := objectMeta.Generation - _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace)) + generation := objectMeta.GetGeneration() + _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } if _, err := getFn(ctx, foo); err != nil { t.Fatalf("did not gracefully delete resource: %v", err) } // second delete is immediate, resource is deleted - out, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(0)) + out, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(0)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted != true { - t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.GetName()) } - _, err = t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}) + _, err = t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}) if !errors.IsNotFound(err) { t.Errorf("unexpected error, object should be deleted immediately: %v", err) } objectMeta = t.getObjectMetaOrFail(out) - // the second delete shouldn't update the object, so the objectMeta.DeletionGracePeriodSeconds should eqaul to the value set in the first delete. - if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || *objectMeta.DeletionGracePeriodSeconds != 0 { + // the second delete shouldn't update the object, so the objectMeta.GetDeletionGracePeriodSeconds() should eqaul to the value set in the first delete. + if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || *objectMeta.GetDeletionGracePeriodSeconds() != 0 { t.Errorf("unexpected deleted meta: %#v", objectMeta) } - if generation >= objectMeta.Generation { + if generation >= objectMeta.GetGeneration() { t.Error("Generation wasn't bumped when deletion timestamp was set") } } @@ -997,14 +998,14 @@ func (t *Tester) testDeleteGracefulUsesZeroOnNil(obj runtime.Object, createFn Cr t.Errorf("unexpected error: %v", err) } objectMeta := t.getObjectMetaOrFail(foo) - _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, nil) + _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), nil) if err != nil { t.Errorf("unexpected error: %v", err) } if !wasDeleted { - t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should have been deleted immediately", objectMeta.GetName()) } - if _, err := t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}); !errors.IsNotFound(err) { + if _, err := t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}); !errors.IsNotFound(err) { t.Errorf("unexpected error, object should not exist: %v", err) } } @@ -1023,35 +1024,35 @@ func (t *Tester) testDeleteGracefulShorten(obj runtime.Object, createFn CreateFu bigGrace = 2 * expectedGrace } objectMeta := t.getObjectMetaOrFail(foo) - _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(bigGrace)) + _, wasDeleted, err := t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(bigGrace)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } object, err := getFn(ctx, foo) if err != nil { t.Fatalf("did not gracefully delete resource: %v", err) } objectMeta = t.getObjectMetaOrFail(object) - deletionTimestamp := *objectMeta.DeletionTimestamp + deletionTimestamp := *objectMeta.GetDeletionTimestamp() // second delete duration is ignored - _, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.Name, metav1.NewDeleteOptions(expectedGrace)) + _, wasDeleted, err = t.storage.(rest.GracefulDeleter).Delete(ctx, objectMeta.GetName(), metav1.NewDeleteOptions(expectedGrace)) if err != nil { t.Errorf("unexpected error: %v", err) } if wasDeleted { - t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.Name) + t.Errorf("unexpected, object %s should not have been deleted immediately", objectMeta.GetName()) } - object, err = t.storage.(rest.Getter).Get(ctx, objectMeta.Name, &metav1.GetOptions{}) + object, err = t.storage.(rest.Getter).Get(ctx, objectMeta.GetName(), &metav1.GetOptions{}) if err != nil { t.Errorf("unexpected error, object should exist: %v", err) } objectMeta = t.getObjectMetaOrFail(object) - if objectMeta.DeletionTimestamp == nil || objectMeta.DeletionGracePeriodSeconds == nil || - *objectMeta.DeletionGracePeriodSeconds != expectedGrace || !objectMeta.DeletionTimestamp.Before(deletionTimestamp) { + if objectMeta.GetDeletionTimestamp() == nil || objectMeta.GetDeletionGracePeriodSeconds() == nil || + *objectMeta.GetDeletionGracePeriodSeconds() != expectedGrace || !objectMeta.GetDeletionTimestamp().Before(deletionTimestamp) { t.Errorf("unexpected deleted meta: %#v", objectMeta) } } @@ -1066,43 +1067,43 @@ func (t *Tester) testGetDifferentNamespace(obj runtime.Object) { } objMeta := t.getObjectMetaOrFail(obj) - objMeta.Name = t.namer(5) + objMeta.SetName(t.namer(5)) ctx1 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar3") - objMeta.Namespace = genericapirequest.NamespaceValue(ctx1) + objMeta.SetNamespace(genericapirequest.NamespaceValue(ctx1)) _, err := t.storage.(rest.Creater).Create(ctx1, obj) if err != nil { t.Errorf("unexpected error: %v", err) } ctx2 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar4") - objMeta.Namespace = genericapirequest.NamespaceValue(ctx2) + objMeta.SetNamespace(genericapirequest.NamespaceValue(ctx2)) _, err = t.storage.(rest.Creater).Create(ctx2, obj) if err != nil { t.Errorf("unexpected error: %v", err) } - got1, err := t.storage.(rest.Getter).Get(ctx1, objMeta.Name, &metav1.GetOptions{}) + got1, err := t.storage.(rest.Getter).Get(ctx1, objMeta.GetName(), &metav1.GetOptions{}) if err != nil { t.Errorf("unexpected error: %v", err) } got1Meta := t.getObjectMetaOrFail(got1) - if got1Meta.Name != objMeta.Name { - t.Errorf("unexpected name of object: %#v, expected: %s", got1, objMeta.Name) + if got1Meta.GetName() != objMeta.GetName() { + t.Errorf("unexpected name of object: %#v, expected: %s", got1, objMeta.GetName()) } - if got1Meta.Namespace != genericapirequest.NamespaceValue(ctx1) { + if got1Meta.GetNamespace() != genericapirequest.NamespaceValue(ctx1) { t.Errorf("unexpected namespace of object: %#v, expected: %s", got1, genericapirequest.NamespaceValue(ctx1)) } - got2, err := t.storage.(rest.Getter).Get(ctx2, objMeta.Name, &metav1.GetOptions{}) + got2, err := t.storage.(rest.Getter).Get(ctx2, objMeta.GetName(), &metav1.GetOptions{}) if err != nil { t.Errorf("unexpected error: %v", err) } got2Meta := t.getObjectMetaOrFail(got2) - if got2Meta.Name != objMeta.Name { - t.Errorf("unexpected name of object: %#v, expected: %s", got2, objMeta.Name) + if got2Meta.GetName() != objMeta.GetName() { + t.Errorf("unexpected name of object: %#v, expected: %s", got2, objMeta.GetName()) } - if got2Meta.Namespace != genericapirequest.NamespaceValue(ctx2) { + if got2Meta.GetNamespace() != genericapirequest.NamespaceValue(ctx2) { t.Errorf("unexpected namespace of object: %#v, expected: %s", got2, genericapirequest.NamespaceValue(ctx2)) } } @@ -1122,7 +1123,7 @@ func (t *Tester) testGetFound(obj runtime.Object) { t.Errorf("unexpected error: %v", err) } gotMeta := t.getObjectMetaOrFail(got) - gotMeta.ResourceVersion = existingMeta.ResourceVersion + gotMeta.SetResourceVersion(existingMeta.GetResourceVersion()) if e, a := existing, got; !apiequality.Semantic.DeepEqual(e, a) { t.Errorf("unexpected obj: %#v, expected %#v", e, a) } @@ -1132,8 +1133,8 @@ func (t *Tester) testGetMimatchedNamespace(obj runtime.Object) { ctx1 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar1") ctx2 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar2") objMeta := t.getObjectMetaOrFail(obj) - objMeta.Name = t.namer(4) - objMeta.Namespace = genericapirequest.NamespaceValue(ctx1) + objMeta.SetName(t.namer(4)) + objMeta.SetNamespace(genericapirequest.NamespaceValue(ctx1)) _, err := t.storage.(rest.Creater).Create(ctx1, obj) if err != nil { t.Errorf("unexpected error: %v", err) @@ -1219,9 +1220,9 @@ func (t *Tester) testListMatchLabels(obj runtime.Object, assignFn AssignFunc) { t.setObjectMeta(foo3, "foo3") foo4 := copyOrDie(obj, t.scheme) foo4Meta := t.getObjectMetaOrFail(foo4) - foo4Meta.Name = "foo4" - foo4Meta.Namespace = genericapirequest.NamespaceValue(ctx) - foo4Meta.Labels = testLabels + foo4Meta.SetName("foo4") + foo4Meta.SetNamespace(genericapirequest.NamespaceValue(ctx)) + foo4Meta.SetLabels(testLabels) objs := ([]runtime.Object{foo3, foo4}) diff --git a/pkg/registry/rest/update.go b/pkg/registry/rest/update.go index f5c48de12..3f2275cd5 100644 --- a/pkg/registry/rest/update.go +++ b/pkg/registry/rest/update.go @@ -63,16 +63,16 @@ type RESTUpdateStrategy interface { // TODO: add other common fields that require global validation. func validateCommonFields(obj, old runtime.Object, strategy RESTUpdateStrategy) (field.ErrorList, error) { allErrs := field.ErrorList{} - objectMeta, err := metav1.ObjectMetaFor(obj) + objectMeta, err := meta.Accessor(obj) if err != nil { return nil, fmt.Errorf("failed to get new object metadata: %v", err) } - oldObjectMeta, err := metav1.ObjectMetaFor(old) + oldObjectMeta, err := meta.Accessor(old) if err != nil { return nil, fmt.Errorf("failed to get old object metadata: %v", err) } - allErrs = append(allErrs, genericvalidation.ValidateObjectMeta(objectMeta, strategy.NamespaceScoped(), path.ValidatePathSegmentName, field.NewPath("metadata"))...) - allErrs = append(allErrs, genericvalidation.ValidateObjectMetaUpdate(objectMeta, oldObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, genericvalidation.ValidateObjectMetaAccessor(objectMeta, strategy.NamespaceScoped(), path.ValidatePathSegmentName, field.NewPath("metadata"))...) + allErrs = append(allErrs, genericvalidation.ValidateObjectMetaAccessorUpdate(objectMeta, oldObjectMeta, field.NewPath("metadata"))...) return allErrs, nil } @@ -90,19 +90,19 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx genericapirequest.Context, ob return errors.NewBadRequest("the namespace of the provided object does not match the namespace sent on the request") } } else { - objectMeta.Namespace = metav1.NamespaceNone + objectMeta.SetNamespace(metav1.NamespaceNone) } // Ensure requests cannot update generation - oldMeta, err := metav1.ObjectMetaFor(old) + oldMeta, err := meta.Accessor(old) if err != nil { return err } - objectMeta.Generation = oldMeta.Generation + objectMeta.SetGeneration(oldMeta.GetGeneration()) strategy.PrepareForUpdate(ctx, obj, old) // ClusterName is ignored and should not be saved - objectMeta.ClusterName = "" + objectMeta.SetClusterName("") // Ensure some common fields, like UID, are validated for all resources. errs, err := validateCommonFields(obj, old, strategy) @@ -112,7 +112,7 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx genericapirequest.Context, ob errs = append(errs, strategy.ValidateUpdate(ctx, obj, old)...) if len(errs) > 0 { - return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs) + return errors.NewInvalid(kind.GroupKind(), objectMeta.GetName(), errs) } strategy.Canonicalize(obj) diff --git a/pkg/storage/etcd/etcd_helper.go b/pkg/storage/etcd/etcd_helper.go index e2282ddea..71f0602b8 100644 --- a/pkg/storage/etcd/etcd_helper.go +++ b/pkg/storage/etcd/etcd_helper.go @@ -28,7 +28,6 @@ import ( "golang.org/x/net/context" "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -161,12 +160,12 @@ func checkPreconditions(key string, preconditions *storage.Preconditions, out ru if preconditions == nil { return nil } - objMeta, err := metav1.ObjectMetaFor(out) + objMeta, err := meta.Accessor(out) if err != nil { return storage.NewInternalErrorf("can't enforce preconditions %v on un-introspectable object %v, got error: %v", *preconditions, out, err) } - if preconditions.UID != nil && *preconditions.UID != objMeta.UID { - errMsg := fmt.Sprintf("Precondition failed: UID in precondition: %v, UID in object meta: %v", preconditions.UID, objMeta.UID) + if preconditions.UID != nil && *preconditions.UID != objMeta.GetUID() { + errMsg := fmt.Sprintf("Precondition failed: UID in precondition: %v, UID in object meta: %v", preconditions.UID, objMeta.GetUID()) return storage.NewInvalidObjError(key, errMsg) } return nil diff --git a/pkg/storage/etcd3/store.go b/pkg/storage/etcd3/store.go index 1c9b20017..c138899e3 100644 --- a/pkg/storage/etcd3/store.go +++ b/pkg/storage/etcd3/store.go @@ -30,7 +30,6 @@ import ( "golang.org/x/net/context" "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -559,12 +558,12 @@ func checkPreconditions(key string, preconditions *storage.Preconditions, out ru if preconditions == nil { return nil } - objMeta, err := metav1.ObjectMetaFor(out) + objMeta, err := meta.Accessor(out) if err != nil { return storage.NewInternalErrorf("can't enforce preconditions %v on un-introspectable object %v, got error: %v", *preconditions, out, err) } - if preconditions.UID != nil && *preconditions.UID != objMeta.UID { - errMsg := fmt.Sprintf("Precondition failed: UID in precondition: %v, UID in object meta: %v", *preconditions.UID, objMeta.UID) + if preconditions.UID != nil && *preconditions.UID != objMeta.GetUID() { + errMsg := fmt.Sprintf("Precondition failed: UID in precondition: %v, UID in object meta: %v", *preconditions.UID, objMeta.GetUID()) return storage.NewInvalidObjError(key, errMsg) } return nil