Home | History | Annotate | Download | only in deploy_autotest
      1 #!/usr/bin/python
      2 
      3 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 """Module used to sync and deploy infrastructure changes for the lab team.
      8 
      9 This is a helper and used by lab_deploy which bootstraps and calls this utility
     10 once a user has logged into the main autotest server. This can be called
     11 directly if already on the autotest server.
     12 
     13 Usage:
     14   lab_deploy_helper.py  (sync,restart,print) (devservers, drones, scheduler)+.
     15 """
     16 import logging
     17 import sys
     18 
     19 import common
     20 from autotest_lib.client.common_lib.cros import dev_server
     21 from autotest_lib.client.common_lib import global_config
     22 from autotest_lib.server import hosts
     23 
     24 import common_util
     25 
     26 CONFIG = global_config.global_config
     27 
     28 
     29 def devserver_list():
     30     """Returns the list of devserver-type machines used by the infrastructure/
     31     """
     32     image_servers = dev_server.ImageServer.servers()
     33     crash_servers = dev_server.CrashServer.servers()
     34     return image_servers + crash_servers
     35 
     36 
     37 def autotest_scheduler_drones():
     38     """Returns tuple containing the autotest scheduler and list of drones."""
     39     autotest_master = CONFIG.get_config_value('scheduler', 'host', type=str,
     40                                               default=None)
     41     autotest_drones = CONFIG.get_config_value('scheduler', 'drones',
     42                                               type=list, default=[])
     43     return autotest_master, autotest_drones
     44 
     45 
     46 def devserver_restart(host):
     47     """SSH's in to |host| and restarts the devserver instance.
     48 
     49     This method uses puppet apply to restart the devserver instance on host.
     50     """
     51     logging.info('METHOD STUB called for restarting devserver on %s', host)
     52     # host.run('puppet apply devserver_start')
     53 
     54 
     55 def devserver_sync(host):
     56     """SSH's in to |host| and syncs the devserver.
     57 
     58     This method uses puppet apply to sync the devserver instance on host.
     59     """
     60     logging.info('METHOD STUB called for syncing devserver on %s', host)
     61     # host.run('puppet apply devserver_sync')
     62 
     63 
     64 def autotest_restart(host):
     65     """SSH's in to |host| and restarts autotest instance.
     66 
     67     This method uses puppet apply to restart autotest installed on the host.
     68     """
     69     logging.info('METHOD STUB called for restarting autotest on %s', host)
     70     # host.run('puppet apply autotest_start')
     71 
     72 
     73 def autotest_sync(host):
     74     """SSH's in to |host| and syncs autotest.
     75 
     76     This method uses puppet apply to sync autotest.
     77     """
     78     logging.info('METHOD STUB called for syncing autotest on %s', host)
     79     # host.run('puppet apply autotest_sync')
     80 
     81 
     82 def main(argv):
     83     common_util.setup_logging()
     84     args = common_util.parse_args(argv)
     85     requested_server_set = set(args.servers)
     86     devservers = devserver_list()
     87     master, drones = autotest_scheduler_drones()
     88 
     89     if args.operation == common_util.SYNC:
     90         if common_util.DEVS in requested_server_set:
     91             for server in devservers:
     92                 devserver_sync(hosts.SSHHost(server))
     93 
     94         if common_util.DRONES in requested_server_set:
     95             for server in drones:
     96                 autotest_sync(hosts.SSHHost(server))
     97 
     98         if common_util.SCHEDULER in requested_server_set:
     99             autotest_sync(master)
    100 
    101     elif args.operation == common_util.RESTART:
    102         if common_util.DEVS in requested_server_set:
    103             for server in devservers:
    104                 devserver_restart(hosts.SSHHost(server))
    105 
    106         if common_util.DRONES in requested_server_set:
    107             for server in drones:
    108                 autotest_restart(hosts.SSHHost(server))
    109 
    110         if common_util.SCHEDULER in requested_server_set:
    111             autotest_restart(master)
    112 
    113     elif args.operation == common_util.PRINT:
    114         if common_util.DEVS in requested_server_set:
    115             for server in devservers:
    116                 print server
    117 
    118         if common_util.DRONES in requested_server_set:
    119             for server in drones:
    120                 print server
    121 
    122         if common_util.SCHEDULER in requested_server_set:
    123             print master
    124 
    125     return 0
    126 
    127 
    128 if __name__ == '__main__':
    129     main(sys.argv[1:])
    130