cisco-open / k8s-objectmatcher

A Kubernetes object matcher library to avoid unnecessary K8s object updates
Apache License 2.0
157 stars 29 forks source link

IgnoreVolumeClaimTemplateTypeMetaAndStatus looks not work #51

Open Rory-Z opened 2 years ago

Rory-Z commented 2 years ago

Describe the bug IgnoreVolumeClaimTemplateTypeMetaAndStatus looks not work

Steps to reproduce the issue: I tried to compare the two statefulsets like this

opts := []patch.CalculateOption{
    patch.IgnoreStatusFields(), 
    patch.IgnoreVolumeClaimTemplateTypeMetaAndStatus(),
}
patchResult, err := patch.DefaultPatchMaker.Calculate(old, new, opts...)
fmt.Printf("==========================%+v\n", patchResult.String())

I got this

Patch: {"spec":{"volumeClaimTemplates":[{"metadata":{"name":"emqx-data","namespace":"default"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"20Mi"}},"storageClassName":"standard"},"status":{"phase":"Pending"}},{"metadata":{"name":"emqx-log","namespace":"default"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"20Mi"}},"storageClassName":"standard"},"status":{"phase":"Pending"}}]}} 

volumeClaimTemplates is not ignored

Expected behavior volumeClaimTemplates should be ignored

Additional context k8s-objectmatcher version: v1.7.0 go version: go1.17.3 darwin/amd64

iamabhishek-dubey commented 2 years ago

Same for me as well

mobasherul commented 2 years ago

Similar error for me - PatchResult is not empty even when patch.IgnoreVolumeClaimTemplateTypeMetaAndStatus()) "{\"spec\":{\"volumeClaimTemplates\":[{\"metadata\":{\"name\":\"corestore\""

iamabhishek-dubey commented 2 years ago

@mobasherul I forked this project and fixed it

github.com/iamabhishek-dubey/k8s-objectmatcher/patch

Example:-

    patchResult, err := patch.DefaultPatchMaker.Calculate(storedStateful, newStateful,
        patch.IgnoreStatusFields(),
        patch.IgnoreVolumeClaimTemplateTypeMetaAndStatus(),
        patch.IgnorePersistenVolumeFields(),
        patch.IgnoreField("kind"),
        patch.IgnoreField("apiVersion"),
        patch.IgnoreField("metadata"),
    )