diff --git a/.gitignore b/.gitignore index 0976d5a..a826b17 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ -!**/src/test/**/target/ ### STS ### .apt_generated diff --git a/agent-go/executor/AppFunction.go b/agent-go/executor/AppFunction.go index 6255acb..9e1925d 100644 --- a/agent-go/executor/AppFunction.go +++ b/agent-go/executor/AppFunction.go @@ -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 diff --git a/agent-go/executor/BaseFunction.go b/agent-go/executor/BaseFunction.go index 1cbf5fb..7704a95 100644 --- a/agent-go/executor/BaseFunction.go +++ b/agent-go/executor/BaseFunction.go @@ -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 !") diff --git a/agent-go/executor/BasicFunction.go b/agent-go/executor/BasicFunction.go index 4bc97a7..3a49b13 100644 --- a/agent-go/executor/BasicFunction.go +++ b/agent-go/executor/BasicFunction.go @@ -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 +} diff --git a/agent-go/g/global.go b/agent-go/g/global.go index b31ad7e..08e3d59 100644 --- a/agent-go/g/global.go +++ b/agent-go/g/global.go @@ -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( diff --git a/agent-go/k8s_exec/CmiiK8sConfig.go b/agent-go/k8s_exec/CmiiK8sConfig.go new file mode 100644 index 0000000..dceb96e --- /dev/null +++ b/agent-go/k8s_exec/CmiiK8sConfig.go @@ -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==` diff --git a/agent-go/k8s_exec/CmiiK8sOperator.go b/agent-go/k8s_exec/CmiiK8sOperator.go new file mode 100644 index 0000000..65242a4 --- /dev/null +++ b/agent-go/k8s_exec/CmiiK8sOperator.go @@ -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) + } + } + } + +} diff --git a/agent-go/k8s_exec/CmiiK8sOperator_test.go b/agent-go/k8s_exec/CmiiK8sOperator_test.go new file mode 100644 index 0000000..0007143 --- /dev/null +++ b/agent-go/k8s_exec/CmiiK8sOperator_test.go @@ -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() +} diff --git a/agent-go/k8s_exec/CmiiStatus.go b/agent-go/k8s_exec/CmiiStatus.go new file mode 100644 index 0000000..f213e11 --- /dev/null +++ b/agent-go/k8s_exec/CmiiStatus.go @@ -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 +} diff --git a/agent-go/k8s_exec/K8sOperator.go b/agent-go/k8s_exec/K8sOperator.go new file mode 100644 index 0000000..7a5e731 --- /dev/null +++ b/agent-go/k8s_exec/K8sOperator.go @@ -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 +} diff --git a/agent-go/k8s_exec/K8sOperator_test.go b/agent-go/k8s_exec/K8sOperator_test.go new file mode 100644 index 0000000..e44ada7 --- /dev/null +++ b/agent-go/k8s_exec/K8sOperator_test.go @@ -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() + } + +} diff --git a/agent-go/k8s_exec/all-cmii-image.txt b/agent-go/k8s_exec/all-cmii-image.txt new file mode 100644 index 0000000..b6c5bef --- /dev/null +++ b/agent-go/k8s_exec/all-cmii-image.txt @@ -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 diff --git a/agent-go/logger/logger.go b/agent-go/logger/logger.go index 37faba0..cd1640d 100644 --- a/agent-go/logger/logger.go +++ b/agent-go/logger/logger.go @@ -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. diff --git a/agent-go/octopus-agent-standard.yaml b/agent-go/octopus-agent-standard.yaml index 82babe8..5c04f31 100644 --- a/agent-go/octopus-agent-standard.yaml +++ b/agent-go/octopus-agent-standard.yaml @@ -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 diff --git a/agent-go/tmp/test.json b/agent-go/tmp/test.json new file mode 100644 index 0000000..4a74790 --- /dev/null +++ b/agent-go/tmp/test.json @@ -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" + } +} + diff --git a/agent-go/utils/MathUtils.go b/agent-go/utils/MathUtils.go new file mode 100644 index 0000000..e4636ba --- /dev/null +++ b/agent-go/utils/MathUtils.go @@ -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 +} diff --git a/agent/src/main/java/io/wdd/agent/config/wsl2-fixed-ip.bat b/agent/src/main/java/io/wdd/agent/config/wsl2-fixed-ip.bat index 311ab3f..c798757 100644 --- a/agent/src/main/java/io/wdd/agent/config/wsl2-fixed-ip.bat +++ b/agent/src/main/java/io/wdd/agent/config/wsl2-fixed-ip.bat @@ -14,7 +14,7 @@ if !errorlevel! equ 0 ( echo wsl ip has set ) else ( ::不在的话给安排上 - wsl -u root ip addr add 172.24.240.10/24 broadcast 172.24.240.0 dev eth0 label eth0:1 + wsl -u root ip addr add 172.24.240.10/24 broadcast 172.24.240.0 devFilght eth0 label eth0:1 echo set wsl ip success: 172.24.240.10 ) diff --git a/setting-aliyun.xml b/setting-aliyun.xml index 96d7de6..7ec0915 100644 --- a/setting-aliyun.xml +++ b/setting-aliyun.xml @@ -193,7 +193,7 @@ under the License. | or the command line, profiles have to have an ID that is unique. | | An encouraged best practice for profile identification is to use a consistent naming convention - | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc. + | for profiles, such as 'env-devFilght', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc. | This will make it more intuitive to understand what the set of introduced profiles is attempting | to accomplish, particularly when you only have a list of profile id's for debug. | @@ -218,7 +218,7 @@ under the License. -->