(* 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 *)
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
(* 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 *)
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
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))
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)
+ )