[PATCH] virsh: Make secret's usage can be modified if the usage isn't used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Li Yang <liyang.fnst@xxxxxxxxxxxxxx>

When a secret's usage is specified, for example:
<secret ephemeral='no' private='no'>
  <uuid>540c56d1-f4b3-5031-b76d-33e99e9b5c64</uuid>
  <usage type='volume'>
    <volume>/tmp/test</volume>
  </usage>
</secret>
If another volume '/tmp/test1' isn't used, the current
secret's usage can bo modified to '/tmp/test1'.
If '/tmp/test1' has been used for another secret,
error message will be outputed.

Signed-off-by: Li Yang <liyang.fnst@xxxxxxxxxxxxxx>
---
 src/secret/secret_driver.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c
index 4123e6e..78fd054 100644
--- a/src/secret/secret_driver.c
+++ b/src/secret/secret_driver.c
@@ -781,6 +781,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
     virSecretDriverStatePtr driver = conn->secretPrivateData;
     virSecretPtr ret = NULL;
     virSecretEntryPtr secret;
+    virSecretEntryPtr new_secret;
     virSecretDefPtr backup = NULL;
     virSecretDefPtr new_attrs;
 
@@ -804,7 +805,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
             char uuidstr[VIR_UUID_STRING_BUFLEN];
             virUUIDFormat(secret->def->uuid, uuidstr);
             virReportError(VIR_ERR_INTERNAL_ERROR,
-                           _("a secret with UUID %s already defined for use with %s"),
+                           _("a secret with UUID %s is already defined for use with %s"),
                            uuidstr, usageID);
             goto cleanup;
         }
@@ -819,12 +820,15 @@ secretDefineXML(virConnectPtr conn, const char *xml,
         const char *newUsageID = secretUsageIDForDef(new_attrs);
         const char *oldUsageID = secretUsageIDForDef(secret->def);
         if (STRNEQ(oldUsageID, newUsageID)) {
-            char uuidstr[VIR_UUID_STRING_BUFLEN];
-            virUUIDFormat(secret->def->uuid, uuidstr);
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           _("a secret with UUID %s is already defined for use with %s"),
-                           uuidstr, oldUsageID);
-            goto cleanup;
+            new_secret = secretFindByUsage(driver, new_attrs->usage_type, newUsageID);
+            if (new_secret){
+                char uuidstr[VIR_UUID_STRING_BUFLEN];
+                virUUIDFormat(new_secret->def->uuid, uuidstr);
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("a secret with UUID %s is already defined for use with %s"),
+                               uuidstr, newUsageID);
+                goto cleanup;
+            }
         }
 
         if (secret->def->private && !new_attrs->private) {
-- 
1.7.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]