[agent-go] - 去除本地环境信息的默认设置,优化启动逻辑

This commit is contained in:
zeaslity
2024-04-28 16:41:44 +08:00
parent 88d75a704e
commit f124972b84
7 changed files with 83 additions and 30 deletions

View File

@@ -28,6 +28,7 @@ type AgentServerInfo struct {
KernelArch string `json:"kernelArch"` // native cpu architecture queried at runtime, as returned by `uname -m` or empty string in case of error
IoSpeed string `json:"ioSpeed" yaml:"ioSpeed"`
MemoryTotal string `json:"memoryTotal" yaml:"memoryTotal"`
SwapTotal string `json:"swapTotal" yaml:"swapTotal"`
DiskTotal string `json:"diskTotal" yaml:"diskTotal"`
DiskUsage string `json:"diskUsage" yaml:"diskUsage"`
Comment string `json:"comment" yaml:"comment"`

View File

@@ -5,13 +5,15 @@ import (
"fmt"
"github.com/spf13/viper"
"gopkg.in/yaml.v3"
"io/ioutil"
"math/rand"
"os"
"reflect"
"regexp"
"strconv"
"strings"
"time"
"wdd.io/agent-common/logger"
"wdd.io/agent-common/utils"
"wdd.io/agent-go/a_agent"
"wdd.io/agent-go/a_executor"
"wdd.io/agent-go/a_status"
@@ -19,25 +21,35 @@ import (
"wdd.io/agent-go/rabbitmq"
)
const AgentServerInfoLocalFilePath = "/usr/local/etc/octopus-agent/octopus-agent.conf"
var initOmType = g.InitOmType
var P = g.G.P
var log = logger.Log
func INIT(octopusAgentConfigFileName string, agentServerInfoConf string) chan bool {
func INIT(octopusAgentConfigFileName string) chan bool {
// 获取系统的环境变量
agentServerInfo := parseAgentServerInfo(agentServerInfoConf)
// todo totally get from a_status module
// 初始化变量
agentServerInfo := &a_agent.AgentServerInfo{}
// 初始化Nacos的连接配置
// 初始化Agent的 RabbitMQ连接信息
agentConfig := parseOctopusAgentConf(octopusAgentConfigFileName)
a_agent.AgentConfig = agentConfig
// re-get agentInfo from status module
// 使用a_status模块自身获取到运行的环境信息
agentInfo := a_status.ReportAgentInfo()
refreshAgentInfoByStatusInfo(agentInfo, agentServerInfo)
if utils.FileExistAndNotNull(AgentServerInfoLocalFilePath) {
// 获取系统的环境变量
agentServerInfoFromLocalFile := parseAgentServerInfo(AgentServerInfoLocalFilePath)
// 合并系统环境变量,手动输入的部分会覆盖自身获得内容
utils.CopySameFields(agentServerInfoFromLocalFile, agentServerInfo)
}
// build operator cache
buildAgentOsOperator(agentInfo, agentServerInfo)
@@ -235,12 +247,44 @@ func buildOctopusTCPConnect(agentConfig *viper.Viper) *rabbitmq.RabbitTCPConnect
func refreshAgentInfoByStatusInfo(agentInfo *a_status.AgentInfo, agentServerInfo *a_agent.AgentServerInfo) {
// host info
agentServerInfo.ServerName = agentInfo.HostInfo.Hostname
agentServerInfo.MachineID = agentInfo.HostInfo.HostID
// cpu part
agentServerInfo.CPUCore = strconv.FormatInt(int64(agentInfo.CPUInfo.NumCores), 10)
if len(agentInfo.CPUInfo.CPUInfo) > 0 {
marshal, _ := json.Marshal(agentInfo.CPUInfo.CPUInfo[0])
agentServerInfo.CPUBrand = string(marshal)
}
// os info
agentServerInfo.OSInfo = agentInfo.HostInfo.PlatformFamily + agentInfo.HostInfo.Platform + agentInfo.HostInfo.PlatformVersion
agentServerInfo.OSKernelInfo = agentInfo.HostInfo.KernelVersion
agentServerInfo.Virtualization = agentInfo.HostInfo.VirtualizationSystem + agentInfo.HostInfo.VirtualizationRole
agentServerInfo.Platform = agentInfo.HostInfo.Platform
agentServerInfo.PlatformFamily = agentInfo.HostInfo.PlatformFamily
agentServerInfo.PlatformVersion = agentInfo.HostInfo.PlatformVersion
agentServerInfo.KernelVersion = agentInfo.HostInfo.KernelVersion
agentServerInfo.KernelArch = agentInfo.HostInfo.KernelArch
// memory part
agentServerInfo.MemoryTotal = strconv.FormatInt(int64(agentInfo.MemoryInfo.TotalMemory), 10)
agentServerInfo.SwapTotal = strconv.FormatInt(int64(agentInfo.MemoryInfo.SwapTotal), 10)
// disk part
info := agentInfo.DiskInfo
diskTotal := uint64(0)
diskUsage := uint64(0)
for _, diskInfo := range info {
if diskInfo.Total > diskTotal {
diskTotal = diskInfo.Total
diskUsage = diskInfo.Used
}
}
agentServerInfo.DiskTotal = strconv.FormatUint(diskTotal, 10)
agentServerInfo.DiskUsage = strconv.FormatUint(diskUsage, 10)
// network part
refreshAgentNetworkInfo(agentInfo, agentServerInfo)
@@ -357,7 +401,7 @@ func parseAgentServerInfo(agentServerInfoConf string) *a_agent.AgentServerInfo {
// 约定文件地址为 /octopus-agent/octopus-agent.conf
var agentServerInfo *a_agent.AgentServerInfo
yamlFile, err := ioutil.ReadFile(agentServerInfoConf)
yamlFile, err := os.ReadFile(agentServerInfoConf)
if err != nil {
panic(fmt.Errorf("failed to read YAML file: %v", err))

View File

@@ -13,11 +13,11 @@ func main() {
// 解析命令行参数
var version string
var agentServerInfoConfFile string
//var agentServerInfoConfFile string
var mode string
flag.StringVar(&version, "version", "", "config file version")
flag.StringVar(&mode, "mode", "agent", "agent run mode")
flag.StringVar(&agentServerInfoConfFile, "agentServerInfoConfFile", "", "agent server info conf file")
//flag.StringVar(&agentServerInfoConfFile, "agentServerInfoConfFile", "", "agent server info conf file")
flag.Parse()
if mode == "bastion" {
@@ -30,10 +30,10 @@ func main() {
// 读取对应版本的配置文件
octopusAgentConfigFileName := fmt.Sprintf("octopus-agent-%s.yaml", version)
fmt.Println("config file name is => " + octopusAgentConfigFileName)
fmt.Println("agent server info file is => " + agentServerInfoConfFile)
//fmt.Println("agent server info file is => " + agentServerInfoConfFile)
// 执行初始化之策工作
businessForeverChan := a_init.INIT(octopusAgentConfigFileName, agentServerInfoConfFile)
businessForeverChan := a_init.INIT(octopusAgentConfigFileName)
// 永远等待 runtime的队列消息
<-businessForeverChan