1
0
mirror of https://github.com/rancher/os.git synced 2025-09-17 15:40:47 +00:00

Decompress user-data if it is gzipped

Fixes #2391

(cherry picked from commit 05c2a40aa5)
This commit is contained in:
stffabi
2018-06-22 09:09:07 +02:00
committed by niusmallnan
parent e4653b55c1
commit 39e97a6754
2 changed files with 21 additions and 1 deletions

View File

@@ -182,6 +182,11 @@ func fetchAndSave(ds datasource.Datasource) error {
log.Errorf("Failed fetching user-data from datasource: %v", err) log.Errorf("Failed fetching user-data from datasource: %v", err)
return err return err
} }
userDataBytes, err = decompressIfGzip(userDataBytes)
if err != nil {
log.Errorf("Failed decompressing user-data from datasource: %v", err)
return err
}
log.Infof("Fetching meta-data from datasource of type %v", ds.Type()) log.Infof("Fetching meta-data from datasource of type %v", ds.Type())
metadata, err = ds.FetchMetadata() metadata, err = ds.FetchMetadata()
if err != nil { if err != nil {
@@ -367,3 +372,13 @@ func composeToCloudConfig(bytes []byte) ([]byte, error) {
}, },
}) })
} }
const gzipMagicBytes = "\x1f\x8b"
func decompressIfGzip(userdataBytes []byte) ([]byte, error) {
if !bytes.HasPrefix(userdataBytes, []byte(gzipMagicBytes)) {
return userdataBytes, nil
}
return config.DecompressGzip(userdataBytes)
}

View File

@@ -18,7 +18,12 @@ func DecodeBase64Content(content string) ([]byte, error) {
} }
func DecodeGzipContent(content string) ([]byte, error) { func DecodeGzipContent(content string) ([]byte, error) {
gzr, err := gzip.NewReader(bytes.NewReader([]byte(content))) byteContent := []byte(content)
return DecompressGzip(byteContent)
}
func DecompressGzip(content []byte) ([]byte, error) {
gzr, err := gzip.NewReader(bytes.NewReader(content))
if err != nil { if err != nil {
return nil, fmt.Errorf("Unable to decode gzip: %q", err) return nil, fmt.Errorf("Unable to decode gzip: %q", err)