187 lines
6.5 KiB
Go
187 lines
6.5 KiB
Go
package cmii_operator
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"strings"
|
|
"wdd.io/agent-go/executor"
|
|
"wdd.io/agent-go/utils"
|
|
"wdd.io/cmii_operator/image"
|
|
)
|
|
|
|
const OfflineImageGzipFolderPrefix = "/root/octopus_image/"
|
|
const OfflineDeployHarborHost = "harbor.wdd.io"
|
|
const PublicDeployHarborHost = "42.192.52.227"
|
|
const DirectPushDeployHarborHost = "36.134.28.60"
|
|
|
|
func FetchDemoImages(projectName string, gzipSplit bool) (errorPullImageList, errorGzipImageList []string) {
|
|
|
|
// generate a project folder
|
|
err := os.MkdirAll(OfflineImageGzipFolderPrefix+projectName, os.ModeDir)
|
|
if err != nil {
|
|
if !errors.Is(err, os.ErrExist) {
|
|
log.ErrorF("[FetchDemoImages] - create folder of %s error %s", OfflineImageGzipFolderPrefix+projectName, err.Error())
|
|
return errorPullImageList, errorGzipImageList
|
|
}
|
|
}
|
|
|
|
// get demo image version map
|
|
backendMap, frontendMap, srsMap := BackupAllCmiiDeploymentToMap(demo)
|
|
|
|
utils.BeautifulPrint(backendMap)
|
|
utils.BeautifulPrint(frontendMap)
|
|
utils.BeautifulPrint(srsMap)
|
|
|
|
// save map to file
|
|
backendMapFile := OfflineImageGzipFolderPrefix + projectName + "-backend-app.json"
|
|
frontendMapFile := OfflineImageGzipFolderPrefix + projectName + "-frontend-app.json"
|
|
srsMapFile := OfflineImageGzipFolderPrefix + projectName + "-srs-app.json"
|
|
_ = os.Remove(backendMapFile)
|
|
_ = os.Remove(frontendMapFile)
|
|
_ = os.Remove(srsMapFile)
|
|
|
|
executor.BasicAppendContentToFile(
|
|
utils.BeautifulPrintToString(backendMap),
|
|
backendMapFile,
|
|
)
|
|
executor.BasicAppendContentToFile(
|
|
utils.BeautifulPrintToString(frontendMap),
|
|
frontendMapFile,
|
|
)
|
|
executor.BasicAppendContentToFile(
|
|
utils.BeautifulPrintToString(srsMapFile),
|
|
srsMapFile,
|
|
)
|
|
|
|
// download image
|
|
backendPull := image.ImagePullFromCmiiHarborByMap(backendMap, true)
|
|
frontendPull := image.ImagePullFromCmiiHarborByMap(frontendMap, true)
|
|
srsPull := image.ImagePullFromCmiiHarborByMap(srsMap, true)
|
|
|
|
// compress image
|
|
if gzipSplit {
|
|
for image_name, tag := range backendMap {
|
|
if !image.SaveToTarGZ(image_name+":"+tag, OfflineImageGzipFolderPrefix+projectName+"/app/") {
|
|
errorGzipImageList = append(errorGzipImageList, image.CmiiHarborPrefix+image_name+":"+tag)
|
|
}
|
|
}
|
|
for image_name, tag := range frontendMap {
|
|
if !image.SaveToTarGZ(image_name+":"+tag, OfflineImageGzipFolderPrefix+projectName+"/app/") {
|
|
errorGzipImageList = append(errorGzipImageList, image.CmiiHarborPrefix+image_name+":"+tag)
|
|
}
|
|
}
|
|
for image_name, tag := range srsMap {
|
|
if !image.SaveToTarGZ(image_name+":"+tag, OfflineImageGzipFolderPrefix+projectName+"/app/") {
|
|
errorGzipImageList = append(errorGzipImageList, image.CmiiHarborPrefix+image_name+":"+tag)
|
|
}
|
|
}
|
|
}
|
|
// upload to harbor
|
|
|
|
// clean up images
|
|
|
|
errorPullImageList = append(errorPullImageList, backendPull...)
|
|
errorPullImageList = append(errorPullImageList, frontendPull...)
|
|
errorPullImageList = append(errorPullImageList, srsPull...)
|
|
|
|
return errorPullImageList, errorGzipImageList
|
|
}
|
|
|
|
func FetchVersionImages(cmiiVersion string, gzipSplit bool) (errorPullImageList, errorGzipImageList []string) {
|
|
|
|
// generate a project folder
|
|
err := os.MkdirAll(OfflineImageGzipFolderPrefix+cmiiVersion, os.ModeDir)
|
|
if err != nil {
|
|
if !errors.Is(err, os.ErrExist) {
|
|
log.ErrorF("[FetchDemoImages] - create folder of %s error %s", OfflineImageGzipFolderPrefix+cmiiVersion, err.Error())
|
|
return errorPullImageList, errorGzipImageList
|
|
}
|
|
}
|
|
|
|
backendMap := CmiiBackendAppMap
|
|
frontendMap := CmiiFrontendAppMap
|
|
|
|
for app, _ := range backendMap {
|
|
backendMap[app] = cmiiVersion
|
|
}
|
|
for app, _ := range frontendMap {
|
|
frontendMap[app] = cmiiVersion
|
|
}
|
|
|
|
var allCmiiImageName []string
|
|
|
|
allCmiiImageName = append(allCmiiImageName, image.ConvertCMiiImageMapToList(backendMap)...)
|
|
allCmiiImageName = append(allCmiiImageName, image.ConvertCMiiImageMapToList(frontendMap)...)
|
|
|
|
for key, value := range CmiiSrsAppMap {
|
|
var app *CmiiDeploymentInterface
|
|
if strings.Contains(value, "deployment") {
|
|
app = CmiiOperator.DeploymentOneInterface(demo, key)
|
|
if app != nil {
|
|
allCmiiImageName = append(allCmiiImageName, app.Image)
|
|
}
|
|
} else if strings.Contains(value, "state") {
|
|
app = CmiiOperator.StatefulSetOneInterface(demo, key)
|
|
if app != nil {
|
|
for _, imageName := range app.ContainerImageMap {
|
|
allCmiiImageName = append(allCmiiImageName, imageName)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
utils.BeautifulPrint(allCmiiImageName)
|
|
|
|
// do work
|
|
errorPullImageList, errorGzipImageList = image.PullFromListAndCompressSplit(allCmiiImageName, OfflineImageGzipFolderPrefix+cmiiVersion)
|
|
|
|
return errorPullImageList, errorGzipImageList
|
|
}
|
|
|
|
func FetchDependencyRepos(gzipSplit bool) (errorPullImageList, errorGzipImageList []string) {
|
|
err := os.MkdirAll(OfflineImageGzipFolderPrefix, os.ModeDir)
|
|
if err != nil {
|
|
if !errors.Is(err, os.ErrExist) {
|
|
log.ErrorF("[FetchDependencyRepos] - create folder of %s error %s", OfflineImageGzipFolderPrefix, err.Error())
|
|
}
|
|
}
|
|
|
|
errorPullImageList, errorGzipImageList = image.PullFromListAndCompressSplit(image.MiddlewareAmd64, OfflineImageGzipFolderPrefix+"middle/")
|
|
|
|
pull, gzipImageList := image.PullFromListAndCompressSplit(image.Rancher1204Amd64, OfflineImageGzipFolderPrefix+"rke/")
|
|
|
|
return append(errorPullImageList, pull...), append(errorGzipImageList, gzipImageList...)
|
|
|
|
}
|
|
|
|
func LoadSplitGzipImageToTargetHarbor(projectName, targetHarborHost string) (errorLoadImageNameList, errorPushImageNameList []string) {
|
|
|
|
// list folder
|
|
projectGzipFolder := OfflineImageGzipFolderPrefix + projectName
|
|
errorLoadImageNameList = append(errorLoadImageNameList, image.ImageLoadFromFolderPath(projectGzipFolder)...)
|
|
// read from json
|
|
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(image.Cmii520DemoImageList, targetHarborHost)...)
|
|
|
|
// re-tag
|
|
// push
|
|
|
|
// todo clean host and harbor
|
|
// check harbor exits
|
|
|
|
return errorLoadImageNameList, errorPushImageNameList
|
|
}
|
|
|
|
func LoadSplitDepGzipImageToTargetHarbor(targetHarborHost string) (errorLoadImageNameList []string, errorPushImageNameList []string) {
|
|
|
|
//middle := OfflineImageGzipFolderPrefix + "middle/"
|
|
//rke := OfflineImageGzipFolderPrefix + "rke/"
|
|
//errorLoadImageNameList = append(errorLoadImageNameList, ImageLoadFromFolderPath(middle)...)
|
|
//errorLoadImageNameList = append(errorLoadImageNameList, ImageLoadFromFolderPath(rke)...)
|
|
|
|
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(image.MiddlewareAmd64, targetHarborHost)...)
|
|
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(image.Rancher1204Amd64, targetHarborHost)...)
|
|
|
|
return errorLoadImageNameList, errorPushImageNameList
|
|
|
|
}
|