Skip to content

Commit 70d5ce2

Browse files
committed
Adding supported image formats in sm-list
When running `xe sm-list params=all` you will now have the info of supported image formats if the SM plugin specified it in its DRIVER_INFO. The field is called `supported-image-formats`. If the plugin doesn't provide the info the field will be empty. Signed-off-by: Guillaume <[email protected]>
1 parent aa2aa6e commit 70d5ce2

File tree

23 files changed

+53
-15
lines changed

23 files changed

+53
-15
lines changed

ocaml/idl/datamodel.ml

+4
Original file line numberDiff line numberDiff line change
@@ -5039,6 +5039,10 @@ module SM = struct
50395039
~ty:(Set String) "required_cluster_stack"
50405040
"The storage plugin requires that one of these cluster stacks is \
50415041
configured and running."
5042+
; field ~in_oss_since:None ~qualifier:DynamicRO ~lifecycle:[]
5043+
~default_value:(Some (VSet [])) ~ty:(Set String)
5044+
"supported_image_formats"
5045+
"Image formats suported by the SR (VHD, RAW, Qcow2, ...)"
50425046
]
50435047
()
50445048
end

ocaml/idl/datamodel_common.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ open Datamodel_roles
1010
to leave a gap for potential hotfixes needing to increment the schema version.*)
1111
let schema_major_vsn = 5
1212

13-
let schema_minor_vsn = 786
13+
let schema_minor_vsn = 787
1414

1515
(* Historical schema versions just in case this is useful later *)
1616
let rio_schema_major_vsn = 5

ocaml/idl/schematest.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ let hash x = Digest.string x |> Digest.to_hex
33
(* BEWARE: if this changes, check that schema has been bumped accordingly in
44
ocaml/idl/datamodel_common.ml, usually schema_minor_vsn *)
55

6-
let last_known_schema_hash = "6f6230f87a92572b68ebd742196ffd0e"
6+
let last_known_schema_hash = "199b240031e758ce6014b5b47457ca2c"
77

88
let current_schema_hash : string =
99
let open Datamodel_types in

ocaml/tests/common/test_common.ml

+3-2
Original file line numberDiff line numberDiff line change
@@ -345,11 +345,12 @@ let make_sm ~__context ?(ref = Ref.make ()) ?(uuid = make_uuid ())
345345
?(copyright = "") ?(version = "") ?(required_api_version = "")
346346
?(capabilities = []) ?(features = default_sm_features)
347347
?(host_pending_features = []) ?(configuration = []) ?(other_config = [])
348-
?(driver_filename = "/dev/null") ?(required_cluster_stack = []) () =
348+
?(driver_filename = "/dev/null") ?(required_cluster_stack = [])
349+
?(supported_image_formats = []) () =
349350
Db.SM.create ~__context ~ref ~uuid ~_type ~name_label ~name_description
350351
~vendor ~copyright ~version ~required_api_version ~capabilities ~features
351352
~host_pending_features ~configuration ~other_config ~driver_filename
352-
~required_cluster_stack ;
353+
~required_cluster_stack ~supported_image_formats ;
353354
ref
354355

355356
let make_sr ~__context ?(ref = Ref.make ()) ?(uuid = make_uuid ())

ocaml/tests/test_sm_features.ml

+1
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ module CreateSMObject = Generic.MakeStateful (struct
244244
; features
245245
; configuration= []
246246
; required_cluster_stack= []
247+
; supported_image_formats= []
247248
}
248249

249250
let extract_output __context _ =

ocaml/tests/test_vdi_cbt.ml

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ let register_smapiv2_server (module S : Storage_interface.Server_impl) sr_ref =
3030
; features= []
3131
; configuration= []
3232
; required_cluster_stack= []
33+
; supported_image_formats= []
3334
}
3435
in
3536

ocaml/xapi-cli-server/records.ml

