[ovirt-users] Is it possible to limit the number and speed of paralel STORAGE migrations?

Juan Hernández jhernand at redhat.com
Wed Apr 22 11:09:07 UTC 2015


On 04/22/2015 11:44 AM, Ernest Beinrohr wrote:
> Dňa 21.04.2015 o 17:33 Dan Yasny napísal(a):
>> Why not just script them to migrate one after the other? The CLI is
>> nice and simple, and the SDK is even nicer
> Well I gave it a try, but I'm quite new to python and this does not work
> as expected:
> 
> for vm in vms:
>   print vm.name
>   for disk in vm.disks.list( ):
>     print " disk: " + disk.name
>     sd = api.storagedomains.get('newstorage')
>    
> disk.move(params.Disk(storage_domains=params.StorageDomains(storage_domain=[sd])))
> 
> 
> status: 500
> reason: Internal Server Error
> detail: HTTP Status 500 - Bad arguments passed to public abstract
> javax.ws.rs.core.Response
> org.ovirt.engine.api.resource.MovableResource.move(org.ovirt.engine.api.model.Action) 
> ( org.ovirt.engine.api.model.Disk org.ovirt.engine.api.model.Disk at 6a0db58b )
> 

The parameter to the "move" method should be an "Action", containing a
reference to the target storage domain. You need something like this:

---8<---
#!/usr/bin/python

import time

from ovirtsdk import api
from ovirtsdk.xml import params

# Connect to the server:
api = api.API(
    url="https://ovirt.example.com/ovirt-engine/api",
    username="admin at internal",
    password="***",
    insecure=True,
    debug=False
)

# Find the VM whose disks we want to move:
vm = api.vms.get(name="myvm")

# Create the information of the storage domain where we will
# move the disks to. Note that we only need to know the name
# (or id) of the storage domain, the server will locate it so
# we don't need to look it up here:
sd = params.StorageDomain(name="newstorage")

# Iterate the disks of the VM and for each of them move it
# to the target storage domain:
for disk in vm.disks.list():
    # Start moving the disk. Note that this is an asynchronous
    # operation, so once the "move" method returns you will
    # have to wait for the actual movement to finish.
    print("Moving disk \"%s\" ..." % disk.get_alias())
    disk.move(
        params.Action(
            storage_domain=sd
        )
    )

    # Wait till the state of the disk is "ok", which means it
    # has been moved completely. Note that it is important to
    # wait a few seconds before doing the first check, as
    # otherwise you will get the status of the disk before
    # the movement started, thus you would get "ok" but
    # because the movement didn't start yet.
    disk_id = disk.get_id()
    while True:
        print("Waiting for movement to complete ...")
        time.sleep(5)
        disk = vm.disks.get(id=disk_id)
        if disk.get_status().get_state() == "ok":
            break

# Bye:
api.disconnect()
--->8---

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



More information about the Users mailing list