Skip to content

Commit 6e34aa6

Browse files
authored
Merge pull request #442 from replicatedhq/divolgin/closer
Allow memory writers
2 parents 06750d4 + ca51e92 commit 6e34aa6

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

pkg/collect/copy.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,8 @@ func copyFilesFromPod(ctx context.Context, dstPath string, clientConfig *restcli
138138
if err != nil {
139139
return nil, nil, errors.Wrap(err, "failed to craete dest file")
140140
}
141+
defer result.CloseWriter(dstPath, filepath.Base(containerPath)+".tar", w)
142+
141143
stdoutWriter = w
142144
}
143145

pkg/collect/copy_from_host.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,8 @@ func copyFilesFromHost(ctx context.Context, dstPath string, clientConfig *restcl
315315
if err != nil {
316316
return nil, nil, errors.Wrap(err, "failed to craete dest file")
317317
}
318+
defer result.CloseWriter(dstPath, "archive.tar", w)
319+
318320
stdoutWriter = w
319321
}
320322

pkg/collect/logs.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func savePodLogs(ctx context.Context, bundlePath string, client *kubernetes.Clie
125125
if err != nil {
126126
return nil, errors.Wrap(err, "failed to get log writer")
127127
}
128-
defer logWriter.Close()
128+
defer result.CloseWriter(bundlePath, fileKey+".log", logWriter)
129129

130130
_, err = io.Copy(logWriter, podLogs)
131131
if err != nil {
@@ -145,7 +145,7 @@ func savePodLogs(ctx context.Context, bundlePath string, client *kubernetes.Clie
145145
if err != nil {
146146
return nil, errors.Wrap(err, "failed to get previous log writer")
147147
}
148-
defer logWriter.Close()
148+
defer result.CloseWriter(bundlePath, fileKey+"-previous.log", logWriter)
149149

150150
_, err = io.Copy(prevLogWriter, podLogs)
151151
if err != nil {

pkg/collect/result.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ func (r CollectorResult) GetReader(bundlePath string, relativePath string) (io.R
8989
return bytes.NewReader(r[relativePath]), nil
9090
}
9191

92+
if bundlePath == "" {
93+
return nil, errors.New("cannot create reader, bundle path is empty")
94+
}
95+
9296
filename := filepath.Join(bundlePath, relativePath)
9397
f, err := os.Open(filename)
9498
if err != nil {
@@ -98,9 +102,10 @@ func (r CollectorResult) GetReader(bundlePath string, relativePath string) (io.R
98102
return f, nil
99103
}
100104

101-
func (r CollectorResult) GetWriter(bundlePath string, relativePath string) (io.WriteCloser, error) {
102-
if r[relativePath] != nil {
103-
return nil, errors.New("writing to memory is not implemented")
105+
func (r CollectorResult) GetWriter(bundlePath string, relativePath string) (io.Writer, error) {
106+
if bundlePath == "" {
107+
var b bytes.Buffer
108+
return &b, nil
104109
}
105110

106111
fileDir, _ := filepath.Split(relativePath)
@@ -120,6 +125,19 @@ func (r CollectorResult) GetWriter(bundlePath string, relativePath string) (io.W
120125
return f, nil
121126
}
122127

128+
func (r CollectorResult) CloseWriter(bundlePath string, relativePath string, writer interface{}) error {
129+
if c, ok := writer.(io.Closer); ok {
130+
return errors.Wrap(c.Close(), "failed to close writer")
131+
}
132+
133+
if b, ok := writer.(*bytes.Buffer); ok {
134+
r[relativePath] = b.Bytes()
135+
return nil
136+
}
137+
138+
return errors.Errorf("cannot close writer of type %T", writer)
139+
}
140+
123141
func TarSupportBundleDir(bundlePath string, input CollectorResult, outputFilename string) error {
124142
fileWriter, err := os.Create(outputFilename)
125143
if err != nil {

0 commit comments

Comments
 (0)