On Mon, Feb 25, 2013 at 06:44:31PM +0100, Paolo Bonzini wrote:
Signed-off-by: Paolo Bonzini <pbonzini(a)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 :|