#!/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 sync and deploy infrastructure changes for the lab team. This is the main utility for syncing and deploying changes to the autotest infrastructure defined by the autotest config. Usage: lab_deploy.py (sync,restart,print) (devservers, drones, scheduler)+. """ import logging import os import sys import common from autotest_lib.client.common_lib import global_config from autotest_lib.client.common_lib import utils import common_util CONFIG = global_config.global_config _AUTOTEST_PATH = '/usr/local/autotest' _HELPER_PATH = 'site_utils/deploy_autotest' def autotest_master(): """Returns the autotest master that has the infrastructure configuration.""" autotest_master = CONFIG.get_config_value('SERVER', 'hostname', type=str, default=None) return autotest_master def autotest_user(): """Returns the valid list of autotest users we can 'become' on the master. """ autotest_user = CONFIG.get_config_value('CROS', 'infrastructure_user', type=str) return autotest_user def main(argv): common_util.setup_logging() # We parse even though we don't use args here to ensure our args are valid # before we ssh anywhere. common_util.parse_args(argv) master = autotest_master() # Take the first user. main_user = autotest_user() remote_path = os.path.join(_AUTOTEST_PATH, _HELPER_PATH) command = ('ssh %(master)s -- become %(user)s -- ' '%(remote_path)s/lab_deploy_helper.py %(argv)s' % dict(remote_path=remote_path, master=master, user=main_user, argv=' '.join(argv))) logging.info('Running %s' % command) utils.run(command, stderr_tee=sys.stderr, stdout_tee=sys.stdout) if __name__ == '__main__': main(sys.argv[1:])