1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 07:57:07 +00:00
kyverno/cmd/cli/kubectl-kyverno/resource/compare.go
Charles-Edouard Brétéché 5360248135
refactor: combine unstructured and resource packages (#8276)
* refactor: introduce userinfo package in the cli

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* refactor: introduce api package in cli

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* refactor: combine unstructured and resource packages

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* fix

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2023-09-05 21:09:31 +00:00

46 lines
1,021 B
Go

package resource
import (
jsonpatch "github.com/evanphx/json-patch/v5"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
type (
marshaler = func(*unstructured.Unstructured) ([]byte, error)
patcher = func(originalJSON, modifiedJSON []byte) ([]byte, error)
)
var (
defaultMarshaler = (*unstructured.Unstructured).MarshalJSON
defaultPatcher = jsonpatch.CreateMergePatch
)
func Compare(a, e unstructured.Unstructured, tidy bool) (bool, error) {
if tidy {
a = Tidy(a)
e = Tidy(e)
}
return compare(a, e, defaultMarshaler, defaultPatcher)
}
func compare(a, e unstructured.Unstructured, marshaler marshaler, patcher patcher) (bool, error) {
if marshaler == nil {
marshaler = defaultMarshaler
}
actual, err := marshaler(&a)
if err != nil {
return false, err
}
expected, err := marshaler(&e)
if err != nil {
return false, err
}
if patcher == nil {
patcher = defaultPatcher
}
patch, err := patcher(actual, expected)
if err != nil {
return false, err
}
return len(patch) == 2, nil
}