[libvirt] [PATCH 12/13] domain: parse XML for iscsi authorization credentials

Daniel P. Berrange berrange at redhat.com
Fri Mar 15 14:43:18 UTC 2013


On Mon, Feb 25, 2013 at 06:44:31PM +0100, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
> ---
>  docs/formatdomain.html.in                          | 12 ++++-----
>  docs/schemas/domaincommon.rng                      |  1 +
>  src/conf/domain_conf.c                             | 31 ++++++++++++++++------
>  .../qemuxml2argv-disk-drive-network-iscsi-auth.xml | 31 ++++++++++++++++++++++
>  tests/qemuxml2xmltest.c                            |  1 +
>  5 files changed, 62 insertions(+), 14 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-iscsi-auth.xml
> 
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index c590427..0906fe9 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -1760,12 +1760,12 @@
>          holds the actual password or other credentials (the domain XML
>          intentionally does not expose the password, only the reference
>          to the object that does manage the password).  For now, the
> -        only known secret <code>type</code> is "ceph", for Ceph RBD
> -        network sources, and requires either an
> -        attribute <code>uuid</code> with the UUID of the Ceph secret
> -        object, or an attribute <code>usage</code> with the name
> -        associated with the Ceph secret
> -        object.  <span class="since">libvirt 0.9.7</span>
> +        known secret <code>type</code>s are "ceph", for Ceph RBD
> +        network sources, and "iscsi", for CHAP authentication of iSCSI
> +        targets.  Both require either a <code>uuid</code> attribute
> +        with the UUID of the secret object, or a <code>usage</code>
> +        attribute matching the key that was specified in the
> +        secret object.  <span class="since">libvirt 0.9.7</span>
>        </dd>
>        <dt><code>geometry</code></dt>
>        <dd>The optional <code>geometry</code> element provides the
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index b8c4503..6f85e84 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -3592,6 +3592,7 @@
>        <attribute name='type'>
>          <choice>
>            <value>ceph</value>
> +          <value>iscsi</value>
>          </choice>
>        </attribute>
>        <choice>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 71da694..e4c3e67 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -3885,6 +3885,8 @@ virDomainDiskDefParseXML(virCapsPtr caps,
>      char *wwn = NULL;
>      char *vendor = NULL;
>      char *product = NULL;
> +    int expected_secret_usage = -1;
> +    int auth_secret_usage = -1;
>  
>      if (VIR_ALLOC(def) < 0) {
>          virReportOOMError();
> @@ -3922,7 +3924,6 @@ virDomainDiskDefParseXML(virCapsPtr caps,
>          if (cur->type == XML_ELEMENT_NODE) {
>              if (!source && !hosts &&
>                  xmlStrEqual(cur->name, BAD_CAST "source")) {
> -
>                  sourceNode = cur;
>  
>                  switch (def->type) {
> @@ -3958,6 +3959,9 @@ virDomainDiskDefParseXML(virCapsPtr caps,
>                                             _("invalid logical unit number"));
>                              goto error;
>                          }
> +                        expected_secret_usage = VIR_SECRET_USAGE_TYPE_ISCSI;
> +                    } else if (def->protocol == VIR_DOMAIN_DISK_PROTOCOL_RBD) {
> +                        expected_secret_usage = VIR_SECRET_USAGE_TYPE_CEPH;
>                      }
>                      if (!(source = virXMLPropString(cur, "name")) &&
>                          def->protocol != VIR_DOMAIN_DISK_PROTOCOL_NBD) {
> @@ -4144,8 +4148,9 @@ virDomainDiskDefParseXML(virCapsPtr caps,
>                                             _("missing type for secret"));
>                              goto error;
>                          }
> -                        if (virSecretUsageTypeTypeFromString(usageType) !=
> -                            VIR_SECRET_USAGE_TYPE_CEPH) {
> +                        auth_secret_usage =
> +                            virSecretUsageTypeTypeFromString(usageType);
> +                        if (auth_secret_usage < 0) {
>                              virReportError(VIR_ERR_XML_ERROR,
>                                             _("invalid secret type %s"),
>                                             usageType);
> @@ -4295,6 +4300,13 @@ virDomainDiskDefParseXML(virCapsPtr caps,
>          cur = cur->next;
>      }
>  
> +    if (auth_secret_usage != -1 && auth_secret_usage != expected_secret_usage) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,

Probably should use VIR_ERR_CONFIG_UNSUPPORTED

> +                       _("invalid secret type '%s'"),
> +                       virSecretUsageTypeTypeToString(auth_secret_usage));

And list the expected type here, as well as the incorrect type.


ACK if those small changes are made when pushing

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list