[agent-operator] - image bastion mode
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -18,15 +20,16 @@ const PublicDeployHarborHost = "42.192.52.227"
|
||||
const DirectPushDeployHarborHost = "36.134.71.138"
|
||||
|
||||
type ImageSyncEntity struct {
|
||||
ProjectName string // 优先级3
|
||||
ProjectVersion string // 优先级2
|
||||
CmiiNameTagList []string // 优先级1 appName:tag的形式
|
||||
FullNameImageList []string // 优先级1
|
||||
DownloadImage bool // 下载镜像
|
||||
CompressImageToGzip bool // 压缩镜像
|
||||
UploadToDemoMinio bool // 上传镜像
|
||||
ShouldDirectPushToHarbor bool // 直接推送到对方的主机 || 离线部署机 使用此部门
|
||||
DirectHarborHost string // 目标Harbor仓库的Host,全名称带端口 不带http前缀
|
||||
ProjectName string // 优先级3
|
||||
ProjectFromDemoNameNotNull bool
|
||||
ProjectVersion string // 优先级2
|
||||
CmiiNameTagList []string // 优先级1 appName:tag的形式
|
||||
FullNameImageList []string // 优先级1
|
||||
DownloadFromOss bool // 下载镜像
|
||||
CompressImageToGzip bool // 压缩镜像
|
||||
UploadToDemoMinio bool // 上传镜像
|
||||
ShouldDirectPushToHarbor bool // 直接推送到对方的主机 || 离线部署机 使用此部门
|
||||
DirectHarborHost string // 目标Harbor仓库的Host,全名称带端口 不带http前缀
|
||||
}
|
||||
|
||||
type ImageSyncResult struct {
|
||||
@@ -76,7 +79,7 @@ func (sync ImageSyncEntity) PullFromEntityAndSyncConditionally() (imageSyncResul
|
||||
allCmiiImageNameList = concatAndUniformCmiiImage(sync.FullNameImageList, sync.CmiiNameTagList)
|
||||
|
||||
// DCU
|
||||
errorPullImageList, errorGzipImageList, realCmiiImageList, allGzipFileNameList = DownloadCompressUploadFromFullNameList(allCmiiImageNameList, sync.CompressImageToGzip, gzipFolderFullPath, sync.UploadToDemoMinio)
|
||||
errorPullImageList, errorGzipImageList, realCmiiImageList, allGzipFileNameList = DownloadCompressUpload(allCmiiImageNameList, sync.CompressImageToGzip, gzipFolderFullPath, sync.UploadToDemoMinio)
|
||||
}
|
||||
|
||||
// 直接传输到目标Harbor仓库
|
||||
@@ -118,7 +121,8 @@ func concatAndUniformCmiiImage(fullImageList []string, cmiiImageList []string) [
|
||||
return fullImageList
|
||||
}
|
||||
|
||||
func DownloadCompressUploadFromFullNameList(fullNameList []string, shouldGzip bool, gzipFolderFullPath string, shouldOss bool) (errorPullImageList, errorGzipImageList, realCmiiImageName, allGzipFileNameList []string) {
|
||||
// DownloadCompressUpload DCU 镜像同步的前半部分,通常在35.71 LapPro执行,无需Bastion Mode
|
||||
func DownloadCompressUpload(fullNameList []string, shouldGzip bool, gzipFolderFullPath string, shouldOss bool) (errorPullImageList, errorGzipImageList, realCmiiImageName, allGzipFileNameList []string) {
|
||||
|
||||
// Download
|
||||
log.Info("DOWNLOAD START !")
|
||||
@@ -190,8 +194,62 @@ func DownloadCompressUploadFromFullNameList(fullNameList []string, shouldGzip bo
|
||||
return errorPullImageList, errorGzipImageList, fullNameList, allGzipFileNameList
|
||||
}
|
||||
|
||||
func uploadGzipFileToDemoMinio() {
|
||||
// DownloadLoadTagPush DLTU procedure ImageSync的另外一般流程,需要支持 堡垒机(纯离线)的模式
|
||||
// 1. 文件模式,从文件中读取全部的镜像全名称-写死到文件中
|
||||
// 2. Gzip文件目录,RKE MIDDLE CMII三个文件目录 - 是否需要约定目录
|
||||
// 约定目录 /root/wdd/image/rke/ /root/wdd/image/middle/ /root/wdd/image/cmii/
|
||||
// 3. 读取本机的IP地址 - 或者进行参数传递
|
||||
// 4. OSS地址 - 参数传递gizpFileName
|
||||
func DownloadLoadTagPush(downloadFromOss bool, ossUrlPrefix, localGzipFolder string, targetHarborFullName string) []string {
|
||||
|
||||
// download
|
||||
if downloadFromOss {
|
||||
parseAndDownloadFromOssUrlPrefix(ossUrlPrefix, localGzipFolder)
|
||||
}
|
||||
// load
|
||||
loadAllGzipImageFromLocalFolder(localGzipFolder)
|
||||
image.LoadFromFolderPath(localGzipFolder)
|
||||
|
||||
// tag
|
||||
// push
|
||||
allFileInFolder, err := utils.ListAllFileInFolder(localGzipFolder)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
for _, gzipFileName := range allFileInFolder {
|
||||
log.DebugF("gzip file name is %s", gzipFileName)
|
||||
imageFullName := image2.GzipFileNameToImageFullName(gzipFileName)
|
||||
if imageFullName == "" {
|
||||
log.ErrorF("gzip file %s to image full name error !", gzipFileName)
|
||||
continue
|
||||
}
|
||||
targetImageFullName := image2.ImageNameToTargetImageFullName(imageFullName, targetHarborFullName)
|
||||
|
||||
// tag
|
||||
image.TagFromSourceToTarget(imageFullName, targetImageFullName)
|
||||
//push
|
||||
pushResult := image.PushToOctopusKindHarbor(targetImageFullName)
|
||||
defer pushResult.Close()
|
||||
|
||||
scanner := bufio.NewScanner(pushResult)
|
||||
for scanner.Scan() {
|
||||
}
|
||||
fmt.Println()
|
||||
fmt.Printf("%s to %s push success !", gzipFileName, targetImageFullName)
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func loadAllGzipImageFromLocalFolder(localGzipFolder string) {
|
||||
|
||||
}
|
||||
|
||||
// todo
|
||||
func parseAndDownloadFromOssUrlPrefix(ossUrlPrefix string, localGzipFolder string) {
|
||||
|
||||
// 解析
|
||||
}
|
||||
|
||||
// DownloadCompressUploadFromDemo 获取DEMO环境的全部镜像
|
||||
@@ -211,7 +269,7 @@ func DownloadCompressUploadFromDemo(projectName string, shouldGzip bool, shouldO
|
||||
|
||||
// do work
|
||||
// DCU
|
||||
return DownloadCompressUploadFromFullNameList(allCmiiImageNameListFromDemo, shouldGzip, OfflineImageGzipFolderPrefix+projectName, shouldOss)
|
||||
return DownloadCompressUpload(allCmiiImageNameListFromDemo, shouldGzip, OfflineImageGzipFolderPrefix+projectName, shouldOss)
|
||||
}
|
||||
|
||||
func buildAllCmiiImageNameListFromDemo(projectName string) []string {
|
||||
@@ -267,7 +325,7 @@ func DownloadCompressUploadFromVersion(cmiiVersion string, shouldGzip bool, shou
|
||||
|
||||
// do work
|
||||
// DCU procedure
|
||||
return DownloadCompressUploadFromFullNameList(realCmiiImageName, shouldGzip, OfflineImageGzipFolderPrefix+cmiiVersion, shouldOss)
|
||||
return DownloadCompressUpload(realCmiiImageName, shouldGzip, OfflineImageGzipFolderPrefix+cmiiVersion, shouldOss)
|
||||
|
||||
}
|
||||
|
||||
@@ -308,7 +366,7 @@ func buildAllCmiiImageNameListFromVersion(cmiiVersion string) []string {
|
||||
return realCmiiImageName
|
||||
}
|
||||
|
||||
func DownloadCompressUploadDependency(shouldGzip bool, shouldOss bool) (errorPullImageList, errorGzipImageList []string) {
|
||||
func DownloadCompressUploadDependency(shouldGzip bool, shouldOss bool, downloadMiddle bool, downloadRke bool) (errorPullImageList, errorGzipImageList, realCmiiImageName, allGzipFileNameList []string) {
|
||||
err := os.MkdirAll(OfflineImageGzipFolderPrefix, os.ModeDir)
|
||||
if err != nil {
|
||||
if !errors.Is(err, os.ErrExist) {
|
||||
@@ -316,14 +374,22 @@ func DownloadCompressUploadDependency(shouldGzip bool, shouldOss bool) (errorPul
|
||||
}
|
||||
}
|
||||
|
||||
// pull middleware images
|
||||
errorPullImageList, errorGzipImageList = image.PullFromListAndCompressSplit(image.MiddlewareAmd64, OfflineImageGzipFolderPrefix+"middle/")
|
||||
if downloadMiddle {
|
||||
|
||||
// pull rke images
|
||||
pull, gzipImageList := image.PullFromListAndCompressSplit(image.Rancher1204Amd64, OfflineImageGzipFolderPrefix+"rke/")
|
||||
gzipFolderPrefix := OfflineImageGzipFolderPrefix + "middle/"
|
||||
|
||||
// result
|
||||
return append(errorPullImageList, pull...), append(errorGzipImageList, gzipImageList...)
|
||||
// remove folder first
|
||||
utils.RemoveFolderComplete(gzipFolderPrefix)
|
||||
|
||||
return DownloadCompressUpload(image.MiddlewareAmd64, shouldGzip, gzipFolderPrefix, shouldOss)
|
||||
}
|
||||
|
||||
if downloadRke {
|
||||
gzipFolderPrefix := OfflineImageGzipFolderPrefix + "rke/"
|
||||
return DownloadCompressUpload(image.MiddlewareAmd64, shouldGzip, gzipFolderPrefix, shouldOss)
|
||||
}
|
||||
|
||||
return errorPullImageList, errorGzipImageList, realCmiiImageName, allGzipFileNameList
|
||||
}
|
||||
|
||||
func LoadSplitCmiiGzipImageToTargetHarbor(projectName, targetHarborHost string) (errorLoadImageNameList, errorPushImageNameList []string) {
|
||||
|
||||
Reference in New Issue
Block a user