Guest User

Untitled

a guest
Apr 28th, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. require 'thread'
  2. require 'net/ssh'
  3. require 'term/ansicolor'
  4. require 'rubygems'
  5. include Term::ANSIColor
  6.  
  7.  
  8. ##Several instances of this class are created in the class above this one
  9. ##then doTasks is called on each one which begins the threading..
  10.  
  11. class TaskRunner
  12.  
  13. @myServer # The server to run tasks on
  14. @myPassword
  15. @myUsername
  16. @myTasks = Array.new()# An array of tasks to run
  17. @myCurrentTask
  18. @myWaitingForManualAction = false
  19. @myConnected = false
  20. @myLogger = nil
  21. attr_accessor :waitingForManualAction
  22.  
  23. def initialize(aServer, arrayOfTasks, aLogger, aUsername, aPassword)
  24. @myServer = aServer
  25. @myTasks = arrayOfTasks
  26. @myUsername = aUsername
  27. @myPassword = aPassword
  28. @myLogger = aLogger
  29. end
  30.  
  31. def doTasks()
  32. @myLogger.info("[Task Runner] About to start a new thread for host #{@myServer}")
  33.  
  34. #Hook up our callbacks
  35. @myTasks.each do |task|
  36. task = self.method(:error)
  37. end
  38.  
  39. @myTasks.each do |task|
  40. task.onManual = self.method(:handleManualTask)
  41. end
  42.  
  43. t = Thread.new {
  44. #This is a single thread of excutrion for running task one per server
  45. Net::SSH.start(@myServer,@myUsername,:keys => '/home/steven/.ssh/id_dsa',:logger => @myLogger) do |ssh|
  46. puts "[#{@myServer}][Task Runner] Running tasks".green
  47. @myTasks[0].setSSHConnection(ssh,true)
  48. @myTasks[0].execAllTasks()
  49. end
  50. }
  51. @myLogger.debug("Thread created for server #{@myServer}")
  52. return t
  53. end
  54.  
  55. #This is used as a callback target for when errors occur execurting tasks
  56. def error(task)
  57. puts "[#{myServer}][Task Runner] An error occured excuting task #{task.taskName}\n".red
  58. puts "[#{myServer}][Task Runner] Aborting connection\n".red
  59. task.abort()
  60. end
  61.  
  62. def finished(task)
  63. @currentTask = task.myNextTask
  64. puts "[#{myServer}][Task Runner] Finished task #{task.taskName}".green
  65. end
  66.  
  67. #This is a callback that is called from SshTask
  68. def handleManualTask(task)
  69. $semaphore.synchronize {
  70. puts "[#{@myServer}][Task Runner] Manual task #{task.taskName} Run ? Y/N :> ".yellow.bold
  71. answer = gets()
  72. answer.upcase!
  73. if (answer == 'Y')
  74. return true
  75. else
  76. @waitingForManualAction = true
  77. #Makey sure currentTask is pointing to the right one now
  78. @currentTask = task
  79. return false
  80. end
  81. }
  82. end
  83. end
Add Comment
Please, Sign In to add comment