From b6418d2543de99eb12cd97d9249a1a60336a870c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E6=98=AD=E5=AE=87?= Date: Fri, 13 Dec 2024 21:03:25 +0800 Subject: [PATCH] Fix bcrypt boundary checks, playbook script error, reconstitution agentmanager with sendMessageWrapper --- cmd/server/app/agentmanager/agent.go | 104 ++-- cmd/server/app/agentmanager/cmd.go | 129 +---- cmd/server/app/agentmanager/file.go | 79 +--- cmd/server/app/agentmanager/firewall.go | 234 +-------- cmd/server/app/agentmanager/host.go | 446 ++---------------- cmd/server/app/agentmanager/network.go | 94 +--- cmd/server/app/agentmanager/rpm.go | 108 +---- cmd/server/app/agentmanager/service.go | 113 +---- cmd/server/app/agentmanager/user.go | 93 +--- cmd/server/app/service/batch/batch.go | 10 +- .../app/service/configmanage/configmanage.go | 4 +- .../app/service/machine/machinemanager.go | 3 +- pkg/utils/crypto.go | 11 +- scripts/playbook/deploy_agent.yaml | 4 +- scripts/playbook/multi-machine.yml | 2 +- 15 files changed, 189 insertions(+), 1245 deletions(-) diff --git a/cmd/server/app/agentmanager/agent.go b/cmd/server/app/agentmanager/agent.go index 6b47d7cf..9a58227f 100644 --- a/cmd/server/app/agentmanager/agent.go +++ b/cmd/server/app/agentmanager/agent.go @@ -187,91 +187,69 @@ func (a *Agent) sendMessage(msg *protocol.Message, wait bool) (*protocol.Message return nil, nil } -// 心跳 -func (a *Agent) HeartBeat() (string, error) { +func (a *Agent) SendMessageWrapper(protocolType int, msgData interface{}, errorMsg string, statusType int, info interface{}, bindErrorString string) (interface{}, error) { msg := &protocol.Message{ UUID: uuid.New().String(), - Type: protocol.Heartbeat, - Data: "connection is normal", + Type: protocolType, + Data: msgData, } - resp_message, err := a.sendMessage(msg, true) + responseMessage, err := a.sendMessage(msg, true) if err != nil { - logger.Error("failed to run script on agent") + logger.Error(errorMsg) return "", err } + switch statusType { + case -1: + if responseMessage.Status == -1 || responseMessage.Error != "" { + logger.Error(errorMsg+": %s", responseMessage.Error) + return "", fmt.Errorf(responseMessage.Error) + } + case 0: + if responseMessage.Status == 0 { + //当状态为0时,表示命令执行成功,可以解析返回的数据。状态为-1的时候不会有数据 + result := &utils.CmdResult{} + err = responseMessage.BindData(result) + if err != nil { + return nil, fmt.Errorf("failed to bind command result: %v", err) + } + return result, nil + } + } - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) + if info != nil { + err = responseMessage.BindData(info) + if err != nil { + logger.Error("bind "+bindErrorString+" data error: %v", err) + return nil, err + } } - return resp_message.Data.(string), nil + return responseMessage, nil +} + +// 心跳 +func (a *Agent) HeartBeat() (string, error) { + responseMessage, err := a.SendMessageWrapper(protocol.Heartbeat, "connection is normal", "failed to run script on agent", -1, nil, "") + return responseMessage.(protocol.Message).Data.(string), err } // 开启定时任务 func (a *Agent) CronStart(id int, spec string, command string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.CronStart, - Data: strconv.Itoa(id) + "," + spec + "," + command, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.CronStart, strconv.Itoa(id)+","+spec+","+command, "failed to run script on agent", -1, nil, "") + return responseMessage.(protocol.Message).Data.(string), responseMessage.Error, err } // 暂停定时任务 func (a *Agent) CronStopAndDel(id int) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.CronStopAndDel, - Data: strconv.Itoa(id), - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.CronStopAndDel, strconv.Itoa(id), "failed to run script on agent", -1, nil, "") + return responseMessage.(protocol.Message).Data.(string), err } // 监控配置文件 func (a *Agent) ConfigfileInfo(ConMess global.ConfigMessage) error { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AgentConfig, - Data: ConMess, - } - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to config on agent") - return err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to config on agent: %s", resp_message.Error) - return fmt.Errorf(resp_message.Error) - } - - return nil + _, err := a.SendMessageWrapper(protocol.AgentConfig, ConMess, "failed to config on agent", -1, nil, "") + return err } // 监控文件信息回传 diff --git a/cmd/server/app/agentmanager/cmd.go b/cmd/server/app/agentmanager/cmd.go index 0d71429d..69d9e031 100644 --- a/cmd/server/app/agentmanager/cmd.go +++ b/cmd/server/app/agentmanager/cmd.go @@ -12,133 +12,46 @@ import ( "gitee.com/openeuler/PilotGo/pkg/utils" "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" - "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 远程在agent上运行shell命令 func (a *Agent) RunCommand(cmd string) (*utils.CmdResult, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.RunCommand, - Data: struct { - Command string - }{ - Command: cmd, - }, + data := struct { + Command string + }{ + Command: cmd, } - - respMessage, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run command on agent: %v", err) - return nil, err - } - - if respMessage.Status == 0 { - //当状态为0时,表示命令执行成功,可以解析返回的数据。状态为-1的时候不会有数据 - result := &utils.CmdResult{} - err = respMessage.BindData(result) - if err != nil { - return nil, fmt.Errorf("failed to bind command result: %v", err) - } - return result, nil - } - return nil, fmt.Errorf("agent returned error: %s", respMessage.Error) + responseMessage, _ := a.SendMessageWrapper(protocol.RunCommand, data, "failed to run command on agent", 0, nil, "") + return nil, fmt.Errorf("agent returned error: %s", responseMessage.(protocol.Message).Error) } // 远程在agent上运行脚本文件 func (a *Agent) RunScript(script string, params []string) (*utils.CmdResult, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.RunScript, - Data: struct { - Script string - Params []string - }{ - Script: script, - Params: params, - }, - } - - respMessage, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent: %v", err) - return nil, err - } - - if respMessage.Status == 0 { - result := &utils.CmdResult{} - err = respMessage.BindData(result) - if err != nil { - return nil, fmt.Errorf("failed to bind command result: %v", err) - } - return result, nil - } - return nil, fmt.Errorf("agent returned error: %s", respMessage.Error) + data := struct { + Script string + Params []string + }{ + Script: script, + Params: params, + } + responseMessage, _ := a.SendMessageWrapper(protocol.RunScript, data, "failed to run script on agent", 0, nil, "") + return nil, fmt.Errorf("agent returned error: %s", responseMessage.(protocol.Message).Error) } // chmod [-R] 权限值 文件名 func (a *Agent) ChangePermission(permission, file string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ChangePermission, - Data: permission + "," + file, - } - - respMessage, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if respMessage.Status == -1 || respMessage.Error != "" { - logger.Error("failed to run script on agent: %s", respMessage.Error) - return "", fmt.Errorf(respMessage.Error) - } - - return respMessage.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.ChangePermission, permission+","+file, "failed to run script on agent", -1, nil, "") + return responseMessage.(protocol.Message).Data.(string), err } // chown [-R] 所有者 文件或目录 func (a *Agent) ChangeFileOwner(user, file string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ChangeFileOwner, - Data: user + "," + file, - } - - respMessage, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if respMessage.Status == -1 || respMessage.Error != "" { - logger.Error("failed to run script on agent: %s", respMessage.Error) - return "", fmt.Errorf(respMessage.Error) - } - - return respMessage.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.ChangeFileOwner, user+","+file, "failed to run script on agent", -1, nil, "") + return responseMessage.(protocol.Message).Data.(string), err } // 临时修改agent端系统参数 func (a *Agent) ChangeSysctl(args string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.SysctlChange, - Data: args, - } - - respMessage, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if respMessage.Status == -1 || respMessage.Error != "" { - logger.Error("failed to run script on agent: %s", respMessage.Error) - return "", fmt.Errorf(respMessage.Error) - } - - return respMessage.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.SysctlChange, args, "failed to run script on agent", -1, nil, "") + return responseMessage.(protocol.Message).Data.(string), err } diff --git a/cmd/server/app/agentmanager/file.go b/cmd/server/app/agentmanager/file.go index 508ff0a6..a1a9ec94 100644 --- a/cmd/server/app/agentmanager/file.go +++ b/cmd/server/app/agentmanager/file.go @@ -10,38 +10,19 @@ package agentmanager import ( "encoding/base64" "errors" - "fmt" - "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" sdkcommon "gitee.com/openeuler/PilotGo/sdk/common" "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 查看配置文件内容 func (a *Agent) ReadFilePattern(filepath, pattern string) ([]sdkcommon.File, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ReadFilePattern, - Data: sdkcommon.File{Path: filepath, Name: pattern}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - - data, ok := resp_message.Data.([]interface{}) + responseMessage, err := a.SendMessageWrapper(protocol.ReadFilePattern, sdkcommon.File{Path: filepath, Name: pattern}, "failed to run script on agent", -1, nil, "") + data, ok := responseMessage.Data.([]interface{}) if !ok { - logger.Error("failed to get msg data on agent: %s", resp_message.Error) - return nil, resp_message.Error, errors.New("failed to get msg data") + logger.Error("failed to get msg data on agent: %s", responseMessage.Error) + return nil, responseMessage.Error, errors.New("failed to get msg data") } var files []sdkcommon.File @@ -57,7 +38,7 @@ func (a *Agent) ReadFilePattern(filepath, pattern string) ([]sdkcommon.File, str logger.Error("failed to get file from data") } } - return files, resp_message.Error, nil + return files, responseMessage.Error, err } // 更新配置文件 @@ -67,30 +48,9 @@ func (a *Agent) UpdateFile(filepath string, filename string, text string) (*comm Name: filename, Text: text, } - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.EditFile, - Data: updatefile, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &common.UpdateFile{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind UpdateFile data error:%s", err) - return nil, resp_message.Error, err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.EditFile, updatefile, "failed to run script on agent", -1, info, "UpdateFile") + return info, responseMessage.Error, err } // 存储配置文件 @@ -100,28 +60,7 @@ func (a *Agent) SaveFile(filepath string, filename string, text string) (*common Name: filename, Text: text, } - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.SaveFile, - Data: updatefile, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &common.UpdateFile{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind UpdateFile data error:%s", err) - return nil, resp_message.Error, err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.SaveFile, updatefile, "failed to run script on agent", -1, info, "UpdateFile") + return info, responseMessage.Error, err } diff --git a/cmd/server/app/agentmanager/firewall.go b/cmd/server/app/agentmanager/firewall.go index 5e21b244..70bd6114 100644 --- a/cmd/server/app/agentmanager/firewall.go +++ b/cmd/server/app/agentmanager/firewall.go @@ -8,264 +8,74 @@ package agentmanager import ( - "fmt" - "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" - "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 获取防火墙配置 func (a *Agent) FirewalldConfig() (*common.FireWalldConfig, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldConfig, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &common.FireWalldConfig{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind FirewalldConfig data error:%s", err) - return nil, resp_message.Error, err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldConfig, struct{}{}, "failed to run script on agent", -1, info, "FirewalldConfig") + return info, responseMessage.Error, err } // 更改防火墙默认区域 func (a *Agent) FirewalldSetDefaultZone(zone string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldDefaultZone, - Data: zone, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldDefaultZone, zone, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } // 查看防火墙指定区域配置 func (a *Agent) FirewalldZoneConfig(zone string) (*common.FirewalldCMDList, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldZoneConfig, - Data: zone, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &common.FirewalldCMDList{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind data error:%s", err) - return nil, resp_message.Error, err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldZoneConfig, zone, "failed to run script on agent", -1, info, "FirewalldConfig") + return info, responseMessage.Error, err } // 添加防火墙服务 func (a *Agent) FirewalldServiceAdd(zone, service string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldServiceAdd, - Data: zone + "," + service, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldServiceAdd, zone+","+service, "failed to run script on agent", -1, nil, "") + return responseMessage.Error, err } // 移除防火墙服务 func (a *Agent) FirewalldServiceRemove(zone, service string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldServiceRemove, - Data: zone + "," + service, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldServiceRemove, zone+","+service, "failed to run script on agent", -1, nil, "") + return responseMessage.Error, err } // 防火墙添加允许来源地址 func (a *Agent) FirewalldSourceAdd(zone, source string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldSourceAdd, - Data: zone + "," + source, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldSourceAdd, zone+","+source, "failed to run script on agent", -1, nil, "") + return responseMessage.Error, err } // 防火墙移除允许来源地址 func (a *Agent) FirewalldSourceRemove(zone, source string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldSourceRemove, - Data: zone + "," + source, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldSourceRemove, zone+","+source, "failed to run script on agent", -1, nil, "") + return responseMessage.Error, err } // 重启防火墙 func (a *Agent) FirewalldRestart() (bool, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldRestart, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return false, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return false, resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(bool), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldRestart, struct{}{}, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(bool), responseMessage.Error, err } // 关闭防火墙 func (a *Agent) FirewalldStop() (bool, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldStop, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return false, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return false, resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(bool), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldStop, struct{}{}, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(bool), responseMessage.Error, err } // 防火墙指定区域添加端口 func (a *Agent) FirewalldZonePortAdd(zone, port, proto string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldZonePortAdd, - Data: zone + "," + port + "," + proto, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldZonePortAdd, zone+","+port+","+proto, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } // 防火墙指定区域删除端口 func (a *Agent) FirewalldZonePortDel(zone, port, proto string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.FirewalldZonePortDel, - Data: zone + "," + port + "," + proto, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.FirewalldZonePortDel, zone+","+port+","+proto, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } diff --git a/cmd/server/app/agentmanager/host.go b/cmd/server/app/agentmanager/host.go index 8bb72f18..3e3ef56e 100644 --- a/cmd/server/app/agentmanager/host.go +++ b/cmd/server/app/agentmanager/host.go @@ -8,41 +8,16 @@ package agentmanager import ( - "fmt" - mc "gitee.com/openeuler/PilotGo/pkg/utils/message/common" "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" - "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 远程获取agent端的主机的概览信息 func (a *Agent) AgentOverview() (*mc.AgentOverview, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AgentOverview, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to send agent message: %v", err) - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to get agent overview: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &mc.AgentOverview{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind AgentOverview data error: %v", err) - return nil, err - } - - return info, nil + _, err := a.SendMessageWrapper(protocol.AgentOverview, nil, "failed to send agent overview message", -1, info, "AgentOverview") + return info, err } type AgentInfo struct { @@ -53,219 +28,56 @@ type AgentInfo struct { // 远程获取agent端的系统信息 func (a *Agent) AgentInfo() (*AgentInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AgentInfo, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &AgentInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind AgentInfo data error: %v", err) - return nil, err - } - - return info, nil + _, err := a.SendMessageWrapper(protocol.AgentInfo, nil, "failed to run script on agent", -1, info, "AgentInfo") + return info, err } // 远程获取agent端的系统信息 func (a *Agent) GetOSInfo() (*common.SystemInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.OsInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.SystemInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetOSInfo data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.OsInfo, struct{}{}, "failed to run script on agent", -1, info, "GetOSInfo") + return info, err } // 远程获取agent端的CPU信息 func (a *Agent) GetCPUInfo() (*common.CPUInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.CPUInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.CPUInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetCPUInfo data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.CPUInfo, struct{}{}, "failed to run script on agent", -1, info, "GetCPUInfo") + return info, err } // 远程获取agent端的内存信息 func (a *Agent) GetMemoryInfo() (*common.MemoryConfig, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.MemoryInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent: %s", err.Error()) - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.MemoryConfig{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetMemoryInfo data error: %v", err) - return nil, err - } + _, _ = a.SendMessageWrapper(protocol.MemoryInfo, struct{}{}, "failed to run script on agent", -1, info, "GetMemoryInfo") return info, nil } // 远程获取agent端的内核信息 func (a *Agent) GetSysctlInfo() (*map[string]string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.SysctlInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &map[string]string{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetSysctlInfo data error: %v", err) - return nil, err - } + _, _ = a.SendMessageWrapper(protocol.SysctlInfo, struct{}{}, "failed to run script on agent", -1, info, "GetSysctlInfo") return info, nil } // 查看某个内核参数的值 func (a *Agent) SysctlView(args string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.SysctlView, - Data: args, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, _ := a.SendMessageWrapper(protocol.SysctlView, args, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), nil } // 获取磁盘的使用情况 func (a *Agent) DiskUsage() ([]*common.DiskUsageINfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.DiskUsage, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &[]*common.DiskUsageINfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind DiskUsage data error: %v", err) - return nil, err - } + _, _ = a.SendMessageWrapper(protocol.DiskUsage, struct{}{}, "failed to run script on agent", -1, info, "DiskUsage") return *info, nil } // 获取磁盘的IO信息 func (a *Agent) DiskInfo() (*common.DiskIOInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.DiskInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.DiskIOInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind DiskInfo data error: %v", err) - return nil, err - } + _, _ = a.SendMessageWrapper(protocol.DiskInfo, struct{}{}, "failed to run script on agent", -1, info, "DiskInfo") return info, nil } @@ -275,254 +87,64 @@ func (a *Agent) DiskInfo() (*common.DiskIOInfo, error) { 2.挂载磁盘 */ func (a *Agent) DiskMount(sourceDisk, destPath string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.DiskMount, - Data: sourceDisk + "," + destPath, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return err.Error(), err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.DiskMount, sourceDisk+","+destPath, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), err } func (a *Agent) DiskUMount(diskPath string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.DiskUMount, - Data: diskPath, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return err.Error(), err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.DiskUMount, diskPath, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), err } func (a *Agent) DiskFormat(fileType, diskPath string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.DiskFormat, - Data: fileType + "," + diskPath, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.DiskFormat, fileType+","+diskPath, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), err } // 获取当前TCP网络连接信息 func (a *Agent) NetTCP() (*common.NetConnect, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.NetTCP, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.NetConnect{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind NetTCP data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.NetTCP, struct{}{}, "failed to run script on agent", -1, info, "NetTCP") + return info, err } // 获取当前UDP网络连接信息 func (a *Agent) NetUDP() (*common.NetConnect, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.NetUDP, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.NetConnect{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind NetUDP data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.NetUDP, struct{}{}, "failed to run script on agent", -1, info, "NetUDP") + return info, err } // 获取网络读写字节/包的个数 func (a *Agent) NetIOCounter() (*common.IOCnt, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.NetIOCounter, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.IOCnt{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind NetIOCounter data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.NetIOCounter, struct{}{}, "failed to run script on agent", -1, info, "NetIOCounter") + return info, err } // 获取网卡配置 func (a *Agent) NetNICConfig() (*common.NetInterfaceCard, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.NetNICConfig, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.NetInterfaceCard{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind NetNICConfig data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.NetNICConfig, struct{}{}, "failed to run script on agent", -1, info, "NetNICConfig") + return info, err } // 远程获取agent端的内核信息 func (a *Agent) GetAgentOSInfo() (*common.SystemAndCPUInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AgentOSInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.SystemAndCPUInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetAgentOSInfo data error: %v", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.AgentOSInfo, struct{}{}, "failed to run script on agent", -1, info, "GetAgentOSInfo") + return info, err } // 远程获取agent端的repo文件 func (a *Agent) GetRepoSource() ([]*common.RepoSource, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.GetRepoSource, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &[]*common.RepoSource{} - // must pass a pointer - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind data error: %v", err) - return nil, err - } - return *info, nil + _, err := a.SendMessageWrapper(protocol.GetRepoSource, struct{}{}, "failed to run script on agent", -1, info, "GetRepoSource") + return *info, err } // 远程获取agent端的时间信息 func (a *Agent) GetTimeInfo() (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AgentTime, - Data: struct{}{}, - } - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to get time on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to get time on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.AgentTime, struct{}{}, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), err } diff --git a/cmd/server/app/agentmanager/network.go b/cmd/server/app/agentmanager/network.go index 618b9bf0..42a01358 100644 --- a/cmd/server/app/agentmanager/network.go +++ b/cmd/server/app/agentmanager/network.go @@ -8,110 +8,32 @@ package agentmanager import ( - "fmt" - "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" - "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 远程获取agent端的网络连接信息 func (a *Agent) GetNetWorkConnectInfo() (*map[string]string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.GetNetWorkConnectInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &map[string]string{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetSysctlInfo data error:%s", err) - return nil, resp_message.Error, err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.GetNetWorkConnectInfo, struct{}{}, "failed to run script on agent", -1, info, "GetNetWorkConnectInfo") + return info, responseMessage.Error, err } // 获取agent的基础网络配置 func (a *Agent) GetNetWorkConnInfo() (*common.NetworkConfig, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.GetNetWorkConnInfo, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &common.NetworkConfig{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind GetNetWorkConnInfo data error:%s", err) - return nil, resp_message.Error, err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.GetNetWorkConnInfo, struct{}{}, "failed to run script on agent", -1, info, "GetNetWorkConnInfo") + return info, responseMessage.Error, err } // 获取网卡名字 func (a *Agent) GetNICName() (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.GetNICName, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.GetNICName, struct{}{}, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } // 重启网卡配置 func (a *Agent) RestartNetWork(NIC string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.RestartNetWork, - Data: NIC, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.RestartNetWork, NIC, "failed to run script on agent", -1, nil, "") + return responseMessage.Error, err } diff --git a/cmd/server/app/agentmanager/rpm.go b/cmd/server/app/agentmanager/rpm.go index c1f259a8..5f2843c3 100644 --- a/cmd/server/app/agentmanager/rpm.go +++ b/cmd/server/app/agentmanager/rpm.go @@ -13,61 +13,30 @@ import ( "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 获取全部安装的rpm包列表 func (a *Agent) AllRpm() ([]string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AllRpm, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } + responseMessage, err := a.SendMessageWrapper(protocol.AllRpm, struct{}{}, "failed to run script on agent", -1, nil, "") - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - - if v, ok := resp_message.Data.([]interface{}); ok { + if v, ok := responseMessage.Data.([]interface{}); ok { result := make([]string, len(v)) for i, item := range v { if str, ok := item.(string); ok { result[i] = str } } - return result, nil + return result, err } return nil, fmt.Errorf("failed to convert interface{} in allrpm") } // 获取源软件包名以及源 func (a *Agent) RpmSource(rpm string) (*common.RpmSrc, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.RpmSource, - Data: rpm, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &common.RpmSrc{} - err = resp_message.BindData(info) + responseMessage, err := a.SendMessageWrapper(protocol.RpmSource, rpm, "failed to run script on agent", -1, info, "RpmSource") + + err = responseMessage.BindData(info) if err != nil { logger.Error("bind RpmSource data error:%s", err) return nil, err @@ -77,72 +46,19 @@ func (a *Agent) RpmSource(rpm string) (*common.RpmSrc, error) { // 获取软件包信息 func (a *Agent) RpmInfo(rpm string) (*common.RpmInfo, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.RpmInfo, - Data: rpm, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, resp_message.Error, fmt.Errorf(resp_message.Error) - } - info := &common.RpmInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind RpmInfo data error:%s", err) - return nil, "", err - } - return info, resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.RpmInfo, rpm, "failed to run script on agent", -1, info, "RpmInfo") + return info, responseMessage.Error, err } // 安装软件包 func (a *Agent) InstallRpm(rpm string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.InstallRpm, - Data: rpm, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.InstallRpm, rpm, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } // 卸载软件包 func (a *Agent) RemoveRpm(rpm string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.RemoveRpm, - Data: rpm, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.RemoveRpm, rpm, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } diff --git a/cmd/server/app/agentmanager/service.go b/cmd/server/app/agentmanager/service.go index 2bc00686..7c11e666 100644 --- a/cmd/server/app/agentmanager/service.go +++ b/cmd/server/app/agentmanager/service.go @@ -8,131 +8,38 @@ package agentmanager import ( - "fmt" - "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" - "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 查看服务列表 func (a *Agent) ServiceList() ([]*common.ListService, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ServiceList, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &[]*common.ListService{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind ServiceList data error:%s", err) - return nil, err - } - return *info, nil + _, err := a.SendMessageWrapper(protocol.ServiceList, struct{}{}, "failed to run script on agent", -1, info, "ServiceList") + return *info, err } // 查看某个服务 func (a *Agent) GetService(service string) (*common.ServiceInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.GetService, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } serviceInfo := &common.ServiceInfo{} - err = resp_message.BindData(serviceInfo) - if err != nil { - logger.Error("bind GetServiceInfo data error:%s", err) - return nil, err - } - return serviceInfo, nil + _, err := a.SendMessageWrapper(protocol.GetService, struct{}{}, "failed to run script on agent", -1, info, "GetServiceInfo") + return serviceInfo, err } // 重启服务 func (a *Agent) ServiceRestart(service string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ServiceRestart, - Data: service, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.ServiceRestart, service, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } // 关闭服务 func (a *Agent) ServiceStop(service string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ServiceStop, - Data: service, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.ServiceStop, service, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } // 启动服务 func (a *Agent) ServiceStart(service string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.ServiceStart, - Data: service, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.ServiceStart, service, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } diff --git a/cmd/server/app/agentmanager/user.go b/cmd/server/app/agentmanager/user.go index 1d9cda29..3e39f036 100644 --- a/cmd/server/app/agentmanager/user.go +++ b/cmd/server/app/agentmanager/user.go @@ -8,110 +8,31 @@ package agentmanager import ( - "fmt" - "gitee.com/openeuler/PilotGo/pkg/utils/message/protocol" "gitee.com/openeuler/PilotGo/pkg/utils/os/common" - "gitee.com/openeuler/PilotGo/sdk/logger" - "github.com/google/uuid" ) // 获取当前用户信息 func (a *Agent) CurrentUser() (*common.CurrentUser, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.CurrentUser, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - - info := &common.CurrentUser{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind CurrentUser data error:%s", err) - return nil, err - } - return info, nil + _, err := a.SendMessageWrapper(protocol.CurrentUser, struct{}{}, "failed to run script on agent", -1, nil, "") + return info, err } // 获取所有用户的信息 func (a *Agent) AllUser() ([]*common.AllUserInfo, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AllUser, - Data: struct{}{}, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return nil, err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return nil, fmt.Errorf(resp_message.Error) - } - info := &[]*common.AllUserInfo{} - err = resp_message.BindData(info) - if err != nil { - logger.Error("bind AllUser data error:%s", err) - return nil, err - } + _, err := a.SendMessageWrapper(protocol.AllUser, struct{}{}, "failed to run script on agent", -1, info, "AllUser") return *info, nil } // 创建新的用户,并新建家目录 func (a *Agent) AddLinuxUser(username, password string) (string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.AddLinuxUser, - Data: username + "," + password, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), nil + responseMessage, err := a.SendMessageWrapper(protocol.AddLinuxUser, username+","+password, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), err } // 删除用户 func (a *Agent) DelUser(username string) (string, string, error) { - msg := &protocol.Message{ - UUID: uuid.New().String(), - Type: protocol.DelUser, - Data: username, - } - - resp_message, err := a.sendMessage(msg, true) - if err != nil { - logger.Error("failed to run script on agent") - return "", "", err - } - - if resp_message.Status == -1 || resp_message.Error != "" { - logger.Error("failed to run script on agent: %s", resp_message.Error) - return "", resp_message.Error, fmt.Errorf(resp_message.Error) - } - - return resp_message.Data.(string), resp_message.Error, nil + responseMessage, err := a.SendMessageWrapper(protocol.DelUser, username, "failed to run script on agent", -1, nil, "") + return responseMessage.Data.(string), responseMessage.Error, err } diff --git a/cmd/server/app/service/batch/batch.go b/cmd/server/app/service/batch/batch.go index 99f3a79b..7e0fcc17 100644 --- a/cmd/server/app/service/batch/batch.go +++ b/cmd/server/app/service/batch/batch.go @@ -104,13 +104,16 @@ func CreateBatch(batchinfo *CreateBatchParam) error { } // 查询所有批次 -func SelectBatch() ([]dao.Batch, error) { - return dao.GetBatch() +func SelectBatch() ([]Batch, error) { + var batch []Batch + batch, err := dao.GetBatch() + return batch, err } // 分页查询所有批次 func GetBatchPaged(offset, size int) (int64, []Batch, error) { - return dao.GetBatchrPaged(offset, size) + count, batchs, err := dao.GetBatchrPaged(offset, size) + return count, batchs, err } // 删除批次 @@ -119,6 +122,7 @@ func DeleteBatch(ids []int) error { err := dao.DeleteBatch(value) if err != nil { logger.Error(err.Error()) + return err } } return nil diff --git a/cmd/server/app/service/configmanage/configmanage.go b/cmd/server/app/service/configmanage/configmanage.go index 580035e5..485326ff 100644 --- a/cmd/server/app/service/configmanage/configmanage.go +++ b/cmd/server/app/service/configmanage/configmanage.go @@ -107,6 +107,7 @@ func DeleteConfig(fileIds []int) error { err = dao.DeleteHistoryConfigFile(fileId) if err != nil { logger.Error(err.Error()) + return err } } return nil @@ -184,5 +185,6 @@ func LastConfigFileRollBack(file *RollBackConfigFiles) error { } func GetConfigFilesPaged(offset, size int) (int64, []ConfigFiles, error) { - return dao.GetConfigFilesPaged(offset, size) + count, configFiles, err := dao.GetConfigFilesPaged(offset, size) + return count, configFiles, err } diff --git a/cmd/server/app/service/machine/machinemanager.go b/cmd/server/app/service/machine/machinemanager.go index ffd5b0de..e61f9339 100644 --- a/cmd/server/app/service/machine/machinemanager.go +++ b/cmd/server/app/service/machine/machinemanager.go @@ -57,7 +57,8 @@ func MachineInfo(depart *Depart, offset, size int) (int64, []dao.Res, error) { } func ReturnMachinePaged(departid, offset, size int) (int64, []dao.Res, error) { - return dao.ReturnMachinePaged(departid, offset, size) + count, list, err := dao.ReturnMachinePaged(departid, offset, size) + return count, list, err } // 插件调用 diff --git a/pkg/utils/crypto.go b/pkg/utils/crypto.go index ea49ad0a..b6978786 100644 --- a/pkg/utils/crypto.go +++ b/pkg/utils/crypto.go @@ -7,10 +7,17 @@ */ package utils -import "golang.org/x/crypto/bcrypt" +import ( + "fmt" + "golang.org/x/crypto/bcrypt" +) func CryptoPassword(data string) ([]byte, error) { - return bcrypt.GenerateFromPassword([]byte(data), bcrypt.DefaultCost) + if len([]byte(data)) <= 72 { + return bcrypt.GenerateFromPassword([]byte(data), bcrypt.DefaultCost) + } else { + return []byte{}, fmt.Errorf("长度超过72字节,无法使用该加密方式") + } } func ComparePassword(hash, pwd string) error { diff --git a/scripts/playbook/deploy_agent.yaml b/scripts/playbook/deploy_agent.yaml index 0861f776..74fff55c 100644 --- a/scripts/playbook/deploy_agent.yaml +++ b/scripts/playbook/deploy_agent.yaml @@ -13,6 +13,8 @@ mode: '0540' - name: restart PilotGo agent service - command: systemctl restart PilotGo-agent + service: + name: PilotGo-agent + state: restarted become: yes become_user: root \ No newline at end of file diff --git a/scripts/playbook/multi-machine.yml b/scripts/playbook/multi-machine.yml index da0b43fa..7d2ad450 100644 --- a/scripts/playbook/multi-machine.yml +++ b/scripts/playbook/multi-machine.yml @@ -1,6 +1,6 @@ --- - name: install redis for PilotGo platform - hosts: reids + hosts: redis become: yes become_user: root -- Gitee