[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-API] [PATCH] [CA-38346] Brings template generation code up-to-date with the latest system requirements



# HG changeset patch
# User Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx>
# Date 1268238195 0
# Node ID 9efe683bbeafd03229bb8eb7c4687492af54cd8e
# Parent  dd9beea13c2aa57a1bd51a02dd705c9b802f7be7
[CA-38346] Brings template generation code up-to-date with the latest system 
requirements.

Externally perceivable changes:
* All templates are now explicitly marked as either "32-bit" or "64-bit".
* All 32-bit Windows templates have a recommendation that (static-max <= 4 GiB).
* All 64-bit Windows templates have a recommendation that (static-max <= 32 
GiB).

Additional changes:
* Fixed a bug that caused the contents of optional arguments to be ignored.
* Refactored the template constructors to reduce the level of repetitive 
boilerplate.

Signed-off-by: Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx>
Acked-by: Magnus Therning <Magnus.Therning@xxxxxxxxxxxxx>

diff -r dd9beea13c2a -r 9efe683bbeaf ocaml/xapi/create_templates.ml
--- a/ocaml/xapi/create_templates.ml    Wed Mar 10 16:23:15 2010 +0000
+++ b/ocaml/xapi/create_templates.ml    Wed Mar 10 16:23:15 2010 +0000
@@ -263,178 +263,224 @@
           "install-ramdisk", "install.img"
         ];
   }
