diff --git a/lib/mix/tasks/generate_opennebula_records.ex b/lib/mix/tasks/generate_opennebula_records.ex
new file mode 100644
index 0000000..68e2d50
--- /dev/null
+++ b/lib/mix/tasks/generate_opennebula_records.ex
@@ -0,0 +1,43 @@
+defmodule Mix.Tasks.GenerateOpenNebulaRecords do
+ use Mix.Task
+
+ @moduledoc """
+ Generate erlang records from OpenNebula's XSD templates. Inspired from
+ http://codesinger.blogspot.com/2015/12/elixir-erlang-records-and-erlsom-xml.html
+ """
+
+ @opennebula_release "5.12"
+
+ @shortdoc "Generate erlang records from OpenNebula's XSD templates"
+ def run(_) do
+ priv_dir = to_string(:code.priv_dir(:recycledcloud))
+ xsd_dir = Path.join([priv_dir, "opennebula", @opennebula_release, "xsd-src"])
+ hrl_dir = Path.join([priv_dir, "opennebula", @opennebula_release, "xsd-records"])
+
+ files = xsd_dir
+ |> File.ls!()
+ |> Enum.filter(fn filename -> String.ends_with?(filename, ".xsd") end)
+ |> Enum.sort()
+
+ # Delete existing hrl headers.
+ if File.exists?(hrl_dir) do
+ File.rm_rf!(hrl_dir)
+ end
+ File.mkdir_p(hrl_dir)
+
+ for xsd_filename <- files do
+ hrl_filename = String.replace_trailing(xsd_filename, ".xsd", ".hrl")
+
+ xsd_file = Path.join([xsd_dir, xsd_filename]) |> String.to_charlist
+ hrl_file = Path.join([hrl_dir, hrl_filename]) |> String.to_charlist
+
+ IO.write "> Processing #{xsd_filename}... "
+ try do
+ :erlsom.write_xsd_hrl_file(xsd_file, hrl_file, [])
+ IO.puts "OK"
+ catch
+ e -> IO.puts "Error: #{inspect(e)}"
+ end
+ end
+ end
+end
diff --git a/lib/recycledcloud/opennebula.ex b/lib/recycledcloud/opennebula.ex
new file mode 100644
index 0000000..daaca2a
--- /dev/null
+++ b/lib/recycledcloud/opennebula.ex
@@ -0,0 +1,44 @@
+defmodule RecycledCloud.OpenNebula do
+ @moduledoc """
+ OpenNebula XML-RPC Interface.
+
+ See http://docs.opennebula.io/5.12/integration/system_interfaces/api.html for details.
+ """
+
+ # OpenNebula daemon.
+ @endpoint "/RPC2"
+
+ defp get_opennebula_config(key) do
+ Application.get_env(:recycledcloud, :opennebula, []) |> Keyword.get(key)
+ end
+
+ ##
+ # Related to XML-RPC calls
+
+ defp get_auth_string() do
+ "#{get_opennebula_config(:user)}:#{get_opennebula_config(:password)}"
+ end
+
+ defp post!(call, endpoint) do
+ url = get_opennebula_config(:server) <> endpoint
+ opts = []
+ headers = []
+ body = call |> XMLRPC.encode!
+
+ response = HTTPoison.post!(url, body, headers, opts).body |> XMLRPC.decode!
+ case response do
+ %{fault_code: _, fault_string: err} -> {:error, err}
+ %{param: [false, err | _]} -> {:error, err}
+ %{param: [true, result | _]} -> {:ok, result}
+ end
+ end
+
+ def query(method, params) do
+ call = %XMLRPC.MethodCall{
+ method_name: method,
+ params: [get_auth_string() | params]
+ }
+
+ call |> post!(@endpoint)
+ end
+end
diff --git a/lib/recycledcloud/opennebula/schema.ex b/lib/recycledcloud/opennebula/schema.ex
new file mode 100644
index 0000000..6962077
--- /dev/null
+++ b/lib/recycledcloud/opennebula/schema.ex
@@ -0,0 +1,96 @@
+defmodule RecycledCloud.OpenNebula.Schema do
+ @moduledoc """
+ Helpers used to process OpenNebula's XSD schema.
+
+ ,.
+ /,,;';;. ,;;;.. ,,;. '
+ .','' `::;:' ``;;;;' `..'
+ ` ,,/' ,,//
+
+ Here be dragons! We import the records from Erlang header files (.hrl)
+ generated by erlsom as macros in the Records module. The only way I found to
+ programatically call a macro (apply/3 only works with functions) is by
+ playing around with the AST to template said call...
+
+ I'm not fond of this as it makes things more complex than I would like them
+ to be, but likely the easiest way to user erlsom's data binder from elixir
+ (and it's not *that* bad). The ideal would be to generate elixir structs from
+ source XSD files, but it would take much more work.
+
+ Heavily inspired from Gary Poster's:
+ http://codesinger.blogspot.com/2015/12/elixir-erlang-records-and-erlsom-xml.html
+
+ I stole the dragon art from ASCII.co.uk.
+ """
+
+ require Logger
+ alias RecycledCloud.OpenNebula.Schema
+ alias RecycledCloud.OpenNebula.Schema.Records
+
+ @opennebula_release "5.12"
+
+ ##
+ # Data-binding: access and extract XSD models.
+
+ defp get_raw(type, object) do
+ priv_dir = :code.priv_dir(:recycledcloud) |> to_string
+ {data_dir, extension} = case type do
+ :xsd -> {"xsd-src", ".xsd"}
+ :hrl -> {"xsd-records", ".hrl"}
+ end
+
+ raw_path = [priv_dir, "opennebula", @opennebula_release, data_dir, object <> extension]
+ raw_path |> Path.join()
+ end
+
+ def get_xsd_for(object), do: get_raw(:xsd, object)
+ def get_hrl_for(object), do: get_raw(:hrl, object)
+
+ def generate_model_for(object) do
+ {:ok, model} = object
+ |> get_xsd_for()
+ |> :erlsom.compile_xsd_file()
+
+ model
+ end
+
+
+ ##
+ # Data-binding: transform erlsom records to Elixir maps.
+
+ def scan(raw, object_type) do
+ {:ok, data, _rest} = :erlsom.scan(raw, Records.get_model_for(object_type))
+ data
+ end
+
+ defp transform_value({k, v}), do: {k, map_record(v)}
+
+ # Here be dragons! See moduledoc.
+ def map_record(data) when is_tuple(data) do
+ schema = elem(data, 0)
+ if schema in Keyword.keys(Schema.Records.__info__(:macros)) do
+ call = quote do
+ require RecycledCloud.OpenNebula.Schema.Records
+ RecycledCloud.OpenNebula.Schema.Records."XSD"(:data)
+ end
+ replace = fn
+ :XSD, {model, data} -> {model, {model, data}}
+ :data, {model, data} -> {data, {model, data}}
+ node, stubs -> {node, stubs}
+ end
+
+ {{inserted, _raw}, []} = call
+ |> Macro.prewalk({schema, Macro.escape(data)}, replace)
+ |> Code.eval_quoted()
+
+ Enum.into(inserted, Map.new, &transform_value/1)
+ else
+ Logger.debug("Ignoring unknown OpenNebula Model #{schema}.")
+ data
+ end
+ end
+ def map_record(data = [first | _rest]) when is_integer(first), do:
+ List.to_string(data)
+ def map_record(:undefined), do: nil
+ def map_record(data), do: data
+end
diff --git a/lib/recycledcloud/opennebula/schema/records.ex b/lib/recycledcloud/opennebula/schema/records.ex
new file mode 100644
index 0000000..a891c25
--- /dev/null
+++ b/lib/recycledcloud/opennebula/schema/records.ex
@@ -0,0 +1,26 @@
+defmodule RecycledCloud.OpenNebula.Schema.Records do
+ @moduledoc """
+ Here we define XSD template into something we can play with (Records).
+
+ Records are not usually used in elixir except for integrating with erlang
+ code - which is what we're doing right now: the records are defined in .hrl
+ (erlang headers) by erlsom.
+
+ See RecycledCloud.OpenNebula.Schema module for details.
+ """
+
+ require Record
+ alias RecycledCloud.OpenNebula.Schema
+
+ @models %{
+ "vm" => Schema.generate_model_for("vm"),
+ "vm_pool" => Schema.generate_model_for("vm_pool")
+ }
+
+ def get_model_for(object), do: Map.get(@models, object)
+
+ for {name, record} <- Record.extract_all(from: Schema.get_hrl_for("vm")) do
+ Record.defrecord name, record
+ end
+ Record.defrecord :VM_POOL, Record.extract(:VM_POOL, from: Schema.get_hrl_for("vm_pool"))
+end
diff --git a/lib/recycledcloud/opennebula/vm.ex b/lib/recycledcloud/opennebula/vm.ex
new file mode 100644
index 0000000..5a2da9d
--- /dev/null
+++ b/lib/recycledcloud/opennebula/vm.ex
@@ -0,0 +1,46 @@
+defmodule RecycledCloud.OpenNebula.VM do
+ @moduledoc """
+ OpenNebula VM: http://docs.opennebula.io/5.12/integration/system_interfaces/api.html#one-vm-info
+ """
+ alias RecycledCloud.OpenNebula, as: ONE
+ alias RecycledCloud.OpenNebula.Schema
+
+ @states [
+ {:any, -2},
+ {:any_except_done, -1},
+ {:init, 0},
+ {:pending, 1},
+ {:hold, 2},
+ {:active, 3},
+ {:stopped, 4},
+ {:suspended, 5},
+ {:done, 6},
+ {:failure, 7},
+ {:poweroff, 8},
+ {:undeployed, 9},
+ {:cloning, 10},
+ {:cloning_failure, 11}
+ ]
+
+ def state_for(state) when is_atom(state) do
+ @states |> Keyword.get(state)
+ end
+
+ def state_for(state) when is_integer(state) do
+ case Enum.find(@states, fn {atom, value} -> value == state end) do
+ {atom, _value} -> atom
+ nil -> nil
+ end
+ end
+
+ def get(id) do
+ case ONE.query("one.vm.info", [id]) do
+ {:ok, raw} ->
+ data = raw
+ |> Schema.scan("vm")
+ |> Schema.map_record
+ {:ok, data}
+ {:error, err} -> {:error, err}
+ end
+ end
+end
diff --git a/lib/recycledcloud/opennebula/vm_pool.ex b/lib/recycledcloud/opennebula/vm_pool.ex
new file mode 100644
index 0000000..e5d5e40
--- /dev/null
+++ b/lib/recycledcloud/opennebula/vm_pool.ex
@@ -0,0 +1,53 @@
+defmodule RecycledCloud.OpenNebula.VMPool do
+ @moduledoc """
+ OpenNebula VM Pool: http://docs.opennebula.io/5.12/integration/system_interfaces/api.html#one-vmpool-info
+ """
+ alias RecycledCloud.OpenNebula, as: ONE
+ alias RecycledCloud.OpenNebula.Schema
+
+ # Filters ressourses.
+ # (user) ID >= 0 matches an user's resources.
+ @filter_flags [
+ {:user_primary_group, -4},
+ {:user, -3},
+ {:all, -2},
+ {:user_and_groups, -1}
+ ]
+
+ def get(%{filter_flag: filter_flag} = params) when is_atom(filter_flag) do
+ params
+ |> Map.put(:filter_flag, Keyword.get(@filter_flags, filter_flag))
+ |> get()
+ end
+
+ def get(%{range_start: :infinite} = params) do
+ params |> Map.put(:range_start, -1) |> get()
+ end
+
+ def get(%{range_end: :infinite} = params) do
+ params |> Map.put(:range_end, -1) |> get()
+ end
+
+ def get(%{state_filter: state} = params) when is_atom(state) do
+ params |> Map.put(:state_filter, ONE.VM.state_for(state)) |> get()
+ end
+
+ def get(%{
+ filter_flag: filter_flag,
+ range_start: range_start,
+ range_end: range_end,
+ state_filter: state,
+ kv_filter: kv_filter
+ }) do
+
+ params = [filter_flag, range_start, range_end, state, kv_filter]
+ case ONE.query("one.vmpool.info", params) do
+ {:ok, raw} ->
+ data = raw
+ |> Schema.scan("vm_pool")
+ |> Schema.map_record
+ {:ok, data}
+ {:error, err} -> {:error, err}
+ end
+ end
+end
diff --git a/mix.exs b/mix.exs
index 8ccf713..3285dbb 100644
--- a/mix.exs
+++ b/mix.exs
@@ -62,7 +62,8 @@ defmodule RecycledCloud.MixProject do
{:xmlrpc, "~> 1.4"},
{:httpoison, "~> 1.8"},
{:the_big_username_blacklist, "~> 0.1"},
- {:credo, "~> 1.5", only: [:dev, :test], runtime: false}
+ {:credo, "~> 1.5", only: [:dev, :test], runtime: false},
+ {:erlsom, "~> 1.5"}
]
end
diff --git a/priv/opennebula/5.12/xsd-records/acct.hrl b/priv/opennebula/5.12/xsd-records/acct.hrl
new file mode 100644
index 0000000..55e666f
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/acct.hrl
@@ -0,0 +1,127 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('HISTORY', {anyAttribs :: anyAttribs(),
+ 'OID' :: integer(),
+ 'SEQ' :: integer(),
+ 'HOSTNAME' :: string(),
+ 'HID' :: integer(),
+ 'CID' :: integer(),
+ 'STIME' :: integer(),
+ 'ETIME' :: integer(),
+ 'VM_MAD' :: string(),
+ 'TM_MAD' :: string(),
+ 'DS_ID' :: integer(),
+ 'PSTIME' :: integer(),
+ 'PETIME' :: integer(),
+ 'RSTIME' :: integer(),
+ 'RETIME' :: integer(),
+ 'ESTIME' :: integer(),
+ 'EETIME' :: integer(),
+ 'ACTION' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'REQUEST_ID' :: string(),
+ 'VM' :: 'HISTORY/VM'()}).
+
+-type 'HISTORY'() :: #'HISTORY'{}.
+
+
+-record('HISTORY/VM', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PERMISSIONS' :: 'HISTORY/VM/PERMISSIONS'() | undefined,
+ 'LAST_POLL' :: integer(),
+ 'STATE' :: integer(),
+ 'LCM_STATE' :: integer(),
+ 'PREV_STATE' :: integer(),
+ 'PREV_LCM_STATE' :: integer(),
+ 'RESCHED' :: integer(),
+ 'STIME' :: integer(),
+ 'ETIME' :: integer(),
+ 'DEPLOY_ID' :: string(),
+ 'MONITORING' :: string(),
+ 'TEMPLATE' :: string(),
+ 'USER_TEMPLATE' :: string(),
+ 'HISTORY_RECORDS' :: string(),
+ 'SNAPSHOTS' :: ['HISTORY/VM/SNAPSHOTS'()] | undefined}).
+
+-type 'HISTORY/VM'() :: #'HISTORY/VM'{}.
+
+
+-record('HISTORY/VM/SNAPSHOTS', {anyAttribs :: anyAttribs(),
+ 'ALLOW_ORPHANS' :: string(),
+ 'CURRENT_BASE' :: integer(),
+ 'DISK_ID' :: integer(),
+ 'NEXT_SNAPSHOT' :: integer(),
+ 'SNAPSHOT' :: ['HISTORY/VM/SNAPSHOTS/SNAPSHOT'()] | undefined}).
+
+-type 'HISTORY/VM/SNAPSHOTS'() :: #'HISTORY/VM/SNAPSHOTS'{}.
+
+
+-record('HISTORY/VM/SNAPSHOTS/SNAPSHOT', {anyAttribs :: anyAttribs(),
+ 'ACTIVE' :: string() | undefined,
+ 'CHILDREN' :: string() | undefined,
+ 'DATE' :: integer(),
+ 'ID' :: integer(),
+ 'NAME' :: string() | undefined,
+ 'PARENT' :: integer(),
+ 'SIZE' :: integer()}).
+
+-type 'HISTORY/VM/SNAPSHOTS/SNAPSHOT'() :: #'HISTORY/VM/SNAPSHOTS/SNAPSHOT'{}.
+
+
+-record('HISTORY/VM/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'HISTORY/VM/PERMISSIONS'() :: #'HISTORY/VM/PERMISSIONS'{}.
+
+
+-record('HISTORY_RECORDS', {anyAttribs :: anyAttribs(),
+ 'HISTORY_RECORDS/SEQ1' :: 'HISTORY_RECORDS/SEQ1'() | undefined}).
+
+-type 'HISTORY_RECORDS'() :: #'HISTORY_RECORDS'{}.
+
+
+-record('HISTORY_RECORDS/SEQ1', {anyAttribs :: anyAttribs(),
+ 'HISTORY' :: ['HISTORY'()] | undefined}).
+
+-type 'HISTORY_RECORDS/SEQ1'() :: #'HISTORY_RECORDS/SEQ1'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/acl_pool.hrl b/priv/opennebula/5.12/xsd-records/acl_pool.hrl
new file mode 100644
index 0000000..f42a149
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/acl_pool.hrl
@@ -0,0 +1,50 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('ACL_POOL', {anyAttribs :: anyAttribs(),
+ 'ACL_POOL/SEQ1' :: 'ACL_POOL/SEQ1'() | undefined}).
+
+-type 'ACL_POOL'() :: #'ACL_POOL'{}.
+
+
+-record('ACL_POOL/SEQ1', {anyAttribs :: anyAttribs(),
+ 'ACL' :: ['ACL_POOL/SEQ1/ACL'()] | undefined}).
+
+-type 'ACL_POOL/SEQ1'() :: #'ACL_POOL/SEQ1'{}.
+
+
+-record('ACL_POOL/SEQ1/ACL', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'USER' :: string(),
+ 'RESOURCE' :: string(),
+ 'RIGHTS' :: string(),
+ 'ZONE' :: string(),
+ 'STRING' :: string()}).
+
+-type 'ACL_POOL/SEQ1/ACL'() :: #'ACL_POOL/SEQ1/ACL'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/cluster.hrl b/priv/opennebula/5.12/xsd-records/cluster.hrl
new file mode 100644
index 0000000..3f13452
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/cluster.hrl
@@ -0,0 +1,56 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('CLUSTER', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'HOSTS' :: 'CLUSTER/HOSTS'(),
+ 'DATASTORES' :: 'CLUSTER/DATASTORES'(),
+ 'VNETS' :: 'CLUSTER/VNETS'(),
+ 'TEMPLATE' :: string()}).
+
+-type 'CLUSTER'() :: #'CLUSTER'{}.
+
+
+-record('CLUSTER/VNETS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'CLUSTER/VNETS'() :: #'CLUSTER/VNETS'{}.
+
+
+-record('CLUSTER/DATASTORES', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'CLUSTER/DATASTORES'() :: #'CLUSTER/DATASTORES'{}.
+
+
+-record('CLUSTER/HOSTS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'CLUSTER/HOSTS'() :: #'CLUSTER/HOSTS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/datastore.hrl b/priv/opennebula/5.12/xsd-records/datastore.hrl
new file mode 100644
index 0000000..d3ebf91
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/datastore.hrl
@@ -0,0 +1,89 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PERMISSIONS' :: 'DATASTORE/PERMISSIONS'() | undefined,
+ 'DS_MAD' :: string(),
+ 'TM_MAD' :: string(),
+ 'BASE_PATH' :: string(),
+ 'TYPE' :: integer(),
+ 'DISK_TYPE' :: integer(),
+ 'STATE' :: integer(),
+ 'CLUSTERS' :: 'DATASTORE/CLUSTERS'(),
+ 'TOTAL_MB' :: integer(),
+ 'FREE_MB' :: integer(),
+ 'USED_MB' :: integer(),
+ 'IMAGES' :: 'DATASTORE/IMAGES'(),
+ 'TEMPLATE' :: 'DATASTORE/TEMPLATE'()}).
+
+-type 'DATASTORE'() :: #'DATASTORE'{}.
+
+
+-record('DATASTORE/TEMPLATE', {anyAttribs :: anyAttribs(),
+ 'VCENTER_DC_NAME' :: string() | undefined,
+ 'VCENTER_DC_REF' :: string() | undefined,
+ 'VCENTER_DS_NAME' :: string() | undefined,
+ 'VCENTER_DS_REF' :: string() | undefined,
+ 'VCENTER_HOST' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ '#any' :: any()}).
+
+-type 'DATASTORE/TEMPLATE'() :: #'DATASTORE/TEMPLATE'{}.
+
+
+-record('DATASTORE/IMAGES', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'DATASTORE/IMAGES'() :: #'DATASTORE/IMAGES'{}.
+
+
+-record('DATASTORE/CLUSTERS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'DATASTORE/CLUSTERS'() :: #'DATASTORE/CLUSTERS'{}.
+
+
+-record('DATASTORE/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'DATASTORE/PERMISSIONS'() :: #'DATASTORE/PERMISSIONS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/document.hrl b/priv/opennebula/5.12/xsd-records/document.hrl
new file mode 100644
index 0000000..cb7a07b
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/document.hrl
@@ -0,0 +1,65 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('DOCUMENT', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'TYPE' :: string(),
+ 'PERMISSIONS' :: 'DOCUMENT/PERMISSIONS'() | undefined,
+ 'LOCK' :: 'DOCUMENT/LOCK'() | undefined,
+ 'TEMPLATE' :: string()}).
+
+-type 'DOCUMENT'() :: #'DOCUMENT'{}.
+
+
+-record('DOCUMENT/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'DOCUMENT/LOCK'() :: #'DOCUMENT/LOCK'{}.
+
+
+-record('DOCUMENT/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'DOCUMENT/PERMISSIONS'() :: #'DOCUMENT/PERMISSIONS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/group.hrl b/priv/opennebula/5.12/xsd-records/group.hrl
new file mode 100644
index 0000000..3dc8340
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/group.hrl
@@ -0,0 +1,201 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('GROUP', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'TEMPLATE' :: string(),
+ 'USERS' :: 'GROUP/USERS'(),
+ 'ADMINS' :: 'GROUP/ADMINS'(),
+ 'DATASTORE_QUOTA' :: 'GROUP/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'GROUP/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'GROUP/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'GROUP/IMAGE_QUOTA'() | undefined,
+ 'DEFAULT_GROUP_QUOTAS' :: 'GROUP/DEFAULT_GROUP_QUOTAS'()}).
+
+-type 'GROUP'() :: #'GROUP'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS', {anyAttribs :: anyAttribs(),
+ 'DATASTORE_QUOTA' :: 'GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA'() | undefined}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS'() :: #'GROUP/DEFAULT_GROUP_QUOTAS'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM'() | undefined}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: integer(),
+ 'MEMORY_USED' :: integer(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: integer(),
+ 'RUNNING_MEMORY_USED' :: integer(),
+ 'RUNNING_VMS' :: integer(),
+ 'RUNNING_VMS_USED' :: integer(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: integer(),
+ 'VMS_USED' :: integer()}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA'{}.
+
+
+-record('GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE'() :: #'GROUP/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('GROUP/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['GROUP/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'GROUP/IMAGE_QUOTA'() :: #'GROUP/IMAGE_QUOTA'{}.
+
+
+-record('GROUP/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'GROUP/IMAGE_QUOTA/IMAGE'() :: #'GROUP/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('GROUP/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'GROUP/VM_QUOTA/VM'() | undefined}).
+
+-type 'GROUP/VM_QUOTA'() :: #'GROUP/VM_QUOTA'{}.
+
+
+-record('GROUP/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: integer(),
+ 'MEMORY_USED' :: integer(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: integer(),
+ 'RUNNING_MEMORY_USED' :: integer(),
+ 'RUNNING_VMS' :: integer(),
+ 'RUNNING_VMS_USED' :: integer(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: integer(),
+ 'VMS_USED' :: integer()}).
+
+-type 'GROUP/VM_QUOTA/VM'() :: #'GROUP/VM_QUOTA/VM'{}.
+
+
+-record('GROUP/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['GROUP/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'GROUP/NETWORK_QUOTA'() :: #'GROUP/NETWORK_QUOTA'{}.
+
+
+-record('GROUP/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'GROUP/NETWORK_QUOTA/NETWORK'() :: #'GROUP/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('GROUP/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['GROUP/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'GROUP/DATASTORE_QUOTA'() :: #'GROUP/DATASTORE_QUOTA'{}.
+
+
+-record('GROUP/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'GROUP/DATASTORE_QUOTA/DATASTORE'() :: #'GROUP/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('GROUP/ADMINS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'GROUP/ADMINS'() :: #'GROUP/ADMINS'{}.
+
+
+-record('GROUP/USERS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'GROUP/USERS'() :: #'GROUP/USERS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/group_pool.hrl b/priv/opennebula/5.12/xsd-records/group_pool.hrl
new file mode 100644
index 0000000..99d87fc
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/group_pool.hrl
@@ -0,0 +1,219 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('GROUP_POOL', {anyAttribs :: anyAttribs(),
+ choice :: 'GROUP_POOL/SEQ1'() | 'GROUP_POOL/SEQ1'() | 'GROUP_POOL/SEQ1'()}).
+
+-type 'GROUP_POOL'() :: #'GROUP_POOL'{}.
+
+
+-record('GROUP_POOL/SEQ1', {anyAttribs :: anyAttribs(),
+ choice :: [['GROUP_POOL/SEQ1/QUOTAS'()] | ['GROUP_POOL/SEQ1/GROUP'()]] | undefined,
+ 'DEFAULT_GROUP_QUOTAS' :: 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS'()}).
+
+-type 'GROUP_POOL/SEQ1'() :: #'GROUP_POOL/SEQ1'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS', {anyAttribs :: anyAttribs(),
+ 'DATASTORE_QUOTA' :: 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA'() | undefined}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM'() | undefined}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: string(),
+ 'MEMORY_USED' :: string(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: string(),
+ 'RUNNING_MEMORY_USED' :: string(),
+ 'RUNNING_VMS' :: string(),
+ 'RUNNING_VMS_USED' :: string(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: string(),
+ 'VMS_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/VM_QUOTA/VM'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE'() :: #'GROUP_POOL/SEQ1/DEFAULT_GROUP_QUOTAS/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'DATASTORE_QUOTA' :: 'GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA'() | undefined}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS'() :: #'GROUP_POOL/SEQ1/QUOTAS'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA'() :: #'GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE'() :: #'GROUP_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA/VM'() | undefined}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA'() :: #'GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: string(),
+ 'MEMORY_USED' :: string(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: string(),
+ 'RUNNING_MEMORY_USED' :: string(),
+ 'RUNNING_VMS' :: string(),
+ 'RUNNING_VMS_USED' :: string(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: string(),
+ 'VMS_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA/VM'() :: #'GROUP_POOL/SEQ1/QUOTAS/VM_QUOTA/VM'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA'() :: #'GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK'() :: #'GROUP_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA'() :: #'GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA'{}.
+
+
+-record('GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE'() :: #'GROUP_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('GROUP_POOL/SEQ1/GROUP', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'TEMPLATE' :: string(),
+ 'USERS' :: 'GROUP_POOL/SEQ1/GROUP/USERS'(),
+ 'ADMINS' :: 'GROUP_POOL/SEQ1/GROUP/ADMINS'()}).
+
+-type 'GROUP_POOL/SEQ1/GROUP'() :: #'GROUP_POOL/SEQ1/GROUP'{}.
+
+
+-record('GROUP_POOL/SEQ1/GROUP/ADMINS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/GROUP/ADMINS'() :: #'GROUP_POOL/SEQ1/GROUP/ADMINS'{}.
+
+
+-record('GROUP_POOL/SEQ1/GROUP/USERS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'GROUP_POOL/SEQ1/GROUP/USERS'() :: #'GROUP_POOL/SEQ1/GROUP/USERS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/hook.hrl b/priv/opennebula/5.12/xsd-records/hook.hrl
new file mode 100644
index 0000000..e0ec08f
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/hook.hrl
@@ -0,0 +1,81 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('HOOK', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'TYPE' :: string(),
+ 'TEMPLATE' :: 'HOOK/TEMPLATE'(),
+ 'HOOKLOG' :: 'HOOK/HOOKLOG'() | undefined}).
+
+-type 'HOOK'() :: #'HOOK'{}.
+
+
+-record('HOOK/HOOKLOG', {anyAttribs :: anyAttribs(),
+ 'HOOK_EXECUTION_RECORD' :: ['HOOK/HOOKLOG/HOOK_EXECUTION_RECORD'()] | undefined}).
+
+-type 'HOOK/HOOKLOG'() :: #'HOOK/HOOKLOG'{}.
+
+
+-record('HOOK/HOOKLOG/HOOK_EXECUTION_RECORD', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'HOOK_ID' :: integer(),
+ 'EXECUTION_ID' :: integer(),
+ 'TIMESTAMP' :: integer(),
+ 'ARGUMENTS' :: string(),
+ 'EXECUTION_RESULT' :: 'HOOK/HOOKLOG/HOOK_EXECUTION_RECORD/EXECUTION_RESULT'(),
+ 'REMOTE_HOST' :: string() | undefined,
+ 'RETRY' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'HOOK/HOOKLOG/HOOK_EXECUTION_RECORD'() :: #'HOOK/HOOKLOG/HOOK_EXECUTION_RECORD'{}.
+
+
+-record('HOOK/HOOKLOG/HOOK_EXECUTION_RECORD/EXECUTION_RESULT', {anyAttribs :: anyAttribs(),
+ 'COMMAND' :: string(),
+ 'STDOUT' :: string(),
+ 'STDERR' :: string(),
+ 'CODE' :: string()}).
+
+-type 'HOOK/HOOKLOG/HOOK_EXECUTION_RECORD/EXECUTION_RESULT'() :: #'HOOK/HOOKLOG/HOOK_EXECUTION_RECORD/EXECUTION_RESULT'{}.
+
+
+-record('HOOK/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'ARGUMENTS' :: string() | undefined,
+ 'ARGUMENTS_STDIN' :: string() | undefined,
+ 'CALL' :: string() | undefined,
+ 'COMMAND' :: string(),
+ 'REMOTE' :: string() | undefined,
+ 'RESOURCE' :: string() | undefined,
+ 'STATE' :: string() | undefined,
+ 'LCM_STATE' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'HOOK/TEMPLATE'() :: #'HOOK/TEMPLATE'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/hook_message_api.hrl b/priv/opennebula/5.12/xsd-records/hook_message_api.hrl
new file mode 100644
index 0000000..d46bbd5
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/hook_message_api.hrl
@@ -0,0 +1,35 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('HOOK_MESSAGE', {anyAttribs :: anyAttribs(),
+ 'HOOK_TYPE' :: string(),
+ 'CALL' :: string(),
+ 'CALL_INFO' :: ['CALL_INFO'()] | undefined}).
+
+-type 'HOOK_MESSAGE'() :: #'HOOK_MESSAGE'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/hook_message_retry.hrl b/priv/opennebula/5.12/xsd-records/hook_message_retry.hrl
new file mode 100644
index 0000000..6f86206
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/hook_message_retry.hrl
@@ -0,0 +1,34 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('HOOK_MESSAGE', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string(),
+ 'HOOK_ID' :: integer()}).
+
+-type 'HOOK_MESSAGE'() :: #'HOOK_MESSAGE'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/host.hrl b/priv/opennebula/5.12/xsd-records/host.hrl
new file mode 100644
index 0000000..5965e01
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/host.hrl
@@ -0,0 +1,165 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('HOST', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'STATE' :: integer(),
+ 'PREV_STATE' :: integer(),
+ 'IM_MAD' :: string(),
+ 'VM_MAD' :: string(),
+ 'CLUSTER_ID' :: integer(),
+ 'CLUSTER' :: string(),
+ 'HOST_SHARE' :: 'HOST/HOST_SHARE'(),
+ 'VMS' :: 'HOST/VMS'(),
+ 'TEMPLATE' :: 'HOST/TEMPLATE'(),
+ 'MONITORING' :: 'HOST/MONITORING'()}).
+
+-type 'HOST'() :: #'HOST'{}.
+
+
+-record('HOST/MONITORING', {anyAttribs :: anyAttribs(),
+ 'TIMESTAMP' :: integer() | undefined,
+ 'ID' :: integer() | undefined,
+ 'CAPACITY' :: 'HOST/MONITORING/CAPACITY'() | undefined,
+ 'SYSTEM' :: 'HOST/MONITORING/SYSTEM'() | undefined}).
+
+-type 'HOST/MONITORING'() :: #'HOST/MONITORING'{}.
+
+
+-record('HOST/MONITORING/SYSTEM', {anyAttribs :: anyAttribs(),
+ 'NETRX' :: integer() | undefined,
+ 'NETTX' :: integer() | undefined}).
+
+-type 'HOST/MONITORING/SYSTEM'() :: #'HOST/MONITORING/SYSTEM'{}.
+
+
+-record('HOST/MONITORING/CAPACITY', {anyAttribs :: anyAttribs(),
+ 'FREE_CPU' :: integer(),
+ 'FREE_MEMORY' :: integer(),
+ 'USED_CPU' :: integer(),
+ 'USED_MEMORY' :: integer()}).
+
+-type 'HOST/MONITORING/CAPACITY'() :: #'HOST/MONITORING/CAPACITY'{}.
+
+
+-record('HOST/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_CCR_REF' :: string() | undefined,
+ 'VCENTER_DS_REF' :: [string()] | undefined,
+ 'VCENTER_HOST' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ 'VCENTER_NAME' :: string() | undefined,
+ 'VCENTER_PASSWORD' :: string() | undefined,
+ 'VCENTER_RESOURCE_POOL_INFO' :: [string()] | undefined,
+ 'VCENTER_USER' :: string() | undefined,
+ 'VCENTER_VERSION' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'HOST/TEMPLATE'() :: #'HOST/TEMPLATE'{}.
+
+
+-record('HOST/VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'HOST/VMS'() :: #'HOST/VMS'{}.
+
+
+-record('HOST/HOST_SHARE', {anyAttribs :: anyAttribs(),
+ 'MEM_USAGE' :: integer(),
+ 'CPU_USAGE' :: integer(),
+ 'TOTAL_MEM' :: integer(),
+ 'TOTAL_CPU' :: integer(),
+ 'MAX_MEM' :: integer(),
+ 'MAX_CPU' :: integer(),
+ 'RUNNING_VMS' :: integer(),
+ 'VMS_THREAD' :: integer(),
+ 'DATASTORES' :: 'HOST/HOST_SHARE/DATASTORES'(),
+ 'PCI_DEVICES' :: 'HOST/HOST_SHARE/PCI_DEVICES'(),
+ 'NUMA_NODES' :: 'HOST/HOST_SHARE/NUMA_NODES'()}).
+
+-type 'HOST/HOST_SHARE'() :: #'HOST/HOST_SHARE'{}.
+
+
+-record('HOST/HOST_SHARE/NUMA_NODES', {anyAttribs :: anyAttribs(),
+ 'NODE' :: ['HOST/HOST_SHARE/NUMA_NODES/NODE'()] | undefined}).
+
+-type 'HOST/HOST_SHARE/NUMA_NODES'() :: #'HOST/HOST_SHARE/NUMA_NODES'{}.
+
+
+-record('HOST/HOST_SHARE/NUMA_NODES/NODE', {anyAttribs :: anyAttribs(),
+ 'CORE' :: ['HOST/HOST_SHARE/NUMA_NODES/NODE/CORE'()] | undefined,
+ 'HUGEPAGE' :: ['HOST/HOST_SHARE/NUMA_NODES/NODE/HUGEPAGE'()] | undefined,
+ 'MEMORY' :: 'HOST/HOST_SHARE/NUMA_NODES/NODE/MEMORY'(),
+ 'NODE_ID' :: integer()}).
+
+-type 'HOST/HOST_SHARE/NUMA_NODES/NODE'() :: #'HOST/HOST_SHARE/NUMA_NODES/NODE'{}.
+
+
+-record('HOST/HOST_SHARE/NUMA_NODES/NODE/MEMORY', {anyAttribs :: anyAttribs(),
+ 'DISTANCE' :: string(),
+ 'FREE' :: integer(),
+ 'TOTAL' :: integer(),
+ 'USAGE' :: integer(),
+ 'USED' :: integer()}).
+
+-type 'HOST/HOST_SHARE/NUMA_NODES/NODE/MEMORY'() :: #'HOST/HOST_SHARE/NUMA_NODES/NODE/MEMORY'{}.
+
+
+-record('HOST/HOST_SHARE/NUMA_NODES/NODE/HUGEPAGE', {anyAttribs :: anyAttribs(),
+ 'FREE' :: integer(),
+ 'PAGES' :: integer(),
+ 'SIZE' :: integer(),
+ 'USAGE' :: integer()}).
+
+-type 'HOST/HOST_SHARE/NUMA_NODES/NODE/HUGEPAGE'() :: #'HOST/HOST_SHARE/NUMA_NODES/NODE/HUGEPAGE'{}.
+
+
+-record('HOST/HOST_SHARE/NUMA_NODES/NODE/CORE', {anyAttribs :: anyAttribs(),
+ 'CPUS' :: string(),
+ 'DEDICATED' :: string(),
+ 'FREE' :: integer(),
+ 'ID' :: integer()}).
+
+-type 'HOST/HOST_SHARE/NUMA_NODES/NODE/CORE'() :: #'HOST/HOST_SHARE/NUMA_NODES/NODE/CORE'{}.
+
+
+-record('HOST/HOST_SHARE/PCI_DEVICES', {anyAttribs :: anyAttribs(),
+ 'PCI' :: [string()] | undefined}).
+
+-type 'HOST/HOST_SHARE/PCI_DEVICES'() :: #'HOST/HOST_SHARE/PCI_DEVICES'{}.
+
+
+-record('HOST/HOST_SHARE/DATASTORES', {anyAttribs :: anyAttribs(),
+ 'DISK_USAGE' :: integer(),
+ 'FREE_DISK' :: integer(),
+ 'MAX_DISK' :: integer(),
+ 'USED_DISK' :: integer()}).
+
+-type 'HOST/HOST_SHARE/DATASTORES'() :: #'HOST/HOST_SHARE/DATASTORES'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/image.hrl b/priv/opennebula/5.12/xsd-records/image.hrl
new file mode 100644
index 0000000..38c1ebf
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/image.hrl
@@ -0,0 +1,131 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'LOCK' :: 'IMAGE/LOCK'() | undefined,
+ 'PERMISSIONS' :: 'IMAGE/PERMISSIONS'() | undefined,
+ 'TYPE' :: integer(),
+ 'DISK_TYPE' :: integer(),
+ 'PERSISTENT' :: integer(),
+ 'REGTIME' :: integer(),
+ 'SOURCE' :: string(),
+ 'PATH' :: string(),
+ 'FORMAT' :: string(),
+ 'FS' :: string(),
+ 'SIZE' :: integer(),
+ 'STATE' :: integer(),
+ 'RUNNING_VMS' :: integer(),
+ 'CLONING_OPS' :: integer(),
+ 'CLONING_ID' :: integer(),
+ 'TARGET_SNAPSHOT' :: integer(),
+ 'DATASTORE_ID' :: integer(),
+ 'DATASTORE' :: string(),
+ 'VMS' :: 'IMAGE/VMS'(),
+ 'CLONES' :: 'IMAGE/CLONES'(),
+ 'APP_CLONES' :: 'IMAGE/APP_CLONES'(),
+ 'TEMPLATE' :: 'IMAGE/TEMPLATE'(),
+ 'SNAPSHOTS' :: 'IMAGE/SNAPSHOTS'()}).
+
+-type 'IMAGE'() :: #'IMAGE'{}.
+
+
+-record('IMAGE/SNAPSHOTS', {anyAttribs :: anyAttribs(),
+ 'ALLOW_ORPHANS' :: string(),
+ 'CURRENT_BASE' :: integer(),
+ 'NEXT_SNAPSHOT' :: string(),
+ 'SNAPSHOT' :: ['IMAGE/SNAPSHOTS/SNAPSHOT'()] | undefined}).
+
+-type 'IMAGE/SNAPSHOTS'() :: #'IMAGE/SNAPSHOTS'{}.
+
+
+-record('IMAGE/SNAPSHOTS/SNAPSHOT', {anyAttribs :: anyAttribs(),
+ 'CHILDREN' :: string() | undefined,
+ 'ACTIVE' :: string() | undefined,
+ 'DATE' :: integer(),
+ 'ID' :: integer(),
+ 'NAME' :: string() | undefined,
+ 'PARENT' :: integer(),
+ 'SIZE' :: integer()}).
+
+-type 'IMAGE/SNAPSHOTS/SNAPSHOT'() :: #'IMAGE/SNAPSHOTS/SNAPSHOT'{}.
+
+
+-record('IMAGE/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_IMPORTED' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'IMAGE/TEMPLATE'() :: #'IMAGE/TEMPLATE'{}.
+
+
+-record('IMAGE/APP_CLONES', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'IMAGE/APP_CLONES'() :: #'IMAGE/APP_CLONES'{}.
+
+
+-record('IMAGE/CLONES', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'IMAGE/CLONES'() :: #'IMAGE/CLONES'{}.
+
+
+-record('IMAGE/VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'IMAGE/VMS'() :: #'IMAGE/VMS'{}.
+
+
+-record('IMAGE/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'IMAGE/PERMISSIONS'() :: #'IMAGE/PERMISSIONS'{}.
+
+
+-record('IMAGE/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'IMAGE/LOCK'() :: #'IMAGE/LOCK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/marketplace.hrl b/priv/opennebula/5.12/xsd-records/marketplace.hrl
new file mode 100644
index 0000000..5ecba77
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/marketplace.hrl
@@ -0,0 +1,66 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('MARKETPLACE', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'MARKET_MAD' :: string(),
+ 'ZONE_ID' :: string(),
+ 'TOTAL_MB' :: integer(),
+ 'FREE_MB' :: integer(),
+ 'USED_MB' :: integer(),
+ 'MARKETPLACEAPPS' :: 'MARKETPLACE/MARKETPLACEAPPS'(),
+ 'PERMISSIONS' :: 'MARKETPLACE/PERMISSIONS'() | undefined,
+ 'TEMPLATE' :: string()}).
+
+-type 'MARKETPLACE'() :: #'MARKETPLACE'{}.
+
+
+-record('MARKETPLACE/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'MARKETPLACE/PERMISSIONS'() :: #'MARKETPLACE/PERMISSIONS'{}.
+
+
+-record('MARKETPLACE/MARKETPLACEAPPS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'MARKETPLACE/MARKETPLACEAPPS'() :: #'MARKETPLACE/MARKETPLACEAPPS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/marketplaceapp.hrl b/priv/opennebula/5.12/xsd-records/marketplaceapp.hrl
new file mode 100644
index 0000000..5f6bf41
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/marketplaceapp.hrl
@@ -0,0 +1,78 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('MARKETPLACEAPP', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'LOCK' :: 'MARKETPLACEAPP/LOCK'() | undefined,
+ 'REGTIME' :: integer(),
+ 'NAME' :: string(),
+ 'ZONE_ID' :: string(),
+ 'ORIGIN_ID' :: string(),
+ 'SOURCE' :: string(),
+ 'MD5' :: string(),
+ 'SIZE' :: integer(),
+ 'DESCRIPTION' :: string(),
+ 'VERSION' :: string(),
+ 'FORMAT' :: string(),
+ 'APPTEMPLATE64' :: string(),
+ 'MARKETPLACE_ID' :: integer(),
+ 'MARKETPLACE' :: string(),
+ 'STATE' :: integer(),
+ 'TYPE' :: integer(),
+ 'PERMISSIONS' :: 'MARKETPLACEAPP/PERMISSIONS'() | undefined,
+ 'TEMPLATE' :: string()}).
+
+-type 'MARKETPLACEAPP'() :: #'MARKETPLACEAPP'{}.
+
+
+-record('MARKETPLACEAPP/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'MARKETPLACEAPP/PERMISSIONS'() :: #'MARKETPLACEAPP/PERMISSIONS'{}.
+
+
+-record('MARKETPLACEAPP/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'MARKETPLACEAPP/LOCK'() :: #'MARKETPLACEAPP/LOCK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/opennebula_configuration.hrl b/priv/opennebula/5.12/xsd-records/opennebula_configuration.hrl
new file mode 100644
index 0000000..c9bbfb0
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/opennebula_configuration.hrl
@@ -0,0 +1,310 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('OPENNEBULA_CONFIGURATION', {anyAttribs :: anyAttribs(),
+ 'API_LIST_ORDER' :: [string()] | undefined,
+ 'AUTH_MAD' :: ['OPENNEBULA_CONFIGURATION/AUTH_MAD'()] | undefined,
+ 'AUTH_MAD_CONF' :: ['OPENNEBULA_CONFIGURATION/AUTH_MAD_CONF'()] | undefined,
+ 'CLUSTER_ENCRYPTED_ATTR' :: [string()] | undefined,
+ 'DATASTORE_CAPACITY_CHECK' :: [string()] | undefined,
+ 'DATASTORE_ENCRYPTED_ATTR' :: [string()] | undefined,
+ 'DATASTORE_LOCATION' :: [string()] | undefined,
+ 'DATASTORE_MAD' :: ['OPENNEBULA_CONFIGURATION/DATASTORE_MAD'()] | undefined,
+ 'DB' :: 'OPENNEBULA_CONFIGURATION/DB'() | undefined,
+ 'DEFAULT_AUTH' :: [string()] | undefined,
+ 'DEFAULT_CDROM_DEVICE_PREFIX' :: [string()] | undefined,
+ 'DEFAULT_COST' :: ['OPENNEBULA_CONFIGURATION/DEFAULT_COST'()] | undefined,
+ 'DEFAULT_DEVICE_PREFIX' :: [string()] | undefined,
+ 'DEFAULT_IMAGE_PERSISTENT' :: [string()] | undefined,
+ 'DEFAULT_IMAGE_PERSISTENT_NEW' :: [string()] | undefined,
+ 'DEFAULT_IMAGE_TYPE' :: [string()] | undefined,
+ 'DEFAULT_UMASK' :: [string()] | undefined,
+ 'DEFAULT_VDC_CLUSTER_DATASTORE_ACL' :: [string()] | undefined,
+ 'DEFAULT_VDC_CLUSTER_HOST_ACL' :: [string()] | undefined,
+ 'DEFAULT_VDC_CLUSTER_NET_ACL' :: [string()] | undefined,
+ 'DEFAULT_VDC_DATASTORE_ACL' :: [string()] | undefined,
+ 'DEFAULT_VDC_HOST_ACL' :: [string()] | undefined,
+ 'DEFAULT_VDC_VNET_ACL' :: [string()] | undefined,
+ 'DOCUMENT_ENCRYPTED_ATTR' :: [string()] | undefined,
+ 'DS_MAD_CONF' :: ['OPENNEBULA_CONFIGURATION/DS_MAD_CONF'()] | undefined,
+ 'DS_MONITOR_VM_DISK' :: integer() | undefined,
+ 'ENABLE_OTHER_PERMISSIONS' :: string() | undefined,
+ 'FEDERATION' :: 'OPENNEBULA_CONFIGURATION/FEDERATION'() | undefined,
+ 'GROUP_RESTRICTED_ATTR' :: [string()] | undefined,
+ 'HM_MAD' :: 'OPENNEBULA_CONFIGURATION/HM_MAD'() | undefined,
+ 'HOOK_LOG_CONF' :: 'OPENNEBULA_CONFIGURATION/HOOK_LOG_CONF'() | undefined,
+ 'HOST_ENCRYPTED_ATTR' :: [string()] | undefined,
+ 'IMAGE_RESTRICTED_ATTR' :: [string()] | undefined,
+ 'IM_MAD' :: ['OPENNEBULA_CONFIGURATION/IM_MAD'()] | undefined,
+ 'INHERIT_DATASTORE_ATTR' :: [string()] | undefined,
+ 'INHERIT_IMAGE_ATTR' :: [string()] | undefined,
+ 'INHERIT_VNET_ATTR' :: [string()] | undefined,
+ 'IPAM_MAD' :: ['OPENNEBULA_CONFIGURATION/IPAM_MAD'()] | undefined,
+ 'KEEPALIVE_MAX_CONN' :: [integer()] | undefined,
+ 'KEEPALIVE_TIMEOUT' :: [integer()] | undefined,
+ 'LISTEN_ADDRESS' :: [string()] | undefined,
+ 'LOG' :: ['OPENNEBULA_CONFIGURATION/LOG'()] | undefined,
+ 'LOG_CALL_FORMAT' :: [string()] | undefined,
+ 'MAC_PREFIX' :: [string()] | undefined,
+ 'MANAGER_TIMER' :: [integer()] | undefined,
+ 'MARKET_MAD' :: ['OPENNEBULA_CONFIGURATION/MARKET_MAD'()] | undefined,
+ 'MARKET_MAD_CONF' :: ['OPENNEBULA_CONFIGURATION/MARKET_MAD_CONF'()] | undefined,
+ 'MAX_CONN' :: integer() | undefined,
+ 'MAX_CONN_BACKLOG' :: integer() | undefined,
+ 'MESSAGE_SIZE' :: integer() | undefined,
+ 'MONITORING_INTERVAL_DATASTORE' :: integer() | undefined,
+ 'MONITORING_INTERVAL_DB_UPDATE' :: integer() | undefined,
+ 'MONITORING_INTERVAL_HOST' :: integer() | undefined,
+ 'MONITORING_INTERVAL_MARKET' :: integer() | undefined,
+ 'MONITORING_INTERVAL_VM' :: integer() | undefined,
+ 'NETWORK_SIZE' :: integer() | undefined,
+ 'ONE_KEY' :: [string()] | undefined,
+ 'PCI_PASSTHROUGH_BUS' :: string() | undefined,
+ 'PORT' :: integer() | undefined,
+ 'RAFT' :: 'OPENNEBULA_CONFIGURATION/RAFT'() | undefined,
+ 'RPC_LOG' :: string() | undefined,
+ 'SCRIPTS_REMOTE_DIR' :: string() | undefined,
+ 'SESSION_EXPIRATION_TIME' :: integer() | undefined,
+ 'TIMEOUT' :: integer() | undefined,
+ 'TM_MAD' :: ['OPENNEBULA_CONFIGURATION/TM_MAD'()] | undefined,
+ 'TM_MAD_CONF' :: ['OPENNEBULA_CONFIGURATION/TM_MAD_CONF'()] | undefined,
+ 'USER_RESTRICTED_ATTR' :: [string()] | undefined,
+ 'VLAN_IDS' :: 'OPENNEBULA_CONFIGURATION/VLAN_IDS'() | undefined,
+ 'VM_ADMIN_OPERATIONS' :: string() | undefined,
+ 'VM_ENCRYPTED_ATTR' :: [string()] | undefined,
+ 'VM_MAD' :: ['OPENNEBULA_CONFIGURATION/VM_MAD'()] | undefined,
+ 'VM_MANAGE_OPERATIONS' :: string() | undefined,
+ 'VM_MONITORING_EXPIRATION_TIME' :: [string()] | undefined,
+ 'VM_RESTRICTED_ATTR' :: [string()] | undefined,
+ 'VM_SUBMIT_ON_HOLD' :: string() | undefined,
+ 'VM_USE_OPERATIONS' :: [string()] | undefined,
+ 'VNC_PORTS' :: 'OPENNEBULA_CONFIGURATION/VNC_PORTS'() | undefined,
+ 'VNET_ENCRYPTED_ATTR' :: [string()] | undefined,
+ 'VNET_RESTRICTED_ATTR' :: [string()] | undefined,
+ 'VN_MAD_CONF' :: ['OPENNEBULA_CONFIGURATION/VN_MAD_CONF'()] | undefined,
+ 'VXLAN_IDS' :: 'OPENNEBULA_CONFIGURATION/VXLAN_IDS'() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION'() :: #'OPENNEBULA_CONFIGURATION'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/VXLAN_IDS', {anyAttribs :: anyAttribs(),
+ 'START' :: integer()}).
+
+-type 'OPENNEBULA_CONFIGURATION/VXLAN_IDS'() :: #'OPENNEBULA_CONFIGURATION/VXLAN_IDS'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/VN_MAD_CONF', {anyAttribs :: anyAttribs(),
+ 'BRIDGE_TYPE' :: string() | undefined,
+ 'NAME' :: string() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/VN_MAD_CONF'() :: #'OPENNEBULA_CONFIGURATION/VN_MAD_CONF'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/VNC_PORTS', {anyAttribs :: anyAttribs(),
+ 'RESERVED' :: string(),
+ 'START' :: integer()}).
+
+-type 'OPENNEBULA_CONFIGURATION/VNC_PORTS'() :: #'OPENNEBULA_CONFIGURATION/VNC_PORTS'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/VM_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string() | undefined,
+ 'DEFAULT' :: string() | undefined,
+ 'EXECUTABLE' :: string() | undefined,
+ 'IMPORTED_VMS_ACTIONS' :: string() | undefined,
+ 'NAME' :: string() | undefined,
+ 'SUNSTONE_NAME' :: string() | undefined,
+ 'TYPE' :: string() | undefined,
+ 'KEEP_SNAPSHOTS' :: string() | undefined,
+ 'COLD_NIC_ATTACH' :: string() | undefined,
+ 'DS_LIVE_MIGRATION' :: string() | undefined,
+ 'LIVE_RESIZE' :: string() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/VM_MAD'() :: #'OPENNEBULA_CONFIGURATION/VM_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/VLAN_IDS', {anyAttribs :: anyAttribs(),
+ 'RESERVED' :: string(),
+ 'START' :: integer()}).
+
+-type 'OPENNEBULA_CONFIGURATION/VLAN_IDS'() :: #'OPENNEBULA_CONFIGURATION/VLAN_IDS'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/TM_MAD_CONF', {anyAttribs :: anyAttribs(),
+ 'ALLOW_ORPHANS' :: string() | undefined,
+ 'CLONE_TARGET' :: string() | undefined,
+ 'CLONE_TARGET_SHARED' :: string() | undefined,
+ 'CLONE_TARGET_SSH' :: string() | undefined,
+ 'DISK_TYPE_SHARED' :: string() | undefined,
+ 'DISK_TYPE_SSH' :: string() | undefined,
+ 'DRIVER' :: string() | undefined,
+ 'DS_MIGRATE' :: string() | undefined,
+ 'LN_TARGET' :: string() | undefined,
+ 'LN_TARGET_SHARED' :: string() | undefined,
+ 'LN_TARGET_SSH' :: string() | undefined,
+ 'NAME' :: string() | undefined,
+ 'SHARED' :: string() | undefined,
+ 'TM_MAD_SYSTEM' :: string() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/TM_MAD_CONF'() :: #'OPENNEBULA_CONFIGURATION/TM_MAD_CONF'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/TM_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string(),
+ 'EXECUTABLE' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/TM_MAD'() :: #'OPENNEBULA_CONFIGURATION/TM_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/RAFT', {anyAttribs :: anyAttribs(),
+ 'BROADCAST_TIMEOUT_MS' :: integer(),
+ 'ELECTION_TIMEOUT_MS' :: integer(),
+ 'LIMIT_PURGE' :: integer(),
+ 'LOG_PURGE_TIMEOUT' :: integer(),
+ 'LOG_RETENTION' :: integer(),
+ 'XMLRPC_TIMEOUT_MS' :: integer()}).
+
+-type 'OPENNEBULA_CONFIGURATION/RAFT'() :: #'OPENNEBULA_CONFIGURATION/RAFT'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/MARKET_MAD_CONF', {anyAttribs :: anyAttribs(),
+ 'APP_ACTIONS' :: string(),
+ 'NAME' :: string(),
+ 'PUBLIC' :: string() | undefined,
+ 'REQUIRED_ATTRS' :: string() | undefined,
+ 'SUNSTONE_NAME' :: string() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/MARKET_MAD_CONF'() :: #'OPENNEBULA_CONFIGURATION/MARKET_MAD_CONF'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/MARKET_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string(),
+ 'EXECUTABLE' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/MARKET_MAD'() :: #'OPENNEBULA_CONFIGURATION/MARKET_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/LOG', {anyAttribs :: anyAttribs(),
+ 'DEBUG_LEVEL' :: integer(),
+ 'SYSTEM' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/LOG'() :: #'OPENNEBULA_CONFIGURATION/LOG'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/IPAM_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string(),
+ 'EXECUTABLE' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/IPAM_MAD'() :: #'OPENNEBULA_CONFIGURATION/IPAM_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/IM_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string() | undefined,
+ 'EXECUTABLE' :: string() | undefined,
+ 'NAME' :: string() | undefined,
+ 'THREADS' :: integer() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/IM_MAD'() :: #'OPENNEBULA_CONFIGURATION/IM_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/HOOK_LOG_CONF', {anyAttribs :: anyAttribs(),
+ 'LOG_RETENTION' :: integer() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/HOOK_LOG_CONF'() :: #'OPENNEBULA_CONFIGURATION/HOOK_LOG_CONF'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/HM_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string() | undefined,
+ 'EXECUTABLE' :: string() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/HM_MAD'() :: #'OPENNEBULA_CONFIGURATION/HM_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/FEDERATION', {anyAttribs :: anyAttribs(),
+ 'MASTER_ONED' :: string() | undefined,
+ 'MODE' :: string() | undefined,
+ 'SERVER_ID' :: integer() | undefined,
+ 'ZONE_ID' :: integer() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/FEDERATION'() :: #'OPENNEBULA_CONFIGURATION/FEDERATION'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/DS_MAD_CONF', {anyAttribs :: anyAttribs(),
+ 'MARKETPLACE_ACTIONS' :: string() | undefined,
+ 'NAME' :: string() | undefined,
+ 'PERSISTENT_ONLY' :: string() | undefined,
+ 'REQUIRED_ATTRS' :: string() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/DS_MAD_CONF'() :: #'OPENNEBULA_CONFIGURATION/DS_MAD_CONF'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/DEFAULT_COST', {anyAttribs :: anyAttribs(),
+ 'CPU_COST' :: integer(),
+ 'DISK_COST' :: integer(),
+ 'MEMORY_COST' :: integer()}).
+
+-type 'OPENNEBULA_CONFIGURATION/DEFAULT_COST'() :: #'OPENNEBULA_CONFIGURATION/DEFAULT_COST'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/DB', {anyAttribs :: anyAttribs(),
+ 'BACKEND' :: string() | undefined,
+ 'COMPARE_BINARY' :: string() | undefined,
+ 'CONNECTIONS' :: integer() | undefined,
+ 'DB_NAME' :: string() | undefined,
+ 'PASSWD' :: string() | undefined,
+ 'PORT' :: integer() | undefined,
+ 'SERVER' :: string() | undefined,
+ 'USER' :: string() | undefined,
+ 'TIMEOUT' :: integer() | undefined}).
+
+-type 'OPENNEBULA_CONFIGURATION/DB'() :: #'OPENNEBULA_CONFIGURATION/DB'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/DATASTORE_MAD', {anyAttribs :: anyAttribs(),
+ 'ARGUMENTS' :: string(),
+ 'EXECUTABLE' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/DATASTORE_MAD'() :: #'OPENNEBULA_CONFIGURATION/DATASTORE_MAD'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/AUTH_MAD_CONF', {anyAttribs :: anyAttribs(),
+ 'DRIVER_MANAGED_GROUPS' :: string(),
+ 'DRIVER_MANAGED_GROUP_ADMIN' :: string(),
+ 'MAX_TOKEN_TIME' :: integer(),
+ 'NAME' :: string(),
+ 'PASSWORD_CHANGE' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/AUTH_MAD_CONF'() :: #'OPENNEBULA_CONFIGURATION/AUTH_MAD_CONF'{}.
+
+
+-record('OPENNEBULA_CONFIGURATION/AUTH_MAD', {anyAttribs :: anyAttribs(),
+ 'AUTHN' :: string(),
+ 'EXECUTABLE' :: string()}).
+
+-type 'OPENNEBULA_CONFIGURATION/AUTH_MAD'() :: #'OPENNEBULA_CONFIGURATION/AUTH_MAD'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/raftstatus.hrl b/priv/opennebula/5.12/xsd-records/raftstatus.hrl
new file mode 100644
index 0000000..ea92e95
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/raftstatus.hrl
@@ -0,0 +1,40 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('RAFT', {anyAttribs :: anyAttribs(),
+ 'SERVER_ID' :: integer(),
+ 'STATE' :: integer(),
+ 'TERM' :: integer(),
+ 'VOTEDFOR' :: integer(),
+ 'COMMIT' :: integer(),
+ 'LOG_INDEX' :: integer(),
+ 'LOG_TERM' :: integer(),
+ 'FEDLOG_INDEX' :: integer()}).
+
+-type 'RAFT'() :: #'RAFT'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/security_group.hrl b/priv/opennebula/5.12/xsd-records/security_group.hrl
new file mode 100644
index 0000000..54209a2
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/security_group.hrl
@@ -0,0 +1,97 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('SECURITY_GROUP', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PERMISSIONS' :: 'SECURITY_GROUP/PERMISSIONS'() | undefined,
+ 'UPDATED_VMS' :: 'SECURITY_GROUP/UPDATED_VMS'(),
+ 'OUTDATED_VMS' :: 'SECURITY_GROUP/OUTDATED_VMS'(),
+ 'UPDATING_VMS' :: 'SECURITY_GROUP/UPDATING_VMS'(),
+ 'ERROR_VMS' :: 'SECURITY_GROUP/ERROR_VMS'(),
+ 'TEMPLATE' :: 'SECURITY_GROUP/TEMPLATE'()}).
+
+-type 'SECURITY_GROUP'() :: #'SECURITY_GROUP'{}.
+
+
+-record('SECURITY_GROUP/TEMPLATE', {anyAttribs :: anyAttribs(),
+ 'DESCRIPTION' :: string() | undefined,
+ 'RULE' :: ['SECURITY_GROUP/TEMPLATE/RULE'()] | undefined,
+ '#any' :: any()}).
+
+-type 'SECURITY_GROUP/TEMPLATE'() :: #'SECURITY_GROUP/TEMPLATE'{}.
+
+
+-record('SECURITY_GROUP/TEMPLATE/RULE', {anyAttribs :: anyAttribs(),
+ 'PROTOCOL' :: string(),
+ 'RULE_TYPE' :: string()}).
+
+-type 'SECURITY_GROUP/TEMPLATE/RULE'() :: #'SECURITY_GROUP/TEMPLATE/RULE'{}.
+
+
+-record('SECURITY_GROUP/ERROR_VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'SECURITY_GROUP/ERROR_VMS'() :: #'SECURITY_GROUP/ERROR_VMS'{}.
+
+
+-record('SECURITY_GROUP/UPDATING_VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'SECURITY_GROUP/UPDATING_VMS'() :: #'SECURITY_GROUP/UPDATING_VMS'{}.
+
+
+-record('SECURITY_GROUP/OUTDATED_VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'SECURITY_GROUP/OUTDATED_VMS'() :: #'SECURITY_GROUP/OUTDATED_VMS'{}.
+
+
+-record('SECURITY_GROUP/UPDATED_VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'SECURITY_GROUP/UPDATED_VMS'() :: #'SECURITY_GROUP/UPDATED_VMS'{}.
+
+
+-record('SECURITY_GROUP/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'SECURITY_GROUP/PERMISSIONS'() :: #'SECURITY_GROUP/PERMISSIONS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/showback.hrl b/priv/opennebula/5.12/xsd-records/showback.hrl
new file mode 100644
index 0000000..7129e64
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/showback.hrl
@@ -0,0 +1,57 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('SHOWBACK_RECORDS', {anyAttribs :: anyAttribs(),
+ 'SHOWBACK_RECORDS/SEQ1' :: 'SHOWBACK_RECORDS/SEQ1'() | undefined}).
+
+-type 'SHOWBACK_RECORDS'() :: #'SHOWBACK_RECORDS'{}.
+
+
+-record('SHOWBACK_RECORDS/SEQ1', {anyAttribs :: anyAttribs(),
+ 'SHOWBACK' :: ['SHOWBACK_RECORDS/SEQ1/SHOWBACK'()] | undefined}).
+
+-type 'SHOWBACK_RECORDS/SEQ1'() :: #'SHOWBACK_RECORDS/SEQ1'{}.
+
+
+-record('SHOWBACK_RECORDS/SEQ1/SHOWBACK', {anyAttribs :: anyAttribs(),
+ 'VMID' :: integer(),
+ 'VMNAME' :: string(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'YEAR' :: integer(),
+ 'MONTH' :: integer(),
+ 'CPU_COST' :: string(),
+ 'MEMORY_COST' :: string(),
+ 'DISK_COST' :: string(),
+ 'TOTAL_COST' :: string(),
+ 'HOURS' :: string()}).
+
+-type 'SHOWBACK_RECORDS/SEQ1/SHOWBACK'() :: #'SHOWBACK_RECORDS/SEQ1/SHOWBACK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/user.hrl b/priv/opennebula/5.12/xsd-records/user.hrl
new file mode 100644
index 0000000..495bcc4
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/user.hrl
@@ -0,0 +1,208 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('USER', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'GID' :: integer(),
+ 'GROUPS' :: 'USER/GROUPS'(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PASSWORD' :: string(),
+ 'AUTH_DRIVER' :: string(),
+ 'ENABLED' :: integer(),
+ 'LOGIN_TOKEN' :: ['USER/LOGIN_TOKEN'()] | undefined,
+ 'TEMPLATE' :: string(),
+ 'DATASTORE_QUOTA' :: 'USER/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'USER/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'USER/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'USER/IMAGE_QUOTA'() | undefined,
+ 'DEFAULT_USER_QUOTAS' :: 'USER/DEFAULT_USER_QUOTAS'()}).
+
+-type 'USER'() :: #'USER'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS', {anyAttribs :: anyAttribs(),
+ 'DATASTORE_QUOTA' :: 'USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'USER/DEFAULT_USER_QUOTAS/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA'() | undefined}).
+
+-type 'USER/DEFAULT_USER_QUOTAS'() :: #'USER/DEFAULT_USER_QUOTAS'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA'() :: #'USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE'() :: #'USER/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'USER/DEFAULT_USER_QUOTAS/VM_QUOTA/VM'() | undefined}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/VM_QUOTA'() :: #'USER/DEFAULT_USER_QUOTAS/VM_QUOTA'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: string(),
+ 'MEMORY_USED' :: string(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: string(),
+ 'RUNNING_MEMORY_USED' :: string(),
+ 'RUNNING_VMS' :: string(),
+ 'RUNNING_VMS_USED' :: string(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: string(),
+ 'VMS_USED' :: string()}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/VM_QUOTA/VM'() :: #'USER/DEFAULT_USER_QUOTAS/VM_QUOTA/VM'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA'() :: #'USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK'() :: #'USER/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA'() :: #'USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA'{}.
+
+
+-record('USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE'() :: #'USER/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('USER/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['USER/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'USER/IMAGE_QUOTA'() :: #'USER/IMAGE_QUOTA'{}.
+
+
+-record('USER/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'USER/IMAGE_QUOTA/IMAGE'() :: #'USER/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('USER/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'USER/VM_QUOTA/VM'() | undefined}).
+
+-type 'USER/VM_QUOTA'() :: #'USER/VM_QUOTA'{}.
+
+
+-record('USER/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: string(),
+ 'MEMORY_USED' :: string(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: string(),
+ 'RUNNING_MEMORY_USED' :: string(),
+ 'RUNNING_VMS' :: string(),
+ 'RUNNING_VMS_USED' :: string(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: string(),
+ 'VMS_USED' :: string()}).
+
+-type 'USER/VM_QUOTA/VM'() :: #'USER/VM_QUOTA/VM'{}.
+
+
+-record('USER/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['USER/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'USER/NETWORK_QUOTA'() :: #'USER/NETWORK_QUOTA'{}.
+
+
+-record('USER/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'USER/NETWORK_QUOTA/NETWORK'() :: #'USER/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('USER/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['USER/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'USER/DATASTORE_QUOTA'() :: #'USER/DATASTORE_QUOTA'{}.
+
+
+-record('USER/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'USER/DATASTORE_QUOTA/DATASTORE'() :: #'USER/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('USER/LOGIN_TOKEN', {anyAttribs :: anyAttribs(),
+ 'TOKEN' :: string(),
+ 'EXPIRATION_TIME' :: integer(),
+ 'EGID' :: integer()}).
+
+-type 'USER/LOGIN_TOKEN'() :: #'USER/LOGIN_TOKEN'{}.
+
+
+-record('USER/GROUPS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()]}).
+
+-type 'USER/GROUPS'() :: #'USER/GROUPS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/user_pool.hrl b/priv/opennebula/5.12/xsd-records/user_pool.hrl
new file mode 100644
index 0000000..8412c92
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/user_pool.hrl
@@ -0,0 +1,226 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('USER_POOL', {anyAttribs :: anyAttribs(),
+ choice :: 'USER_POOL/SEQ1'() | 'USER_POOL/SEQ1'() | 'USER_POOL/SEQ1'()}).
+
+-type 'USER_POOL'() :: #'USER_POOL'{}.
+
+
+-record('USER_POOL/SEQ1', {anyAttribs :: anyAttribs(),
+ choice :: [['USER_POOL/SEQ1/USER'()] | ['USER_POOL/SEQ1/QUOTAS'()]] | undefined,
+ 'DEFAULT_USER_QUOTAS' :: 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS'()}).
+
+-type 'USER_POOL/SEQ1'() :: #'USER_POOL/SEQ1'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS', {anyAttribs :: anyAttribs(),
+ 'DATASTORE_QUOTA' :: 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA'() | undefined}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA/VM'() | undefined}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: string(),
+ 'MEMORY_USED' :: string(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: string(),
+ 'RUNNING_MEMORY_USED' :: string(),
+ 'RUNNING_VMS' :: string(),
+ 'RUNNING_VMS_USED' :: string(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: string(),
+ 'VMS_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA/VM'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/VM_QUOTA/VM'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE'() :: #'USER_POOL/SEQ1/DEFAULT_USER_QUOTAS/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'DATASTORE_QUOTA' :: 'USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA'() | undefined,
+ 'NETWORK_QUOTA' :: 'USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA'() | undefined,
+ 'VM_QUOTA' :: 'USER_POOL/SEQ1/QUOTAS/VM_QUOTA'() | undefined,
+ 'IMAGE_QUOTA' :: 'USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA'() | undefined}).
+
+-type 'USER_POOL/SEQ1/QUOTAS'() :: #'USER_POOL/SEQ1/QUOTAS'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'IMAGE' :: ['USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE'()] | undefined}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA'() :: #'USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'RVMS' :: string(),
+ 'RVMS_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE'() :: #'USER_POOL/SEQ1/QUOTAS/IMAGE_QUOTA/IMAGE'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/VM_QUOTA', {anyAttribs :: anyAttribs(),
+ 'VM' :: 'USER_POOL/SEQ1/QUOTAS/VM_QUOTA/VM'() | undefined}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/VM_QUOTA'() :: #'USER_POOL/SEQ1/QUOTAS/VM_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/VM_QUOTA/VM', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string(),
+ 'CPU_USED' :: string(),
+ 'MEMORY' :: string(),
+ 'MEMORY_USED' :: string(),
+ 'RUNNING_CPU' :: string(),
+ 'RUNNING_CPU_USED' :: string(),
+ 'RUNNING_MEMORY' :: string(),
+ 'RUNNING_MEMORY_USED' :: string(),
+ 'RUNNING_VMS' :: string(),
+ 'RUNNING_VMS_USED' :: string(),
+ 'SYSTEM_DISK_SIZE' :: string(),
+ 'SYSTEM_DISK_SIZE_USED' :: string(),
+ 'VMS' :: string(),
+ 'VMS_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/VM_QUOTA/VM'() :: #'USER_POOL/SEQ1/QUOTAS/VM_QUOTA/VM'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA', {anyAttribs :: anyAttribs(),
+ 'NETWORK' :: ['USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK'()] | undefined}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA'() :: #'USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'LEASES' :: string(),
+ 'LEASES_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK'() :: #'USER_POOL/SEQ1/QUOTAS/NETWORK_QUOTA/NETWORK'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE'()] | undefined}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA'() :: #'USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA'{}.
+
+
+-record('USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ID' :: string(),
+ 'IMAGES' :: string(),
+ 'IMAGES_USED' :: string(),
+ 'SIZE' :: string(),
+ 'SIZE_USED' :: string()}).
+
+-type 'USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE'() :: #'USER_POOL/SEQ1/QUOTAS/DATASTORE_QUOTA/DATASTORE'{}.
+
+
+-record('USER_POOL/SEQ1/USER', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'GID' :: integer(),
+ 'GROUPS' :: 'USER_POOL/SEQ1/USER/GROUPS'(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PASSWORD' :: string(),
+ 'AUTH_DRIVER' :: string(),
+ 'ENABLED' :: integer(),
+ 'LOGIN_TOKEN' :: ['USER_POOL/SEQ1/USER/LOGIN_TOKEN'()] | undefined,
+ 'TEMPLATE' :: string()}).
+
+-type 'USER_POOL/SEQ1/USER'() :: #'USER_POOL/SEQ1/USER'{}.
+
+
+-record('USER_POOL/SEQ1/USER/LOGIN_TOKEN', {anyAttribs :: anyAttribs(),
+ 'TOKEN' :: string(),
+ 'EXPIRATION_TIME' :: integer(),
+ 'EGID' :: integer()}).
+
+-type 'USER_POOL/SEQ1/USER/LOGIN_TOKEN'() :: #'USER_POOL/SEQ1/USER/LOGIN_TOKEN'{}.
+
+
+-record('USER_POOL/SEQ1/USER/GROUPS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()]}).
+
+-type 'USER_POOL/SEQ1/USER/GROUPS'() :: #'USER_POOL/SEQ1/USER/GROUPS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vdc.hrl b/priv/opennebula/5.12/xsd-records/vdc.hrl
new file mode 100644
index 0000000..6d71494
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vdc.hrl
@@ -0,0 +1,98 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VDC', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'GROUPS' :: 'VDC/GROUPS'(),
+ 'CLUSTERS' :: 'VDC/CLUSTERS'(),
+ 'HOSTS' :: 'VDC/HOSTS'(),
+ 'DATASTORES' :: 'VDC/DATASTORES'(),
+ 'VNETS' :: 'VDC/VNETS'(),
+ 'TEMPLATE' :: string()}).
+
+-type 'VDC'() :: #'VDC'{}.
+
+
+-record('VDC/VNETS', {anyAttribs :: anyAttribs(),
+ 'VNET' :: ['VDC/VNETS/VNET'()] | undefined}).
+
+-type 'VDC/VNETS'() :: #'VDC/VNETS'{}.
+
+
+-record('VDC/VNETS/VNET', {anyAttribs :: anyAttribs(),
+ 'ZONE_ID' :: integer(),
+ 'VNET_ID' :: integer()}).
+
+-type 'VDC/VNETS/VNET'() :: #'VDC/VNETS/VNET'{}.
+
+
+-record('VDC/DATASTORES', {anyAttribs :: anyAttribs(),
+ 'DATASTORE' :: ['VDC/DATASTORES/DATASTORE'()] | undefined}).
+
+-type 'VDC/DATASTORES'() :: #'VDC/DATASTORES'{}.
+
+
+-record('VDC/DATASTORES/DATASTORE', {anyAttribs :: anyAttribs(),
+ 'ZONE_ID' :: integer(),
+ 'DATASTORE_ID' :: integer()}).
+
+-type 'VDC/DATASTORES/DATASTORE'() :: #'VDC/DATASTORES/DATASTORE'{}.
+
+
+-record('VDC/HOSTS', {anyAttribs :: anyAttribs(),
+ 'HOST' :: ['VDC/HOSTS/HOST'()] | undefined}).
+
+-type 'VDC/HOSTS'() :: #'VDC/HOSTS'{}.
+
+
+-record('VDC/HOSTS/HOST', {anyAttribs :: anyAttribs(),
+ 'ZONE_ID' :: integer(),
+ 'HOST_ID' :: integer()}).
+
+-type 'VDC/HOSTS/HOST'() :: #'VDC/HOSTS/HOST'{}.
+
+
+-record('VDC/CLUSTERS', {anyAttribs :: anyAttribs(),
+ 'CLUSTER' :: ['VDC/CLUSTERS/CLUSTER'()] | undefined}).
+
+-type 'VDC/CLUSTERS'() :: #'VDC/CLUSTERS'{}.
+
+
+-record('VDC/CLUSTERS/CLUSTER', {anyAttribs :: anyAttribs(),
+ 'ZONE_ID' :: integer(),
+ 'CLUSTER_ID' :: integer()}).
+
+-type 'VDC/CLUSTERS/CLUSTER'() :: #'VDC/CLUSTERS/CLUSTER'{}.
+
+
+-record('VDC/GROUPS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'VDC/GROUPS'() :: #'VDC/GROUPS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vm.hrl b/priv/opennebula/5.12/xsd-records/vm.hrl
new file mode 100644
index 0000000..7e533b7
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vm.hrl
@@ -0,0 +1,207 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VM', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PERMISSIONS' :: 'VM/PERMISSIONS'() | undefined,
+ 'LAST_POLL' :: integer(),
+ 'STATE' :: integer(),
+ 'LCM_STATE' :: integer(),
+ 'PREV_STATE' :: integer(),
+ 'PREV_LCM_STATE' :: integer(),
+ 'RESCHED' :: integer(),
+ 'STIME' :: integer(),
+ 'ETIME' :: integer(),
+ 'DEPLOY_ID' :: string(),
+ 'LOCK' :: 'VM/LOCK'() | undefined,
+ 'MONITORING' :: 'VM/MONITORING'(),
+ 'TEMPLATE' :: 'VM/TEMPLATE'(),
+ 'USER_TEMPLATE' :: 'VM/USER_TEMPLATE'(),
+ 'HISTORY_RECORDS' :: 'VM/HISTORY_RECORDS'(),
+ 'SNAPSHOTS' :: ['VM/SNAPSHOTS'()] | undefined}).
+
+-type 'VM'() :: #'VM'{}.
+
+
+-record('VM/SNAPSHOTS', {anyAttribs :: anyAttribs(),
+ 'ALLOW_ORPHANS' :: string(),
+ 'CURRENT_BASE' :: integer(),
+ 'DISK_ID' :: integer(),
+ 'NEXT_SNAPSHOT' :: integer(),
+ 'SNAPSHOT' :: ['VM/SNAPSHOTS/SNAPSHOT'()] | undefined}).
+
+-type 'VM/SNAPSHOTS'() :: #'VM/SNAPSHOTS'{}.
+
+
+-record('VM/SNAPSHOTS/SNAPSHOT', {anyAttribs :: anyAttribs(),
+ 'ACTIVE' :: string() | undefined,
+ 'CHILDREN' :: string() | undefined,
+ 'DATE' :: integer(),
+ 'ID' :: integer(),
+ 'NAME' :: string() | undefined,
+ 'PARENT' :: integer(),
+ 'SIZE' :: integer()}).
+
+-type 'VM/SNAPSHOTS/SNAPSHOT'() :: #'VM/SNAPSHOTS/SNAPSHOT'{}.
+
+
+-record('VM/HISTORY_RECORDS', {anyAttribs :: anyAttribs(),
+ 'HISTORY' :: ['VM/HISTORY_RECORDS/HISTORY'()] | undefined}).
+
+-type 'VM/HISTORY_RECORDS'() :: #'VM/HISTORY_RECORDS'{}.
+
+
+-record('VM/HISTORY_RECORDS/HISTORY', {anyAttribs :: anyAttribs(),
+ 'OID' :: integer(),
+ 'SEQ' :: integer(),
+ 'HOSTNAME' :: string(),
+ 'HID' :: integer(),
+ 'CID' :: integer(),
+ 'STIME' :: integer(),
+ 'ETIME' :: integer(),
+ 'VM_MAD' :: string(),
+ 'TM_MAD' :: string(),
+ 'DS_ID' :: integer(),
+ 'PSTIME' :: integer(),
+ 'PETIME' :: integer(),
+ 'RSTIME' :: integer(),
+ 'RETIME' :: integer(),
+ 'ESTIME' :: integer(),
+ 'EETIME' :: integer(),
+ 'ACTION' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'REQUEST_ID' :: string()}).
+
+-type 'VM/HISTORY_RECORDS/HISTORY'() :: #'VM/HISTORY_RECORDS/HISTORY'{}.
+
+
+-record('VM/USER_TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_CCR_REF' :: string() | undefined,
+ 'VCENTER_DS_REF' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'VM/USER_TEMPLATE'() :: #'VM/USER_TEMPLATE'{}.
+
+
+-record('VM/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'DISK' :: ['VM/TEMPLATE/DISK'()] | undefined,
+ choice1 :: [any()] | undefined,
+ 'NIC' :: ['VM/TEMPLATE/NIC'()] | undefined,
+ choice2 :: [any()] | undefined,
+ 'NIC_ALIAS' :: ['VM/TEMPLATE/NIC_ALIAS'()] | undefined,
+ choice3 :: [any()] | undefined}).
+
+-type 'VM/TEMPLATE'() :: #'VM/TEMPLATE'{}.
+
+
+-record('VM/TEMPLATE/NIC_ALIAS', {anyAttribs :: anyAttribs(),
+ 'ALIAS_ID' :: string(),
+ choice :: [any()] | undefined,
+ 'PARENT' :: string(),
+ 'PARENT_ID' :: string(),
+ choice1 :: [any()] | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ 'VCENTER_NET_REF' :: string() | undefined,
+ 'VCENTER_PORTGROUP_TYPE' :: string() | undefined}).
+
+-type 'VM/TEMPLATE/NIC_ALIAS'() :: #'VM/TEMPLATE/NIC_ALIAS'{}.
+
+
+-record('VM/TEMPLATE/NIC', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'BRIDGE_TYPE' :: string(),
+ choice1 :: [any()] | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ 'VCENTER_NET_REF' :: string() | undefined,
+ 'VCENTER_PORTGROUP_TYPE' :: string() | undefined}).
+
+-type 'VM/TEMPLATE/NIC'() :: #'VM/TEMPLATE/NIC'{}.
+
+
+-record('VM/TEMPLATE/DISK', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_DS_REF' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'VM/TEMPLATE/DISK'() :: #'VM/TEMPLATE/DISK'{}.
+
+
+-record('VM/MONITORING', {anyAttribs :: anyAttribs(),
+ 'CPU' :: string() | undefined,
+ 'DISKRDBYTES' :: integer() | undefined,
+ 'DISKRDIOPS' :: integer() | undefined,
+ 'DISKWRBYTES' :: integer() | undefined,
+ 'DISKWRIOPS' :: integer() | undefined,
+ 'ID' :: integer() | undefined,
+ 'MEMORY' :: integer() | undefined,
+ 'NETTX' :: integer() | undefined,
+ 'NETRX' :: integer() | undefined,
+ 'TIMESTAMP' :: integer() | undefined,
+ 'VCENTER_ESX_HOST' :: string() | undefined,
+ 'VCENTER_GUEST_STATE' :: string() | undefined,
+ 'VCENTER_RP_NAME' :: string() | undefined,
+ 'VCENTER_VMWARETOOLS_RUNNING_STATUS' :: string() | undefined,
+ 'VCENTER_VMWARETOOLS_VERSION' :: string() | undefined,
+ 'VCENTER_VMWARETOOLS_VERSION_STATUS' :: string() | undefined,
+ 'VCENTER_VM_NAME' :: string() | undefined}).
+
+-type 'VM/MONITORING'() :: #'VM/MONITORING'{}.
+
+
+-record('VM/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'VM/LOCK'() :: #'VM/LOCK'{}.
+
+
+-record('VM/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'VM/PERMISSIONS'() :: #'VM/PERMISSIONS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vm_group.hrl b/priv/opennebula/5.12/xsd-records/vm_group.hrl
new file mode 100644
index 0000000..49b3906
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vm_group.hrl
@@ -0,0 +1,81 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VM_GROUP', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PERMISSIONS' :: 'VM_GROUP/PERMISSIONS'() | undefined,
+ 'LOCK' :: 'VM_GROUP/LOCK'() | undefined,
+ 'ROLES' :: 'VM_GROUP/ROLES'(),
+ 'TEMPLATE' :: string()}).
+
+-type 'VM_GROUP'() :: #'VM_GROUP'{}.
+
+
+-record('VM_GROUP/ROLES', {anyAttribs :: anyAttribs(),
+ 'ROLE' :: ['VM_GROUP/ROLES/ROLE'()]}).
+
+-type 'VM_GROUP/ROLES'() :: #'VM_GROUP/ROLES'{}.
+
+
+-record('VM_GROUP/ROLES/ROLE', {anyAttribs :: anyAttribs(),
+ 'HOST_AFFINED' :: string() | undefined,
+ 'HOST_ANTI_AFFINED' :: string() | undefined,
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'POLICY' :: string() | undefined}).
+
+-type 'VM_GROUP/ROLES/ROLE'() :: #'VM_GROUP/ROLES/ROLE'{}.
+
+
+-record('VM_GROUP/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'VM_GROUP/LOCK'() :: #'VM_GROUP/LOCK'{}.
+
+
+-record('VM_GROUP/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'VM_GROUP/PERMISSIONS'() :: #'VM_GROUP/PERMISSIONS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vm_pool.hrl b/priv/opennebula/5.12/xsd-records/vm_pool.hrl
new file mode 100644
index 0000000..316631b
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vm_pool.hrl
@@ -0,0 +1,136 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VM_POOL', {anyAttribs :: anyAttribs(),
+ 'VM' :: ['VM_POOL/VM'()] | undefined}).
+
+-type 'VM_POOL'() :: #'VM_POOL'{}.
+
+
+-record('VM_POOL/VM', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'LAST_POLL' :: integer(),
+ 'STATE' :: integer(),
+ 'LCM_STATE' :: integer(),
+ 'RESCHED' :: integer(),
+ 'STIME' :: integer(),
+ 'ETIME' :: integer(),
+ 'DEPLOY_ID' :: string(),
+ 'TEMPLATE' :: 'VM_POOL/VM/TEMPLATE'(),
+ 'MONITORING' :: 'VM_POOL/VM/MONITORING'() | undefined,
+ 'USER_TEMPLATE' :: 'VM_POOL/VM/USER_TEMPLATE'(),
+ 'HISTORY_RECORDS' :: 'VM_POOL/VM/HISTORY_RECORDS'(),
+ 'SNAPSHOTS' :: ['VM_POOL/VM/SNAPSHOTS'()] | undefined}).
+
+-type 'VM_POOL/VM'() :: #'VM_POOL/VM'{}.
+
+
+-record('VM_POOL/VM/SNAPSHOTS', {anyAttribs :: anyAttribs(),
+ 'ALLOW_ORPHANS' :: string(),
+ 'CURRENT_BASE' :: integer(),
+ 'DISK_ID' :: integer(),
+ 'NEXT_SNAPSHOT' :: integer(),
+ 'SNAPSHOT' :: ['VM_POOL/VM/SNAPSHOTS/SNAPSHOT'()] | undefined}).
+
+-type 'VM_POOL/VM/SNAPSHOTS'() :: #'VM_POOL/VM/SNAPSHOTS'{}.
+
+
+-record('VM_POOL/VM/SNAPSHOTS/SNAPSHOT', {anyAttribs :: anyAttribs(),
+ 'ACTIVE' :: string() | undefined,
+ 'CHILDREN' :: string() | undefined,
+ 'DATE' :: integer(),
+ 'ID' :: integer(),
+ 'NAME' :: string() | undefined,
+ 'PARENT' :: integer(),
+ 'SIZE' :: integer()}).
+
+-type 'VM_POOL/VM/SNAPSHOTS/SNAPSHOT'() :: #'VM_POOL/VM/SNAPSHOTS/SNAPSHOT'{}.
+
+
+-record('VM_POOL/VM/HISTORY_RECORDS', {anyAttribs :: anyAttribs(),
+ 'HISTORY' :: ['VM_POOL/VM/HISTORY_RECORDS/HISTORY'()] | undefined}).
+
+-type 'VM_POOL/VM/HISTORY_RECORDS'() :: #'VM_POOL/VM/HISTORY_RECORDS'{}.
+
+
+-record('VM_POOL/VM/HISTORY_RECORDS/HISTORY', {anyAttribs :: anyAttribs(),
+ 'OID' :: integer(),
+ 'SEQ' :: integer(),
+ 'HOSTNAME' :: string(),
+ 'HID' :: integer(),
+ 'CID' :: integer(),
+ 'DS_ID' :: integer(),
+ 'ACTION' :: integer()}).
+
+-type 'VM_POOL/VM/HISTORY_RECORDS/HISTORY'() :: #'VM_POOL/VM/HISTORY_RECORDS/HISTORY'{}.
+
+
+-record('VM_POOL/VM/USER_TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined}).
+
+-type 'VM_POOL/VM/USER_TEMPLATE'() :: #'VM_POOL/VM/USER_TEMPLATE'{}.
+
+
+-record('VM_POOL/VM/MONITORING', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined}).
+
+-type 'VM_POOL/VM/MONITORING'() :: #'VM_POOL/VM/MONITORING'{}.
+
+
+-record('VM_POOL/VM/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'DISK' :: ['VM_POOL/VM/TEMPLATE/DISK'()] | undefined,
+ choice1 :: [any()] | undefined,
+ 'NIC' :: ['VM_POOL/VM/TEMPLATE/NIC'()] | undefined,
+ choice2 :: [any()] | undefined}).
+
+-type 'VM_POOL/VM/TEMPLATE'() :: #'VM_POOL/VM/TEMPLATE'{}.
+
+
+-record('VM_POOL/VM/TEMPLATE/NIC', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ 'VCENTER_NET_REF' :: string() | undefined,
+ 'VCENTER_PORTGROUP_TYPE' :: string() | undefined}).
+
+-type 'VM_POOL/VM/TEMPLATE/NIC'() :: #'VM_POOL/VM/TEMPLATE/NIC'{}.
+
+
+-record('VM_POOL/VM/TEMPLATE/DISK', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_DS_REF' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'VM_POOL/VM/TEMPLATE/DISK'() :: #'VM_POOL/VM/TEMPLATE/DISK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vmtemplate.hrl b/priv/opennebula/5.12/xsd-records/vmtemplate.hrl
new file mode 100644
index 0000000..e2a1299
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vmtemplate.hrl
@@ -0,0 +1,75 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VMTEMPLATE', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'LOCK' :: 'VMTEMPLATE/LOCK'() | undefined,
+ 'PERMISSIONS' :: 'VMTEMPLATE/PERMISSIONS'(),
+ 'REGTIME' :: integer(),
+ 'TEMPLATE' :: 'VMTEMPLATE/TEMPLATE'()}).
+
+-type 'VMTEMPLATE'() :: #'VMTEMPLATE'{}.
+
+
+-record('VMTEMPLATE/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VCENTER_CCR_REF' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ 'VCENTER_TEMPLATE_REF' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'VMTEMPLATE/TEMPLATE'() :: #'VMTEMPLATE/TEMPLATE'{}.
+
+
+-record('VMTEMPLATE/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'VMTEMPLATE/PERMISSIONS'() :: #'VMTEMPLATE/PERMISSIONS'{}.
+
+
+-record('VMTEMPLATE/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'VMTEMPLATE/LOCK'() :: #'VMTEMPLATE/LOCK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vnet.hrl b/priv/opennebula/5.12/xsd-records/vnet.hrl
new file mode 100644
index 0000000..f7bbe85
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vnet.hrl
@@ -0,0 +1,165 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VNET', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'LOCK' :: 'VNET/LOCK'() | undefined,
+ 'PERMISSIONS' :: 'VNET/PERMISSIONS'() | undefined,
+ 'CLUSTERS' :: 'VNET/CLUSTERS'(),
+ 'BRIDGE' :: string(),
+ 'BRIDGE_TYPE' :: string() | undefined,
+ 'PARENT_NETWORK_ID' :: string(),
+ 'VN_MAD' :: string(),
+ 'PHYDEV' :: string(),
+ 'VLAN_ID' :: string() | undefined,
+ 'OUTER_VLAN_ID' :: string() | undefined,
+ 'VLAN_ID_AUTOMATIC' :: string(),
+ 'OUTER_VLAN_ID_AUTOMATIC' :: string(),
+ 'USED_LEASES' :: integer(),
+ 'VROUTERS' :: 'VNET/VROUTERS'(),
+ 'TEMPLATE' :: 'VNET/TEMPLATE'(),
+ 'AR_POOL' :: 'VNET/AR_POOL'()}).
+
+-type 'VNET'() :: #'VNET'{}.
+
+
+-record('VNET/AR_POOL', {anyAttribs :: anyAttribs(),
+ 'VNET/AR_POOL/SEQ1' :: 'VNET/AR_POOL/SEQ1'() | undefined}).
+
+-type 'VNET/AR_POOL'() :: #'VNET/AR_POOL'{}.
+
+
+-record('VNET/AR_POOL/SEQ1', {anyAttribs :: anyAttribs(),
+ 'AR' :: ['VNET/AR_POOL/SEQ1/AR'()] | undefined}).
+
+-type 'VNET/AR_POOL/SEQ1'() :: #'VNET/AR_POOL/SEQ1'{}.
+
+
+-record('VNET/AR_POOL/SEQ1/AR', {anyAttribs :: anyAttribs(),
+ 'AR_ID' :: string(),
+ 'GLOBAL_PREFIX' :: string() | undefined,
+ 'IP' :: string() | undefined,
+ 'MAC' :: string(),
+ 'PARENT_NETWORK_AR_ID' :: string() | undefined,
+ 'SIZE' :: integer(),
+ 'TYPE' :: string(),
+ 'ULA_PREFIX' :: string() | undefined,
+ 'VN_MAD' :: string() | undefined,
+ 'MAC_END' :: string() | undefined,
+ 'IP_END' :: string() | undefined,
+ 'IP6_ULA' :: string() | undefined,
+ 'IP6_ULA_END' :: string() | undefined,
+ 'IP6_GLOBAL' :: string() | undefined,
+ 'IP6_GLOBAL_END' :: string() | undefined,
+ 'IP6' :: string() | undefined,
+ 'IP6_END' :: string() | undefined,
+ 'USED_LEASES' :: string(),
+ 'LEASES' :: 'VNET/AR_POOL/SEQ1/AR/LEASES'() | undefined}).
+
+-type 'VNET/AR_POOL/SEQ1/AR'() :: #'VNET/AR_POOL/SEQ1/AR'{}.
+
+
+-record('VNET/AR_POOL/SEQ1/AR/LEASES', {anyAttribs :: anyAttribs(),
+ 'LEASE' :: ['VNET/AR_POOL/SEQ1/AR/LEASES/LEASE'()] | undefined}).
+
+-type 'VNET/AR_POOL/SEQ1/AR/LEASES'() :: #'VNET/AR_POOL/SEQ1/AR/LEASES'{}.
+
+
+-record('VNET/AR_POOL/SEQ1/AR/LEASES/LEASE', {anyAttribs :: anyAttribs(),
+ 'IP' :: string() | undefined,
+ 'IP6' :: string() | undefined,
+ 'IP6_GLOBAL' :: string() | undefined,
+ 'IP6_LINK' :: string() | undefined,
+ 'IP6_ULA' :: string() | undefined,
+ 'MAC' :: string(),
+ 'VM' :: integer() | undefined,
+ 'VNET' :: integer() | undefined,
+ 'VROUTER' :: integer() | undefined}).
+
+-type 'VNET/AR_POOL/SEQ1/AR/LEASES/LEASE'() :: #'VNET/AR_POOL/SEQ1/AR/LEASES/LEASE'{}.
+
+
+-record('VNET/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'CONTEXT_FORCE_IPV4' :: string() | undefined,
+ 'DNS' :: string() | undefined,
+ 'GATEWAY' :: string() | undefined,
+ 'GATEWAY6' :: string() | undefined,
+ 'GUEST_MTU' :: integer() | undefined,
+ 'NETWORK_ADDRESS' :: string() | undefined,
+ 'NETWORK_MASK' :: string() | undefined,
+ 'SEARCH_DOMAIN' :: string() | undefined,
+ 'VCENTER_FROM_WILD' :: string() | undefined,
+ 'VCENTER_INSTANCE_ID' :: string() | undefined,
+ 'VCENTER_NET_REF' :: string() | undefined,
+ 'VCENTER_PORTGROUP_TYPE' :: string() | undefined,
+ 'VCENTER_TEMPLATE_REF' :: string() | undefined,
+ choice1 :: [any()] | undefined}).
+
+-type 'VNET/TEMPLATE'() :: #'VNET/TEMPLATE'{}.
+
+
+-record('VNET/VROUTERS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'VNET/VROUTERS'() :: #'VNET/VROUTERS'{}.
+
+
+-record('VNET/CLUSTERS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'VNET/CLUSTERS'() :: #'VNET/CLUSTERS'{}.
+
+
+-record('VNET/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'VNET/PERMISSIONS'() :: #'VNET/PERMISSIONS'{}.
+
+
+-record('VNET/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'VNET/LOCK'() :: #'VNET/LOCK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vntemplate.hrl b/priv/opennebula/5.12/xsd-records/vntemplate.hrl
new file mode 100644
index 0000000..9734f01
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vntemplate.hrl
@@ -0,0 +1,73 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VNTEMPLATE', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'LOCK' :: 'VNTEMPLATE/LOCK'() | undefined,
+ 'PERMISSIONS' :: 'VNTEMPLATE/PERMISSIONS'(),
+ 'REGTIME' :: integer(),
+ 'TEMPLATE' :: 'VNTEMPLATE/TEMPLATE'()}).
+
+-type 'VNTEMPLATE'() :: #'VNTEMPLATE'{}.
+
+
+-record('VNTEMPLATE/TEMPLATE', {anyAttribs :: anyAttribs(),
+ choice :: [any()] | undefined,
+ 'VN_MAD' :: string(),
+ choice1 :: [any()] | undefined}).
+
+-type 'VNTEMPLATE/TEMPLATE'() :: #'VNTEMPLATE/TEMPLATE'{}.
+
+
+-record('VNTEMPLATE/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'VNTEMPLATE/PERMISSIONS'() :: #'VNTEMPLATE/PERMISSIONS'{}.
+
+
+-record('VNTEMPLATE/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'VNTEMPLATE/LOCK'() :: #'VNTEMPLATE/LOCK'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/vrouter.hrl b/priv/opennebula/5.12/xsd-records/vrouter.hrl
new file mode 100644
index 0000000..97c77b4
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/vrouter.hrl
@@ -0,0 +1,71 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('VROUTER', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'UID' :: integer(),
+ 'GID' :: integer(),
+ 'UNAME' :: string(),
+ 'GNAME' :: string(),
+ 'NAME' :: string(),
+ 'PERMISSIONS' :: 'VROUTER/PERMISSIONS'() | undefined,
+ 'LOCK' :: 'VROUTER/LOCK'() | undefined,
+ 'VMS' :: 'VROUTER/VMS'(),
+ 'TEMPLATE' :: string()}).
+
+-type 'VROUTER'() :: #'VROUTER'{}.
+
+
+-record('VROUTER/VMS', {anyAttribs :: anyAttribs(),
+ 'ID' :: [integer()] | undefined}).
+
+-type 'VROUTER/VMS'() :: #'VROUTER/VMS'{}.
+
+
+-record('VROUTER/LOCK', {anyAttribs :: anyAttribs(),
+ 'LOCKED' :: integer(),
+ 'OWNER' :: integer(),
+ 'TIME' :: integer(),
+ 'REQ_ID' :: integer()}).
+
+-type 'VROUTER/LOCK'() :: #'VROUTER/LOCK'{}.
+
+
+-record('VROUTER/PERMISSIONS', {anyAttribs :: anyAttribs(),
+ 'OWNER_U' :: integer(),
+ 'OWNER_M' :: integer(),
+ 'OWNER_A' :: integer(),
+ 'GROUP_U' :: integer(),
+ 'GROUP_M' :: integer(),
+ 'GROUP_A' :: integer(),
+ 'OTHER_U' :: integer(),
+ 'OTHER_M' :: integer(),
+ 'OTHER_A' :: integer()}).
+
+-type 'VROUTER/PERMISSIONS'() :: #'VROUTER/PERMISSIONS'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-records/zone.hrl b/priv/opennebula/5.12/xsd-records/zone.hrl
new file mode 100644
index 0000000..0e1e703
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-records/zone.hrl
@@ -0,0 +1,62 @@
+%% HRL file generated by ERLSOM
+%%
+%% It is possible (and in some cases necessary) to change the name of
+%% the record fields.
+%%
+%% It is possible to add default values, but be aware that these will
+%% only be used when *writing* an xml document.
+
+
+-ifndef(ERLSOM_ANY_ATTRIB_TYPES).
+-define(ERLSOM_ANY_ATTRIB_TYPES, true).
+-type anyAttrib() :: {{string(), %% name of the attribute
+ string()}, %% namespace
+ string()}. %% value
+
+-type anyAttribs() :: [anyAttrib()] | undefined.
+-endif.
+
+-ifndef(ERLSOM_QNAME_TYPES).
+-define(ERLSOM_QNAME_TYPES, true).
+%% xsd:QName values are translated to #qname{} records.
+-record(qname, {uri :: string(),
+ localPart :: string(),
+ prefix :: string(),
+ mappedPrefix :: string()}).
+-endif.
+
+
+
+-record('ZONE', {anyAttribs :: anyAttribs(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'TEMPLATE' :: 'ZONE/TEMPLATE'(),
+ 'SERVER_POOL' :: 'ZONE/SERVER_POOL'()}).
+
+-type 'ZONE'() :: #'ZONE'{}.
+
+
+-record('ZONE/SERVER_POOL', {anyAttribs :: anyAttribs(),
+ 'SERVER' :: ['ZONE/SERVER_POOL/SERVER'()] | undefined}).
+
+-type 'ZONE/SERVER_POOL'() :: #'ZONE/SERVER_POOL'{}.
+
+
+-record('ZONE/SERVER_POOL/SERVER', {anyAttribs :: anyAttribs(),
+ 'ENDPOINT' :: string(),
+ 'ID' :: integer(),
+ 'NAME' :: string(),
+ 'STATE' :: integer() | undefined,
+ 'TERM' :: integer() | undefined,
+ 'VOTEDFOR' :: integer() | undefined,
+ 'COMMIT' :: integer() | undefined,
+ 'LOG_INDEX' :: integer() | undefined,
+ 'FEDLOG_INDEX' :: integer() | undefined}).
+
+-type 'ZONE/SERVER_POOL/SERVER'() :: #'ZONE/SERVER_POOL/SERVER'{}.
+
+
+-record('ZONE/TEMPLATE', {anyAttribs :: anyAttribs(),
+ 'ENDPOINT' :: string()}).
+
+-type 'ZONE/TEMPLATE'() :: #'ZONE/TEMPLATE'{}.
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/README.txt b/priv/opennebula/5.12/xsd-src/README.txt
new file mode 100644
index 0000000..00d6a90
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/README.txt
@@ -0,0 +1,9 @@
+These XML Schemas define the XMLs returned by OpenNebula's XML-RPC API.
+
+The included XML samples are not actual responses from OpenNebula, as it does
+not include the headers (namespace, schema location).
+
+
+To learn more, please read the API reference documentation at
+http://opennebula.org/documentation:documentation:api
+
diff --git a/priv/opennebula/5.12/xsd-src/acct.xsd b/priv/opennebula/5.12/xsd-src/acct.xsd
new file mode 100644
index 0000000..0e12713
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/acct.xsd
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/acl_pool.xsd b/priv/opennebula/5.12/xsd-src/acl_pool.xsd
new file mode 100644
index 0000000..10dafb3
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/acl_pool.xsd
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/api_info.xsd b/priv/opennebula/5.12/xsd-src/api_info.xsd
new file mode 100644
index 0000000..72b625c
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/api_info.xsd
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/cluster.xsd b/priv/opennebula/5.12/xsd-src/cluster.xsd
new file mode 100644
index 0000000..7fdacac
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/cluster.xsd
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/cluster_pool.xsd b/priv/opennebula/5.12/xsd-src/cluster_pool.xsd
new file mode 100644
index 0000000..5473881
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/cluster_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/datastore.xsd b/priv/opennebula/5.12/xsd-src/datastore.xsd
new file mode 100644
index 0000000..b5a9479
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/datastore.xsd
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/datastore_pool.xsd b/priv/opennebula/5.12/xsd-src/datastore_pool.xsd
new file mode 100644
index 0000000..655d458
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/datastore_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/document.xsd b/priv/opennebula/5.12/xsd-src/document.xsd
new file mode 100644
index 0000000..093aff9
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/document.xsd
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/document_pool.xsd b/priv/opennebula/5.12/xsd-src/document_pool.xsd
new file mode 100644
index 0000000..ee93968
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/document_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/group.xsd b/priv/opennebula/5.12/xsd-src/group.xsd
new file mode 100644
index 0000000..1ecb403
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/group.xsd
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/group_pool.xsd b/priv/opennebula/5.12/xsd-src/group_pool.xsd
new file mode 100644
index 0000000..897b0e1
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/group_pool.xsd
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/hook.xsd b/priv/opennebula/5.12/xsd-src/hook.xsd
new file mode 100644
index 0000000..b14d353
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/hook.xsd
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/hook_message_api.xsd b/priv/opennebula/5.12/xsd-src/hook_message_api.xsd
new file mode 100644
index 0000000..db7a064
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/hook_message_api.xsd
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/hook_message_retry.xsd b/priv/opennebula/5.12/xsd-src/hook_message_retry.xsd
new file mode 100644
index 0000000..82a4f66
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/hook_message_retry.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/hook_message_state.xsd b/priv/opennebula/5.12/xsd-src/hook_message_state.xsd
new file mode 100644
index 0000000..a02d755
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/hook_message_state.xsd
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/hook_pool.xsd b/priv/opennebula/5.12/xsd-src/hook_pool.xsd
new file mode 100644
index 0000000..1761f8c
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/hook_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/host.xsd b/priv/opennebula/5.12/xsd-src/host.xsd
new file mode 100644
index 0000000..30906d4
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/host.xsd
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/host_pool.xsd b/priv/opennebula/5.12/xsd-src/host_pool.xsd
new file mode 100644
index 0000000..5d797d3
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/host_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/image.xsd b/priv/opennebula/5.12/xsd-src/image.xsd
new file mode 100644
index 0000000..037bc62
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/image.xsd
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/image_pool.xsd b/priv/opennebula/5.12/xsd-src/image_pool.xsd
new file mode 100644
index 0000000..6e39f45
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/image_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/index.xsd b/priv/opennebula/5.12/xsd-src/index.xsd
new file mode 100644
index 0000000..cdb4216
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/index.xsd
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/marketplace.xsd b/priv/opennebula/5.12/xsd-src/marketplace.xsd
new file mode 100644
index 0000000..6b9ded8
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/marketplace.xsd
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/marketplace_pool.xsd b/priv/opennebula/5.12/xsd-src/marketplace_pool.xsd
new file mode 100644
index 0000000..fb9c7fe
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/marketplace_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/marketplaceapp.xsd b/priv/opennebula/5.12/xsd-src/marketplaceapp.xsd
new file mode 100644
index 0000000..21e6509
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/marketplaceapp.xsd
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/marketplaceapp_pool.xsd b/priv/opennebula/5.12/xsd-src/marketplaceapp_pool.xsd
new file mode 100644
index 0000000..f200eb0
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/marketplaceapp_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/opennebula_configuration.xsd b/priv/opennebula/5.12/xsd-src/opennebula_configuration.xsd
new file mode 100644
index 0000000..ef3b8d8
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/opennebula_configuration.xsd
@@ -0,0 +1,411 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/raftstatus.xsd b/priv/opennebula/5.12/xsd-src/raftstatus.xsd
new file mode 100644
index 0000000..219d2ba
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/raftstatus.xsd
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/security_group.xsd b/priv/opennebula/5.12/xsd-src/security_group.xsd
new file mode 100644
index 0000000..c3ef900
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/security_group.xsd
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/security_group_pool.xsd b/priv/opennebula/5.12/xsd-src/security_group_pool.xsd
new file mode 100644
index 0000000..73bb62a
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/security_group_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/showback.xsd b/priv/opennebula/5.12/xsd-src/showback.xsd
new file mode 100644
index 0000000..6a0944e
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/showback.xsd
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/user.xsd b/priv/opennebula/5.12/xsd-src/user.xsd
new file mode 100644
index 0000000..433ded9
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/user.xsd
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/user_pool.xsd b/priv/opennebula/5.12/xsd-src/user_pool.xsd
new file mode 100644
index 0000000..f7935c1
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/user_pool.xsd
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/vdc.xsd b/priv/opennebula/5.12/xsd-src/vdc.xsd
new file mode 100644
index 0000000..1fb893e
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vdc.xsd
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vdc_pool.xsd b/priv/opennebula/5.12/xsd-src/vdc_pool.xsd
new file mode 100644
index 0000000..42e2e4e
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vdc_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vm.xsd b/priv/opennebula/5.12/xsd-src/vm.xsd
new file mode 100644
index 0000000..48a57ec
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vm.xsd
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vm_group.xsd b/priv/opennebula/5.12/xsd-src/vm_group.xsd
new file mode 100644
index 0000000..286573d
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vm_group.xsd
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vm_group_pool.xsd b/priv/opennebula/5.12/xsd-src/vm_group_pool.xsd
new file mode 100644
index 0000000..cc3f514
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vm_group_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vm_pool.xsd b/priv/opennebula/5.12/xsd-src/vm_pool.xsd
new file mode 100644
index 0000000..46706a2
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vm_pool.xsd
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vmtemplate.xsd b/priv/opennebula/5.12/xsd-src/vmtemplate.xsd
new file mode 100644
index 0000000..657882a
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vmtemplate.xsd
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vmtemplate_pool.xsd b/priv/opennebula/5.12/xsd-src/vmtemplate_pool.xsd
new file mode 100644
index 0000000..fbc1167
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vmtemplate_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vnet.xsd b/priv/opennebula/5.12/xsd-src/vnet.xsd
new file mode 100644
index 0000000..0844eab
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vnet.xsd
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vnet_pool.xsd b/priv/opennebula/5.12/xsd-src/vnet_pool.xsd
new file mode 100644
index 0000000..d771106
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vnet_pool.xsd
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/priv/opennebula/5.12/xsd-src/vntemplate.xsd b/priv/opennebula/5.12/xsd-src/vntemplate.xsd
new file mode 100644
index 0000000..6b1b011
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vntemplate.xsd
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vntemplate_pool.xsd b/priv/opennebula/5.12/xsd-src/vntemplate_pool.xsd
new file mode 100644
index 0000000..437c65f
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vntemplate_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vrouter.xsd b/priv/opennebula/5.12/xsd-src/vrouter.xsd
new file mode 100644
index 0000000..86d7666
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vrouter.xsd
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/vrouter_pool.xsd b/priv/opennebula/5.12/xsd-src/vrouter_pool.xsd
new file mode 100644
index 0000000..698effc
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/vrouter_pool.xsd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/zone.xsd b/priv/opennebula/5.12/xsd-src/zone.xsd
new file mode 100644
index 0000000..f85f05b
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/zone.xsd
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/priv/opennebula/5.12/xsd-src/zone_pool.xsd b/priv/opennebula/5.12/xsd-src/zone_pool.xsd
new file mode 100644
index 0000000..76775a7
--- /dev/null
+++ b/priv/opennebula/5.12/xsd-src/zone_pool.xsd
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+