func (vm *FakeVM) DetachDisk(disk bidisk.Disk) error { vm.DetachDiskInputs = append(vm.DetachDiskInputs, DetachDiskInput{ Disk: disk, }) return vm.detachDiskBehavior[disk.CID()] }
func (d *diskDeployer) attachDisk(disk bidisk.Disk, vm VM, stage biui.Stage) error { stageName := fmt.Sprintf("Attaching disk '%s' to VM '%s'", disk.CID(), vm.CID()) err := stage.Perform(stageName, func() error { return vm.AttachDisk(disk) }) return err }
func (vm *vm) DetachDisk(disk bidisk.Disk) error { err := vm.cloud.DetachDisk(vm.cid, disk.CID()) if err != nil { return bosherr.WrapError(err, "Detaching disk in the cloud") } return nil }
func (d *deployment) deleteDisk(deleteStage biui.Stage, disk bidisk.Disk) error { stepName := fmt.Sprintf("Deleting disk '%s'", disk.CID()) return deleteStage.Perform(stepName, func() error { err := disk.Delete() cloudErr, ok := err.(bicloud.Error) if ok && cloudErr.Type() == bicloud.DiskNotFoundError { return biui.NewSkipStageError(cloudErr, "Disk not found") } return err }) }
func (vm *vm) AttachDisk(disk bidisk.Disk) error { err := vm.cloud.AttachDisk(vm.cid, disk.CID()) if err != nil { return bosherr.WrapError(err, "Attaching disk in the cloud") } err = vm.agentClient.MountDisk(disk.CID()) if err != nil { return bosherr.WrapError(err, "Mounting disk") } return nil }
func (d *diskDeployer) updateCurrentDiskRecord(disk bidisk.Disk) error { savedDiskRecord, found, err := d.diskRepo.Find(disk.CID()) if err != nil { return bosherr.WrapError(err, "Finding disk record") } if !found { return bosherr.Error("Failed to find disk record for new disk") } err = d.diskRepo.UpdateCurrent(savedDiskRecord.ID) if err != nil { return bosherr.WrapError(err, "Updating current disk record") } return nil }
func (d *diskDeployer) migrateDisk( originalDisk bidisk.Disk, diskPool bideplmanifest.DiskPool, vm VM, stage biui.Stage, ) (newDisk bidisk.Disk, err error) { d.logger.Debug(d.logTag, "Migrating disk '%s'", originalDisk.CID()) err = stage.Perform("Creating disk", func() error { newDisk, err = d.diskManager.Create(diskPool, vm.CID()) return err }) if err != nil { return newDisk, err } stageName := fmt.Sprintf("Attaching disk '%s' to VM '%s'", newDisk.CID(), vm.CID()) err = stage.Perform(stageName, func() error { return vm.AttachDisk(newDisk) }) if err != nil { return newDisk, err } stageName = fmt.Sprintf("Migrating disk content from '%s' to '%s'", originalDisk.CID(), newDisk.CID()) err = stage.Perform(stageName, func() error { return vm.MigrateDisk() }) if err != nil { return newDisk, err } err = d.updateCurrentDiskRecord(newDisk) if err != nil { return newDisk, err } stageName = fmt.Sprintf("Detaching disk '%s'", originalDisk.CID()) err = stage.Perform(stageName, func() error { return vm.DetachDisk(originalDisk) }) if err != nil { return newDisk, err } stageName = fmt.Sprintf("Deleting disk '%s'", originalDisk.CID()) err = stage.Perform(stageName, func() error { return originalDisk.Delete() }) if err != nil { return newDisk, err } return newDisk, nil }
func (vm *vm) UnmountDisk(disk bidisk.Disk) error { return vm.agentClient.UnmountDisk(disk.CID()) }
func (vm *FakeVM) SetDetachDiskBehavior(disk bidisk.Disk, err error) { vm.detachDiskBehavior[disk.CID()] = err }