diff --git a/net/scripts/colo-node-onacquire-sh b/net/scripts/colo-node-onacquire-sh new file mode 100644 index 0000000000..b3a7115cb7 --- /dev/null +++ b/net/scripts/colo-node-onacquire-sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +# XXX: This file isn't *quite* a script. It is intended to be passed via stdin +# to a node to requisition logic up node creation. Currently this is done in +# colo_node_requisition using the eval-cat trick. While this gets us what we +# want, care must be taken to ensure variable expansion happens at the right +# time. Any unescaped variable references ($X) in this file will be expanded by +# eval in colo_node_requisition. Escaped variable references (\$X) will be +# expanded upon execution on the remote node. + +if [ ! -f "$SOLANA_LOCK_FILE" ]; then + exec 9>>"$SOLANA_LOCK_FILE" + flock -x -n 9 || exit 1 + [ -n "\$SOLANA_USER" ] && { + echo "export SOLANA_LOCK_USER=\$SOLANA_USER" + echo "export SOLANA_LOCK_INSTANCENAME=$INSTANCE_NAME" + echo "[ -v SSH_TTY -a -f \"\${HOME}/.solana-motd\" ] && cat \"\${HOME}/.solana-motd\" 1>&2" + } >&9 || ( rm "$SOLANA_LOCK_FILE" && false ) + 9>&- + cat > /solana-scratch/id_ecdsa < /solana-scratch/id_ecdsa.pub < /solana-scratch/authorized_keys < /dev/null) +$(cat "${SSH_PRIVATE_KEY}.pub") +EOAK + cp /solana-scratch/id_ecdsa "\${HOME}/.ssh/id_ecdsa" + cp /solana-scratch/id_ecdsa.pub "\${HOME}/.ssh/id_ecdsa.pub" + cp /solana-scratch/authorized_keys "\${HOME}/.ssh/authorized_keys" + cat > "\${HOME}/.solana-motd" <"$SOLANA_LOCK_FILE" + flock -x -n 9 || exit 1 + . "$SOLANA_LOCK_FILE" + if [ "\$SOLANA_LOCK_USER" = "\$SOLANA_USER" ]; then + git clean -qxdff + rm -f /solana-scratch/* /solana-scratch/.[^.]* + cat > "\${HOME}/.ssh/authorized_keys" < /dev/null) +EOAK + RC=true + fi + 9>&- +fi +\$RC + diff --git a/net/scripts/colo-utils.sh b/net/scripts/colo-utils.sh index aedc2db748..20e677b5e8 100644 --- a/net/scripts/colo-utils.sh +++ b/net/scripts/colo-utils.sh @@ -175,52 +175,19 @@ colo_node_status_all() { export COLO_RES_REQUISITIONED=() colo_node_requisition() { declare IP=$1 + # shellcheck disable=SC2034 declare INSTANCE_NAME=$2 + # shellcheck disable=SC2034 declare SSH_PRIVATE_KEY="$3" declare INDEX INDEX=$(colo_res_index_from_ip "$IP") declare RC=false - colo_instance_run "$IP" "$( -cat <>"$SOLANA_LOCK_FILE" - flock -x -n 9 || exit 1 - [ -n "\$SOLANA_USER" ] && { - echo "export SOLANA_LOCK_USER=\$SOLANA_USER" - echo "export SOLANA_LOCK_INSTANCENAME=$INSTANCE_NAME" - echo "[ -v SSH_TTY -a -f \"\${HOME}/.solana-motd\" ] && cat \"\${HOME}/.solana-motd\" 1>&2" - } >&9 || ( rm "$SOLANA_LOCK_FILE" && false ) - 9>&- - cat > /solana-scratch/id_ecdsa < /solana-scratch/id_ecdsa.pub < /solana-scratch/authorized_keys < /dev/null) -$(cat "${SSH_PRIVATE_KEY}.pub") -EOAK - cp /solana-scratch/id_ecdsa "\${HOME}/.ssh/id_ecdsa" - cp /solana-scratch/id_ecdsa.pub "\${HOME}/.ssh/id_ecdsa.pub" - cp /solana-scratch/authorized_keys "\${HOME}/.ssh/authorized_keys" - cat > "\${HOME}/.solana-motd" <"$SOLANA_LOCK_FILE" - flock -x -n 9 || exit 1 - . "$SOLANA_LOCK_FILE" - if [ "\$SOLANA_LOCK_USER" = "\$SOLANA_USER" ]; then - git clean -qxdff - rm -f /solana-scratch/* /solana-scratch/.[^.]* - cat > "\${HOME}/.ssh/authorized_keys" < /dev/null) -EOAK - RC=true - fi - 9>&- - fi - \$RC + colo_instance_run "$IP" "$(eval "cat <