Skip to content

Commit 8c2faa4

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 d3a7430 commit 8c2faa4

File tree

22 files changed

+47
-11
lines changed

22 files changed

+47
-11
lines changed

Diff for: ocaml/idl/datamodel.ml

+4
Original file line numberDiff line numberDiff line change
@@ -5116,6 +5116,10 @@ module SM = struct
51165116
~ty:(Set String) "required_cluster_stack"
51175117
"The storage plugin requires that one of these cluster stacks is \
51185118
configured and running."
5119+
; field ~in_oss_since:None ~qualifier:DynamicRO
5120+
~default_value:(Some (VSet [])) ~ty:(Set String)
5121+
"supported_image_formats"
5122+
"Image formats suported by the SR (VHD, RAW, Qcow2, ...)"
51195123
]
51205124
()
51215125
end

Diff for: 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 = "ad67a64cd47cdea32085518c1fb38d27"
6+
let last_known_schema_hash = "f3fe21d03306d9e8cc3d37d1bd28db2b"
77

88
let current_schema_hash : string =
99
let open Datamodel_types in

Diff for: 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 ())

Diff for: ocaml/tests/test_sm_features.ml

+1
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ module CreateSMObject = Generic.MakeStateful (struct
249249
; features
250250
; configuration= []
251251
; required_cluster_stack= []
252+
; supported_image_formats= []
252253
}
253254

254255
let extract_output __context _ =

Diff for: 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

Diff for: 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>

Diff for: ocaml/xapi-idl/storage/storage_interface.ml

+1
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

Diff for: 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

Diff for: 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__":

Diff for: 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

Diff for: 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__":

Diff for: 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__":

Diff for: ocaml/xapi/sm_exec.ml

+6
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,11 @@ 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+
| Some lst -> XMLRPC.From.array XMLRPC.From.string lst
577+
in
573578
{
574579
sr_driver_filename= driver
575580
; sr_driver_name= name
@@ -582,6 +587,7 @@ let parse_sr_get_driver_info driver (xml : Xml.xml) =
582587
; sr_driver_configuration= configuration
583588
; sr_driver_text_features= text_features
584589
; sr_driver_required_cluster_stack= []
590+
; sr_driver_supported_image_formats= image_formats
585591
}
586592

587593
let sr_get_driver_info ~dbg driver =

Diff for: ocaml/xapi/smint.ml

+2
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ type sr_driver_info = {
192192
; sr_driver_text_features: string list
193193
; sr_driver_configuration: (string * string) list
194194
; sr_driver_required_cluster_stack: string list
195+
; sr_driver_supported_image_formats: string list
195196
}
196197

197198
let query_result_of_sr_driver_info x =
@@ -206,6 +207,7 @@ let query_result_of_sr_driver_info x =
206207
; features= x.sr_driver_text_features
207208
; configuration= x.sr_driver_configuration
208209
; required_cluster_stack= x.sr_driver_required_cluster_stack
210+
; supported_image_formats= x.sr_driver_supported_image_formats
209211
}
210212

211213
type attach_info = {

Diff for: 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 =

Diff for: 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:_ =

Diff for: 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

Diff for: 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)