[Kimchi-devel] [PATCH] issue #312: Check volume group exists while creating a logical pool

Aline Manera alinefm at linux.vnet.ibm.com
Wed Mar 5 21:04:13 UTC 2014


From: Aline Manera <alinefm at br.ibm.com>

When creating a logical storage pool, a volume group is created with the same
name.
And when deleting the storage pool the volume group keeps on the system. Which
is the correct behavior as the storage pool is only a concept and deleting it
should not affect the file system.
To avoid problems while creating a pool with an existent volume group name,
verify if a volume group exists with the given pool name and if so, warn the
user about it.

Also convert an error message parameter to string instead of virStoragePool
instance and update the po files as new messages were added.

Signed-off-by: Aline Manera <alinefm at br.ibm.com>
Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
---
 po/en_US.po                      |   12 +++++++++++-
 po/kimchi.pot                    |   12 +++++++++++-
 po/pt_BR.po                      |   12 +++++++++++-
 po/zh_CN.po                      |   12 +++++++++++-
 src/kimchi/i18n.py               |    2 +-
 src/kimchi/model/storagepools.py |   19 ++++++++++++++++++-
 6 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/po/en_US.po b/po/en_US.po
index d9df56d..23881da 100644
--- a/po/en_US.po
+++ b/po/en_US.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: kimchi 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-03 17:18-0300\n"
+"POT-Creation-Date: 2014-03-05 17:45-0300\n"
 "PO-Revision-Date: 2013-07-11 17:32-0400\n"
 "Last-Translator: Crístian Viana <vianac at linux.vnet.ibm.com>\n"
 "Language-Team: English\n"
@@ -985,6 +985,12 @@ msgid "Unable to delete pool %(name)s as it is associated with some templates"
 msgstr ""
 
 #, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+
+#, python-format
 msgid "Storage volume %(name)s already exists"
 msgstr ""
 
@@ -1037,6 +1043,10 @@ msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
 msgstr ""
 
 #, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+
+#, python-format
 msgid "Interface %(name)s does not exist"
 msgstr ""
 
diff --git a/po/kimchi.pot b/po/kimchi.pot
index df89712..06236d2 100755
--- a/po/kimchi.pot
+++ b/po/kimchi.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-03 17:18-0300\n"
+"POT-Creation-Date: 2014-03-05 17:45-0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -972,6 +972,12 @@ msgid "Unable to delete pool %(name)s as it is associated with some templates"
 msgstr ""
 
 #, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+
+#, python-format
 msgid "Storage volume %(name)s already exists"
 msgstr ""
 
@@ -1024,6 +1030,10 @@ msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
 msgstr ""
 
 #, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+
+#, python-format
 msgid "Interface %(name)s does not exist"
 msgstr ""
 
diff --git a/po/pt_BR.po b/po/pt_BR.po
index f00edd8..06db056 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -20,7 +20,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: kimchi 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-03 17:18-0300\n"
+"POT-Creation-Date: 2014-03-05 17:45-0300\n"
 "PO-Revision-Date: 2013-06-27 10:48+0000\n"
 "Last-Translator: Crístian Viana <vianac at linux.vnet.ibm.com>\n"
 "Language-Team: Aline Manera <alinefm at br.ibm.com>\n"
@@ -1000,6 +1000,12 @@ msgid "Unable to delete pool %(name)s as it is associated with some templates"
 msgstr ""
 
 #, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+
+#, python-format
 msgid "Storage volume %(name)s already exists"
 msgstr ""
 
@@ -1052,6 +1058,10 @@ msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
 msgstr ""
 
 #, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+
+#, python-format
 msgid "Interface %(name)s does not exist"
 msgstr ""
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 366c6bf..38a3c6c 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -20,7 +20,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: kimchi 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-03 17:18-0300\n"
+"POT-Creation-Date: 2014-03-05 17:45-0300\n"
 "PO-Revision-Date: 2013-06-27 10:48+0000\n"
 "Last-Translator: ShaoHe Feng <shaohef at linux.vnet.ibm.com>\n"
 "Language-Team: ShaoHe Feng <shaohef at linux.vnet.ibm.com>\n"
@@ -990,6 +990,12 @@ msgid "Unable to delete pool %(name)s as it is associated with some templates"
 msgstr ""
 
 #, python-format
+msgid ""
+"A volume group named '%(name)s' already exists. Please, choose another name "
+"to create the logical pool."
+msgstr ""
+
+#, python-format
 msgid "Storage volume %(name)s already exists"
 msgstr ""
 
@@ -1042,6 +1048,10 @@ msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
 msgstr ""
 
 #, python-format
+msgid "Storage type %(type)s does not support volume create and delete"
+msgstr ""
+
+#, python-format
 msgid "Interface %(name)s does not exist"
 msgstr ""
 
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 36785e6..cbfcf5d 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -138,7 +138,7 @@ messages = {
     "KCHPOOL0033E": _("Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is unreachable."),
     "KCHPOOL0034E": _("Unable to deactivate pool %(name)s as it is associated with some templates"),
     "KCHPOOL0035E": _("Unable to delete pool %(name)s as it is associated with some templates"),
-
+    "KCHPOOL0036E": _("A volume group named '%(name)s' already exists. Please, choose another name to create the logical pool."),
 
     "KCHVOL0001E": _("Storage volume %(name)s already exists"),
     "KCHVOL0002E": _("Storage volume %(name)s does not exist in storage pool %(pool)s"),
diff --git a/src/kimchi/model/storagepools.py b/src/kimchi/model/storagepools.py
index 8edf62e..3ae62cf 100644
--- a/src/kimchi/model/storagepools.py
+++ b/src/kimchi/model/storagepools.py
@@ -71,6 +71,22 @@ class StoragePoolsModel(object):
             if name == ISO_POOL_NAME:
                 raise InvalidOperation("KCHPOOL0031E")
 
+            # The user may want to create a logical pool with the same name
+            # used before but a volume group will already exist with this name
+            # So check the volume group does not exist to create the pool
+            if params['type'] == 'logical':
+                vgdisplay_cmd = ['vgdisplay', name]
+                output, error, returncode = run_command(vgdisplay_cmd)
+                # From vgdisplay error codes:
+                # 1  error reading VGDA
+                # 2  volume group doesn't exist
+                # 3  not all physical volumes of volume group online
+                # 4  volume group not found
+                # 5  no volume groups found at all
+                # 6  error reading VGDA from lvmtab
+                if returncode not in [2, 4, 5]:
+                    raise InvalidOperation("KCHPOOL0036E", {'name': name})
+
             if params['type'] == 'kimchi-iso':
                 task_id = self._do_deep_scan(params)
 
@@ -172,7 +188,8 @@ class StoragePoolModel(object):
                 return 0
         except libvirt.libvirtError as e:
             raise OperationFailed("KCHPOOL0008E",
-                                  {'name': pool, 'err': e.get_error_message()})
+                                  {'name': pool.name(),
+                                   'err': e.get_error_message()})
 
     def _get_storage_source(self, pool_type, pool_xml):
         source = {}
-- 
1.7.10.4




More information about the Kimchi-devel mailing list