Files
SnarfCode/scripts/upgrade_portainer.py

63 lines
2.0 KiB
Python

import paramiko
import sys
import time
sys.stdout.reconfigure(encoding='utf-8')
KEY_FILE = r'C:\Users\Snarf\.ssh\id_ed25519_snarfnet'
IP = '140.44.4.71'
print("=== UPGRADING PORTAINER SERVER & AGENT TO 2.45.3 ===")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(IP, username='snarf', key_filename=KEY_FILE, timeout=10)
# 1. Backup portainer_data volume
print("[*] Backing up portainer_data volume...")
backup_cmd = """
sudo mkdir -p /mnt/nfs_shares/backups/portainer
sudo tar -czf /mnt/nfs_shares/backups/portainer/portainer_data_$(date +%Y%m%d_%H%M%S).tar.gz -C /var/lib/docker/volumes/portainer_data _data
sudo ls -lh /mnt/nfs_shares/backups/portainer/ | tail -n 1
"""
stdin, stdout, stderr = ssh.exec_command(backup_cmd)
print("Backup created:", stdout.read().decode().strip())
# 2. Recreate Portainer Server with 2.45.3
print("[*] Recreating Portainer Server container with portainer/portainer-ee:2.45.3...")
upgrade_cmd = """
sudo docker stop portainer
sudo docker rm portainer
sudo docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
-v /opt/portainer/admin_password:/tmp/admin_password \
portainer/portainer-ee:2.45.3 \
--admin-password-file /tmp/admin_password
"""
stdin, stdout, stderr = ssh.exec_command(upgrade_cmd)
stdout.channel.recv_exit_status()
print("Portainer Server container recreated!")
# 3. Update Portainer Agent Swarm Service
print("[*] Updating Portainer Agent Swarm Service to 2.45.3...")
agent_cmd = "sudo docker service update --image portainer/agent:2.45.3 portainer_agent"
stdin, stdout, stderr = ssh.exec_command(agent_cmd)
stdout.channel.recv_exit_status()
print(stdout.read().decode())
time.sleep(5)
# 4. Verify Portainer Server & Agent
stdin, stdout, stderr = ssh.exec_command('sudo docker ps -f name=portainer; sudo docker service ls | grep portainer')
print("\n=== STATUS ===")
print(stdout.read().decode())
ssh.close()
print("[SUCCESS] Portainer upgraded to 2.45.3!")