@@ -21,16 +21,35 @@ func (s *Service) reconcileQEMU(ctx context.Context) (*proxmox.VirtualMachine, e
2121 log .Info ("Reconciling QEMU" )
2222
2323 qemu , err := s .getQEMU (ctx )
24- if err == nil { // if qemu is found, return it
25- return qemu , nil
24+ if err != nil {
25+ if ! rest .IsNotFound (err ) {
26+ log .Error (err , "failed to get qemu" )
27+ return nil , err
28+ }
29+
30+ // no qemu found, try to create new one
31+ log .V (3 ).Info ("qemu wasn't found. new qemu will be created" )
32+ if exist , err := s .client .VirtualMachineExistsWithName (ctx , s .scope .Name ()); exist || err != nil {
33+ if exist {
34+ // there should no qemu with same name. occuring an error
35+ err = fmt .Errorf ("qemu %s already exists" , s .scope .Name ())
36+ }
37+ log .Error (err , "stop creating new qemu to avoid replicating same qemu" )
38+ return nil , err
39+ }
40+ qemu , err = s .createQEMU (ctx )
41+ if err != nil {
42+ log .Error (err , "failed to create qemu" )
43+ return nil , err
44+ }
2645 }
27- if ! rest .IsNotFound (err ) {
28- log .Error (err , "failed to get qemu" )
46+
47+ s .scope .SetVMID (qemu .VM .VMID )
48+ s .scope .SetNodeName (qemu .Node )
49+ if err := s .scope .PatchObject (); err != nil {
2950 return nil , err
3051 }
31-
32- // no qemu found, create new one
33- return s .createQEMU (ctx )
52+ return qemu , nil
3453}
3554
3655// get QEMU gets proxmox vm from vmid
@@ -62,12 +81,6 @@ func (s *Service) createQEMU(ctx context.Context) (*proxmox.VirtualMachine, erro
6281 log .Error (err , "failed to create qemu instance" )
6382 return nil , err
6483 }
65-
66- s .scope .SetNodeName (result .Node ())
67- s .scope .SetVMID (result .VMID ())
68- if err := s .scope .PatchObject (); err != nil {
69- return nil , err
70- }
7184 return result .Instance (), nil
7285}
7386
0 commit comments