mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 16:06:56 +00:00
* 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>
46 lines
1,021 B
Go
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
|
|
}
|