Skip to content

Adding supported image formats in sm-list #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ocaml/idl/datamodel.ml
Original file line number Diff line number Diff line change
Expand Up @@ -5116,6 +5116,10 @@ module SM = struct
~ty:(Set String) "required_cluster_stack"
"The storage plugin requires that one of these cluster stacks is \
configured and running."
; field ~in_oss_since:None ~qualifier:DynamicRO ~lifecycle:[]
~default_value:(Some (VSet [])) ~ty:(Set String)
"supported_image_formats"
"Image formats suported by the SR (VHD, RAW, Qcow2, ...)"
]
()
end
Expand Down
2 changes: 1 addition & 1 deletion ocaml/idl/datamodel_common.ml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ open Datamodel_roles
to leave a gap for potential hotfixes needing to increment the schema version.*)
let schema_major_vsn = 5

let schema_minor_vsn = 786
let schema_minor_vsn = 787

(* Historical schema versions just in case this is useful later *)
let rio_schema_major_vsn = 5
Expand Down
2 changes: 1 addition & 1 deletion ocaml/idl/schematest.ml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ let hash x = Digest.string x |> Digest.to_hex
(* BEWARE: if this changes, check that schema has been bumped accordingly in
ocaml/idl/datamodel_common.ml, usually schema_minor_vsn *)

let last_known_schema_hash = "ad67a64cd47cdea32085518c1fb38d27"
let last_known_schema_hash = "d8e79c8d3518f51735a29e602a663c2e"

let current_schema_hash : string =
let open Datamodel_types in
Expand Down
5 changes: 3 additions & 2 deletions ocaml/tests/common/test_common.ml
Original file line number Diff line number Diff line change
Expand Up @@ -345,11 +345,12 @@ let make_sm ~__context ?(ref = Ref.make ()) ?(uuid = make_uuid ())
?(copyright = "") ?(version = "") ?(required_api_version = "")
?(capabilities = []) ?(features = default_sm_features)
?(host_pending_features = []) ?(configuration = []) ?(other_config = [])
?(driver_filename = "/dev/null") ?(required_cluster_stack = []) () =
?(driver_filename = "/dev/null") ?(required_cluster_stack = [])
?(supported_image_formats = []) () =
Db.SM.create ~__context ~ref ~uuid ~_type ~name_label ~name_description
~vendor ~copyright ~version ~required_api_version ~capabilities ~features
~host_pending_features ~configuration ~other_config ~driver_filename
~required_cluster_stack ;
~required_cluster_stack ~supported_image_formats ;
ref

let make_sr ~__context ?(ref = Ref.make ()) ?(uuid = make_uuid ())
Expand Down
1 change: 1 addition & 0 deletions ocaml/tests/test_sm_features.ml
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ module CreateSMObject = Generic.MakeStateful (struct
; configuration= []
; required_cluster_stack= []
; smapi_version= SMAPIv2
; supported_image_formats= []
}

let extract_output __context _ =
Expand Down
1 change: 1 addition & 0 deletions ocaml/tests/test_vdi_cbt.ml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ let register_smapiv2_server (module S : Storage_interface.Server_impl) sr_ref =
; configuration= []
; required_cluster_stack= []
; smapi_version= SMAPIv2
; supported_image_formats= []
}
in

Expand Down
5 changes: 5 additions & 0 deletions ocaml/xapi-cli-server/records.ml
Original file line number Diff line number Diff line change
Expand Up @@ -3734,6 +3734,11 @@ let sm_record rpc session_id sm =
; make_field ~name:"required-cluster-stack"
~get:(fun () -> concat_with_comma (x ()).API.sM_required_cluster_stack)
()
; make_field ~name:"supported-image-formats"
~get:(fun () ->
concat_with_comma (x ()).API.sM_supported_image_formats
)
()
]
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>required_cluster_stack</name><value><array><data></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>supported_image_formats</name><value><array><data></data></array></value></member><member><name>required_cluster_stack</name><value><array><data></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>required_cluster_stack</name><value><array><data></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data><value>features</value></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>supported_image_formats</name><value><array><data></data></array></value></member><member><name>required_cluster_stack</name><value><array><data></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data><value>features</value></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>required_cluster_stack</name><value><array><data><value>required_cluster_stack</value></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>supported_image_formats</name><value><array><data><value><string>vhd</string></value></data></array></value></member><member><name>required_cluster_stack</name><value><array><data><value>required_cluster_stack</value></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>required_cluster_stack</name><value><array><data><value>required_cluster_stack</value></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data><value>features</value></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
<?xml version="1.0"?><methodResponse><params><param><value><struct><member><name>Status</name><value>Success</value></member><member><name>Value</name><value><struct><member><name>supported_image_formats</name><value><array><data></data></array></value></member><member><name>required_cluster_stack</name><value><array><data><value>required_cluster_stack</value></data></array></value></member><member><name>configuration</name><value><struct><member><name>configuration</name><value>configuration</value></member></struct></value></member><member><name>features</name><value><array><data><value>features</value></data></array></value></member><member><name>required_api_version</name><value>required_api_version</value></member><member><name>version</name><value>version</value></member><member><name>copyright</name><value>copyright</value></member><member><name>vendor</name><value>vendor</value></member><member><name>description</name><value>description</value></member><member><name>name</name><value>name</value></member><member><name>driver</name><value>driver</value></member></struct></value></member></struct></value></param></params></methodResponse>
29 changes: 15 additions & 14 deletions ocaml/xapi-idl/storage/storage_interface.ml
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,7 @@ type query_result = {
; configuration: (string * string) list
; required_cluster_stack: string list
; smapi_version: smapi_version
; supported_image_formats: string list
}
[@@deriving rpcty]

