-
Notifications
You must be signed in to change notification settings - Fork 311
Closed
Labels
Description
It appears as though the redactSecrets method is using stringData as a behind-the-scenes crutch to print a redacted data diff:
Lines 94 to 129 in 818e596
| if old != nil { | |
| oldSecret.StringData = make(map[string]string, len(oldSecret.Data)) | |
| for k, v := range oldSecret.Data { | |
| if new != nil && bytes.Equal(v, newSecret.Data[k]) { | |
| oldSecret.StringData[k] = fmt.Sprintf("REDACTED # (%d bytes)", len(v)) | |
| } else { | |
| oldSecret.StringData[k] = fmt.Sprintf("-------- # (%d bytes)", len(v)) | |
| } | |
| } | |
| } | |
| if new != nil { | |
| newSecret.StringData = make(map[string]string, len(newSecret.Data)) | |
| for k, v := range newSecret.Data { | |
| if old != nil && bytes.Equal(v, oldSecret.Data[k]) { | |
| newSecret.StringData[k] = fmt.Sprintf("REDACTED # (%d bytes)", len(v)) | |
| } else { | |
| newSecret.StringData[k] = fmt.Sprintf("++++++++ # (%d bytes)", len(v)) | |
| } | |
| } | |
| } | |
| // remove Data field now that we are using StringData for serialization | |
| var buf bytes.Buffer | |
| if old != nil { | |
| oldSecret.Data = nil | |
| if err := serializer.Encode(&oldSecret, &buf); err != nil { | |
| } | |
| old.Content = getComment(old.Content) + strings.Replace(strings.Replace(buf.String(), "stringData", "data", 1), " creationTimestamp: null\n", "", 1) | |
| buf.Reset() //reuse buffer for new secret | |
| } | |
| if new != nil { | |
| newSecret.Data = nil | |
| if err := serializer.Encode(&newSecret, &buf); err != nil { | |
| } | |
| new.Content = getComment(new.Content) + strings.Replace(strings.Replace(buf.String(), "stringData", "data", 1), " creationTimestamp: null\n", "", 1) |
The issue is that if the chart being diffed uses stringData then all those fields are completely hidden from the diff output. For example, this template:
---
apiVersion: v1
kind: Secret
metadata:
name: {{ $config.name }}
type: Opaque
stringData:
kongCredType: acl
group: inbound-traffic
otherField: |
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed sed felis id ex ultricies tempor.shows as this in helm-diff:
my-namespace, my-name, Secret (v1) has been added:
+ # Source: secret.yaml
+ apiVersion: v1
+ kind: Secret
+ metadata:
+ name: my-name
+ type: OpaqueThis effectively defeats the diffing for any secret values that do not need to be redacted.
philomory, z0rc and eabykov