Files
ProjectOctopus/agent-go/k8s_exec/CmiiStatus.go
2024-01-10 16:45:41 +08:00

140 lines
3.8 KiB
Go

package k8s_exec
import (
"agent-go/utils"
v1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"strings"
)
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
RestartCount int32
ContainerName string
Image string
ImageTag string
GitBranch string
GitCommit string
PodStatus bool
PodPhase corev1.PodPhase
}
type CmiiDeploymentInterface struct {
Name string
Namespace string
AvailableReplicas int32
Replicas int32
ContainerImageMap map[string]string
ContainerName string
Image string
ImageTag string
GitBranch string
GitCommit string
StatusOk bool
}
func (deploy CmiiDeploymentInterface) Convert(deployment v1.Deployment) CmiiDeploymentInterface {
containers := deployment.Spec.Template.Spec.Containers
containerImageMap := make(map[string]string, len(containers))
if len(containers) > 1 {
log.WarnF("[CmiiDeploymentInterface Convert] - deployment [%s] [%s] container greater than one !", deployment.Namespace, deployment.Name)
}
for _, container := range containers {
containerImageMap[container.Name] = container.Image
deploy.Image = container.Image
deploy.ContainerName = container.Name
deploy.ImageTag = strings.Split(container.Image, ":")[1]
for _, envVar := range container.Env {
if strings.HasPrefix(envVar.Name, "GIT_BRANCH") {
deploy.GitBranch = envVar.Value
}
if strings.HasPrefix(envVar.Name, "GIT_COMMIT") {
deploy.GitCommit = envVar.Value
}
}
}
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))
if len(containers) > 1 {
log.WarnF("[CmiiDeploymentInterface Convert] - pod [%s] [%s] container greater than one !", podDetail.Namespace, podDetail.Name)
}
for _, container := range containers {
containerImageMap[container.Name] = container.Image
pod.Image = container.Image
pod.ContainerName = container.Name
pod.ImageTag = strings.Split(container.Image, ":")[1]
for _, envVar := range container.Env {
if strings.HasPrefix(envVar.Name, "GIT_BRANCH") {
pod.GitBranch = envVar.Value
}
if strings.HasPrefix(envVar.Name, "GIT_COMMIT") {
pod.GitCommit = envVar.Value
}
}
}
containerStatuses := podDetail.Status.ContainerStatuses
containerStatusMap := make(map[string]int32, len(containerStatuses))
for _, containerStatus := range containerStatuses {
containerStatusMap[containerStatus.Name] = containerStatus.RestartCount
pod.RestartCount = utils.MaxInt32(pod.RestartCount, 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
pod.PodPhase = podDetail.Status.Phase
switch podDetail.Status.Phase {
case corev1.PodFailed:
pod.PodStatus = false
break
case corev1.PodPending:
pod.PodStatus = false
break
case corev1.PodReasonUnschedulable:
pod.PodStatus = false
break
default:
pod.PodStatus = true
break
}
return pod
}