diff --git a/app/models/concerns/foreman_bootdisk/compute_resources/proxmox.rb b/app/models/concerns/foreman_bootdisk/compute_resources/proxmox.rb index 59033c63..58abf356 100644 --- a/app/models/concerns/foreman_bootdisk/compute_resources/proxmox.rb +++ b/app/models/concerns/foreman_bootdisk/compute_resources/proxmox.rb @@ -20,6 +20,18 @@ def iso_upload(iso, vm_uuid) storage.volumes.any? { |v| v.volid.include? File.basename(iso) } end + def iso_delete(_iso, vm_uuid) + server = find_vm_by_uuid(vm_uuid) + + # get volid to delete iso after detaching from vm + volid = server.volumes.get(CDROM_VOLUME).volid + + # delete the iso file from proxmox server + storage = storages(server.node_id, 'iso')[0] + volume = storage.volumes.detect { |v| v.volid.include? volid } + volume.destroy + end + def iso_attach(iso, vm_uuid) server = find_vm_by_uuid(vm_uuid) storage = storages(server.node_id, 'iso')[0] @@ -31,18 +43,10 @@ def iso_attach(iso, vm_uuid) def iso_detach(vm_uuid) server = find_vm_by_uuid(vm_uuid) - - # get volid to delete iso after detaching from vm - volid = server.volumes.get(CDROM_VOLUME).volid server.update({ ide2: "none,media=cdrom" }) # cdrom will be ejected on next power off server.detach(CDROM_VOLUME) - - # delete the iso file from proxmox server - storage = storages(server.node_id, 'iso')[0] - volume = storage.volumes.detect { |v| v.volid.include? volid } - volume.destroy end end end diff --git a/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb b/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb index 7563d694..a1943060 100644 --- a/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb +++ b/app/models/concerns/foreman_bootdisk/compute_resources/vmware.rb @@ -31,6 +31,16 @@ def iso_upload(iso, vm_uuid) client.upload_iso options end + def iso_delete(iso, vm_uuid) + options = { + 'local_path' => iso, + 'datacenter' => dc.name, + 'datastore' => bootdisk_datastore(vm_uuid), + 'upload_directory' => 'foreman_isos' + } + client.destroy_iso options + end + def iso_attach(iso, vm_uuid) controller = controller_config(vm_uuid) options = { diff --git a/app/models/concerns/foreman_bootdisk/orchestration/compute.rb b/app/models/concerns/foreman_bootdisk/orchestration/compute.rb index ebed5be8..a0a44be3 100644 --- a/app/models/concerns/foreman_bootdisk/orchestration/compute.rb +++ b/app/models/concerns/foreman_bootdisk/orchestration/compute.rb @@ -37,6 +37,8 @@ def queue_bootdisk_compute elsif old&.build? && !build? queue.create(name: _('Detach ISO image from CDROM drive for %s') % self, priority: 52, action: [self, :setDetachIsoImage]) + queue.create(name: _('Delete ISO image for %s') % self, priority: 53, + action: [self, :setDeleteIsoImage]) end true end @@ -59,6 +61,10 @@ def bootdisk_upload_iso compute_resource.iso_upload(bootdisk_isofile, uuid) end + def bootdisk_delete_iso + compute_resource.iso_delete(bootdisk_isofile, uuid) + end + def bootdisk_attach_iso compute_resource.iso_attach(File.basename(bootdisk_isofile), uuid) end @@ -101,6 +107,16 @@ def setDetachIsoImage end def delDetachIsoImage; end + + def setDeleteIsoImage + logger.info format('Delete ISO image for %s', name) + bootdisk_delete_iso + rescue StandardError => e + failure format(_('Failed to delete ISO image of instance %{name}: %{message}'), name: name, message: e.message), e + end + + def delDeleteIsoImage; end + end end end