From: Marcus Granado Date: Tue, 12 Oct 2010 09:44:04 +0000 (+0100) Subject: CA-43645: show VMPR snapshots in task list in xencenter X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=4c85f3bd98c2ac20c3e16929056b87ef62ab2cd8;p=xcp%2Fxen-api.git CA-43645: show VMPR snapshots in task list in xencenter Signed-off-by: Marcus Granado --- diff --git a/ocaml/xapi/xapi_vm_clone.ml b/ocaml/xapi/xapi_vm_clone.ml index c2a287fa..a823e797 100644 --- a/ocaml/xapi/xapi_vm_clone.ml +++ b/ocaml/xapi/xapi_vm_clone.ml @@ -249,17 +249,7 @@ let copy_vm_record ~__context ~vm ~disk_op ~new_name ~new_power_state = (* 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 --git a/ocaml/xapi/xapi_vm_snapshot.ml b/ocaml/xapi/xapi_vm_snapshot.ml index 1bb04a5b..d12584f6 100644 --- a/ocaml/xapi/xapi_vm_snapshot.ml +++ b/ocaml/xapi/xapi_vm_snapshot.ml @@ -28,6 +28,7 @@ open D 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 @@ let wait_for_snapshot ~__context ~vm ~xs ~domid ~new_name = (* 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 @@ let get_flushable_vbds ~__context vm = 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 --git a/ocaml/xapi/xapi_vmpp.ml b/ocaml/xapi/xapi_vmpp.ml index facb44f5..bd7d894d 100644 --- a/ocaml/xapi/xapi_vmpp.ml +++ b/ocaml/xapi/xapi_vmpp.ml @@ -16,6 +16,7 @@ open D 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 @@ let destroy ~__context ~self = 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) + )