11import time
22import json
33import urllib
4+ from tenacity import retry , wait_fixed , stop_after_attempt
45from proxstar import db , starrs
56from proxstar .db import get_vm_expire
67from proxstar .util import lazy_property
@@ -43,39 +44,48 @@ def node(self):
4344 if vm ['vmid' ] == int (self .id ):
4445 return vm ['node' ]
4546
47+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
4648 def delete (self ):
4749 proxmox = connect_proxmox ()
4850 proxmox .nodes (self .node ).qemu (self .id ).delete ()
4951
52+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
5053 def set_cpu (self , cores ):
5154 proxmox = connect_proxmox ()
5255 proxmox .nodes (self .node ).qemu (self .id ).config .put (
5356 cores = cores , sockets = 1 )
5457
58+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
5559 def set_mem (self , mem ):
5660 proxmox = connect_proxmox ()
5761 proxmox .nodes (self .node ).qemu (self .id ).config .put (memory = mem )
5862
63+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
5964 def start (self ):
6065 proxmox = connect_proxmox ()
6166 proxmox .nodes (self .node ).qemu (self .id ).status .start .post ()
6267
68+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
6369 def stop (self ):
6470 proxmox = connect_proxmox ()
6571 proxmox .nodes (self .node ).qemu (self .id ).status .stop .post ()
6672
73+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
6774 def shutdown (self ):
6875 proxmox = connect_proxmox ()
6976 proxmox .nodes (self .node ).qemu (self .id ).status .shutdown .post ()
7077
78+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
7179 def reset (self ):
7280 proxmox = connect_proxmox ()
7381 proxmox .nodes (self .node ).qemu (self .id ).status .reset .post ()
7482
83+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
7584 def suspend (self ):
7685 proxmox = connect_proxmox ()
7786 proxmox .nodes (self .node ).qemu (self .id ).status .suspend .post ()
7887
88+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
7989 def resume (self ):
8090 proxmox = connect_proxmox ()
8191 proxmox .nodes (self .node ).qemu (self .id ).status .resume .post ()
@@ -108,6 +118,7 @@ def boot_order(self):
108118 def boot_order_json (self ):
109119 return json .dumps (self .boot_order )
110120
121+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
111122 def set_boot_order (self , boot_order ):
112123 proxmox = connect_proxmox ()
113124 boot_order_lookup = {
@@ -184,11 +195,13 @@ def start_vnc(self, port):
184195 proxmox .nodes (self .node ).qemu (self .id ).monitor .post (
185196 command = "change vnc 127.0.0.1:{}" .format (port ))
186197
198+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
187199 def eject_iso (self ):
188200 proxmox = connect_proxmox ()
189201 proxmox .nodes (self .node ).qemu (
190202 self .id ).config .post (ide2 = 'none,media=cdrom' )
191203
204+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
192205 def mount_iso (self , iso ):
193206 proxmox = connect_proxmox ()
194207 proxmox .nodes (self .node ).qemu (
@@ -203,15 +216,18 @@ def resize_disk(self, disk, size):
203216 def expire (self ):
204217 return get_vm_expire (db , self .id , app .config ['VM_EXPIRE_MONTHS' ])
205218
219+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
206220 def set_ci_user (self , user ):
207221 proxmox = connect_proxmox_ssh ()
208222 proxmox .nodes (self .node ).qemu (self .id ).config .put (ciuser = user )
209223
224+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
210225 def set_ci_ssh_key (self , ssh_key ):
211226 proxmox = connect_proxmox_ssh ()
212227 escaped_key = urllib .parse .quote (ssh_key , safe = '' )
213228 proxmox .nodes (self .node ).qemu (self .id ).config .put (sshkey = escaped_key )
214229
230+ @retry (wait = wait_fixed (2 ), stop = stop_after_attempt (5 ))
215231 def set_ci_network (self ):
216232 proxmox = connect_proxmox_ssh ()
217233 proxmox .nodes (self .node ).qemu (self .id ).config .put (ipconfig0 = 'ip=dhcp' )
@@ -232,7 +248,7 @@ def create_vm(proxmox, user, name, cores, memory, disk, iso):
232248 pool = user ,
233249 description = 'Managed by Proxstar' )
234250 retry = 0
235- while retry < 5 :
251+ while retry < 20 :
236252 try :
237253 mac = VM (vmid ).get_mac ()
238254 break
@@ -254,7 +270,7 @@ def clone_vm(proxmox, template_id, name, pool):
254270 description = 'Managed by Proxstar' ,
255271 target = target )
256272 retry = 0
257- while retry < 60 :
273+ while retry < 100 :
258274 try :
259275 mac = VM (newid ).get_mac ()
260276 break
0 commit comments