| OLD | NEW | 
|    1 import cPickle, os, tempfile, logging |    1 import cPickle, os, tempfile, logging | 
|    2 import common |    2 import common | 
|    3 from autotest_lib.scheduler import drone_utility, email_manager |    3 from autotest_lib.scheduler import drone_utility, email_manager | 
|    4 from autotest_lib.client.common_lib import error, global_config |    4 from autotest_lib.client.common_lib import error, global_config | 
|    5  |    5  | 
|    6  |    6  | 
|    7 AUTOTEST_INSTALL_DIR = global_config.global_config.get_config_value('SCHEDULER', |    7 AUTOTEST_INSTALL_DIR = global_config.global_config.get_config_value('SCHEDULER', | 
|    8                                                  'drone_installation_directory') |    8                                                  'drone_installation_directory') | 
|    9  |    9  | 
 |   10 class DroneUnreachable(Exception): | 
 |   11     """The drone is non-sshable.""" | 
 |   12     pass | 
 |   13  | 
 |   14  | 
|   10 class _AbstractDrone(object): |   15 class _AbstractDrone(object): | 
|   11     """ |   16     """ | 
|   12     Attributes: |   17     Attributes: | 
|   13     * allowed_users: set of usernames allowed to use this drone.  if None, |   18     * allowed_users: set of usernames allowed to use this drone.  if None, | 
|   14             any user can use this drone. |   19             any user can use this drone. | 
|   15     """ |   20     """ | 
|   16     def __init__(self): |   21     def __init__(self): | 
|   17         self._calls = [] |   22         self._calls = [] | 
|   18         self.hostname = None |   23         self.hostname = None | 
|   19         self.enabled = True |   24         self.enabled = True | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  104         else: |  109         else: | 
|  105             self.queue_call('send_file_to', drone.hostname, source_path, |  110             self.queue_call('send_file_to', drone.hostname, source_path, | 
|  106                             destination_path, can_fail) |  111                             destination_path, can_fail) | 
|  107  |  112  | 
|  108  |  113  | 
|  109 class _RemoteDrone(_AbstractDrone): |  114 class _RemoteDrone(_AbstractDrone): | 
|  110     def __init__(self, hostname): |  115     def __init__(self, hostname): | 
|  111         super(_RemoteDrone, self).__init__() |  116         super(_RemoteDrone, self).__init__() | 
|  112         self.hostname = hostname |  117         self.hostname = hostname | 
|  113         self._host = drone_utility.create_host(hostname) |  118         self._host = drone_utility.create_host(hostname) | 
 |  119         if not self._host.is_up(): | 
 |  120             logging.error('Drone %s is unpingable, kicking out', hostname) | 
 |  121             raise DroneUnreachable | 
|  114         self._autotest_install_dir = AUTOTEST_INSTALL_DIR |  122         self._autotest_install_dir = AUTOTEST_INSTALL_DIR | 
|  115  |  123  | 
|  116  |  124  | 
|  117     def set_autotest_install_dir(self, path): |  125     def set_autotest_install_dir(self, path): | 
|  118         self._autotest_install_dir = path |  126         self._autotest_install_dir = path | 
|  119  |  127  | 
|  120  |  128  | 
|  121     def shutdown(self): |  129     def shutdown(self): | 
|  122         super(_RemoteDrone, self).shutdown() |  130         super(_RemoteDrone, self).shutdown() | 
|  123         self._host.close() |  131         self._host.close() | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  149             self.queue_call('send_file_to', drone.hostname, source_path, |  157             self.queue_call('send_file_to', drone.hostname, source_path, | 
|  150                             destination_path, can_fail) |  158                             destination_path, can_fail) | 
|  151  |  159  | 
|  152  |  160  | 
|  153 def get_drone(hostname): |  161 def get_drone(hostname): | 
|  154     """ |  162     """ | 
|  155     Use this factory method to get drone objects. |  163     Use this factory method to get drone objects. | 
|  156     """ |  164     """ | 
|  157     if hostname == 'localhost': |  165     if hostname == 'localhost': | 
|  158         return _LocalDrone() |  166         return _LocalDrone() | 
|  159     return _RemoteDrone(hostname) |  167     try: | 
 |  168         return _RemoteDrone(hostname) | 
 |  169     except DroneUnreachable: | 
 |  170         return None | 
| OLD | NEW |