Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ build: setup.data

doc: setup.data build
$(SETUP) -doc $(DOCFLAGS)
./jsapi.native -destdir _build/ocaml/doc
./jsapi.native -destdir _build/ocaml/doc -templdir ocaml/doc/templates

test: setup.data build
$(SETUP) -test $(TESTFLAGS)
Expand Down Expand Up @@ -95,5 +95,4 @@ install: setup.data rbac_static.csv
mkdir -p $(DESTDIR)$(DOCDIR)/html/xenserver
cp -r -L _build/ocaml/doc/api $(DESTDIR)$(DOCDIR)/html/xenserver
cd ocaml/doc && cp *.js *.html *.css *.png $(DESTDIR)$(DOCDIR)/html/xenserver
cp ocaml/doc/xenserver/* $(DESTDIR)$(DOCDIR)/html/xenserver

cp _build/ocaml/doc/branding.js $(DESTDIR)$(DOCDIR)/html/xenserver/branding.js
3 changes: 2 additions & 1 deletion _oasis
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,8 @@ Executable jsapi
xapi-consts,
stdext,
uuid,
gzip
gzip,
mustache


############################################################################
Expand Down
72 changes: 0 additions & 72 deletions ocaml/doc/branding.js

This file was deleted.

39 changes: 33 additions & 6 deletions ocaml/doc/jsapi.ml
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,21 @@
* GNU Lesser General Public License for more details.
*)

open Stdext
open Pervasiveext
open Datamodel_types

type change_t = lifecycle_change * string * string
and changes_t = change_t list
[@@deriving rpc]

let destdir = ref "."
let templdir = ref ""

let parse_args () =
Arg.parse [
"-destdir", Arg.Set_string destdir, "the destination directory for the generated files";
"-templdir", Arg.Set_string templdir, "the directory with the template (mustache) files";
]
(fun x-> Printf.printf "Ignoring anonymous argument %s" x)
("Generates documentation for the datamodel classes. See -help.")
Expand All @@ -48,14 +52,14 @@ let generate_files destdir =

let changes_in_release rel =
let search_obj obj =
let changes = List.filter (fun (transition, release, doc) -> release = rel) obj.obj_lifecycle in
let changes = List.filter (fun (transition, release, doc) -> release = code_name_of_release rel) obj.obj_lifecycle in
let obj_changes : changes_t =
List.map (fun (transition, release, doc) ->
(transition, obj.name, if doc = "" && transition = Published then obj.description else doc)
) changes in

let changes_for_msg m =
let changes = List.filter (fun (transition, release, doc) -> release = rel) m.msg_lifecycle in
let changes = List.filter (fun (transition, release, doc) -> release = code_name_of_release rel) m.msg_lifecycle in
List.map (fun (transition, release, doc) ->
(transition, m.msg_name, if doc = "" && transition = Published then m.msg_doc else doc)
) changes
Expand All @@ -64,7 +68,7 @@ let generate_files destdir =
let msg_changes : changes_t = List.fold_left (fun l m -> l @ (changes_for_msg m)) [] msgs in

let changes_for_field f =
let changes = List.filter (fun (transition, release, doc) -> release = rel) f.lifecycle in
let changes = List.filter (fun (transition, release, doc) -> release = code_name_of_release rel) f.lifecycle in
let field_name = String.concat "_" f.full_name in
List.map (fun (transition, release, doc) ->
(transition, field_name, if doc = "" && transition = Published then f.field_description else doc)
Expand All @@ -83,14 +87,37 @@ let generate_files destdir =
"{'cls': '" ^ obj.name ^ "', 'obj_changes': " ^ Jsonrpc.to_string (rpc_of_changes_t obj_changes) ^ ", 'field_changes': " ^ Jsonrpc.to_string (rpc_of_changes_t field_changes) ^ ", 'msg_changes': " ^ Jsonrpc.to_string (rpc_of_changes_t msg_changes) ^ "}"
in
let release_info = String.concat ", " (List.map search_obj objs) in
let fname = rel ^ ".json" in
let fname = (code_name_of_release rel) ^ ".json" in
Stdext.Unixext.write_string_to_file (Filename.concat api_dir fname) ("release_info = [" ^ release_info ^ "]")
in
List.iter changes_in_release release_order;
let release_list = String.concat ", " (List.map (fun s -> "'" ^ s ^ "'") release_order) in
let release_list = String.concat ", " (List.map (fun s -> "'" ^ (code_name_of_release s) ^ "'") release_order) in
Stdext.Unixext.write_string_to_file (Filename.concat api_dir "releases.json") ("releases = [" ^ release_list ^ "]")

let json_releases =
let json_of_rel x = `O [
"code_name", `String (code_name_of_release x);
"version_major", `Float (float_of_int x.version_major);
"version_minor", `Float (float_of_int x.version_minor);
"branding", `String x.branding;
]
in
`O [ "releases", `A (List.map json_of_rel release_order) ]

let render_template template_file json output_file =
let templ = Stdext.Unixext.string_of_file template_file |> Mustache.of_string in
let rendered = Mustache.render templ json in
let out_chan = open_out output_file in
finally (fun () -> output_string out_chan rendered)
(fun () -> close_out out_chan)

let populate_releases templates_dir dest_dir=
let inpath x = Filename.concat templates_dir x in
let outpath x = Filename.concat dest_dir x in
let render (infile, outfile) = render_template (inpath infile) json_releases (outpath outfile) in
[ "branding.mustache", "branding.js"] |> List.iter render

let _ =
parse_args ();
generate_files !destdir
generate_files !destdir;
populate_releases !templdir !destdir
Original file line number Diff line number Diff line change
Expand Up @@ -24,49 +24,14 @@ function make_header(t) {

first_release = 'rio';

function get_release_name(s)
{
function get_release_name(s) {
switch (s) {
case 'rio':
return 'XenServer 4.0';
case 'miami':
return 'XenServer 4.1';
case 'symc':
return 'XenServer 4.1.1';
case 'orlando':
return 'XenServer 5.0';
case 'orlando-update-1':
return 'XenServer 5.0 Update 1';
case 'george':
return 'XenServer 5.5';
case 'midnight-ride':
return 'XenServer 5.6';
case 'cowley':
return 'XenServer 5.6 FP1';
case 'boston':
return 'XenServer 6.0';
case 'tampa':
return 'XenServer 6.1';
case 'clearwater':
return 'XenServer 6.2';
case 'vgpu-tech-preview':
return 'XenServer 6.2 vGPU preview';
case 'vgpu-productisation':
return 'XenServer 6.2 SP1';
case 'clearwater-felton':
return 'XenServer 6.2 SP1 Hotfix 4';
case 'clearwater-whetstone':
return 'XenServer 6.2 SP1 Hotfix 11';
case 'creedence':
return 'XenServer 6.5';
case 'cream':
return 'XenServer 6.5 SP1';
case 'dundee':
return 'XenServer 7.0';
case 'ely':
return 'XenServer 7.1';
default:
return 'Unreleased';
}
{{#releases}}
case '{{code_name}}':
return '{{branding}}';
{{/releases}}
default:
return 'Unreleased';
}
}

35 changes: 17 additions & 18 deletions ocaml/idl/datamodel.ml
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,6 @@ let _R_ALL = _R_READ_ONLY
let errors = Hashtbl.create 10
let messages = Hashtbl.create 10

exception UnspecifiedRelease

let get_oss_releases in_oss_since =
match in_oss_since with
None -> []
Expand All @@ -227,7 +225,8 @@ let get_product_releases in_product_since =
let rec go_through_release_order rs =
match rs with
[] -> raise UnspecifiedRelease
| x::xs -> if x=in_product_since then "closed"::x::xs else go_through_release_order xs
| x::xs when code_name_of_release x = in_product_since -> "closed"::in_product_since::(List.map code_name_of_release xs)
| x::xs -> go_through_release_order xs
in go_through_release_order release_order

let falcon_release =
Expand All @@ -236,8 +235,8 @@ let falcon_release =
; internal_deprecated_since=None
}

let dundee_plus_release =
{ internal = get_product_releases rel_dundee_plus
let ely_release =
{ internal = get_product_releases rel_ely
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK :) I'm surprised that we didn't have ely_release before 😕

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can see why it might be forgotten: x_release and rel_x are in different files.

; opensource=get_oss_releases None
; internal_deprecated_since=None
}
Expand Down Expand Up @@ -303,37 +302,37 @@ let cowley_release =
}

let midnight_ride_release =
{ internal=get_product_releases "midnight-ride"
{ internal=get_product_releases rel_midnight_ride
; opensource=get_oss_releases None
; internal_deprecated_since=None
}

let george_release =
{ internal=get_product_releases "george"
{ internal=get_product_releases rel_george
; opensource=get_oss_releases None
; internal_deprecated_since=None
}

let orlando_release =
{ internal=get_product_releases "orlando"
{ internal=get_product_releases rel_orlando
; opensource=get_oss_releases None
; internal_deprecated_since=None
}

let miami_symc_release =
{ internal=get_product_releases "symc"
{ internal=get_product_releases rel_symc
; opensource=get_oss_releases None
; internal_deprecated_since=None
}

let miami_release =
{ internal=get_product_releases "miami"
{ internal=get_product_releases rel_miami
; opensource=get_oss_releases None
; internal_deprecated_since=None
}

let rio_release =
{ internal=get_product_releases "rio"
{ internal=get_product_releases rel_rio
; opensource=get_oss_releases (Some "3.0.3")
; internal_deprecated_since=None
}
Expand Down Expand Up @@ -3219,7 +3218,7 @@ let host_call_plugin = call

let host_has_extension = call
~name:"has_extension"
~in_product_since:rel_dundee_plus
~in_product_since:rel_ely
~doc:"Return true if the extension is available on the host"
~params:[Ref _host, "host", "The host";
String, "name", "The name of the API call";]
Expand All @@ -3229,7 +3228,7 @@ let host_has_extension = call

let host_call_extension = call
~name:"call_extension"
~in_product_since:rel_dundee_plus
~in_product_since:rel_ely
~custom_marshaller:true
~doc:"Call a XenAPI extension on this host"
~params:[Ref _host, "host", "The host";
Expand Down Expand Up @@ -4555,7 +4554,7 @@ let host_emergency_ha_disable = call ~flags:[`Session]
~in_oss_since:None
~in_product_since:rel_orlando
~versioned_params:
[{param_type=Bool; param_name="soft"; param_doc="Disable HA temporarily, revert upon host reboot or further changes, idempotent"; param_release=dundee_plus_release; param_default=Some(VBool false)};
[{param_type=Bool; param_name="soft"; param_doc="Disable HA temporarily, revert upon host reboot or further changes, idempotent"; param_release=ely_release; param_default=Some(VBool false)};
]
~doc:"This call disables HA on the local host. This should only be used with extreme care."
~allowed_roles:_R_POOL_OP
Expand Down Expand Up @@ -5064,7 +5063,7 @@ let host =
field ~qualifier:RW ~in_product_since:rel_tampa ~default_value:(Some (VMap [])) ~ty:(Map (String, String)) "guest_VCPUs_params" "VCPUs params to apply to all resident guests";
field ~qualifier:RW ~in_product_since:rel_cream ~default_value:(Some (VEnum "enabled")) ~ty:host_display "display" "indicates whether the host is configured to output its console to a physical display device";
field ~qualifier:DynamicRO ~in_product_since:rel_cream ~default_value:(Some (VSet [VInt 0L])) ~ty:(Set (Int)) "virtual_hardware_platform_versions" "The set of versions of the virtual hardware platform that the host can offer to its guests";
field ~qualifier:DynamicRO ~default_value:(Some (VRef null_ref)) ~in_product_since:rel_dundee_plus ~ty:(Ref _vm) "control_domain" "The control domain (domain 0)";
field ~qualifier:DynamicRO ~default_value:(Some (VRef null_ref)) ~in_product_since:rel_ely ~ty:(Ref _vm) "control_domain" "The control domain (domain 0)";
field ~qualifier:DynamicRO ~lifecycle:[Published, rel_ely, ""] ~ty:(Set (Ref _pool_update)) ~ignore_foreign_key:true "updates_requiring_reboot" "List of updates which require reboot";
field ~qualifier:DynamicRO ~lifecycle:[Published, rel_falcon, ""] ~ty:(Set (Ref _feature)) "features" "List of features available on this host"
])
Expand Down Expand Up @@ -9256,7 +9255,7 @@ let vgpu_type =
()

module PVS_site = struct
let lifecycle = [Prototyped, rel_dundee_plus, ""]
let lifecycle = [Prototyped, rel_ely, ""]

let introduce = call
~name:"introduce"
Expand Down Expand Up @@ -9342,7 +9341,7 @@ end
let pvs_site = PVS_site.obj

module PVS_server = struct
let lifecycle = [Prototyped, rel_dundee_plus, ""]
let lifecycle = [Prototyped, rel_ely, ""]

let introduce = call
~name:"introduce"
Expand Down Expand Up @@ -9411,7 +9410,7 @@ end
let pvs_server = PVS_server.obj

module PVS_proxy = struct
let lifecycle = [Prototyped, rel_dundee_plus, ""]
let lifecycle = [Prototyped, rel_ely, ""]

let status = Enum ("pvs_proxy_status", [
"stopped", "The proxy is not currently running";
Expand Down
Loading