+5
Original file line numberDiff line numberDiff line change
@@ -3734,6 +3734,11 @@ let sm_record rpc session_id sm =
37343734
; make_field ~name:"required-cluster-stack"
37353735
~get:(fun () -> concat_with_comma (x ()).API.sM_required_cluster_stack)
37363736
()
3737+
; make_field ~name:"supported-image-formats"
3738+
~get:(fun () ->
3739+
concat_with_comma (x ()).API.sM_supported_image_formats
3740+
)
3741+
()
37373742
]
37383743
}
37393744

Original file line numberDiff line numberDiff line change
@@ -1 +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>
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>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 numberDiff line numberDiff line change
@@ -1 +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>
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>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 numberDiff line numberDiff line change
@@ -1 +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>
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>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 numberDiff line numberDiff line change
@@ -1 +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>
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>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>

ocaml/xapi-idl/storage/storage_interface.ml

+4-3
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ type query_result = {
415415
; features: string list
416416
; configuration: (string * string) list
417417
; required_cluster_stack: string list
418+
; supported_image_formats: string list
418419
}
419420
[@@deriving rpcty]
420421

@@ -625,9 +626,9 @@ module StorageAPI (R : RPC) = struct
625626
declare "SR.destroy" [] (dbg_p @-> sr_p @-> returning unit_p err)
626627

627628
(** [scan task sr] returns a list of VDIs contained within an attached SR.
628-
@deprecated This function is deprecated, and is only here to keep backward
629-
compatibility with old xapis that call Remote.SR.scan during SXM.
630-
Use the scan2 function instead.
629+
@deprecated This function is deprecated, and is only here to keep backward
630+
compatibility with old xapis that call Remote.SR.scan during SXM.
631+
Use the scan2 function instead.
631632
*)
632633
let scan =
633634
let open TypeCombinators in

ocaml/xapi-storage-script/main.ml

+2
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,8 @@ module QueryImpl (M : META) = struct
948948
; configuration= response.Xapi_storage.Plugin.configuration
949949
; required_cluster_stack=
950950
response.Xapi_storage.Plugin.required_cluster_stack
951+
; supported_image_formats=
952+
response.Xapi_storage.Plugin.supported_image_formats
951953
}
952954
in
953955
wrap th

ocaml/xapi-storage-script/test/volume/org.xen.xapi.storage.dummyv5/plugin.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def query(self, dbg): # pylint: disable=unused-argument
3131
"VDI_CREATE",
3232
"VDI_DESTROY"],
3333
"configuration": {},
34-
"required_cluster_stack": []}
34+
"required_cluster_stack": [],
35+
"supported_image_formats": []}
3536

3637

3738
if __name__ == "__main__":

ocaml/xapi-storage/generator/lib/plugin.ml

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ type query_result = {
1818
(** Key/description pairs describing required device_config parameters. *)
1919
; required_cluster_stack: string list
2020
(** The plugin requires one of these cluster stacks to be active. *)
21+
; supported_image_formats: string list
22+
(** List of image formats (VHD, RAW, Qcow2, ...) supported by an
23+
SR.type. *)
2124
}
2225
[@@deriving rpcty]
2326

ocaml/xapi-storage/python/examples/datapath/loop+blkback/plugin.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ def query(self, dbg):
3737
"required_api_version": "5.0",
3838
"features": [],
3939
"configuration": {},
40-
"required_cluster_stack": []}
40+
"required_cluster_stack": [],
41+
"supported_image_formats": []}
4142

4243

4344
if __name__ == "__main__":

ocaml/xapi-storage/python/examples/volume/org.xen.xapi.storage.simple-file/plugin.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ def query(self, dbg):
5454
"VDI_RESIZE",
5555
"THIN_PROVISIONING"],
5656
"configuration": config,
57-
"required_cluster_stack": []
57+
"required_cluster_stack": [],
58+
"supported_image_formats": []
5859
}
5960

