Check modification

This commit is contained in:
Donny Xia
2020-06-16 14:21:26 -07:00
parent a0c1979798
commit 4843718a2b

View File

@@ -5,6 +5,7 @@ package target
import ( import (
"bytes" "bytes"
"crypto/sha1"
"encoding/json" "encoding/json"
"fmt" "fmt"
"strings" "strings"
@@ -288,14 +289,36 @@ func (kt *KustTarget) runValidators(ra *accumulator.ResAccumulator) error {
return err return err
} }
for _, v := range validators { for _, v := range validators {
err := v.Validate(ra.ResMap()) // Validators shouldn't modify the resource map
orignalHash, err := getSha1Hash(ra.ResMap())
if err != nil { if err != nil {
return err return err
} }
err = v.Validate(ra.ResMap())
if err != nil {
return err
}
newHash, err := getSha1Hash(ra.ResMap())
if err != nil {
return err
}
if !bytes.Equal(orignalHash, newHash) {
return fmt.Errorf("validator %#v shouldn't modify the resource map", v)
}
} }
return nil return nil
} }
func getSha1Hash(rm resmap.ResMap) ([]byte, error) {
sha1Hash := sha1.New()
yamlBytes, err := rm.AsYaml()
if err != nil {
return nil, err
}
sha1Hash.Write(yamlBytes)
return sha1Hash.Sum(nil), nil
}
func (kt *KustTarget) configureExternalValidators() ([]resmap.Validator, error) { func (kt *KustTarget) configureExternalValidators() ([]resmap.Validator, error) {
ra := accumulator.MakeEmptyAccumulator() ra := accumulator.MakeEmptyAccumulator()
ra, err := kt.accumulateResources(ra, kt.kustomization.Validators) ra, err := kt.accumulateResources(ra, kt.kustomization.Validators)