1
0
mirror of https://github.com/rancher/rke.git synced 2025-08-01 07:08:38 +00:00

Generate system image list for k8s versions

This commit is contained in:
galal-hussein 2018-08-30 22:55:24 +02:00 committed by Alena Prokharchyk
parent 1f6e254f66
commit cb50672071

View File

@ -5,6 +5,7 @@ import (
"fmt"
"io/ioutil"
"os"
"reflect"
"strconv"
"strings"
@ -41,6 +42,18 @@ func ConfigCommand() cli.Command {
Name: "print,p",
Usage: "Print configuration",
},
cli.BoolFlag{
Name: "system-images",
Usage: "Generate the default system images",
},
cli.BoolFlag{
Name: "all",
Usage: "Generate the default system images for all versions",
},
cli.StringFlag{
Name: "version",
Usage: "Generate the default system images for specific k8s versions",
},
},
}
}
@ -81,6 +94,9 @@ func writeConfig(cluster *v3.RancherKubernetesEngineConfig, configFile string, p
}
func clusterConfig(ctx *cli.Context) error {
if ctx.Bool("system-images") {
return generateSystemImagesList(ctx.String("version"), ctx.Bool("all"))
}
configFile := ctx.String("name")
print := ctx.Bool("print")
cluster := v3.RancherKubernetesEngineConfig{}
@ -383,3 +399,63 @@ func getAddonManifests(reader *bufio.Reader) ([]string, error) {
return addonSlice, nil
}
func generateSystemImagesList(version string, all bool) error {
allVersions := []string{}
for version := range v3.AllK8sVersions {
allVersions = append(allVersions, version)
}
if all {
for version, rkeSystemImages := range v3.AllK8sVersions {
logrus.Infof("Generating images list for version [%s]:", version)
uniqueImages := getUniqueSystemImageList(rkeSystemImages)
for _, image := range uniqueImages {
if image == "" {
continue
}
fmt.Printf("%s\n", image)
}
}
return nil
}
if len(version) == 0 {
version = v3.DefaultK8s
}
rkeSystemImages := v3.AllK8sVersions[version]
if rkeSystemImages == (v3.RKESystemImages{}) {
return fmt.Errorf("k8s version is not supported, supported versions are: %v", allVersions)
}
logrus.Infof("Generating images list for version [%s]:", version)
uniqueImages := getUniqueSystemImageList(rkeSystemImages)
for _, image := range uniqueImages {
if image == "" {
continue
}
fmt.Printf("%s\n", image)
}
return nil
}
func getUniqueSystemImageList(rkeSystemImages v3.RKESystemImages) []string {
imagesReflect := reflect.ValueOf(rkeSystemImages)
images := make([]string, imagesReflect.NumField())
for i := 0; i < imagesReflect.NumField(); i++ {
images[i] = imagesReflect.Field(i).Interface().(string)
}
return getUniqueSlice(images)
}
func getUniqueSlice(slice []string) []string {
encountered := map[string]bool{}
unqiue := []string{}
for i := range slice {
if encountered[slice[i]] {
continue
} else {
encountered[slice[i]] = true
unqiue = append(unqiue, slice[i])
}
}
return unqiue
}