6061
if __name__ == "__main__":

ocaml/xapi/sm_exec.ml

+8
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,13 @@ let parse_sr_get_driver_info driver (xml : Xml.xml) =
570570
)
571571
(XMLRPC.From.array XMLRPC.From.structure (safe_assoc "configuration" info))
572572
in
573+
let image_formats =
574+
match List.assoc_opt "supported_image_formats" info with
575+
| None ->
576+
[]
577+
| Some lst ->
578+
XMLRPC.From.array XMLRPC.From.string lst
579+
in
573580
{
574581
sr_driver_filename= driver
575582
; sr_driver_name= name
@@ -582,6 +589,7 @@ let parse_sr_get_driver_info driver (xml : Xml.xml) =
582589
; sr_driver_configuration= configuration
583590
; sr_driver_text_features= text_features
584591
; sr_driver_required_cluster_stack= []
592+
; sr_driver_supported_image_formats= image_formats
585593
}
586594

587595
let sr_get_driver_info ~dbg driver =

ocaml/xapi/smint.ml

+2
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ type sr_driver_info = {
190190
; sr_driver_text_features: string list
191191
; sr_driver_configuration: (string * string) list
192192
; sr_driver_required_cluster_stack: string list
193+
; sr_driver_supported_image_formats: string list
193194
}
194195

195196
let query_result_of_sr_driver_info x =
@@ -204,6 +205,7 @@ let query_result_of_sr_driver_info x =
204205
; features= x.sr_driver_text_features
205206
; configuration= x.sr_driver_configuration
206207
; required_cluster_stack= x.sr_driver_required_cluster_stack
208+
; supported_image_formats= x.sr_driver_supported_image_formats
207209
}
208210

209211
type attach_info = {

ocaml/xapi/storage_mux.ml

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ module Mux = struct
169169
; features= []
170170
; configuration= []
171171
; required_cluster_stack= []
172+
; supported_image_formats= []
172173
}
173174

174175
let diagnostics () ~dbg =

ocaml/xapi/storage_smapiv1.ml

+1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ module SMAPIv1 : Server_impl = struct
172172
; features= []
173173
; configuration= []
174174
; required_cluster_stack= []
175+
; supported_image_formats= []
175176
}
176177

177178
let diagnostics _context ~dbg:_ =

ocaml/xapi/xapi_services.ml

+1
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ let get_handler (req : Http.Request.t) s _ =
254254
; features= List.map (fun x -> path [_services; x]) [_SM]
255255
; configuration= []
256256
; required_cluster_stack= []
257+
; supported_image_formats= []
257258
}
258259
in
259260
respond req (Storage_interface.(rpc_of query_result) q) s

ocaml/xapi/xapi_sm.ml

+5-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ let create_from_query_result ~__context q =
4949
~host_pending_features:[] ~configuration:q.configuration ~other_config:[]
5050
~driver_filename:(Sm_exec.cmd_name q.driver)
5151
~required_cluster_stack:q.required_cluster_stack
52+
~supported_image_formats:q.supported_image_formats
5253
)
5354

5455
let find_pending_features existing_features features =
@@ -143,7 +144,10 @@ let update_from_query_result ~__context (self, r) q_result =
143144
if r.API.sM_configuration <> q_result.configuration then
144145
Db.SM.set_configuration ~__context ~self ~value:q_result.configuration ;
145146
if r.API.sM_driver_filename <> driver_filename then
146-
Db.SM.set_driver_filename ~__context ~self ~value:driver_filename
147+
Db.SM.set_driver_filename ~__context ~self ~value:driver_filename ;
148+
if r.API.sM_supported_image_formats <> q_result.supported_image_formats then
149+
Db.SM.set_supported_image_formats ~__context ~self
150+
~value:q_result.supported_image_formats
147151
)
148152

149153
let is_v1 x = version_of_string x < [2; 0]

0 commit comments

Comments
 (0)