[agent-operator] - cmii deploy part

This commit is contained in:
zeaslity
2024-06-13 15:06:33 +08:00
parent f1fdfc7777
commit 540d69ede2
19 changed files with 503 additions and 140 deletions

View File

@@ -0,0 +1,82 @@
package main
import (
"os"
"path/filepath"
"wdd.io/agent-common/utils"
"wdd.io/agent-deploy"
"wdd.io/agent-operator/image"
)
func CmiiEnvDeploy() {
// 完整部署
shouldDoCompleteDeploy := true
// 部署的环境
cmiiNamespace := dev
// 输出特定版本的Tag 或者 从DEMO环境拉取
DeploySpecificTag := "5.5.0"
var backendMap map[string]string
var frontendMap map[string]string
var srsMap map[string]string
if DeploySpecificTag == "" {
// 从DEMO环境拉取
backendMap, frontendMap, srsMap = BackupAllCmiiDeploymentToMap(demo)
} else {
// 输出特定版本的Tag
backendMap, frontendMap, srsMap = image.GenerateCmiiTagVersionImageMap(DeploySpecificTag)
}
utils.BeautifulPrintWithTitle(backendMap, "backendMap")
utils.BeautifulPrintWithTitle(frontendMap, "frontendMap")
utils.BeautifulPrintWithTitle(srsMap, "srsMap")
// generate and get all old stuff
applyYamlFolder := agent_deploy.CmiiEnvironmentDeploy(shouldDoCompleteDeploy, cmiiNamespace, frontendMap, backendMap)
// clear old apply file
clearOldApplyStuff(applyYamlFolder+"old/", cmiiNamespace)
// apply new app
applyNewAppStuff(applyYamlFolder, cmiiNamespace)
}
func applyNewAppStuff(applyYamlFolder string, cmiiEnv string) bool {
files, err := os.ReadDir(applyYamlFolder)
if err != nil {
log.ErrorF("failed to read directory: %v", err)
return false
}
for _, file := range files {
if filepath.Ext(file.Name()) == ".yaml" || filepath.Ext(file.Name()) == ".yml" {
filePath := filepath.Join(applyYamlFolder, file.Name())
ApplyByKubectl(filePath, cmiiEnv)
}
}
return true
}
func clearOldApplyStuff(oldApplyYamlFolder string, cmiiEnv string) bool {
files, err := os.ReadDir(oldApplyYamlFolder)
if err != nil {
log.ErrorF("failed to read directory: %v", err)
return false
}
for _, file := range files {
if filepath.Ext(file.Name()) == ".yaml" || filepath.Ext(file.Name()) == ".yml" {
filePath := filepath.Join(oldApplyYamlFolder, file.Name())
DeleteByKubectl(filePath, cmiiEnv)
}
}
return true
}

View File

