[ovirt-users] How to manage to update the Quota limits parameters (cpu, memory and disk)

Juan Hernández jhernand at redhat.com
Fri Feb 17 13:03:09 UTC 2017


On 02/17/2017 01:21 PM, Manuel Luis Aznar wrote:
> Hello there,
> 
> I want to update the quota limit parameters for vcpu, memory and disk,
> but I dont find the way.
> 
> I manage to get the actual values but I am unable to manage how to
> update this values.
> 
> I am doing the following (I ommit the imports and conection stuff):
> 
>       system_service = connection.system_service()
> 
>       data_centers_service = system_service.data_centers_service()
> 
>       data_center = data_centers_service.list(search='name=Prueba2')[0]
> 
>       data_center_service =
> data_centers_service.data_center_service(id=data_center.id
> <http://data_center.id>)
> 
>       quotas_service = data_center_service.quotas_service()
> 
>       quota = quotas_service.list()[0]
> 
>       quota_service = quotas_service.quota_service(id=quota.id
> <http://quota.id>)
> 
>       quota_cluster_limits_service =
> quota_service.quota_cluster_limits_service()
> 
>       quotaclusterlimit = quota_cluster_limits_service.list()[0]
> 
>       quota_storage_limits_service =
> quota_service.quota_storage_limits_service()
> 
> quotastoragelimit = quota_storage_limits_service.list()[0]
> 
> if after that I print the following:
>       quotaclusterlimit.memory_limit
>       quotaclusterlimit.vcpu_limit
>       quotastoragelimit.limit
> 
> i see the actual values of the limits, but, I m not able to update that
> values (I have been testing on how to do it). It seems that the only
> method that let you update anything on a quota is using:
> 
>        quota_service.add(quota=...)
> 
> I start creating a new quota object with these new limits by doing the
> following:
> 
>       new_quotastoragelimit = ovirtsdk4.types.QuotaStorageLimit(limit=100)
>       new_quotaclusterlimit =
> ovirtsdk4.types.QuotaClusterLimit(memory_limit=100,vcpu_limit=10)
> 
>       new_quota =
> ovirtsdk4.types.Quota(quota_cluster_limits=new_quotaclusterlimit,
> quota_storage_limits=new_quotastoragelimit)
> 
>       quota_service.update(quota=new_quota)
> 
> I have directly tried to edit the printed values directly and then doing
> the update but I got nothing (got event in the engine but the limit did
> not change)
> 
>       quotaclusterlimit.memory_limit =100
>       quotaclusterlimit.vcpu_limit = 10
>       quotastoragelimit.limit = 100
>       quota_service.update(quota=quota) # updating quota with itself
> 
> I suppose that there would be a way on how to this, so if you can help,
> i will really appreciate you.
> 
> Thanks for all in advance to all
> Manuel
> 

The API doesn't currently have a method to update a quota limit, so you
will have to remove the existing one and add a new one. For example, if
you want to change the storage quota of the 'mydata' storage domain to
100 GiB, you can do something like this:

---8<---
# Find the reference to the root of services:
system_service = connection.system_service()

# Find the data center and the service that manages it:
dcs_service = system_service.data_centers_service()
dc = dcs_service.list(search='name=mydc')[0]
dc_service = dcs_service.data_center_service(dc.id)

# Find the storage domain and the service that manages it:
sds_service = system_service.storage_domains_service()
sd = sds_service.list(search='name=mydata')[0]
sd_service = sds_service.storage_domain_service(sd.id)

# Find the quota and the service that manages it. Note that the service
# that manages the quota doesn't support search, so we need to retrieve
# all the quotas and filter explicitly. If the quota doesn't exist,
# create it.
quotas_service = dc_service.quotas_service()
quotas = quotas_service.list()
quota = next(
    (q for q in quotas if q.name == 'myquota'),
    None
)
if quota is None:
    quota = quotas_service.add(
        quota=types.Quota(
            name='myquota',
            description='My quota',
            cluster_hard_limit_pct=20,
            cluster_soft_limit_pct=80,
            storage_hard_limit_pct=20,
            storage_soft_limit_pct=80
        )
    )
quota_service = quotas_service.quota_service(quota.id)

# Find the quota limits for the storage domain that we are interested
# on. If that limit exists we will delete it, and create it again with
# the desired limit, in this example it will be 100 GiB.
limits_service = quota_service.quota_storage_limits_service()
limits = limits_service.list()
limit = next(
    (l for l in limits if l.id == sd.id),
    None
)
if limit is not None:
    limit_service = limits_service.limit_service(limit.id)
    limit_service.remove()
limit = limits_service.add(
    limit=types.QuotaStorageLimit(
        name='mydatalimit',
        description='My storage domain limit',
        limit=100,
        storage_domain=types.StorageDomain(
            id=sd.id
        )
    ),
)
--->8---



More information about the Users mailing list