feat(scripts): add onboarding script for Proxmox management setup

This commit is contained in:
nathan 2026-04-12 01:08:28 -04:00
parent a934117599
commit 115527ba19
2 changed files with 116 additions and 0 deletions

View File

@ -1 +1,73 @@
# scripts # scripts
Automation utilities and helper scripts for homelab infrastructure management.
---
## Inventory
| Script | Purpose | Status |
|--------|---------|--------|
| [onboarding.sh](onboarding.sh) | Bootstrap Ansible control node for Proxmox management | 🟡 **DRAFT** - Testing Required |
---
## onboarding.sh
**Purpose:** Automated setup of Ansible control node for Proxmox infrastructure management.
**What it does:**
1. Installs Ansible and Proxmoxer Python library
2. Detects or generates SSH keypair (ED25519 preferred, RSA fallback)
3. Copies public key to Proxmox server for passwordless authentication
4. Generates Ansible inventory file (`hosts.ini`) with Proxmox connection details
**Prerequisites:**
- Debian/Ubuntu-based system (uses `apt`)
- Network access to Proxmox server
- Initial SSH password for target Proxmox server
**Configuration:**
Edit the following variables at the top of the script:
```bash
PROXMOX_IP="192.168.1.100" # Target Proxmox server IP
PROXMOX_USER="root" # Proxmox SSH user
```
**Usage:**
```bash
cd ~/dev/homelab/scripts
chmod +x onboarding.sh
./onboarding.sh
```
**Verification:**
```bash
ansible proxmox_nodes -m ping -i hosts.ini
```
---
## ⚠️ Development Status
| Script | Testing Status | Known Issues |
|--------|---------------|--------------|
| onboarding.sh | ❌ Untested in production | • Hardcoded Proxmox IP/user variables<br>• No error handling for failed SSH key copy<br>• Assumes Debian/Ubuntu package manager<br>• No validation of Proxmox connectivity |
**DO NOT USE IN PRODUCTION** until the following are addressed:
1. **Error Handling:** Add validation checks for each step
2. **Idempotency:** Verify script can be safely re-run
3. **Multi-OS Support:** Test on RHEL/Arch variants or add OS detection
4. **Interactive Mode:** Prompt for PROXMOX_IP/USER instead of manual editing
5. **Rollback:** Add cleanup mechanism for failed installations
---
## Contributing
When adding new scripts:
1. Update the **Inventory** table with script name and purpose
2. Document prerequisites, configuration, and usage
3. Mark status as 🟡 DRAFT until production-tested
4. Add to **Development Status** table with known issues

44
scripts/onboarding.sh Normal file
View File

@ -0,0 +1,44 @@
#!/bin/bash
# ==============================================================================
# ENVIRONMENT VARIABLES
# ==============================================================================
PROXMOX_IP="192.168.1.100" # <--- CHANGE ME
PROXMOX_USER="root" # <--- CHANGE ME
# ==============================================================================
echo "--- Starting Lead Architect Bootstrap Process ---"
# 1. Install Ansible and dependencies
echo "[1/4] Installing Ansible and Proxmoxer..."
sudo apt update && sudo apt install -y ansible python3-pip
pip3 install proxmoxer --break-system-packages 2>/dev/null || pip3 install proxmoxer
# 2. Smart SSH Key Check
# We check for ED25519 first, then RSA.
if [ -f "$HOME/.ssh/id_ed25519" ]; then
SSH_KEY_PATH="$HOME/.ssh/id_ed25519"
echo "[2/4] Found existing ED25519 key at $SSH_KEY_PATH"
elif [ -f "$HOME/.ssh/id_rsa" ]; then
SSH_KEY_PATH="$HOME/.ssh/id_rsa"
echo "[2/4] Found existing RSA key at $SSH_KEY_PATH. Using as fallback."
else
SSH_KEY_PATH="$HOME/.ssh/id_ed25519"
echo "[2/4] No usable keys found. Generating new ED25519 keypair..."
ssh-keygen -t ed25519 -f "$SSH_KEY_PATH" -N ""
fi
# 3. Transfer Public Key
# We use the variable determined in the step above
echo "[3/4] Copying ${SSH_KEY_PATH}.pub to Proxmox ($PROXMOX_IP)..."
ssh-copy-id -i "${SSH_KEY_PATH}.pub" "${PROXMOX_USER}@${PROXMOX_IP}"
# 4. Create Inventory
echo "[4/4] Generating hosts.ini..."
cat <<EOF > hosts.ini
[proxmox_nodes]
proxmox_server ansible_host=$PROXMOX_IP ansible_user=$PROXMOX_USER ansible_ssh_private_key_file=$SSH_KEY_PATH
EOF
echo "--- Bootstrap Complete ---"
echo "Verification: ansible proxmox_nodes -m ping -i hosts.ini"