Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 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 @@ -5118,6 +5118,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
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
5 changes: 3 additions & 2 deletions ocaml/tests/common/test_common.ml
Original file line number Diff line number Diff line change
Expand Up @@ -351,11 +351,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: 4 additions & 1 deletion ocaml/xapi-cli-server/cli_frontend.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1611,6 +1611,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 @@ -1624,7 +1625,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
15 changes: 14 additions & 1 deletion ocaml/xapi-cli-server/cli_operations.ml
Original file line number Diff line number Diff line change
Expand Up @@ -4560,6 +4560,7 @@ let vm_migrate_sxm_params =
; "remote-network"
; "vdi"
; "vgpu"
; "image-format"
]

let vm_migrate printer rpc session_id params =
Expand Down Expand Up @@ -4707,6 +4708,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 ;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I used GTNDEBUG here because I will probably remove it so I don't want to forget a useless message of debug

(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 @@ -4869,7 +4881,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 @@ -3844,6 +3844,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