sendF_file.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package auto
  2. import (
  3. "fmt"
  4. "strconv"
  5. "xg_auto_deploy/internal/global"
  6. "xg_auto_deploy/internal/models"
  7. "xg_auto_deploy/internal/remote"
  8. "xg_auto_deploy/internal/utils"
  9. "golang.org/x/crypto/ssh"
  10. )
  11. func SendToNodes(nodeIds []string, local_file string, target_file string) {
  12. fmt.Println("SendToNodes: ", nodeIds, local_file, target_file)
  13. if nodeIds[0] == "all" {
  14. fmt.Println("is ALL")
  15. for _, nodeTemp := range global.ServerNodeConfigs {
  16. NodeId := nodeTemp.NodeId
  17. toNode(nodeTemp, NodeId, local_file, target_file)
  18. }
  19. return
  20. }
  21. if !IsNumericArray(nodeIds) {
  22. fmt.Println("传入指定节点参数错误,请检查:", nodeIds)
  23. return
  24. }
  25. global.Logs.Infoln("----------------开始发送文件----------------------------")
  26. for _, NodeId := range nodeIds {
  27. nodeTemp := global.ServerNodeConfigs[NodeId]
  28. toNode(nodeTemp, NodeId, local_file, target_file)
  29. }
  30. }
  31. func toNode(nodeTemp models.ServerNodeConfig, NodeId string, local_file string, target_file string) {
  32. if nodeTemp == (models.ServerNodeConfig{}) {
  33. global.Logs.Fatalf(" %s节点 配置不存在于配置文件中\n", NodeId)
  34. return
  35. }
  36. if local_file == "" {
  37. local_file = nodeTemp.LocalFile
  38. }
  39. if target_file == "" {
  40. target_file = nodeTemp.TargetFile
  41. }
  42. //传送文件
  43. //检测上传为文件还是文件夹
  44. ret, _ := utils.IsFileOrFolder(local_file)
  45. switch ret {
  46. case "file":
  47. err := remote.UploadFile(&nodeTemp, local_file, target_file)
  48. if err != nil {
  49. global.Logs.Fatalf("%s节点上传文件失败: %s\n", NodeId, err)
  50. return
  51. }
  52. global.Logs.Printf("%s节点上传文件成功\n", NodeId)
  53. case "folder":
  54. // 连接到远程主机
  55. client, err := ssh.Dial("tcp", nodeTemp.IpPort, nodeTemp.SSHClient)
  56. if err != nil {
  57. panic(err)
  58. }
  59. defer client.Close()
  60. // 检测远端文件夹是否存在,不存在则创建 [ ! -d "/DATA2/GT/test" ] && mkdir -p /DATA2/GT/test
  61. remote.SingleCmd(&nodeTemp, fmt.Sprintf(`[ ! -d "%s" ] && mkdir -p %s`, target_file, target_file))
  62. // 上传文件夹
  63. err = remote.UploadDir(&nodeTemp, local_file, target_file)
  64. if err != nil {
  65. panic(err)
  66. }
  67. global.Logs.Printf("%s节点上传文件成功\n", NodeId)
  68. }
  69. }
  70. func IsNumericArray(arr []string) bool {
  71. for _, str := range arr {
  72. _, err := strconv.ParseFloat(str, 64)
  73. if err != nil {
  74. return false
  75. }
  76. }
  77. return true
  78. }