-  
-(** Makes a Windows template using the given memory parameters in MiB, root 
disk
-size in GiB, and version string. *)
-let windows_template ?(nx=false) ?cps memory root_disk_size version = 
+
+(* Linux and Windows templates 
-----------------------------------------------*)
+
+type linux_template_flags =
+       | Limit_machine_address_size
+       | Suppress_spurious_page_faults
+
+type windows_template_flags =
+       | NX
+       | XenApp
+
+type architecture =
+       | X32
+       | X64
+
+let friendly_string_of_architecture = function
+       | X32 -> "(32-bit)"
+       | X64 -> "(64-bit)"
+
+let technical_string_of_architecture = function
+       | X32 -> "i386"
+       | X64 -> "x86_64"
+
+let make_long_name name architecture =
+       Printf.sprintf "%s %s" name (friendly_string_of_architecture 
architecture)
+
+let windows_template
+               name architecture
+               minimum_supported_memory_mib
+               root_disk_size_gib
+               flags = 
        let root = {
                device = "0";
-               size = (root_disk_size ** gib);
+               size = ((Int64.of_int root_disk_size_gib) ** gib);
                sr = preferred_sr;
                bootable = false;
                _type = `system
-       } in 
-       let base = other_install_media_template memory in
+       } in
+       let maximum_supported_memory_mib = match architecture with
+               | X32 -> 4
+               | X64 -> 32 in
+       let base = other_install_media_template
+               (default_memory_parameters (Int64.of_int 
minimum_supported_memory_mib)) in
+       let xen_app = List.mem XenApp flags in
+       let name = Printf.sprintf "%sWindows %s"
+               (if xen_app then "Citrix XenApp on " else "")
+               (make_long_name name architecture) in
        {
                base with
-               vM_name_label = Printf.sprintf "%sWindows %s" (Opt.default "" 
(Opt.map (fun cps -> cps ^ " on ") cps)) version;
-               vM_name_description =
-                       Printf.sprintf "Clones of this template will 
automatically \
-                       provision their storage when first booted and then 
reconfigure \
-                       themselves with the optimal settings for %sWindows %s." 
-                               (Opt.default "" (Opt.map (Printf.sprintf 
"running %s on ") cps))
-                               version;
+               vM_name_label = name;
+               vM_name_description = Printf.sprintf
+                       "Clones of this template will automatically provision 
their \
+                       storage when first booted and then reconfigure 
themselves with \
+                       the optimal settings for %s."
+                       name;
                vM_other_config = [
                        disks_key, Xml.to_string (xml_of_disks [ root ]);
                        install_methods_otherconfig_key, "cdrom"
-               ] @ (Opt.default [] (Opt.map (fun _ -> [ 
"application_template", "1" ]) cps));
-               vM_platform = if nx then with_nx_platform_flags else 
base.vM_platform;
-               vM_HVM_shadow_multiplier = Opt.default 
base.vM_HVM_shadow_multiplier (Opt.map (fun _ -> 4.0) cps);
+               ] @ (if xen_app then ["application_template", "1"] else []);
+               vM_platform =
+                       if List.mem NX flags
+                       then with_nx_platform_flags
+                       else base.vM_platform;
+               vM_HVM_shadow_multiplier =
+                       (if xen_app then 4.0 else 
base.vM_HVM_shadow_multiplier);
+               vM_recommendations = (recommendations 
~memory:maximum_supported_memory_mib ());
        }
 
+let rhel4x_template name architecture flags =
+       let name = make_long_name name architecture in
+       let s_s_p_f =
+               if List.mem Suppress_spurious_page_faults flags
+               then [("suppress-spurious-page-faults", "true")]
+               else [] in
+       let m_a_s =
+               if List.mem Limit_machine_address_size flags
+               then [(Xapi_globs.machine_address_size_key_name, 
Xapi_globs.machine_address_size_key_value)]
+               else [] in
+       let bt = eli_install_template (default_memory_parameters 256L) name 
"rhlike" true "graphical utf8" in
+       { bt with
+               vM_other_config = (install_methods_otherconfig_key, 
"cdrom,nfs,http,ftp") :: m_a_s @ s_s_p_f @ bt.vM_other_config;
+               vM_recommendations = recommendations ~memory:16 ~vifs:3 ();
+       }
+
+let rhel5x_template name architecture flags =
+       let name = make_long_name name architecture in
+       let bt = eli_install_template (default_memory_parameters 512L) name 
"rhlike" true "graphical utf8" in
+       let m_a_s =
+               if List.mem Limit_machine_address_size flags
+               then [(Xapi_globs.machine_address_size_key_name, 
Xapi_globs.machine_address_size_key_value)]
+               else [] in
+       { bt with 
+               vM_other_config = (install_methods_otherconfig_key, 
"cdrom,nfs,http,ftp") :: ("rhel5","true") :: m_a_s @ bt.vM_other_config;
+               vM_recommendations = recommendations ~memory:16 ();
+       }
+
+let sles_9_template name architecture flags =
+       let name = make_long_name name architecture in
+       let install_arch = technical_string_of_architecture architecture in
+       let bt = eli_install_template (default_memory_parameters 256L) name 
"sleslike" true "console=ttyS0 xencons=ttyS" in
+       { bt with 
+               vM_other_config = (install_methods_otherconfig_key, 
"nfs,http,ftp") :: ("install-arch",install_arch) :: bt.vM_other_config;
+               vM_recommendations = recommendations ~memory:32 ~vifs:3 ();
+       }
+
+let sles10_template name architecture flags =
+       let name = make_long_name name architecture in
+       let install_arch = technical_string_of_architecture architecture in
+       let bt = eli_install_template (default_memory_parameters 512L) name 
"sleslike" true "console=ttyS0 xencons=ttyS" in
+       { bt with
+               vM_other_config = (install_methods_otherconfig_key, 
"cdrom,nfs,http,ftp") :: ("install-arch",install_arch) :: bt.vM_other_config;
+               vM_recommendations = recommendations ~memory:32 ~vifs:3 ();
+       }
+
+let sles11_template = sles10_template
+
+let debian_template name release architecture flags =
+       let name = make_long_name name architecture in
+       let install_arch = technical_string_of_architecture architecture in
+       let bt = eli_install_template (default_memory_parameters 128L) name 
"debianlike" false "-- quiet console=hvc0" in
+       { bt with 
+               vM_other_config = (install_methods_otherconfig_key, 
"cdrom,http,ftp") :: ("install-arch", install_arch) :: ("debian-release", 
release) :: bt.vM_other_config;
+       }
 
 let create_all_templates rpc session_id =
-  let rhel4x_install_template name ?(suppress_spurious_page_faults=false) 
?(limit_machine_address_size=false) () =
-      let s_s_p_f = match suppress_spurious_page_faults with
-       | true -> [("suppress-spurious-page-faults", "true")]
-       | false -> [] in
-      let m_a_s = match limit_machine_address_size with
-       | true -> [(Xapi_globs.machine_address_size_key_name, 
Xapi_globs.machine_address_size_key_value)]
-       | false -> [] in
-      let bt = eli_install_template (default_memory_parameters 256L) name 
"rhlike" true "graphical utf8" in
-      { bt with
-         vM_recommendations = recommendations ~vifs:3 ();
-          vM_other_config = (install_methods_otherconfig_key, 
"cdrom,nfs,http,ftp") ::
-                           m_a_s @
-                           s_s_p_f @ 
-                           bt.vM_other_config;
-      } in
 
-  (* the install_arch param should be passed in as either "i386" or "x86_64" 
("i386" only support up to 16GB memory) *)
-  let rhel5x_install_template name install_arch 
?(limit_machine_address_size=false) () =
-      let bt = eli_install_template (default_memory_parameters 512L) name 
"rhlike" true "graphical utf8" in
-      let recommendations = if install_arch = "i386" then recommendations 
~memory:16 () 
-                                                     else recommendations () in
-      let m_a_s = match limit_machine_address_size with
-       | true -> [(Xapi_globs.machine_address_size_key_name, 
Xapi_globs.machine_address_size_key_value)]
-       | false -> [] in
-      { bt with 
-          vM_other_config = (install_methods_otherconfig_key, 
"cdrom,nfs,http,ftp") :: ("rhel5","true") ::
-                             m_a_s @
-                            bt.vM_other_config;
-          vM_recommendations = recommendations;
-      } in
+       let linux_static_templates =
+               let l = Limit_machine_address_size    in
+               let s = Suppress_spurious_page_faults in
+       [
+               rhel4x_template "Red Hat Enterprise Linux 4.5" X32 [  s;];
+               rhel4x_template "Red Hat Enterprise Linux 4.6" X32 [  s;];
+               rhel4x_template "Red Hat Enterprise Linux 4.7" X32 [l;s;];
+               rhel4x_template "Red Hat Enterprise Linux 4.8" X32 [l;  ];
+               rhel5x_template "Red Hat Enterprise Linux 5.0" X32 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.1" X32 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.2" X32 [l;  ];
+               rhel5x_template "Red Hat Enterprise Linux 5.3" X32 [l;  ];
+               rhel5x_template "Red Hat Enterprise Linux 5.4" X32 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.0" X64 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.1" X64 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.2" X64 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.3" X64 [    ];
+               rhel5x_template "Red Hat Enterprise Linux 5.4" X64 [    ];
 
-  (* the install_arch param should be passed in as either "i386" or "x86_64" *)
-  let sles9_install_template name install_arch =
-      let bt = eli_install_template (default_memory_parameters 256L) name 
"sleslike" true "console=ttyS0 xencons=ttyS" in
-      { bt with 
-         vM_recommendations = recommendations ~vifs:3 ();
-          vM_other_config = (install_methods_otherconfig_key, "nfs,http,ftp") 
:: ("install-arch",install_arch) :: bt.vM_other_config;
-      } in
-  let sles10_install_template name install_arch =
-      let bt = eli_install_template (default_memory_parameters 512L) name 
"sleslike" true "console=ttyS0 xencons=ttyS" in
-      { bt with 
-         vM_recommendations = recommendations ~vifs:3 ();
-          vM_other_config = (install_methods_otherconfig_key, 
"cdrom,nfs,http,ftp") :: ("install-arch",install_arch) :: bt.vM_other_config;
-      } in
-  let sles11_install_template = sles10_install_template in
-  let debian_install_template name release install_arch =
-      let bt = eli_install_template (default_memory_parameters 128L) name 
"debianlike" false " -- quiet console=hvc0" in
-      { bt with 
-          vM_other_config = (install_methods_otherconfig_key, 
"cdrom,http,ftp") :: ("install-arch", install_arch) :: ("debian-release", 
release) :: bt.vM_other_config;
-      } in
-  let linux_static_templates =
-    [
-               rhel4x_install_template "Red Hat Enterprise Linux 4.5"  
~suppress_spurious_page_faults:true ();
-               rhel4x_install_template "CentOS 4.5"                    
~suppress_spurious_page_faults:true ();
-               rhel4x_install_template "Red Hat Enterprise Linux 4.6"  
~suppress_spurious_page_faults:true ();
-               rhel4x_install_template "CentOS 4.6"                    
~suppress_spurious_page_faults:true ();
-               rhel4x_install_template "Red Hat Enterprise Linux 4.7"  
~suppress_spurious_page_faults:true ~limit_machine_address_size:true ();
-               rhel4x_install_template "CentOS 4.7"                    
~suppress_spurious_page_faults:true ~limit_machine_address_size:true ();
-               rhel4x_install_template "Red Hat Enterprise Linux 4.8"          
                            ~limit_machine_address_size:true ();
-               rhel4x_install_template "CentOS 4.8"                            
                            ~limit_machine_address_size:true ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.0"     
"i386" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.0"      
"i386" ();
-               rhel5x_install_template "CentOS 5.0"                       
"i386" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.1"     
"i386" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.1"      
"i386" ();
-               rhel5x_install_template "CentOS 5.1"                       
"i386" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.2"     
"i386" ~limit_machine_address_size:true ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.2"      
"i386" ~limit_machine_address_size:true ();
-               rhel5x_install_template "CentOS 5.2"                       
"i386" ~limit_machine_address_size:true ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.3"     
"i386" ~limit_machine_address_size:true ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.3"      
"i386" ~limit_machine_address_size:true ();
-               rhel5x_install_template "CentOS 5.3"                       
"i386" ~limit_machine_address_size:true ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.4"     
"i386" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.4"      
"i386" ();
-               rhel5x_install_template "CentOS 5.4"                       
"i386" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.0 x64" 
"x86_64" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.0 x64"  
"x86_64" ();
-               rhel5x_install_template "CentOS 5.0 x64"                   
"x86_64" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.1 x64" 
"x86_64" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.1 x64"  
"x86_64" ();
-               rhel5x_install_template "CentOS 5.1 x64"                   
"x86_64" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.2 x64" 
"x86_64" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.2 x64"  
"x86_64" ();
-               rhel5x_install_template "CentOS 5.2 x64"                   
"x86_64" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.3 x64" 
"x86_64" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.3 x64"  
"x86_64" ();
-               rhel5x_install_template "CentOS 5.3 x64"                   
"x86_64" ();
-               rhel5x_install_template "Red Hat Enterprise Linux 5.4 x64" 
"x86_64" ();
-               rhel5x_install_template "Oracle Enterprise Linux 5.4 x64"  
"x86_64" ();
-               rhel5x_install_template "CentOS 5.4 x64"                   
"x86_64" ();
-               sles9_install_template  "SUSE Linux Enterprise Server 9 SP4" 
"i386";
-               sles10_install_template "SUSE Linux Enterprise Server 10 SP1"   
  "i386";
-               sles10_install_template "SUSE Linux Enterprise Server 10 SP1 
x64" "x86_64";
-               sles10_install_template "SUSE Linux Enterprise Server 10 SP2"   
  "i386";
-               sles10_install_template "SUSE Linux Enterprise Server 10 SP2 
x64" "x86_64";
-               sles11_install_template "SUSE Linux Enterprise Server 11"       
  "i386";
-               sles11_install_template "SUSE Linux Enterprise Server 11 x64"   
  "x86_64";
-               debian_install_template "Debian Lenny 5.0" "lenny" "i386";
-               
+               rhel4x_template "CentOS 4.5" X32 [  s;];
+               rhel4x_template "CentOS 4.6" X32 [  s;];
+               rhel4x_template "CentOS 4.7" X32 [l;s;];
+               rhel4x_template "CentOS 4.8" X32 [l;  ];
+               rhel5x_template "CentOS 5.0" X32 [    ];
+               rhel5x_template "CentOS 5.1" X32 [    ];
+               rhel5x_template "CentOS 5.2" X32 [l;  ];
+               rhel5x_template "CentOS 5.3" X32 [l;  ];
+               rhel5x_template "CentOS 5.4" X32 [    ];
+               rhel5x_template "CentOS 5.0" X64 [    ];
+               rhel5x_template "CentOS 5.1" X64 [    ];
+               rhel5x_template "CentOS 5.2" X64 [    ];
+               rhel5x_template "CentOS 5.3" X64 [    ];
+               rhel5x_template "CentOS 5.4" X64 [    ];
+
+               rhel5x_template "Oracle Enterprise Linux 5.0" X32 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.1" X32 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.2" X32 [l;  ];
+               rhel5x_template "Oracle Enterprise Linux 5.3" X32 [l;  ];
+               rhel5x_template "Oracle Enterprise Linux 5.4" X32 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.0" X64 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.1" X64 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.2" X64 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.3" X64 [    ];
+               rhel5x_template "Oracle Enterprise Linux 5.4" X64 [    ];
+
+               sles_9_template "SUSE Linux Enterprise Server 9 SP4"  X32 [    
];
+               sles10_template "SUSE Linux Enterprise Server 10 SP1" X32 [    
];
+               sles10_template "SUSE Linux Enterprise Server 10 SP2" X32 [    
];
+               sles11_template "SUSE Linux Enterprise Server 11"     X32 [    
];
+               sles10_template "SUSE Linux Enterprise Server 10 SP1" X64 [    
];
+               sles10_template "SUSE Linux Enterprise Server 10 SP2" X64 [    
];
+               sles11_template "SUSE Linux Enterprise Server 11"     X64 [    
];
+
+               debian_template "Debian Lenny 5.0" "lenny" X32 [    ];
+
                sdk_install_template
-    ] in
-
-       let static_templates = [
-               other_install_media_template (default_memory_parameters 128L);
-               windows_template    (default_memory_parameters  256L)  8L "XP 
SP2";
-               windows_template    (default_memory_parameters  256L)  8L "XP 
SP3";
-               windows_template    (default_memory_parameters  256L)  8L 
"Server 2003";
-               windows_template ~nx:true (default_memory_parameters  256L)  8L 
"Server 2003 x64";
-               windows_template ~nx:true (default_memory_parameters  512L) 24L 
"Server 2008";
-               windows_template ~nx:true  (default_memory_parameters  512L) 
24L "Server 2008 x64";
-               windows_template ~nx:true (default_memory_parameters 1024L) 24L 
"Vista";
-               windows_template ~nx:true (default_memory_parameters 1024L) 24L 
"7";
-               windows_template ~nx:true (default_memory_parameters 2048L) 24L 
"7 x64";
-               windows_template ~nx:true (default_memory_parameters 512L) 24L 
"Server 2008 R2 x64";
-               windows_template ~cps:"Citrix XenApp" 
(default_memory_parameters 256L) 8L "Server 2003";
-               windows_template ~cps:"Citrix XenApp x64" ~nx:true 
(default_memory_parameters 256L) 8L "Server 2003 x64";
-
-               windows_template ~cps:"Citrix XenApp" ~nx:true 
(default_memory_parameters  512L) 24L "Server 2008";
-               windows_template ~cps:"Citrix XenApp x64" ~nx:true 
(default_memory_parameters  512L) 24L "Server 2008 x64";
-               windows_template ~cps:"Citrix XenApp x64" ~nx:true 
(default_memory_parameters 512L) 24L "Server 2008 R2 x64";
-               begin
-                       let w2000sp4 = windows_template 
(default_memory_parameters 128L) 8L "2000 SP4" in
-                       {
-                               w2000sp4 with vM_name_description =
-                                       "Windows 2000 Server SP4. " ^
-                                       (w2000sp4.vM_name_description)
-                       }
-               end
        ] in
 
-  (* put default_template key in static_templates other_config of 
static_templates: *)
-  let static_templates =
-    List.map (fun t -> {t with vM_other_config = 
default_template::t.vM_other_config}) static_templates in
+       let windows_static_templates =
+               let n = NX     in
+               let x = XenApp in
+       [
+               other_install_media_template (default_memory_parameters 128L);
+               windows_template "XP SP2"         X32  256  8 [    ];
+               windows_template "XP SP3"         X32  256  8 [    ];
+               windows_template "Vista"          X32 1024 24 [n;  ];
+               windows_template "7"              X32 1024 24 [n;  ];
+               windows_template "7"              X64 2048 24 [n;  ];
+               windows_template "2000 SP4"       X32  128  8 [    ];
+               windows_template "Server 2003"    X32  256  8 [    ];
+               windows_template "Server 2003"    X32  256  8 [  x;];
+               windows_template "Server 2003"    X64  256  8 [n;  ];
+               windows_template "Server 2003"    X64  256  8 [n;x;];
+               windows_template "Server 2008"    X32  512 24 [n;  ];
+               windows_template "Server 2008"    X32  512 24 [n;x;];
+               windows_template "Server 2008"    X64  512 24 [n;  ];
+               windows_template "Server 2008"    X64  512 24 [n;x;];
+               windows_template "Server 2008 R2" X64  512 24 [n;  ];
+               windows_template "Server 2008 R2" X64  512 24 [n;x;];
+       ] in
 
-  (* put default_template key and linux_template key in other_config for 
linux_static_templates: *)
-  let linux_static_templates =
-    List.map (fun t -> {t with vM_other_config = 
default_template::linux_template::t.vM_other_config}) linux_static_templates in
+       (* put default_template key in static_templates other_config of 
static_templates: *)
+       let windows_static_templates =
+               List.map (fun t -> {t with vM_other_config = 
default_template::t.vM_other_config}) windows_static_templates in
 
-  (* Create the windows templates *)
-  List.iter (fun x -> ignore(find_or_create_template x rpc session_id)) 
static_templates;
+       (* put default_template key and linux_template key in other_config for 
linux_static_templates: *)
+       let linux_static_templates =
+               List.map (fun t -> {t with vM_other_config = 
default_template::linux_template::t.vM_other_config}) linux_static_templates in
 
-  (* NB we now create the 'static' linux templates whether or not the 'linux 
pack' is 
-     installed because these only depend on eliloader, which is always 
installed *)
-  List.iter (fun x -> ignore(find_or_create_template x rpc session_id)) 
linux_static_templates;
+       (* Create the windows templates *)
+       List.iter (fun x -> ignore(find_or_create_template x rpc session_id)) 
windows_static_templates;
+
+       (* NB we now create the 'static' linux templates whether or not the 
'linux pack' is 
+          installed because these only depend on eliloader, which is always 
installed *)
+       List.iter (fun x -> ignore(find_or_create_template x rpc session_id)) 
linux_static_templates;
1 file changed, 199 insertions(+), 153 deletions(-)
ocaml/xapi/create_templates.ml |  352 ++++++++++++++++++++++------------------


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

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.