Exemple #1
0
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)
Exemple #3
0
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()