From 9c9c776213478023d4cab6290efcb6adfdbbbe86 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Wed, 20 Apr 2022 13:01:51 +0200 Subject: [PATCH] Refactor deployment scripts --- README.md | 5 +-- deploy.sh | 91 --------------------------------------------------- deploy_nixos | 12 +++++++ deploy_pki | 34 +++++++++++++++++++ sshtool | 83 ++++++++++++++++++++++++++++++++++++++++++++++ upgrade.sh | 51 ----------------------------- upgrade_nixos | 11 +++++++ 7 files changed, 143 insertions(+), 144 deletions(-) delete mode 100755 deploy.sh create mode 100755 deploy_nixos create mode 100755 deploy_pki create mode 100755 sshtool delete mode 100755 upgrade.sh create mode 100755 upgrade_nixos diff --git a/README.md b/README.md index 9204a23..d993362 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,10 @@ It sets up the following: The following scripts are available here: +- `deploy_nixos`, the main script that updates the NixOS config - `genpki.sh`, a script to generate Consul and Nomad's TLS PKI (run this once only) -- `deploy.sh`, the main script that updates the NixOS config and sets up all of the TLS secrets -- `upgrade.sh`, a script to upgrade NixOS +- `deploy_pki`, a script that sets up all of the TLS secrets +- `upgrade_nixos`, a script to upgrade NixOS - `tlsproxy.sh`, a script that allows non-TLS access to the TLS-secured Consul and Nomad, by running a simple local proxy with socat - `tlsenv.sh`, a script to be sourced (`source tlsenv.sh`) that configures the correct environment variables to use the Nomad and Consul CLI tools with TLS diff --git a/deploy.sh b/deploy.sh deleted file mode 100755 index 8dcf3a8..0000000 --- a/deploy.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash - -# Get cluster subdirectory name - -cd $(dirname $0) - -CLUSTER="$1" -if [ -z "$CLUSTER" ] || [ ! -d "cluster/$CLUSTER" ]; then - echo "Usage: $0 " - echo "The cluster name must be the name of a subdirectory of cluster/" - exit 1 -fi -shift 1 - -# Do actual stuff - -if [ -z "$1" ]; then - NIXHOSTLIST=$(ls cluster/$CLUSTER/node | grep -v '\.site\.') -else - NIXHOSTLIST="$@" -fi - -TMP_PATH=/tmp/tmp-deploy-$(date +%s) -SSH_CONFIG=cluster/$CLUSTER/ssh_config -YEAR=$(date +%Y) - -for NIXHOST in $NIXHOSTLIST; do - NIXHOST=${NIXHOST%.*} - - if [ -z "$SSH_USER" ]; then - SSH_DEST=$NIXHOST - else - SSH_DEST=$SSH_USER@$NIXHOST - fi - - echo "==== DOING $NIXHOST ====" - - echo "Sending NixOS config files" - - ssh -F $SSH_CONFIG $SSH_DEST mkdir -p $TMP_PATH $TMP_PATH/pki - cat nix/configuration.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/configuration.nix > /dev/null - cat nix/deuxfleurs.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/deuxfleurs.nix > /dev/null - cat nix/remote-unlock.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/remote-unlock.nix > /dev/null - cat nix/wesher.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/wesher.nix > /dev/null - cat nix/wesher_service.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/wesher_service.nix > /dev/null - cat cluster/$CLUSTER/cluster.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/cluster.nix > /dev/null - cat cluster/$CLUSTER/node/$NIXHOST.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/node.nix > /dev/null - cat cluster/$CLUSTER/node/$NIXHOST.site.nix | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/site.nix > /dev/null - - echo "Sending secret files" - for SECRET in pki/consul-ca.crt pki/consul$YEAR.crt pki/consul$YEAR.key \ - pki/consul$YEAR-client.crt pki/consul$YEAR-client.key \ - pki/nomad-ca.crt pki/nomad$YEAR.crt pki/nomad$YEAR.key; do - test -f cluster/$CLUSTER/secrets/$SECRET && (cat cluster/$CLUSTER/secrets/$SECRET | ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/$SECRET > /dev/null) - done - - echo "Rebuilding NixOS" - - ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_PATH/deploy.sh > /dev/null <" + echo "The cluster name must be the name of a subdirectory of cluster/" + exit 1 +fi +shift 1 + +if [ -z "$1" ]; then + NIXHOSTLIST=$(ls cluster/$CLUSTER/node | grep -v '\.site\.') +else + NIXHOSTLIST="$@" +fi + +if [ -z "$ROOT_PASS" ]; then + read -s -p "Enter remote root password: " ROOT_PASS + echo +fi + +SSH_CONFIG=cluster/$CLUSTER/ssh_config + +function header { + cat < /tmp/deploytool_askpass < /dev/null +$(base64 <$FROM) +EOG +EOF +} + +for NIXHOST in $NIXHOSTLIST; do + NIXHOST=${NIXHOST%.*} + + if [ -z "$SSH_USER" ]; then + SSH_DEST=$NIXHOST + else + SSH_DEST=$SSH_USER@$NIXHOST + fi + + echo "==== DOING $NIXHOST ====" + + (header; . $CMDFILE; footer) | ssh -F $SSH_CONFIG $SSH_DEST sh - +done diff --git a/upgrade.sh b/upgrade.sh deleted file mode 100755 index cb45924..0000000 --- a/upgrade.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash - -# Get cluster subdirectory name - -cd $(dirname $0) - -CLUSTER="$1" -if [ -z "$CLUSTER" ] || [ ! -d "cluster/$CLUSTER" ]; then - echo "Usage: $0 " - echo "The cluster name must be the name of a subdirectory of cluster/" - exit 1 -fi -shift 1 - -# Do actual stuff - -if [ -z "$@" ]; then - NIXHOSTLIST=$(ls cluster/$CLUSTER/node | grep -v '\.site\.') -else - NIXHOSTLIST="$@" -fi - -TMP_SCRIPT=/tmp/tmp-upgrade-$(date +%s).sh -SSH_CONFIG=cluster/$CLUSTER/ssh_config - -for NIXHOST in $NIXHOSTLIST; do - NIXHOST=${NIXHOST%.*} - - if [ -z "$SSH_USER" ]; then - SSH_DEST=$NIXHOST - else - SSH_DEST=$SSH_USER@$NIXHOST - fi - - echo "==== DOING $NIXHOST ====" - - ssh -F $SSH_CONFIG $SSH_DEST tee $TMP_SCRIPT > /dev/null <