| #!/usr/bin/python |
| |
| # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Module used to sync and deploy infrastructure changes for the lab team. |
| |
| This is a helper and used by lab_deploy which bootstraps and calls this utility |
| once a user has logged into the main autotest server. This can be called |
| directly if already on the autotest server. |
| |
| Usage: |
| lab_deploy_helper.py (sync,restart,print) (devservers, drones, scheduler)+. |
| """ |
| import logging |
| import sys |
| |
| import common |
| from autotest_lib.client.common_lib.cros import dev_server |
| from autotest_lib.client.common_lib import global_config |
| from autotest_lib.server import hosts |
| |
| import common_util |
| |
| CONFIG = global_config.global_config |
| |
| |
| def devserver_list(): |
| """Returns the list of devserver-type machines used by the infrastructure/ |
| """ |
| image_servers = dev_server.ImageServer.servers() |
| crash_servers = dev_server.CrashServer.servers() |
| return image_servers + crash_servers |
| |
| |
| def autotest_scheduler_drones(): |
| """Returns tuple containing the autotest scheduler and list of drones.""" |
| autotest_master = CONFIG.get_config_value('scheduler', 'host', type=str, |
| default=None) |
| autotest_drones = CONFIG.get_config_value('scheduler', 'drones', |
| type=list, default=[]) |
| return autotest_master, autotest_drones |
| |
| |
| def devserver_restart(host): |
| """SSH's in to |host| and restarts the devserver instance. |
| |
| This method uses puppet apply to restart the devserver instance on host. |
| """ |
| logging.info('METHOD STUB called for restarting devserver on %s', host) |
| # host.run('puppet apply devserver_start') |
| |
| |
| def devserver_sync(host): |
| """SSH's in to |host| and syncs the devserver. |
| |
| This method uses puppet apply to sync the devserver instance on host. |
| """ |
| logging.info('METHOD STUB called for syncing devserver on %s', host) |
| # host.run('puppet apply devserver_sync') |
| |
| |
| def autotest_restart(host): |
| """SSH's in to |host| and restarts autotest instance. |
| |
| This method uses puppet apply to restart autotest installed on the host. |
| """ |
| logging.info('METHOD STUB called for restarting autotest on %s', host) |
| # host.run('puppet apply autotest_start') |
| |
| |
| def autotest_sync(host): |
| """SSH's in to |host| and syncs autotest. |
| |
| This method uses puppet apply to sync autotest. |
| """ |
| logging.info('METHOD STUB called for syncing autotest on %s', host) |
| # host.run('puppet apply autotest_sync') |
| |
| |
| def main(argv): |
| common_util.setup_logging() |
| args = common_util.parse_args(argv) |
| requested_server_set = set(args.servers) |
| devservers = devserver_list() |
| master, drones = autotest_scheduler_drones() |
| |
| if args.operation == common_util.SYNC: |
| if common_util.DEVS in requested_server_set: |
| for server in devservers: |
| devserver_sync(hosts.SSHHost(server)) |
| |
| if common_util.DRONES in requested_server_set: |
| for server in drones: |
| autotest_sync(hosts.SSHHost(server)) |
| |
| if common_util.SCHEDULER in requested_server_set: |
| autotest_sync(master) |
| |
| elif args.operation == common_util.RESTART: |
| if common_util.DEVS in requested_server_set: |
| for server in devservers: |
| devserver_restart(hosts.SSHHost(server)) |
| |
| if common_util.DRONES in requested_server_set: |
| for server in drones: |
| autotest_restart(hosts.SSHHost(server)) |
| |
| if common_util.SCHEDULER in requested_server_set: |
| autotest_restart(master) |
| |
| elif args.operation == common_util.PRINT: |
| if common_util.DEVS in requested_server_set: |
| for server in devservers: |
| print server |
| |
| if common_util.DRONES in requested_server_set: |
| for server in drones: |
| print server |
| |
| if common_util.SCHEDULER in requested_server_set: |
| print master |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |