Add api-ref for os-quota-class-set APIs

This commit adds the api doc for os-quota-class-set GET & PUT
APIs.

- Also mentioned about the recommendation over usage of this API.
- Added warning for current bug in v2.1 API #1693168

This is also needed by BP
- https://blueprints.launchpad.net/nova/+spec/fix-quota-classes-api

Change-Id: Ib765e2d1dec7b236a2009148e0b1067a46326ce9
Related-Bug: #1693168
Closes-Bug: #1602400
This commit is contained in:
ghanshyam 2017-05-25 12:06:11 +03:00
parent 038619cce8
commit b25b66e284
5 changed files with 259 additions and 8 deletions

View File

@ -47,6 +47,7 @@ the `API guide <http://developer.openstack.org/api-guide/compute/index.html>`_.
.. include:: os-migrations.inc
.. include:: server-migrations.inc
.. include:: os-quota-sets.inc
.. include:: os-quota-class-sets.inc
.. include:: os-server-groups.inc
.. include:: os-server-tags.inc
.. include:: os-services.inc

View File

@ -0,0 +1,148 @@
.. -*- rst -*-
=======================================
Quota class sets (os-quota-class-sets)
=======================================
Show, Create or Update the quotas for a Quota Class.
Nova supports implicit 'default' Quota Class only.
.. note::
Once a default limit is set via the ``default`` quota class via the API,
that takes precedence over any changes to that resource limit in the
configuration options. In other words, once you've changed things via
the API, you either have to keep those synchronized with the configuration
values or remove the default limit from the database manually as there is
no REST API for removing quota class values from the database.
For Example: If you updated default quotas for instances, to 20, but
didn't change ``quota_instances`` in your ``nova.conf``, you'd now
have default quota for instances as 20 for all projects.
If you then change ``quota_instances=5`` in nova.conf, but didn't
update the ``default`` quota class via the API, you'll still have
a default quota of 20 for instances regardless of ``nova.conf``.
Refer: `Quotas
<https://docs.openstack.org/developer/nova/quotas.html>`__
for more details.
.. warning::
There is a bug in the v2.1 API and the legacy v2 compatible API which does
not return the ``server_groups`` and ``server_group_members`` quotas in
GET and PUT ``os-quota-class-sets`` API response, whereas the v2 API
used to return those keys in the API response.
There is workaround to get the ``server_groups`` and
``server_group_members`` quotas using
:ref:`list-default-quotas-for-tenant`
API but that is per project quota.
Show the quota for Quota Class
==============================
.. rest_method:: GET /os-quota-class-sets/{id}
Show the quota for the Quota Class.
Normal response codes: 200
Error response codes: unauthorized(401), forbidden(403)
Request
-------
.. rest_parameters:: parameters.yaml
- id: quota_class_id
Response
--------
.. rest_parameters:: parameters.yaml
- quota_class_set: quota_class_set
- cores: cores_quota_class
- fixed_ips: fixed_ips_quota_class
- floating_ips: floating_ips_quota_class
- id: quota_class_id_body
- injected_file_content_bytes: injected_file_content_bytes
- injected_file_path_bytes: injected_file_path_bytes
- injected_files: injected_files_quota_class
- instances: instances_quota_class
- key_pairs: key_pairs_quota_class
- metadata_items: metadata_items
- ram: ram_quota_class
- security_group_rules: security_group_rules_quota_class
- security_groups: security_groups_quota_class
- networks: networks_quota_optional
**Example Show A Quota Class: JSON response**
.. literalinclude:: ../../doc/api_samples/os-quota-class-sets/quota-classes-show-get-resp.json
:language: javascript
Create or Update Quotas for Quota Class
=======================================
.. rest_method:: PUT /os-quota-class-sets/{id}
Update the quotas for the Quota Class.
If the requested Quota Class is not found in the DB, then the API will create the one.
Only 'default' quota class is valid and used to set the default quotas, all other quota class
would not be used anywhere.
Normal response codes: 200
Error response codes: badRequest(400), unauthorized(401), forbidden(403)
Request
-------
.. rest_parameters:: parameters.yaml
- id: quota_class_id
- quota_class_set: quota_class_set
- cores: cores_quota_class_optional
- fixed_ips: fixed_ips_quota_class_optional
- floating_ips: floating_ips_quota_class_optional
- injected_file_content_bytes: injected_file_content_bytes_quota_optional
- injected_file_path_bytes: injected_file_path_bytes_quota_optional
- injected_files: injected_files_quota_class_optional
- instances: instances_quota_class_optional
- key_pairs: key_pairs_quota_class_optional
- metadata_items: metadata_items_quota_optional
- ram: ram_quota_class_optional
- security_group_rules: security_group_rules_quota_class_optional
- security_groups: security_groups_quota_class_optional
- server_groups: server_groups_quota_class_optional
- server_group_members: server_group_members_quota_optional
- networks: networks_quota_optional
**Example Update Quotas: JSON request**
.. literalinclude:: ../../doc/api_samples/os-quota-class-sets/quota-classes-update-post-req.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- quota_class_set: quota_class_set
- cores: cores_quota_class
- fixed_ips: fixed_ips_quota_class
- floating_ips: floating_ips_quota_class
- injected_file_content_bytes: injected_file_content_bytes
- injected_file_path_bytes: injected_file_path_bytes
- injected_files: injected_files_quota_class
- instances: instances_quota_class
- key_pairs: key_pairs_quota_class
- metadata_items: metadata_items
- ram: ram_quota_class
- security_group_rules: security_group_rules_quota_class
- security_groups: security_groups_quota_class
- networks: networks_quota_optional
**Example Update Quotas: JSON response**
.. literalinclude:: ../../doc/api_samples/os-quota-class-sets/quota-classes-update-post-resp.json
:language: javascript

