mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-07 11:13:48 +00:00
Merge pull request #81453 from joshmsamuels/master
Apply will fail with managed fields + tests
This commit is contained in:
commit
64718f6786
@ -192,6 +192,11 @@ func (f *FieldManager) Apply(liveObj runtime.Object, patch []byte, fieldManager
|
|||||||
if err := yaml.Unmarshal(patch, &patchObj.Object); err != nil {
|
if err := yaml.Unmarshal(patch, &patchObj.Object); err != nil {
|
||||||
return nil, fmt.Errorf("error decoding YAML: %v", err)
|
return nil, fmt.Errorf("error decoding YAML: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if patchObj.GetManagedFields() != nil {
|
||||||
|
return nil, fmt.Errorf("managed fields must be nil but was %v", patchObj.GetManagedFields())
|
||||||
|
}
|
||||||
|
|
||||||
if patchObj.GetAPIVersion() != f.groupVersion.String() {
|
if patchObj.GetAPIVersion() != f.groupVersion.String() {
|
||||||
return nil,
|
return nil,
|
||||||
errors.NewBadRequest(
|
errors.NewBadRequest(
|
||||||
|
@ -22,6 +22,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"time"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
@ -104,37 +106,36 @@ func TestApplyStripsFields(t *testing.T) {
|
|||||||
obj := &corev1.Pod{}
|
obj := &corev1.Pod{}
|
||||||
obj.ObjectMeta.ManagedFields = []metav1.ManagedFieldsEntry{{}}
|
obj.ObjectMeta.ManagedFields = []metav1.ManagedFieldsEntry{{}}
|
||||||
|
|
||||||
newObj, err := f.Apply(obj, []byte(`{
|
newObj := &corev1.Pod{
|
||||||
"apiVersion": "apps/v1",
|
TypeMeta: metav1.TypeMeta{
|
||||||
"kind": "Deployment",
|
APIVersion: "apps/v1",
|
||||||
"metadata": {
|
Kind: "Deployment",
|
||||||
"name": "b",
|
},
|
||||||
"namespace": "b",
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
"creationTimestamp": "2016-05-19T09:59:00Z",
|
Name: "b",
|
||||||
"selfLink": "b",
|
Namespace: "b",
|
||||||
"uid": "b",
|
CreationTimestamp: metav1.NewTime(time.Now()),
|
||||||
"clusterName": "b",
|
SelfLink: "b",
|
||||||
"generation": 0,
|
UID: "b",
|
||||||
"managedFields": [{
|
ClusterName: "b",
|
||||||
"manager": "apply",
|
Generation: 0,
|
||||||
"operation": "Apply",
|
ManagedFields: []metav1.ManagedFieldsEntry{
|
||||||
"apiVersion": "apps/v1",
|
{
|
||||||
"fields": {
|
Manager: "update",
|
||||||
"f:metadata": {
|
Operation: metav1.ManagedFieldsOperationApply,
|
||||||
"f:labels": {
|
APIVersion: "apps/v1",
|
||||||
"f:test-label": {}
|
},
|
||||||
}
|
},
|
||||||
}
|
ResourceVersion: "b",
|
||||||
}
|
},
|
||||||
}],
|
}
|
||||||
"resourceVersion": "b"
|
|
||||||
}
|
updatedObj, err := f.Update(obj, newObj, "fieldmanager_test")
|
||||||
}`), "fieldmanager_test", false)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to apply object: %v", err)
|
t.Fatalf("failed to apply object: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
accessor, err := meta.Accessor(newObj)
|
accessor, err := meta.Accessor(updatedObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("couldn't get accessor: %v", err)
|
t.Fatalf("couldn't get accessor: %v", err)
|
||||||
}
|
}
|
||||||
@ -468,3 +469,41 @@ func BenchmarkRepeatedUpdate(b *testing.B) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestApplyFailsWithManagedFields(t *testing.T) {
|
||||||
|
f := NewTestFieldManager()
|
||||||
|
|
||||||
|
_, err := f.Apply(&corev1.Pod{}, []byte(`{
|
||||||
|
"apiVersion": "apps/v1",
|
||||||
|
"kind": "Pod",
|
||||||
|
"metadata": {
|
||||||
|
"managedFields": [
|
||||||
|
{
|
||||||
|
"manager": "test",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}`), "fieldmanager_test", false)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("successfully applied with set managed fields")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestApplySuccessWithNoManagedFields(t *testing.T) {
|
||||||
|
f := NewTestFieldManager()
|
||||||
|
|
||||||
|
_, err := f.Apply(&corev1.Pod{}, []byte(`{
|
||||||
|
"apiVersion": "apps/v1",
|
||||||
|
"kind": "Pod",
|
||||||
|
"metadata": {
|
||||||
|
"labels": {
|
||||||
|
"a": "b"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}`), "fieldmanager_test", false)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to apply object: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user