On Thu, Aug 20, 2009 at 08:18:06PM +0200, Miloslav Trma?? wrote: > Changes since the third submission: > - Add "flags" parameter to virSecretDefineXML(), virSecretGetXMLDesc(), > virSecretGetValue(), virSecretSetValue(), and all derived interfaces. > - Add documentation to virsh.1 > --- > docs/virsh.pod | 43 ++++++++ > src/virsh.c | 323 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > virsh.1 | 34 ++++++- > 3 files changed, 399 insertions(+), 1 deletions(-) Functionally this patch looks fine, but having tried it out I'm wondering about the 'secret-list' command output... > +/* > + * "secret-list" command > + */ > +static const vshCmdInfo info_secret_list[] = { > + {"help", gettext_noop("list secrets")}, > + {"desc", gettext_noop("Returns a list of secrets")}, > + {NULL, NULL} > +}; > + > +static int > +cmdSecretList(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED) > +{ > + int maxuuids = 0, i; > + char **uuids = NULL; > > + if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) > + return FALSE; > > + maxuuids = virConnectNumOfSecrets(ctl->conn); > + if (maxuuids < 0) { > + vshError(ctl, FALSE, "%s", _("Failed to list secrets")); > + return FALSE; > + } > + uuids = vshMalloc(ctl, sizeof(*uuids) * maxuuids); > > + maxuuids = virConnectListSecrets(ctl->conn, uuids, maxuuids); > + if (maxuuids < 0) { > + vshError(ctl, FALSE, "%s", _("Failed to list secrets")); > + free(uuids); > + return FALSE; > + } > + > + qsort(uuids, maxuuids, sizeof(char *), namesorter); > + > + vshPrintExtra(ctl, "%s\n", _("UUID")); > + vshPrintExtra(ctl, "-----------------------------------------\n"); > + > + for (i = 0; i < maxuuids; i++) { > + vshPrint(ctl, "%-36s\n", uuids[i]); > + free(uuids[i]); > + } > + free(uuids); > + return TRUE; > +} eg, i defined 6 secrets, and now the listing shows. # ./src/virsh secret-list UUID ----------------------------------------- 1b4fde6f-0929-3bb5-c2aa-0f62ef79e52a 3174ee25-1be0-ba8f-1c99-d0b929226d7e 71d068f3-354e-1a51-241c-5bf6d5f68f8d 7c2c8591-eb89-d373-3bcf-0957b84210fc a67c94ac-7db6-b661-b04c-058c1eac2512 de96f05d-ca6a-2fa9-8c65-4e13f2a399d7 which isn't very user friendly. I think we need to try and get info about the usage of the secret included in the output, eg consider if we allowed use of the secrets API for managing per guest secrets for the VNC server too, then I could imagine a display like # ./src/virsh secret-list UUID Usage Object ---------------------------------------------------- 1b4fde6f-0929-3bb5-c2aa-0f62ef79e52a volume /var/lib/libvirt/images/demo.img 3174ee25-1be0-ba8f-1c99-d0b929226d7e volume /var/lib/libvirt/images/mail.img 71d068f3-354e-1a51-241c-5bf6d5f68f8d volume /var/lib/libvirt/images/db.img 7c2c8591-eb89-d373-3bcf-0957b84210fc vnc mailguest a67c94ac-7db6-b661-b04c-058c1eac2512 vnc dbguest de96f05d-ca6a-2fa9-8c65-4e13f2a399d7 vnc demo This might suggest that we have 1 or 2 more public APIs, const char *virSecretGetUsage(virSecretPtr sec); const char *virSecretGetObject(virSecretPtr sec); and, probably that we include those 2 attributes in the virSecretPtr struct defined in src/datatypes.h, so that calling those 2 APis does not incur further RPC calls. This would also mean that we'd have to extend struct remote_nonnull_secret { remote_nonnull_string uuid; }; to include struct remote_nonnull_secret { remote_nonnull_string uuid; remote_nonnull_string usage; remote_nonnull_string object; }; Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list