96 lines
2.3 KiB
Bash
Executable file
96 lines
2.3 KiB
Bash
Executable file
#!/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
|
|
run_puppet="ssh ${host} -- 'sudo /root/chromeos-admin/puppet/sync_and_run_puppet -f'"
|
|
echo -e "\n********** Processing ${host} ****************\n"
|
|
echo "[Running] ${run_puppet}"
|
|
if [ "${DRYRUN}" != "TRUE" ]; then
|
|
eval ${run_puppet}
|
|
fi
|
|
echo -e "\n********* Finished processing ${host} *******\n"
|
|
done
|