]> xenbits.xensource.com Git - xcp/xen-api.git/commitdiff
CA-43645: show VMPR snapshots in task list in xencenter
authorMarcus Granado <marcus.granado@eu.citrix.com>
Tue, 12 Oct 2010 09:44:04 +0000 (10:44 +0100)
committerMarcus Granado <marcus.granado@eu.citrix.com>
Tue, 12 Oct 2010 09:44:04 +0000 (10:44 +0100)
Signed-off-by: Marcus Granado <marcus.granado@eu.citrix.com>
ocaml/xapi/xapi_vm_clone.ml
ocaml/xapi/xapi_vm_snapshot.ml
ocaml/xapi/xapi_vmpp.ml

index c2a287fa993ab6788bda628abd4e6acdc138e126..a823e797173c19cd982ef36b8874ee13ab636f86 100644 (file)
@@ -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 *)
index 1bb04a5b122912f061bb361335efe5c271cca061..d12584f69fa54688f2a0912cd94064ed3f8defc3 100644 (file)
@@ -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
index facb44f513615e7b802c4c539c6f46580b4ac20c..bd7d894dc4c84699188a7ecd824bcbc89a953d89 100644 (file)
@@ -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)
+    )