Expand Down Expand Up @@ -629,9 +630,9 @@ module StorageAPI (R : RPC) = struct
declare "SR.destroy" [] (dbg_p @-> sr_p @-> returning unit_p err)

(** [scan task sr] returns a list of VDIs contained within an attached SR.
@deprecated This function is deprecated, and is only here to keep backward
compatibility with old xapis that call Remote.SR.scan during SXM.
Use the scan2 function instead.
@deprecated This function is deprecated, and is only here to keep backward
compatibility with old xapis that call Remote.SR.scan during SXM.
Use the scan2 function instead.
*)
let scan =
let open TypeCombinators in
Expand Down Expand Up @@ -1031,10 +1032,10 @@ module StorageAPI (R : RPC) = struct
let result_p = Param.mk ~name:"result" Mirror.t in
declare "DATA.MIRROR.stat" [] (dbg_p @-> id_p @-> returning result_p err)

(** Called on the receiving end
@deprecated This function is deprecated, and is only here to keep backward
compatibility with old xapis that call Remote.DATA.MIRROR.receive_start during SXM.
Use the receive_start2 function instead.
(** Called on the receiving end
@deprecated This function is deprecated, and is only here to keep backward
compatibility with old xapis that call Remote.DATA.MIRROR.receive_start during SXM.
Use the receive_start2 function instead.
*)
let receive_start =
let similar_p = Param.mk ~name:"similar" Mirror.similars in
Expand Down Expand Up @@ -1063,17 +1064,17 @@ module StorageAPI (R : RPC) = struct
@-> returning result err
)

(** Called on the receiving end
@deprecated This function is deprecated, and is only here to keep backward
(** Called on the receiving end
@deprecated This function is deprecated, and is only here to keep backward
compatibility with old xapis that call Remote.DATA.MIRROR.receive_finalize
during SXM. Use the receive_finalize2 function instead.
during SXM. Use the receive_finalize2 function instead.
*)
let receive_finalize =
declare "DATA.MIRROR.receive_finalize" []
(dbg_p @-> id_p @-> returning unit_p err)

(** [receive_finalize2 dbg id] will stop the mirroring process and compose
the snapshot VDI with the mirror VDI. It also cleans up the storage resources
(** [receive_finalize2 dbg id] will stop the mirroring process and compose
the snapshot VDI with the mirror VDI. It also cleans up the storage resources
used by mirroring. It is called after the the source VM is paused. This fucntion
should be used in conjunction with [receive_start2] *)
let receive_finalize2 =
Expand All @@ -1092,7 +1093,7 @@ module StorageAPI (R : RPC) = struct
in
declare "DATA.MIRROR.list" [] (dbg_p @-> returning result_p err)

(** [import_activate dbg dp sr vdi vm] returns a server socket address to
(** [import_activate dbg dp sr vdi vm] returns a server socket address to
which a fd can be passed via SCM_RIGHTS for mirroring purposes.*)
let import_activate =
declare "DATA.MIRROR.import_activate" []
Expand All @@ -1106,7 +1107,7 @@ module StorageAPI (R : RPC) = struct

(** [get_nbd_server dbg dp sr vdi vm] returns the address of a generic nbd
server that can be connected to. Depending on the backend, this will either
be a nbd server backed by tapdisk or qemu-dp. Note this is different
be a nbd server backed by tapdisk or qemu-dp. Note this is different
from [import_activate] as the returned server does not accept fds. *)
let get_nbd_server =
declare "DATA.MIRROR.get_nbd_server" []
Expand Down
2 changes: 2 additions & 0 deletions ocaml/xapi-storage-script/main.ml
Original file line number Diff line number Diff line change
Expand Up @@ -949,6 +949,8 @@ module QueryImpl (M : META) = struct
; required_cluster_stack=
response.Xapi_storage.Plugin.required_cluster_stack
; smapi_version= SMAPIv3
; supported_image_formats=
response.Xapi_storage.Plugin.supported_image_formats
}
in
wrap th
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ def query(self, dbg): # pylint: disable=unused-argument
"VDI_CREATE",
"VDI_DESTROY"],
"configuration": {},
"required_cluster_stack": []}
"required_cluster_stack": [],
"supported_image_formats": []}


