53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package image
|
|
|
|
import (
|
|
"github.com/rancher/norman/types/convert"
|
|
v32 "github.com/rancher/rancher/pkg/apis/management.cattle.io/v3"
|
|
rketypes "github.com/rancher/rke/types"
|
|
)
|
|
|
|
type System struct {
|
|
Config ExportConfig
|
|
}
|
|
|
|
func (s System) FetchImages(rkeSystemImages map[string]rketypes.RKESystemImages, imagesSet map[string]map[string]struct{}) error {
|
|
if len(rkeSystemImages) <= 0 {
|
|
return nil
|
|
}
|
|
collectionImagesList := []interface{}{rkeSystemImages}
|
|
if s.Config.OsType == Linux {
|
|
collectionImagesList = append(collectionImagesList, v32.ToolsSystemImages)
|
|
}
|
|
images, err := flatImagesFromCollections(collectionImagesList...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, image := range images {
|
|
addSourceToImage(imagesSet, image, "system")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func flatImagesFromCollections(cols ...interface{}) (images []string, err error) {
|
|
for _, col := range cols {
|
|
colObj := map[string]interface{}{}
|
|
if err := convert.ToObj(col, &colObj); err != nil {
|
|
return []string{}, err
|
|
}
|
|
images = append(images, fetchImagesFromCollection(colObj)...)
|
|
}
|
|
return images, nil
|
|
}
|
|
|
|
func fetchImagesFromCollection(obj map[string]interface{}) (images []string) {
|
|
for _, v := range obj {
|
|
switch t := v.(type) {
|
|
case string:
|
|
images = append(images, t)
|
|
case map[string]interface{}:
|
|
images = append(images, fetchImagesFromCollection(t)...)
|
|
}
|
|
}
|
|
return images
|
|
}
|