def add_quota_storage_limits(api): # Find the data center and the service that manages it: dcs_service = api.system_service().data_centers_service() dc = dcs_service.list(search='name=%s' % DC_NAME)[0] dc_service = dcs_service.data_center_service(dc.id) # Find the storage domain and the service that manages it: sds_service = api.system_service().storage_domains_service() sd = sds_service.list()[0] # Find the quota and the service that manages it. # 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 == DC_QUOTA_NAME), None) if quota is None: quota = quotas_service.add( quota=types.Quota(name=DC_QUOTA_NAME, description='DC-QUOTA-DESCRIPTION', 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 limit for the storage domain that we are interested on: 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 that limit exists we will delete it: if limit is not None: limit_service = limits_service.limit_service(limit.id) limit_service.remove() # Create the limit again, with the desired value nt.assert_true( limits_service.add(limit=types.QuotaStorageLimit(limit=500, )))
def main(): argument_spec = ovirt_full_argument_spec( state=dict( choices=['present', 'absent'], default='present', ), id=dict(default=None), name=dict(required=True), data_center=dict(required=True), description=dict(default=None), cluster_threshold=dict(default=None, type='int', aliases=['cluster_soft_limit']), cluster_grace=dict(default=None, type='int', aliases=['cluster_hard_limit']), storage_threshold=dict(default=None, type='int', aliases=['storage_soft_limit']), storage_grace=dict(default=None, type='int', aliases=['storage_hard_limit']), clusters=dict(default=[], type='list'), storages=dict(default=[], type='list'), ) module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) check_sdk(module) try: auth = module.params.pop('auth') connection = create_connection(auth) datacenters_service = connection.system_service().data_centers_service( ) dc_name = module.params['data_center'] dc_id = getattr(search_by_name(datacenters_service, dc_name), 'id', None) if dc_id is None: raise Exception("Datacenter '%s' was not found." % dc_name) quotas_service = datacenters_service.service(dc_id).quotas_service() quotas_module = QuotasModule( connection=connection, module=module, service=quotas_service, ) state = module.params['state'] if state == 'present': ret = quotas_module.create() # Manage cluster limits: cl_limit_service = quotas_service.service( ret['id']).quota_cluster_limits_service() for cluster in module.params.get('clusters'): cl_limit_service.add(limit=otypes.QuotaClusterLimit( memory_limit=float(cluster.get('memory')), vcpu_limit=cluster.get('cpu'), cluster=search_by_name( connection.system_service().clusters_service(), cluster.get('name')), ), ) # Manage storage limits: sd_limit_service = quotas_service.service( ret['id']).quota_storage_limits_service() for storage in module.params.get('storages'): sd_limit_service.add(limit=otypes.QuotaStorageLimit( limit=storage.get('size'), storage_domain=search_by_name( connection.system_service().storage_domains_service(), storage.get('name')), )) elif state == 'absent': ret = quotas_module.remove() module.exit_json(**ret) except Exception as e: module.fail_json(msg=str(e), exception=traceback.format_exc()) finally: connection.close(logout=auth.get('token') is 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 limit for the storage domain that we are interested on: 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 that limit exists we will delete it: if limit is not None: limit_service = limits_service.limit_service(limit.id) limit_service.remove() # Create the limit again, with the desired value, in this example it will # be 100 GiB: limit = limits_service.add( limit=types.QuotaStorageLimit(name='mydatalimit', description='My storage domain limit', limit=100, storage_domain=types.StorageDomain( id=sd.id))) # Close the connection to the server: connection.close()