Spec for datastore visibility
Change-Id: I0042f828b3256a4ff351ae6fc60fff5d2edc9114
This commit is contained in:
parent
13054cea1f
commit
6d2483a238
310
specs/kilo/datastore-visibility.rst
Normal file
310
specs/kilo/datastore-visibility.rst
Normal file
@ -0,0 +1,310 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
..
|
||||||
|
|
||||||
|
=======================
|
||||||
|
Datastore Visibility
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Launchpad blueprint:
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/trove/+spec/datastore-visibility
|
||||||
|
|
||||||
|
Motivation: Since Trove supports multiple datastore types, there is a
|
||||||
|
need for Trove to have a greater control over the customer visibility
|
||||||
|
of these datastore types. This change enables Trove to control the
|
||||||
|
visibility of the various datastore types.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
There might be some datastore types, which the deployers require to be
|
||||||
|
active but not visible to customers in the production environment.
|
||||||
|
Example use case: Say we want to have an active datastore A in production
|
||||||
|
and not expose it to customers yet.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
This change suggests adding a visibility attribute to the datastore
|
||||||
|
versions. This enables the datastore to still be active, but not visible
|
||||||
|
to the users.
|
||||||
|
The visibility flag will ensure it is visible on the datastore list
|
||||||
|
call only to admins.
|
||||||
|
|
||||||
|
1. Visibility attribute to the datastore version. It can be:
|
||||||
|
public/private/unlisted/deprecated.
|
||||||
|
2. Adding a datastore version members table to add tenants for
|
||||||
|
private datastores.
|
||||||
|
3. If visibility is public:
|
||||||
|
|
||||||
|
- All users can view it in the list.
|
||||||
|
|
||||||
|
- All users can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
- All admin can view it in the list.
|
||||||
|
|
||||||
|
- All admin can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
4. If visibility is private:
|
||||||
|
|
||||||
|
- Members only can view it in the list.
|
||||||
|
|
||||||
|
- Members only can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
- All admin can view it in the list.
|
||||||
|
|
||||||
|
- All admin can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
- All admin can add and remove tenants as members of a datastore version.
|
||||||
|
|
||||||
|
5. If visibility is unlisted:
|
||||||
|
|
||||||
|
- All users can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
- All admin can view it in the list.
|
||||||
|
|
||||||
|
- All admin can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
6. If visibility is deprecated:
|
||||||
|
|
||||||
|
- All admin can view it in the list.
|
||||||
|
|
||||||
|
- All admin can make a GET call on the datastore version.
|
||||||
|
|
||||||
|
- Only admins can create a 'deprecated' instance.
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
-------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Database
|
||||||
|
--------
|
||||||
|
|
||||||
|
1. Database migration of adding a column 'visibility' to the
|
||||||
|
datastore_versions table.
|
||||||
|
|
||||||
|
Table datastore_versions::
|
||||||
|
|
||||||
|
Field | Type | Null | Key | Default | Extra|
|
||||||
|
---------------------------------------------------------------|
|
||||||
|
id | varchar(36) | NO | PRIMARY | NULL | |
|
||||||
|
datastore_id | varchar(36) | YES | MUL | NULL | |
|
||||||
|
name | varchar(255)| YES | | NULL | |
|
||||||
|
image_id | varchar(36) | NO | | NULL | |
|
||||||
|
packages | varchar(511)| YES | | NULL | |
|
||||||
|
active | tinyint(1) | NO | | NULL | |
|
||||||
|
manager | varchar(255)| YES | | NULL | |
|
||||||
|
visibility | varchar(255)| NO | | public | |
|
||||||
|
|
||||||
|
2. New table datastore_version_members which consists of columns - id,
|
||||||
|
datastore_version_id,tenant_id.
|
||||||
|
|
||||||
|
Table datastore_version_members::
|
||||||
|
|
||||||
|
Field | Type | Null | Key | Default | Extra|
|
||||||
|
-----------------------------------------------------------------------------------------|
|
||||||
|
id | varchar(36) | NO | PRIMARY | NULL | |
|
||||||
|
datastore_version_id| varchar(36) | YES | Foreign(datastore_version.id)| NULL | |
|
||||||
|
tenant_id | varchar(36) | NO | | NULL | |
|
||||||
|
|
||||||
|
Public API
|
||||||
|
----------
|
||||||
|
|
||||||
|
Admin calls related to datastore versions
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
1. Set visibility
|
||||||
|
|
||||||
|
POST /{tenant_id}/mgmt/datastores/{datastore}/versions/{id}
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
{
|
||||||
|
"datastore_version":{
|
||||||
|
"visibility":"<visibility value>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
2. Get datastore version - A visibility field added only for admin users.
|
||||||
|
|
||||||
|
GET /{tenant_id}/datastores/{datastore_id}/versions/{id}
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"version":{
|
||||||
|
"active":true,
|
||||||
|
"datastore":"9dd70f56-72e9-444b-9881-f564ac955056",
|
||||||
|
"id":"65747630-1ce7-4be0-92d4-8695825a475b",
|
||||||
|
"image":"32070be9-3cab-4cee-be05-524b4f379447",
|
||||||
|
"links":[
|
||||||
|
{
|
||||||
|
"href":"https://172.16.117.178:8779/v1.0/9a4e7142f34b4ce990a276c82b7beb15/datastores/versions/65747630-1ce7-4be0-92d4-8695825a475b",
|
||||||
|
"rel":"self"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"href":"https://172.16.117.178:8779/datastores/versions/65747630-1ce7-4be0-92d4-8695825a475b",
|
||||||
|
"rel":"bookmark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name":"5.5",
|
||||||
|
"packages":"mysql-server-5.5",
|
||||||
|
"visibility":"public"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Admin calls related to datastore version members
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
1. Add a member:
|
||||||
|
|
||||||
|
POST /{tenant_id}/mgmt/datastores/{datastore}/versions/{id}/members
|
||||||
|
|
||||||
|
Request::
|
||||||
|
|
||||||
|
{
|
||||||
|
"member":"<TENANT_ID>"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
2. Delete a member:
|
||||||
|
|
||||||
|
DELETE /{tenant_id}/mgmt/datastores/{datastore}/versions/{id}/members/{member_id}
|
||||||
|
|
||||||
|
|
||||||
|
3. Get a member:
|
||||||
|
|
||||||
|
GET /{tenant_id}/mgmt/datastores/{datastore}/versions/{id}/members/{member_id}
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"datastore_version_member":{
|
||||||
|
"id":"<MEMBER_ID>",
|
||||||
|
"datastore_version_id":"<DATASTORE_VERSION_ID>",
|
||||||
|
"member":"<TENANT_ID>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
4. List members for a datastore version
|
||||||
|
|
||||||
|
GET /{tenant_id}/mgmt/datastores/{datastore}/versions/{id}/members
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"datastore_version_members":[
|
||||||
|
{
|
||||||
|
"id":"<MEMBER_ID>",
|
||||||
|
"datastore_version_id":"<DATASTORE_VERSION_ID>",
|
||||||
|
"member":"<TENANT_ID>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"<MEMBER_ID>",
|
||||||
|
"datastore_version_id":"<DATASTORE_VERSION_ID>",
|
||||||
|
"member":"<TENANT_ID>"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
5. Get members by tenant id:
|
||||||
|
|
||||||
|
GET /{tenant_id}/mgmt/datastores/{datastore}/versions/members/{tenant_id}
|
||||||
|
|
||||||
|
Response::
|
||||||
|
|
||||||
|
{
|
||||||
|
"datastore_version_members":[
|
||||||
|
{
|
||||||
|
"id":"<MEMBER_ID>",
|
||||||
|
"datastore_version_id":"<DATASTORE_VERSION_ID>",
|
||||||
|
"member":"<TENANT_ID>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"<MEMBER_ID>",
|
||||||
|
"datastore_version_id":"<DATASTORE_VERSION_ID>",
|
||||||
|
"member":"<TENANT_ID>"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Internal API
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Guest Agent
|
||||||
|
-----------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary:
|
||||||
|
- Launchpad: riddhi89
|
||||||
|
- IRC: Riddhi
|
||||||
|
- Email: ridhi.j.shah@gmail.com
|
||||||
|
Co-Authored by:
|
||||||
|
- Theron Voran
|
||||||
|
- Email: theron.voran@rackspace.com
|
||||||
|
|
||||||
|
Milestones
|
||||||
|
----------
|
||||||
|
|
||||||
|
Kilo-1
|
||||||
|
Kilo-2
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
Already in review process - References [1].
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
---------------
|
||||||
|
|
||||||
|
It is in the process of review - References [1].
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Unit tests, fake tests and real mode tests.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
Since API calls have been added/modified, their respective samples
|
||||||
|
would need to be incorporated in the API docs.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
1. https://review.openstack.org/#/c/110197/
|
Loading…
x
Reference in New Issue
Block a user