63 lines
2.0 KiB
Python
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!")
|
|
|