func (vm SoftLayerVM) ReloadOS(stemcell bslcstem.Stemcell) error { reload_OS_Config := sldatatypes.Image_Template_Config{ ImageTemplateId: strconv.Itoa(stemcell.ID()), } virtualGuestService, err := vm.softLayerClient.GetSoftLayer_Virtual_Guest_Service() if err != nil { return bosherr.WrapError(err, "Creating VirtualGuestService from SoftLayer client") } err = bslcommon.WaitForVirtualGuestToHaveNoRunningTransactions(vm.softLayerClient, vm.ID()) if err != nil { return bosherr.WrapError(err, fmt.Sprintf("Waiting for VirtualGuest %d to have no pending transactions before os reload", vm.ID())) } vm.logger.Info(SOFTLAYER_VM_OS_RELOAD_TAG, fmt.Sprintf("No transaction is running on this VM %d", vm.ID())) err = virtualGuestService.ReloadOperatingSystem(vm.ID(), reload_OS_Config) if err != nil { return bosherr.WrapError(err, "Failed to reload OS on the specified VirtualGuest from SoftLayer client") } err = vm.postCheckActiveTransactionsForOSReload(vm.softLayerClient) if err != nil { return err } return nil }
func (vm SoftLayerVM) DeleteVM() error { virtualGuestService, err := vm.softLayerClient.GetSoftLayer_Virtual_Guest_Service() if err != nil { return bosherr.WrapError(err, "Creating SoftLayer VirtualGuestService from client") } vmCID := vm.ID() err = bslcommon.WaitForVirtualGuestToHaveNoRunningTransactions(vm.softLayerClient, vmCID) if err != nil { if !strings.Contains(err.Error(), "HTTP error code") { return bosherr.WrapError(err, fmt.Sprintf("Waiting for VirtualGuest `%d` to have no pending transactions before deleting vm", vmCID)) } } deleted, err := virtualGuestService.DeleteObject(vm.ID()) if err != nil { if !strings.Contains(err.Error(), "HTTP error code") { return bosherr.WrapError(err, "Deleting SoftLayer VirtualGuest from client") } } if !deleted { return bosherr.WrapError(nil, "Did not delete SoftLayer VirtualGuest from client") } err = vm.postCheckActiveTransactionsForDeleteVM(vm.softLayerClient, vmCID) if err != nil { if !strings.Contains(err.Error(), "HTTP error code") { return err } } if strings.ToUpper(common.GetOSEnvVariable("OS_RELOAD_ENABLED", "TRUE")) == "TRUE" { db, err := bslcvmpool.OpenDB(bslcvmpool.SQLITE_DB_FILE_PATH) if err != nil { return bosherr.WrapError(err, "Opening DB") } vmInfoDB := bslcvmpool.NewVMInfoDB(vm.ID(), "", "", "", "", vm.logger, db) err = vmInfoDB.DeleteVMFromVMDB(bslcvmpool.DB_RETRY_TIMEOUT, bslcvmpool.DB_RETRY_INTERVAL) if err != nil { return bosherr.WrapError(err, "Failed to delete the record from VM pool DB") } } return nil }
func (s SoftLayerStemcell) deleteVirtualGuestDiskTemplateGroup(id int) error { vgdtgService, err := s.softLayerClient.GetSoftLayer_Virtual_Guest_Block_Device_Template_Group_Service() if err != nil { return bosherr.WrapError(err, "Getting SoftLayer_Virtual_Guest_Block_Device_Template_Group_Service from SoftLayer client") } _, err = vgdtgService.DeleteObject(id) if err != nil { return bosherr.WrapError(err, "Deleting VirtualGuestBlockDeviceTemplateGroup from service") } err = slh.WaitForVirtualGuestToHaveNoRunningTransactions(s.softLayerClient, id) if err != nil { return bosherr.WrapError(err, fmt.Sprintf("Waiting for VirtualGuest `%d` to have no pending transactions", id)) } _, err = vgdtgService.GetObject(id) if err == nil { return bosherr.WrapError(nil, fmt.Sprintf("Could not delete VirtualGuestBlockDeviceTemplateGroup with id `%d`", id)) } return nil }