if __name__ == "__main__":
Expand Down
3 changes: 3 additions & 0 deletions ocaml/xapi-storage/generator/lib/plugin.ml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ type query_result = {
(** Key/description pairs describing required device_config parameters. *)
; required_cluster_stack: string list
(** The plugin requires one of these cluster stacks to be active. *)
; supported_image_formats: string list
(** List of image formats (VHD, RAW, Qcow2, ...) supported by an
SR.type. *)
}
[@@deriving rpcty]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ def query(self, dbg):
"required_api_version": "5.0",
"features": [],
"configuration": {},
"required_cluster_stack": []}
"required_cluster_stack": [],
"supported_image_formats": []}


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ def query(self, dbg):
"VDI_RESIZE",
"THIN_PROVISIONING"],
"configuration": config,
"required_cluster_stack": []
"required_cluster_stack": [],
"supported_image_formats": []
}

if __name__ == "__main__":
Expand Down
8 changes: 8 additions & 0 deletions ocaml/xapi/sm_exec.ml
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,13 @@ let parse_sr_get_driver_info driver (xml : Xml.xml) =
)
(XMLRPC.From.array XMLRPC.From.structure (safe_assoc "configuration" info))
in
let image_formats =
match List.assoc_opt "supported_image_formats" info with
| None ->
[]
| Some lst ->
XMLRPC.From.array XMLRPC.From.string lst
in
{
sr_driver_filename= driver
; sr_driver_name= name
Expand All @@ -583,6 +590,7 @@ let parse_sr_get_driver_info driver (xml : Xml.xml) =
; sr_driver_text_features= text_features
; sr_driver_required_cluster_stack= []
; sr_smapi_version= SMAPIv1
; sr_driver_supported_image_formats= image_formats
}

let sr_get_driver_info ~dbg driver =
Expand Down
4 changes: 3 additions & 1 deletion ocaml/xapi/smint.ml
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ module Feature = struct
let of_string_int64_opt (c, v) =
List.assoc_opt c string_to_capability_table |> Option.map (fun c -> (c, v))

(** [has_capability c fl] will test weather the required capability [c] is present
(** [has_capability c fl] will test weather the required capability [c] is present
in the feature list [fl]. Callers should use this function to test if a feature
is available rather than directly using membership functions on a feature list
as this function might have special logic for some features. *)
Expand Down Expand Up @@ -193,6 +193,7 @@ type sr_driver_info = {
; sr_driver_configuration: (string * string) list
; sr_driver_required_cluster_stack: string list
; sr_smapi_version: Storage_interface.smapi_version
; sr_driver_supported_image_formats: string list
}

let query_result_of_sr_driver_info x =
Expand All @@ -208,6 +209,7 @@ let query_result_of_sr_driver_info x =
; configuration= x.sr_driver_configuration
; required_cluster_stack= x.sr_driver_required_cluster_stack
; smapi_version= x.sr_smapi_version
; supported_image_formats= x.sr_driver_supported_image_formats
}

type attach_info = {
Expand Down
1 change: 1 addition & 0 deletions ocaml/xapi/storage_mux.ml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ module Mux = struct
; configuration= []
; required_cluster_stack= []
; smapi_version= SMAPIv2
; supported_image_formats= []
}

let diagnostics () ~dbg =
Expand Down
1 change: 1 addition & 0 deletions ocaml/xapi/storage_smapiv1.ml
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ module SMAPIv1 : Server_impl = struct
; configuration= []
; required_cluster_stack= []
; smapi_version= SMAPIv1
; supported_image_formats= []
}

let diagnostics _context ~dbg:_ =
Expand Down
1 change: 1 addition & 0 deletions ocaml/xapi/xapi_services.ml
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ let get_handler (req : Http.Request.t) s _ =
; configuration= []
; required_cluster_stack= []
; smapi_version= SMAPIv2
; supported_image_formats= []
}
in
respond req (Storage_interface.(rpc_of query_result) q) s
Expand Down
Loading
Loading