@@ -12,6 +12,7 @@ import (
1212 "path/filepath"
1313
1414 getter "github.com/hashicorp/go-getter"
15+ "github.com/pkg/errors"
1516 troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1"
1617 "github.com/replicatedhq/troubleshoot/pkg/logger"
1718 "gopkg.in/yaml.v2"
@@ -24,22 +25,22 @@ type fileContentProvider struct {
2425func DownloadAndAnalyze (ctx context.Context , bundleURL string ) ([]* AnalyzeResult , error ) {
2526 tmpDir , err := ioutil .TempDir ("" , "troubleshoot-k8s" )
2627 if err != nil {
27- return nil , err
28+ return nil , errors . Wrap ( err , "failed to create temp dir" )
2829 }
2930 defer os .RemoveAll (tmpDir )
3031
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" )
3334 }
3435
3536 _ , err = os .Stat (filepath .Join (tmpDir , "version.yaml" ))
3637 if err != nil {
37- return nil , err
38+ return nil , errors . Wrap ( err , "failed to read version.yaml" )
3839 }
3940
4041 analyzers , err := getTroubleshootAnalyzers ()
4142 if err != nil {
42- return nil , err
43+ return nil , errors . Wrap ( err , "failed to get analyzers" )
4344 }
4445
4546 fcp := fileContentProvider {rootDir : tmpDir }
@@ -58,15 +59,24 @@ func DownloadAndAnalyze(ctx context.Context, bundleURL string) ([]*AnalyzeResult
5859 return analyzeResults , nil
5960}
6061
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+
6272 pwd , err := os .Getwd ()
6373 if err != nil {
64- return err
74+ return errors . Wrap ( err , "failed to get workdir" )
6575 }
6676
6777 tmpDir , err := ioutil .TempDir ("" , "getter" )
6878 if err != nil {
69- return err
79+ return errors . Wrap ( err , "failed to create tmp dir" )
7080 }
7181 defer os .RemoveAll (tmpDir )
7282
@@ -77,12 +87,12 @@ func downLoadTroubleshootBundle(bundleURL, destDir string) error {
7787 return nil
7888 })
7989 if err != nil {
80- return err
90+ return errors . Wrap ( err , "failed to read support bundle file" )
8191 }
8292
8393 f , err := os .Open (dst )
8494 if err != nil {
85- return err
95+ return errors . Wrap ( err , "failed to open support bundle" )
8696 }
8797 defer f .Close ()
8898
@@ -92,7 +102,7 @@ func downLoadTroubleshootBundle(bundleURL, destDir string) error {
92102func extractTroubleshootBundle (reader io.Reader , destDir string ) error {
93103 gzReader , err := gzip .NewReader (reader )
94104 if err != nil {
95- return err
105+ return errors . Wrap ( err , "failed to create gzip reader" )
96106 }
97107
98108 tarReader := tar .NewReader (gzReader )
@@ -102,25 +112,25 @@ func extractTroubleshootBundle(reader io.Reader, destDir string) error {
102112 break
103113 }
104114 if err != nil {
105- return err
115+ return errors . Wrap ( err , "failed to read header from tar" )
106116 }
107117
108118 switch header .Typeflag {
109119 case tar .TypeDir :
110120 name := filepath .Join (destDir , header .Name )
111121 if err := os .MkdirAll (name , os .FileMode (header .Mode )); err != nil {
112- return err
122+ return errors . Wrap ( err , "failed to mkdir" )
113123 }
114124 case tar .TypeReg :
115125 name := filepath .Join (destDir , header .Name )
116126 file , err := os .OpenFile (name , os .O_RDWR | os .O_CREATE , os .FileMode (header .Mode ))
117127 if err != nil {
118- return err
128+ return errors . Wrap ( err , "failed to open tar file" )
119129 }
120130 _ , err = io .Copy (file , tarReader )
121131 file .Close ()
122132 if err != nil {
123- return err
133+ return errors . Wrap ( err , "failed to extract file" )
124134 }
125135 }
126136 }
0 commit comments