[Kimchi-devel] [PATCH] issue #242: Do not allow user deactivate/delete storage pool used by a template

Aline Manera alinefm at linux.vnet.ibm.com
Fri Feb 28 15:20:52 UTC 2014


On 02/28/2014 06:57 AM, Sheldon wrote:
> On 02/28/2014 03:30 PM, Royce Lv wrote:
>> On 2014年02月26日 02:43, Aline Manera wrote:
>>> From: Aline Manera <alinefm at br.ibm.com>
>>>
>>> Make a integrity verification when user try to deactivate or delete 
>>> a pool.
>>> If pool is used by a template it should not be deactivated or 
>>> deleted to
>>> avoid problems while using the template.
>>> Also update the po files as new messages are added to alert the user.
>>>
>>> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
>>> ---
>>>   po/en_US.po                      |   66 
>>> +++++++++++++++++++++++++++-----------
>>>   po/kimchi.pot                    |   57 
>>> ++++++++++++++++++++++++--------
>>>   po/pt_BR.po                      |   66 
>>> +++++++++++++++++++++++++++-----------
>>>   po/zh_CN.po                      |   65 
>>> ++++++++++++++++++++++++++-----------
>>>   src/kimchi/i18n.py               |    2 ++
>>>   src/kimchi/model/storagepools.py |   21 ++++++++++--
>>>   tests/test_model.py              |    5 +++
>>>   7 files changed, 210 insertions(+), 72 deletions(-)
>>>
>>> diff --git a/po/en_US.po b/po/en_US.po
>>> index ca1fe86..aeff16e 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-02-20 15:26-0300\n"
>>> +"POT-Creation-Date: 2014-02-25 15:23-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"
>>> @@ -85,18 +85,21 @@ msgstr "Cancel"
>>>   msgid "Save"
>>>   msgstr "Save"
>>>   -msgid "Reset"
>>> -msgstr "Reset"
>>> -
>>>   msgid "Start"
>>>   msgstr "Start"
>>>   +msgid "Reset"
>>> +msgstr "Reset"
>>> +
>>>   msgid "Stop"
>>>   msgstr "Stop"
>>>     msgid "Actions"
>>>   msgstr "Actions"
>>>   +msgid "Console"
>>> +msgstr ""
>>> +
>>>   msgid "Edit"
>>>   msgstr "Edit"
>>>   @@ -237,6 +240,9 @@ msgstr "Remove"
>>>   msgid "Download"
>>>   msgstr "Download"
>>>   +msgid "Report name should contain only letters, digits and/or 
>>> hyphen ('-')."
>>> +msgstr ""
>>> +
>>>   msgid ""
>>>   "This will delete the virtual machine and its virtual disks. This 
>>> operation "
>>>   "cannot be undone. Would you like to continue?"
>>> @@ -299,12 +305,12 @@ msgstr "Server name can not be blank."
>>>   msgid "This is not a valid Server Name or IP. please, modify it."
>>>   msgstr "This is not a valid Server Name or IP. please, modify it."
>>>   -msgid "Log out"
>>> -msgstr "Log out"
>>> -
>>>   msgid "Help"
>>>   msgstr ""
>>>   +msgid "Log out"
>>> +msgstr "Log out"
>>> +
>>>   msgid "Log In"
>>>   msgstr "Log In"
>>>   @@ -322,12 +328,8 @@ msgstr "Report Name"
>>>     msgid ""
>>>   "The name used to identify the report. If omitted, a name will be 
>>> chosen "
>>> -"based on current time. Name can contain: letters, digits, \"-\", 
>>> \"_\", or "
>>> -"\".\"."
>>> +"based on current time. Name can contain: letters, digits and 
>>> hyphen (\"-\")."
>>>   msgstr ""
>>> -"The name used to identify the report. If omitted, a name will be 
>>> chosen "
>>> -"based on current time. Name can contain: letters, digits, \"-\", 
>>> \"_\", or "
>>> -"\".\"."
>>>     msgid "Define a New Storage Pool"
>>>   msgstr "Define a New Storage Pool"
>>> @@ -400,12 +402,12 @@ msgstr "iSCSI Authentication"
>>>   msgid "CPU"
>>>   msgstr "CPU"
>>>   -msgid "Network I/O"
>>> -msgstr "Network I/O"
>>> -
>>>   msgid "Disk I/O"
>>>   msgstr "Disk I/O"
>>>   +msgid "Network I/O"
>>> +msgstr "Network I/O"
>>> +
>>>   msgid "Livetile"
>>>   msgstr "Livetile"
>>>   @@ -741,6 +743,10 @@ msgid ""
>>>   msgstr ""
>>>     #, python-format
>>> +msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>>   msgid "Interface %(iface)s does not exist in virtual machine 
>>> %(name)s"
>>>   msgstr ""
>>>   @@ -936,6 +942,18 @@ msgstr ""
>>>   msgid "The SCSI host adapter name must be a string."
>>>   msgstr ""
>>>   +msgid "The storage pool kimchi_isos is reserved for internal use"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid ""
>>> +"Unable to deactivate pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid "Unable to delete pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage volume %(name)s already exists"
>>>   msgstr ""
>>> @@ -1081,6 +1099,13 @@ msgstr ""
>>>   msgid "Unable to generate debug report %(name)s. Details: %(err)s"
>>>   msgstr ""
>>>   +msgid "You should give a name for the debug file report."
>>> +msgstr ""
>>> +
>>> +msgid ""
>>> +"Name should be a string. Only letters, digits and hyphen ('-') are 
>>> allowed."
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage server %(server)s was not used by Kimchi"
>>>   msgstr ""
>>> @@ -1139,16 +1164,13 @@ msgid "Invalid storage type. Types 
>>> supported: 'cdrom'"
>>>   msgstr ""
>>>     #, python-format
>>> -msgid "The path %(value)s is not valid local/remote path for the 
>>> device"
>>> +msgid "The path '%(value)s' is not valid local/remote path for the 
>>> device"
>>>   msgstr ""
>>>     #, python-format
>>>   msgid "Device name %(dev_name)s already exists in vm %(vm_name)s"
>>>   msgstr ""
>>>   -msgid "Must specify a device name"
>>> -msgstr ""
>>> -
>>>   msgid "Can't specify a directory for a CDROM device path"
>>>   msgstr ""
>>>   @@ -1171,6 +1193,12 @@ msgstr ""
>>>   msgid "Do not support guest CDROM hot plug attachment"
>>>   msgstr ""
>>>   +msgid "Specify type and path to add a new virtual machine disk"
>>> +msgstr ""
>>> +
>>> +msgid "Specify path to update virtual machine disk"
>>> +msgstr ""
>>> +
>>>   msgid "Repository ID must be one word only string."
>>>   msgstr ""
>>>   diff --git a/po/kimchi.pot b/po/kimchi.pot
>>> index a906ad9..abb7219 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-02-20 15:26-0300\n"
>>> +"POT-Creation-Date: 2014-02-25 15:23-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"
>>> @@ -85,10 +85,10 @@ msgstr ""
>>>   msgid "Save"
>>>   msgstr ""
>>>   -msgid "Reset"
>>> +msgid "Start"
>>>   msgstr ""
>>>   -msgid "Start"
>>> +msgid "Reset"
>>>   msgstr ""
>>>     msgid "Stop"
>>> @@ -97,6 +97,9 @@ msgstr ""
>>>   msgid "Actions"
>>>   msgstr ""
>>>   +msgid "Console"
>>> +msgstr ""
>>> +
>>>   msgid "Edit"
>>>   msgstr ""
>>>   @@ -233,6 +236,9 @@ msgstr ""
>>>   msgid "Download"
>>>   msgstr ""
>>>   +msgid "Report name should contain only letters, digits and/or 
>>> hyphen ('-')."
>>> +msgstr ""
>>> +
>>>   msgid ""
>>>   "This will delete the virtual machine and its virtual disks. This 
>>> operation "
>>>   "cannot be undone. Would you like to continue?"
>>> @@ -291,10 +297,10 @@ msgstr ""
>>>   msgid "This is not a valid Server Name or IP. please, modify it."
>>>   msgstr ""
>>>   -msgid "Log out"
>>> +msgid "Help"
>>>   msgstr ""
>>>   -msgid "Help"
>>> +msgid "Log out"
>>>   msgstr ""
>>>     msgid "Log In"
>>> @@ -314,8 +320,7 @@ msgstr ""
>>>     msgid ""
>>>   "The name used to identify the report. If omitted, a name will be 
>>> chosen "
>>> -"based on current time. Name can contain: letters, digits, \"-\", 
>>> \"_\", or "
>>> -"\".\"."
>>> +"based on current time. Name can contain: letters, digits and 
>>> hyphen (\"-\")."
>>>   msgstr ""
>>>     msgid "Define a New Storage Pool"
>>> @@ -385,10 +390,10 @@ msgstr ""
>>>   msgid "CPU"
>>>   msgstr ""
>>>   -msgid "Network I/O"
>>> +msgid "Disk I/O"
>>>   msgstr ""
>>>   -msgid "Disk I/O"
>>> +msgid "Network I/O"
>>>   msgstr ""
>>>     msgid "Livetile"
>>> @@ -726,6 +731,10 @@ msgid ""
>>>   msgstr ""
>>>     #, python-format
>>> +msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>>   msgid "Interface %(iface)s does not exist in virtual machine 
>>> %(name)s"
>>>   msgstr ""
>>>   @@ -921,6 +930,18 @@ msgstr ""
>>>   msgid "The SCSI host adapter name must be a string."
>>>   msgstr ""
>>>   +msgid "The storage pool kimchi_isos is reserved for internal use"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid ""
>>> +"Unable to deactivate pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid "Unable to delete pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage volume %(name)s already exists"
>>>   msgstr ""
>>> @@ -1066,6 +1087,13 @@ msgstr ""
>>>   msgid "Unable to generate debug report %(name)s. Details: %(err)s"
>>>   msgstr ""
>>>   +msgid "You should give a name for the debug file report."
>>> +msgstr ""
>>> +
>>> +msgid ""
>>> +"Name should be a string. Only letters, digits and hyphen ('-') are 
>>> allowed."
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage server %(server)s was not used by Kimchi"
>>>   msgstr ""
>>> @@ -1124,16 +1152,13 @@ msgid "Invalid storage type. Types 
>>> supported: 'cdrom'"
>>>   msgstr ""
>>>     #, python-format
>>> -msgid "The path %(value)s is not valid local/remote path for the 
>>> device"
>>> +msgid "The path '%(value)s' is not valid local/remote path for the 
>>> device"
>>>   msgstr ""
>>>     #, python-format
>>>   msgid "Device name %(dev_name)s already exists in vm %(vm_name)s"
>>>   msgstr ""
>>>   -msgid "Must specify a device name"
>>> -msgstr ""
>>> -
>>>   msgid "Can't specify a directory for a CDROM device path"
>>>   msgstr ""
>>>   @@ -1156,6 +1181,12 @@ msgstr ""
>>>   msgid "Do not support guest CDROM hot plug attachment"
>>>   msgstr ""
>>>   +msgid "Specify type and path to add a new virtual machine disk"
>>> +msgstr ""
>>> +
>>> +msgid "Specify path to update virtual machine disk"
>>> +msgstr ""
>>> +
>>>   msgid "Repository ID must be one word only string."
>>>   msgstr ""
>>>   diff --git a/po/pt_BR.po b/po/pt_BR.po
>>> index 715e072..db7c579 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-02-20 15:26-0300\n"
>>> +"POT-Creation-Date: 2014-02-25 15:23-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"
>>> @@ -101,18 +101,21 @@ msgstr "Cancelar"
>>>   msgid "Save"
>>>   msgstr "Salvar"
>>>   -msgid "Reset"
>>> -msgstr "Reiniciar"
>>> -
>>>   msgid "Start"
>>>   msgstr "Iniciar"
>>>   +msgid "Reset"
>>> +msgstr "Reiniciar"
>>> +
>>>   msgid "Stop"
>>>   msgstr "Parar"
>>>     msgid "Actions"
>>>   msgstr "Ações"
>>>   +msgid "Console"
>>> +msgstr ""
>>> +
>>>   msgid "Edit"
>>>   msgstr "Editar"
>>>   @@ -255,6 +258,9 @@ msgstr "Remover"
>>>   msgid "Download"
>>>   msgstr "Baixar"
>>>   +msgid "Report name should contain only letters, digits and/or 
>>> hyphen ('-')."
>>> +msgstr ""
>>> +
>>>   msgid ""
>>>   "This will delete the virtual machine and its virtual disks. This 
>>> operation "
>>>   "cannot be undone. Would you like to continue?"
>>> @@ -317,12 +323,12 @@ msgstr ""
>>>   msgid "This is not a valid Server Name or IP. please, modify it."
>>>   msgstr ""
>>>   -msgid "Log out"
>>> -msgstr "Sair"
>>> -
>>>   msgid "Help"
>>>   msgstr ""
>>>   +msgid "Log out"
>>> +msgstr "Sair"
>>> +
>>>   msgid "Log In"
>>>   msgstr "Entrar"
>>>   @@ -340,12 +346,8 @@ msgstr "Nome do Relatório"
>>>     msgid ""
>>>   "The name used to identify the report. If omitted, a name will be 
>>> chosen "
>>> -"based on current time. Name can contain: letters, digits, \"-\", 
>>> \"_\", or "
>>> -"\".\"."
>>> +"based on current time. Name can contain: letters, digits and 
>>> hyphen (\"-\")."
>>>   msgstr ""
>>> -"O nome usado para identificar o relatório. Se omitido, o nome será 
>>> escolhido "
>>> -"baseado no horário. O nome pode conter: letras, números, \"-\", 
>>> \"_\", ou \"."
>>> -"\"."
>>>     msgid "Define a New Storage Pool"
>>>   msgstr "Definir novo Storage Pool"
>>> @@ -415,12 +417,12 @@ msgstr ""
>>>   msgid "CPU"
>>>   msgstr "CPU"
>>>   -msgid "Network I/O"
>>> -msgstr "Rede E/S"
>>> -
>>>   msgid "Disk I/O"
>>>   msgstr "Disco E/S"
>>>   +msgid "Network I/O"
>>> +msgstr "Rede E/S"
>>> +
>>>   msgid "Livetile"
>>>   msgstr "Tela ao vivo"
>>>   @@ -756,6 +758,10 @@ msgid ""
>>>   msgstr ""
>>>     #, python-format
>>> +msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>>   msgid "Interface %(iface)s does not exist in virtual machine 
>>> %(name)s"
>>>   msgstr ""
>>>   @@ -951,6 +957,18 @@ msgstr ""
>>>   msgid "The SCSI host adapter name must be a string."
>>>   msgstr ""
>>>   +msgid "The storage pool kimchi_isos is reserved for internal use"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid ""
>>> +"Unable to deactivate pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid "Unable to delete pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage volume %(name)s already exists"
>>>   msgstr ""
>>> @@ -1096,6 +1114,13 @@ msgstr ""
>>>   msgid "Unable to generate debug report %(name)s. Details: %(err)s"
>>>   msgstr ""
>>>   +msgid "You should give a name for the debug file report."
>>> +msgstr ""
>>> +
>>> +msgid ""
>>> +"Name should be a string. Only letters, digits and hyphen ('-') are 
>>> allowed."
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage server %(server)s was not used by Kimchi"
>>>   msgstr ""
>>> @@ -1154,16 +1179,13 @@ msgid "Invalid storage type. Types 
>>> supported: 'cdrom'"
>>>   msgstr ""
>>>     #, python-format
>>> -msgid "The path %(value)s is not valid local/remote path for the 
>>> device"
>>> +msgid "The path '%(value)s' is not valid local/remote path for the 
>>> device"
>>>   msgstr ""
>>>     #, python-format
>>>   msgid "Device name %(dev_name)s already exists in vm %(vm_name)s"
>>>   msgstr ""
>>>   -msgid "Must specify a device name"
>>> -msgstr ""
>>> -
>>>   msgid "Can't specify a directory for a CDROM device path"
>>>   msgstr ""
>>>   @@ -1186,6 +1208,12 @@ msgstr ""
>>>   msgid "Do not support guest CDROM hot plug attachment"
>>>   msgstr ""
>>>   +msgid "Specify type and path to add a new virtual machine disk"
>>> +msgstr ""
>>> +
>>> +msgid "Specify path to update virtual machine disk"
>>> +msgstr ""
>>> +
>>>   msgid "Repository ID must be one word only string."
>>>   msgstr ""
>>>   diff --git a/po/zh_CN.po b/po/zh_CN.po
>>> index 546ccef..0439b04 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-02-20 15:26-0300\n"
>>> +"POT-Creation-Date: 2014-02-25 15:23-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"
>>> @@ -101,18 +101,21 @@ msgstr "取消"
>>>   msgid "Save"
>>>   msgstr "保存"
>>>   -msgid "Reset"
>>> -msgstr "重置"
>>> -
>>>   msgid "Start"
>>>   msgstr "启用"
>>>   +msgid "Reset"
>>> +msgstr "重置"
>>> +
>>>   msgid "Stop"
>>>   msgstr "停止"
>>>     msgid "Actions"
>>>   msgstr "操作"
>>>   +msgid "Console"
>>> +msgstr ""
>>> +
>>>   msgid "Edit"
>>>   msgstr "编辑"
>>>   @@ -249,6 +252,9 @@ msgstr "删除"
>>>   msgid "Download"
>>>   msgstr "下载"
>>>   +msgid "Report name should contain only letters, digits and/or 
>>> hyphen ('-')."
>>> +msgstr ""
>>> +
>>>   msgid ""
>>>   "This will delete the virtual machine and its virtual disks. This 
>>> operation "
>>>   "cannot be undone. Would you like to continue?"
>>> @@ -307,12 +313,12 @@ msgstr "服务器不能为空"
>>>   msgid "This is not a valid Server Name or IP. please, modify it."
>>>   msgstr "这不是一个有效的服务器名或IP,请修改"
>>>   -msgid "Log out"
>>> -msgstr "登出"
>>> -
>>>   msgid "Help"
>>>   msgstr ""
>>>   +msgid "Log out"
>>> +msgstr "登出"
>>> +
>>>   msgid "Log In"
>>>   msgstr "登录"
>>>   @@ -330,11 +336,8 @@ msgstr "诊断报告名"
>>>     msgid ""
>>>   "The name used to identify the report. If omitted, a name will be 
>>> chosen "
>>> -"based on current time. Name can contain: letters, digits, \"-\", 
>>> \"_\", or "
>>> -"\".\"."
>>> +"based on current time. Name can contain: letters, digits and 
>>> hyphen (\"-\")."
>>>   msgstr ""
>>> -"该名称用来唯一标识报告,如果不指定,将会基于当前时间自动生成一个名 
>>> 称。名称可"
>>> -"以包含: 字母、数字、\"-\"、\"_\" 或者 \".\""
>>>     msgid "Define a New Storage Pool"
>>>   msgstr "定义一个新的存储池"
>>> @@ -403,12 +406,12 @@ msgstr "iSCSI认证"
>>>   msgid "CPU"
>>>   msgstr "处理器"
>>>   -msgid "Network I/O"
>>> -msgstr "网络I/O"
>>> -
>>>   msgid "Disk I/O"
>>>   msgstr "磁盘I/O"
>>>   +msgid "Network I/O"
>>> +msgstr "网络I/O"
>>> +
>>>   msgid "Livetile"
>>>   msgstr "屏幕"
>>>   @@ -744,6 +747,10 @@ msgid ""
>>>   msgstr ""
>>>     #, python-format
>>> +msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>>   msgid "Interface %(iface)s does not exist in virtual machine 
>>> %(name)s"
>>>   msgstr ""
>>>   @@ -939,6 +946,18 @@ msgstr ""
>>>   msgid "The SCSI host adapter name must be a string."
>>>   msgstr ""
>>>   +msgid "The storage pool kimchi_isos is reserved for internal use"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid ""
>>> +"Unable to deactivate pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>> +#, python-format
>>> +msgid "Unable to delete pool %(name)s as it is associated with some 
>>> templates"
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage volume %(name)s already exists"
>>>   msgstr ""
>>> @@ -1084,6 +1103,13 @@ msgstr ""
>>>   msgid "Unable to generate debug report %(name)s. Details: %(err)s"
>>>   msgstr ""
>>>   +msgid "You should give a name for the debug file report."
>>> +msgstr ""
>>> +
>>> +msgid ""
>>> +"Name should be a string. Only letters, digits and hyphen ('-') are 
>>> allowed."
>>> +msgstr ""
>>> +
>>>   #, python-format
>>>   msgid "Storage server %(server)s was not used by Kimchi"
>>>   msgstr ""
>>> @@ -1142,16 +1168,13 @@ msgid "Invalid storage type. Types 
>>> supported: 'cdrom'"
>>>   msgstr ""
>>>     #, python-format
>>> -msgid "The path %(value)s is not valid local/remote path for the 
>>> device"
>>> +msgid "The path '%(value)s' is not valid local/remote path for the 
>>> device"
>>>   msgstr ""
>>>     #, python-format
>>>   msgid "Device name %(dev_name)s already exists in vm %(vm_name)s"
>>>   msgstr ""
>>>   -msgid "Must specify a device name"
>>> -msgstr ""
>>> -
>>>   msgid "Can't specify a directory for a CDROM device path"
>>>   msgstr ""
>>>   @@ -1174,6 +1197,12 @@ msgstr ""
>>>   msgid "Do not support guest CDROM hot plug attachment"
>>>   msgstr ""
>>>   +msgid "Specify type and path to add a new virtual machine disk"
>>> +msgstr ""
>>> +
>>> +msgid "Specify path to update virtual machine disk"
>>> +msgstr ""
>>> +
>>>   msgid "Repository ID must be one word only string."
>>>   msgstr ""
>>>   diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
>>> index fea0184..f766383 100644
>>> --- a/src/kimchi/i18n.py
>>> +++ b/src/kimchi/i18n.py
>>> @@ -135,6 +135,8 @@ messages = {
>>>       "KCHPOOL0029E": _("The parameter disks only can be updated for 
>>> logical storage pool."),
>>>       "KCHPOOL0030E": _("The SCSI host adapter name must be a 
>>> string."),
>>>       "KCHPOOL0031E": _("The storage pool kimchi_isos is reserved 
>>> for internal use"),
>>> +    "KCHPOOL0032E": _("Unable to deactivate pool %(name)s as it is 
>>> associated with some templates"),
>>> +    "KCHPOOL0033E": _("Unable to delete pool %(name)s as it is 
>>> associated with some templates"),
>>>         "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 011feb0..d4a6ee8 100644
>>> --- a/src/kimchi/model/storagepools.py
>>> +++ b/src/kimchi/model/storagepools.py
>>> @@ -29,8 +29,7 @@ from kimchi.exception import NotFoundError, 
>>> OperationFailed
>>>   from kimchi.model.config import CapabilitiesModel
>>>   from kimchi.model.host import DeviceModel
>>>   from kimchi.model.libvirtstoragepool import StoragePoolDef
>>> -from kimchi.utils import add_task, kimchi_log
>>> -from kimchi.utils import run_command
>>> +from kimchi.utils import add_task, kimchi_log, pool_name_from_uri, 
>>> run_command
>>>       ISO_POOL_NAME = u'kimchi_isos'
>>> @@ -190,7 +189,7 @@ class StoragePoolModel(object):
>>>               elif len(res) == 0:
>>>                   source[key] = ""
>>>               else:
>>> -                souce[key] = res
>>> +                source[key] = res
>>>             return source
>>>   @@ -273,7 +272,20 @@ class StoragePoolModel(object):
>>>               raise OperationFailed("KCHPOOL0009E",
>>>                                     {'name': name, 'err': 
>>> e.get_error_message()})
>>>   +    def _pool_used_by_template(self, pool_name):
>>> +        with self.objstore as session:
>>> +            templates = session.get_list('template')
>>> +            for tmpl in templates:
>>> +                t_info = session.get('template', tmpl)
>>> +                t_pool = pool_name_from_uri(t_info['storagepool'])
>>> +                if t_pool == pool_name:
>>> +                    return True
>>> +            return False
>>> +
>>>       def deactivate(self, name):
>>> +        if self._pool_used_by_template(name):
>>> +            raise InvalidOperation('KCHPOOL0032E', {'name': name})
>> I understand this patch as future fool proof of creating a vm from a 
>> deactivated pool.
>>
>> How about disable the template rather than reject the deactivate?
>> Because for some storage pools, the connection will down because of 
>> server status, iscsi/nfs
>> Users will still get errors when using template on these pools.
>>
>> So when using these template to fork storage, just reject it and mark 
>> it as disabled.
>> What do you think?
> agree with royce.
>
> I remember royce's patch(verify the storage pool when  create VM) 
> already merged.
> If storage pool is not active, UI will give prompt.
>
> Also the  patch is submit to mail-list.
> [PATCH 2/3] template integrity verification: verify storagepool in 
> backend
>
> And we still need UI patch to improve it.
> After UI patch, if storage pool does not exist,  we can mark the 
> template is invalid.
>
> So we deactivate/delete storage pool is no harmful.

In fact, the idea of this patch is avoiding user to create inconsistent 
state in a template.
I think we need to prevent it as earlier as possible instead of just 
display an error message
in the final step which is create a vm

>>> +
>>>           pool = self.get_storagepool(name, self.conn)
>>>           try:
>>>               pool.destroy()
>>> @@ -282,6 +294,9 @@ class StoragePoolModel(object):
>>>                                     {'name': name, 'err': 
>>> e.get_error_message()})
>>>         def delete(self, name):
>>> +        if self._pool_used_by_template(name):
>>> +            raise InvalidOperation('KCHPOOL0033E', {'name': name})
>>> +
>>>           pool = self.get_storagepool(name, self.conn)
>>>           if pool.isActive():
>>>               raise InvalidOperation("KCHPOOL0005E", {'name': name})
>>> diff --git a/tests/test_model.py b/tests/test_model.py
>>> index 74e2424..7cf2f08 100644
>>> --- a/tests/test_model.py
>>> +++ b/tests/test_model.py
>>> @@ -406,6 +406,11 @@ class ModelTests(unittest.TestCase):
>>>               disk_path = '/tmp/kimchi-images/%s-0.img' % 
>>> vm_info['uuid']
>>>               self.assertTrue(os.access(disk_path, os.F_OK))
>>>   +            # reset template to default storage pool
>>> +            # so we can remove the storage pool created 'test-pool'
>>> +            params = {'storagepool': '/storagepools/default'}
>>> +            inst.template_update('test', params)
>>> +
>>>       @unittest.skipUnless(utils.running_as_root(), 'Must be run as 
>>> root')
>>>       def test_template_create(self):
>>>           inst = model.Model('test:///default',
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
>




More information about the Kimchi-devel mailing list