Change in vdsm[master]: ceph: Clear only ovirt secrets

nsoffer at redhat.com nsoffer at redhat.com
Thu May 21 23:39:02 UTC 2015


Nir Soffer has uploaded a new change for review.

Change subject: ceph: Clear only ovirt secrets
......................................................................

ceph: Clear only ovirt secrets

When clearing other secrets, unregister only ovirt secrets. This allow
the administrator to add other secrets to libvirt. This is not strictly
needed since we kind of own libvirt, but is more polite.

Change-Id: I8b86bd43a6d33a31ef2ee638a16f46657113316d
Signed-off-by: Nir Soffer <nsoffer at redhat.com>
---
M tests/vmSecretTests.py
M vdsm/virt/secret.py
2 files changed, 30 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/02/41302/1

diff --git a/tests/vmSecretTests.py b/tests/vmSecretTests.py
index 82f7426..a72b3ff 100644
--- a/tests/vmSecretTests.py
+++ b/tests/vmSecretTests.py
@@ -158,21 +158,22 @@
     def test_clear(self):
         self.connection.secrets = {
             "uuid1": vmfakelib.Secret(self.connection, "uuid1", "ceph",
-                                      "name1", None),
+                                      "ovirt/name1", None),
             "uuid2": vmfakelib.Secret(self.connection, "uuid2", "ceph",
                                       "name2", None),
         }
         secret.clear()
-        self.assertEqual({}, self.connection.secrets)
+        self.assertNotIn("uuid1", self.connection.secrets)
+        self.assertIn("uuid2", self.connection.secrets)
 
     def test_clear_skip_failed(self):
         def fail():
             raise vmfakelib.Error(libvirt.VIR_ERR_INTERNAL_ERROR)
         self.connection.secrets = {
             "uuid1": vmfakelib.Secret(self.connection, "uuid1", "ceph",
-                                      "name1", None),
+                                      "ovirt/name1", None),
             "uuid2": vmfakelib.Secret(self.connection, "uuid2", "ceph",
-                                      "name2", None),
+                                      "ovirt/name2", None),
         }
         self.connection.secrets["uuid1"].undefine = fail
         secret.clear()
@@ -217,16 +218,23 @@
         self.assertEqual("ovirt/domain_uuid/secret_uuid", virsec.usage_id)
 
     def test_register_clear(self):
-        # Register 2 secrets
-        sec1 = make_secret(password="sec1 password")
-        secret.register([sec1])
-        sec2 = make_secret(password="sec2 password")
-        # Rgister new secret, clearing other
-        res = secret.register([sec2], clear=True)
+        self.connection.secrets = {
+            "uuid1": vmfakelib.Secret(self.connection, "uuid1", "ceph",
+                                      "ovirt/name1", None),
+            "uuid2": vmfakelib.Secret(self.connection, "uuid2", "ceph",
+                                      "name2", None),
+        }
+        sec = make_secret()
+        res = secret.register([sec], clear=True)
+        # Should succeed
         self.assertEqual(res, response.success())
-        self.assertNotIn(sec1["uuid"], self.connection.secrets)
-        virsec2 = self.connection.secrets[sec2["uuid"]]
-        self.assertEqual("sec2 password", virsec2.value)
+        # Should remove existing ovirt secrets
+        self.assertNotIn("uuid1", self.connection.secrets)
+        # Should keep non-ovirt secrets
+        self.assertIn("uuid2", self.connection.secrets)
+        # Should register new secret
+        virsec = self.connection.secrets[sec["uuid"]]
+        self.assertEqual(sec["password"].value, virsec.value)
 
     def test_register_libvirt_error(self):
         def fail(xml):
diff --git a/vdsm/virt/secret.py b/vdsm/virt/secret.py
index 7dcad86..d84aa17 100644
--- a/vdsm/virt/secret.py
+++ b/vdsm/virt/secret.py
@@ -44,7 +44,8 @@
         if clear:
             uuids = frozenset(sec.uuid for sec in secrets)
             for virsecret in con.listAllSecrets():
-                if virsecret.UUIDString() not in uuids:
+                if (virsecret.UUIDString() not in uuids and
+                    _is_ovirt_secret(virsecret)):
                     virsecret.undefine()
     except libvirt.libvirtError as e:
         logging.error("Could not register secret %s: %s", secret, e)
@@ -82,7 +83,7 @@
 
 def clear():
     """
-    Clear all regsistered libvirt secrets.
+    Clear all regsistered ovirt secrets.
 
     Should be called during startup and shutdown to ensure that we don't leave
     around stale or unneeded secrets.
@@ -91,11 +92,16 @@
     con = libvirtconnection.get()
     for virsecret in con.listAllSecrets():
         try:
-            virsecret.undefine()
+            if _is_ovirt_secret(virsecret):
+                virsecret.undefine()
         except libvirt.libvirtError as e:
             logging.error("Could not unregister %s: %s", virsecret, e)
 
 
+def _is_ovirt_secret(virsecret):
+    return virsecret.usageID().startswith("ovirt/")
+
+
 class Secret(object):
     """
     Validate libvirt secret parameters and create secret xml string.


-- 
To view, visit https://gerrit.ovirt.org/41302
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8b86bd43a6d33a31ef2ee638a16f46657113316d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer at redhat.com>


More information about the vdsm-patches mailing list