WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] [PATCH 01 of 21] CP-1739: create XAPI datamodel stubs for PR-1

To: xen-api <xen-api@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-API] [PATCH 01 of 21] CP-1739: create XAPI datamodel stubs for PR-1031 (VM protection policy)
From: Marcus Granado <marcus.granado@xxxxxxxxxx>
Date: Fri, 20 Aug 2010 17:52:20 +0100
Delivery-date: Fri, 20 Aug 2010 10:32:47 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1282323139@localhost>
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1282323139@localhost>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.4.3
 ocaml/idl/datamodel.ml           |  136 ++++++++++++++++++++++++++++++++++++++-
 ocaml/xapi/OMakefile             |    1 +
 ocaml/xapi/api_server.ml         |    1 +
 ocaml/xapi/cli_operations.ml     |    2 +-
 ocaml/xapi/create_misc.ml        |    4 +-
 ocaml/xapi/create_templates.ml   |    2 +
 ocaml/xapi/import_xva.ml         |    1 +
 ocaml/xapi/message_forwarding.ml |   11 ++-
 ocaml/xapi/xapi_host.ml          |   14 ++++
 ocaml/xapi/xapi_host.mli         |    1 +
 ocaml/xapi/xapi_pool.ml          |    2 +
 ocaml/xapi/xapi_pool.mli         |    2 +
 ocaml/xapi/xapi_vm.ml            |    4 +
 ocaml/xapi/xapi_vm.mli           |    5 +-
 ocaml/xapi/xapi_vm_clone.ml      |    5 +-
 ocaml/xapi/xapi_vm_helpers.ml    |    8 +-
 ocaml/xapi/xapi_vmpp.ml          |   69 +++++++++++++++++++
 17 files changed, 259 insertions(+), 9 deletions(-)


# HG changeset patch
# User Marcus Granado <marcus.granado@xxxxxxxxxx>
# Date 1282322886 -3600
# Node ID 1f0e971a9665a927a9424d8926c3c9d49147eee9
# Parent  86ec25f567788cb5a3272e3ec09581a892c9275c
CP-1739: create XAPI datamodel stubs for PR-1031 (VM protection policy)

Signed-off-by: Marcus Granado <marcus.granado@xxxxxxxxxxxxx>

diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/idl/datamodel.ml
--- a/ocaml/idl/datamodel.ml
+++ b/ocaml/idl/datamodel.ml
@@ -60,6 +60,7 @@
 let _vm = "VM"
 let _vm_metrics = "VM_metrics"
 let _vm_guest_metrics = "VM_guest_metrics"
+let _vmpp = "VMPP"
 let _network = "network"
 let _vif = "VIF"
 let _vif_metrics = "VIF_metrics"
@@ -149,6 +150,12 @@
     | x::xs -> if x=in_product_since then "closed"::x::xs else 
go_through_release_order xs
   in go_through_release_order release_order
 
