
On 03/08/2016 09:45 AM, Sandro Bonazzola wrote:
On Sat, Mar 5, 2016 at 8:29 PM, James Michels <karma.sometimes.hurts@gmail.com <mailto:karma.sometimes.hurts@gmail.com>> wrote:
Greetings
How can I track asynchronous tasks with python sdk? For instance, I want to copy a disk so I use:
dcdisk = api.disks.get(id='...') act = params.Action(storage_domain=api.storagedomains.get(name='...')) action = dcdisk.copy(act)
I get a params.Action object. Now how can I know which ID has the new copied disk?
In general you can track async tasks using the "job" contained in the returned action. For example: action = dcdisk.copy(act) job = action.get_job() if job is not None: job_id = job.get_id() while True: job = api.jobs.get(id=job_id) if job is not None and job.get_status().get_state() != 'FINISHED': break time.sleep(5) However, this isn't reliable, as actions may not return jobs, that depends on how they are implemented in the backend, and that is outside of the control of the API. So I don't recommend this approach. But in your particular case this won't help, as it will tell you when the disk is created, but not what is the id of the disk. To be able to get the id of the disk I recommend that you set an unique alias when creating it: copy_alias = "copy-of-%s" % dcdisk.get_id() action = params.Action( disk=params.Disk( alias=copy_alias, ), ... ) dcdisk.copy(action) Then, later, you can search that disk by alias: copy_disk = api.disks.list(query="alias=%s" % copy_alias) A bug was opened recently related to this: [RFE] Add support to search VMs by disk id https://bugzilla.redhat.com/1315345 That bug is about searching for the VMs that have a disk attached. You may want to open another bug requesting that the identifier of the copied disk is returned directly by the "copy" operation. -- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.