普通文本  |  130行  |  4.05 KB

#!/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:])