[Kimchi-devel] [PATCH 4/5] Create guests asynchronously: Backend
Christy Perez
christy at linux.vnet.ibm.com
Wed Mar 4 14:50:03 UTC 2015
On 03/04/2015 08:09 AM, Aline Manera wrote:
>
> 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.
I can do that (and did do that) to update the clone tasks, but I can't
create a a new one for the *create* filter and add the progress
indicator, etc. I think that's what Royce was talking about (create, not
clone).
>
>>> 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