View File

@ -162,6 +162,8 @@ Response
There is no body content for the response of a successful DELETE operation.
.. _list-default-quotas-for-tenant:
List Default Quotas For Tenant
==============================

View File

@ -207,6 +207,13 @@ port_id_path:
in: path
required: true
type: string
quota_class_id: &quota_class_id
description: |
The ID of the quota class.
Nova supports the ``default`` Quota Class only.
in: path
required: true
type: string
request_id:
description: |
The ID of the request.
@ -1602,12 +1609,19 @@ contents:
in: body
required: true
type: string
cores:
cores: &cores
description: |
The number of allowed instance cores for each tenant.
in: body
required: true
type: integer
cores_quota_class: &cores_quota_class
<<: *cores
description: |
The number of allowed server cores for the quota class.
cores_quota_class_optional:
<<: *cores_quota_class
required: false
cores_quota_details:
description: |
The object of detailed cores quota, including in_use, limit and
@ -2143,11 +2157,21 @@ fixed_ips:
fixed_ips_quota:
description: |
The number of allowed fixed IP addresses for each tenant. Must be equal to or
greater than the number of allowed instances.
greater than the number of allowed servers.
in: body
required: true
type: integer
max_version: 2.35
fixed_ips_quota_class: &fixed_ips_quota_class
description: |
The number of allowed fixed IP addresses for the quota class. Must be
equal to or greater than the number of allowed servers.
in: body
required: true
type: integer
fixed_ips_quota_class_optional:
<<: *fixed_ips_quota_class
required: false
fixed_ips_quota_details:
description: |
The object of detailed fixed ips quota, including in_use, limit and
@ -2485,6 +2509,15 @@ floating_ips_list:
in: body
required: true
type: array
floating_ips_quota_class: &floating_ips_quota_class
description: |
The number of allowed floating IP addresses for the quota class.
in: body
required: true
type: integer
floating_ips_quota_class_optional:
<<: *floating_ips_quota_class
required: false
floating_ips_quota_details:
description: |
The object of detailed floating ips quota, including in_use, limit and
@ -3030,12 +3063,19 @@ injected_file_path_bytes_quota_optional:
in: body
required: false
type: integer
injected_files:
injected_files: &injected_files
description: |
The number of allowed injected files for each tenant.
in: body
required: true
type: integer
injected_files_quota_class: &injected_files_quota_class
<<: *injected_files
description: |
The number of allowed injected files for the quota class.
injected_files_quota_class_optional:
<<: *injected_files_quota_class
required: false
injected_files_quota_details:
description: |
The object of detailed injected files quota, including in_use, limit and
@ -3116,12 +3156,19 @@ instanceActions:
in: body
required: true
type: array
instances:
instances: &instances
description: |
The number of allowed instances for each tenant.
The number of allowed servers for each tenant.
in: body
required: true
type: integer
instances_quota_class: &instances_quota_class
<<: *instances
description: |
The number of allowed servers for the quota class.
instances_quota_class_optional:
<<: *instances_quota_class
required: false
instances_quota_details:
description: |
The object of detailed instances quota, including in_use, limit and
@ -3213,12 +3260,19 @@ key_name_resp:
in: body
required: true
type: string
key_pairs:
key_pairs: &key_pairs
description: |
The number of allowed key pairs for each user.
in: body
required: true
type: integer
key_pairs_quota_class: &key_pairs_quota_class
<<: *key_pairs
description: |
The number of allowed key pairs for the quota class.
key_pairs_quota_class_optional:
<<: *key_pairs_quota_class
required: false
key_pairs_quota_details:
description: |
The object of detailed key pairs quota, including in_use, limit and
@ -3753,6 +3807,12 @@ networks:
in: body
required: true
type: object
networks_quota_optional:
description: |
The number of private networks that can be created per project.
in: body
required: false
type: integer
new_file:
description: |
The name of the qcow2 file that Block Storage creates, which becomes the active
@ -4301,6 +4361,15 @@ project_id_value:
in: body
required: true
type: string
quota_class_id_body:
<<: *quota_class_id
in: body
quota_class_set:
description: |
A ``quota_class_set`` object.
in: body
required: true
type: object
quota_set:
description: |
A ``quota_set`` object.
@ -4313,12 +4382,19 @@ quota_tenant_or_user_id_body:
in: body
required: true
type: string
ram:
ram: &ram
description: |
The amount of allowed instance RAM, in MB, for each tenant.
in: body
required: true
type: integer
ram_quota_class: &ram_quota_class
<<: *ram
description: |
The amount of allowed instance RAM, in MB, for the quota class.
ram_quota_class_optional:
<<: *ram_quota_class
required: false
ram_quota_details:
description: |
The object of detailed key ram quota, including in_use,
@ -4570,6 +4646,15 @@ security_group_rules_quota:
required: true
type: integer
max_version: 2.35
security_group_rules_quota_class: &security_group_rules_quota_class
description: |
The number of allowed rules for each security group.
in: body
required: true
type: integer
security_group_rules_quota_class_optional:
<<: *security_group_rules_quota_class
required: false
security_group_rules_quota_details:
description: |
The object of detailed security group rules quota, including in_use,
@ -4599,6 +4684,15 @@ security_groups_quota:
required: true
type: integer
max_version: 2.35
security_groups_quota_class: &security_groups_quota_class
description: |
The number of allowed security groups for the quota class.
in: body
required: true
type: integer
security_groups_quota_class_optional:
<<: *security_groups_quota_class
required: false
security_groups_quota_details:
description: |
The object of detailed security groups, including in_use,
@ -4668,7 +4762,7 @@ server_group_members_quota_optional:
in: body
required: false
type: integer
server_groups:
server_groups: &server_groups
description: |
The number of allowed server groups for each tenant.
in: body
@ -4680,6 +4774,11 @@ server_groups_list:
in: body
required: true
type: array
server_groups_quota_class_optional:
<<: *server_groups
description: |
The number of allowed server groups for the quota class.
required: false
server_groups_quota_details:
description: |
The object of detailed server groups, including in_use,

View File

@ -4,6 +4,7 @@
"cores": 50,
"ram": 51200,
"floating_ips": 10,
"fixed_ips": -1,
"metadata_items": 128,
"injected_files": 5,
"injected_file_content_bytes": 10240,