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

Sheldon shaohef at linux.vnet.ibm.com
Fri Feb 28 09:57:46 UTC 2014


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.
>> +
>>           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


-- 
Thanks and best regards!

Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center




More information about the Kimchi-devel mailing list