+let cowley_release =
+  { internal=get_product_releases rel_cowley
+  ; opensource=get_oss_releases None
+  ; internal_deprecated_since=None
+  }
+
 let midnight_ride_release =
        { internal=get_product_releases "midnight-ride"
        ; opensource=get_oss_releases None
@@ -3410,6 +3417,16 @@
   ~allowed_roles:_R_READ_ONLY
   ()
 
+let host_get_server_localtime = call ~flags:[`Session]
+  ~name:"get_server_localtime"
+  ~in_oss_since:None
+  ~in_product_since:rel_cowley
+  ~params:[Ref _host, "host", "The host whose clock should be queried"]
+  ~doc:"This call queries the host's clock for the current time in the host's 
local timezone"
+  ~result:(DateTime, "The current local time")
+  ~allowed_roles:_R_READ_ONLY
+  ()
+
 let host_emergency_ha_disable = call ~flags:[`Session]
   ~name:"emergency_ha_disable"
   ~in_oss_since:None
@@ -3666,6 +3683,7 @@
                 host_create_new_blob;
                 host_call_plugin;
                 host_get_servertime;
+                host_get_server_localtime;
                 host_enable_binary_storage;
                 host_disable_binary_storage;
                 host_enable_external_auth;
@@ -5246,6 +5264,17 @@
   ~allowed_roles:_R_POOL_OP
   ()
 
+let pool_test_archive_target = call ~flags:[`Session]
+  ~name:"test_archive_target"
+  ~in_oss_since:None
+  ~in_product_since:rel_cowley
+  ~params:[Ref _pool, "self", "Reference to the pool";
+    Map(String,String), "config", "Location config settings to test";
+  ]
+  ~doc:"This call tests if a location is valid"
+  ~allowed_roles:_R_POOL_OP
+  ()
+
 (** A pool class *)
 let pool =
        create_obj
@@ -5307,6 +5336,7 @@
                        ; pool_disable_redo_log
                        ; pool_audit_log_append
                        ; pool_set_vswitch_controller
+                       ; pool_test_archive_target
                        ]
                ~contents:
                        [uid ~in_oss_since:None _pool
@@ -5759,6 +5789,8 @@
        field ~writer_roles:_R_VM_POWER_ADMIN ~qualifier:DynamicRO 
~in_product_since:rel_midnight_ride                                 ~ty:(Set 
(Ref _vm)) "children"     "List pointing to all the children of this VM";
 
        field ~qualifier:DynamicRO ~in_product_since:rel_midnight_ride 
~default_value:(Some (VMap [])) ~ty:(Map (String,String)) "bios_strings" "BIOS 
strings";
+  field ~writer_roles:_R_VM_POWER_ADMIN ~qualifier:RW 
~in_product_since:rel_cowley ~default_value:(Some (VRef (Ref.string_of 
Ref.null))) ~ty:(Ref _vmpp) "protection_policy" "Ref pointing to a protection 
policy for this VM";
+  field ~writer_roles:_R_POOL_OP ~qualifier:StaticRO 
~in_product_since:rel_cowley ~default_value:(Some (VBool false)) ~ty:Bool 
"is_snapshot_from_vmpp" "true if this snapshot was created by the protection 
policy";
       ])
        ()
 
@@ -5818,6 +5850,105 @@
     ]
     ()
 
+(* VM protection policy *)
+let vmpp_protect_now = call ~flags:[`Session]
+  ~name:"protect_now"
+  ~in_oss_since:None
+  ~in_product_since:rel_cowley
+  ~params:[Ref _vmpp, "vmpp", "The protection policy to execute";]
+  ~doc:"This call executes the protection policy immediately"
+  ~allowed_roles:_R_POOL_OP
+  ()
+let vmpp_archive_now = call ~flags:[`Session]
+  ~name:"archive_now"
+  ~in_oss_since:None
+  ~in_product_since:rel_cowley
+  ~params:[Ref _vm, "snapshot", "The snapshot to archive";]
+  ~doc:"This call archives the snapshot provided as a parameter"
+  ~allowed_roles:_R_VM_POWER_ADMIN
+  ()
+let vmpp_backup_type = Enum ("vmpp_backup_type",
+  [
+    "snapshot", "The backup is a snapshot";
+    "checkpoint", "The backup is a checkpoint";
+  ])
+let vmpp_backup_frequency = Enum ("vmpp_backup_frequency",
+  [
+    "hourly", "Hourly backups";
+    "daily", "Daily backups";
+    "weekly", "Weekly backups";
+  ])
+let vmpp_archive_frequency = Enum ("vmpp_archive_frequency",
+  [
+    "never", "Never archive";
+    "always_after_backup", "Archive after backup";
+    "daily", "Daily archives";
+    "weekly", "Weekly backups";
+  ])
+let vmpp_archive_target_type = Enum ("vmpp_archive_target_type",
+  [
+    "none", "No target config";
+    "cifs", "CIFS target config";
+    "nfs", "NFS target config";
+  ])
+let vmpp_set_is_backup_running = call ~flags:[`Session]
+  ~name:"set_is_backup_running"
+  ~in_oss_since:None
+  ~in_product_since:rel_cowley
+  ~params:[
+    Ref _vmpp, "self", "The protection policy";
+    Bool, "value", "true to mark this protection policy's backup is running"
+  ]
+  ~doc:"This call marks that a protection policy's backup is running"
+  ~allowed_roles:_R_LOCAL_ROOT_ONLY
+  ~hide_from_docs:true
+  ()
+let vmpp_set_is_archive_running = call ~flags:[`Session]
+  ~name:"set_is_archive_running"
+  ~in_oss_since:None
+  ~in_product_since:rel_cowley
+  ~params:[
+    Ref _vmpp, "self", "The protection policy";
+    Bool, "value", "true to mark this protection policy's archive is running"
+  ]
+  ~doc:"This call marks that a protection policy's archive is running"
+  ~allowed_roles:_R_LOCAL_ROOT_ONLY
+  ~hide_from_docs:true
+  ()
+let vmpp =
+  create_obj ~in_db:true ~in_product_since:rel_cowley ~in_oss_since:None 
~internal_deprecated_since:None ~persist:PersistEverything 
~gen_constructor_destructor:true ~name:_vmpp ~descr:"VM Protection Policy"
+    ~gen_events:true
+    ~doccomments:[]
+    ~messages_default_allowed_roles:_R_POOL_OP
+    ~messages:[
+      vmpp_protect_now;
+      vmpp_archive_now;
+      vmpp_set_is_backup_running;
+      vmpp_set_is_archive_running;
+    ]
+    ~contents:[
+      uid _vmpp;
+      namespace ~name:"name" ~contents:(names None RW) ();
+      field ~qualifier:RW ~ty:Bool "is_policy_enabled" "enable or disable this 
policy" ~default_value:(Some (VBool true));
+      field ~qualifier:RW ~ty:vmpp_backup_type "backup_type" "type of the 
backup sub-policy";
+      field ~qualifier:RW ~ty:Int "backup_retention_value" "maximum number of 
backups that should be stored at any time" ~default_value:(Some (VInt 1L));
+      field ~qualifier:RW ~ty:vmpp_backup_frequency "backup_frequency" 
"frequency of the backup schedule";
+      field ~qualifier:RW ~ty:(Map (String,String)) "backup_schedule" 
"schedule of the backup containing 'frequency', 'hour', 'min', 'days'. 
Date/time-related information is in XenServer Local Timezone";
+      field ~qualifier:DynamicRO ~ty:Bool "is_backup_running" "true if this 
protection policy's backup is running";
+      field ~qualifier:RW ~ty:DateTime "backup_last_run_time" "time of the 
last backup" ~default_value:(Some(VDateTime(Date.of_float 0.)));
+      field ~qualifier:RW ~ty:vmpp_archive_target_type "archive_target_type" 
"type of the archive target config" ~default_value:(Some (VEnum "none"));
+      field ~qualifier:RW ~ty:(Map (String,String)) "archive_target_config" 
"configuration for the archive, including its 'type' in {'cifs','nfs'}" 
~default_value:(Some (VMap []));
+      field ~qualifier:RW ~ty:vmpp_archive_frequency "archive_frequency" 
"frequency of the archive schedule" ~default_value:(Some (VEnum "never"));
+      field ~qualifier:RW ~ty:(Map (String,String)) "archive_schedule" 
"schedule of the archive containing 'frequency', 'hour', 'min', 'days'. 
Date/time-related information is in XenServer Local Timezone" 
~default_value:(Some (VMap []));
+      field ~qualifier:DynamicRO ~ty:Bool "is_archive_running" "true if this 
protection policy's archive is running";
+      field ~qualifier:RW ~ty:DateTime "archive_last_run_time" "time of the 
last archive" ~default_value:(Some(VDateTime(Date.of_float 0.)));
+      field ~qualifier:DynamicRO ~ty:(Set (Ref _vm)) "VMs" "all VMs attached 
to this protection policy";
+      field ~qualifier:RW ~ty:Bool "is_alarm_enabled" "true if alarm is 
enabled for this policy" ~default_value:(Some (VBool false));
+      field ~qualifier:RW ~ty:(Map (String,String)) "alarm_config" 
"configuration for the alarm" ~default_value:(Some (VMap []));
+      field ~qualifier:DynamicRO ~ty:(Set (String)) "recent_alerts" "recent 
alerts" ~default_value:(Some (VSet []));
+    ]
+    ()
+
 (** events handling: *)
 
 let event_operation = Enum ("event_operation",
@@ -6089,6 +6220,7 @@
                vm;
                vm_metrics;
                vm_guest_metrics;
+               vmpp;
                host;
                host_crashdump;
                host_patch;
@@ -6175,6 +6307,8 @@
     (_subject, "roles"), (_subject, "roles");
     (*(_subject, "roles"), (_role, "subjects");*)
     (_role, "subroles"), (_role, "subroles");
+
+    (_vm, "protection_policy"), (_vmpp, "VMs");
   ]
 
 (** the full api specified here *)
@@ -6218,7 +6352,7 @@
     or SR *)
 let expose_get_all_messages_for = [ _task; (* _alert; *) _host; _host_metrics; 
_hostcpu; _sr; _vm; _vm_metrics; _vm_guest_metrics;
        _network; _vif; _vif_metrics; _pif; _pif_metrics; _pbd; _vdi; _vbd; 
_vbd_metrics; _console; 
-       _crashdump; _host_crashdump; _host_patch; _pool; _sm; _pool_patch; 
_bond; _vlan; _blob; _subject; _role; _secret; _tunnel ]
+       _crashdump; _host_crashdump; _host_patch; _pool; _sm; _pool_patch; 
_bond; _vlan; _blob; _subject; _role; _secret; _tunnel; _vmpp; ]
 
 
 let no_task_id_for = [ _task; (* _alert; *) _event ]
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/OMakefile
--- a/ocaml/xapi/OMakefile
+++ b/ocaml/xapi/OMakefile
@@ -110,6 +110,7 @@
        xapi_subject \
        xapi_role \
        audit_log \
+       xapi_vmpp \
        xapi_vm_lifecycle \
        xapi_vm_clone \
        xapi_vm_snapshot \
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/api_server.ml
--- a/ocaml/xapi/api_server.ml
+++ b/ocaml/xapi/api_server.ml
@@ -34,6 +34,7 @@
        end
        module VM_metrics = struct end
        module VM_guest_metrics = struct end
+       module VMPP = Xapi_vmpp
 
        module Host = Xapi_host
        module Host_crashdump = Xapi_host_crashdump
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/cli_operations.ml
--- a/ocaml/xapi/cli_operations.ml
+++ b/ocaml/xapi/cli_operations.ml
@@ -1434,7 +1434,7 @@
     ~actions_after_shutdown:`destroy ~actions_after_reboot:`restart 
~actions_after_crash:`destroy ~pV_bootloader:""
     ~pV_kernel:"" ~pV_ramdisk:"" ~pV_args:"" ~pV_bootloader_args:"" 
~pV_legacy_args:"" ~hVM_boot_policy:"" 
     ~hVM_boot_params:[] ~hVM_shadow_multiplier:1. ~platform:[] ~pCI_bus:"" 
~other_config:[] ~xenstore_data:[] ~recommendations:"" ~ha_always_run:false 
~ha_restart_priority:""
-    ~tags:[] in
+    ~tags:[] ~protection_policy:Ref.null ~is_snapshot_from_vmpp:false in
   let uuid=Client.VM.get_uuid rpc session_id vm in
   printer (Cli_printer.PList [uuid])
 
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/create_misc.ml
--- a/ocaml/xapi/create_misc.ml
+++ b/ocaml/xapi/create_misc.ml
@@ -174,7 +174,9 @@
                ~ha_restart_priority:"" ~ha_always_run:false ~recommendations:""
                ~last_boot_CPU_flags:[] ~last_booted_record:""
                ~guest_metrics:Ref.null ~metrics
-               ~bios_strings:[];
+               ~bios_strings:[] ~protection_policy:Ref.null
+               ~is_snapshot_from_vmpp:false
+       ;
        Xapi_vm_helpers.update_memory_overhead ~__context ~vm:domain_zero_ref
 
 and create_domain_zero_console_record ~__context ~domain_zero_ref =
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/create_templates.ml
--- a/ocaml/xapi/create_templates.ml
+++ b/ocaml/xapi/create_templates.ml
@@ -208,6 +208,8 @@
        vM_tags = [];
        
        vM_bios_strings = [];
+  vM_protection_policy = Ref.null;
+  vM_is_snapshot_from_vmpp = false;
 }
 
 let other_install_media_template memory = 
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/import_xva.ml
--- a/ocaml/xapi/import_xva.ml
+++ b/ocaml/xapi/import_xva.ml
@@ -82,6 +82,7 @@
                                ~pV_args:""
                                ~pCI_bus:"" ~other_config:[] ~xenstore_data:[] 
~recommendations:""
                                ~ha_always_run:false ~ha_restart_priority:"" 
~tags:[]
+                               ~protection_policy:Ref.null 
~is_snapshot_from_vmpp:false
                              in
 
                  TaskHelper.operate_on_db_task ~__context
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/message_forwarding.ml
--- a/ocaml/xapi/message_forwarding.ml
+++ b/ocaml/xapi/message_forwarding.ml
@@ -505,6 +505,7 @@
   module Role = Local.Role
   module Task = Local.Task
   module Event = Local.Event
+  module VMPP = Local.VMPP
   (* module Alert = Local.Alert *)
 
   module Pool = struct
@@ -850,9 +851,9 @@
     (* 
-------------------------------------------------------------------------- *)
 
     (* don't forward create. this just makes a db record *)
-    let create ~__context ~name_label ~name_description ~user_version 
~is_a_template ~affinity ~memory_target ~memory_static_max ~memory_dynamic_max 
~memory_dynamic_min ~memory_static_min ~vCPUs_params ~vCPUs_max 
~vCPUs_at_startup ~actions_after_shutdown ~actions_after_reboot 
~actions_after_crash ~pV_bootloader ~pV_kernel ~pV_ramdisk ~pV_args 
~pV_bootloader_args ~pV_legacy_args ~hVM_boot_policy ~hVM_boot_params 
~hVM_shadow_multiplier ~platform ~pCI_bus ~other_config ~recommendations 
~xenstore_data  ~ha_always_run ~ha_restart_priority ~tags ~blocked_operations =
+    let create ~__context ~name_label ~name_description ~user_version 
~is_a_template ~affinity ~memory_target ~memory_static_max ~memory_dynamic_max 
~memory_dynamic_min ~memory_static_min ~vCPUs_params ~vCPUs_max 
~vCPUs_at_startup ~actions_after_shutdown ~actions_after_reboot 
~actions_after_crash ~pV_bootloader ~pV_kernel ~pV_ramdisk ~pV_args 
~pV_bootloader_args ~pV_legacy_args ~hVM_boot_policy ~hVM_boot_params 
~hVM_shadow_multiplier ~platform ~pCI_bus ~other_config ~recommendations 
~xenstore_data  ~ha_always_run ~ha_restart_priority ~tags ~blocked_operations 
~protection_policy =
       info "VM.create: name_label = '%s' name_description = '%s'" name_label 
name_description;
-      Local.VM.create ~__context ~name_label ~name_description ~user_version 
~is_a_template ~affinity ~memory_target ~memory_static_max ~memory_dynamic_max 
~memory_dynamic_min ~memory_static_min ~vCPUs_params ~vCPUs_max 
~vCPUs_at_startup ~actions_after_shutdown ~actions_after_reboot 
~actions_after_crash ~pV_bootloader ~pV_kernel ~pV_ramdisk ~pV_args 
~pV_bootloader_args ~pV_legacy_args ~hVM_boot_policy ~hVM_boot_params 
~hVM_shadow_multiplier ~platform ~pCI_bus ~other_config  ~recommendations 
~xenstore_data  ~ha_always_run ~ha_restart_priority ~tags ~blocked_operations
+      Local.VM.create ~__context ~name_label ~name_description ~user_version 
~is_a_template ~affinity ~memory_target ~memory_static_max ~memory_dynamic_max 
~memory_dynamic_min ~memory_static_min ~vCPUs_params ~vCPUs_max 
~vCPUs_at_startup ~actions_after_shutdown ~actions_after_reboot 
~actions_after_crash ~pV_bootloader ~pV_kernel ~pV_ramdisk ~pV_args 
~pV_bootloader_args ~pV_legacy_args ~hVM_boot_policy ~hVM_boot_params 
~hVM_shadow_multiplier ~platform ~pCI_bus ~other_config  ~recommendations 
~xenstore_data  ~ha_always_run ~ha_restart_priority ~tags ~blocked_operations 
~protection_policy
 
     (* don't forward destroy. this just deletes db record *)
     let destroy ~__context ~self =
@@ -2068,6 +2069,12 @@
       do_op_on ~local_fn ~__context ~host
        (fun session_id rpc -> Client.Host.get_servertime rpc session_id host)
 
+    let get_server_localtime ~__context ~host =
+      (* info "Host.get_servertime"; *) (* suppressed because the GUI calls 
this frequently and it isn't interesting for debugging *)
+      let local_fn = Local.Host.get_server_localtime ~host in
+  do_op_on ~local_fn ~__context ~host
+  (fun session_id rpc -> Client.Host.get_server_localtime rpc session_id host)
+
     let enable_binary_storage ~__context ~host =
       info "Host.enable_binary_storage: host = '%s'" (host_uuid ~__context 
host);
       let local_fn = Local.Host.enable_binary_storage ~host in
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_host.ml
--- a/ocaml/xapi/xapi_host.ml
+++ b/ocaml/xapi/xapi_host.ml
@@ -928,6 +928,20 @@
 let get_servertime ~__context ~host =
   Date.of_float (Unix.gettimeofday ())
 
+let get_server_localtime ~__context ~host =
+  let gmt_time= Unix.gettimeofday () in
+  let local_time = Unix.localtime gmt_time in
+  Date.of_string
+  (
+    Printf.sprintf "%04d%02d%02dT%02d:%02d:%02d"
+      (local_time.Unix.tm_year+1900)
+      (local_time.Unix.tm_mon+1)
+      local_time.Unix.tm_mday
+      local_time.Unix.tm_hour
+      local_time.Unix.tm_min
+      local_time.Unix.tm_sec
+       )
+
 let enable_binary_storage ~__context ~host =
   Unixext.mkdir_safe Xapi_globs.xapi_blob_location 0o700;
   Db.Host.remove_from_other_config ~__context ~self:host 
~key:Xapi_globs.host_no_local_storage
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_host.mli
--- a/ocaml/xapi/xapi_host.mli
+++ b/ocaml/xapi/xapi_host.mli
@@ -168,6 +168,7 @@
 val sync_data : __context:Context.t -> host:API.ref_host -> unit
 val backup_rrds : __context:'a -> host:'b -> delay:float -> unit
 val get_servertime : __context:'a -> host:'b -> Date.iso8601
+val get_server_localtime : __context:'a -> host:'b -> Date.iso8601
 val enable_binary_storage :
   __context:Context.t -> host:[ `host ] Ref.t -> unit
 val disable_binary_storage :
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_pool.ml
--- a/ocaml/xapi/xapi_pool.ml
+++ b/ocaml/xapi/xapi_pool.ml
@@ -1456,3 +1456,5 @@
        (* copy audit record from slave exactly as it is, without any new 
prefixes *)
        Rbac_audit.append_line ~raw:true "%s" line;
        ()
+
+let test_archive_target ~__context ~self ~config = ()
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_pool.mli
--- a/ocaml/xapi/xapi_pool.mli
+++ b/ocaml/xapi/xapi_pool.mli
@@ -192,3 +192,5 @@
 (** VSwitch Controller *)
 val set_vswitch_controller : __context:Context.t -> address:string -> unit
 val audit_log_append : __context:Context.t -> line:string -> unit
+
+val test_archive_target : __context:Context.t -> self:API.ref_pool -> 
config:API.string_to_string_map -> unit
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_vm.ml
--- a/ocaml/xapi/xapi_vm.ml
+++ b/ocaml/xapi/xapi_vm.ml
@@ -822,6 +822,8 @@
                ~ha_restart_priority
                ~tags
                ~blocked_operations
+               ~protection_policy
+               ~is_snapshot_from_vmpp
                : API.ref_VM =
        let gen_mac_seed () = Uuid.to_string (Uuid.make_uuid ()) in
        (* Add random mac_seed if there isn't one specified already *)
@@ -864,6 +866,8 @@
                ~ha_restart_priority
                ~tags
                ~blocked_operations
+               ~protection_policy
+               ~is_snapshot_from_vmpp
 
 let destroy  ~__context ~self = 
        let parent = Db.VM.get_parent ~__context ~self in
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_vm.mli
--- a/ocaml/xapi/xapi_vm.mli
+++ b/ocaml/xapi/xapi_vm.mli
@@ -181,7 +181,10 @@
   xenstore_data:(string * string) list ->
   ha_always_run:bool ->
   ha_restart_priority:string ->
-  tags:string list -> blocked_operations:'a -> API.ref_VM
+  tags:string list -> blocked_operations:'a ->
+  protection_policy:[ `VMPP ] Ref.t ->
+  is_snapshot_from_vmpp:bool
+-> API.ref_VM
 val destroy : __context:Context.t -> self:[ `VM ] Ref.t -> unit
 val clone :
   __context:Context.t -> vm:API.ref_VM -> new_name:string -> [ `VM ] Ref.t
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_vm_clone.ml
--- a/ocaml/xapi/xapi_vm_clone.ml
+++ b/ocaml/xapi/xapi_vm_clone.ml
@@ -307,7 +307,10 @@
                ~ha_restart_priority:all.Db_actions.vM_ha_restart_priority
                ~ha_always_run:false
                ~tags:all.Db_actions.vM_tags
-               ~bios_strings:all.Db_actions.vM_bios_strings;
+               ~bios_strings:all.Db_actions.vM_bios_strings
+               ~protection_policy:Ref.null
+               ~is_snapshot_from_vmpp:false(*from_protection_policy*)
+       ;
 
        ref, uuid
 
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_vm_helpers.ml
--- a/ocaml/xapi/xapi_vm_helpers.ml
+++ b/ocaml/xapi/xapi_vm_helpers.ml
@@ -115,7 +115,8 @@
            ~platform
            ~pCI_bus ~other_config ~xenstore_data ~recommendations
           ~ha_always_run ~ha_restart_priority ~tags 
-          ~blocked_operations
+          ~blocked_operations ~protection_policy
+     ~is_snapshot_from_vmpp
           : API.ref_VM =
 
        (* NB parameter validation is delayed until VM.start *)
@@ -175,7 +176,10 @@
                ~blobs:[]
                ~ha_restart_priority
                ~ha_always_run ~tags
-               ~bios_strings:[];
+               ~bios_strings:[]
+    ~protection_policy:Ref.null
+    ~is_snapshot_from_vmpp:false 
+    ;
        Db.VM.set_power_state ~__context ~self:vm_ref ~value:`Halted;
        Xapi_vm_lifecycle.update_allowed_operations ~__context ~self:vm_ref;
        update_memory_overhead ~__context ~vm:vm_ref;
diff -r 86ec25f56778 -r 1f0e971a9665 ocaml/xapi/xapi_vmpp.ml
--- /dev/null
+++ b/ocaml/xapi/xapi_vmpp.ml
@@ -0,0 +1,69 @@
+(*
+ * Copyright (C) 2006-2009 Citrix Systems Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *)
+module D = Debug.Debugger(struct let name="xapi" end)
+open D
+
+(*
+    val protect_now : __context:Context.t -> self:ref_VMPP -> unit
+    val archive_now : __context:Context.t -> self:ref_VM -> unit
+    val test_archive_settings :
+      __context:Context.t -> settings:API.string_to_string_map -> unit
+    val create :
+      __context:Context.t ->
+      name_label:string ->
+      name_description:string ->
+      is_policy_enabled:bool ->
+      backup_frequency:API.vmpp_backup_frequency ->
+      backup_retention_value:int64 ->
+      backup_schedule:API.string_to_string_map ->
+      backup_last_run_time:API.datetime ->
+      archive_target_config_type:API.vmpp_archive_target_config_type ->
+      archive_target_config:API.string_to_string_map ->
+      archive_frequency:API.vmpp_archive_frequency ->
+      archive_schedule:API.string_to_string_map ->
+      archive_last_run_time:API.datetime ->
+      is_alarm_enabled:bool ->
+      alarm_config:API.string_to_string_map -> API.ref_VMPP
+    val destroy : __context:Context.t -> self:API.ref_VMPP -> unit
+*)
+
+let create ~__context ~name_label ~name_description ~is_policy_enabled
+  ~backup_type ~backup_retention_value ~backup_frequency ~backup_schedule 
~backup_last_run_time
+  ~archive_target_type ~archive_target_config ~archive_frequency 
~archive_schedule  ~archive_last_run_time
+  ~is_alarm_enabled ~alarm_config
+: API.ref_VMPP =
+  let ref=Ref.make() in
+  let uuid=Uuid.to_string (Uuid.make_uuid()) in
+  Db.VMPP.create ~__context ~ref ~uuid
+    ~name_label ~name_description ~is_policy_enabled
+    ~backup_type ~backup_retention_value
+    ~backup_frequency ~backup_schedule ~backup_last_run_time
+    ~is_backup_running:false ~is_archive_running:false
+    ~archive_target_config ~archive_target_type
+    ~archive_frequency ~archive_schedule ~archive_last_run_time
+    ~is_alarm_enabled ~alarm_config ~recent_alerts:[];
+  ref
+
+let destroy ~__context ~self = 
+  Db.VMPP.destroy ~__context ~self
+
+let protect_now ~__context ~vmpp = ()
+let archive_now ~__context ~snapshot = ()
+
+let set_is_backup_running ~__context ~self ~value =
+  Db.VMPP.set_is_backup_running ~__context ~self ~value
+let set_is_archive_running ~__context ~self ~value =
+  Db.VMPP.set_is_archive_running ~__context ~self ~value
+
+

Attachment: xen-api.hg-01.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
<Prev in Thread] Current Thread [Next in Thread>