@@ -2,6 +2,7 @@ package pkg
2
2
3
3
import (
4
4
"bufio"
5
+ "encoding/base64"
5
6
"fmt"
6
7
"io"
7
8
"regexp"
@@ -113,7 +114,7 @@ const (
113
114
CleanStatus
114
115
)
115
116
116
- func GrepResources (sel Selector , in io.Reader , out io.Writer , mode DisplayMode ) error {
117
+ func GrepResources (sel Selector , in io.Reader , out io.Writer , mode DisplayMode , decode bool ) error {
117
118
output := func (d string ) {
118
119
_ , _ = fmt .Fprint (out , d )
119
120
}
@@ -129,7 +130,7 @@ func GrepResources(sel Selector, in io.Reader, out io.Writer, mode DisplayMode)
129
130
return fmt .Errorf ("failed to read document: %v" , err )
130
131
}
131
132
// Optimization: Do not do YAML marshal if not needed
132
- if sel .MatchesAll () && mode == Full {
133
+ if sel .MatchesAll () && mode == Full && ! decode {
133
134
if ! first {
134
135
fmt .Fprint (out , "---\n " )
135
136
}
@@ -146,12 +147,16 @@ func GrepResources(sel Selector, in io.Reader, out io.Writer, mode DisplayMode)
146
147
if ! obj .Empty () {
147
148
output (obj .String () + "\n " )
148
149
}
149
- } else if mode == Clean || mode == CleanStatus {
150
+ } else if mode == Clean || mode == CleanStatus || decode {
150
151
raw := genericMap {}
151
152
if err := yaml .Unmarshal (text , & raw ); err != nil {
152
153
return err
153
154
}
154
- o , err := yaml .Marshal (strip (raw , mode ))
155
+ raw = strip (raw , mode )
156
+ if decode && obj .Kind == "Secret" {
157
+ raw = decodeSecret (raw )
158
+ }
159
+ o , err := yaml .Marshal (raw )
155
160
if err != nil {
156
161
return err
157
162
}
@@ -174,7 +179,34 @@ func GrepResources(sel Selector, in io.Reader, out io.Writer, mode DisplayMode)
174
179
return nil
175
180
}
176
181
177
- func strip (raw genericMap , mode DisplayMode ) interface {} {
182
+ func decodeSecret (raw genericMap ) genericMap {
183
+ data , ok := raw ["data" ]
184
+ if ! ok {
185
+ return raw
186
+ }
187
+ gm , ok := data .(genericMap )
188
+ if ! ok {
189
+ return raw
190
+ }
191
+ for k , v := range gm {
192
+ gm [k ] = base64Decode (v )
193
+ }
194
+ return raw
195
+ }
196
+
197
+ func base64Decode (d interface {}) interface {} {
198
+ t , ok := d .(string )
199
+ if ! ok {
200
+ return d
201
+ }
202
+ b , err := base64 .StdEncoding .DecodeString (t )
203
+ if err != nil {
204
+ return d
205
+ }
206
+ return string (b )
207
+ }
208
+
209
+ func strip (raw genericMap , mode DisplayMode ) genericMap {
178
210
if mode == Clean || mode == CleanStatus {
179
211
deleteNested (raw , "metadata" , "annotations" , "kubectl.kubernetes.io/last-applied-configuration" )
180
212
deleteNested (raw , "metadata" , "generation" )
0 commit comments