Skip to content

Adding supported image formats in sm-list (XCP-ng 8.3) #10

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

Draft
wants to merge 4 commits into
base: v25.6.0-8.3
Choose a base branch
from
Draft
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
8 changes: 8 additions & 0 deletions ocaml/idl/datamodel.ml
Original file line number Diff line number Diff line change
Expand Up @@ -5039,6 +5039,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 Expand Up @@ -5360,6 +5364,10 @@ module VDI = struct
[
(Ref _vdi, "vdi", "The VDI to migrate")
; (Ref _sr, "sr", "The destination SR")
; ( String
, "dest_img_format"
, "The image format to use on destination SR"
)
; (Map (String, String), "options", "Other parameters")
]
~result:(Ref _vdi, "The new reference of the migrated VDI.")
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
14 changes: 14 additions & 0 deletions ocaml/idl/datamodel_vm.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1714,6 +1714,13 @@ let migrate_send =
; param_release= inverness_release
; param_default= Some (VMap [])
}
; {
param_type= Map (Ref _vdi, String)
; param_name= "vdi_format_map"
; param_doc= "Map of source VDI to an image format"
; param_release= numbered_release "25.6.0-next"
; param_default= Some (VMap [])
}
]
~result:
(Ref _vm, "The reference of the newly created VM in the destination pool")
Expand Down Expand Up @@ -1781,6 +1788,13 @@ let assert_can_migrate =
; param_release= inverness_release
; param_default= Some (VMap [])
}
; {
param_type= Map (Ref _vdi, String)
; param_name= "vdi_format_map"
; param_doc= "Map of source VDI to its expected type on destination"
; param_release= numbered_release "25.6.0-next"
; param_default= Some (VMap [])
}
]
~allowed_roles:_R_VM_POWER_ADMIN
~errs:[Api_errors.license_restriction]
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 = "6f6230f87a92572b68ebd742196ffd0e"
let last_known_schema_hash = "199b240031e758ce6014b5b47457ca2c"

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 @@ -244,6 +244,7 @@ module CreateSMObject = Generic.MakeStateful (struct
; features
; configuration= []
; required_cluster_stack= []
; 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 @@ -30,6 +30,7 @@ let register_smapiv2_server (module S : Storage_interface.Server_impl) sr_ref =
; features= []
; configuration= []
; required_cluster_stack= []
; supported_image_formats= []
}
in

Expand Down
11 changes: 7 additions & 4 deletions ocaml/xapi-cli-server/cli_frontend.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1574,6 +1574,7 @@ let rec cmdtable_data : (string * cmd_spec) list =
; "compress"
; "vif:"
; "vdi:"
; "image-format:"
]
; help=
"Migrate the selected VM(s). The parameter '--live' will migrate the \
Expand All @@ -1587,7 +1588,9 @@ let rec cmdtable_data : (string * cmd_spec) list =
'copy=true' will enable the copy mode so that a stopped vm can be \
copied, instead of migrating, to the destination pool. The vif and \
vdi mapping parameters take the form 'vif:<source vif uuid>=<dest \
network uuid>' and 'vdi:<source vdi uuid>=<dest sr uuid>'. \
network uuid>' and 'vdi:<source vdi uuid>=<dest sr uuid>'. You can \
also specify the destination image format of the VDI using \
image-format:<source vdi uuid>=<destination image format>. \
Unfortunately, destination uuids cannot be tab-completed."
; implementation= No_fd Cli_operations.vm_migrate
; flags= [Standard; Vm_selectors]
Expand Down Expand Up @@ -2409,10 +2412,10 @@ let rec cmdtable_data : (string * cmd_spec) list =
; ( "vdi-pool-migrate"
, {
reqd= ["uuid"; "sr-uuid"]
; optn= []
; optn= ["dest-img-format"]
; help=
"Migrate a VDI to a specified SR, while the VDI is attached to a \
running guest."
"Migrate a VDI to a specified SR, while it is attached to a running \
guest. You can specify the image format for the destination."
; implementation= No_fd Cli_operations.vdi_pool_migrate
; flags= []
}
Expand Down
21 changes: 19 additions & 2 deletions ocaml/xapi-cli-server/cli_operations.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2060,8 +2060,12 @@ let vdi_pool_migrate printer rpc session_id params =
Client.VDI.get_by_uuid ~rpc ~session_id ~uuid:(List.assoc "uuid" params)
and sr =
Client.SR.get_by_uuid ~rpc ~session_id ~uuid:(List.assoc "sr-uuid" params)
and dest_img_format =
List.assoc_opt "dest-img-format" params |> Option.value ~default:""
and options = [] (* no options implemented yet *) in
let newvdi = Client.VDI.pool_migrate ~rpc ~session_id ~vdi ~sr ~options in
let newvdi =
Client.VDI.pool_migrate ~rpc ~session_id ~vdi ~sr ~dest_img_format ~options
in
let newuuid = Client.VDI.get_uuid ~rpc ~session_id ~self:newvdi in
printer (Cli_printer.PList [newuuid])

Expand Down Expand Up @@ -4544,6 +4548,7 @@ let vm_migrate_sxm_params =
; "remote-network"
; "vdi"
; "vgpu"
; "image-format"
]

let vm_migrate printer rpc session_id params =
Expand Down Expand Up @@ -4691,6 +4696,17 @@ let vm_migrate printer rpc session_id params =
)
(read_map_params "vdi" params)
in
let vdi_format_map =
List.map
(fun (vdi_uuid, vdi_fmt) ->
let vdi =
Client.VDI.get_by_uuid ~rpc ~session_id ~uuid:vdi_uuid
in
debug "GTNDEBUG: add image format %s,%s" vdi_uuid vdi_fmt ;
(vdi, vdi_fmt)
)
(read_map_params "image-format" params)
in
let vgpu_map =
List.map
(fun (vgpu_uuid, gpu_group_uuid) ->
Expand Down Expand Up @@ -4853,7 +4869,8 @@ let vm_migrate printer rpc session_id params =
rpc session_id
(fun vm ->
Client.VM.migrate_send ~rpc ~session_id ~vm:(vm.getref ())
~dest:token ~live:true ~vdi_map ~vif_map ~options ~vgpu_map
~dest:token ~live:true ~vdi_map ~vdi_format_map ~vif_map
~options ~vgpu_map
)
params
(["host"; "host-uuid"; "host-name"; "live"; "force"; "copy"]
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>
Loading
Loading