[ Agent ] [ CMII ] - 完成工具类的代码
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 !")
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
115
agent-go/k8s_exec/CmiiK8sConfig.go
Normal file
115
agent-go/k8s_exec/CmiiK8sConfig.go
Normal 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==`
|
||||
135
agent-go/k8s_exec/CmiiK8sOperator.go
Normal file
135
agent-go/k8s_exec/CmiiK8sOperator.go
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
23
agent-go/k8s_exec/CmiiK8sOperator_test.go
Normal file
23
agent-go/k8s_exec/CmiiK8sOperator_test.go
Normal 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()
|
||||
}
|
||||
76
agent-go/k8s_exec/CmiiStatus.go
Normal file
76
agent-go/k8s_exec/CmiiStatus.go
Normal 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
|
||||
}
|
||||
403
agent-go/k8s_exec/K8sOperator.go
Normal file
403
agent-go/k8s_exec/K8sOperator.go
Normal 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
|
||||
}
|
||||
134
agent-go/k8s_exec/K8sOperator_test.go
Normal file
134
agent-go/k8s_exec/K8sOperator_test.go
Normal 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()
|
||||
}
|
||||
|
||||
}
|
||||
67
agent-go/k8s_exec/all-cmii-image.txt
Normal file
67
agent-go/k8s_exec/all-cmii-image.txt
Normal 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
|
||||
@@ -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.
|
||||
|
||||
@@ -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
302
agent-go/tmp/test.json
Normal 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"
|
||||
}
|
||||
}
|
||||
|
||||
22
agent-go/utils/MathUtils.go
Normal file
22
agent-go/utils/MathUtils.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user