Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'thread'
- require 'net/ssh'
- require 'term/ansicolor'
- require 'rubygems'
- include Term::ANSIColor
- ##Several instances of this class are created in the class above this one
- ##then doTasks is called on each one which begins the threading..
- class TaskRunner
- @myServer # The server to run tasks on
- @myPassword
- @myUsername
- @myTasks = Array.new()# An array of tasks to run
- @myCurrentTask
- @myWaitingForManualAction = false
- @myConnected = false
- @myLogger = nil
- attr_accessor :waitingForManualAction
- def initialize(aServer, arrayOfTasks, aLogger, aUsername, aPassword)
- @myServer = aServer
- @myTasks = arrayOfTasks
- @myUsername = aUsername
- @myPassword = aPassword
- @myLogger = aLogger
- end
- def doTasks()
- @myLogger.info("[Task Runner] About to start a new thread for host #{@myServer}")
- #Hook up our callbacks
- @myTasks.each do |task|
- task = self.method(:error)
- end
- @myTasks.each do |task|
- task.onManual = self.method(:handleManualTask)
- end
- t = Thread.new {
- #This is a single thread of excutrion for running task one per server
- Net::SSH.start(@myServer,@myUsername,:keys => '/home/steven/.ssh/id_dsa',:logger => @myLogger) do |ssh|
- puts "[#{@myServer}][Task Runner] Running tasks".green
- @myTasks[0].setSSHConnection(ssh,true)
- @myTasks[0].execAllTasks()
- end
- }
- @myLogger.debug("Thread created for server #{@myServer}")
- return t
- end
- #This is used as a callback target for when errors occur execurting tasks
- def error(task)
- puts "[#{myServer}][Task Runner] An error occured excuting task #{task.taskName}\n".red
- puts "[#{myServer}][Task Runner] Aborting connection\n".red
- task.abort()
- end
- def finished(task)
- @currentTask = task.myNextTask
- puts "[#{myServer}][Task Runner] Finished task #{task.taskName}".green
- end
- #This is a callback that is called from SshTask
- def handleManualTask(task)
- $semaphore.synchronize {
- puts "[#{@myServer}][Task Runner] Manual task #{task.taskName} Run ? Y/N :> ".yellow.bold
- answer = gets()
- answer.upcase!
- if (answer == 'Y')
- return true
- else
- @waitingForManualAction = true
- #Makey sure currentTask is pointing to the right one now
- @currentTask = task
- return false
- end
- }
- end
- end
Add Comment
Please, Sign In to add comment