[ Agent ] [ CMII ] - 完成工具类的代码

This commit is contained in:
zeaslity
2024-01-09 16:42:27 +08:00
parent 36b8e36392
commit 22faf15665
18 changed files with 1307 additions and 13 deletions

View File

@@ -353,7 +353,7 @@ func (op *AgentOsOperator) deployTestNFS(funcArgs []string) (bool, []string) {
}
// 下载模板文件
k8sNFSYamlFile := "/root/wdd/install/k8s-nfs-test.yaml"
k8sNFSYamlFile := "/root/wdd/install/k8s-nfs-test.json"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+nfsTemplateFile, k8sNFSYamlFile)
if !ok {
return false, resultLog

View File

@@ -1244,7 +1244,7 @@ func (op *AgentOsOperator) installNFSServerOfflineExec() (bool, []string) {
}
}
// check for version
// check for the version
executor, i := HardCodeCommandExecutor("grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '\"' | sed 's/ /-/g'")
if !executor {
return false, append(i, "[installNFSServerOfflineExec]- get offline package name suffix error !")

View File

@@ -503,3 +503,17 @@ func BasicAppendNullToFile(targetFile string) bool {
return true
}
func BasicWordSpaceCompletion(source string, totalLength int) string {
sourceLength := len(source)
if sourceLength >= totalLength {
return source
}
for i := 0; i < totalLength-sourceLength; i++ {
source += " "
}
return source
}

View File

@@ -25,11 +25,12 @@ const (
// 创建协程池子
var pool, _ = ants.NewPool(
100,
20,
ants.WithNonblocking(false),
ants.WithLogger(logger2.Log),
ants.WithMaxBlockingTasks(30),
ants.WithMaxBlockingTasks(10),
ants.WithDisablePurge(true),
ants.WithPreAlloc(true),
)
var G = NewGlobal(

View File

@@ -0,0 +1,115 @@
package k8s_exec
var CmiiFrontendAppName = []string{
"cmii-uav-platform",
"cmii-uav-platform-oms",
"cmii-uav-platform-mws",
"cmii-uav-platform-cms-portal",
"cmii-uav-platform-armypeople",
"cmii-uav-platform-share",
"cmii-suav-platform-supervisionh5",
"cmii-suav-platform-supervision",
"cmii-uav-platform-ai-brain",
"cmii-uav-platform-base",
"cmii-uav-platform-detection",
"cmii-uav-platform-emergency-rescue",
"cmii-uav-platform-logistics",
"cmii-uav-platform-media",
"cmii-uav-platform-open",
"cmii-uav-platform-security",
"cmii-uav-platform-securityh5",
"cmii-uav-platform-seniclive",
"cmii-uav-platform-threedsimulation",
"cmii-uav-platform-visualization",
}
var CmiiBackendAppName = []string{
"cmii-uav-gateway",
"cmii-uav-oauth",
"cmii-uav-user",
"cmii-uav-material-warehouse",
"cmii-uav-device",
"cmii-uav-mission",
"cmii-uav-mqtthandler",
"cmii-uav-surveillance",
"cmii-uav-waypoint",
"cmii-uav-airspace",
"cmii-uav-industrial-portfolio",
"cmii-uav-integration",
"cmii-admin-data",
"cmii-admin-gateway",
"cmii-admin-user",
"cmii-uav-cloud-live",
"cmii-uav-emergency",
"cmii-uav-cms",
"cmii-open-gateway",
"cmii-uav-cloud-live",
"cmii-uav-alarm",
"cmii-uav-brain",
"cmii-app-release",
"cmii-uav-notice",
"cmii-suav-supervision",
"cmii-uav-autowaypoint",
"cmii-uav-data-post-process",
"cmii-uav-depotautoreturn",
"cmii-uav-developer",
"cmii-uav-kpi-monitor",
"cmii-uav-logger",
"cmii-uav-process",
"cmii-uav-threedsimulation",
"cmii-uav-tower",
}
var CmiiStreamAppName = []string{
"cmii-uav-cloud-live",
"helm-live-op-v2",
"helm-live-rtsp-op",
"helm-live-rtsp-zlm",
"helm-vms-deploy",
}
var CmiiGISAppName = []string{
"cmii-uav-gis-server",
"cmii-uav-grid-datasource",
"cmii-uav-grid-engine",
"cmii-uav-grid-manage",
}
var CmiiDevK8sConfig = `apiVersion: v1
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=`
var CmiiCoreK8sConfig = `apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJd01URXhOakUwTURJd09Wb1hEVE13TVRFeE5ERTBNREl3T1Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTEZhCjV4N0M2MisrZjA5UXUzVWR6UUFXRDN4NDRkTVV6bkxvTjc5Y0RTbzduYjhTd0JmMzk2aFEwaEdiT2lDUXhLc1IKczJhcXl2N0dLUXAvdTVNbUU0bXF1YWEybE1yUkc1UWFJOWhHNlp5SDdxYkFlU0dZSVplZGVoMWF6bzVnblBWRwoyck5aVWR3WU5tUXYvemF6V3dSbi9QQUNuNEt4MkxjYVVJUm16YkZHRnJ2VXl3UDl4UTc2MlNvRWZoMENycEpvCmltTHR3ZGFOU3dweGRCTFpkcXlRY05xRVV0dUI2VXVVM0Z3Y2FBckJpNTZ1OTFJbHVEWS9Dd1UyeDJCSHR1WkwKR2RuQUM0c1VhWm9oZzRFZ0U3UEp6RnFXTUtyaGRmekRzc05EK1VhV2sxRmhvRzViVWZiQ051Zy9KUnNlRzJBZQpodjAvU1ZNcSs5WWYyR0dheC9NQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGdVYxK3Z4UGVrUm82T2U2YTI4NmFHQjduWG0KMUlGVllwSWUxeTVoZy9aTlhKN1RndXFPb2Zjc3JnZ1h2MmdaQkdFN0pheTM0SkhuRFB3Y3ZCMzhHQUxtZmZWeAo2THJVN2ZtSWlpajRIc1NyaHRrMWQzcmhjdFkwMEw2dGJMMzVvTWJnUGwzSERUbGh0M0wxM0gvUVFScXR3TXFOCnBHeWk3VWprbFNpNWVsRWJrbnlUUy9OWTA1Y1JyMTU2N0p4N3F3QlpmUlZaZURUOHdidHpMZ05UWlFZRzVoM2EKQmp6dnlINFoyR2YrNnM4aXZlbGFUMjdPbGpOUTJvUUdyenhHV0ErZGJKSzNIdDVRRkVCeDdVaEsrNWtwYXViNwpWZTB1ekdGK1ZDb2ZFV2FtNk9CUFAycE51SW85d0Jsa24vbU9FUW5SU1FNMW15dmlIWHBaMnVKd1ozbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
server: https://vip.ecs.io:6444
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: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4ekNDQWR1Z0F3SUJBZ0lKQU5ZM0hyTXZseUZjTUEwR0NTcUdTSWIzRFFFQkN3VUFNQlV4RXpBUkJnTlYKQkFNVENtdDFZbVZ5Ym1WMFpYTXdIaGNOTWpFd01URTFNRGd6T0RNNFdoY05NekV3TVRFek1EZ3pPRE00V2pBMApNUmN3RlFZRFZRUUtEQTV6ZVhOMFpXMDZiV0Z6ZEdWeWN6RVpNQmNHQTFVRUF3d1FhM1ZpWlhKdVpYUmxjeTFoClpHMXBiakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFMS21TZDJIeVdYN2VTdnYKdS8yRnBZQWM5SWRBcFlQbmtESk5wR0Z1SEVlOUJWVXMyL1o3L3BQWGY3NTljVFdZUkV2V0dybDBNS1dTajhycAowQ2JTN3dvdkg2NnpTcWNKRDUzMW11OTgvaE0zenZzaTVqalIxOU5yTEFIL0QzbEZ6d2VnVHpNUWFvenNPc2VOCm0vNmI5cGRLNUcwYkNPRkJlZTRzeW1VdnVjT1NKblg5YkpZUnhNbVI5WHl3REowcnpTSHJrVE9ocVErUXYzdTAKMGZvVk9NSm9BdWkvR2JEV3ZpTEQrRmlDMnFJY0FYRGhNaGd2eVJwTFBPNFlZc0tCc2xjUVJwbkpjei9heFRBUQovM0c3T1pYWjJkNWVDQmRDY0pqL2orNlkyNVJsVXNDNDZzZWR1cTR0SGMrbEJ3UG5FSDYvTG53SUE0VHVaRXBpCkI3Q3RyU0VDQXdFQUFhTW5NQ1V3RGdZRFZSMFBBUUgvQkFRREFnV2dNQk1HQTFVZEpRUU1NQW9HQ0NzR0FRVUYKQndNQ01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQ0llSU0wSllLVjNiNUhISEdzMmV0eEt0VnQwaGNBTzNmcgpCcU5Ba3lPNkpvWkU2dnh3Nm5lQXNhc3V5RXh1NDFiMmlwYTJFdFlsTUNWbHE0anhjQWptMnU4b0xWb3NoWWIxClU4MkRqMkJuV2Z6TnhKV3dqSnQ5UzFhUXZmOXFxaDhueGJTeUVhNmxMZmEvTEpFQURzMDZNR05tQUJxbk5ZUVEKcEh1UnNXQlhwT3lSaWhtMHdlK21UNGwxYklMZ0Zpa2ZSaUw1WkRnWVlTNG9BRVpGY1NBbldKRFhSVTI0S0JIRQppYXk4SlNIcks1Ym12TWVpR1ZkL054WlhmSFdCcUcvZUI1SDRuaFhtVzhWbEdjQnhvdDBvckVta2FsblFpYnEwCnBWNUlwcXFBU3JjcjZnVUxrRmtvdWo1aG9rNWdIdWpqakFkenVSa3hyYTJiNERFa05jTTQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBc3FaSjNZZkpaZnQ1SysrNy9ZV2xnQnowaDBDbGcrZVFNazJrWVc0Y1I3MEZWU3piCjluditrOWQvdm4xeE5aaEVTOVlhdVhRd3BaS1B5dW5RSnRMdkNpOGZyck5LcHdrUG5mV2E3M3orRXpmTyt5TG0KT05IWDAyc3NBZjhQZVVYUEI2QlBNeEJxak93Nng0MmIvcHYybDBya2JSc0k0VUY1N2l6S1pTKzV3NUltZGYxcwpsaEhFeVpIMWZMQU1uU3ZOSWV1Uk02R3BENUMvZTdUUitoVTR3bWdDNkw4WnNOYStJc1A0V0lMYW9od0JjT0V5CkdDL0pHa3M4N2hoaXdvR3lWeEJHbWNselA5ckZNQkQvY2JzNWxkblozbDRJRjBKd21QK1A3cGpibEdWU3dManEKeDUyNnJpMGR6NlVIQStjUWZyOHVmQWdEaE81a1NtSUhzSzJ0SVFJREFRQUJBb0lCQUdCam1EY09ySHQ1MDBjQgpja3kzYnpSUWF4OE9vajhwRVlRU29ENXhTcERxUzVaSlBlVWZ3WnZEQ2dtZFpSZWxzRE82c1hDZVlDRDFrdC9JCmg2WnE2TTUxM29KRCttTmxZQ2U1L0g1NjBodE1ZVURlODVoMG9CNVNGTXgrOGJwZEQvYnRaODRGYlhmYmZWdHQKN0Z6VGlaalhyNmV1am52NjkrNnAvQW5jVmo1T0ZRNTZOeHZjbGpxWitlNVM4TDhtZzFUWkpPS3ZRck4vRkRBSAplSHVNeldEcTlLVURXaU9LN0d3aDFGWHdoVTV2T3BwMTRtZjVCVmp4Y3Qvek9DcHdLd2NYaE5NUVRTTVhYUHFsCllBTjBOKzMzb1pkenRxUEtJWHVjaGp3aFhQOWJCZ2REc0M3MTgzNDlWZFRMblZBN2doQlRCcUJRVFVlWitrVnMKU2xwcENvRUNnWUVBNlRteEJyWXMybDExWmtNUDhyenRtcXhiRlNaU0t0bnh1Rk5LNTlRU3ZPQkVFMmlGUCtxMQpwdHY2elhQWkVaVFBoeUowWU83VFcxQk5mZjJUaVdpNzA1TDFlUTVIVlU3QjVMQkthSkV6RFdPYmt6NWxOWk5GCmxWdnM0UGg3SzJvdjBuNjJkMnZlclpZQzBCOWlpUGlFbHFLaFRialF4QzZJYzM3YWtVQytmb01DZ1lFQXhCaEgKUXJ0ZzlrMHVlejJ6ek5SQ1dXb0Jsa0xwdjhEWU1pUFB5aWZUS0dHZDN5c0hIc05RQVZVTDR1YngzdFkrUjdzeApUS2pRb2dSd2tobTJmQUMvN0VRenZNbXMrYWtEai9wUWVXUDU5VVlOK1ptUUFPbDBtQUx2NnovM0RGMnl6RHI5Ckx4eDBieTJXMERpMGs1N0lER3lIV3ZKUHROcmRBZkY1NlV5VVZJc0NnWUJyNnNNTVBQMnlLUzZxbS90a01hR3MKUVhaLzZkUjVlWkdNM2hXNkFmcU5wU1E2NnRGRml5QjB6ak5XSC9YZ1djQlJZbE1CaTJFSFRyZ2N4Vm9nYWZNSAphbWZsbFFMUzZYZDBqMUpPNG1rQ0dBWWo4dW80Q1NaWWYwbXpxNmFxcHg3cndyQkJ3QXN3dlVvZDdYZlZzMUQrCnRzLzJ1NzcyR0NZUmN6QkZwL1M5YXdLQmdGdXd6b0ZSaElFbWpibHFuSXdHSkJBVEZUTGhqdEx1cFNpc3ZoaFUKanRPdThWYk1rOE82cDhvM3Joc215YW5jbTdxR3VRS1RYUnFrNE00djM3Z1QwYW4wS2d6NGNEMDgza0dRVmRpcworcy9KTmZlajZrWEM0NVhBcWRaaVRtNGwwZGpWTEZXL0JHS0grcURhSXZWenBTN0tBSEJ5SlByMzY2ZGc5aFEwCmpwY0pBb0dBRE50eWMrSlVTSmVhQUd5ZlluUEFkRnBSakZQNUZ6ZGdod1JLNVR2WVI0c2Qwd1lyTXVVNnRPSVQKMHpGMUEwTlRSbmI0SStpUklzU3plZ0xzSHg1OXJKNnY2d3Q3NlIwUEFjWlB6cDVkemxTbXYybGRPNEE5MVRLegp2dEIxRGZHUm5pQ1dpOURjRkJpaVRVZlZUbXRtU3pCRGdsREVQUE51Q0txaGkvamRvQVU9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==`

View File

@@ -0,0 +1,135 @@
package k8s_exec
import (
"agent-go/executor"
"agent-go/utils"
"strings"
"time"
)
var CmiiOperator = CmiiK8sOperator{}
// FindDeploymentRestartCountGreaterThanN 重启次数大于N的所有Deployment
func FindDeploymentRestartCountGreaterThanN(cmiiEnv string, restartCount int32) []CmiiDeploymentInterface {
//podInterface := CmiiPodInterface{}
// get all pods
podAll := CmiiOperator.PodAll(cmiiEnv)
// restart map
restartMap := make(map[string]int32, len(podAll))
// restart count
for _, pod := range podAll {
for _, containerStatus := range pod.Status.ContainerStatuses {
if containerStatus.RestartCount > restartCount {
restart, exists := restartMap[containerStatus.Name]
if exists {
restartMap[containerStatus.Name] = utils.MaxInt32(containerStatus.RestartCount, restart)
} else {
restartMap[containerStatus.Name] = containerStatus.RestartCount
}
}
}
}
result := make([]CmiiDeploymentInterface, len(restartMap))
cmiiDeploymentInterface := CmiiDeploymentInterface{}
index := 0
//log.DebugF("[FindDeploymentRestartCountGreaterThanN] - restart map is => %v", restartMap)
// find deployment convert to interface
for key, value := range restartMap {
deployment := CmiiOperator.DeploymentExist(cmiiEnv, key)
if deployment != nil {
// deployment exists
log.DebugF("[FindDeploymentRestartCountGreaterThanN] - restart [%s] [%s] is [%d]", cmiiEnv, key, value)
convert := cmiiDeploymentInterface.Convert(*deployment)
result[index] = convert
index++
}
}
return result[:index]
}
func RestartDeploymentFromList(deploymentList []CmiiDeploymentInterface) bool {
result := true
for _, deployment := range deploymentList {
result = CmiiOperator.DeploymentScale(deployment.Namespace, deployment.Name, 0)
if !result {
return result
}
time.Sleep(time.Second)
result = CmiiOperator.DeploymentScale(deployment.Namespace, deployment.Name, deployment.Replicas)
if !result {
return result
}
}
return result
}
func RestartCmiiBackendDeployment(cmiiEnv string) {
cmiiDeploymentInterfaces := CmiiOperator.DeploymentAllInterface(cmiiEnv)
for _, deploymentInterface := range cmiiDeploymentInterfaces {
if strings.Contains(deploymentInterface.Name, "platform") {
}
}
}
// GetCmiiAllDeploymentFromDemo 从DEMO提取全部的CMII的应用
func GetCmiiAllDeploymentFromDemo() {
allInterface := CmiiOperator.DeploymentAllInterface("demo")
filePath := "C:\\Users\\wddsh\\Documents\\IdeaProjects\\ProjectOctopus\\agent-go\\k8s_exec\\all-cmii-image.txt"
firstCol := 0
secondCol := 0
thirdCol := 0
for _, deploymentInterface := range allInterface {
if strings.Contains(deploymentInterface.Name, "proxy") {
continue
}
firstCol = utils.MaxInt(len(deploymentInterface.Name), firstCol)
for name, image := range deploymentInterface.ContainerImageMap {
secondCol = utils.MaxInt(len(name), secondCol)
thirdCol = utils.MaxInt(len(image), thirdCol)
}
}
firstCol += 4
secondCol += 4
secondCol += firstCol
thirdCol += 4
thirdCol += secondCol
for _, deploymentInterface := range allInterface {
if strings.Contains(deploymentInterface.Name, "proxy") {
continue
}
content := executor.BasicWordSpaceCompletion(deploymentInterface.Name, firstCol)
for name, image := range deploymentInterface.ContainerImageMap {
content = executor.BasicWordSpaceCompletion(content+name, secondCol)
content = executor.BasicWordSpaceCompletion(content+image, thirdCol)
content += "\n"
if !executor.BasicAppendContentToFile(content, filePath) {
log.ErrorF("[GetCmiiAllDeploymentFromDemo] - write to file %s error with contend %s", filePath, content)
}
}
}
}

View File

@@ -0,0 +1,23 @@
package k8s_exec
import (
"agent-go/utils"
"testing"
)
func TestFindDeploymentRestartCountGreaterThanN(t *testing.T) {
deploymentRestartCountGreaterThanN := FindDeploymentRestartCountGreaterThanN("devflight", 10)
for _, deploymentInterface := range deploymentRestartCountGreaterThanN {
println()
utils.BeautifulPrint(deploymentInterface)
println()
}
}
func TestGetCmiiAllDeploymentFromDemo(t *testing.T) {
GetCmiiAllDeploymentFromDemo()
}

View File

@@ -0,0 +1,76 @@
package k8s_exec
import (
v1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
)
type CmiiInterfaceConvert interface {
}
type CmiiPodInterface struct {
Name string
Namespace string
//ReplicaSetName string
ContainerImageMap map[string]string
PodIP string
HostIP string
NodeName string
RestartCountMap map[string]int32
}
type CmiiDeploymentInterface struct {
Name string
Namespace string
AvailableReplicas int32
Replicas int32
ContainerImageMap map[string]string
StatusOk bool
}
func (deploy CmiiDeploymentInterface) Convert(deployment v1.Deployment) CmiiDeploymentInterface {
containers := deployment.Spec.Template.Spec.Containers
containerImageMap := make(map[string]string, len(containers))
for _, container := range containers {
containerImageMap[container.Name] = container.Image
}
deploy.Name = deployment.Name
deploy.Namespace = deployment.Namespace
deploy.AvailableReplicas = deployment.Status.AvailableReplicas
deploy.Replicas = *deployment.Spec.Replicas
deploy.ContainerImageMap = containerImageMap
deploy.StatusOk = deployment.Status.AvailableReplicas == *deployment.Spec.Replicas
return deploy
}
func (pod CmiiPodInterface) Convert(podDetail corev1.Pod) CmiiPodInterface {
containers := podDetail.Spec.Containers
containerImageMap := make(map[string]string, len(containers))
for _, container := range containers {
containerImageMap[container.Name] = container.Image
}
containerStatuses := podDetail.Status.ContainerStatuses
containerStatusMap := make(map[string]int32, len(containerStatuses))
for _, containerStatus := range containerStatuses {
containerStatusMap[containerStatus.Name] = containerStatus.RestartCount
}
pod.Name = podDetail.Name
pod.Namespace = podDetail.Namespace
pod.ContainerImageMap = containerImageMap
pod.RestartCountMap = containerStatusMap
pod.PodIP = podDetail.Status.PodIP
pod.HostIP = podDetail.Status.HostIP
pod.NodeName = podDetail.Spec.NodeName
//if len(podDetail.ObjectMeta.OwnerReferences) > 0 {
// pod.ReplicaSetName = podDetail.ObjectMeta.OwnerReferences[0].Name
//}
return pod
}

View File

@@ -0,0 +1,403 @@
package k8s_exec
import (
"agent-go/g"
"agent-go/logger"
"agent-go/utils"
"context"
"k8s.io/api/apps/v1"
autoscalingv1 "k8s.io/api/autoscaling/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"strings"
"sync"
)
var log = logger.Log
var pool = g.G.P
type CmiiK8sOperator struct {
DevClient *kubernetes.Clientset
CoreClient *kubernetes.Clientset
CurrentNamespace string
CurrentClient *kubernetes.Clientset
}
const (
dev = "uavcloud-dev"
devFlight = "uavcloud-devflight"
devOperation = "uavcloud-devoperation"
validation = "uavcloud-feature"
integration = "uavcloud-test"
demo = "uavcloud-demo"
workerThread = 4
)
func (op *CmiiK8sOperator) checkAndBuildCmiiK8sOperator() {
if op.DevClient == nil {
log.InfoF("[client] - build devFlight k8s operator client !")
devConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(CmiiDevK8sConfig))
if err != nil {
msg := "[client] - build devFlight k8s operator error !"
log.Error(msg)
panic(msg)
}
op.DevClient, err = kubernetes.NewForConfig(devConfig)
if err != nil {
panic(err.Error())
}
}
if op.CoreClient == nil {
log.InfoF("[client] - build core k8s operator client !")
coreConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(CmiiCoreK8sConfig))
if err != nil {
msg := "[client] - build devFlight k8s operator error !"
log.Error(msg)
panic(msg)
}
op.CoreClient, err = kubernetes.NewForConfig(coreConfig)
if err != nil {
panic(err.Error())
}
}
}
func (op *CmiiK8sOperator) changeOperatorEnv(cmiiEnv string) {
// ok
op.checkAndBuildCmiiK8sOperator()
if strings.Contains(cmiiEnv, "dev") {
op.CurrentClient = op.DevClient
} else {
op.CurrentClient = op.CoreClient
}
if strings.Contains(cmiiEnv, "dev") {
if strings.Contains(cmiiEnv, "f") {
op.CurrentNamespace = devFlight
} else if strings.Contains(cmiiEnv, "o") {
op.CurrentNamespace = devOperation
} else {
op.CurrentNamespace = dev
}
}
if strings.Contains(cmiiEnv, "int") || strings.Contains(cmiiEnv, "test") {
op.CurrentNamespace = integration
}
if strings.Contains(cmiiEnv, "fe") || strings.Contains(cmiiEnv, "val") {
op.CurrentNamespace = validation
}
if strings.Contains(cmiiEnv, "demo") {
op.CurrentNamespace = demo
}
if op.CurrentNamespace == "" {
op.CurrentNamespace = dev
}
log.InfoF("[k8s env] - current env is => %s", op.CurrentNamespace)
}
func (op *CmiiK8sOperator) DeploymentAll(cmiiEnv string) []v1.Deployment {
op.changeOperatorEnv(cmiiEnv)
client := op.CurrentClient
deploymentList, err := client.AppsV1().Deployments(op.CurrentNamespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
log.ErrorF("[DeploymentAll] - list deployment in [%s] [%s] error => %s", cmiiEnv, op.CurrentNamespace, err.Error())
}
deployments := deploymentList.Items
length := len(deployments)
log.InfoF("[DeploymentAll] - deployment in [%s] count is => %d", op.CurrentNamespace, length)
results := make([]v1.Deployment, length)
//var results []v1.Deployment
//ccc := make(chan v1.Deployment, length)
var wg sync.WaitGroup
//var mutex sync.Mutex
worker := workerThread
if length <= worker {
for i, deployment := range deployments {
objectMeta := deployment.ObjectMeta
objectMeta.SetAnnotations(nil)
objectMeta.SetManagedFields(nil)
deployment.ObjectMeta = objectMeta
results[i] = deployment
}
return results
}
pinch := (length + worker - 1) / worker
wg.Add(worker)
for splice := 0; splice < worker; splice++ {
// 计算每个goroutine处理的切片段
start := splice * pinch
end := start + pinch
if end > length {
end = length
}
//log.DebugF("[DeploymentAll] - deployment pinch from [%d - %d]", start, end)
go func(deploymentList []v1.Deployment, start int, results *[]v1.Deployment) {
for index, deployment := range deploymentList {
objectMeta := deployment.ObjectMeta
objectMeta.SetAnnotations(nil)
objectMeta.SetManagedFields(nil)
deployment.ObjectMeta = objectMeta
//ccc <- deployment
i := *results
i[index+start] = deployment
}
wg.Done()
}(deployments[start:end], start, &results)
}
//go func() {
// wg.Wait()
// close(ccc)
//}()
wg.Wait()
//for deployment := range ccc {
// results = append(results, deployment)
//}
return results
}
func (op *CmiiK8sOperator) DeploymentAllInterface(cmiiEnv string) []CmiiDeploymentInterface {
op.changeOperatorEnv(cmiiEnv)
client := op.CurrentClient
deploymentList, err := client.AppsV1().Deployments(op.CurrentNamespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
log.ErrorF("[DeploymentAllInterface] - list deployment in [%s] [%s] error => %s", cmiiEnv, op.CurrentNamespace, err.Error())
}
deployments := deploymentList.Items
length := len(deployments)
results := make([]CmiiDeploymentInterface, length)
ccc := make(chan CmiiDeploymentInterface, length)
var wg sync.WaitGroup
worker := workerThread
if length <= worker {
for i, deployment := range deployments {
objectMeta := deployment.ObjectMeta
objectMeta.SetAnnotations(nil)
objectMeta.SetManagedFields(nil)
deployment.ObjectMeta = objectMeta
results[i] = CmiiDeploymentInterface{}.Convert(deployment)
}
return results
}
pinch := length / worker
wg.Add(worker)
for splice := 0; splice < worker; splice++ {
go func(deploymentList []v1.Deployment) {
defer wg.Done()
for _, deployment := range deploymentList {
objectMeta := deployment.ObjectMeta
objectMeta.SetAnnotations(nil)
objectMeta.SetManagedFields(nil)
deployment.ObjectMeta = objectMeta
ccc <- CmiiDeploymentInterface{}.Convert(deployment)
}
}(deployments[splice*pinch : utils.MinInt((splice+1)*pinch, length)])
}
go func() {
wg.Wait()
close(ccc)
}()
index := 0
for deployment := range ccc {
results[index] = deployment
index++
}
return results
}
func (op *CmiiK8sOperator) DeploymentFizz(cmiiEnv, appFizz string) (fizzDeployment []v1.Deployment) {
deploymentAll := op.DeploymentAll(cmiiEnv)
if deploymentAll == nil {
log.ErrorF("[DeploymentFizz] - namespace [%s] can not get deployment [%s]", cmiiEnv, appFizz)
return nil
}
for _, deployment := range deploymentAll {
if strings.Contains(deployment.Name, appFizz) {
fizzDeployment = append(fizzDeployment, deployment)
}
}
return fizzDeployment
}
func (op *CmiiK8sOperator) DeploymentExist(cmiiEnv, appName string) (exists *v1.Deployment) {
client := op.CurrentClient
deployment, err := client.AppsV1().Deployments(op.CurrentNamespace).Get(context.TODO(), appName, metav1.GetOptions{})
if err != nil {
log.ErrorF("[DeploymentExist] - deployments [%s] [%s] not exists ! %s", cmiiEnv, appName, err.Error())
return nil
}
return deployment
}
func (op *CmiiK8sOperator) DeploymentScale(cmiiEnv, appFizz string, scaleCount int32) bool {
deploymentFizz := op.DeploymentFizz(cmiiEnv, appFizz)
client := op.CurrentClient
for _, deployment := range deploymentFizz {
log.DebugF("[DeploymentScale] - start to scale [%s] [%s] to %d", deployment.Namespace, deployment.Name, scaleCount)
scale := &autoscalingv1.Scale{
ObjectMeta: metav1.ObjectMeta{
Name: deployment.Name,
Namespace: deployment.Namespace,
},
Spec: autoscalingv1.ScaleSpec{
Replicas: int32(scaleCount),
},
}
updateScale, err := client.AppsV1().Deployments(deployment.Namespace).UpdateScale(
context.TODO(),
deployment.Name,
scale,
metav1.UpdateOptions{},
)
if err != nil {
log.ErrorF("[DeploymentScale] - scale error %s", err.Error())
return false
}
log.InfoF("[DeploymentScale] - scale of [%s] [%s] to %d success !", updateScale.Namespace, updateScale.Name, scaleCount)
}
return true
}
func (op *CmiiK8sOperator) ReplicaSet(cmiiEnv, replicaSetName string) *v1.ReplicaSet {
op.changeOperatorEnv(cmiiEnv)
client := op.CurrentClient
replicaSet, err := client.AppsV1().ReplicaSets(op.CurrentNamespace).Get(context.TODO(), replicaSetName, metav1.GetOptions{})
if err != nil {
return nil
}
return replicaSet
}
func (op *CmiiK8sOperator) PodAll(cmiiEnv string) []corev1.Pod {
op.changeOperatorEnv(cmiiEnv)
client := op.CurrentClient
podList, err := client.CoreV1().Pods(op.CurrentNamespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
log.ErrorF("[PodAll] - list c in [%s] [%s] error => %s", cmiiEnv, op.CurrentNamespace, err.Error())
return nil
}
pods := podList.Items
length := len(pods)
results := make([]corev1.Pod, length)
ccc := make(chan corev1.Pod, length)
var wg sync.WaitGroup
worker := workerThread
if length <= worker {
for i, pod := range pods {
objectMeta := pod.ObjectMeta
objectMeta.SetAnnotations(nil)
objectMeta.SetManagedFields(nil)
pod.ObjectMeta = objectMeta
results[i] = pod
}
return results
}
pinch := length / worker
wg.Add(worker)
for splice := 0; splice < worker; splice++ {
go func(podList []corev1.Pod) {
defer wg.Done()
for _, pod := range podList {
objectMeta := pod.ObjectMeta
objectMeta.SetAnnotations(nil)
objectMeta.SetManagedFields(nil)
pod.ObjectMeta = objectMeta
ccc <- pod
}
}(pods[splice*pinch : utils.MinInt((splice+1)*pinch, length)])
}
go func() {
wg.Wait()
close(ccc)
}()
index := 0
for c := range ccc {
results[index] = c
index++
}
return results
}
func (op *CmiiK8sOperator) PodFizz(cmiiEnv, appFizz string) (fizzPod []corev1.Pod) {
podAll := op.PodAll(cmiiEnv)
if podAll == nil {
log.ErrorF("[DeploymentFizz] - no app find in [%s] !", cmiiEnv)
return nil
}
for _, pod := range podAll {
if strings.Contains(pod.Name, appFizz) {
fizzPod = append(fizzPod, pod)
}
}
return fizzPod
}

View File

@@ -0,0 +1,134 @@
package k8s_exec
import (
"agent-go/utils"
"fmt"
"testing"
"time"
)
func TestCmiiK8sOperator_DeploymentAll(t *testing.T) {
start := time.Now()
deploymentList := CmiiOperator.DeploymentAll("devflight")
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
var nameList []string
count := 1
for _, deployment := range deploymentList {
if deployment.Spec.Replicas != nil {
count++
}
nameList = append(nameList, deployment.Name)
}
t.Logf("deployment list lenght is => %d", count)
t.Logf("deployment name list are => %d", count)
utils.BeautifulPrint(nameList)
//for _, deployment := range deploymentList {
// utils.BeautifulPrint(deployment)
// println()
//}
}
func TestCmiiK8sOperator_DeploymentAllInterface(t *testing.T) {
start := time.Now()
deploymentList := CmiiOperator.DeploymentAllInterface("devflight")
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
t.Logf("deployment list lenght is => %d", len(deploymentList))
for _, deployment := range deploymentList {
utils.BeautifulPrint(deployment)
println()
}
}
func TestCmiiK8sOperator_DeploymentFizz(t *testing.T) {
start := time.Now()
deploymentFizz := CmiiOperator.DeploymentFizz("devflight", "")
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
t.Logf("deployment list lenght is => %d", len(deploymentFizz))
deploymentInterface := CmiiDeploymentInterface{}
for _, pod := range deploymentFizz {
convert := deploymentInterface.Convert(pod)
utils.BeautifulPrint(convert)
}
// elastic search
}
func TestCmiiK8sOperator_DeploymentScale(t *testing.T) {
start := time.Now()
CmiiOperator.DeploymentScale("devflight", "cmii-uav-gis-server", 0)
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
}
func TestCmiiK8sOperator_PodAll(t *testing.T) {
start := time.Now()
podList := CmiiOperator.PodAll("devflight")
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
for _, pod := range podList {
println()
utils.BeautifulPrint(pod)
println()
break
}
}
func TestCmiiK8sOperator_PodFizz(t *testing.T) {
start := time.Now()
podList := CmiiOperator.PodFizz("devflight", "notice")
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
t.Logf("pod list lenght is => %d", len(podList))
for _, pod := range podList {
println()
utils.BeautifulPrint(pod)
println()
break
}
}
func TestCmiiDeploymentInterface_Convert(t *testing.T) {
log.DebugF("dadasdadasd")
}
func TestCmiiK8sOperator_PodFizz2(t *testing.T) {
start := time.Now()
podList := CmiiOperator.PodFizz("devflight", "notice")
elapsed := time.Since(start).Milliseconds()
fmt.Printf("执行耗时: %d ms\n", elapsed)
t.Logf("pod list lenght is => %d", len(podList))
podInterface := CmiiPodInterface{}
for _, pod := range podList {
convert := podInterface.Convert(pod)
println()
utils.BeautifulPrint(&convert)
println()
}
}

View File

@@ -0,0 +1,67 @@
cmii-uav-platform-security cmii-uav-platform-security harbor.cdcyy.com.cn/cmii/cmii-uav-platform-security:4.1.6
cmii-uav-developer cmii-uav-developer harbor.cdcyy.com.cn/cmii/cmii-uav-developer:5.2.0-25858
cmii-admin-data cmii-admin-data harbor.cdcyy.com.cn/cmii/cmii-admin-data:5.2.0
cmii-uav-device cmii-uav-device harbor.cdcyy.com.cn/cmii/cmii-uav-device:5.2.0
cmii-uav-emergency cmii-uav-emergency harbor.cdcyy.com.cn/cmii/cmii-uav-emergency:5.2.0
cmii-admin-gateway cmii-admin-gateway harbor.cdcyy.com.cn/cmii/cmii-admin-gateway:5.2.0
cmii-uav-gateway cmii-uav-gateway harbor.cdcyy.com.cn/cmii/cmii-uav-gateway:5.2.0
cmii-admin-user cmii-admin-user harbor.cdcyy.com.cn/cmii/cmii-admin-user:5.2.0
cmii-uav-gis-server cmii-uav-gis-server harbor.cdcyy.com.cn/cmii/cmii-uav-gis-server:5.2.0
cmii-app-release cmii-app-release harbor.cdcyy.com.cn/cmii/cmii-app-release:4.2.0-validation
cmii-uav-grid-datasource cmii-uav-grid-datasource harbor.cdcyy.com.cn/cmii/cmii-uav-grid-datasource:5.2.0-24810
cmii-open-gateway cmii-open-gateway harbor.cdcyy.com.cn/cmii/cmii-open-gateway:5.2.0
cmii-uav-grid-engine cmii-uav-grid-engine harbor.cdcyy.com.cn/cmii/cmii-uav-grid-engine:5.1.0
cmii-suav-platform-supervision cmii-suav-platform-supervision harbor.cdcyy.com.cn/cmii/cmii-suav-platform-supervision:5.2.0
cmii-uav-grid-manage cmii-uav-grid-manage harbor.cdcyy.com.cn/cmii/cmii-uav-grid-manage:5.1.0
cmii-suav-platform-supervisionh5 cmii-suav-platform-supervisionh5 harbor.cdcyy.com.cn/cmii/cmii-suav-platform-supervisionh5:5.2.0
cmii-uav-industrial-portfolio cmii-uav-industrial-portfolio harbor.cdcyy.com.cn/cmii/cmii-uav-industrial-portfolio:5.2.0-25268-10
cmii-suav-supervision cmii-suav-supervision harbor.cdcyy.com.cn/cmii/cmii-suav-supervision:5.2.0
cmii-uav-integration cmii-uav-integration harbor.cdcyy.com.cn/cmii/cmii-uav-integration:5.2.0-25447
cmii-uav-platform-securityh5 cmii-uav-platform-securityh5 harbor.cdcyy.com.cn/cmii/cmii-uav-platform-securityh5:5.2.0
cmii-uav-airspace cmii-uav-airspace harbor.cdcyy.com.cn/cmii/cmii-uav-airspace:5.2.0
cmii-uav-kpi-monitor cmii-uav-kpi-monitor harbor.cdcyy.com.cn/cmii/cmii-uav-kpi-monitor:5.2.0
cmii-uav-alarm cmii-uav-alarm harbor.cdcyy.com.cn/cmii/cmii-uav-alarm:5.2.0
cmii-uav-platform-seniclive cmii-uav-platform-seniclive harbor.cdcyy.com.cn/cmii/cmii-uav-platform-seniclive:5.2.0
cmii-uav-autowaypoint cmii-uav-autowaypoint harbor.cdcyy.com.cn/cmii/cmii-uav-autowaypoint:4.1.6-cm-0828
cmii-uav-platform-share cmii-uav-platform-share harbor.cdcyy.com.cn/cmii/cmii-uav-platform-share:5.2.0
cmii-uav-brain cmii-uav-brain harbor.cdcyy.com.cn/cmii/cmii-uav-brain:5.2.0
cmii-uav-logger cmii-uav-logger harbor.cdcyy.com.cn/cmii/cmii-uav-logger:5.2.0
cmii-uav-platform-splice cmii-uav-platform-splice harbor.cdcyy.com.cn/cmii/cmii-uav-platform-splice:5.2.0
cmii-uav-material-warehouse cmii-uav-material-warehouse harbor.cdcyy.com.cn/cmii/cmii-uav-material-warehouse:5.2.0
cmii-uav-cloud-live cmii-uav-cloud-live harbor.cdcyy.com.cn/cmii/cmii-uav-cloud-live:5.2.0
cmii-uav-clusters cmii-uav-clusters harbor.cdcyy.com.cn/cmii/cmii-uav-clusters:5.2.0
cmii-uav-platform-threedsimulation cmii-uav-platform-threedsimulation harbor.cdcyy.com.cn/cmii/cmii-uav-platform-threedsimulation:5.2.0-21392
cmii-uav-mission cmii-uav-mission harbor.cdcyy.com.cn/cmii/cmii-uav-mission:5.2.0-25840
cmii-uav-mqtthandler cmii-uav-mqtthandler harbor.cdcyy.com.cn/cmii/cmii-uav-mqtthandler:5.2.0-25340
cmii-uav-notice cmii-uav-notice harbor.cdcyy.com.cn/cmii/cmii-uav-notice:5.2.0
cmii-uav-platform-visualization cmii-uav-platform-visualization harbor.cdcyy.com.cn/cmii/cmii-uav-platform-visualization:5.2.0
cmii-uav-oauth cmii-uav-oauth harbor.cdcyy.com.cn/cmii/cmii-uav-oauth:5.2.0
cmii-uav-process cmii-uav-process harbor.cdcyy.com.cn/cmii/cmii-uav-process:5.2.0
cmii-uav-surveillance cmii-uav-surveillance harbor.cdcyy.com.cn/cmii/cmii-uav-surveillance:5.2.0-25854
cmii-uav-threedsimulation cmii-uav-threedsimulation harbor.cdcyy.com.cn/cmii/cmii-uav-threedsimulation:5.2.0
cmii-uav-tower cmii-uav-tower harbor.cdcyy.com.cn/cmii/cmii-uav-tower:5.2.0
cmii-uav-user cmii-uav-user harbor.cdcyy.com.cn/cmii/cmii-uav-user:5.2.0
cmii-uav-cms cmii-uav-cms harbor.cdcyy.com.cn/cmii/cmii-uav-cms:5.2.0
cmii-uav-data-post-process cmii-uav-data-post-process harbor.cdcyy.com.cn/cmii/cmii-uav-data-post-process:5.2.0
cmii-uav-waypoint cmii-uav-waypoint harbor.cdcyy.com.cn/cmii/cmii-uav-waypoint:5.2.0
cmii-uav-depotautoreturn cmii-uav-depotautoreturn harbor.cdcyy.com.cn/cmii/cmii-uav-depotautoreturn:4.2.0
cmii-uav-platform cmii-uav-platform harbor.cdcyy.com.cn/cmii/cmii-uav-platform:5.2.0
helm-live-op-v2 operator harbor.cdcyy.com.cn/cmii/cmii-live-operator:5.2.0
cmii-uav-platform-ai-brain cmii-uav-platform-ai-brain harbor.cdcyy.com.cn/cmii/cmii-uav-platform-ai-brain:5.2.0
cmii-uav-platform-armypeople cmii-uav-platform-armypeople harbor.cdcyy.com.cn/cmii/cmii-uav-platform-armypeople:5.2.0-24538
cmii-uav-platform-base cmii-uav-platform-base harbor.cdcyy.com.cn/cmii/cmii-uav-platform-base:5.2.0
cmii-uav-platform-cms-portal cmii-uav-platform-cms-portal harbor.cdcyy.com.cn/cmii/cmii-uav-platform-cms-portal:5.2.0
helm-live-rtsp-op operator harbor.cdcyy.com.cn/cmii/cmii-rtsp-operator:v5.1.0
cmii-uav-platform-detection cmii-uav-platform-detection harbor.cdcyy.com.cn/cmii/cmii-uav-platform-detection:5.2.0
helm-live-rtsp-zlm operator harbor.cdcyy.com.cn/cmii/zlm-mediaserver:v1.0.6
cmii-uav-platform-emergency-rescue cmii-uav-platform-emergency-rescue harbor.cdcyy.com.cn/cmii/cmii-uav-platform-emergency-rescue:5.2.0
cmii-uav-platform-hljtt cmii-uav-platform harbor.cdcyy.com.cn/cmii/cmii-uav-platform:5.2.0
cmii-uav-platform-jiangsuwenlv cmii-uav-platform-jiangsuwenlv harbor.cdcyy.com.cn/cmii/cmii-uav-platform-jiangsuwenlv:4.1.3-jiangsu-0427
cmii-uav-platform-logistics cmii-uav-platform-logistics harbor.cdcyy.com.cn/cmii/cmii-uav-platform-logistics:5.2.0
cmii-uav-platform-media cmii-uav-platform-media harbor.cdcyy.com.cn/cmii/cmii-uav-platform-media:5.2.0
cmii-uav-platform-multiterminal cmii-uav-platform-multiterminal harbor.cdcyy.com.cn/cmii/cmii-uav-platform-multiterminal:5.2.0
cmii-uav-platform-mws cmii-uav-platform-mws harbor.cdcyy.com.cn/cmii/cmii-uav-platform-mws:5.2.0
cmii-uav-platform-oms cmii-uav-platform-oms harbor.cdcyy.com.cn/cmii/cmii-uav-platform-oms:5.2.0
cmii-uav-platform-open cmii-uav-platform-open harbor.cdcyy.com.cn/cmii/cmii-uav-platform-open:5.2.0
cmii-uav-platform-qingdao cmii-uav-platform-qingdao harbor.cdcyy.com.cn/cmii/cmii-uav-platform:4.1.6-24238-qingdao
cmii-uav-platform-qinghaitourism cmii-uav-platform-qinghaitourism harbor.cdcyy.com.cn/cmii/cmii-uav-platform-qinghaitourism:4.1.0-21377-0508

View File

@@ -26,11 +26,13 @@ func NewLogger() (*Logger, error) {
TimeKey: "time",
//CallerKey: "caller",
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: zapcore.RFC3339TimeEncoder,
//EncodeCaller: zapcore.FullCallerEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
//EncodeCaller: zapcore.ShortCallerEncoder,
},
Development: true,
}
logger, err := config.Build()
if err != nil {
return nil, err
}
@@ -40,6 +42,7 @@ func NewLogger() (*Logger, error) {
func (l *Logger) Printf(msg string, args ...interface{}) {
l.Logger.Info(fmt.Sprintf("%s ==> %v", msg, args))
}
// Debug logs a debug message.

View File

@@ -19,7 +19,7 @@ octopus:
init_from_server_key: InitFromServerKey
# initialization register time out (unit ms) default is 5 min
init_ttl: "3000000"
# Octopus Exchange Name == server comunicate with agent
# Octopus Exchange Name == server communicate with agent
octopus_exchange: OctopusExchange
# Octopus Message To Server == all agent send info to server queue and topic
octopus_to_server: OctopusToServer

302
agent-go/tmp/test.json Normal file
View File

@@ -0,0 +1,302 @@
{
"metadata": {
"name": "cmii-uav-gateway-64ddc6c4c7-77k2w",
"generateName": "cmii-uav-gateway-64ddc6c4c7-",
"namespace": "uavcloud-devflight",
"selfLink": "/api/v1/namespaces/uavcloud-devflight/pods/cmii-uav-gateway-64ddc6c4c7-77k2w",
"uid": "02e1277f-b632-4e7a-b204-dad30885de48",
"resourceVersion": "468813592",
"creationTimestamp": "2023-12-25T09:04:01Z",
"labels": {
"app.kubernetes.io/instance": "cmii-uav-gateway",
"app.kubernetes.io/managed-by": "Helm",
"cmii.app": "cmii-uav-gateway",
"cmii.modules": "cmlc",
"cmii.type": "backend",
"cmii/managed-by": "jenkins-pipeline-standalone-job",
"pod-template-hash": "64ddc6c4c7"
},
"ownerReferences": [
{
"apiVersion": "apps/v1",
"kind": "ReplicaSet",
"name": "cmii-uav-gateway-64ddc6c4c7",
"uid": "1d76ec6d-4c9c-435b-8aca-5bb0755f9ab1",
"controller": true,
"blockOwnerDeletion": true
}
]
},
"spec": {
"volumes": [
{
"name": "glusterfs-backend-log-volume",
"persistentVolumeClaim": {
"claimName": "glusterfs-backend-log-pvc"
}
},
{
"name": "elk-json-log",
"hostPath": {
"path": "/var/log/",
"type": ""
}
},
{
"name": "default-token-hzddz",
"secret": {
"secretName": "default-token-hzddz",
"defaultMode": 420
}
}
],
"containers": [
{
"name": "cmii-uav-gateway",
"image": "harbor.cdcyy.com.cn/cmii/cmii-uav-gateway:4.1.6-beta",
"ports": [
{
"name": "pod-port",
"containerPort": 8080,
"protocol": "TCP"
}
],
"env": [
{
"name": "GIT_BRANCH",
"value": "staging"
},
{
"name": "GIT_COMMIT",
"value": "bdcdf85720bd1da671bdb55e80f2192968d98633"
},
{
"name": "K8S_NAMESPACE",
"value": "uavcloud-devflight"
},
{
"name": "APPLICATION_NAME",
"value": "cmii-uav-gateway"
},
{
"name": "CUST_JAVA_OPTS",
"value": "-Xms1000m -Xmx2048m -Dreactor.netty.ioWorkerCount=256 -Dreactor.netty.ioSelectCount=1"
},
{
"name": "NACOS_REGISTRY",
"value": "helm-nacos:8848"
},
{
"name": "NACOS_USERNAME",
"value": "developer"
},
{
"name": "NACOS_PASSWORD",
"value": "Deve@9128"
},
{
"name": "NACOS_DISCOVERY_IP",
"valueFrom": {
"fieldRef": {
"apiVersion": "v1",
"fieldPath": "status.podIP"
}
}
},
{
"name": "NACOS_DISCOVERY_PORT",
"value": "8080"
},
{
"name": "IMAGE_VERSION",
"value": "4.1.6-beta"
},
{
"name": "BIZ_CONFIG_GROUP"
},
{
"name": "SYS_CONFIG_GROUP"
}
],
"resources": {
"limits": {
"cpu": "2",
"memory": "2Gi"
},
"requests": {
"cpu": "100m",
"memory": "200Mi"
}
},
"volumeMounts": [
{
"name": "glusterfs-backend-log-volume",
"mountPath": "/cmii/logs",
"subPath": "uavcloud-devflight/cmii-uav-gateway"
},
{
"name": "elk-json-log",
"mountPath": "/cmii/jsonlogs",
"subPath": "json_pv_logfile"
},
{
"name": "default-token-hzddz",
"readOnly": true,
"mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
}
],
"livenessProbe": {
"httpGet": {
"path": "/cmii/ping",
"port": "pod-port",
"scheme": "HTTP"
},
"initialDelaySeconds": 5,
"timeoutSeconds": 2,
"periodSeconds": 10,
"successThreshold": 1,
"failureThreshold": 3
},
"readinessProbe": {
"httpGet": {
"path": "/cmii/ping",
"port": "pod-port",
"scheme": "HTTP"
},
"initialDelaySeconds": 5,
"timeoutSeconds": 2,
"periodSeconds": 10,
"successThreshold": 1,
"failureThreshold": 3
},
"startupProbe": {
"httpGet": {
"path": "/cmii/ping",
"port": "pod-port",
"scheme": "HTTP"
},
"initialDelaySeconds": 120,
"timeoutSeconds": 2,
"periodSeconds": 10,
"successThreshold": 1,
"failureThreshold": 10
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"serviceAccountName": "default",
"serviceAccount": "default",
"nodeName": "dev-07.ecs.io",
"securityContext": {},
"imagePullSecrets": [
{
"name": "harborsecret"
}
],
"affinity": {
"nodeAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "uavcloud.affinity",
"operator": "In",
"values": [
"common"
]
}
]
}
]
}
}
},
"schedulerName": "default-scheduler",
"tolerations": [
{
"key": "node.kubernetes.io/not-ready",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
},
{
"key": "node.kubernetes.io/unreachable",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
}
],
"priority": 0,
"enableServiceLinks": true
},
"status": {
"phase": "Running",
"conditions": [
{
"type": "Initialized",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2023-12-25T09:04:01Z"
},
{
"type": "Ready",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2023-12-26T07:22:36Z"
},
{
"type": "ContainersReady",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2023-12-26T07:22:36Z"
},
{
"type": "PodScheduled",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2023-12-25T09:04:01Z"
}
],
"hostIP": "192.168.11.161",
"podIP": "10.244.165.25",
"podIPs": [
{
"ip": "10.244.165.25"
}
],
"startTime": "2023-12-25T09:04:01Z",
"containerStatuses": [
{
"name": "cmii-uav-gateway",
"state": {
"running": {
"startedAt": "2023-12-26T07:20:22Z"
}
},
"lastState": {
"terminated": {
"exitCode": 1,
"reason": "Error",
"startedAt": "2023-12-26T07:14:52Z",
"finishedAt": "2023-12-26T07:15:18Z",
"containerID": "docker://da24e4587f76139c30f4730b18210c11c07f1d4f5afda93b3d70d2eef6aeeb53"
}
},
"ready": true,
"restartCount": 9,
"image": "harbor.cdcyy.com.cn/cmii/cmii-uav-gateway:4.1.6-beta",
"imageID": "docker-pullable://harbor.cdcyy.com.cn/cmii/cmii-uav-gateway@sha256:138ae1ed2596746b429f158795791eb677f26c2aa523784f42a13d7256652310",
"containerID": "docker://13a6bfe5218ba9b9edeaf5c1378d73ecb06fc90cb648e0c158baa9f528c1e391",
"started": true
}
],
"qosClass": "Burstable"
}
}

View File

@@ -0,0 +1,22 @@
package utils
func MinInt(x, y int) int {
if x < y {
return x
}
return y
}
func MaxInt32(x, y int32) int32 {
if x > y {
return x
}
return y
}
func MaxInt(x, y int) int {
if x > y {
return x
}
return y
}