@@ -7,6 +7,7 @@ import (
"time"
image2 "wdd.io/agent-common/image"
"wdd.io/agent-common/utils"
"wdd.io/agent-operator/config"
)
var DefaultCmiiOperator = CmiiK8sOperator{}
@@ -193,7 +194,7 @@ func FindCmiiMiddlewarePodInterface(cmiiEnv string) (podList []CmiiPodInterface)
cmiiPodInterfaces := DefaultCmiiOperator.PodAllInterface(cmiiEnv)
for _, podInterface := range cmiiPodInterfaces {
for key := range CmiiMiddlewareNameMap {
for key := range config.CmiiMiddlewareNameMap {
if strings.Contains(podInterface.Name, key) {
podList = append(podList, podInterface)
}
@@ -204,8 +205,8 @@ func FindCmiiMiddlewarePodInterface(cmiiEnv string) (podList []CmiiPodInterface)
}
func ScaleCmiiFrontendDeploymentToDesiredReplicas(cmiiEnv string, desiredReplicas int32) (errorUpdateMap map[string]int32) {
frontMap := make(map[string]int32, len(CmiiFrontendAppMap))
for aooName := range CmiiFrontendAppMap {
frontMap := make(map[string]int32, len(config.CmiiFrontendAppMap))
for aooName := range config.CmiiFrontendAppMap {
frontMap[aooName] = desiredReplicas
}
@@ -213,8 +214,8 @@ func ScaleCmiiFrontendDeploymentToDesiredReplicas(cmiiEnv string, desiredReplica
}
func ScaleCmiiBackendDeploymentToDesiredReplicas(cmiiEnv string, desiredReplicas int32) (errorUpdateMap map[string]int32) {
backMap := make(map[string]int32, len(CmiiBackendAppMap))
for aooName := range CmiiBackendAppMap {
backMap := make(map[string]int32, len(config.CmiiBackendAppMap))
for aooName := range config.CmiiBackendAppMap {
backMap[aooName] = desiredReplicas
}
@@ -283,7 +284,7 @@ func RestartCmiiFrontendDeployment(cmiiEnv string) {
cmiiDeploymentInterfaces := DefaultCmiiOperator.DeploymentAllInterface(cmiiEnv)
for _, deploymentInterface := range cmiiDeploymentInterfaces {
_, ok := CmiiFrontendAppMap[deploymentInterface.Name]
_, ok := config.CmiiFrontendAppMap[deploymentInterface.Name]
if ok {
if !DefaultCmiiOperator.DeploymentRestart(deploymentInterface.Namespace, deploymentInterface.Name) {
log.ErrorF("[RestartCmiiFrontendDeployment] - restart of [%s] [%s] failed !", deploymentInterface.Namespace, deploymentInterface.Name)
@@ -408,8 +409,8 @@ func RollBackCmiiDeploymentFromUpdateLog(updateLog string) bool {
return ok
}
// BackupAllDeploymentFromEnv 从DEMO提取全部的CMII的应用
func BackupAllDeploymentFromEnv(cmiiEnv string) bool {
// BackupAllDeploymentFromEnvToFile 从DEMO提取全部的CMII的应用
func BackupAllDeploymentFromEnvToFile(cmiiEnv string) bool {
allInterface := DefaultCmiiOperator.DeploymentAllInterface(cmiiEnv)
@@ -419,7 +420,7 @@ func BackupAllDeploymentFromEnv(cmiiEnv string) bool {
//filePath := "C:\\Users\\wddsh\\Documents\\IdeaProjects\\ProjectOctopus\\cmii_operator\\log\\all-" + DefaultCmiiOperator.CurrentNamespace + "-" + utils.TimeSplitFormatString() + ".txt"
filePath := "/home/wdd/IdeaProjects/ProjectOctopus/agent-operator/log/all-" + DefaultCmiiOperator.CurrentNamespace + "-" + utils.TimeSplitFormatString() + ".txt"
log.InfoF("[BackupAllDeploymentFromEnv] - backup all image from %s => %s", DefaultCmiiOperator.CurrentNamespace, filePath)
log.InfoF("[BackupAllDeploymentFromEnvToFile] - backup all image from %s => %s", DefaultCmiiOperator.CurrentNamespace, filePath)
firstCol := 0
secondCol := 0
@@ -457,7 +458,7 @@ func BackupAllDeploymentFromEnv(cmiiEnv string) bool {
content += "\n"
if !utils.AppendContentToFile(content, filePath) {
log.ErrorF("[BackupAllDeploymentFromEnv] - write to file %s error with contend %s", filePath, content)
log.ErrorF("[BackupAllDeploymentFromEnvToFile] - write to file %s error with contend %s", filePath, content)
return false
}
@@ -485,7 +486,7 @@ func BackupAllCmiiDeploymentToMap(cmiiEnv string) (backendMap, frontendMap, srsM
}
// add srs part
for key, value := range CmiiSrsAppMap {
for key, value := range config.CmiiSrsAppMap {
var app *CmiiDeploymentInterface
if strings.Contains(value, "deployment") {
app = DefaultCmiiOperator.DeploymentOneInterface(cmiiEnv, key)
@@ -545,7 +546,7 @@ func BackUpAllCmiiAppImageNameFromEnv(cmiiEnv string) {
only := make(map[string]string, 150)
// front
utils.AppendContentToFile("---\n", filePath)
for key, value := range CmiiFrontendAppMap {
for key, value := range config.CmiiFrontendAppMap {
_, ok := only[key]
if !ok {
deploy := DefaultCmiiOperator.DeploymentOneInterface(cmiiEnv, key)
@@ -556,7 +557,7 @@ func BackUpAllCmiiAppImageNameFromEnv(cmiiEnv string) {
}
}
utils.AppendContentToFile("---\n", filePath)
for key, value := range CmiiBackendAppMap {
for key, value := range config.CmiiBackendAppMap {
_, ok := only[key]
if !ok {
deploy := DefaultCmiiOperator.DeploymentOneInterface(cmiiEnv, key)
@@ -569,7 +570,7 @@ func BackUpAllCmiiAppImageNameFromEnv(cmiiEnv string) {
// backend
utils.AppendContentToFile("---\n", filePath)
// gis server
for key, value := range CmiiGISAppMap {
for key, value := range config.CmiiGISAppMap {
_, ok := only[key]
if !ok {
deploy := DefaultCmiiOperator.DeploymentOneInterface(cmiiEnv, key)
@@ -581,7 +582,7 @@ func BackUpAllCmiiAppImageNameFromEnv(cmiiEnv string) {
}
// srs
utils.AppendContentToFile("---\n", filePath)
for key, value := range CmiiSrsAppMap {
for key, value := range config.CmiiSrsAppMap {
_, ok := only[key]
if !ok {
var app *CmiiDeploymentInterface
@@ -608,9 +609,9 @@ func BackUpAllCmiiAppImageNameFromEnv(cmiiEnv string) {
func FilterAllCmiiAppStrict(source []CmiiDeploymentInterface) (result []CmiiDeploymentInterface) {
for _, c := range source {
_, ok := CmiiBackendAppMap[c.ContainerName]
_, ok := config.CmiiBackendAppMap[c.ContainerName]
if !ok {
_, ok = CmiiFrontendAppMap[c.ContainerName]
_, ok = config.CmiiFrontendAppMap[c.ContainerName]
if !ok {
log.WarnF("[FilterAllCmiiAppStrict] - [%s] not cmii pod ", c.ContainerName)
continue
@@ -662,9 +663,9 @@ func FilterAllCmiiAppSoft(source []CmiiDeploymentInterface) (result []CmiiDeploy
func FilterAllCmiiPodStrict(podList []CmiiPodInterface) (result []CmiiPodInterface) {
for _, c := range podList {
_, ok := CmiiBackendAppMap[c.ContainerName]
_, ok := config.CmiiBackendAppMap[c.ContainerName]
if !ok {
_, ok = CmiiFrontendAppMap[c.ContainerName]
_, ok = config.CmiiFrontendAppMap[c.ContainerName]
if !ok {
log.WarnF("[FilterAllCmiiPodStrict] - [%s] not cmii pod ", c.ContainerName)
continue
@@ -734,9 +735,9 @@ func FilterAllCmiiNodeSoft(nodeList []CmiiNodeInterface) (result []CmiiNodeInter
}
func AppNameBelongsToCmiiImage(appName string) bool {
_, ok := CmiiBackendAppMap[appName]
_, ok := config.CmiiBackendAppMap[appName]
if !ok {
_, ok = CmiiFrontendAppMap[appName]
_, ok = config.CmiiFrontendAppMap[appName]
if !ok {
log.WarnF("[AppNameBelongsToCmiiImage] - [%s] not cmii app ", appName)
return false

View File

@@ -227,7 +227,7 @@ func TestScaleCmiiBackendDeploymentToDesiredReplicas(t *testing.T) {
func TestBackupAllDeploymentFromEnv(t *testing.T) {
BackupAllDeploymentFromEnv(demo)
BackupAllDeploymentFromEnvToFile(demo)
}

View File

@@ -5,6 +5,7 @@ import (
"os"
"slices"
"strings"
"wdd.io/agent-operator/config"
image2 "wdd.io/agent-common/image"
"wdd.io/agent-common/utils"
@@ -330,7 +331,7 @@ func parseAndDownloadFromOss(ossUrlPrefix, ossFileName, localGzipFolder string)
if strings.HasSuffix(ossFileName, ".txt") {
// download from gzip file list txt
// download all files in the txt file
result := utils.ReadLineFromFile(localGzipFolder + ossFileName)
result := utils.ReadAllContentFromFile(localGzipFolder + ossFileName)
for _, gzipFileName := range result {
DefaultCmiiMinioOperator.DemoMinioOperator.DownloadFileFromOssFullUrl(ossUrlPrefix+gzipFileName, localGzipFolder)
}
@@ -421,8 +422,8 @@ func buildAllCmiiImageNameListFromVersion(cmiiVersion string) []string {
var realCmiiImageName []string
backendMap := CmiiBackendAppMap
frontendMap := CmiiFrontendAppMap
backendMap := config.CmiiBackendAppMap
frontendMap := config.CmiiFrontendAppMap
for app := range backendMap {
backendMap[app] = cmiiVersion
@@ -434,7 +435,7 @@ func buildAllCmiiImageNameListFromVersion(cmiiVersion string) []string {
realCmiiImageName = append(realCmiiImageName, image.CmiiImageMapToFullNameList(backendMap)...)
realCmiiImageName = append(realCmiiImageName, image.CmiiImageMapToFullNameList(frontendMap)...)
for key, value := range CmiiSrsAppMap {
for key, value := range config.CmiiSrsAppMap {
var app *CmiiDeploymentInterface
if strings.Contains(value, "deployment") {
app = DefaultCmiiOperator.DeploymentOneInterface(demo, key)
@@ -469,12 +470,12 @@ func DownloadCompressUploadDependency(shouldGzip bool, shouldOss bool, shouldDow
if isRKE {
log.Info("DCU for rke!")
fulleImageNameList = image.Rancher1204Amd64
fulleImageNameList = config.Rancher1204Amd64
gzipFolderPrefix = image.OfflineImageGzipFolderPrefix + "rke/"
} else {
log.Info("DCU for middle!")
fulleImageNameList = image.MiddlewareAmd64
fulleImageNameList = config.MiddlewareAmd64
gzipFolderPrefix = image.OfflineImageGzipFolderPrefix + "middle/"
}
@@ -487,7 +488,7 @@ func LoadSplitCmiiGzipImageToTargetHarbor(projectName, targetHarborHost string)
projectGzipFolder := image.OfflineImageGzipFolderPrefix + projectName
errorLoadImageNameList = append(errorLoadImageNameList, image.LoadFromFolderPath(projectGzipFolder)...)
// read from json
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(image.Cmii520DemoImageList, targetHarborHost)...)
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(config.Cmii520DemoImageList, targetHarborHost)...)
// re-tag
// push
@@ -505,8 +506,8 @@ func LoadSplitDepGzipImageToTargetHarbor(targetHarborHost string) (errorLoadImag
//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)...)
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(config.MiddlewareAmd64, targetHarborHost)...)
errorPushImageNameList = append(errorPushImageNameList, image.TagFromListAndPushToCHarbor(config.Rancher1204Amd64, targetHarborHost)...)
return errorLoadImageNameList, errorPushImageNameList

View File

@@ -3,6 +3,7 @@ package main
import (
"bytes"
"context"
"fmt"
v1 "k8s.io/api/apps/v1"
autoscalingv1 "k8s.io/api/autoscaling/v1"
corev1 "k8s.io/api/core/v1"
@@ -13,12 +14,16 @@ import (
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/tools/remotecommand"
"os"
"os/exec"
"runtime"
"strings"
"sync"
"time"
image2 "wdd.io/agent-common/image"
"wdd.io/agent-common/logger"
"wdd.io/agent-common/utils"
"wdd.io/agent-operator/config"
)
var log = logger.Log
@@ -45,11 +50,83 @@ const (
workerThread = 4
)
var CmiiDevClusterK8sConfig string
var CmiiCoreClusterK8sConfig string
func init() {
switch runtime.GOOS {
case "windows":
CmiiDevClusterK8sConfig = "C:\\Users\\wddsh\\Documents\\IdeaProjects\\ProjectOctopus\\agent-operator\\config\\cmii-dev-cluster.yaml"
CmiiCoreClusterK8sConfig = "C:\\Users\\wddsh\\Documents\\IdeaProjects\\ProjectOctopus\\agent-operator\\config\\cmii-core-cluster.yaml"
case "linux":
CmiiDevClusterK8sConfig = ""
CmiiCoreClusterK8sConfig = ""
}
}
func GetK8sConfigByEnv(cmiiEnv string) string {
switch cmiiEnv {
case dev:
return CmiiDevClusterK8sConfig
case devFlight:
return CmiiDevClusterK8sConfig
case devOperation:
return CmiiDevClusterK8sConfig
case integration:
return CmiiCoreClusterK8sConfig
case uat:
return CmiiCoreClusterK8sConfig
case validation:
return CmiiCoreClusterK8sConfig
case uavms:
return CmiiCoreClusterK8sConfig
case demo:
return CmiiCoreClusterK8sConfig
default:
return CmiiDevClusterK8sConfig
}
}
func DeleteByKubectl(applyFilePath string, cmiiEnv string) bool {
kubeconfig := GetK8sConfigByEnv(cmiiEnv)
cmd := exec.Command("/usr/local/bin/kubectl", "delete", "-f", applyFilePath)
cmd.Env = append(os.Environ(), fmt.Sprintf("KUBECONFIG=%s", kubeconfig))
output, err := cmd.CombinedOutput()
if err != nil {
log.ErrorF("failed to delete resources in file %s: %v\n%s", applyFilePath, err, output)
return false
}
log.InfoF("successfully deleted resources in file %s\n%s", applyFilePath, output)
return true
}
func ApplyByKubectl(applyFilePath string, cmiiEnv string) bool {
kubeconfig := GetK8sConfigByEnv(cmiiEnv)
cmd := exec.Command("/usr/local/bin/kubectl", "apply", "-f", applyFilePath)
cmd.Env = append(os.Environ(), fmt.Sprintf("KUBECONFIG=%s", kubeconfig))
output, err := cmd.CombinedOutput()
if err != nil {
log.ErrorF("failed to apply resources in file %s: %v\n%s", applyFilePath, err, output)
return false
}
log.InfoF("successfully apply resources in file %s\n%s", applyFilePath, output)
return true
}
func (op *CmiiK8sOperator) checkAndBuildCmiiK8sOperator() {
if op.DevClient == nil {
log.InfoF("[client] - build devFlight k8s operator client !")
devConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(CmiiDevK8sConfig))
devConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(config.CmiiDevK8sConfig))
if err != nil {
msg := "[client] - build devFlight k8s operator error !"
log.Error(msg)
@@ -64,7 +141,7 @@ func (op *CmiiK8sOperator) checkAndBuildCmiiK8sOperator() {
if op.CoreClient == nil {
log.InfoF("[client] - build core k8s operator client !")
coreConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(CmiiCoreK8sConfig))
coreConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(config.CmiiCoreK8sConfig))
if err != nil {
msg := "[client] - build devFlight k8s operator error !"
log.Error(msg)

View File

@@ -1,4 +1,95 @@
package image
package config
var CmiiBackendAppMap = map[string]string{
"cmii-admin-data": "5.2.0",
"cmii-admin-gateway": "5.2.0",
"cmii-admin-user": "5.2.0",
"cmii-app-release": "4.2.0-validation",
"cmii-open-gateway": "5.2.0",
"cmii-suav-supervision": "5.2.0",
"cmii-uav-airspace": "5.2.0",
"cmii-uav-alarm": "5.2.0",
"cmii-uav-autowaypoint": "4.1.6-cm-0828",
"cmii-uav-brain": "5.2.0",
"cmii-uav-cloud-live": "5.2.0",
"cmii-uav-clusters": "5.2.0",
"cmii-uav-cms": "5.2.0",
"cmii-uav-data-post-process": "5.2.0",
"cmii-uav-depotautoreturn": "4.2.0",
"cmii-uav-developer": "5.2.0-25858",
"cmii-uav-device": "5.2.0",
"cmii-uav-emergency": "5.2.0",
"cmii-uav-gateway": "5.2.0",
"cmii-uav-industrial-portfolio": "5.2.0-25268-10",
"cmii-uav-integration": "5.2.0-25447",
"cmii-uav-kpi-monitor": "5.2.0",
"cmii-uav-logger": "5.2.0",
"cmii-uav-material-warehouse": "5.2.0",
"cmii-uav-mission": "5.2.0-25840",
"cmii-uav-mqtthandler": "5.2.0-25340",
"cmii-uav-notice": "5.2.0",
"cmii-uav-oauth": "5.2.0",
"cmii-uav-process": "5.2.0",
"cmii-uav-surveillance": "5.2.0-25854",
"cmii-uav-threedsimulation": "5.2.0",
"cmii-uav-tower": "5.2.0",
"cmii-uav-user": "5.2.0",
"cmii-uav-waypoint": "5.2.0",
"cmii-uav-multilink": "5.2.0",
"cmii-uav-bridge": "5.2.0",
"cmii-uas-lifecycle": "5.2.0",
"cmii-uas-gateway": "5.2.0",
}
var CmiiFrontendAppMap = map[string]string{
"cmii-suav-platform-supervision": "5.2.0",
"cmii-suav-platform-supervisionh5": "5.2.0",
"cmii-uav-platform": "5.2.0-011004",
"cmii-uav-platform-ai-brain": "5.2.0",
"cmii-uav-platform-armypeople": "5.2.0-24538",
"cmii-uav-platform-base": "5.2.0",
"cmii-uav-platform-cms-portal": "5.2.0",
"cmii-uav-platform-detection": "5.2.0",
"cmii-uav-platform-emergency-rescue": "5.2.0",
"cmii-uav-platform-hljtt": "5.2.0",
"cmii-uav-platform-jiangsuwenlv": "4.1.3-jiangsu-0427",
"cmii-uav-platform-logistics": "5.2.0",
"cmii-uav-platform-media": "5.2.0",
"cmii-uav-platform-multiterminal": "5.2.0",
"cmii-uav-platform-mws": "5.2.0",
"cmii-uav-platform-oms": "5.2.0",
"cmii-uav-platform-open": "5.2.0",
"cmii-uav-platform-qingdao": "4.1.6-24238-qingdao",
"cmii-uav-platform-qinghaitourism": "4.1.0-21377-0508",
"cmii-uav-platform-security": "4.1.6",
"cmii-uav-platform-securityh5": "5.2.0",
"cmii-uav-platform-seniclive": "5.2.0",
"cmii-uav-platform-share": "5.2.0",
"cmii-uav-platform-splice": "5.2.0",
"cmii-uav-platform-threedsimulation": "5.2.0-21392",
"cmii-uav-platform-visualization": "5.2.0",
}
var CmiiMiddlewareNameMap = map[string]string{
"helm-nacos": "single",
"helm-emqxs": "single",
"helm-mysql": "single",
"helm-redis": "replication",
"helm-rabbitmq": "single",
}
var CmiiSrsAppMap = map[string]string{
"helm-live-op-v2": "deployment",
"helm-live-rtsp-op": "4.1.6",
"helm-live-srs-rtc": "statefulset",
}
var CmiiGISAppMap = map[string]string{
"cmii-uav-gis-server": "5.4.0",
"cmii-uav-grid-datasource": "5.4.0",
"cmii-uav-grid-engine": "5.4.0",
"cmii-uav-grid-manage": "5.4.0",
}
var MiddlewareAmd64 = []string{
"bitnami/redis:6.2.6-debian-10-r0",

View File

@@ -1,95 +1,4 @@
package main
var CmiiBackendAppMap = map[string]string{
"cmii-admin-data": "5.2.0",
"cmii-admin-gateway": "5.2.0",
"cmii-admin-user": "5.2.0",
"cmii-app-release": "4.2.0-validation",
"cmii-open-gateway": "5.2.0",
"cmii-suav-supervision": "5.2.0",
"cmii-uav-airspace": "5.2.0",
"cmii-uav-alarm": "5.2.0",
"cmii-uav-autowaypoint": "4.1.6-cm-0828",
"cmii-uav-brain": "5.2.0",
"cmii-uav-cloud-live": "5.2.0",
"cmii-uav-clusters": "5.2.0",
"cmii-uav-cms": "5.2.0",
"cmii-uav-data-post-process": "5.2.0",
"cmii-uav-depotautoreturn": "4.2.0",
"cmii-uav-developer": "5.2.0-25858",
"cmii-uav-device": "5.2.0",
"cmii-uav-emergency": "5.2.0",
"cmii-uav-gateway": "5.2.0",
"cmii-uav-industrial-portfolio": "5.2.0-25268-10",
"cmii-uav-integration": "5.2.0-25447",
"cmii-uav-kpi-monitor": "5.2.0",
"cmii-uav-logger": "5.2.0",
"cmii-uav-material-warehouse": "5.2.0",
"cmii-uav-mission": "5.2.0-25840",
"cmii-uav-mqtthandler": "5.2.0-25340",
"cmii-uav-notice": "5.2.0",
"cmii-uav-oauth": "5.2.0",
"cmii-uav-process": "5.2.0",
"cmii-uav-surveillance": "5.2.0-25854",
"cmii-uav-threedsimulation": "5.2.0",
"cmii-uav-tower": "5.2.0",
"cmii-uav-user": "5.2.0",
"cmii-uav-waypoint": "5.2.0",
"cmii-uav-multilink": "5.2.0",
"cmii-uav-bridge": "5.2.0",
"cmii-uas-lifecycle": "5.2.0",
"cmii-uas-gateway": "5.2.0",
}
var CmiiFrontendAppMap = map[string]string{
"cmii-suav-platform-supervision": "5.2.0",
"cmii-suav-platform-supervisionh5": "5.2.0",
"cmii-uav-platform": "5.2.0-011004",
"cmii-uav-platform-ai-brain": "5.2.0",
"cmii-uav-platform-armypeople": "5.2.0-24538",
"cmii-uav-platform-base": "5.2.0",
"cmii-uav-platform-cms-portal": "5.2.0",
"cmii-uav-platform-detection": "5.2.0",
"cmii-uav-platform-emergency-rescue": "5.2.0",
"cmii-uav-platform-hljtt": "5.2.0",
"cmii-uav-platform-jiangsuwenlv": "4.1.3-jiangsu-0427",
"cmii-uav-platform-logistics": "5.2.0",
"cmii-uav-platform-media": "5.2.0",
"cmii-uav-platform-multiterminal": "5.2.0",
"cmii-uav-platform-mws": "5.2.0",
"cmii-uav-platform-oms": "5.2.0",
"cmii-uav-platform-open": "5.2.0",
"cmii-uav-platform-qingdao": "4.1.6-24238-qingdao",
"cmii-uav-platform-qinghaitourism": "4.1.0-21377-0508",
"cmii-uav-platform-security": "4.1.6",
"cmii-uav-platform-securityh5": "5.2.0",
"cmii-uav-platform-seniclive": "5.2.0",
"cmii-uav-platform-share": "5.2.0",
"cmii-uav-platform-splice": "5.2.0",
"cmii-uav-platform-threedsimulation": "5.2.0-21392",
"cmii-uav-platform-visualization": "5.2.0",
}
var CmiiMiddlewareNameMap = map[string]string{
"helm-nacos": "single",
"helm-emqxs": "single",
"helm-mysql": "single",
"helm-redis": "replication",
"helm-rabbitmq": "single",
}
var CmiiSrsAppMap = map[string]string{
"helm-live-op-v2": "deployment",
"helm-live-rtsp-op": "4.1.6",
"helm-live-srs-rtc": "statefulset",
}
var CmiiGISAppMap = map[string]string{
"cmii-uav-gis-server": "5.4.0",
"cmii-uav-grid-datasource": "5.4.0",
"cmii-uav-grid-engine": "5.4.0",
"cmii-uav-grid-manage": "5.4.0",
}
package config
var CmiiDevK8sConfig = `apiVersion: v1
clusters:

View File

@@ -0,0 +1,18 @@
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhPREEyTURZeU5Gb1hEVE14TURFeE5qQTJNRFl5TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2ZNCjFjTjBNUnhUTkRGdEZxcnRIZ0RPM29SV0dicmVob3VFcDJ3VUVRbU8yRUFyZDdkMUFReTJsSm9WM0RUVmhXbUwKcUFUOFcxaWRaS0x0Wm5mNjEva3JPeDd0U2lJeU4xa1ErN3NYRUhnTjVMc01EOVlKcndpUFdFY2FXdU9HVmI1aApMWDZWOTRjN0U5UlFDOENtd09iSkRCNG45ZE8zcDVlTDJHaFRpMkNrRWt3ZkRPR0tEL1IxeUNaK0tFcDRWWlplCnpwcnUzRG5zOUNqZHVOT1VBWTZzUGxjazNvdEdIVnhnRC9IRlRjUEhNbGhvUVQ4dmNDOTZwc0FtYXZPR1BZQ0YKa3RtN0VWYkZDOHN5Q1BMT3AwWWhTWHRkbGtKaC9UWHBaM0hSUWJxSzVPNXR4K1dGL05qMGJVc202ZldSMzZWQgpKQVVscUJIeFhSTzhGTFNrVHkwQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFKeWZ2T3hHVVYvT2wybGRQNnYxeWFSTkd5RVkKWkVxTmM2Y29LSklsd0VQNUxNYzdZNGFReWorZCtVTE4zYmIrOXZsZXdHamluTHRrUW5HZ1R3Q3pKTU5ZNlNJNQo2NzJGZEtQTE85Szdpalhway9qRE9FVHJWS25aMXJBTytOUVBmSVhpcXQ3Y1RyVHlaVzdKTVl3emZNa2VlTGErCnREdmY1Rm5vQTBLN2U3a0ZXNTBpN2pXcGh4RXRMNEJpNzAwNnU4NEpqTU5weVp1MzhKMjFXZkR1RjBoU0NQREgKS0x4cnZIZ0FOYzJWU1c2L3JPaVVCQjdiV0JkcWcyQUNVRWZwN0V3UGs2S1BsdGNiNTJtdFhCU2xiQ3pRWWw4UQpmNmVGRFIrbnRjeXNGbU1FMFI3M1lNSHJwR0dGdlduSDVaTmEyVEJYdHpwN2tNNkVPREE5a2R4WkI1dz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
server: https://192.168.11.170:16443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: { }
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4ekNDQWR1Z0F3SUJBZ0lKQU9SWThQZlhadWQyTUEwR0NTcUdTSWIzRFFFQkN3VUFNQlV4RXpBUkJnTlYKQkFNVENtdDFZbVZ5Ym1WMFpYTXdIaGNOTWpJd01URTRNRFl6TmpRMFdoY05Nekl3TVRFMk1EWXpOalEwV2pBMApNUmN3RlFZRFZRUUtEQTV6ZVhOMFpXMDZiV0Z6ZEdWeWN6RVpNQmNHQTFVRUF3d1FhM1ZpWlhKdVpYUmxjeTFoClpHMXBiakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFPNTZ0ZG51M24rWUsxM3oKZmNlTzNiSmhBL2J0SGpoQXpvRnNObmZjeEY3dlRTZGczSUxySmVNVkFGbG50MHpUL2xacFBlU0ZUN25iL1g1Ygo4RjErSHA2dVR0b0hRVGJHR2VzbEprdkpFMjB3OGJ0Z3VrdlNmTnROOS9NNlFTWWkvTGlHeTZpd2kveGdBVUtKClFtVW1vZmhZSHNKMllFbXJCcExOVFhtenl2a2lUTlJZVC9iNlJJRzNiT3lIVm1Lc1cwQkNQNVZTTFJsLzErZlMKM0dCUUZ2UTNXdTdmVWlzMW9DSXhsc1k5V2VJUmpGOWJDbWtKNnZsT3BWbGlsTlA0cEtSSnl4aXNBNzExNENNWAprRGJvRFBXb2lxMktubzYveXI2L0xwMktsVVVSa1JhQklodEl5eXV2TldPbjhiTW90SUpCNWNOems4UkxYTm5TCklPZEtMVDhDQXdFQUFhTW5NQ1V3RGdZRFZSMFBBUUgvQkFRREFnV2dNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUYKQndNQ01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ1lwVk9NemlGRUFta1A4S3B2ZWttR3laVGV3dzQreVhyUwo3TEpoWTdTR2pGY210ZldMSW9PWEhmWmZlZWNsN3M5Snh1SytPZlhqU0d0UU9jWXk0WHo5OVFWY2FRandJMEg5Cnc3aWJiYUw3M093RGZrRDMrdlNhME9ZRWZKSFlsNXErQXBnQVpLVWRWazMvZHpJSmhRR0V6L0UxcjdYTlNabDUKL1hOT3pwbzl0VHV2dDAxRlllV0RMN01DeWZGRHFTelpQdnNyWW81bDFiTE5yeEZHb1dvSTdUMlJzR205VXJyYwoyTy84R2hMYTkwZ2tLeE9JTEpYdlJCY2RrOUN4N01ROGFGVHBuSmtPMXJzVzUxMTFoTG5hNm9WRHhISlVrbjRkCmNhODFDV3R1Yk44dkpSYlFwVmkySTJ5K3ljZ3lrNTMzR21GQXNVS3dkdm5rVjNqTVJVbFYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcGdJQkFBS0NBUUVBN25xMTJlN2VmNWdyWGZOOXg0N2RzbUVEOXUwZU9FRE9nV3cyZDl6RVh1OU5KMkRjCmd1c2w0eFVBV1dlM1ROUCtWbWs5NUlWUHVkdjlmbHZ3WFg0ZW5xNU8yZ2RCTnNZWjZ5VW1TOGtUYlREeHUyQzYKUzlKODIwMzM4enBCSmlMOHVJYkxxTENML0dBQlFvbENaU2FoK0ZnZXduWmdTYXNHa3MxTmViUEsrU0pNMUZoUAo5dnBFZ2JkczdJZFdZcXhiUUVJL2xWSXRHWC9YNTlMY1lGQVc5RGRhN3Q5U0t6V2dJakdXeGoxWjRoR01YMXNLCmFRbnErVTZsV1dLVTAvaWtwRW5MR0t3RHZYWGdJeGVRTnVnTTlhaUtyWXFlanIvS3ZyOHVuWXFWUlJHUkZvRWkKRzBqTEs2ODFZNmZ4c3lpMGdrSGx3M09UeEV0YzJkSWc1MG90UHdJREFRQUJBb0lCQVFDdTE5YldGbFNZdGNjdAoxYVJsRi9DZ3BKSlVpcHA2WWNGRmtFSUs5UmdnQmxESnl6RkE1d2hiQ2YyOGp0Y01BKzFZQzBidWNYTDNjRHZWClZiRFB5dlRHSUVQOWhBNGpDM0RiUHR4cCtkMDlWQUlYQUI3MkVqZXFUZXE1TC8rdDV6N2tSeWV2NE9oeE95NFIKU3pNYm1BeHVXS1VNcTkrQ2cxcUpiTzRkaVYwSjg5cUtidExsclFCeDFxcHNnUjNES1VhVGVNKzVpeFYyQ1Y1bApSNDV4aU43NWRrSkpaZlY2UUV5K3V2UVd0VHk4NUN3R1U2T2hjOXA4d2s0MmFrQS9qM05FTUZiTjdDaDFKbi9RCjRhNUJpMituRUE4dGVvV2FRSzdoeU5CRENWbTFsamFjaFFveGRSNGhCWVUxdkhTbkt4a0c4bDA1K1BpRTZmZFkKaUtyemhGR0JBb0dCQVBwOStKTExzZXJ6dFQ4a2VLU2FSMXBMOHB5MTQ3cmdjdEVhckxJL2ZqY1VMU3c3OUk3UAovWWhIWnhmdm9TZEZ2QTZwNy81eHFCRitaNTM5L1NKNDlLeWFOdGNJbW01UTZKSW9aRGgzWmVVS3lMKzA1YTdRCkNqMU1wZ2hKMlZDT2VPamNxd0NVQkFhcjNWSjd0cXRxRVFCQk9jMnlWU3dzbU5wclMyYmU1S3RCQW9HQkFQTzUKSG9ZVTBMK2tzdzJKUVM5ODF1ZWtrbDMzR1ZWQ2dPUFdGWThhR3VGRGt3Sm84WGk2TmhtKzh2TjlNaGg3WkYzeQpTU3E1U2RJd01pR0IvKzVJaWp1V25DbWszY2RPdGU0VFBsZHFvdjc3Q1FUUmxPNWJCekR0L1VqYVBBam5GS0FpClg4K0V6NUVXOXFSclN2ZXplZHFDRVRBVDhRWThqNk1WY0VCRW96aC9Bb0dCQUphcVRHZ25RdVdhSHF0VENZbWcKRGtqZW81Zmt3NHcwMG5xNWU2UmZFbENZdnk3N0JQY2RYVmFwOC9WdXVkVEFXZ1BMN1VGekpXOFlROFRBNzQvYgpodmVHYm5QYWhlRFNvNEM5OE1JUjl1VFVIcmxJV2xwU1ljWkxJeGFiTEs0S2MrbEVTVXE0dk04eWNwWFpPWjlTCjFkVDhab00xdjRzcGErcjhYRWNNekNmQkFvR0JBSXVuaXI4SDFHbk1CVEYvY1pPMWRDczkyUVR3MzFwRWhqaUgKWnNrZUMwTURCb3o5OTBmWFk4S3k4T0htM2pxN0VkTG5UMWVrM3BFTFB0NkdjRkZvelpUQmczQTFZVU9nYlkwagpCN2p0aU1LVXRDRkh1cEF1SnR1NXMwWDRqeWdHeVlITTBKdkhuV3lrL09WUCthQWYvblhmeTl1QndiMXlIRmcxCm82R2Y4dXNmQW9HQkFKeGlQcGdDODJPckoxazE3V3dyOFI2ZXpxR2VYb0JPRzFlOEN6ZG1UbWFrN3prWDJJelEKSTVjT3dGaTlnREhTbUVMa0dYZnRHZ01EcXF1VHVLdS9OdW9DQS94Z2FrdTQvVHplNktqbzRjc0NDTmFza3VrRQozYnhwSnU5cElYRU5tMXVuNXBZRy90QTF0V1Rtc3dnRjY1anc2RFpTQUFUTFZMSXg3RVRDR0RlOQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=

View File

@@ -5,7 +5,6 @@ go 1.22.1
require (
github.com/docker/docker v20.10.17+incompatible
github.com/docker/go-units v0.4.0
github.com/go-playground/validator/v10 v10.19.0
github.com/klauspost/pgzip v1.2.6
github.com/minio/minio-go v6.0.14+incompatible
github.com/mittwald/goharbor-client/v5 v5.5.3
@@ -15,10 +14,13 @@ require (
k8s.io/apimachinery v0.29.1
k8s.io/client-go v0.29.1
wdd.io/agent-common v0.0.0
wdd.io/agent-deploy v0.0.0
)
replace wdd.io/agent-common => ../agent-common
replace wdd.io/agent-deploy => ../agent-deploy
require (
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
@@ -43,6 +45,7 @@ require (
github.com/go-openapi/validate v0.22.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.21.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/goharbor/harbor/src v0.0.0-20230220075213-6015b3efa7d0 // indirect
github.com/golang/protobuf v1.5.3 // indirect

View File

@@ -77,8 +77,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.19.0 h1:ol+5Fu+cSq9JD7SoSqe04GMI92cbn0+wvQ3bZ8b/AU4=
github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/go-playground/validator/v10 v10.21.0 h1:4fZA11ovvtkdgaeev9RGWPgc1uj3H8W+rNYyH/ySBb0=
github.com/go-playground/validator/v10 v10.21.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=

View File

@@ -9,8 +9,10 @@ import (
"io"
"io/fs"
"os"
"regexp"
"strconv"
"strings"
"wdd.io/agent-operator/config"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
@@ -544,6 +546,31 @@ func FrontendBackendSrsImageMapFromCmiiImageMap(cmiiImageVersionMap map[string]s
return frontendImageVersionMap, backendImageVersionMap, srsImageVersionMap
}
// GenerateCmiiTagVersionImageMap 生成特定版本的ImageTagMap
func GenerateCmiiTagVersionImageMap(specificTag string) (backendMap, frontendMap, srsMap map[string]string) {
matched, _ := regexp.MatchString(`^\d+\.\d+\.\d+$`, specificTag)
if !matched {
log.ErrorF("srs tag is not match ! %s", specificTag)
}
backendMap = make(map[string]string, len(config.CmiiBackendAppMap))
frontendMap = make(map[string]string, len(config.CmiiFrontendAppMap))
srsMap = make(map[string]string, len(config.CmiiSrsAppMap))
for imageName, _ := range config.CmiiBackendAppMap {
backendMap[imageName] = specificTag
}
for imageName, _ := range config.CmiiFrontendAppMap {
frontendMap[imageName] = specificTag
}
for imageName, imageTag := range config.CmiiSrsAppMap {
srsMap[imageName] = imageTag
}
return backendMap, frontendMap, srsMap
}
func loginToDockerHub(HarborFullHost string) {
if HarborFullHost == "" {
@@ -568,13 +595,13 @@ func WriteDependencyImageToFile() {
middleFile := imageFilePrefix + "middle-image.txt"
_ = os.Remove(middleFile)
for _, image := range MiddlewareAmd64 {
for _, image := range config.MiddlewareAmd64 {
utils.AppendContentToFile(image+"\n", middleFile)
}
rkeFile := imageFilePrefix + "rke-image.txt"
_ = os.Remove(rkeFile)
for _, image := range Rancher1204Amd64 {
for _, image := range config.Rancher1204Amd64 {
utils.AppendContentToFile(image+"\n", rkeFile)
}
}

View File

@@ -8,6 +8,7 @@ import (
"wdd.io/agent-common/assert"
"wdd.io/agent-common/image"
"wdd.io/agent-common/utils"
"wdd.io/agent-operator/config"
"wdd.io/agent-operator/real_project/zjjt"
)
@@ -128,7 +129,7 @@ func TestImageFullNameToGzipFileName(t *testing.T) {
"busybox",
}
test = append(test, MiddlewareAmd64...)
test = append(test, config.MiddlewareAmd64...)
for _, s := range test {
gzipFileName := image.ImageFullNameToGzipFileName(s)

View File

@@ -94,7 +94,7 @@ func main() {
//
//BuildDefaultK8sOperator()
//
//BackupAllDeploymentFromEnv(mode)
//BackupAllDeploymentFromEnvToFile(mode)
//解析命令行参数
var mode string

View File

@@ -0,0 +1,38 @@
package mysql
import (
"log"
"os"
"os/exec"
)
var AllCmiiTableList = []string{}
func main() {
cmd := exec.Command("/root/wdd/mysql/bin/mysqldump",
"-uroot",
"-pQzfXQhd3bQ",
"-h172.28.0.251",
"-P33306",
"-t",
"--set-gtid-purged=OFF",
"cmii_nacos_config",
"config_info",
"his_config_info",
"roles",
"users",
)
outputFile, err := os.Create("cmii_nacos_config.sql")
if err != nil {
log.Fatalf("Failed to create output file: %v", err)
}
defer outputFile.Close()
cmd.Stdout = outputFile
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Fatalf("Command execution failed: %v", err)
}
}

View File

@@ -0,0 +1,43 @@
#!/bin/bash
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_airspace airport >uav_airspace.sql
sed -i '1s/^/use uav_airspace;\n/' uav_airspace.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_notice mail_provider_cfg msg_tpl msg_tpl_lang open_app >uav_notice.sql
sed -i '1s/^/use uav_notice;\n/' uav_notice.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_process uav_proc_cfg >uav_process.sql
sed -i '1s/^/use uav_process;\n/' uav_process.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF admin_user sys_weak_password sys_platform sys_platform_attr sys_resource sys_resource_api sys_resource_attr sys_action_api xxl_job_group xxl_job_info xxl_job_lock sys_resource_group sys_resource_group_template sys_tenant_config sys_group_resource_mapping >admin_user.sql
sed -i '1s/^/use admin_user;\n/' admin_user.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_user sys_weak_password sys_resource sys_resource_api sys_resource_attr sys_action_api sys_group_resource_mapping sys_resource_group sys_resource_group_template >uav_user.sql
sed -i '1s/^/use uav_user;\n/' uav_user.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_oauth oauth_client_details >uav_oauth.sql
sed -i '1s/^/use uav_oauth;\n/' uav_oauth.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_mission calendar num >uav_mission.sql
sed -i '1s/^/use uav_mission;\n/' uav_mission.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF admin_data sys_area_config sys_area_pinyin sys_dictionary sys_dictionary_attr sys_dictionary_type sys_language uav_dev_action_match uav_dev_type_match uav_hangar_model uav_load_cam_model uav_load_spk_model uav_plane_model >admin_data.sql
sed -i '1s/^/use admin_data;\n/' admin_data.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF cmii_material_warehouse mw_scr >cmii_material_warehouse.sql
sed -i '1s/^/use cmii_material_warehouse;\n/' cmii_material_warehouse.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_brain scene_category_config scene_type_config >uav_brain.sql
sed -i '1s/^/use uav_brain;\n/' uav_brain.sql
#/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF nacos_config config_info his_config_info roles users > nacos_config.sql
#sed -i '1s/^/use nacos_config;\n/' nacos_config.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF cmii_live_srs_op live_hls_sync_hq live_hub >cmii_live_srs_op.sql
sed -i '1s/^/use cmii_live_srs_op;\n/' cmii_live_srs_op.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF suav_supervision airport sys_area_config sys_area_pinyin >suav_supervision.sql
sed -i '1s/^/use suav_supervision;\n/' suav_supervision.sql
/root/wdd/mysql/bin/mysqldump --login-path=root13306 -t --set-gtid-purged=OFF uav_gis emergence >uav_gis.sql
sed -i '1s/^/use uav_gis;\n/' uav_gis.sql