# HG changeset patch # User Marcus Granado # Date 1283866374 -3600 # Node ID f9273c413c8ecdd2a8cb0104a8d8307b357deb6f # Parent 75d9c25311cf1638ed2cb58a58f41138b706dcf0 CA-43645: show VMPR snapshots in task list in xencenter Signed-off-by: Marcus Granado diff -r 75d9c25311cf -r f9273c413c8e ocaml/xapi/xapi_vm_clone.ml --- a/ocaml/xapi/xapi_vm_clone.ml +++ b/ocaml/xapi/xapi_vm_clone.ml @@ -249,17 +249,7 @@ (* verify if this action is happening due to a VM protection policy *) let is_snapshot_from_vmpp = - (try - is_a_snapshot && - (let session = Xapi_session.get_top ~__context ~self:(Context.get_session_id __context) in - let uname = Db.Session.get_auth_user_name ~__context ~self:session in - let is_lsu = Db.Session.get_is_local_superuser ~__context ~self:session in - is_lsu && (uname = Xapi_vmpp.vmpr_username) - ) - with e -> - debug "Error obtaining is_snapshot_from_vmpp: %s" (Printexc.to_string e); - false - ) + is_a_snapshot && (Xapi_vmpp.is_snapshot_from_vmpp ~__context) in (* create a new VM *) diff -r 75d9c25311cf -r f9273c413c8e ocaml/xapi/xapi_vm_snapshot.ml --- a/ocaml/xapi/xapi_vm_snapshot.ml +++ b/ocaml/xapi/xapi_vm_snapshot.ml @@ -28,6 +28,7 @@ let snapshot ~__context ~vm ~new_name = debug "Snapshot: begin"; TaskHelper.set_cancellable ~__context; + Xapi_vmpp.show_task_in_xencenter ~__context; let res = Xapi_vm_clone.clone Xapi_vm_clone.Disk_op_snapshot ~__context ~vm ~new_name in debug "Snapshot: end"; res @@ -128,6 +129,7 @@ (* dynamically by the xapi_vm_lifecycle.update_allowed_operations call. *) let snapshot_with_quiesce ~__context ~vm ~new_name = debug "snapshot_with_quiesce: begin"; + Xapi_vmpp.show_task_in_xencenter ~__context; let domid = Int64.to_int (Db.VM.get_domid ~__context ~self:vm) in let result = Vmopshelpers.with_xs (fun xs -> (* 1. We first check if the VM supports quiesce-mode *) @@ -173,6 +175,7 @@ List.filter aux (Db.VM.get_VBDs ~__context ~self:vm) let checkpoint ~__context ~vm ~new_name = + Xapi_vmpp.show_task_in_xencenter ~__context; let power_state = Db.VM.get_power_state ~__context ~self:vm in with_xc_and_xs (fun xc xs -> let vbds = get_flushable_vbds ~__context vm in diff -r 75d9c25311cf -r f9273c413c8e ocaml/xapi/xapi_vmpp.ml --- a/ocaml/xapi/xapi_vmpp.ml +++ b/ocaml/xapi/xapi_vmpp.ml @@ -16,6 +16,7 @@ let vmpr_plugin = "vmpr" let vmpr_username = "__dom0__vmpr" +let vmpr_snapshot_other_config_show_in_xencenter = "ShowInXenCenter" let assert_licensed ~__context = if (not (Features.is_enabled ~__context Features.VMPR)) @@ -640,3 +641,30 @@ Db.VMPP.destroy ~__context ~self ) +(* verify if this action is happening due to a VM protection policy *) +let is_snapshot_from_vmpp ~__context = + try + (let session = Xapi_session.get_top ~__context ~self:(Context.get_session_id __context) in + let uname = Db.Session.get_auth_user_name ~__context ~self:session in + let is_lsu = Db.Session.get_is_local_superuser ~__context ~self:session in + is_lsu && (uname = vmpr_username) + ) + with e -> + debug "Error obtaining is_snapshot_from_vmpp: %s" (Printexc.to_string e); + false + +let show_task_in_xencenter ~__context = + if is_snapshot_from_vmpp ~__context then + ( + let task = Context.get_task_id __context in + try + debug "show_in_xencenter: task=%s" (Ref.string_of task); + (* this key is used to make sure the snapshotting task *) + (* is seen from all xencenter clients *) + Db.Task.add_to_other_config ~__context ~self:task + ~key:vmpr_snapshot_other_config_show_in_xencenter + ~value:"" + with e-> + debug "Error adding other_config:show_in_xencenter to task %s: %s" + (Ref.string_of task) (Printexc.to_string e) + )