Initial commit: scripts directory with sync-dyno.sh
This commit is contained in:
commit
407c327fa6
5 changed files with 203 additions and 0 deletions
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# Temporary files
|
||||
*.tmp
|
||||
*.swp
|
||||
*~
|
||||
|
||||
# Sensitive files (add patterns as needed)
|
||||
# *.env
|
||||
# secrets/
|
||||
44
add-host.sh
Executable file
44
add-host.sh
Executable file
|
|
@ -0,0 +1,44 @@
|
|||
#!/bin/bash
|
||||
CONFIG_FILE="$HOME/.ssh/tmux-hosts.conf"
|
||||
SSH_CONFIG="$HOME/.ssh/config"
|
||||
INVENTORY="$HOME/clustered-fucks/inventory/hosts.yml"
|
||||
|
||||
echo "=== Add New Host ==="
|
||||
echo ""
|
||||
read -p "Hostname (e.g., new-server): " hostname
|
||||
read -p "IP Address (e.g., 192.168.1.130): " ip
|
||||
read -p "SSH User [root]: " user
|
||||
user=${user:-root}
|
||||
read -p "SSH Port [22]: " port
|
||||
port=${port:-22}
|
||||
read -p "Description: " description
|
||||
|
||||
echo ""
|
||||
echo "Testing SSH connectivity..."
|
||||
if ssh -o BatchMode=yes -o ConnectTimeout=5 -p $port ${user}@${ip} "echo OK" 2>/dev/null; then
|
||||
echo "✓ Key already works"
|
||||
else
|
||||
echo "Copying SSH key..."
|
||||
ssh-copy-id -p $port ${user}@${ip}
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Adding to tmux-hosts.conf..."
|
||||
echo "${hostname}:${user}@${ip}:${port}:${description}" >> "$CONFIG_FILE"
|
||||
|
||||
echo "Adding to SSH config..."
|
||||
cat >> "$SSH_CONFIG" << SSHENTRY
|
||||
|
||||
Host ${hostname}
|
||||
HostName ${ip}
|
||||
User ${user}
|
||||
Port ${port}
|
||||
SSHENTRY
|
||||
|
||||
echo ""
|
||||
echo "✓ Host added!"
|
||||
echo ""
|
||||
echo "NOTE: Manually add to inventory if needed:"
|
||||
echo " ~/clustered-fucks/inventory/hosts.yml"
|
||||
echo ""
|
||||
echo "Test with: ssh ${hostname}"
|
||||
47
control-menu.sh
Executable file
47
control-menu.sh
Executable file
|
|
@ -0,0 +1,47 @@
|
|||
#!/bin/bash
|
||||
CLUSTER_OPS="$HOME/clustered-fucks"
|
||||
|
||||
show_menu() {
|
||||
clear
|
||||
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ CLUSTER CONTROL - Ansible Menu ║"
|
||||
echo "╠═══════════════════════════════════════════════════════════════╣"
|
||||
echo "║ [1] Ping All - Test connectivity ║"
|
||||
echo "║ [2] Check Status - Disk/memory/containers ║"
|
||||
echo "║ [3] Update All - apt upgrade docker hosts ║"
|
||||
echo "║ [4] Docker Prune - Clean unused resources ║"
|
||||
echo "║ [5] Restart Utils - Restart utils stack everywhere ║"
|
||||
echo "║ ║"
|
||||
echo "║ [A] Ad-hoc Command - Run custom command ║"
|
||||
echo "║ [I] Inventory - Show host list ║"
|
||||
echo "║ [S] SSH Manager - Launch tmux session ║"
|
||||
echo "║ ║"
|
||||
echo "║ [Q] Quit ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
}
|
||||
|
||||
cd "$CLUSTER_OPS"
|
||||
|
||||
while true; do
|
||||
show_menu
|
||||
read -p "Choice: " choice
|
||||
|
||||
case ${choice^^} in
|
||||
1) ansible all -m ping; read -p "Press Enter..." ;;
|
||||
2) ansible-playbook playbooks/check-status.yml; read -p "Press Enter..." ;;
|
||||
3) ansible-playbook playbooks/update-all.yml; read -p "Press Enter..." ;;
|
||||
4) ansible-playbook playbooks/docker-prune.yml; read -p "Press Enter..." ;;
|
||||
5) ansible-playbook playbooks/restart-utils.yml; read -p "Press Enter..." ;;
|
||||
A)
|
||||
read -p "Target [all]: " target
|
||||
target=${target:-all}
|
||||
read -p "Command: " cmd
|
||||
[ -n "$cmd" ] && ansible $target -m shell -a "$cmd"
|
||||
read -p "Press Enter..."
|
||||
;;
|
||||
I) ansible-inventory --graph; read -p "Press Enter..." ;;
|
||||
S) ~/scripts/ssh-manager.sh; exit 0 ;;
|
||||
Q) exit 0 ;;
|
||||
esac
|
||||
done
|
||||
73
ssh-manager.sh
Executable file
73
ssh-manager.sh
Executable file
|
|
@ -0,0 +1,73 @@
|
|||
#!/bin/bash
|
||||
SESSION="cluster"
|
||||
CONFIG_FILE="$HOME/.ssh/tmux-hosts.conf"
|
||||
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
echo "Config file not found: $CONFIG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Kill existing session
|
||||
tmux kill-session -t $SESSION 2>/dev/null
|
||||
|
||||
# Create new session
|
||||
tmux new-session -d -s $SESSION -n "Control"
|
||||
tmux set -t $SESSION -g mouse on
|
||||
tmux set -t $SESSION -g pane-border-status top
|
||||
|
||||
# Count hosts
|
||||
host_count=0
|
||||
while IFS=: read -r name connection port description; do
|
||||
[[ -z "$name" || "$name" =~ ^# ]] && continue
|
||||
((host_count++))
|
||||
done < "$CONFIG_FILE"
|
||||
|
||||
multiview_window=$((host_count + 1))
|
||||
|
||||
# Create individual host windows
|
||||
window_num=1
|
||||
hosts=()
|
||||
while IFS=: read -r name connection port description; do
|
||||
[[ -z "$name" || "$name" =~ ^# ]] && continue
|
||||
port=${port:-22}
|
||||
hosts+=("$name:$connection:$port:$description")
|
||||
|
||||
tmux new-window -t $SESSION:$window_num -n "$name"
|
||||
tmux select-pane -t $SESSION:$window_num.0 -T "$description"
|
||||
|
||||
if [ "$port" != "22" ]; then
|
||||
tmux send-keys -t $SESSION:$window_num "ssh -p $port $connection" C-m
|
||||
else
|
||||
tmux send-keys -t $SESSION:$window_num "ssh $connection" C-m
|
||||
fi
|
||||
((window_num++))
|
||||
done < "$CONFIG_FILE"
|
||||
|
||||
# Create multi-view window
|
||||
if [ ${#hosts[@]} -gt 0 ]; then
|
||||
tmux new-window -t $SESSION:$multiview_window -n "Multi-View"
|
||||
num_hosts=${#hosts[@]}
|
||||
|
||||
for ((i=1; i<num_hosts; i++)); do
|
||||
tmux split-window -t $SESSION:$multiview_window
|
||||
tmux select-layout -t $SESSION:$multiview_window tiled
|
||||
done
|
||||
|
||||
pane_num=0
|
||||
for host_info in "${hosts[@]}"; do
|
||||
IFS=: read -r name connection port description <<< "$host_info"
|
||||
tmux select-pane -t $SESSION:$multiview_window.$pane_num -T "$name"
|
||||
if [ "$port" != "22" ]; then
|
||||
tmux send-keys -t $SESSION:$multiview_window.$pane_num "ssh -p $port $connection" C-m
|
||||
else
|
||||
tmux send-keys -t $SESSION:$multiview_window.$pane_num "ssh $connection" C-m
|
||||
fi
|
||||
((pane_num++))
|
||||
done
|
||||
fi
|
||||
|
||||
# Setup control window with menu hint
|
||||
tmux send-keys -t $SESSION:0 "echo '=== Cluster Control ===' && echo 'Hosts: ${#hosts[@]}' && echo 'Press Ctrl+b then window number to switch' && echo 'Window $multiview_window = Multi-View (all hosts)' && echo '' && echo 'Run ~/scripts/control-menu.sh for Ansible actions' && echo ''" C-m
|
||||
|
||||
tmux select-window -t $SESSION:0
|
||||
tmux attach -t $SESSION
|
||||
31
sync-dyno.sh
Executable file
31
sync-dyno.sh
Executable file
|
|
@ -0,0 +1,31 @@
|
|||
#!/bin/bash
|
||||
# Sync dyno.yml from Hetzner host "im"
|
||||
# Source: im:/matrix/traefik/config/dyno.yml
|
||||
# Destination: ~/scripts/configs/dyno.yml
|
||||
|
||||
set -e
|
||||
|
||||
DEST_DIR=~/scripts/configs
|
||||
DEST_FILE="$DEST_DIR/dyno.yml"
|
||||
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
echo "Syncing dyno.yml from im..."
|
||||
rsync -avP im:/matrix/traefik/config/dyno.yml "$DEST_FILE"
|
||||
|
||||
echo ""
|
||||
echo "✅ Synced to: $DEST_FILE"
|
||||
echo ""
|
||||
|
||||
# Show diff if in git repo
|
||||
if [ -d ~/scripts/.git ]; then
|
||||
cd ~/scripts
|
||||
if ! git diff --quiet configs/dyno.yml 2>/dev/null; then
|
||||
echo "Changes detected:"
|
||||
git diff configs/dyno.yml
|
||||
echo ""
|
||||
echo "To commit: cd ~/scripts && git add -A && git commit -m 'Update dyno.yml'"
|
||||
else
|
||||
echo "No changes from last sync."
|
||||
fi
|
||||
fi
|
||||
Loading…
Reference in a new issue