]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
secret: add iscsi to possible usage types
authorPaolo Bonzini <pbonzini@redhat.com>
Thu, 21 Mar 2013 11:53:52 +0000 (12:53 +0100)
committerOsier Yang <jyang@redhat.com>
Fri, 22 Mar 2013 04:10:23 +0000 (12:10 +0800)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
docs/formatsecret.html.in
docs/schemas/secret.rng
include/libvirt/libvirt.h.in
src/conf/secret_conf.c
src/conf/secret_conf.h
src/secret/secret_driver.c

index 01aff2d0edd0dfd046503e79fe45fa87bcbf6ba0..c3c4a2597eda23735c2c36419a39e388adacc7b6 100644 (file)
       device</a>. <span class="since">Since 0.9.7</span>.
     </p>
 
+    <h3>Usage type "iscsi"</h3>
+
+    <p>
+      This secret is associated with an iSCSI target for CHAP authentication.
+      The <code>&lt;usage type='iscsi'&gt;</code> element must contain
+      a single <code>target</code> element that specifies a usage name
+      for the secret.  The iSCSI secret can then be used by UUID or by
+      this usage name via the <code>&lt;auth&gt;</code> element of
+      a <a href="domain.html#elementsDisks">disk
+      device</a>. <span class="since">Since 1.0.4</span>.
+    </p>
+
     <h2><a name="example">Example</a></h2>
 
     <pre>
index e49bd5a70ed449dbf9bfbabc8604da53cba79065..d7b8f83fdc333e78957f0f9531699be8541f03cc 100644 (file)
@@ -41,6 +41,7 @@
             <choice>
               <ref name='usagevolume'/>
               <ref name='usageceph'/>
+              <ref name='usageiscsi'/>
               <!-- More choices later -->
             </choice>
           </element>
     </element>
   </define>
 
+  <define name='usageiscsi'>
+    <attribute name='type'>
+      <value>iscsi</value>
+    </attribute>
+    <element name='target'>
+      <ref name='genericName'/>
+    </element>
+  </define>
+
 </grammar>
index f6a7affb6ae3a0c235dfd86894702c640e1ee102..45b56387a1491e973288bb003ecbc14a477f0545 100644 (file)
@@ -3649,6 +3649,7 @@ typedef enum {
     VIR_SECRET_USAGE_TYPE_NONE = 0,
     VIR_SECRET_USAGE_TYPE_VOLUME = 1,
     VIR_SECRET_USAGE_TYPE_CEPH = 2,
+    VIR_SECRET_USAGE_TYPE_ISCSI = 3,
 
 #ifdef VIR_ENUM_SENTINELS
     VIR_SECRET_USAGE_TYPE_LAST
index 891af65b82658e8463dcd6100a2ccf4c0bcfe47c..8842d9a69989963d21b83e5859e79f92e868ed46 100644 (file)
@@ -36,7 +36,7 @@
 #define VIR_FROM_THIS VIR_FROM_SECRET
 
 VIR_ENUM_IMPL(virSecretUsageType, VIR_SECRET_USAGE_TYPE_LAST,
-              "none", "volume", "ceph")
+              "none", "volume", "ceph", "iscsi")
 
 void
 virSecretDefFree(virSecretDefPtr def)
@@ -57,6 +57,10 @@ virSecretDefFree(virSecretDefPtr def)
         VIR_FREE(def->usage.ceph);
         break;
 
+    case VIR_SECRET_USAGE_TYPE_ISCSI:
+        VIR_FREE(def->usage.target);
+        break;
+
     default:
         VIR_ERROR(_("unexpected secret usage type %d"), def->usage_type);
         break;
@@ -108,6 +112,15 @@ virSecretDefParseUsage(xmlXPathContextPtr ctxt,
         }
         break;
 
+    case VIR_SECRET_USAGE_TYPE_ISCSI:
+        def->usage.target = virXPathString("string(./usage/target)", ctxt);
+        if (!def->usage.target) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("iSCSI usage specified, but target is missing"));
+            return -1;
+        }
+        break;
+
     default:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected secret usage type %d"),
@@ -262,6 +275,13 @@ virSecretDefFormatUsage(virBufferPtr buf,
         }
         break;
 
+    case VIR_SECRET_USAGE_TYPE_ISCSI:
+        if (def->usage.target != NULL) {
+            virBufferEscapeString(buf, "    <target>%s</target>\n",
+                                  def->usage.target);
+        }
+        break;
+
     default:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("unexpected secret usage type %d"),
index 6079d5b6ab784340b0bb12fa611fab926c478ade..53517f99fc92e8e6a9c34e3c7937aee5a0f34b9b 100644 (file)
@@ -39,6 +39,7 @@ struct _virSecretDef {
     union {
         char *volume;               /* May be NULL */
         char *ceph;
+        char *target;
     } usage;
 };
 
index 5be33b9cb14cf93035866a89fc073474def76a63..c577817c50fd1f32fe7e602e88c8f15ced6eb334 100644 (file)
@@ -149,6 +149,11 @@ secretFindByUsage(virSecretDriverStatePtr driver, int usageType, const char *usa
             if (STREQ(s->def->usage.ceph, usageID))
                 return s;
             break;
+
+        case VIR_SECRET_USAGE_TYPE_ISCSI:
+            if (STREQ(s->def->usage.target, usageID))
+                return s;
+            break;
         }
     }
     return NULL;
@@ -614,6 +619,9 @@ secretUsageIDForDef(virSecretDefPtr def)
     case VIR_SECRET_USAGE_TYPE_CEPH:
         return def->usage.ceph;
 
+    case VIR_SECRET_USAGE_TYPE_ISCSI:
+        return def->usage.target;
+
     default:
         return NULL;
     }