#!/usr/bin/env bash set -euo pipefail # === METADATA === SCRIPT_NAME="$(basename "$0")" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" SKILL_ROOT="$(dirname "$SCRIPT_DIR")" # === CONFIGURATION === : "${OPERATOR_NAME:?OPERATOR_NAME required}" : "${OPERATOR_EMAIL:?OPERATOR_EMAIL required}" : "${NODE_NAME:=node-a}" : "${SSH_KEY_COMMENT:=$NODE_NAME-operator}" : "${GPG_KEY_SIZE:=4096}" : "${GPG_KEY_EXPIRE:=2y}" : "${OUTPUT_DIR:=$SKILL_ROOT/outputs}" # === FUNCTIONS === log_info() { echo "[INFO] $(date -Iseconds) $*"; } log_warn() { echo "[WARN] $(date -Iseconds) $*" >&2; } main() { log_info "Starting $SCRIPT_NAME (PLAN ONLY - no changes made)..." echo "" echo "============================================" echo " IDENTITY SETUP PLAN" echo " Node: $NODE_NAME" echo "============================================" echo "" echo "=== GPG Key Configuration ===" echo " Name: $OPERATOR_NAME" echo " Email: $OPERATOR_EMAIL" echo " Key Size: $GPG_KEY_SIZE bits (RSA)" echo " Expiry: $GPG_KEY_EXPIRE" echo " Location: ~/.gnupg/" echo "" echo "=== SSH Key Configuration ===" echo " Primary: Ed25519 (~/.ssh/id_ed25519_${NODE_NAME})" echo " Fallback: RSA-4096 (~/.ssh/id_rsa_${NODE_NAME})" echo " Comment: $SSH_KEY_COMMENT" echo "" echo "=== SSH Config Changes ===" echo " File: ~/.ssh/config" echo " Backup: ~/.ssh/config.bak.$(date +%Y%m%d)" echo " Addition: Host alias for $NODE_NAME" echo "" # Check for existing keys if [[ -f "$HOME/.ssh/id_ed25519_${NODE_NAME}" ]]; then log_warn "SSH key already exists at ~/.ssh/id_ed25519_${NODE_NAME}" log_warn "Apply will skip SSH key creation (idempotent)" fi if gpg --list-keys "$OPERATOR_EMAIL" &>/dev/null 2>&1; then log_warn "GPG key for $OPERATOR_EMAIL already exists" log_warn "Apply will skip GPG key creation (idempotent)" fi echo "============================================" echo " To apply: ./scripts/02_identity_apply.sh" echo " To abort: Do nothing" echo " To rollback: ./scripts/rollback/undo_identity.sh" echo "============================================" log_info "Completed $SCRIPT_NAME" } [[ "${BASH_SOURCE[0]}" == "$0" ]] && main "$@"