Merge "The spec about adding extra_info field to the response of instances API"
This commit is contained in:
commit
0bbea03760
200
doc/source/specs/instances-extra-info.rst
Normal file
200
doc/source/specs/instances-extra-info.rst
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
===================================================
|
||||||
|
Add extra_info field for the response of protectable instances API
|
||||||
|
===================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/karbor/+spec/instances-extra-info
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
We can only query the id, name and type of protectable instance using the restfull API
|
||||||
|
of protectable instance. We can not get more info about the resource instance.
|
||||||
|
Some other info about instance is also needed when we protect resources with different
|
||||||
|
resources type.
|
||||||
|
For example: database instance. only the name of database instance is not enough. The
|
||||||
|
host ip, the database system name about the instance are also needed.
|
||||||
|
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
=========
|
||||||
|
|
||||||
|
Scenario #1
|
||||||
|
User want get the extra info of resource instances from the response of protectable
|
||||||
|
instances API. Now the protectable instances API only return the id, name and type of
|
||||||
|
the resource instances.
|
||||||
|
|
||||||
|
Scenario #2
|
||||||
|
User uses the Protectable Instances API to query the info of instances from the vendor's
|
||||||
|
backup software. User also can save the extra_info of resource instances to the plan,
|
||||||
|
not only the id, name, type of resources.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
Protectable Instances API:
|
||||||
|
When return a protectable instance, a new field would be available called
|
||||||
|
``extra-info``.
|
||||||
|
This field must be a dict in the format of::
|
||||||
|
|
||||||
|
{
|
||||||
|
"key1": "value1",
|
||||||
|
"key2": "value2",
|
||||||
|
}
|
||||||
|
|
||||||
|
Keys and values *must* both be strings.
|
||||||
|
The extra-info of instances is only used for presentation to a user/tenant.
|
||||||
|
The values in extra-info filed of a resource can not be used inside the protection
|
||||||
|
service of karbor and protection plugins.
|
||||||
|
|
||||||
|
The UI about the extra-info of protectable instances
|
||||||
|
Show the extra-info in resource tree page. Add a fa-chevron-right icon before the
|
||||||
|
Logo of the resource. The extra-info of this resource is collapsed by default.
|
||||||
|
If a user/tenant click the icon, The extra-info will be displayed under this resource.
|
||||||
|
Click the icon again, the extra-info will be collapsed.
|
||||||
|
|
||||||
|
Add a new field extra_info to the response for Protectable Instances API.
|
||||||
|
/{project_id}/protectables/{protectable_type}/instances:
|
||||||
|
get:
|
||||||
|
summary: Resource Instances
|
||||||
|
description: |
|
||||||
|
Return all the available instances for the given protectable type.
|
||||||
|
examples:
|
||||||
|
application/json: {
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
|
||||||
|
"type": "OS::Nova::Server",
|
||||||
|
"name": "My VM",
|
||||||
|
"extra_info": {
|
||||||
|
"hostname": "KarborServer",
|
||||||
|
"availability_zone": "AZOne",
|
||||||
|
"cell_name": "CellOne"
|
||||||
|
}
|
||||||
|
"dependent_resources": [
|
||||||
|
{
|
||||||
|
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
|
||||||
|
"type": "OS::Glance::Image",
|
||||||
|
"name": "cirros-0.3.4-x86_64-uec"
|
||||||
|
"extra_info": {
|
||||||
|
"availability_zone": "AZOne",
|
||||||
|
"cell_name": "CellOne"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
Protectable Plugins can return the extra_info of resource Instances.
|
||||||
|
|
||||||
|
The extra_info field in resource database table is only for presentation to a user/tenant.
|
||||||
|
The values in extra_info field can not be used and modified in karbor protection service.
|
||||||
|
Add a new field extra_info to resources database table;
|
||||||
|
resources
|
||||||
|
+-------------------------+--------------+------+-----+---------+-------+
|
||||||
|
| Field | Type | Null | Key | Default | Extra |
|
||||||
|
+-------------------------+--------------+------+-----+---------+-------+
|
||||||
|
| id | Integer | NO | PRI | NULL | |
|
||||||
|
| plan_id | varchar(255) | NO | FOR | NULL | |
|
||||||
|
| resource_id | varchar(36) | NO | | NULL | |
|
||||||
|
| resource_type | varchar(64) | NO | | NULL | |
|
||||||
|
| resource_name | varchar(255) | NO | | NULL | |
|
||||||
|
| resource_extra_info | Text | NO | | NULL | |
|
||||||
|
| created_at | Datetime | YES | | NULL | |
|
||||||
|
| updated_at | Datetime | YES | | NULL | |
|
||||||
|
| deleted_at | Datetime | YES | | NULL | |
|
||||||
|
| deleted | Boolean | NO | | NULL | |
|
||||||
|
+-------------------------+--------------+------+-----+---------+-------+
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
Do nothing, this is not a mission critical feature.
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Add a new field extra_info to the response for Protectable Instances API.
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The new API will be exposed to users via the python-karborclient.
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Write API
|
||||||
|
* Add to Karbor client
|
||||||
|
* Write tests
|
||||||
|
* Add a usage example for API
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Unit tests in Karbor and the python-karborclient.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
Add a usage example for API.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
None
|
Loading…
x
Reference in New Issue
Block a user