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!")