mirror of
https://github.com/skoelle/kctl-tui.git
synced 2026-09-17 20:10:24 +00:00
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package kctl
|
|
|
|
import "sort"
|
|
|
|
// SecretDiffEntry represents the comparison of one key between two secret
|
|
// sources (e.g. AWS Secrets Manager vs. a Kubernetes Secret).
|
|
type SecretDiffEntry struct {
|
|
Key string
|
|
Left string // e.g. the AWS Secrets Manager value
|
|
Right string // e.g. the decoded Kubernetes secret value
|
|
Match bool
|
|
}
|
|
|
|
// DiffSecretValues compares two key/value maps and returns a sorted list of
|
|
// diff entries covering the union of keys present in either map. A key that
|
|
// only exists on one side is still reported, with the missing side left as
|
|
// an empty string and Match set to false (unless both sides happen to be
|
|
// empty strings).
|
|
func DiffSecretValues(left, right map[string]string) []SecretDiffEntry {
|
|
seen := map[string]bool{}
|
|
for k := range left {
|
|
seen[k] = true
|
|
}
|
|
for k := range right {
|
|
seen[k] = true
|
|
}
|
|
|
|
keys := make([]string, 0, len(seen))
|
|
for k := range seen {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
|
|
result := make([]SecretDiffEntry, 0, len(keys))
|
|
for _, k := range keys {
|
|
l := left[k]
|
|
r := right[k]
|
|
result = append(result, SecretDiffEntry{Key: k, Left: l, Right: r, Match: l == r})
|
|
}
|
|
return result
|
|
}
|
|
|
|
// AnyMismatch reports whether at least one diff entry does not match.
|
|
func AnyMismatch(entries []SecretDiffEntry) bool {
|
|
for _, e := range entries {
|
|
if !e.Match {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|