#!/bin/bash # # Copyright 2015 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. USAGE='Usage: deploy_puppet.sh [-rsndh]' HELP="${USAGE}\n\n\ Force puppet deployment.\n\ The script will first fetch server hostnames from server db,\n\ given the server role and status and/or server name.\n\ And then force puppet deployment on the selected servers.\n\n\ Requirement: - Run on the machine that has access to server db and - Run it as chromeos-test.\n\ - The server must exist in server db, even if -n is used. It should be safe to rerun the script multiple time, \n\ as it doesn't hurt to deploy puppet multiple times.\n\n\ Options:\n\ -r server role as in server db, e.g. 'drone'.\n\ -s server status as in server db, e.g. 'primary'.\n\ -n server hostname.\n\ -d dryrun.\n\ -h help." ROLE= ROLE_OPT= STATUS= STATUS_OPT= HOSTNAME= DRYRUN="FALSE" AUTOTEST_ROOT="/usr/local/autotest" while getopts ":s:r:n:dh" opt; do case $opt in r) ROLE=$OPTARG ;; s) STATUS=$OPTARG ;; n) HOSTNAME=$OPTARG ;; d) DRYRUN="TRUE" ;; h) echo -e "${HELP}" >&2 exit 0 ;; \?) echo "Invalid option: -$OPTARG" >&2 echo -e "${HELP}" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 echo -e "${HELP}" >&2 exit 1 ;; esac done if [ -n "${ROLE}" ]; then ROLE_OPT="-r ${ROLE}" fi if [ -n "${STATUS}" ]; then STATUS_OPT="-s ${STATUS}" fi if [ -z "${ROLE}" ] && [ -z "${STATUS}" ] && [ -z "${HOSTNAME}"]; then echo "You must specify at least one of -r, -s or -n" exit 1 fi hosts="$(${AUTOTEST_ROOT}/cli/atest server list ${STATUS_OPT} ${ROLE_OPT} ${HOSTNAME}| grep Hostname| awk {'print $3'})" echo -e "\n******* Will update the following servers ********\n " for host in ${hosts}; do echo ${host} done echo -e "\n**************************************************\n" for host in ${hosts}; do git_pull="ssh -t ${host} -- 'sudo git --work-tree=/root/chromeos-admin --git-dir=/root/chromeos-admin/.git pull'" run_puppet="ssh ${host} -- 'sudo /root/chromeos-admin/puppet/run_puppet'" echo -e "\n********** Processing ${host} ****************\n" echo "[Running] ${git_pull}" if [ "${DRYRUN}" != "TRUE" ]; then eval ${git_pull} fi echo "[Running] ${run_puppet}" if [ "${DRYRUN}" != "TRUE" ]; then eval ${run_puppet} fi echo -e "\n********* Finished processing ${host} *******\n" done