Don't stop and delete VMs that failed to clone (#125)

* NewVM() never returns an error

* Don't stop and delete VMs that failed to clone
This commit is contained in:
Nikolay Edigaryev 2023-09-13 19:39:10 +04:00 committed by GitHub
parent bb3d6edcd5
commit 3d0e375ede
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 14 deletions

View File

@ -25,6 +25,7 @@ var ErrVMFailed = errors.New("VM failed")
type VM struct {
onDiskName ondiskname.OnDiskName
cloned bool
Resource v1.VM
logger *zap.SugaredLogger
@ -41,7 +42,7 @@ func NewVM(
vmResource v1.VM,
eventStreamer *client.EventStreamer,
logger *zap.SugaredLogger,
) (*VM, error) {
) *VM {
vmContext, vmContextCancel := context.WithCancel(context.Background())
vm := &VM{
@ -67,15 +68,16 @@ func NewVM(
if err != nil {
vm.setErr(fmt.Errorf("failed to pull the VM: %w", err))
return vm, nil
return vm
}
}
if err := vm.cloneAndConfigure(ctx); err != nil {
vm.setErr(fmt.Errorf("failed to clone the VM: %w", err))
return vm, nil
return vm
}
vm.cloned = true
vm.wg.Add(1)
@ -95,7 +97,7 @@ func NewVM(
go vm.runScript(vm.Resource.StartupScript, eventStreamer)
}
return vm, nil
return vm
}
func (vm *VM) OnDiskName() ondiskname.OnDiskName {
@ -189,6 +191,10 @@ func (vm *VM) IP(ctx context.Context) (string, error) {
}
func (vm *VM) Stop() error {
if !vm.cloned {
return nil
}
vm.logger.Debugf("stopping VM")
_, _, _ = tart.Tart(context.Background(), vm.logger, "stop", vm.id())
@ -203,6 +209,10 @@ func (vm *VM) Stop() error {
}
func (vm *VM) Delete() error {
if !vm.cloned {
return nil
}
vm.logger.Debugf("deleting VM")
_, _, err := tart.Tart(context.Background(), vm.logger, "delete", vm.id())

View File

@ -226,9 +226,7 @@ func (worker *Worker) syncVMs(ctx context.Context) error {
if vmResource.Status == v1.VMStatusPending && !worker.vmm.Exists(odn) {
// Remote VM was created, create local VM
if err := worker.createVM(ctx, odn, vmResource); err != nil {
return err
}
worker.createVM(ctx, odn, vmResource)
vmResource.Status = v1.VMStatusRunning
if _, err := worker.client.VMs().Update(ctx, vmResource); err != nil {
@ -308,17 +306,12 @@ func (worker *Worker) deleteVM(vm *vmmanager.VM) error {
return nil
}
func (worker *Worker) createVM(ctx context.Context, odn ondiskname.OnDiskName, vmResource v1.VM) error {
func (worker *Worker) createVM(ctx context.Context, odn ondiskname.OnDiskName, vmResource v1.VM) {
eventStreamer := worker.client.VMs().StreamEvents(vmResource.Name)
vm, err := vmmanager.NewVM(ctx, vmResource, eventStreamer, worker.logger)
if err != nil {
return err
}
vm := vmmanager.NewVM(ctx, vmResource, eventStreamer, worker.logger)
worker.vmm.Put(odn, vm)
return nil
}
func (worker *Worker) grpcMetadata() metadata.MD {