The statless design was developed in the experiment branch, the experiment shows advantage in removing the status synchronization, uuid mapping compared to the stateful design, and also fully reduce the coupling with OpenStack services like Nova, Cinder. The overhead query latency for resources also acceptable. It's time to move the statless design to the master branch BP: https://blueprints.launchpad.net/tricircle/+spec/implement-stateless Change-Id: I51bbb60dc07da5b2e79f25e02209aa2eb72711ac Signed-off-by: Chaoyi Huang <joehuang@huawei.com>
3.9 KiB
Tricircle API v1
This API describes the ways of interacting with Tricircle service via HTTP protocol using Representational State Transfer(ReST).
Application Root [/]
Application Root provides links to all possible API methods for Tricircle. URLs for other resources described below are relative to Application Root.
API v1 Root [/v1/]
All API v1 URLs are relative to API v1 root.
Pod [/pods/{pod_id}]
A pod represents a region in Keystone. When operating a pod, Tricircle decides the correct endpoints to send request based on the region of the pod. Considering the 2-layers architecture of Tricircle, we also have 2 kinds of pods: top pod and bottom pod. A pod has the following attributes:
- pod_id
- pod_name
- pod_az_name
- dc_name
- az_name
pod_id is automatically generated when creating a site.
pod_name is specified by user but MUST match the region name registered in Keystone. When creating a bottom pod, Tricircle automatically creates a host aggregate and assigns the new availability zone id to
az_name. When az_name is empty, that means this pod is top region, no host aggregate will be generated. If az_name is not empty, that means this pod will belong to this availability zone. Multiple pods with same az_name means that these pods are under same availability zone.
pod_az_name is the az name in the bottom pod, it could be empty, if empty, then no az parameter will be added to the request to the bottom pod. If the pod_az_name is different than az_name, then the az parameter will be replaced to the pod_az_name when the request is forwarded to regarding bottom pod.
dc_name is the name of the data center where the pod is located.
URL Parameters
- pod_id: Pod id
Models
{
"pod_id": "302e02a6-523c-4a92-a8d1-4939b31a788c",
"pod_name": "pod1",
"pod_az_name": "az1",
"dc_name": "data center 1",
"az_name": "az1"
}
Retrieve Pod List [GET]
- URL: /pods
- Status: 200
- Returns: List of Pods
Response :
{
"pods": [
{
"pod_id": "f91ca3a5-d5c6-45d6-be4c-763f5a2c4aa3",
"pod_name": "RegionOne",
},
{
"pod_id": "302e02a6-523c-4a92-a8d1-4939b31a788c",
"pod_name": "pod1",
"pod_az_name": "az1",
"dc_name": "data center 1",
"az_name": "az1"
}
]
}
Retrieve a Single Pod [GET]
- URL: /pods/pod_id
- Status: 200
- Returns: Pod
Response :
{
"pod": {
"pod_id": "302e02a6-523c-4a92-a8d1-4939b31a788c",
"pod_name": "pod1",
"pod_az_name": "az1",
"dc_name": "data center 1",
"az_name": "az1"
}
}
Create a Pod [POST]
- URL: /pods
- Status: 201
- Returns: Created Pod
Request (application/json) :
# for the pod represent the region where the Tricircle is running
{
"pod": {
"pod_name": "RegionOne",
}
}
# for the bottom pod which is managed by Tricircle
{
"pod": {
"pod_name": "pod1",
"pod_az_name": "az1",
"dc_name": "data center 1",
"az_name": "az1"
}
}
Response :
# for the pod represent the region where the Tricircle is running
{
"pod": {
"pod_id": "302e02a6-523c-4a92-a8d1-4939b31a788c",
"pod_name": "RegionOne",
"pod_az_name": "",
"dc_name": "",
"az_name": ""
}
}
# for the bottom pod which is managed by Tricircle
{
"pod": {
"pod_id": "302e02a6-523c-4a92-a8d1-4939b31a788c",
"pod_name": "pod1",
"pod_az_name": "az1",
"dc_name": "data center 1",
"az_name": "az1"
}
}