mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Fix fieldType being dropped by older go-clients
This commit is contained in:
parent
ed2cf6ef2c
commit
3f10709e4c
@ -178,7 +178,7 @@ func ValidateManagedFields(fieldsList []metav1.ManagedFieldsEntry, fldPath *fiel
|
|||||||
default:
|
default:
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("operation"), fields.Operation, "must be `Apply` or `Update`"))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("operation"), fields.Operation, "must be `Apply` or `Update`"))
|
||||||
}
|
}
|
||||||
if fields.FieldsType != "FieldsV1" {
|
if len(fields.FieldsType) > 0 && fields.FieldsType != "FieldsV1" {
|
||||||
allErrs = append(allErrs, field.Invalid(fldPath.Child("fieldsType"), fields.FieldsType, "must be `FieldsV1`"))
|
allErrs = append(allErrs, field.Invalid(fldPath.Child("fieldsType"), fields.FieldsType, "must be `FieldsV1`"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -242,12 +242,8 @@ func TestValidateFieldManagerInvalid(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateMangedFieldsInvalid(t *testing.T) {
|
func TestValidateManagedFieldsInvalid(t *testing.T) {
|
||||||
tests := []metav1.ManagedFieldsEntry{
|
tests := []metav1.ManagedFieldsEntry{
|
||||||
{
|
|
||||||
Operation: metav1.ManagedFieldsOperationUpdate,
|
|
||||||
// FieldsType is missing
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
Operation: metav1.ManagedFieldsOperationUpdate,
|
Operation: metav1.ManagedFieldsOperationUpdate,
|
||||||
FieldsType: "RandomVersion",
|
FieldsType: "RandomVersion",
|
||||||
@ -274,6 +270,10 @@ func TestValidateMangedFieldsInvalid(t *testing.T) {
|
|||||||
|
|
||||||
func TestValidateMangedFieldsValid(t *testing.T) {
|
func TestValidateMangedFieldsValid(t *testing.T) {
|
||||||
tests := []metav1.ManagedFieldsEntry{
|
tests := []metav1.ManagedFieldsEntry{
|
||||||
|
{
|
||||||
|
Operation: metav1.ManagedFieldsOperationUpdate,
|
||||||
|
// FieldsType is missing
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Operation: metav1.ManagedFieldsOperationUpdate,
|
Operation: metav1.ManagedFieldsOperationUpdate,
|
||||||
FieldsType: "FieldsV1",
|
FieldsType: "FieldsV1",
|
||||||
|
@ -107,7 +107,16 @@ func EncodeObjectManagedFields(obj runtime.Object, managed ManagedInterface) err
|
|||||||
func decodeManagedFields(encodedManagedFields []metav1.ManagedFieldsEntry) (managed managedStruct, err error) {
|
func decodeManagedFields(encodedManagedFields []metav1.ManagedFieldsEntry) (managed managedStruct, err error) {
|
||||||
managed.fields = make(fieldpath.ManagedFields, len(encodedManagedFields))
|
managed.fields = make(fieldpath.ManagedFields, len(encodedManagedFields))
|
||||||
managed.times = make(map[string]*metav1.Time, len(encodedManagedFields))
|
managed.times = make(map[string]*metav1.Time, len(encodedManagedFields))
|
||||||
for _, encodedVersionedSet := range encodedManagedFields {
|
|
||||||
|
for i, encodedVersionedSet := range encodedManagedFields {
|
||||||
|
switch encodedVersionedSet.FieldsType {
|
||||||
|
case "FieldsV1":
|
||||||
|
// Valid case.
|
||||||
|
case "":
|
||||||
|
return managedStruct{}, fmt.Errorf("missing fieldsType in managed fields entry %d", i)
|
||||||
|
default:
|
||||||
|
return managedStruct{}, fmt.Errorf("invalid fieldsType %q in managed fields entry %d", encodedVersionedSet.FieldsType, i)
|
||||||
|
}
|
||||||
manager, err := BuildManagerIdentifier(&encodedVersionedSet)
|
manager, err := BuildManagerIdentifier(&encodedVersionedSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return managedStruct{}, fmt.Errorf("error decoding manager from %v: %v", encodedVersionedSet, err)
|
return managedStruct{}, fmt.Errorf("error decoding manager from %v: %v", encodedVersionedSet, err)
|
||||||
|
@ -27,6 +27,51 @@ import (
|
|||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TestHasFieldsType makes sure that we fail if we don't have a
|
||||||
|
// FieldsType set properly.
|
||||||
|
func TestHasFieldsType(t *testing.T) {
|
||||||
|
var unmarshaled []metav1.ManagedFieldsEntry
|
||||||
|
if err := yaml.Unmarshal([]byte(`- apiVersion: v1
|
||||||
|
fieldsType: FieldsV1
|
||||||
|
fieldsV1:
|
||||||
|
f:field: {}
|
||||||
|
manager: foo
|
||||||
|
operation: Apply
|
||||||
|
`), &unmarshaled); err != nil {
|
||||||
|
t.Fatalf("did not expect yaml unmarshalling error but got: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := decodeManagedFields(unmarshaled); err != nil {
|
||||||
|
t.Fatalf("did not expect decoding error but got: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invalid fieldsType V2.
|
||||||
|
if err := yaml.Unmarshal([]byte(`- apiVersion: v1
|
||||||
|
fieldsType: FieldsV2
|
||||||
|
fieldsV1:
|
||||||
|
f:field: {}
|
||||||
|
manager: foo
|
||||||
|
operation: Apply
|
||||||
|
`), &unmarshaled); err != nil {
|
||||||
|
t.Fatalf("did not expect yaml unmarshalling error but got: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := decodeManagedFields(unmarshaled); err == nil {
|
||||||
|
t.Fatal("Expect decoding error but got none")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Missing fieldsType.
|
||||||
|
if err := yaml.Unmarshal([]byte(`- apiVersion: v1
|
||||||
|
fieldsV1:
|
||||||
|
f:field: {}
|
||||||
|
manager: foo
|
||||||
|
operation: Apply
|
||||||
|
`), &unmarshaled); err != nil {
|
||||||
|
t.Fatalf("did not expect yaml unmarshalling error but got: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := decodeManagedFields(unmarshaled); err == nil {
|
||||||
|
t.Fatal("Expect decoding error but got none")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestRoundTripManagedFields will roundtrip ManagedFields from the wire format
|
// TestRoundTripManagedFields will roundtrip ManagedFields from the wire format
|
||||||
// (api format) to the format used by sigs.k8s.io/structured-merge-diff and back
|
// (api format) to the format used by sigs.k8s.io/structured-merge-diff and back
|
||||||
func TestRoundTripManagedFields(t *testing.T) {
|
func TestRoundTripManagedFields(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user