[ Cmii ] [ Octopus ] - reformat agent-go - 1
This commit is contained in:
197
agent-go/a_executor/InitFunction.go
Normal file
197
agent-go/a_executor/InitFunction.go
Normal file
@@ -0,0 +1,197 @@
|
||||
package a_executor
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
"strings"
|
||||
"wdd.io/agent-go/a_status"
|
||||
)
|
||||
|
||||
func BuildAgentOsOperator(agentInfo *a_status.AgentInfo, ossOfflinePrefix string) *AgentOsOperator {
|
||||
|
||||
AgentOsOperatorCache = &AgentOsOperator{
|
||||
InstallCommandPrefix: []string{
|
||||
"apt-get", "install", "--allow-downgrades", "-y",
|
||||
},
|
||||
RemoveCommandPrefix: []string{"apt", "remove", "-y"},
|
||||
CanAccessInternet: true,
|
||||
IsOsTypeUbuntu: true,
|
||||
IsOsTypeCentOS: false,
|
||||
IsOsTypeEuler: false,
|
||||
IsAgentInnerWall: false,
|
||||
AgentArch: "amd64",
|
||||
AgentOSReleaseCode: "focal",
|
||||
AgentServerInfo: nil,
|
||||
OssOfflinePrefix: ossOfflinePrefix,
|
||||
}
|
||||
|
||||
// os type
|
||||
detectByAgentStatusInfo(agentInfo, AgentOsOperatorCache)
|
||||
|
||||
// internet
|
||||
detectByInternet(AgentOsOperatorCache)
|
||||
|
||||
return AgentOsOperatorCache
|
||||
}
|
||||
|
||||
func detectByAgentStatusInfo(agentInfo *a_status.AgentInfo, os *AgentOsOperator) {
|
||||
if agentInfo == nil {
|
||||
log.WarnF("[detectByAgentStatusInfo] - agentInfo from status module is nil, roll back to traditional way!")
|
||||
// detectByOsType()
|
||||
}
|
||||
|
||||
bytes, _ := json.Marshal(agentInfo)
|
||||
log.DebugF("[detectByAgentStatusInfo] - agent info is => %s", string(bytes))
|
||||
|
||||
if strings.Contains(agentInfo.HostInfo.Platform, "openeuler") || strings.Contains(agentInfo.HostInfo.PlatformFamily, "rehl") {
|
||||
// centos
|
||||
os.IsOsTypeUbuntu = false
|
||||
os.IsOsTypeCentOS = true
|
||||
if strings.Contains(agentInfo.HostInfo.Platform, "openeuler") {
|
||||
os.IsOsTypeEuler = true
|
||||
}
|
||||
os.InstallCommandPrefix = []string{
|
||||
"yum", "install", "-y",
|
||||
}
|
||||
os.RemoveCommandPrefix = []string{
|
||||
"yum", "remove", "-y",
|
||||
}
|
||||
|
||||
} else if strings.Contains(agentInfo.HostInfo.PlatformFamily, "debian") {
|
||||
// ubuntu
|
||||
os.IsOsTypeUbuntu = true
|
||||
os.IsOsTypeCentOS = false
|
||||
os.IsOsTypeEuler = false
|
||||
os.RemoveCommandPrefix = []string{"apt", "remove", "-y"}
|
||||
os.InstallCommandPrefix = []string{
|
||||
"apt-get", "install", "--allow-downgrades", "-y",
|
||||
}
|
||||
|
||||
// os release code
|
||||
os.AgentOSReleaseCode = judgeUbuntuReleaseFromOsVersion(agentInfo.HostInfo.PlatformVersion)
|
||||
}
|
||||
|
||||
// agent cpu arch
|
||||
os.AgentArch = judgeAgentCpuArchByKernelArch(agentInfo.HostInfo.KernelArch)
|
||||
|
||||
}
|
||||
|
||||
func judgeUbuntuReleaseFromOsVersion(osVersion string) string {
|
||||
|
||||
switch osVersion {
|
||||
case "16.04":
|
||||
return "xenial"
|
||||
case "18.04":
|
||||
return "bionic"
|
||||
case "20.04":
|
||||
return "focal"
|
||||
case "22.04":
|
||||
return "jammy"
|
||||
default:
|
||||
return "ubuntu-unknown"
|
||||
}
|
||||
}
|
||||
|
||||
func judgeAgentCpuArchByKernelArch(kernelArch string) string {
|
||||
switch kernelArch {
|
||||
case "x86_64":
|
||||
return "amd64"
|
||||
case "aarch64":
|
||||
return "arm64"
|
||||
case "armv8":
|
||||
return "arm64"
|
||||
case "armv6":
|
||||
return "arm6"
|
||||
case "armv7":
|
||||
return "arm7"
|
||||
case "i32":
|
||||
return "386"
|
||||
case "i86":
|
||||
return "386"
|
||||
default:
|
||||
return "cpu-unknown"
|
||||
}
|
||||
}
|
||||
|
||||
func detectByInternet(os *AgentOsOperator) {
|
||||
|
||||
outsideTestUrl := "www.google.com"
|
||||
innerTestUrl := "www.baidu.com"
|
||||
|
||||
testInternetCommand := []string{
|
||||
"curl",
|
||||
"-o",
|
||||
"/dev/null",
|
||||
"-m",
|
||||
"5",
|
||||
"-s",
|
||||
}
|
||||
|
||||
if PureResultSingleExecute(append(testInternetCommand, outsideTestUrl)) {
|
||||
os.CanAccessInternet = true
|
||||
os.IsAgentInnerWall = false
|
||||
} else if PureResultSingleExecute(append(testInternetCommand, innerTestUrl)) {
|
||||
os.CanAccessInternet = true
|
||||
os.IsAgentInnerWall = true
|
||||
} else {
|
||||
os.CanAccessInternet = false
|
||||
os.IsAgentInnerWall = true
|
||||
}
|
||||
|
||||
log.InfoF("[Agent Network Status] - Can Access Internet => %s Inner CN => %s", strconv.FormatBool(os.CanAccessInternet), strconv.FormatBool(os.IsAgentInnerWall))
|
||||
|
||||
}
|
||||
|
||||
func detectByOsType(os *AgentOsOperator, osInfo string) {
|
||||
|
||||
ubuntuOsReleaseCode := [][]string{
|
||||
{
|
||||
"cat",
|
||||
"/etc/os-release",
|
||||
},
|
||||
{
|
||||
"grep",
|
||||
"CODE",
|
||||
},
|
||||
{
|
||||
"head",
|
||||
"-1",
|
||||
},
|
||||
{
|
||||
"cut",
|
||||
"-d",
|
||||
"=",
|
||||
"-f",
|
||||
"2",
|
||||
},
|
||||
}
|
||||
|
||||
if strings.HasPrefix(osInfo, "Ce") {
|
||||
// centos
|
||||
os.IsOsTypeUbuntu = false
|
||||
os.InstallCommandPrefix = []string{
|
||||
"yum", "install", "-y",
|
||||
}
|
||||
os.RemoveCommandPrefix = []string{
|
||||
"yum", "remove",
|
||||
}
|
||||
|
||||
} else {
|
||||
// ubuntu
|
||||
os.IsOsTypeUbuntu = true
|
||||
os.RemoveCommandPrefix = []string{"apt", "remove", "-y"}
|
||||
os.InstallCommandPrefix = []string{
|
||||
"apt-get", "install", "--allow-downgrades", "-y",
|
||||
}
|
||||
|
||||
// os release code
|
||||
ok, resultLog := PipelineCommandExecutor(ubuntuOsReleaseCode)
|
||||
if ok {
|
||||
os.AgentOSReleaseCode = resultLog[0]
|
||||
} else {
|
||||
os.AgentOSReleaseCode = "UNKNOWN"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user