package image import ( "strings" ) var unSupported = "UN-SUPPORT-APP-NAME" const CmiiHarborPrefix = "harbor.cdcyy.com.cn/cmii/" func ImageFullNameToAppName(imageFullName string) (appName string) { // harbor.cdcyy.cn/cmii/cmii-uav-platform:5.4.0 ==> cmii-uav-platform // 10.1.1.1:8033/cmii/ok:1.2 不支持 不允许存在 // rancher/fleet:v0.3.4 // ossr/srs:v5.0.1 ==> docker=cmii=srs=v5.0.1.tar.gz // nginx:latest // bitnami/minio:2022.5.4 // simonrupf/chronyd:0.4.3 if strings.HasPrefix(imageFullName, CmiiHarborPrefix) { return strings.Split(strings.TrimPrefix(imageFullName, CmiiHarborPrefix), ":")[0] } return "" } func ImageFullNameToImageTag(imageFullName string) (imageTag string) { s := strings.Split(imageFullName, ":")[1] if strings.Contains(s, ":") { // 10.1.1.1:8033/cmii/ok:1.2 return strings.Split(imageFullName, ":")[2] } return s } // ImageFullNameToGzipFileName 必须输出长度为4的内容 =出现得次数为3 func ImageFullNameToGzipFileName(imageFullName string) (gzipFileName string) { // harbor.cdcyy.cn/cmii/cmii-uav-platform:5.4.0 ==> cmlc=cmii=cmii-uav-platform=5.4.0.tar.gz // rancher/fleet:v0.3.4 // ossr/srs:v5.0.1 ==> docker=cmii=srs=v5.0.1.tar.gz // nginx:latest // bitnami/minio:2022.5.4 // simonrupf/chronyd:0.4.3 // 10.1.1.1:8033/cmii/ok:1.2 不支持 不允许存在 split := strings.Split(imageFullName, ":") //log.DebugF(" %s to %s", imageRepoTag, split) if len(split) == 1 { // nginx return "docker=library=" + imageFullName + "=latest.tar.gz" } first := strings.Split(split[0], "/") //log.DebugF(" split[0] %s to %s", split[0], first) if len(first) == 3 { // harbor.cdcyy.cn/cmii/cmii-uav-platform:5.4.0 // docker.io/ossr/srs:v5.0.1 if strings.HasPrefix(split[0], CmiiHarborPrefix) { gzipFileName += "cmlc=cmii=" } else { gzipFileName += "docker=cmii=" } gzipFileName += first[2] gzipFileName += "=" } else if len(first) == 4 { // harbor.cdcyy.cn/cmii/ossr/srs:v5.0.1 // harbor.cdcyy.com.cn/cmii/cmlc-ai/cmlc-ai-operator:v5.2.0-t4-no-dino if !strings.HasPrefix(split[0], CmiiHarborPrefix) { return imageFullName } gzipFileName += "cmlc=cmii=" gzipFileName += first[3] gzipFileName += "=" } else if len(first) == 2 { // bitnami/redis // ossrs/srs gzipFileName += "docker=" gzipFileName += first[0] gzipFileName += "=" gzipFileName += first[1] gzipFileName += "=" } else if len(first) == 1 { // nginx:latest return "docker=library=" + split[0] + "=" + split[1] + ".tar.gz" } gzipFileName += split[1] gzipFileName += ".tar.gz" return gzipFileName } func ImageFullNameToTargetImageFullName(imageFullName, targetHost string) string { if strings.HasPrefix(imageFullName, CmiiHarborPrefix) { imageFullName = strings.TrimPrefix(imageFullName, CmiiHarborPrefix) } else if strings.HasPrefix(imageFullName, "docker.io") { imageFullName = strings.TrimPrefix(imageFullName, "docker.io") } // rancher/123:v123 if strings.HasPrefix(imageFullName, "rancher") { return targetHost + "/" + imageFullName } // ossr/srs:v4.0.5 if strings.Contains(imageFullName, "/") { imageFullName = strings.Split(imageFullName, "/")[1] } // srs:v4.0.5 // cmii-uav-platform:5.4.0 return targetHost + "/cmii/" + imageFullName } func GzipFileNameToImageFullName(gzipFileName string) (imageFullName string) { return gzipFileName }