Deploy in one ssh login in a further attempt to avoid hitting GCP login quota

This commit is contained in:
Michael Vines 2018-07-17 20:19:52 -07:00
parent 611a005ec9
commit 85d6627ee6
1 changed files with 20 additions and 18 deletions

View File

@ -49,7 +49,6 @@ while read -r vmName vmZone status; do
vmlist+=("$vmName:$vmZone") vmlist+=("$vmName:$vmZone")
done < <(gcloud compute instances list --filter="$filter" --format 'value(name,zone,status)') done < <(gcloud compute instances list --filter="$filter" --format 'value(name,zone,status)')
wait_for_node() { wait_for_node() {
declare pid=$1 declare pid=$1
@ -66,14 +65,17 @@ wait_for_node() {
echo "--- Refreshing leader for $publicUrl" echo "--- Refreshing leader for $publicUrl"
leader=true leader=true
pids=() pids=()
count=1
for info in "${vmlist[@]}"; do for info in "${vmlist[@]}"; do
nodePosition="($count/${#vmlist[*]})"
vmName=${info%:*} vmName=${info%:*}
vmZone=${info#*:} vmZone=${info#*:}
echo "Starting refresh for $vmName" echo "Starting refresh for $vmName $nodePosition"
( (
SECONDS=0 SECONDS=0
echo "--- $vmName in zone $vmZone" echo "--- $vmName in zone $vmZone $nodePosition"
if $leader; then if $leader; then
nodeConfig="mode=leader+drone metrics-config=$SOLANA_METRICS_CONFIG" nodeConfig="mode=leader+drone metrics-config=$SOLANA_METRICS_CONFIG"
if [[ -n $SOLANA_CUDA ]]; then if [[ -n $SOLANA_CUDA ]]; then
@ -82,23 +84,22 @@ for info in "${vmlist[@]}"; do
else else
nodeConfig="mode=validator metrics-config=$SOLANA_METRICS_CONFIG leader-address=$publicIp" nodeConfig="mode=validator metrics-config=$SOLANA_METRICS_CONFIG leader-address=$publicIp"
fi fi
cat > "autogen-refresh-$vmName.sh" <<EOF
set -x
logmarker="solana deploy $(date)/$RANDOM"
sudo snap remove solana
logger \$logmarker
sudo snap install solana --$SOLANA_SNAP_CHANNEL --devmode
sudo snap set solana $nodeConfig
snap info solana
sleep 2 # Slight delay to get more syslog output
sudo grep -Pzo "\$logmarker(.|\\n)*" /var/log/syslog
EOF
set -x set -x
gcloud compute scp --zone "$vmZone" "autogen-refresh-$vmName.sh" "$vmName":
gcloud compute ssh "$vmName" --zone "$vmZone" \ gcloud compute ssh "$vmName" --zone "$vmZone" \
--ssh-flag="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -t" \ --ssh-flag="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -t" \
--command="bash ./autogen-refresh-$vmName.sh" --command="\
set -ex; \
logmarker='solana deploy $(date)/$RANDOM'; \
sudo snap remove solana; \
logger \$logmarker; \
sudo snap install solana --$SOLANA_SNAP_CHANNEL --devmode; \
sudo snap set solana $nodeConfig; \
snap info solana; \
echo Slight delay to get more syslog output; \
sleep 2; \
sudo grep -Pzo \"\$logmarker(.|\\n)*\" /var/log/syslog \
"
echo "Succeeded in ${SECONDS} seconds" echo "Succeeded in ${SECONDS} seconds"
) > "log-$vmName.txt" 2>&1 & ) > "log-$vmName.txt" 2>&1 &
pid=$! pid=$!
@ -113,13 +114,14 @@ EOF
echo "--- Refreshing validators" echo "--- Refreshing validators"
else else
# Slow down deployment to ~30 machines a minute to avoid triggering GCP login # Slow down deployment to ~20 machines a minute to avoid triggering GCP login
# quota limits (the previous |scp| and |ssh| each count as a login) # quota limits (each |ssh| counts as a login)
sleep 3 sleep 3
pids+=("$pid") pids+=("$pid")
fi fi
leader=false leader=false
count=$((count + 1))
done done
echo --- Waiting for validators echo --- Waiting for validators