@@ -367,6 +367,8 @@ let _is_a_snapshot_key = "is_a_snapshot"
367367
368368let _snapshot_of_key = " snapshot_of"
369369
370+ let _vdi_tags_key = " tags"
371+
370372module Script = struct
371373 (* * We cache (lowercase script name -> original script name) mapping for the
372374 scripts in the root directory of every registered plugin. *)
@@ -740,6 +742,19 @@ let vdi_of_volume x =
740742 v |> of_string
741743 in
742744 let find_string = find ~of_string: Fun. id in
745+ let extract_prefixed_list prefix =
746+ List. filter_map
747+ (fun (k , _ ) ->
748+ if String. starts_with ~prefix k then
749+ Some
750+ (String. sub k (String. length prefix)
751+ (String. length k - String. length prefix)
752+ )
753+ else
754+ None
755+ )
756+ x.Xapi_storage.Control. keys
757+ in
743758 let open Storage_interface in
744759 {
745760 vdi= Vdi. of_string x.Xapi_storage.Control. key
@@ -777,7 +792,7 @@ let vdi_of_volume x =
777792 x.Xapi_storage.Control. keys
778793 ; sharable= x.Xapi_storage.Control. sharable
779794 ; persistent= true
780- ; tags= []
795+ ; tags= extract_prefixed_list _vdi_tags_key
781796 }
782797
783798let choose_datapath ?(persistent = true ) response =
@@ -1742,6 +1757,22 @@ module VDIImpl (M : META) = struct
17421757 let * () = unset ~dbg ~sr ~vdi ~key: (_sm_config_prefix_key ^ key) in
17431758 return ()
17441759
1760+ let vdi_add_tags_impl dbg sr vdi key =
1761+ wrap
1762+ @@
1763+ let * sr = Attached_SRs. find sr in
1764+ let vdi = Storage_interface.Vdi. string_of vdi in
1765+ let * () = set ~dbg ~sr ~vdi ~key: (_vdi_tags_key ^ key) ~value: key in
1766+ return ()
1767+
1768+ let vdi_remove_tags_impl dbg sr vdi key =
1769+ wrap
1770+ @@
1771+ let * sr = Attached_SRs. find sr in
1772+ let vdi = Storage_interface.Vdi. string_of vdi in
1773+ let * () = unset ~dbg ~sr ~vdi ~key: (_vdi_tags_key ^ key) in
1774+ return ()
1775+
17451776 let similar_content_impl _dbg _sr _vdi = wrap @@ return []
17461777end
17471778
@@ -1946,6 +1977,8 @@ let bind ~volume_script_dir =
19461977 S.VDI. set_content_id VDI. vdi_set_content_id_impl ;
19471978 S.VDI. add_to_sm_config VDI. vdi_add_to_sm_config_impl ;
19481979 S.VDI. remove_from_sm_config VDI. vdi_remove_from_sm_config_impl ;
1980+ S.VDI. add_tags VDI. vdi_add_tags_impl ;
1981+ S.VDI. remove_tags VDI. vdi_remove_tags_impl ;
19491982 S.VDI. similar_content VDI. similar_content_impl ;
19501983
19511984 let module DP = DPImpl (RuntimeMeta ) in
0 commit comments