123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package auto
- import (
- "fmt"
- "strconv"
- "xg_auto_deploy/internal/global"
- "xg_auto_deploy/internal/models"
- "xg_auto_deploy/internal/remote"
- "xg_auto_deploy/internal/utils"
- "golang.org/x/crypto/ssh"
- )
- func SendToNodes(nodeIds []string, local_file string, target_file string) {
- if nodeIds[0] == "all" {
- fmt.Println("is ALL")
- for _, nodeTemp := range global.ServerNodeConfigs {
- NodeId := nodeTemp.NodeId
- toNode(nodeTemp, NodeId, local_file, target_file)
- }
- return
- }
- if !IsNumericArray(nodeIds) {
- fmt.Println("传入指定节点参数错误,请检查:", nodeIds)
- return
- }
- global.Logs.Infoln("----------------开始发送文件----------------------------")
- for _, NodeId := range nodeIds {
- nodeTemp := global.ServerNodeConfigs[NodeId]
- toNode(nodeTemp, NodeId, local_file, target_file)
- }
- }
- func toNode(nodeTemp models.ServerNodeConfig, NodeId string, local_file string, target_file string) {
- if nodeTemp == (models.ServerNodeConfig{}) {
- global.Logs.Fatalf(" %s节点 配置不存在于配置文件中\n", NodeId)
- return
- }
- if local_file == "" {
- local_file = nodeTemp.LocalFile
- }
- if target_file == "" {
- target_file = nodeTemp.TargetFile
- }
- //传送文件
- //检测上传为文件还是文件夹
- ret, _ := utils.IsFileOrFolder(local_file)
- switch ret {
- case "file":
- err := remote.UploadFile(&nodeTemp, local_file, target_file)
- if err != nil {
- global.Logs.Fatalf("%s节点上传文件失败: %s\n", NodeId, err)
- return
- }
- global.Logs.Printf("%s节点上传文件成功\n", NodeId)
- case "folder":
- // 连接到远程主机
- client, err := ssh.Dial("tcp", nodeTemp.IpPort, nodeTemp.SSHClient)
- if err != nil {
- panic(err)
- }
- defer client.Close()
- // 检测远端文件夹是否存在,不存在则创建 [ ! -d "/DATA2/GT/test" ] && mkdir -p /DATA2/GT/test
- remote.SingleCmd(&nodeTemp, fmt.Sprintf(`[ ! -d "%s" ] && mkdir -p %s`, target_file, target_file))
- // 上传文件夹
- err = remote.UploadDir(&nodeTemp, local_file, target_file)
- if err != nil {
- panic(err)
- }
- global.Logs.Printf("%s节点上传文件成功\n", NodeId)
- }
- }
- func IsNumericArray(arr []string) bool {
- for _, str := range arr {
- _, err := strconv.ParseFloat(str, 64)
- if err != nil {
- return false
- }
- }
- return true
- }
|