in internal/testrunner/runners/policy/policy.go [175:230]
func cleanPolicyMap(policyMap common.MapStr, entries []policyEntryFilter) (common.MapStr, error) {
for _, entry := range entries {
v, err := policyMap.GetValue(entry.name)
if errors.Is(err, common.ErrKeyNotFound) {
continue
}
if err != nil {
return nil, err
}
switch {
case len(entry.elementsEntries) > 0:
list, err := common.ToMapStrSlice(v)
if err != nil {
return nil, err
}
clean := make([]any, len(list))
for i := range list {
c, err := cleanPolicyMap(list[i], entry.elementsEntries)
if err != nil {
return nil, err
}
clean[i] = c
}
policyMap.Delete(entry.name)
_, err = policyMap.Put(entry.name, clean)
if err != nil {
return nil, err
}
case entry.memberReplace != nil:
m, ok := v.(common.MapStr)
if !ok {
return nil, fmt.Errorf("expected map, found %T", v)
}
for k, e := range m {
if entry.memberReplace.regexp.MatchString(k) {
delete(m, k)
m[entry.memberReplace.replace] = e
}
}
default:
if entry.onlyIfEmpty && !isEmpty(v) {
continue
}
err := policyMap.Delete(entry.name)
if errors.Is(err, common.ErrKeyNotFound) {
continue
}
if err != nil {
return nil, err
}
}
}
return policyMap, nil
}