class SshRebooter(object): r""" @summary: Reboots a target using SSH. boot the SshProcess. create one process per target. """ def __init__(self, target, defaultCommand=None): if not isinstance(target, BaseSshTarget): raise InvalidTargetError(target) self._target = target self._defaultCommand = defaultCommand self._sendBufferTimeout = target.sendBufferTimeout() self._qRx = Queue() self._qTx = Queue() self._synchroniser = Synchroniser() self._sendMutex = Semaphore(1) self._threads = {"rx":None} self._close = False self._process = None self._startLock = Semaphore(1) def _start(self): with self._startLock: self._synchroniser.checkDestroyed() if self._process!=None: return try: sem = Semaphore(0) self._process = bootstrapSshProcess(self._target, self._qRx, self._qTx, sem) sem.acquire() # Now start the read thread: t = threading.Thread(target=self._rx) t.setName("SSHRebooter_%(T)s"%{"T":self._target.uId()}) t.setDaemon(True) t.start() self._threads["rx"] = t except Exception, _e: # Cleanup. self.terminate()
def __init__(self, target, defaultCommand=None): if not isinstance(target, BaseSshTarget): raise InvalidTargetError(target) self._target = target self._defaultCommand = defaultCommand self._sendBufferTimeout = target.sendBufferTimeout() self._qRx = Queue() self._qTx = Queue() self._synchroniser = Synchroniser() self._sendMutex = Semaphore(1) self._threads = {"rx":None} self._close = False self._process = None self._startLock = Semaphore(1)