[Kimchi-devel] [PATCH 4/5] Create guests asynchronously: Backend
Aline Manera
alinefm at linux.vnet.ibm.com
Wed Mar 4 14:09:38 UTC 2015
On 03/03/2015 11:20, Christy Perez wrote:
>
> On 03/03/2015 03:04 AM, Royce Lv wrote:
>> I think we may need to do a work around in UI as debug report did.
>> If a user clicked "+" on VM page, then this request get 202 response.
>> but after next round of GET /vms query, this VM may still not displayed
>> in VM tab, making user want to issue create again or wander if POST
>> request properly handled.
>>
>> So we may want to display a vm creating in progress icon to users in UI.
> Definitely. I just had to leave that part implemented since I'm not so
> UI-savy.
To update the UI, look for "getTasksByFilter" and update the filter
parameter according to your changes.
>> On 02/27/2015 10:41 AM, Christy Perez wrote:
>>> Signed-off-by: Christy Perez <christy at linux.vnet.ibm.com>
>>> ---
>>> src/kimchi/control/vms.py | 4 ++--
>>> src/kimchi/model/vms.py | 28 +++++++++++++++++++++++++---
>>> 2 files changed, 27 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/src/kimchi/control/vms.py b/src/kimchi/control/vms.py
>>> index 5068b7c..8a31dc0 100644
>>> --- a/src/kimchi/control/vms.py
>>> +++ b/src/kimchi/control/vms.py
>>> @@ -17,13 +17,13 @@
>>> # License along with this library; if not, write to the Free Software
>>> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>>> 02110-1301 USA
>>>
>>> -from kimchi.control.base import Collection, Resource
>>> +from kimchi.control.base import AsyncCollection, Resource
>>> from kimchi.control.utils import internal_redirect, UrlSubNode
>>> from kimchi.control.vm import sub_nodes
>>>
>>>
>>> @UrlSubNode('vms', True)
>>> -class VMs(Collection):
>>> +class VMs(AsyncCollection):
>>> def __init__(self, model):
>>> super(VMs, self).__init__(model)
>>> self.resource = VM
>>> diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
>>> index 078e63e..8b55278 100644
>>> --- a/src/kimchi/model/vms.py
>>> +++ b/src/kimchi/model/vms.py
>>> @@ -78,6 +78,7 @@ def __init__(self, **kargs):
>>> self.conn = kargs['conn']
>>> self.objstore = kargs['objstore']
>>> self.caps = CapabilitiesModel(**kargs)
>>> + self.task = TaskModel(**kargs)
>>>
>>> @staticmethod
>>> def _update_guests_stats(names, conn):
>>> @@ -181,7 +182,6 @@ def _get_disk_io_rate(vm_uuid, dom, seconds):
>>> 'diskWrKB': diskWrKB})
>>>
>>> def create(self, params):
>>> - conn = self.conn.get()
>>> t_name = template_name_from_uri(params['template'])
>>> vm_uuid = str(uuid.uuid4())
>>> vm_list = self.get_list()
>>> @@ -203,6 +203,26 @@ def create(self, params):
>>>
>>> t.validate()
>>>
>>> + taskid = add_task(u'/vms/%s' % name, 'create',
>>> + self._create_task, self.objstore,
>>> + {'vm_uuid': vm_uuid, 'template': t, 'name':
>>> name})
>>> +
>>> + return self.task.lookup(taskid)
>>> +
>>> + def _create_task(self, cb, params):
>>> + """
>>> + params: A dict with the following values:
>>> + - vm_uuid: The UUID of the VM being created
>>> + - template: The template being used to create the VM
>>> + - name: The name for the new VM
>>> + """
>>> +
>>> + vm_uuid = params['vm_uuid']
>>> + t = params['template']
>>> + name = params['name']
>>> + conn = self.conn.get()
>>> +
>>> + cb('Storing VM icon')
>>> # Store the icon for displaying later
>>> icon = t.info.get('icon')
>>> if icon:
>>> @@ -217,6 +237,7 @@ def create(self, params):
>>>
>>> # If storagepool is SCSI, volumes will be LUNs and must be
>>> passed by
>>> # the user from UI or manually.
>>> + cb('Provisioning storage for new VM')
>>> vol_list = []
>>> if t._get_storage_type() not in ["iscsi", "scsi"]:
>>> vol_list = t.fork_vm_storage(vm_uuid)
>>> @@ -229,6 +250,7 @@ def create(self, params):
>>> graphics=graphics,
>>> volumes=vol_list)
>>>
>>> + cb('Defining new VM')
>>> try:
>>> conn.defineXML(xml.encode('utf-8'))
>>> except libvirt.libvirtError as e:
>>> @@ -239,10 +261,10 @@ def create(self, params):
>>> raise OperationFailed("KCHVM0007E", {'name': name,
>>> 'err':
>>> e.get_error_message()})
>>>
>>> + cb('Updating VM metadata')
>>> VMModel.vm_update_os_metadata(VMModel.get_vm(name,
>>> self.conn), t.info,
>>> self.caps.metadata_support)
>>> -
>>> - return name
>>> + cb('OK', True)
>>>
>>> def get_list(self):
>>> return VMsModel.get_vms(self.conn)
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
> _______________________________________________
> 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