Expose Secret API
[ocaml-libvirt.git] / examples / list_secrets.ml
diff --git a/examples/list_secrets.ml b/examples/list_secrets.ml
new file mode 100644 (file)
index 0000000..d59175b
--- /dev/null
@@ -0,0 +1,48 @@
+(* Simple demo program showing how to list out secrets.
+   Usage: list_secrets [URI]
+   (C) Copyright 2018 Pino Toscano, Red Hat Inc.
+   http://libvirt.org/
+ *)
+
+open Printf
+
+module C = Libvirt.Connect
+module S = Libvirt.Secret
+
+let string_of_secret_usage_type = function
+  | S.NoType -> "none"
+  | S.Volume -> "volume"
+  | S.Ceph -> "ceph"
+  | S.ISCSI -> "iscsi"
+  | S.TLS -> "tls"
+
+let () =
+  try
+    let name =
+      if Array.length Sys.argv >= 2 then
+       Some (Sys.argv.(1))
+      else
+       None in
+    let conn = C.connect_auth_readonly ?name (C.get_auth_default ()) in
+
+    (* List all the secrets. *)
+    let secrets = C.list_secrets conn (C.num_of_secrets conn) in
+    let secrets = Array.to_list secrets in
+    let secrets = List.map (S.lookup_by_uuid_string conn) secrets in
+    List.iter (
+      fun secret ->
+       let uuid = S.get_uuid_string secret in
+       let usageType = string_of_secret_usage_type (S.get_usage_type secret) in
+       let usageId = S.get_usage_id secret in
+       printf "%*s  %-7s  %s\n%!"
+         (Libvirt.uuid_string_length) uuid usageType usageId
+    ) secrets
+  with
+    Libvirt.Virterror err ->
+      eprintf "error: %s\n" (Libvirt.Virterror.to_string err)
+
+let () =
+  (* Run the garbage collector which is a good way to check for
+   * memory corruption errors and reference counting issues in libvirt.
+   *)
+  Gc.compact ()