@@ -12,6 +12,7 @@ import (
12
12
"path/filepath"
13
13
14
14
getter "github.com/hashicorp/go-getter"
15
+ "github.com/pkg/errors"
15
16
troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1"
16
17
"github.com/replicatedhq/troubleshoot/pkg/logger"
17
18
"gopkg.in/yaml.v2"
@@ -24,22 +25,22 @@ type fileContentProvider struct {
24
25
func DownloadAndAnalyze (ctx context.Context , bundleURL string ) ([]* AnalyzeResult , error ) {
25
26
tmpDir , err := ioutil .TempDir ("" , "troubleshoot-k8s" )
26
27
if err != nil {
27
- return nil , err
28
+ return nil , errors . Wrap ( err , "failed to create temp dir" )
28
29
}
29
30
defer os .RemoveAll (tmpDir )
30
31
31
- if err := downLoadTroubleshootBundle (bundleURL , tmpDir ); err != nil {
32
- return nil , err
32
+ if err := downloadTroubleshootBundle (bundleURL , tmpDir ); err != nil {
33
+ return nil , errors . Wrap ( err , "failed to download bundle" )
33
34
}
34
35
35
36
_ , err = os .Stat (filepath .Join (tmpDir , "version.yaml" ))
36
37
if err != nil {
37
- return nil , err
38
+ return nil , errors . Wrap ( err , "failed to read version.yaml" )
38
39
}
39
40
40
41
analyzers , err := getTroubleshootAnalyzers ()
41
42
if err != nil {
42
- return nil , err
43
+ return nil , errors . Wrap ( err , "failed to get analyzers" )
43
44
}
44
45
45
46
fcp := fileContentProvider {rootDir : tmpDir }
@@ -58,15 +59,24 @@ func DownloadAndAnalyze(ctx context.Context, bundleURL string) ([]*AnalyzeResult
58
59
return analyzeResults , nil
59
60
}
60
61
61
- func downLoadTroubleshootBundle (bundleURL , destDir string ) error {
62
+ func downloadTroubleshootBundle (bundleURL string , destDir string ) error {
63
+ if bundleURL [0 ] == os .PathSeparator {
64
+ f , err := os .Open (bundleURL )
65
+ if err != nil {
66
+ return errors .Wrap (err , "failed to open support bundle" )
67
+ }
68
+ defer f .Close ()
69
+ return extractTroubleshootBundle (f , destDir )
70
+ }
71
+
62
72
pwd , err := os .Getwd ()
63
73
if err != nil {
64
- return err
74
+ return errors . Wrap ( err , "failed to get workdir" )
65
75
}
66
76
67
77
tmpDir , err := ioutil .TempDir ("" , "getter" )
68
78
if err != nil {
69
- return err
79
+ return errors . Wrap ( err , "failed to create tmp dir" )
70
80
}
71
81
defer os .RemoveAll (tmpDir )
72
82
@@ -77,12 +87,12 @@ func downLoadTroubleshootBundle(bundleURL, destDir string) error {
77
87
return nil
78
88
})
79
89
if err != nil {
80
- return err
90
+ return errors . Wrap ( err , "failed to read support bundle file" )
81
91
}
82
92
83
93
f , err := os .Open (dst )
84
94
if err != nil {
85
- return err
95
+ return errors . Wrap ( err , "failed to open support bundle" )
86
96
}
87
97
defer f .Close ()
88
98
@@ -92,7 +102,7 @@ func downLoadTroubleshootBundle(bundleURL, destDir string) error {
92
102
func extractTroubleshootBundle (reader io.Reader , destDir string ) error {
93
103
gzReader , err := gzip .NewReader (reader )
94
104
if err != nil {
95
- return err
105
+ return errors . Wrap ( err , "failed to create gzip reader" )
96
106
}
97
107
98
108
tarReader := tar .NewReader (gzReader )
@@ -102,25 +112,25 @@ func extractTroubleshootBundle(reader io.Reader, destDir string) error {
102
112
break
103
113
}
104
114
if err != nil {
105
- return err
115
+ return errors . Wrap ( err , "failed to read header from tar" )
106
116
}
107
117
108
118
switch header .Typeflag {
109
119
case tar .TypeDir :
110
120
name := filepath .Join (destDir , header .Name )
111
121
if err := os .MkdirAll (name , os .FileMode (header .Mode )); err != nil {
112
- return err
122
+ return errors . Wrap ( err , "failed to mkdir" )
113
123
}
114
124
case tar .TypeReg :
115
125
name := filepath .Join (destDir , header .Name )
116
126
file , err := os .OpenFile (name , os .O_RDWR | os .O_CREATE , os .FileMode (header .Mode ))
117
127
if err != nil {
118
- return err
128
+ return errors . Wrap ( err , "failed to open tar file" )
119
129
}
120
130
_ , err = io .Copy (file , tarReader )
121
131
file .Close ()
122
132
if err != nil {
123
- return err
133
+ return errors . Wrap ( err , "failed to extract file" )
124
134
}
125
135
}
126
136
}
0 commit comments