On 03/06/2014 04:33 AM, Royce Lv wrote:
Reviewed-by: Royce Lv<lvroyce(a)linux.vnet.ibm.com>
When I go through the patch, I notice we don't support a scenario:
Instead of constructing some PV to VG, import an existent VG and
make it a storage pool,
this is a common scenario when we want to move a LVM from one host to
another.
libvirt steps:
http://ailoo.net/2011/02/use-a-lvm-volume-group-with-libvirt/
Yes, Royce!
I've already noticed it.
I added it to the backlog so we can address it for next release.
Thanks
On 2014年03月06日 05:04, Aline Manera wrote:
> From: Aline Manera <alinefm(a)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(a)br.ibm.com>
> Signed-off-by: Royce Lv <lvroyce(a)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(a)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@ADDRESS>\n"
> "Language-Team: LANGUAGE <LL(a)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(a)linux.vnet.ibm.com>\n"
> "Language-Team: Aline Manera <alinefm(a)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(a)linux.vnet.ibm.com>\n"
> "Language-Team: ShaoHe Feng <shaohef(a)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 = {}