[Kimchi-devel] [PATCH 1/2] Fix vm creation storage rollback clean
Aline Manera
alinefm at linux.vnet.ibm.com
Mon Feb 24 13:34:03 UTC 2014
On 02/24/2014 07:24 AM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> For pools which not allowed create and delete volume,
> if create vm fails, its storage volume should not be destoryed.
> Put the constant in single file to prevent circular import.
> For storage volume deletion, work around it by delete vol clear part,
> in the future, this will be fixed by volume reference information tracking.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
> src/kimchi/model/constant.py | 24 ++++++++++++++++++++++++
> src/kimchi/model/vms.py | 14 ++++++--------
> 2 files changed, 30 insertions(+), 8 deletions(-)
> create mode 100644 src/kimchi/model/constant.py
>
> diff --git a/src/kimchi/model/constant.py b/src/kimchi/model/constant.py
> new file mode 100644
> index 0000000..579cc66
> --- /dev/null
> +++ b/src/kimchi/model/constant.py
> @@ -0,0 +1,24 @@
> +#
> +# Kimchi
> +#
> +# Copyright IBM Corp, 2014
> +#
> +# Authors:
> +# Royce Lv <lvroyce at linux.vnet.ibm.com>
> +#
> +# This library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU Lesser General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +#
> +# This library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +# Lesser General Public License for more details.
> +#
> +# You should have received a copy of the GNU Lesser General Public
> +# License along with this library; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +# storage pool constant
> +READONLY_TYPE = ['iscsi', 'scsi', 'mpath']
It refers to storage pool, so we should put it in model/storagepools.py
I don't think putting it there will cause some circular import error
> diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
> index b482e80..f4bf371 100644
> --- a/src/kimchi/model/vms.py
> +++ b/src/kimchi/model/vms.py
> @@ -33,6 +33,7 @@ from kimchi import xmlutils
> from kimchi.exception import InvalidOperation, InvalidParameter
> from kimchi.exception import MissingParameter, NotFoundError, OperationFailed
> from kimchi.model.config import CapabilitiesModel
> +from kimchi.model.constant import READONLY_TYPE
> from kimchi.model.templates import TemplateModel
> from kimchi.model.utils import get_vm_name
> from kimchi.screenshot import VMScreenshot
> @@ -186,7 +187,7 @@ class VMsModel(object):
> # If storagepool is SCSI, volumes will be LUNs and must be passed by
> # the user from UI or manually.
> vol_list = []
> - if t._get_storage_type() == 'scsi':
> + if t._get_storage_type() in READONLY_TYPE:
> if not params.get('volumes'):
> raise MissingParameter('KCHVM0017E')
> else:
> @@ -218,9 +219,10 @@ class VMsModel(object):
> try:
> conn.defineXML(xml.encode('utf-8'))
> except libvirt.libvirtError as e:
> - for v in vol_list:
> - vol = conn.storageVolLookupByPath(v['path'])
> - vol.delete(0)
> + if t._get_storage_type() not in READONLY_TYPE:
> + for v in vol_list:
> + vol = conn.storageVolLookupByPath(v['path'])
> + vol.delete(0)
> raise OperationFailed("KCHVM0007E", {'name': name,
> 'err': e.get_error_message()})
>
> @@ -357,10 +359,6 @@ class VMModel(object):
>
> dom.undefine()
>
> - for path in paths:
> - vol = conn.storageVolLookupByPath(path)
> - vol.delete(0)
> -
> with self.objstore as session:
> session.delete('vm', dom.UUIDString(), ignore_missing=True)
>
More information about the Kimchi-devel
mailing list