Martin Betak has uploaded a new change for review. Change subject: engine: Enable read of current CD via REST ......................................................................
engine: Enable read of current CD via REST Added tracking of the current CD for VM (the value resulting from ChangeDisk). - On REST side we check for the 'current' matrix param in the GET request and if present we return the currentCd of the VM instead of the persistent isoPath. - Added 'current_cd' to vm_dynamic table to store this value in VdsBrokerObjectsBuilder. Change-Id: Ifd6c80984143b7d953b6d76b9863465aabce0917 Signed-off-by: Martin Betak <mbe...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java M packaging/dbscripts/create_views.sql A packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql M packaging/dbscripts/vms_sp.sql 12 files changed, 69 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/68/20368/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java index 8ec0f33..f7d2229 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java @@ -947,6 +947,14 @@ this.vmDynamic.setCpuName(value); } + public String getCurrentCd() { + return this.vmDynamic.getCurrentCd(); + } + + public void setCurrentCd(String value) { + this.vmDynamic.setCurrentCd(value); + } + public void setExportDate(Date value) { this.vmStatic.setExportDate(value); } @@ -1205,6 +1213,7 @@ setVmHost(vm.getVmHost()); setVmIp(vm.getVmIp()); setVmFQDN(vm.getVmFQDN()); + setCurrentCd(vm.getCurrentCd()); // if (!string.IsNullOrEmpty(vm.app_list)) // { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java index 3ec3dbf..f4de31d 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java @@ -50,6 +50,7 @@ private String lastWatchdogAction; private boolean runOnce; private String cpuName; + private String currentCd; @Override public int hashCode() { @@ -93,6 +94,7 @@ result = prime * result + (lastWatchdogAction == null ? 0 : lastWatchdogAction.hashCode()); result = prime * result + (runOnce ? 1231 : 1237); result = prime * result + (cpuName == null ? 0 : cpuName.hashCode()); + result = prime * result + (currentCd == null ? 0 : currentCd.hashCode()); return result; } @@ -145,7 +147,8 @@ && ObjectUtils.objectsEqual(lastWatchdogEvent, other.lastWatchdogEvent) && ObjectUtils.objectsEqual(lastWatchdogAction, other.lastWatchdogAction) && runOnce == other.runOnce - && ObjectUtils.objectsEqual(cpuName, other.cpuName)); + && ObjectUtils.objectsEqual(cpuName, other.cpuName) + && ObjectUtils.objectsEqual(currentCd, other.currentCd)); } public String getExitMessage() { @@ -490,4 +493,11 @@ this.cpuName = cpuName; } + public String getCurrentCd() { + return currentCd; + } + + public void setCurrentCd(String currentCd) { + this.currentCd = currentCd; + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java index 4a69684..d7bebe0 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java @@ -368,6 +368,7 @@ entity.setCpuName(rs.getString("cpu_name")); entity.setInstanceTypeId(Guid.createGuidFromString(rs.getString("instance_type_id"))); entity.setImageTypeId(Guid.createGuidFromString(rs.getString("image_type_id"))); + entity.setCurrentCd(rs.getString("current_cd")); return entity; } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java index 4950bb3..8bf016d 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java @@ -113,7 +113,8 @@ .addValue("last_watchdog_event", vm.getLastWatchdogEvent()) .addValue("last_watchdog_action", vm.getLastWatchdogAction()) .addValue("is_run_once", vm.isRunOnce()) - .addValue("cpu_name", vm.getCpuName()); + .addValue("cpu_name", vm.getCpuName()) + .addValue("current_cd", vm.getCurrentCd()); } @Override @@ -175,6 +176,7 @@ entity.setLastWatchdogAction(rs.getString("last_watchdog_action")); entity.setRunOnce(rs.getBoolean("is_run_once")); entity.setCpuName(rs.getString("cpu_name")); + entity.setCurrentCd(rs.getString("current_cd")); return entity; } }; @@ -222,7 +224,8 @@ .addValue("guest_agent_nics_hash", entity.getGuestAgentNicsHash()) .addValue("last_watchdog_event", entity.getLastWatchdogEvent()) .addValue("last_watchdog_action", entity.getLastWatchdogAction()) - .addValue("cpu_name", entity.getCpuName()); + .addValue("cpu_name", entity.getCpuName()) + .addValue("current_cd", entity.getCurrentCd()); return paramValue; } diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 3776536..4ac6f3b 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -2570,6 +2570,7 @@ <column>exit_message</column> <column>guest_agent_nics_hash</column> <column>cpu_name</column> + <column>current_cd</column> <row> <value>77296e00-0cad-4e5a-9299-008a7b6f4356</value> <value>5</value> @@ -2603,6 +2604,7 @@ <value>0</value> <value>0</value> <null /> + <null/> <null/> <null/> </row> @@ -2641,6 +2643,7 @@ <null /> <value>0</value> <null /> + <null/> </row> <row> <value>77296e00-0cad-4e5a-9299-008a7b6f4354</value> @@ -2677,6 +2680,7 @@ <null /> <value>3452354</value> <null /> + <null/> </row> <row> <value>77296e00-0cad-4e5a-9299-008a7b6f4359</value> @@ -2712,6 +2716,7 @@ <value>0</value> <null /> <null /> + <null/> </row> <row> <value>77296e00-0cad-4e5a-9299-008a7b6f4360</value> @@ -2747,6 +2752,7 @@ <value>0</value> <null /> <null /> + <null/> </row> </table> diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index f595bdb..4cc139c 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -378,7 +378,8 @@ body: parameterType: null signatures: [] - urlparams: {} + urlparams: + current: {context: matrix, type: 'xs:boolean', value: true|false, required: false} headers: {} - name: /api/vms/{vm:id}/cdroms/{cdrom:id}|rel=delete description: delete the cdrom for a virtual machine identified by the given id diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java index 94363b8..fe20057 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java @@ -40,4 +40,20 @@ return super.update(resource); } } + + @Override + public CdRom get() { + if (QueryHelper.hasMatrixParam(getUriInfo(), CURRENT_CONSTRAINT_PARAMETER)) { + VM vm = collection.lookupEntity(guid); + if (vm == null) { + return notFound(); + } + // change the iso path so the result of 'map' will contain current cd instead of the + // persistent configuration + vm.setIsoPath(vm.getCurrentCd()); + return addLinks(populate(map(vm), vm)); + } else { + return super.get(); + } + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java index b29c7ff..61f4629 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java @@ -52,6 +52,7 @@ new Object[] { PARENT_ID }, new VM(), 1); + setUriInfo(setUpBasicUriExpectations()); control.replay(); try { collection.remove(NON_EXISTANT_GUID.toString()); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java index bfc5820..e4abf27 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.vdsbroker.vdsbroker; +import java.nio.file.Paths; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -256,6 +257,13 @@ vm.setLastWatchdogEvent((long) time); vm.setLastWatchdogAction(action); } + + if (xmlRpcStruct.containsKey(VdsProperties.CDRom)) { + String isoName = Paths.get((String) xmlRpcStruct.get(VdsProperties.CDRom)).getFileName().toString(); + vm.setCurrentCd(isoName); + } else { + vm.setCurrentCd(null); + } } public static void updateVMStatisticsData(VmStatistics vm, Map<String, Object> xmlRpcStruct) { diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index 98958f4..32949c1 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -582,7 +582,7 @@ vm_static.default_display_type as default_display_type, vm_static.priority as priority,vm_static.iso_path as iso_path, vm_static.origin as origin, vds_groups.compatibility_version as vds_group_compatibility_version, vm_static.initrd_url as initrd_url, vm_static.kernel_url as kernel_url, vm_static.kernel_params as kernel_params, vm_dynamic.pause_status as pause_status, vm_dynamic.exit_message as exit_message, vm_dynamic.exit_status as exit_status,vm_static.migration_support as migration_support,vm_static.predefined_properties as predefined_properties,vm_static.userdefined_properties as userdefined_properties,vm_static.min_allocated_mem as min_allocated_mem, vm_dynamic.hash as hash, vm_static.cpu_pinning as cpu_pinning, vm_static.db_generation as db_generation, vm_static.host_cpu_flags as host_cpu_flags, vm_static.tunnel_migration as tunnel_migration, vm_static.vnc_keyboard_layout as vnc_keyboard_layout, vm_static.is_run_and_pause as is_run_and_pause, vm_static.created_by_user_id as created_by_user_id, - vm_dynamic.last_watchdog_event as last_watchdog_event, vm_dynamic.last_watchdog_action as last_watchdog_action, vm_dynamic.is_run_once as is_run_once, vm_dynamic.vm_fqdn as vm_fqdn, vm_dynamic.cpu_name as cpu_name, + vm_dynamic.last_watchdog_event as last_watchdog_event, vm_dynamic.last_watchdog_action as last_watchdog_action, vm_dynamic.is_run_once as is_run_once, vm_dynamic.vm_fqdn as vm_fqdn, vm_dynamic.cpu_name as cpu_name, vm_dynamic.current_cd as current_cd, vm_static.instance_type_id as instance_type_id, vm_static.image_type_id as image_type_id FROM vm_static INNER JOIN vm_dynamic ON vm_static.vm_guid = vm_dynamic.vm_guid INNER JOIN diff --git a/packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql b/packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql new file mode 100644 index 0000000..b10d730 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql @@ -0,0 +1 @@ +select fn_db_add_column('vm_dynamic', 'current_cd', 'varchar(4000) default null'); \ No newline at end of file diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql index 327122b..57a3c5c 100644 --- a/packaging/dbscripts/vms_sp.sql +++ b/packaging/dbscripts/vms_sp.sql @@ -243,12 +243,13 @@ v_last_watchdog_event NUMERIC, v_last_watchdog_action VARCHAR(8), v_is_run_once BOOLEAN, - v_cpu_name VARCHAR(255)) + v_cpu_name VARCHAR(255), + v_current_cd VARCHAR(4000)) RETURNS VOID AS $procedure$ BEGIN -INSERT INTO vm_dynamic(app_list, guest_cur_user_name, console_cur_user_name, guest_last_login_time, guest_last_logout_time, console_user_id, guest_os, migrating_to_vds, RUN_ON_VDS, status, vm_guid, vm_host, vm_ip, last_start_time, vm_pid, display, acpi_enable, session, display_ip, display_type, kvm_enable, boot_sequence, display_secure_port, utc_diff, last_vds_run_on, client_ip, guest_requested_memory, hibernation_vol_handle,exit_status,pause_status,exit_message, guest_agent_nics_hash, last_watchdog_event, last_watchdog_action, is_run_once, vm_fqdn, cpu_name) - VALUES(v_app_list, v_guest_cur_user_name, v_console_cur_user_name, v_guest_last_login_time, v_guest_last_logout_time, v_console_user_id, v_guest_os, v_migrating_to_vds, v_run_on_vds, v_status, v_vm_guid, v_vm_host, v_vm_ip, v_last_start_time, v_vm_pid, v_display, v_acpi_enable, v_session, v_display_ip, v_display_type, v_kvm_enable, v_boot_sequence, v_display_secure_port, v_utc_diff, v_last_vds_run_on, v_client_ip, v_guest_requested_memory, v_hibernation_vol_handle, v_exit_status, v_pause_status, v_exit_message, v_guest_agent_nics_hash, v_last_watchdog_event, v_last_watchdog_action, v_is_run_once, v_vm_fqdn, v_cpu_name); +INSERT INTO vm_dynamic(app_list, guest_cur_user_name, console_cur_user_name, guest_last_login_time, guest_last_logout_time, console_user_id, guest_os, migrating_to_vds, RUN_ON_VDS, status, vm_guid, vm_host, vm_ip, last_start_time, vm_pid, display, acpi_enable, session, display_ip, display_type, kvm_enable, boot_sequence, display_secure_port, utc_diff, last_vds_run_on, client_ip, guest_requested_memory, hibernation_vol_handle,exit_status,pause_status,exit_message, guest_agent_nics_hash, last_watchdog_event, last_watchdog_action, is_run_once, vm_fqdn, cpu_name, current_cd) + VALUES(v_app_list, v_guest_cur_user_name, v_console_cur_user_name, v_guest_last_login_time, v_guest_last_logout_time, v_console_user_id, v_guest_os, v_migrating_to_vds, v_run_on_vds, v_status, v_vm_guid, v_vm_host, v_vm_ip, v_last_start_time, v_vm_pid, v_display, v_acpi_enable, v_session, v_display_ip, v_display_type, v_kvm_enable, v_boot_sequence, v_display_secure_port, v_utc_diff, v_last_vds_run_on, v_client_ip, v_guest_requested_memory, v_hibernation_vol_handle, v_exit_status, v_pause_status, v_exit_message, v_guest_agent_nics_hash, v_last_watchdog_event, v_last_watchdog_action, v_is_run_once, v_vm_fqdn, v_cpu_name, v_current_cd); END; $procedure$ LANGUAGE plpgsql; @@ -291,7 +292,8 @@ v_last_watchdog_event NUMERIC, v_last_watchdog_action VARCHAR(8), v_is_run_once BOOLEAN, - v_cpu_name VARCHAR(255)) + v_cpu_name VARCHAR(255), + v_current_cd VARCHAR(4000)) RETURNS VOID --The [vm_dynamic] table doesn't have a timestamp column. Optimistic concurrency logic cannot be generated @@ -314,7 +316,8 @@ guest_requested_memory = v_guest_requested_memory, hibernation_vol_handle = v_hibernation_vol_handle,exit_status = v_exit_status, pause_status = v_pause_status,exit_message = v_exit_message, hash=v_hash, guest_agent_nics_hash = v_guest_agent_nics_hash, - last_watchdog_event = v_last_watchdog_event, last_watchdog_action = v_last_watchdog_action, is_run_once = v_is_run_once, cpu_name = v_cpu_name + last_watchdog_event = v_last_watchdog_event, last_watchdog_action = v_last_watchdog_action, is_run_once = v_is_run_once, cpu_name = v_cpu_name, + current_cd = v_current_cd WHERE vm_guid = v_vm_guid; END; $procedure$ LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/20368 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifd6c80984143b7d953b6d76b9863465aabce0917 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Betak <mbe...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches