keystone/api-ref/source/v3/projects.inc
Eric Brown 30d9095d28 Use https for docs.openstack.org references
The openstack.org pages now support https and our references to
the site should by default be one signed by the organization.

Change-Id: I30a462e03d1fd7852511e22cac34c6bc0e8917f4
2017-01-30 16:05:08 -08:00

323 lines
7.7 KiB
ReStructuredText

.. -*- rst -*-
==========
Projects
==========
A project is the base unit of resource ownership. Resources are owned by a
specific project. A project is owned by a specific domain.
(Since Identity API v3.4) You can create a hierarchy of projects by setting a
``parent_id`` when you create a project. All projects in a hierarchy must be
owned by the same domain.
(Since Identity API v3.6) Projects may, in addition to acting as containers for
OpenStack resources, act as a domain (by setting the attribute ``is_domain`` to
``true``), in which case it provides a namespace in which users, groups and
other projects can be created. In fact, a domain created using the
``POST /domains`` API will actually be represented as a project with
``is_domain`` set to ``true`` with no parent (``parent_id`` is null).
Given this, all projects are considered part of a project hierarchy. Projects
created in a domain prior to v3.6 are represented as a two-level hierarchy,
with a project that has ``is_domain`` set to ``true`` as the root and all other
projects referencing the root as their parent.
A project acting as a domain can potentially also act as a container for
OpenStack resources, although this depends on whether the policy rule for the
relevant resource creation allows this.
.. note::
A project's name must be unique within a domain and no more than 64 characters.
A project's name must be able to be sent within valid JSON, which could be any
UTF-8 character. However, this is constrained to the given backend where project
names are stored. For instance, MySQL's restrictions states that UTF-8 support
is constrained to the characters in the Basic Multilingual Plane (BMP).
Supplementary characters are not permitted. Note that this last restriction is
generally true for all ``names`` within resources of the Identity API.
List projects
=============
.. rest_method:: GET /v3/projects
Relationship: ``https://docs.openstack.org/api/openstack-identity/3/rel/projects``
Lists projects.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- domain_id: domain_id_query
- enabled: project_enabled_query
- is_domain: is_domain_query
- name: project_name_query
- parent_id: parent_id_query
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- links: link_collection
- projects: projects
- is_domain: is_domain_response_body
- description: project_description_response_body
- domain_id: project_domain_id_response_body
- enabled: project_enabled_response_body
- id: project_id
- links: link_response_body
- name: project_name_response_body
- parent_id: project_parent_id_response_body
Response Example
----------------
.. literalinclude:: ./samples/admin/projects-list-response.json
:language: javascript
Create project
==============
.. rest_method:: POST /v3/projects
Relationship: ``https://docs.openstack.org/api/openstack-identity/3/rel/projects``
Creates a project, where the project may act as a domain.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 201
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- project: project
- is_domain: is_domain_request_body
- description: project_description_request_body
- domain_id: project_domain_id_request_body
- enabled: project_enabled_request_body
- name: project_name_request_body
- parent_id: project_parent_id_request_body
Request Examples
----------------
Sample for creating a regular project:
.. literalinclude:: ./samples/admin/project-create-request.json
:language: javascript
Sample for creating a project that also acts as a domain:
.. literalinclude:: ./samples/admin/project-create-domain-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- project: project
- is_domain: is_domain_response_body
- description: project_description_response_body
- domain_id: project_domain_id_response_body
- enabled: project_enabled_response_body
- id: project_id
- links: link_response_body
- name: project_name_response_body
- parent_id: project_parent_id_response_body
Show project details
====================
.. rest_method:: GET /v3/projects/{project_id}
Relationship: ``https://docs.openstack.org/api/openstack-identity/3/rel/project``
Shows details for a project.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- project_id: project_id_path
- parents_as_list: parents_as_list
- subtree_as_list: subtree_as_list
- parents_as_ids: parents_as_ids
- subtree_as_ids: subtree_as_ids
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- project: project
- is_domain: is_domain_response_body
- description: project_description_response_body
- domain_id: project_domain_id_response_body
- enabled: project_enabled_response_body
- id: project_id
- links: link_response_body
- name: project_name_response_body
- parent_id: project_parent_id_response_body
Response Example
----------------
.. literalinclude:: ./samples/admin/project-show-response.json
:language: javascript
Response Example with ``parents_as_list``
-----------------------------------------
.. literalinclude:: ./samples/admin/project-show-parents-response.json
:language: javascript
Response Example with ``subtree_as_list``
-----------------------------------------
.. literalinclude:: ./samples/admin/project-show-subtree-response.json
:language: javascript
Update project
==============
.. rest_method:: PATCH /v3/projects/{project_id}
Relationship: ``https://docs.openstack.org/api/openstack-identity/3/rel/project``
Updates a project.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
- 409
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- project_id: project_id_path
- project: project
- is_domain: is_domain_request_body
- description: project_description_request_body
- domain_id: project_domain_id_update_request_body
- enabled: project_enabled_update_request_body
- name: project_name_update_request_body
Request Example
---------------
.. literalinclude:: ./samples/admin/project-update-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- project: project
- is_domain: is_domain_response_body
- description: project_description_response_body
- domain_id: project_domain_id_response_body
- enabled: project_enabled_response_body
- id: project_id
- name: project_name_response_body
- links: link_response_body
- parent_id: project_parent_id_response_body
Response Example
----------------
.. literalinclude:: ./samples/admin/project-update-response.json
:language: javascript
Delete project
==============
.. rest_method:: DELETE /v3/projects/{project_id}
Relationship: ``https://docs.openstack.org/api/openstack-identity/3/rel/project``
Deletes a project.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 204
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request Parameters
------------------
.. rest_parameters:: parameters.yaml
- project_id: project_id_path